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
@@ -1 +1 @@
1
- import{_ as _export_sfc,aR as useRoute,u as useRouter,B as ref,D as useEndpointResource,A as computed,E as useCommand,R as ROUTE_VISIBILITY_PUBLIC,Q as VIBE64_SURFACE_ID,H as watch,M as useRealtimeEvent,a as openBlock,c as createElementBlock,d as createBaseVNode,e as createVNode,w as withCtx,j as createTextVNode,t as toDisplayString,n as VBtn,b as createBlock,F as Fragment,r as createCommentVNode,bb as VSelect,a2 as VSwitch,bA as scopedDevelopmentApiUrl}from"./index-SBc6H2In.js";import{V as Vibe64AsyncModuleState}from"./Vibe64AsyncModuleState-Cel3OePx.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-n5T5l2pY.js";import{s as sessionListRealtimeShouldRefresh}from"./useVibe64SessionData-BToODuTg.js";import{r as requestVibe64AccountConnectionsDialog}from"./vibe64AccountConnectionsDialog-Cd1-kEer.js";import{a as VIBE64_PROJECT_CHANGED_EVENT,n as VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX,D as DEVELOPMENT_DATABASE_ENDPOINT,o as VIBE64_COLLABORATION_API_SUFFIX,C as COLLABORATION_ENDPOINT,q as VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX,r as PROMPT_HINTS_SETTINGS_ENDPOINT,t as VIBE64_ENGINEERING_API_SUFFIX,u as ENGINEERING_ENDPOINT,p as projectSettingsQueryKey,P as PROJECT_SETTINGS_ENDPOINT,v as engineeringSettingsQueryKey}from"./studioGateApi-B2eiydiA.js";import{V as VIBE64_SESSION_CHANGED_EVENT}from"./vibe64SessionRequestConfig-B7Llggdb.js";import{a as VRadio,V as VRadioGroup}from"./VRadioGroup-D6WRdUau.js";import{V as VTextarea}from"./VTextarea-CD6H_mtJ.js";import"./vueRefOrGetterValue-_KqAOFjr.js";import"./vibe64BrowserTabOrigin-DDSCqr3B.js";import"./useVibe64SessionSelection-D1wXIWTm.js";import"./vibe64SessionPanelModel-5UED-6V-.js";import"./vibe64SessionViewModel-C4e2otoM.js";const _hoisted_1$1={class:"project-settings"};const _hoisted_2={class:"project-settings__header"};const _hoisted_3={class:"project-settings__section","aria-labelledby":"engineering-approach-title"};const _hoisted_4={class:"project-settings__section-copy"};const _hoisted_5={key:0,class:"project-settings__scope"};const _hoisted_6={class:"project-settings__engineering-field"};const _hoisted_7={class:"project-settings__action"};const _hoisted_8={key:1,class:"project-settings__action"};const _hoisted_9={class:"project-settings__section","aria-labelledby":"development-database-title"};const _hoisted_10={class:"project-settings__section-copy"};const _hoisted_11={key:0};const _hoisted_12={key:1};const _hoisted_13={class:"project-settings__option"};const _hoisted_14={key:0,id:"development-database-session-reason",class:"project-settings__option-support"};const _hoisted_15={class:"project-settings__option"};const _hoisted_16={key:0,id:"development-database-project-reason",class:"project-settings__option-support"};const _hoisted_17={class:"project-settings__action"};const _hoisted_18={key:0};const _hoisted_19={key:1};const _hoisted_20={class:"project-settings__section","aria-labelledby":"ai-behaviour-title"};const _hoisted_21={class:"project-settings__section-copy"};const _hoisted_22={class:"project-settings__scope"};const _hoisted_23={class:"project-settings__ai-fields"};const _hoisted_24={class:"project-settings__action"};const _hoisted_25={key:0};const _hoisted_26={key:1};const _hoisted_27={key:2};const _sfc_main$1={__name:"ProjectSettingsPanel",setup(__props){const projectSlug=useVibe64ProjectSlug();const route=useRoute();const router=useRouter();const scopeDraft=ref("session");const collaborationDraft=ref(normalizeCollaborationDraft());const savedCollaboration=ref(normalizeCollaborationDraft());const promptHintsDraft=ref(true);const savedPromptHints=ref(true);const engineeringProfileDraft=ref("");const savedEngineeringProfile=ref("");const routeSessionId=computed(()=>String(route.query.sessionId||"").trim());const resource=useEndpointResource({fallbackLoadError:"Project settings could not load.",path:computed(()=>scopedDevelopmentApiUrl(PROJECT_SETTINGS_ENDPOINT,projectSlug.value)),queryKey:computed(()=>projectSettingsQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,routeSessionId.value)),readQuery:computed(()=>routeSessionId.value?{sessionId:routeSessionId.value}:{}),refreshOnPull:true,requestRecoveryLabel:"Project settings"});const engineeringResource=useEndpointResource({fallbackLoadError:"Engineering approach could not load.",path:computed(()=>scopedDevelopmentApiUrl(ENGINEERING_ENDPOINT,projectSlug.value)),queryKey:computed(()=>engineeringSettingsQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,routeSessionId.value)),readQuery:computed(()=>routeSessionId.value?{sessionId:routeSessionId.value}:{}),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT,matches:()=>!engineeringSaveCommand.isRunning},refreshOnPull:true,requestRecoveryLabel:"Engineering approach"});const databaseSaveCommand=useCommand({access:"never",apiSuffix:VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:DEVELOPMENT_DATABASE_ENDPOINT}),buildRawPayload:(_model,{context})=>({scope:context.scope}),fallbackRunError:"Development database choice could not be saved.",messages:{error:"Development database choice could not be saved.",success:"Development database choice saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.development-database.scope.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const collaborationSaveCommand=useCommand({access:"never",apiSuffix:VIBE64_COLLABORATION_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:COLLABORATION_ENDPOINT}),buildRawPayload:(_model,{context})=>({...context.collaboration,...context.sessionId?{sessionId:context.sessionId}:{}}),fallbackRunError:"Collaboration guidance could not be saved.",messages:{error:"Collaboration guidance could not be saved.",success:"Collaboration guidance saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.collaboration.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const promptHintsSaveCommand=useCommand({access:"never",apiSuffix:VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:PROMPT_HINTS_SETTINGS_ENDPOINT}),buildRawPayload:(_model,{context})=>({promptHints:context.promptHints}),fallbackRunError:"Prompt suggestions could not be saved.",messages:{error:"Prompt suggestions could not be saved.",success:"Prompt suggestions saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.prompt-hints.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const engineeringSaveCommand=useCommand({access:"never",apiSuffix:VIBE64_ENGINEERING_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:ENGINEERING_ENDPOINT}),buildRawPayload:(_model,{context})=>({profile:context.profile,...context.sessionId?{sessionId:context.sessionId}:{}}),fallbackRunError:"Engineering approach could not be saved.",messages:{error:"Engineering approach could not be saved.",success:"Engineering approach saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.engineering.profile.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const developmentDatabase=computed(()=>{var _a;return((_a=resource.data.value)==null?void 0:_a.developmentDatabase)||{}});const managed=computed(()=>developmentDatabase.value.managed===true);const canChange=computed(()=>developmentDatabase.value.canChange===true);const disabledReason=computed(()=>String(developmentDatabase.value.disabledReason||""));const sessionScopeOption=computed(()=>{var _a;return((_a=developmentDatabase.value.options)==null?void 0:_a.session)||{}});const projectScopeOption=computed(()=>{var _a;return((_a=developmentDatabase.value.options)==null?void 0:_a.project)||{}});const sessionScopeAvailable=computed(()=>sessionScopeOption.value.available===true);const projectScopeAvailable=computed(()=>projectScopeOption.value.available===true);const sessionScopeReason=computed(()=>String(sessionScopeOption.value.disabledReason||""));const projectScopeReason=computed(()=>String(projectScopeOption.value.disabledReason||""));const scopeDraftAvailable=computed(()=>scopeDraft.value==="project"?projectScopeAvailable.value:sessionScopeAvailable.value);const collaboration=computed(()=>{var _a;return((_a=resource.data.value)==null?void 0:_a.collaboration)||{}});const collaborationAvailable=computed(()=>collaboration.value.available===true);const collaborationCanEdit=computed(()=>collaboration.value.canEdit===true);const collaborationSourceLabel=computed(()=>{var _a;return((_a=collaboration.value.source)==null?void 0:_a.rootKind)==="session-source"?"This session's project source":"This project source"});const collaborationUnavailableReason=computed(()=>String(collaboration.value.unavailableReason||"Collaboration guidance is not available for this source."));const toneOptions=computed(()=>collaborationOptions("tone"));const responseLengthOptions=computed(()=>collaborationOptions("responseLength"));const experienceOptions=computed(()=>collaborationOptions("experience"));const explanationStyleOptions=computed(()=>collaborationOptions("explanationStyle"));const promptHints=computed(()=>{var _a;return((_a=resource.data.value)==null?void 0:_a.promptHints)||{}});const promptHintsCanEdit=computed(()=>promptHints.value.canEdit===true);const engineering=computed(()=>{var _a;return((_a=engineeringResource.data.value)==null?void 0:_a.engineering)||{}});const engineeringAvailable=computed(()=>engineering.value.available===true);const engineeringProfiles=computed(()=>Array.isArray(engineering.value.profiles)?engineering.value.profiles:[]);const engineeringSourceLabel=computed(()=>{var _a;return((_a=engineering.value.source)==null?void 0:_a.rootKind)==="session-source"?"This session's project source":"This project source"});const engineeringUnavailableReason=computed(()=>String(engineering.value.unavailableReason||"An engineering profile is not available for this source."));const selectedEngineeringDescription=computed(()=>{var _a;return String(((_a=engineeringProfiles.value.find(profile=>profile.id===engineeringProfileDraft.value))==null?void 0:_a.description)||"")});const engineeringStatusText=computed(()=>engineering.value.status==="defaulted"?"The focused default is active. Saving records the choice in genesis/engineering.md.":"This choice is stored in genesis/engineering.md and follows the source.");const loading=computed(()=>resource.isLoading.value===true||engineeringResource.isLoading.value===true);const initialLoading=computed(()=>loading.value&&(!resource.data.value||!engineeringResource.data.value));const loadError=computed(()=>String(resource.loadError.value||engineeringResource.loadError.value||""));const databaseSaving=computed(()=>databaseSaveCommand.isRunning===true);const collaborationSaving=ref(false);const promptHintsSaving=computed(()=>promptHintsSaveCommand.isRunning===true);const engineeringSaving=ref(false);const databaseChanged=computed(()=>managed.value&&scopeDraft.value!==developmentDatabase.value.scope);const collaborationChanged=computed(()=>JSON.stringify(collaborationDraft.value)!==JSON.stringify(savedCollaboration.value));const promptHintsChanged=computed(()=>promptHintsDraft.value!==savedPromptHints.value);const engineeringChanged=computed(()=>engineeringAvailable.value&&Boolean(engineeringProfileDraft.value)&&engineeringProfileDraft.value!==savedEngineeringProfile.value);watch(()=>developmentDatabase.value.scope,scope=>{if(["project","session"].includes(scope)){scopeDraft.value=scope}},{immediate:true});let collaborationSource=null;watch([projectSlug,collaboration],([slug,value])=>{if(!value.source)return;const sourceChanged=!collaborationSource||collaborationSource.projectSlug!==slug||collaborationSource.rootKind!==value.source.rootKind||collaborationSource.sessionId!==value.source.sessionId;const next=normalizeCollaborationDraft(value);if(sourceChanged||!collaborationChanged.value){collaborationDraft.value=next}savedCollaboration.value={...next};collaborationSource={projectSlug:slug,...value.source}},{immediate:true});watch(()=>promptHints.value.enabled,value=>{const enabled=value!==false;if(!promptHintsChanged.value){promptHintsDraft.value=enabled}savedPromptHints.value=enabled},{immediate:true});let engineeringSource=null;watch([projectSlug,engineering],([slug,value])=>{var _a,_b;if(!value.source)return;const sourceChanged=!engineeringSource||engineeringSource.projectSlug!==slug||engineeringSource.rootKind!==value.source.rootKind||engineeringSource.sessionId!==value.source.sessionId;const profile=String(((_a=value.profile)==null?void 0:_a.id)||"").trim();if(sourceChanged||engineeringProfileDraft.value===savedEngineeringProfile.value){engineeringProfileDraft.value=profile}savedEngineeringProfile.value=profile;engineeringSource={projectSlug:slug,...value.source};const sourceSessionId=String(((_b=value.source)==null?void 0:_b.sessionId)||"").trim();if(!routeSessionId.value&&sourceSessionId){void router.replace({query:{...route.query,sessionId:sourceSessionId}})}},{immediate:true});useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:sessionListRealtimeShouldRefresh,onEvent(){void resource.reload();void engineeringResource.reload()}});async function refresh(){await Promise.all([resource.reload(),engineeringResource.reload()])}function collaborationOptions(field=""){var _a;const choices=(_a=collaboration.value.choices)==null?void 0:_a[field];return(Array.isArray(choices)?choices:[]).flatMap(choice=>{const value=String((choice==null?void 0:choice.id)||"").trim();const label=String((choice==null?void 0:choice.name)||"").trim();return value&&label?[{label,value}]:[]})}function normalizeCollaborationDraft(value={}){return{tone:String((value==null?void 0:value.tone)||""),responseLength:String((value==null?void 0:value.responseLength)||""),experience:String((value==null?void 0:value.experience)||""),explanationStyle:String((value==null?void 0:value.explanationStyle)||""),requirements:String((value==null?void 0:value.requirements)||"")}}async function saveDatabase(){if(!databaseChanged.value||!canChange.value||!scopeDraftAvailable.value||databaseSaving.value){return}await databaseSaveCommand.run({scope:scopeDraft.value});await resource.reload()}async function saveCollaboration(){var _a;if(!collaborationChanged.value||!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value){return}collaborationSaving.value=true;try{try{await collaborationSaveCommand.run({collaboration:normalizeCollaborationDraft(collaborationDraft.value),sessionId:routeSessionId.value||String(((_a=collaboration.value.source)==null?void 0:_a.sessionId)||"").trim()})}catch{return}await resource.reload()}finally{collaborationSaving.value=false}}async function savePromptHints(){if(!promptHintsChanged.value||!promptHintsCanEdit.value||promptHintsSaving.value){return}await promptHintsSaveCommand.run({promptHints:promptHintsDraft.value});await resource.reload()}async function saveEngineeringProfile(){var _a;if(!engineeringChanged.value||engineeringSaving.value){return}engineeringSaving.value=true;try{await engineeringSaveCommand.run({profile:engineeringProfileDraft.value,sessionId:routeSessionId.value||String(((_a=engineering.value.source)==null?void 0:_a.sessionId)||"").trim()})}catch{}finally{try{await engineeringResource.reload()}finally{engineeringSaving.value=false}}}function openPersonalSettings(){requestVibe64AccountConnectionsDialog({refresh:false,section:"profile"})}function reloadPage(){if(typeof window!=="undefined"){window.location.reload()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$1,[createBaseVNode("header",_hoisted_2,[_cache[8]||(_cache[8]=createBaseVNode("div",null,[createBaseVNode("h1",null,"Project settings"),createBaseVNode("p",null,"Project-wide Vibe64 behavior and source-owned engineering choices.")],-1)),createVNode(VBtn,{class:"project-settings__refresh",disabled:loading.value,size:"small",type:"button",variant:"tonal",onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?"Refreshing…":"Refresh"),1)]),_:1},8,["disabled"])]),initialLoading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState,{key:0,label:"Project settings",loading:loading.value,message:loadError.value||"Loading project settings.","min-height":"12rem",onReload:reloadPage,onRetry:refresh},null,8,["loading","message"])):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode("section",_hoisted_3,[createBaseVNode("div",_hoisted_4,[engineeringAvailable.value?(openBlock(),createElementBlock("p",_hoisted_5,toDisplayString(engineeringSourceLabel.value),1)):createCommentVNode("",true),_cache[9]||(_cache[9]=createBaseVNode("h2",{id:"engineering-approach-title"},"Engineering approach",-1)),_cache[10]||(_cache[10]=createBaseVNode("p",null," Choose how cautiously the AI changes this software. Every profile still requires simple, targeted code and a question before necessary complexity is added. ",-1))]),engineeringAvailable.value?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode("div",_hoisted_6,[createVNode(VSelect,{modelValue:engineeringProfileDraft.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>engineeringProfileDraft.value=$event),disabled:engineeringSaving.value,density:"comfortable","hide-details":"auto",hint:selectedEngineeringDescription.value,"item-title":"name","item-value":"id",items:engineeringProfiles.value,label:"Engineering profile","persistent-hint":"",variant:"outlined"},null,8,["modelValue","disabled","hint","items"])]),createBaseVNode("div",_hoisted_7,[createBaseVNode("p",null,toDisplayString(engineeringStatusText.value),1),createVNode(VBtn,{disabled:!engineeringChanged.value||engineeringSaving.value,color:"primary",size:"small",type:"button",variant:"flat",onClick:saveEngineeringProfile},{default:withCtx(()=>[createTextVNode(toDisplayString(engineeringSaving.value?"Saving…":"Save engineering approach"),1)]),_:1},8,["disabled"])])],64)):(openBlock(),createElementBlock("div",_hoisted_8,[createBaseVNode("p",null,toDisplayString(engineeringUnavailableReason.value),1)]))]),createBaseVNode("section",_hoisted_9,[createBaseVNode("div",_hoisted_10,[_cache[11]||(_cache[11]=createBaseVNode("h2",{id:"development-database-title"},"Development database",-1)),managed.value?(openBlock(),createElementBlock("p",_hoisted_11," Choose whether development sessions share data or receive isolated databases. This choice is not supplied to the application as an environment value. ")):(openBlock(),createElementBlock("p",_hoisted_12," This Vibe64 installation does not manage development databases. The application receives its database connection through the project Env configuration. "))]),managed.value?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VRadioGroup,{modelValue:scopeDraft.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>scopeDraft.value=$event),"aria-labelledby":"development-database-title",class:"project-settings__options",disabled:databaseSaving.value,"hide-details":""},{default:withCtx(()=>[createBaseVNode("div",_hoisted_13,[createVNode(VRadio,{"aria-describedby":sessionScopeReason.value?"development-database-session-reason":void 0,disabled:!sessionScopeAvailable.value,label:"A separate database for each session",value:"session"},null,8,["aria-describedby","disabled"]),sessionScopeReason.value?(openBlock(),createElementBlock("p",_hoisted_14,toDisplayString(sessionScopeReason.value),1)):createCommentVNode("",true)]),createBaseVNode("div",_hoisted_15,[createVNode(VRadio,{"aria-describedby":projectScopeReason.value?"development-database-project-reason":void 0,disabled:!projectScopeAvailable.value,label:"One database shared by this project",value:"project"},null,8,["aria-describedby","disabled"]),projectScopeReason.value?(openBlock(),createElementBlock("p",_hoisted_16,toDisplayString(projectScopeReason.value),1)):createCommentVNode("",true)])]),_:1},8,["modelValue","disabled"]),createBaseVNode("div",_hoisted_17,[disabledReason.value?(openBlock(),createElementBlock("p",_hoisted_18,toDisplayString(disabledReason.value),1)):scopeDraft.value==="project"?(openBlock(),createElementBlock("p",_hoisted_19," Data and schema changes will be visible to every project session and remain after a session is archived. ")):createCommentVNode("",true),createVNode(VBtn,{disabled:!databaseChanged.value||!canChange.value||!scopeDraftAvailable.value||databaseSaving.value,color:"primary",size:"small",type:"button",variant:"flat",onClick:saveDatabase},{default:withCtx(()=>[createTextVNode(toDisplayString(databaseSaving.value?"Saving…":"Save database choice"),1)]),_:1},8,["disabled"])])],64)):createCommentVNode("",true)]),createBaseVNode("section",_hoisted_20,[createBaseVNode("div",_hoisted_21,[createBaseVNode("p",_hoisted_22,toDisplayString(collaborationSourceLabel.value),1),_cache[13]||(_cache[13]=createBaseVNode("h2",{id:"ai-behaviour-title"},"AI behaviour",-1)),_cache[14]||(_cache[14]=createBaseVNode("p",null," Collaboration guidance is stored in genesis/collaboration.md and follows this source. Prompt suggestions remain a separate Vibe64 setting. ",-1)),createVNode(VBtn,{class:"project-settings__account-link",size:"small",type:"button",variant:"text",onClick:openPersonalSettings},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(" Set your Vibe64 name ",-1)])]),_:1})]),createBaseVNode("div",_hoisted_23,[createVNode(VSelect,{modelValue:collaborationDraft.value.tone,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>collaborationDraft.value.tone=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"comfortable","hide-details":"","item-title":"label","item-value":"value",items:toneOptions.value,label:"Tone",variant:"outlined"},null,8,["modelValue","disabled","items"]),createVNode(VSelect,{modelValue:collaborationDraft.value.responseLength,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>collaborationDraft.value.responseLength=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"comfortable","hide-details":"","item-title":"label","item-value":"value",items:responseLengthOptions.value,label:"Response length",variant:"outlined"},null,8,["modelValue","disabled","items"]),createVNode(VSelect,{modelValue:collaborationDraft.value.experience,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>collaborationDraft.value.experience=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"comfortable","hide-details":"","item-title":"label","item-value":"value",items:experienceOptions.value,label:"Experience level",variant:"outlined"},null,8,["modelValue","disabled","items"]),createVNode(VSelect,{modelValue:collaborationDraft.value.explanationStyle,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>collaborationDraft.value.explanationStyle=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"comfortable","hide-details":"","item-title":"label","item-value":"value",items:explanationStyleOptions.value,label:"Explanation style",variant:"outlined"},null,8,["modelValue","disabled","items"]),createVNode(VTextarea,{modelValue:collaborationDraft.value.requirements,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>collaborationDraft.value.requirements=$event),class:"project-settings__ai-note",disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"compact","hide-details":"",label:"Project requirements (optional)",placeholder:"For example: use Australian English.",rows:"2",variant:"outlined"},null,8,["modelValue","disabled"])]),createBaseVNode("div",_hoisted_24,[!collaborationAvailable.value?(openBlock(),createElementBlock("p",_hoisted_25,toDisplayString(collaborationUnavailableReason.value),1)):!collaborationCanEdit.value?(openBlock(),createElementBlock("p",_hoisted_26," Only the project owner can change these controls in Settings. Anyone who can edit this source can change genesis/collaboration.md directly. ")):(openBlock(),createElementBlock("p",_hoisted_27," Collaboration changes apply when an assistant conversation next establishes or refreshes stable context; existing history and live Codex instructions do not change. ")),createVNode(VBtn,{disabled:!collaborationChanged.value||!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,color:"primary",size:"small",type:"button",variant:"flat",onClick:saveCollaboration},{default:withCtx(()=>[createTextVNode(toDisplayString(collaborationSaving.value?"Saving…":"Save collaboration"),1)]),_:1},8,["disabled"]),createVNode(VSwitch,{modelValue:promptHintsDraft.value,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>promptHintsDraft.value=$event),class:"project-settings__ai-hints",color:"primary",disabled:!promptHintsCanEdit.value||promptHintsSaving.value,"hide-details":"",label:"Suggest useful next prompts"},null,8,["modelValue","disabled"]),_cache[15]||(_cache[15]=createBaseVNode("p",null," Prompt suggestions are a Vibe64 helper only; this choice never changes coding-agent instructions. ",-1)),createVNode(VBtn,{disabled:!promptHintsChanged.value||!promptHintsCanEdit.value||promptHintsSaving.value,color:"primary",size:"small",type:"button",variant:"flat",onClick:savePromptHints},{default:withCtx(()=>[createTextVNode(toDisplayString(promptHintsSaving.value?"Saving…":"Save prompt suggestions"),1)]),_:1},8,["disabled"])])])],64))])}}};const ProjectSettingsPanel=_export_sfc(_sfc_main$1,[["__scopeId","data-v-4944bdea"]]);const _hoisted_1={class:"vibe64-dashboard-page"};const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[createVNode(ProjectSettingsPanel)])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-d998a641"]]);export{index as default};
1
+ import{_ as _export_sfc,aR as useRoute,u as useRouter,B as ref,D as useEndpointResource,A as computed,E as useCommand,R as ROUTE_VISIBILITY_PUBLIC,Q as VIBE64_SURFACE_ID,H as watch,M as useRealtimeEvent,a as openBlock,c as createElementBlock,d as createBaseVNode,e as createVNode,w as withCtx,j as createTextVNode,t as toDisplayString,n as VBtn,b as createBlock,F as Fragment,r as createCommentVNode,bb as VSelect,a2 as VSwitch,bA as scopedDevelopmentApiUrl}from"./index-C4KnwA0g.js";import{V as Vibe64AsyncModuleState}from"./Vibe64AsyncModuleState-DuuzlJDp.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-DcDkjbLT.js";import{s as sessionListRealtimeShouldRefresh}from"./useVibe64SessionData-BHLSmuPm.js";import{r as requestVibe64AccountConnectionsDialog}from"./vibe64AccountConnectionsDialog-Cd1-kEer.js";import{a as VIBE64_PROJECT_CHANGED_EVENT,n as VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX,D as DEVELOPMENT_DATABASE_ENDPOINT,o as VIBE64_COLLABORATION_API_SUFFIX,C as COLLABORATION_ENDPOINT,q as VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX,r as PROMPT_HINTS_SETTINGS_ENDPOINT,t as VIBE64_ENGINEERING_API_SUFFIX,u as ENGINEERING_ENDPOINT,p as projectSettingsQueryKey,P as PROJECT_SETTINGS_ENDPOINT,v as engineeringSettingsQueryKey}from"./studioGateApi-BwBnOYBp.js";import{V as VIBE64_SESSION_CHANGED_EVENT}from"./vibe64SessionRequestConfig-uGWcyQY6.js";import{a as VRadio,V as VRadioGroup}from"./VRadioGroup-BuRMvs7d.js";import{V as VTextarea}from"./VTextarea-Duvzvmjq.js";import"./vueRefOrGetterValue-CV9c3oBd.js";import"./vibe64BrowserTabOrigin-DDSCqr3B.js";import"./useVibe64SessionSelection-G6KQKJxb.js";import"./vibe64SessionPanelModel-DDaXjAJ_.js";import"./vibe64SessionViewModel-C4e2otoM.js";const _hoisted_1$1={class:"project-settings"};const _hoisted_2={class:"project-settings__header"};const _hoisted_3={class:"project-settings__section","aria-labelledby":"engineering-approach-title"};const _hoisted_4={class:"project-settings__section-copy"};const _hoisted_5={key:0,class:"project-settings__scope"};const _hoisted_6={class:"project-settings__engineering-field"};const _hoisted_7={class:"project-settings__action"};const _hoisted_8={key:1,class:"project-settings__action"};const _hoisted_9={class:"project-settings__section","aria-labelledby":"development-database-title"};const _hoisted_10={class:"project-settings__section-copy"};const _hoisted_11={key:0};const _hoisted_12={key:1};const _hoisted_13={class:"project-settings__option"};const _hoisted_14={key:0,id:"development-database-session-reason",class:"project-settings__option-support"};const _hoisted_15={class:"project-settings__option"};const _hoisted_16={key:0,id:"development-database-project-reason",class:"project-settings__option-support"};const _hoisted_17={class:"project-settings__action"};const _hoisted_18={key:0};const _hoisted_19={key:1};const _hoisted_20={class:"project-settings__section","aria-labelledby":"ai-behaviour-title"};const _hoisted_21={class:"project-settings__section-copy"};const _hoisted_22={class:"project-settings__scope"};const _hoisted_23={class:"project-settings__ai-fields"};const _hoisted_24={class:"project-settings__action"};const _hoisted_25={key:0};const _hoisted_26={key:1};const _hoisted_27={key:2};const _sfc_main$1={__name:"ProjectSettingsPanel",setup(__props){const projectSlug=useVibe64ProjectSlug();const route=useRoute();const router=useRouter();const scopeDraft=ref("session");const collaborationDraft=ref(normalizeCollaborationDraft());const savedCollaboration=ref(normalizeCollaborationDraft());const promptHintsDraft=ref(true);const savedPromptHints=ref(true);const engineeringProfileDraft=ref("");const savedEngineeringProfile=ref("");const routeSessionId=computed(()=>String(route.query.sessionId||"").trim());const resource=useEndpointResource({fallbackLoadError:"Project settings could not load.",path:computed(()=>scopedDevelopmentApiUrl(PROJECT_SETTINGS_ENDPOINT,projectSlug.value)),queryKey:computed(()=>projectSettingsQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,routeSessionId.value)),readQuery:computed(()=>routeSessionId.value?{sessionId:routeSessionId.value}:{}),refreshOnPull:true,requestRecoveryLabel:"Project settings"});const engineeringResource=useEndpointResource({fallbackLoadError:"Engineering approach could not load.",path:computed(()=>scopedDevelopmentApiUrl(ENGINEERING_ENDPOINT,projectSlug.value)),queryKey:computed(()=>engineeringSettingsQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,routeSessionId.value)),readQuery:computed(()=>routeSessionId.value?{sessionId:routeSessionId.value}:{}),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT,matches:()=>!engineeringSaveCommand.isRunning},refreshOnPull:true,requestRecoveryLabel:"Engineering approach"});const databaseSaveCommand=useCommand({access:"never",apiSuffix:VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:DEVELOPMENT_DATABASE_ENDPOINT}),buildRawPayload:(_model,{context})=>({scope:context.scope}),fallbackRunError:"Development database choice could not be saved.",messages:{error:"Development database choice could not be saved.",success:"Development database choice saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.development-database.scope.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const collaborationSaveCommand=useCommand({access:"never",apiSuffix:VIBE64_COLLABORATION_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:COLLABORATION_ENDPOINT}),buildRawPayload:(_model,{context})=>({...context.collaboration,...context.sessionId?{sessionId:context.sessionId}:{}}),fallbackRunError:"Collaboration guidance could not be saved.",messages:{error:"Collaboration guidance could not be saved.",success:"Collaboration guidance saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.collaboration.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const promptHintsSaveCommand=useCommand({access:"never",apiSuffix:VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:PROMPT_HINTS_SETTINGS_ENDPOINT}),buildRawPayload:(_model,{context})=>({promptHints:context.promptHints}),fallbackRunError:"Prompt suggestions could not be saved.",messages:{error:"Prompt suggestions could not be saved.",success:"Prompt suggestions saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.prompt-hints.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const engineeringSaveCommand=useCommand({access:"never",apiSuffix:VIBE64_ENGINEERING_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:ENGINEERING_ENDPOINT}),buildRawPayload:(_model,{context})=>({profile:context.profile,...context.sessionId?{sessionId:context.sessionId}:{}}),fallbackRunError:"Engineering approach could not be saved.",messages:{error:"Engineering approach could not be saved.",success:"Engineering approach saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.engineering.profile.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const developmentDatabase=computed(()=>{var _a;return((_a=resource.data.value)==null?void 0:_a.developmentDatabase)||{}});const managed=computed(()=>developmentDatabase.value.managed===true);const canChange=computed(()=>developmentDatabase.value.canChange===true);const disabledReason=computed(()=>String(developmentDatabase.value.disabledReason||""));const sessionScopeOption=computed(()=>{var _a;return((_a=developmentDatabase.value.options)==null?void 0:_a.session)||{}});const projectScopeOption=computed(()=>{var _a;return((_a=developmentDatabase.value.options)==null?void 0:_a.project)||{}});const sessionScopeAvailable=computed(()=>sessionScopeOption.value.available===true);const projectScopeAvailable=computed(()=>projectScopeOption.value.available===true);const sessionScopeReason=computed(()=>String(sessionScopeOption.value.disabledReason||""));const projectScopeReason=computed(()=>String(projectScopeOption.value.disabledReason||""));const scopeDraftAvailable=computed(()=>scopeDraft.value==="project"?projectScopeAvailable.value:sessionScopeAvailable.value);const collaboration=computed(()=>{var _a;return((_a=resource.data.value)==null?void 0:_a.collaboration)||{}});const collaborationAvailable=computed(()=>collaboration.value.available===true);const collaborationCanEdit=computed(()=>collaboration.value.canEdit===true);const collaborationSourceLabel=computed(()=>{var _a;return((_a=collaboration.value.source)==null?void 0:_a.rootKind)==="session-source"?"This session's project source":"This project source"});const collaborationUnavailableReason=computed(()=>String(collaboration.value.unavailableReason||"Collaboration guidance is not available for this source."));const toneOptions=computed(()=>collaborationOptions("tone"));const responseLengthOptions=computed(()=>collaborationOptions("responseLength"));const experienceOptions=computed(()=>collaborationOptions("experience"));const explanationStyleOptions=computed(()=>collaborationOptions("explanationStyle"));const promptHints=computed(()=>{var _a;return((_a=resource.data.value)==null?void 0:_a.promptHints)||{}});const promptHintsCanEdit=computed(()=>promptHints.value.canEdit===true);const engineering=computed(()=>{var _a;return((_a=engineeringResource.data.value)==null?void 0:_a.engineering)||{}});const engineeringAvailable=computed(()=>engineering.value.available===true);const engineeringProfiles=computed(()=>Array.isArray(engineering.value.profiles)?engineering.value.profiles:[]);const engineeringSourceLabel=computed(()=>{var _a;return((_a=engineering.value.source)==null?void 0:_a.rootKind)==="session-source"?"This session's project source":"This project source"});const engineeringUnavailableReason=computed(()=>String(engineering.value.unavailableReason||"An engineering profile is not available for this source."));const selectedEngineeringDescription=computed(()=>{var _a;return String(((_a=engineeringProfiles.value.find(profile=>profile.id===engineeringProfileDraft.value))==null?void 0:_a.description)||"")});const engineeringStatusText=computed(()=>engineering.value.status==="defaulted"?"The focused default is active. Saving records the choice in genesis/engineering.md.":"This choice is stored in genesis/engineering.md and follows the source.");const loading=computed(()=>resource.isLoading.value===true||engineeringResource.isLoading.value===true);const initialLoading=computed(()=>loading.value&&(!resource.data.value||!engineeringResource.data.value));const loadError=computed(()=>String(resource.loadError.value||engineeringResource.loadError.value||""));const databaseSaving=computed(()=>databaseSaveCommand.isRunning===true);const collaborationSaving=ref(false);const promptHintsSaving=computed(()=>promptHintsSaveCommand.isRunning===true);const engineeringSaving=ref(false);const databaseChanged=computed(()=>managed.value&&scopeDraft.value!==developmentDatabase.value.scope);const collaborationChanged=computed(()=>JSON.stringify(collaborationDraft.value)!==JSON.stringify(savedCollaboration.value));const promptHintsChanged=computed(()=>promptHintsDraft.value!==savedPromptHints.value);const engineeringChanged=computed(()=>engineeringAvailable.value&&Boolean(engineeringProfileDraft.value)&&engineeringProfileDraft.value!==savedEngineeringProfile.value);watch(()=>developmentDatabase.value.scope,scope=>{if(["project","session"].includes(scope)){scopeDraft.value=scope}},{immediate:true});let collaborationSource=null;watch([projectSlug,collaboration],([slug,value])=>{if(!value.source)return;const sourceChanged=!collaborationSource||collaborationSource.projectSlug!==slug||collaborationSource.rootKind!==value.source.rootKind||collaborationSource.sessionId!==value.source.sessionId;const next=normalizeCollaborationDraft(value);if(sourceChanged||!collaborationChanged.value){collaborationDraft.value=next}savedCollaboration.value={...next};collaborationSource={projectSlug:slug,...value.source}},{immediate:true});watch(()=>promptHints.value.enabled,value=>{const enabled=value!==false;if(!promptHintsChanged.value){promptHintsDraft.value=enabled}savedPromptHints.value=enabled},{immediate:true});let engineeringSource=null;watch([projectSlug,engineering],([slug,value])=>{var _a,_b;if(!value.source)return;const sourceChanged=!engineeringSource||engineeringSource.projectSlug!==slug||engineeringSource.rootKind!==value.source.rootKind||engineeringSource.sessionId!==value.source.sessionId;const profile=String(((_a=value.profile)==null?void 0:_a.id)||"").trim();if(sourceChanged||engineeringProfileDraft.value===savedEngineeringProfile.value){engineeringProfileDraft.value=profile}savedEngineeringProfile.value=profile;engineeringSource={projectSlug:slug,...value.source};const sourceSessionId=String(((_b=value.source)==null?void 0:_b.sessionId)||"").trim();if(!routeSessionId.value&&sourceSessionId){void router.replace({query:{...route.query,sessionId:sourceSessionId}})}},{immediate:true});useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:sessionListRealtimeShouldRefresh,onEvent(){void resource.reload();void engineeringResource.reload()}});async function refresh(){await Promise.all([resource.reload(),engineeringResource.reload()])}function collaborationOptions(field=""){var _a;const choices=(_a=collaboration.value.choices)==null?void 0:_a[field];return(Array.isArray(choices)?choices:[]).flatMap(choice=>{const value=String((choice==null?void 0:choice.id)||"").trim();const label=String((choice==null?void 0:choice.name)||"").trim();return value&&label?[{label,value}]:[]})}function normalizeCollaborationDraft(value={}){return{tone:String((value==null?void 0:value.tone)||""),responseLength:String((value==null?void 0:value.responseLength)||""),experience:String((value==null?void 0:value.experience)||""),explanationStyle:String((value==null?void 0:value.explanationStyle)||""),requirements:String((value==null?void 0:value.requirements)||"")}}async function saveDatabase(){if(!databaseChanged.value||!canChange.value||!scopeDraftAvailable.value||databaseSaving.value){return}await databaseSaveCommand.run({scope:scopeDraft.value});await resource.reload()}async function saveCollaboration(){var _a;if(!collaborationChanged.value||!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value){return}collaborationSaving.value=true;try{try{await collaborationSaveCommand.run({collaboration:normalizeCollaborationDraft(collaborationDraft.value),sessionId:routeSessionId.value||String(((_a=collaboration.value.source)==null?void 0:_a.sessionId)||"").trim()})}catch{return}await resource.reload()}finally{collaborationSaving.value=false}}async function savePromptHints(){if(!promptHintsChanged.value||!promptHintsCanEdit.value||promptHintsSaving.value){return}await promptHintsSaveCommand.run({promptHints:promptHintsDraft.value});await resource.reload()}async function saveEngineeringProfile(){var _a;if(!engineeringChanged.value||engineeringSaving.value){return}engineeringSaving.value=true;try{await engineeringSaveCommand.run({profile:engineeringProfileDraft.value,sessionId:routeSessionId.value||String(((_a=engineering.value.source)==null?void 0:_a.sessionId)||"").trim()})}catch{}finally{try{await engineeringResource.reload()}finally{engineeringSaving.value=false}}}function openPersonalSettings(){requestVibe64AccountConnectionsDialog({refresh:false,section:"profile"})}function reloadPage(){if(typeof window!=="undefined"){window.location.reload()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$1,[createBaseVNode("header",_hoisted_2,[_cache[8]||(_cache[8]=createBaseVNode("div",null,[createBaseVNode("h1",null,"Project settings"),createBaseVNode("p",null,"Project-wide Vibe64 behavior and source-owned engineering choices.")],-1)),createVNode(VBtn,{class:"project-settings__refresh",disabled:loading.value,size:"small",type:"button",variant:"tonal",onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?"Refreshing…":"Refresh"),1)]),_:1},8,["disabled"])]),initialLoading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState,{key:0,label:"Project settings",loading:loading.value,message:loadError.value||"Loading project settings.","min-height":"12rem",onReload:reloadPage,onRetry:refresh},null,8,["loading","message"])):(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode("section",_hoisted_3,[createBaseVNode("div",_hoisted_4,[engineeringAvailable.value?(openBlock(),createElementBlock("p",_hoisted_5,toDisplayString(engineeringSourceLabel.value),1)):createCommentVNode("",true),_cache[9]||(_cache[9]=createBaseVNode("h2",{id:"engineering-approach-title"},"Engineering approach",-1)),_cache[10]||(_cache[10]=createBaseVNode("p",null," Choose how cautiously the AI changes this software. Every profile still requires simple, targeted code and a question before necessary complexity is added. ",-1))]),engineeringAvailable.value?(openBlock(),createElementBlock(Fragment,{key:0},[createBaseVNode("div",_hoisted_6,[createVNode(VSelect,{modelValue:engineeringProfileDraft.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>engineeringProfileDraft.value=$event),disabled:engineeringSaving.value,density:"comfortable","hide-details":"auto",hint:selectedEngineeringDescription.value,"item-title":"name","item-value":"id",items:engineeringProfiles.value,label:"Engineering profile","persistent-hint":"",variant:"outlined"},null,8,["modelValue","disabled","hint","items"])]),createBaseVNode("div",_hoisted_7,[createBaseVNode("p",null,toDisplayString(engineeringStatusText.value),1),createVNode(VBtn,{disabled:!engineeringChanged.value||engineeringSaving.value,color:"primary",size:"small",type:"button",variant:"flat",onClick:saveEngineeringProfile},{default:withCtx(()=>[createTextVNode(toDisplayString(engineeringSaving.value?"Saving…":"Save engineering approach"),1)]),_:1},8,["disabled"])])],64)):(openBlock(),createElementBlock("div",_hoisted_8,[createBaseVNode("p",null,toDisplayString(engineeringUnavailableReason.value),1)]))]),createBaseVNode("section",_hoisted_9,[createBaseVNode("div",_hoisted_10,[_cache[11]||(_cache[11]=createBaseVNode("h2",{id:"development-database-title"},"Development database",-1)),managed.value?(openBlock(),createElementBlock("p",_hoisted_11," Choose whether development sessions share data or receive isolated databases. This choice is not supplied to the application as an environment value. ")):(openBlock(),createElementBlock("p",_hoisted_12," This Vibe64 installation does not manage development databases. The application receives its database connection through the project Env configuration. "))]),managed.value?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VRadioGroup,{modelValue:scopeDraft.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>scopeDraft.value=$event),"aria-labelledby":"development-database-title",class:"project-settings__options",disabled:databaseSaving.value,"hide-details":""},{default:withCtx(()=>[createBaseVNode("div",_hoisted_13,[createVNode(VRadio,{"aria-describedby":sessionScopeReason.value?"development-database-session-reason":void 0,disabled:!sessionScopeAvailable.value,label:"A separate database for each session",value:"session"},null,8,["aria-describedby","disabled"]),sessionScopeReason.value?(openBlock(),createElementBlock("p",_hoisted_14,toDisplayString(sessionScopeReason.value),1)):createCommentVNode("",true)]),createBaseVNode("div",_hoisted_15,[createVNode(VRadio,{"aria-describedby":projectScopeReason.value?"development-database-project-reason":void 0,disabled:!projectScopeAvailable.value,label:"One database shared by this project",value:"project"},null,8,["aria-describedby","disabled"]),projectScopeReason.value?(openBlock(),createElementBlock("p",_hoisted_16,toDisplayString(projectScopeReason.value),1)):createCommentVNode("",true)])]),_:1},8,["modelValue","disabled"]),createBaseVNode("div",_hoisted_17,[disabledReason.value?(openBlock(),createElementBlock("p",_hoisted_18,toDisplayString(disabledReason.value),1)):scopeDraft.value==="project"?(openBlock(),createElementBlock("p",_hoisted_19," Data and schema changes will be visible to every project session and remain after a session is archived. ")):createCommentVNode("",true),createVNode(VBtn,{disabled:!databaseChanged.value||!canChange.value||!scopeDraftAvailable.value||databaseSaving.value,color:"primary",size:"small",type:"button",variant:"flat",onClick:saveDatabase},{default:withCtx(()=>[createTextVNode(toDisplayString(databaseSaving.value?"Saving…":"Save database choice"),1)]),_:1},8,["disabled"])])],64)):createCommentVNode("",true)]),createBaseVNode("section",_hoisted_20,[createBaseVNode("div",_hoisted_21,[createBaseVNode("p",_hoisted_22,toDisplayString(collaborationSourceLabel.value),1),_cache[13]||(_cache[13]=createBaseVNode("h2",{id:"ai-behaviour-title"},"AI behaviour",-1)),_cache[14]||(_cache[14]=createBaseVNode("p",null," Collaboration guidance is stored in genesis/collaboration.md and follows this source. Prompt suggestions remain a separate Vibe64 setting. ",-1)),createVNode(VBtn,{class:"project-settings__account-link",size:"small",type:"button",variant:"text",onClick:openPersonalSettings},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(" Set your Vibe64 name ",-1)])]),_:1})]),createBaseVNode("div",_hoisted_23,[createVNode(VSelect,{modelValue:collaborationDraft.value.tone,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>collaborationDraft.value.tone=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"comfortable","hide-details":"","item-title":"label","item-value":"value",items:toneOptions.value,label:"Tone",variant:"outlined"},null,8,["modelValue","disabled","items"]),createVNode(VSelect,{modelValue:collaborationDraft.value.responseLength,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>collaborationDraft.value.responseLength=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"comfortable","hide-details":"","item-title":"label","item-value":"value",items:responseLengthOptions.value,label:"Response length",variant:"outlined"},null,8,["modelValue","disabled","items"]),createVNode(VSelect,{modelValue:collaborationDraft.value.experience,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>collaborationDraft.value.experience=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"comfortable","hide-details":"","item-title":"label","item-value":"value",items:experienceOptions.value,label:"Experience level",variant:"outlined"},null,8,["modelValue","disabled","items"]),createVNode(VSelect,{modelValue:collaborationDraft.value.explanationStyle,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>collaborationDraft.value.explanationStyle=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"comfortable","hide-details":"","item-title":"label","item-value":"value",items:explanationStyleOptions.value,label:"Explanation style",variant:"outlined"},null,8,["modelValue","disabled","items"]),createVNode(VTextarea,{modelValue:collaborationDraft.value.requirements,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>collaborationDraft.value.requirements=$event),class:"project-settings__ai-note",disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:"compact","hide-details":"",label:"Project requirements (optional)",placeholder:"For example: use Australian English.",rows:"2",variant:"outlined"},null,8,["modelValue","disabled"])]),createBaseVNode("div",_hoisted_24,[!collaborationAvailable.value?(openBlock(),createElementBlock("p",_hoisted_25,toDisplayString(collaborationUnavailableReason.value),1)):!collaborationCanEdit.value?(openBlock(),createElementBlock("p",_hoisted_26," Only the project owner can change these controls in Settings. Anyone who can edit this source can change genesis/collaboration.md directly. ")):(openBlock(),createElementBlock("p",_hoisted_27," Collaboration changes apply when an assistant conversation next establishes or refreshes stable context; existing history and live Codex instructions do not change. ")),createVNode(VBtn,{disabled:!collaborationChanged.value||!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,color:"primary",size:"small",type:"button",variant:"flat",onClick:saveCollaboration},{default:withCtx(()=>[createTextVNode(toDisplayString(collaborationSaving.value?"Saving…":"Save collaboration"),1)]),_:1},8,["disabled"]),createVNode(VSwitch,{modelValue:promptHintsDraft.value,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>promptHintsDraft.value=$event),class:"project-settings__ai-hints",color:"primary",disabled:!promptHintsCanEdit.value||promptHintsSaving.value,"hide-details":"",label:"Suggest useful next prompts"},null,8,["modelValue","disabled"]),_cache[15]||(_cache[15]=createBaseVNode("p",null," Prompt suggestions are a Vibe64 helper only; this choice never changes coding-agent instructions. ",-1)),createVNode(VBtn,{disabled:!promptHintsChanged.value||!promptHintsCanEdit.value||promptHintsSaving.value,color:"primary",size:"small",type:"button",variant:"flat",onClick:savePromptHints},{default:withCtx(()=>[createTextVNode(toDisplayString(promptHintsSaving.value?"Saving…":"Save prompt suggestions"),1)]),_:1},8,["disabled"])])])],64))])}}};const ProjectSettingsPanel=_export_sfc(_sfc_main$1,[["__scopeId","data-v-4944bdea"]]);const _hoisted_1={class:"vibe64-dashboard-page"};const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[createVNode(ProjectSettingsPanel)])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-d998a641"]]);export{index as default};
@@ -1 +1 @@
1
- import{_ as _export_sfc,a as openBlock,b as createBlock,w as withCtx,d as createBaseVNode,e as createVNode,ai as VChip,j as createTextVNode,t as toDisplayString,c as createElementBlock,F as Fragment,y as renderList,h as VIcon,r as createCommentVNode,n as VBtn,i as unref,dv as mdiOpenInNew,cw as mdiContentCopy,S as VSheet,C as onBeforeUnmount,X as mdiCheck,A as computed,B as ref}from"./index-SBc6H2In.js";import{v as vibe64SessionInfoFacts,a as vibe64SessionInfoText}from"./vibe64SessionInfo-Dy_4bL3a.js";import"./vibe64SessionViewModel-C4e2otoM.js";const _hoisted_1$1={class:"studio-ai-session-facts__header"};const _hoisted_2$1={class:"studio-ai-session-facts__grid"};const _hoisted_3={class:"studio-ai-session-facts__icon"};const _hoisted_4={class:"studio-ai-session-facts__copy"};const _hoisted_5={class:"studio-ai-session-facts__label"};const _hoisted_6=["href"];const _hoisted_7={key:1,class:"studio-ai-session-facts__value"};const _hoisted_8={key:2,class:"studio-ai-session-facts__detail"};const _hoisted_9={key:0,class:"studio-ai-session-facts__actions"};const _sfc_main$1={__name:"Vibe64SessionFacts",props:{facts:{default:()=>[],type:Array},statusColor:{default:"default",type:String},statusLabel:{default:"",type:String}},emits:["copy"],setup(__props,{emit:__emit}){const emit=__emit;return(_ctx,_cache)=>{return __props.facts.length?(openBlock(),createBlock(VSheet,{key:0,rounded:"lg",border:"",class:"studio-ai-session-facts"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_1$1,[_cache[0]||(_cache[0]=createBaseVNode("h2",{class:"studio-ai-session-facts__title"},"Session details",-1)),createVNode(VChip,{color:__props.statusColor,density:"comfortable",size:"small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.statusLabel),1)]),_:1},8,["color"])]),createBaseVNode("div",_hoisted_2$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.facts,fact=>{return openBlock(),createElementBlock("div",{key:fact.key,class:"studio-ai-session-facts__item"},[createBaseVNode("div",_hoisted_3,[createVNode(VIcon,{icon:fact.icon,size:"18"},null,8,["icon"])]),createBaseVNode("div",_hoisted_4,[createBaseVNode("div",_hoisted_5,toDisplayString(fact.label),1),fact.href?(openBlock(),createElementBlock("a",{key:0,class:"studio-ai-session-facts__value studio-ai-session-facts__link",href:fact.href,target:"_blank",rel:"noreferrer"},toDisplayString(fact.value),9,_hoisted_6)):(openBlock(),createElementBlock("div",_hoisted_7,toDisplayString(fact.value),1)),fact.detail?(openBlock(),createElementBlock("div",_hoisted_8,toDisplayString(fact.detail),1)):createCommentVNode("",true)]),fact.href||fact.copyValue?(openBlock(),createElementBlock("div",_hoisted_9,[fact.href?(openBlock(),createBlock(VBtn,{key:0,href:fact.href,target:"_blank",rel:"noreferrer",icon:unref(mdiOpenInNew),size:"x-small",variant:"text"},null,8,["href","icon"])):createCommentVNode("",true),fact.copyValue?(openBlock(),createBlock(VBtn,{key:1,"aria-label":`Copy ${fact.label}`,icon:unref(mdiContentCopy),size:"x-small",variant:"text",onClick:$event=>emit("copy",fact.copyValue,fact.label)},null,8,["aria-label","icon","onClick"])):createCommentVNode("",true)])):createCommentVNode("",true)])}),128))])]),_:1})):createCommentVNode("",true)}}};const Vibe64SessionFacts=_export_sfc(_sfc_main$1,[["__scopeId","data-v-4fe21619"]]);const _hoisted_1={class:"vibe64-session-info-page"};const _hoisted_2={class:"vibe64-session-info-page__header"};const _sfc_main={__name:"index",props:{dashboardContext:{default:()=>({}),type:Object}},setup(__props){const props=__props;const copied=ref(false);let copiedTimer=null;const dashboard=computed(()=>props.dashboardContext||{});const facts=computed(()=>vibe64SessionInfoFacts(dashboard.value.session,dashboard.value.projectContext));const statusColor=computed(()=>String(dashboard.value.statusColor||"default"));const statusLabel=computed(()=>String(dashboard.value.statusLabel||""));const copyContext=computed(()=>{var _a;return vibe64SessionInfoText(facts.value,{status:(_a=dashboard.value.session)==null?void 0:_a.status})});function copyText(value=""){return typeof dashboard.value.copyText==="function"?dashboard.value.copyText(value):false}function copyFact(value){return copyText(value)}async function copyAll(){if(!copyContext.value||await copyText(copyContext.value)===false){return false}copied.value=true;clearTimeout(copiedTimer);copiedTimer=setTimeout(()=>{copied.value=false},1800);return true}onBeforeUnmount(()=>{clearTimeout(copiedTimer)});return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[createBaseVNode("header",_hoisted_2,[_cache[0]||(_cache[0]=createBaseVNode("div",null,[createBaseVNode("h1",null,"Session info"),createBaseVNode("p",null,"Paths and identifiers for continuing this work locally or with another agent.")],-1)),copyContext.value?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":copied.value?unref(mdiCheck):unref(mdiContentCopy),size:"small",type:"button",variant:"tonal",onClick:copyAll},{default:withCtx(()=>[createTextVNode(toDisplayString(copied.value?"Copied":"Copy context"),1)]),_:1},8,["prepend-icon"])):createCommentVNode("",true)]),facts.value.length?(openBlock(),createBlock(Vibe64SessionFacts,{key:0,facts:facts.value,"status-color":statusColor.value,"status-label":statusLabel.value,onCopy:copyFact},null,8,["facts","status-color","status-label"])):(openBlock(),createBlock(VSheet,{key:1,border:"",class:"vibe64-session-info-page__empty",rounded:"lg"},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createBaseVNode("h2",null,"No active session",-1),createBaseVNode("p",null,"Create or select a session to see its paths, branch, and agent identifiers.",-1)])]),_:1}))])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-fcce5745"]]);export{index as default};
1
+ import{_ as _export_sfc,a as openBlock,b as createBlock,w as withCtx,d as createBaseVNode,e as createVNode,ai as VChip,j as createTextVNode,t as toDisplayString,c as createElementBlock,F as Fragment,y as renderList,h as VIcon,r as createCommentVNode,n as VBtn,i as unref,dv as mdiOpenInNew,cw as mdiContentCopy,S as VSheet,C as onBeforeUnmount,X as mdiCheck,A as computed,B as ref}from"./index-C4KnwA0g.js";import{v as vibe64SessionInfoFacts,a as vibe64SessionInfoText}from"./vibe64SessionInfo-8kuxgD5r.js";import"./vibe64SessionViewModel-C4e2otoM.js";const _hoisted_1$1={class:"studio-ai-session-facts__header"};const _hoisted_2$1={class:"studio-ai-session-facts__grid"};const _hoisted_3={class:"studio-ai-session-facts__icon"};const _hoisted_4={class:"studio-ai-session-facts__copy"};const _hoisted_5={class:"studio-ai-session-facts__label"};const _hoisted_6=["href"];const _hoisted_7={key:1,class:"studio-ai-session-facts__value"};const _hoisted_8={key:2,class:"studio-ai-session-facts__detail"};const _hoisted_9={key:0,class:"studio-ai-session-facts__actions"};const _sfc_main$1={__name:"Vibe64SessionFacts",props:{facts:{default:()=>[],type:Array},statusColor:{default:"default",type:String},statusLabel:{default:"",type:String}},emits:["copy"],setup(__props,{emit:__emit}){const emit=__emit;return(_ctx,_cache)=>{return __props.facts.length?(openBlock(),createBlock(VSheet,{key:0,rounded:"lg",border:"",class:"studio-ai-session-facts"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_1$1,[_cache[0]||(_cache[0]=createBaseVNode("h2",{class:"studio-ai-session-facts__title"},"Session details",-1)),createVNode(VChip,{color:__props.statusColor,density:"comfortable",size:"small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.statusLabel),1)]),_:1},8,["color"])]),createBaseVNode("div",_hoisted_2$1,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.facts,fact=>{return openBlock(),createElementBlock("div",{key:fact.key,class:"studio-ai-session-facts__item"},[createBaseVNode("div",_hoisted_3,[createVNode(VIcon,{icon:fact.icon,size:"18"},null,8,["icon"])]),createBaseVNode("div",_hoisted_4,[createBaseVNode("div",_hoisted_5,toDisplayString(fact.label),1),fact.href?(openBlock(),createElementBlock("a",{key:0,class:"studio-ai-session-facts__value studio-ai-session-facts__link",href:fact.href,target:"_blank",rel:"noreferrer"},toDisplayString(fact.value),9,_hoisted_6)):(openBlock(),createElementBlock("div",_hoisted_7,toDisplayString(fact.value),1)),fact.detail?(openBlock(),createElementBlock("div",_hoisted_8,toDisplayString(fact.detail),1)):createCommentVNode("",true)]),fact.href||fact.copyValue?(openBlock(),createElementBlock("div",_hoisted_9,[fact.href?(openBlock(),createBlock(VBtn,{key:0,href:fact.href,target:"_blank",rel:"noreferrer",icon:unref(mdiOpenInNew),size:"x-small",variant:"text"},null,8,["href","icon"])):createCommentVNode("",true),fact.copyValue?(openBlock(),createBlock(VBtn,{key:1,"aria-label":`Copy ${fact.label}`,icon:unref(mdiContentCopy),size:"x-small",variant:"text",onClick:$event=>emit("copy",fact.copyValue,fact.label)},null,8,["aria-label","icon","onClick"])):createCommentVNode("",true)])):createCommentVNode("",true)])}),128))])]),_:1})):createCommentVNode("",true)}}};const Vibe64SessionFacts=_export_sfc(_sfc_main$1,[["__scopeId","data-v-4fe21619"]]);const _hoisted_1={class:"vibe64-session-info-page"};const _hoisted_2={class:"vibe64-session-info-page__header"};const _sfc_main={__name:"index",props:{dashboardContext:{default:()=>({}),type:Object}},setup(__props){const props=__props;const copied=ref(false);let copiedTimer=null;const dashboard=computed(()=>props.dashboardContext||{});const facts=computed(()=>vibe64SessionInfoFacts(dashboard.value.session,dashboard.value.projectContext));const statusColor=computed(()=>String(dashboard.value.statusColor||"default"));const statusLabel=computed(()=>String(dashboard.value.statusLabel||""));const copyContext=computed(()=>{var _a;return vibe64SessionInfoText(facts.value,{status:(_a=dashboard.value.session)==null?void 0:_a.status})});function copyText(value=""){return typeof dashboard.value.copyText==="function"?dashboard.value.copyText(value):false}function copyFact(value){return copyText(value)}async function copyAll(){if(!copyContext.value||await copyText(copyContext.value)===false){return false}copied.value=true;clearTimeout(copiedTimer);copiedTimer=setTimeout(()=>{copied.value=false},1800);return true}onBeforeUnmount(()=>{clearTimeout(copiedTimer)});return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[createBaseVNode("header",_hoisted_2,[_cache[0]||(_cache[0]=createBaseVNode("div",null,[createBaseVNode("h1",null,"Session info"),createBaseVNode("p",null,"Paths and identifiers for continuing this work locally or with another agent.")],-1)),copyContext.value?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":copied.value?unref(mdiCheck):unref(mdiContentCopy),size:"small",type:"button",variant:"tonal",onClick:copyAll},{default:withCtx(()=>[createTextVNode(toDisplayString(copied.value?"Copied":"Copy context"),1)]),_:1},8,["prepend-icon"])):createCommentVNode("",true)]),facts.value.length?(openBlock(),createBlock(Vibe64SessionFacts,{key:0,facts:facts.value,"status-color":statusColor.value,"status-label":statusLabel.value,onCopy:copyFact},null,8,["facts","status-color","status-label"])):(openBlock(),createBlock(VSheet,{key:1,border:"",class:"vibe64-session-info-page__empty",rounded:"lg"},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createBaseVNode("h2",null,"No active session",-1),createBaseVNode("p",null,"Create or select a session to see its paths, branch, and agent identifiers.",-1)])]),_:1}))])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-fcce5745"]]);export{index as default};
@@ -1 +1 @@
1
- import{P as ProjectSelectionGate,V as Vibe64AuthSettingsButton,S as StudioAppShellLayout}from"./Vibe64AuthSettingsButton-CMMeacsl.js";import{_ as _export_sfc,a as openBlock,b as createBlock,w as withCtx,d as createBaseVNode,e as createVNode}from"./index-SBc6H2In.js";import{b as block0}from"./route-block-D_Po64gA.js";import"./studioGateApi-B2eiydiA.js";import"./useVibe64ProjectScope-n5T5l2pY.js";import"./vibe64AccountConnectionsDialog-Cd1-kEer.js";import"./VTabs-BGX5dGoS.js";const _hoisted_1={class:"vibe64-local-app-index"};const _sfc_main$1={__name:"Vibe64LocalAppIndex",setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(StudioAppShellLayout,null,{"top-left":withCtx(()=>[..._cache[0]||(_cache[0]=[createBaseVNode("div",{class:"vibe64-local-app-index__top"},"Projects",-1)])]),"top-right":withCtx(()=>[createVNode(Vibe64AuthSettingsButton)]),default:withCtx(()=>[createBaseVNode("section",_hoisted_1,[createVNode(ProjectSelectionGate,{"force-picker":"","navigate-on-select":""})])]),_:1})}}};const Vibe64LocalAppIndex=_export_sfc(_sfc_main$1,[["__scopeId","data-v-4b4e6be1"]]);const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(Vibe64LocalAppIndex)}}};if(typeof block0==="function")block0(_sfc_main);export{_sfc_main as default};
1
+ import{P as ProjectSelectionGate,V as Vibe64AuthSettingsButton,S as StudioAppShellLayout}from"./Vibe64AuthSettingsButton-CKOCL-kl.js";import{_ as _export_sfc,a as openBlock,b as createBlock,w as withCtx,d as createBaseVNode,e as createVNode}from"./index-C4KnwA0g.js";import{b as block0}from"./route-block-D_Po64gA.js";import"./studioGateApi-BwBnOYBp.js";import"./useVibe64ProjectScope-DcDkjbLT.js";import"./vibe64AccountConnectionsDialog-Cd1-kEer.js";import"./VTabs-CQq9CAuT.js";const _hoisted_1={class:"vibe64-local-app-index"};const _sfc_main$1={__name:"Vibe64LocalAppIndex",setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(StudioAppShellLayout,null,{"top-left":withCtx(()=>[..._cache[0]||(_cache[0]=[createBaseVNode("div",{class:"vibe64-local-app-index__top"},"Projects",-1)])]),"top-right":withCtx(()=>[createVNode(Vibe64AuthSettingsButton)]),default:withCtx(()=>[createBaseVNode("section",_hoisted_1,[createVNode(ProjectSelectionGate,{"force-picker":"","navigate-on-select":""})])]),_:1})}}};const Vibe64LocalAppIndex=_export_sfc(_sfc_main$1,[["__scopeId","data-v-4b4e6be1"]]);const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(Vibe64LocalAppIndex)}}};if(typeof block0==="function")block0(_sfc_main);export{_sfc_main as default};
@@ -1 +1 @@
1
- import{o as onMounted,c as createElementBlock,u as useRouter,a as openBlock}from"./index-SBc6H2In.js";import{b as block0}from"./route-block-D_Po64gA.js";const _hoisted_1={hidden:""};const _sfc_main={__name:"index",setup(__props){const router=useRouter();onMounted(async()=>{await router.replace("/app")});return(_ctx,_cache)=>{return openBlock(),createElementBlock("span",_hoisted_1)}}};if(typeof block0==="function")block0(_sfc_main);export{_sfc_main as default};
1
+ import{o as onMounted,c as createElementBlock,u as useRouter,a as openBlock}from"./index-C4KnwA0g.js";import{b as block0}from"./route-block-D_Po64gA.js";const _hoisted_1={hidden:""};const _sfc_main={__name:"index",setup(__props){const router=useRouter();onMounted(async()=>{await router.replace("/app")});return(_ctx,_cache)=>{return openBlock(),createElementBlock("span",_hoisted_1)}}};if(typeof block0==="function")block0(_sfc_main);export{_sfc_main as default};
@@ -1 +1 @@
1
- import{a as archivedVibe64SessionsEmits,b as archivedVibe64SessionsProps,u as useArchivedVibe64Sessions}from"./useArchivedVibe64Sessions-LeGda1Y9.js";import{_ as _export_sfc,a as openBlock,c as createElementBlock,$ as normalizeClass,d as createBaseVNode,t as toDisplayString,r as createCommentVNode,b as createBlock,w as withCtx,j as createTextVNode,i as unref,n as VBtn,I as VAlert,F as Fragment,y as renderList,S as VSheet,e as createVNode,k as VCardText,K as VSkeletonLoader,V as VCard,h as VIcon,ai as VChip}from"./index-SBc6H2In.js";import"./vibe64SessionRequestConfig-B7Llggdb.js";import"./useVibe64ProjectScope-n5T5l2pY.js";import"./useVibe64ConversationLog-BPyKYbvH.js";import"./definitions-CyUCoqu-.js";import"./vueRefOrGetterValue-_KqAOFjr.js";import"./vibe64SessionPanelModel-5UED-6V-.js";import"./vibe64SessionViewModel-C4e2otoM.js";const _hoisted_1$1={class:"studio-archived-sessions d-flex flex-column ga-3"};const _hoisted_2={key:0,class:"studio-archived-sessions__copy"};const _hoisted_3={class:"studio-archived-sessions__title"};const _hoisted_4={key:0,class:"text-body-2 text-medium-emphasis mb-0"};const _hoisted_5={key:2,"aria-label":"Loading archived sessions",class:"studio-archived-sessions__grid",role:"status"};const _hoisted_6={class:"studio-archived-sessions__card-heading"};const _hoisted_7={class:"studio-archived-sessions__identity"};const _hoisted_8={class:"text-subtitle-1 mb-1"};const _hoisted_9={class:"text-body-2 text-medium-emphasis mb-0"};const _hoisted_10={key:4,class:"studio-archived-sessions__grid"};const _hoisted_11={class:"studio-archived-sessions__card-heading"};const _hoisted_12={class:"studio-archived-sessions__icon"};const _hoisted_13={class:"studio-archived-sessions__identity"};const _hoisted_14={class:"studio-archived-sessions__session-id"};const _hoisted_15={class:"studio-archived-sessions__meta"};const _hoisted_16=["datetime"];const _sfc_main$1={__name:"ArchivedVibe64Sessions",props:archivedVibe64SessionsProps,emits:archivedVibe64SessionsEmits,setup(__props,{expose:__expose,emit:__emit}){const emit=__emit;const{archiveIcon,error,formatArchivedAt,loadSessions,loading,mdiEyeOutline,mdiRefresh,sessionRoute,sessions,shortSessionId,statusColor,statusLabel}=useArchivedVibe64Sessions(emit);__expose({refresh:loadSessions});return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$1,[_ctx.title||_ctx.description||_ctx.showRefresh?(openBlock(),createElementBlock("div",{key:0,class:normalizeClass(["studio-archived-sessions__header",{"studio-archived-sessions__header--actions-only":!_ctx.title&&!_ctx.description}])},[_ctx.title||_ctx.description?(openBlock(),createElementBlock("div",_hoisted_2,[createBaseVNode("h2",_hoisted_3,toDisplayString(_ctx.title),1),_ctx.description?(openBlock(),createElementBlock("p",_hoisted_4,toDisplayString(_ctx.description),1)):createCommentVNode("",true)])):createCommentVNode("",true),_ctx.showRefresh?(openBlock(),createBlock(VBtn,{key:1,class:"studio-archived-sessions__refresh",disabled:unref(loading),"prepend-icon":unref(mdiRefresh),size:"small",variant:"tonal",onClick:unref(loadSessions)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(loading)?"Refreshing…":"Refresh"),1)]),_:1},8,["disabled","prepend-icon","onClick"])):createCommentVNode("",true)],2)):createCommentVNode("",true),unref(error)?(openBlock(),createBlock(VAlert,{key:1,type:"error",variant:"tonal",density:"comfortable"},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(error)),1)]),_:1})):createCommentVNode("",true),unref(loading)&&unref(sessions).length<1?(openBlock(),createElementBlock("div",_hoisted_5,[(openBlock(),createElementBlock(Fragment,null,renderList(4,index2=>{return createVNode(VCard,{key:`archived-session-skeleton-${index2}`,class:"studio-archived-sessions__card",rounded:"lg",variant:"outlined"},{default:withCtx(()=>[createVNode(VCardText,{class:"studio-archived-sessions__card-body"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_6,[createVNode(VSkeletonLoader,{class:"studio-archived-sessions__skeleton-icon",type:"avatar"}),createBaseVNode("div",_hoisted_7,[createVNode(VSkeletonLoader,{type:"text"}),createVNode(VSkeletonLoader,{type:"chip@2"})]),createVNode(VSkeletonLoader,{class:"studio-archived-sessions__skeleton-button",type:"button"})])]),_:1})]),_:1})}),64))])):createCommentVNode("",true),!unref(loading)&&unref(sessions).length<1&&!unref(error)?(openBlock(),createBlock(VSheet,{key:3,rounded:"lg",border:"",class:"studio-archived-sessions__empty"},{default:withCtx(()=>[createBaseVNode("h2",_hoisted_8,toDisplayString(_ctx.emptyTitle),1),createBaseVNode("p",_hoisted_9,toDisplayString(_ctx.emptyText),1)]),_:1})):createCommentVNode("",true),unref(sessions).length?(openBlock(),createElementBlock("div",_hoisted_10,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(sessions),session=>{return openBlock(),createBlock(VCard,{key:session.sessionId,class:"studio-archived-sessions__card",rounded:"lg",variant:"outlined"},{default:withCtx(()=>[createVNode(VCardText,{class:"studio-archived-sessions__card-body"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_11,[createBaseVNode("div",_hoisted_12,[createVNode(VIcon,{icon:unref(archiveIcon),size:"22"},null,8,["icon"])]),createBaseVNode("div",_hoisted_13,[createBaseVNode("div",_hoisted_14,toDisplayString(session.sessionName||unref(shortSessionId)(session.sessionId)),1),createBaseVNode("div",_hoisted_15,[createVNode(VChip,{color:unref(statusColor)(session.status),size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(statusLabel)(session.status||"archived")),1)]),_:2},1032,["color"]),session.sourceReady?(openBlock(),createBlock(VChip,{key:0,color:"success",size:"x-small",variant:"tonal"},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(" source available ",-1)])]),_:1})):createCommentVNode("",true)]),createBaseVNode("time",{class:"studio-archived-sessions__archived-at text-caption text-medium-emphasis",datetime:session.archivedAt||void 0}," Archived "+toDisplayString(unref(formatArchivedAt)(session.archivedAt)),9,_hoisted_16)]),createVNode(VBtn,{class:"studio-archived-sessions__view","prepend-icon":unref(mdiEyeOutline),size:"small",to:unref(sessionRoute)(session),variant:"tonal"},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(" View ",-1)])]),_:1},8,["prepend-icon","to"])])]),_:2},1024)]),_:2},1024)}),128))])):createCommentVNode("",true)])}}};const ArchivedVibe64Sessions=_export_sfc(_sfc_main$1,[["__scopeId","data-v-d70b17df"]]);const _hoisted_1={class:"vibe64-dashboard-page"};const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[_cache[0]||(_cache[0]=createBaseVNode("header",{class:"vibe64-dashboard-page__header"},[createBaseVNode("h1",null,"Session History")],-1)),createVNode(ArchivedVibe64Sessions,{"empty-text":"Archived chats will appear here after their active workspaces are removed.","empty-title":"No archived chats"})])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-8ed1acf5"]]);export{index as default};
1
+ import{a as archivedVibe64SessionsEmits,b as archivedVibe64SessionsProps,u as useArchivedVibe64Sessions}from"./useArchivedVibe64Sessions-_FKt1-qN.js";import{_ as _export_sfc,a as openBlock,c as createElementBlock,$ as normalizeClass,d as createBaseVNode,t as toDisplayString,r as createCommentVNode,b as createBlock,w as withCtx,j as createTextVNode,i as unref,n as VBtn,I as VAlert,F as Fragment,y as renderList,S as VSheet,e as createVNode,k as VCardText,K as VSkeletonLoader,V as VCard,h as VIcon,ai as VChip}from"./index-C4KnwA0g.js";import"./vibe64SessionRequestConfig-uGWcyQY6.js";import"./useVibe64ProjectScope-DcDkjbLT.js";import"./useVibe64ConversationLog-BjnpqM9K.js";import"./definitions-ChGXm26a.js";import"./vueRefOrGetterValue-CV9c3oBd.js";import"./vibe64SessionPanelModel-DDaXjAJ_.js";import"./vibe64SessionViewModel-C4e2otoM.js";const _hoisted_1$1={class:"studio-archived-sessions d-flex flex-column ga-3"};const _hoisted_2={key:0,class:"studio-archived-sessions__copy"};const _hoisted_3={class:"studio-archived-sessions__title"};const _hoisted_4={key:0,class:"text-body-2 text-medium-emphasis mb-0"};const _hoisted_5={key:2,"aria-label":"Loading archived sessions",class:"studio-archived-sessions__grid",role:"status"};const _hoisted_6={class:"studio-archived-sessions__card-heading"};const _hoisted_7={class:"studio-archived-sessions__identity"};const _hoisted_8={class:"text-subtitle-1 mb-1"};const _hoisted_9={class:"text-body-2 text-medium-emphasis mb-0"};const _hoisted_10={key:4,class:"studio-archived-sessions__grid"};const _hoisted_11={class:"studio-archived-sessions__card-heading"};const _hoisted_12={class:"studio-archived-sessions__icon"};const _hoisted_13={class:"studio-archived-sessions__identity"};const _hoisted_14={class:"studio-archived-sessions__session-id"};const _hoisted_15={class:"studio-archived-sessions__meta"};const _hoisted_16=["datetime"];const _sfc_main$1={__name:"ArchivedVibe64Sessions",props:archivedVibe64SessionsProps,emits:archivedVibe64SessionsEmits,setup(__props,{expose:__expose,emit:__emit}){const emit=__emit;const{archiveIcon,error,formatArchivedAt,loadSessions,loading,mdiEyeOutline,mdiRefresh,sessionRoute,sessions,shortSessionId,statusColor,statusLabel}=useArchivedVibe64Sessions(emit);__expose({refresh:loadSessions});return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$1,[_ctx.title||_ctx.description||_ctx.showRefresh?(openBlock(),createElementBlock("div",{key:0,class:normalizeClass(["studio-archived-sessions__header",{"studio-archived-sessions__header--actions-only":!_ctx.title&&!_ctx.description}])},[_ctx.title||_ctx.description?(openBlock(),createElementBlock("div",_hoisted_2,[createBaseVNode("h2",_hoisted_3,toDisplayString(_ctx.title),1),_ctx.description?(openBlock(),createElementBlock("p",_hoisted_4,toDisplayString(_ctx.description),1)):createCommentVNode("",true)])):createCommentVNode("",true),_ctx.showRefresh?(openBlock(),createBlock(VBtn,{key:1,class:"studio-archived-sessions__refresh",disabled:unref(loading),"prepend-icon":unref(mdiRefresh),size:"small",variant:"tonal",onClick:unref(loadSessions)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(loading)?"Refreshing…":"Refresh"),1)]),_:1},8,["disabled","prepend-icon","onClick"])):createCommentVNode("",true)],2)):createCommentVNode("",true),unref(error)?(openBlock(),createBlock(VAlert,{key:1,type:"error",variant:"tonal",density:"comfortable"},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(error)),1)]),_:1})):createCommentVNode("",true),unref(loading)&&unref(sessions).length<1?(openBlock(),createElementBlock("div",_hoisted_5,[(openBlock(),createElementBlock(Fragment,null,renderList(4,index2=>{return createVNode(VCard,{key:`archived-session-skeleton-${index2}`,class:"studio-archived-sessions__card",rounded:"lg",variant:"outlined"},{default:withCtx(()=>[createVNode(VCardText,{class:"studio-archived-sessions__card-body"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_6,[createVNode(VSkeletonLoader,{class:"studio-archived-sessions__skeleton-icon",type:"avatar"}),createBaseVNode("div",_hoisted_7,[createVNode(VSkeletonLoader,{type:"text"}),createVNode(VSkeletonLoader,{type:"chip@2"})]),createVNode(VSkeletonLoader,{class:"studio-archived-sessions__skeleton-button",type:"button"})])]),_:1})]),_:1})}),64))])):createCommentVNode("",true),!unref(loading)&&unref(sessions).length<1&&!unref(error)?(openBlock(),createBlock(VSheet,{key:3,rounded:"lg",border:"",class:"studio-archived-sessions__empty"},{default:withCtx(()=>[createBaseVNode("h2",_hoisted_8,toDisplayString(_ctx.emptyTitle),1),createBaseVNode("p",_hoisted_9,toDisplayString(_ctx.emptyText),1)]),_:1})):createCommentVNode("",true),unref(sessions).length?(openBlock(),createElementBlock("div",_hoisted_10,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(sessions),session=>{return openBlock(),createBlock(VCard,{key:session.sessionId,class:"studio-archived-sessions__card",rounded:"lg",variant:"outlined"},{default:withCtx(()=>[createVNode(VCardText,{class:"studio-archived-sessions__card-body"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_11,[createBaseVNode("div",_hoisted_12,[createVNode(VIcon,{icon:unref(archiveIcon),size:"22"},null,8,["icon"])]),createBaseVNode("div",_hoisted_13,[createBaseVNode("div",_hoisted_14,toDisplayString(session.sessionName||unref(shortSessionId)(session.sessionId)),1),createBaseVNode("div",_hoisted_15,[createVNode(VChip,{color:unref(statusColor)(session.status),size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(statusLabel)(session.status||"archived")),1)]),_:2},1032,["color"]),session.sourceReady?(openBlock(),createBlock(VChip,{key:0,color:"success",size:"x-small",variant:"tonal"},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(" source available ",-1)])]),_:1})):createCommentVNode("",true)]),createBaseVNode("time",{class:"studio-archived-sessions__archived-at text-caption text-medium-emphasis",datetime:session.archivedAt||void 0}," Archived "+toDisplayString(unref(formatArchivedAt)(session.archivedAt)),9,_hoisted_16)]),createVNode(VBtn,{class:"studio-archived-sessions__view","prepend-icon":unref(mdiEyeOutline),size:"small",to:unref(sessionRoute)(session),variant:"tonal"},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(" View ",-1)])]),_:1},8,["prepend-icon","to"])])]),_:2},1024)]),_:2},1024)}),128))])):createCommentVNode("",true)])}}};const ArchivedVibe64Sessions=_export_sfc(_sfc_main$1,[["__scopeId","data-v-d70b17df"]]);const _hoisted_1={class:"vibe64-dashboard-page"};const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[_cache[0]||(_cache[0]=createBaseVNode("header",{class:"vibe64-dashboard-page__header"},[createBaseVNode("h1",null,"Session History")],-1)),createVNode(ArchivedVibe64Sessions,{"empty-text":"Archived chats will appear here after their active workspaces are removed.","empty-title":"No archived chats"})])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-8ed1acf5"]]);export{index as default};
@@ -1 +1 @@
1
- import{_ as _export_sfc,a as openBlock,b as createBlock,w as withCtx,d as createBaseVNode,c as createElementBlock,r as createCommentVNode,F as Fragment,y as renderList,t as toDisplayString,n as VBtn,j as createTextVNode,e as createVNode,a9 as VTextField,bV as VTable,B as ref,ai as VChip,bW as VExpansionPanel,bX as VExpansionPanelTitle,bY as VExpansionPanelText,bZ as VExpansionPanels,A as computed,aR as useRoute,H as watch,D as useEndpointResource,E as useCommand,R as ROUTE_VISIBILITY_PUBLIC,Q as VIBE64_SURFACE_ID,J as renderSlot,I as VAlert,i as unref,b_ as VCheckbox,V as VCard,g as VCardTitle,k as VCardText,l as VCardActions,z as VSpacer,p as VDialog}from"./index-SBc6H2In.js";import{V as Vibe64AsyncModuleState}from"./Vibe64AsyncModuleState-Cel3OePx.js";import{E as ENV_ENDPOINT,a as VIBE64_PROJECT_CHANGED_EVENT,i as VIBE64_ENV_USER_VALUES_API_SUFFIX,j as ENV_USER_VALUES_ENDPOINT,k as VIBE64_ENV_SECRET_REVEAL_API_SUFFIX,l as ENV_SECRET_REVEAL_ENDPOINT,m as envQueryKey}from"./studioGateApi-B2eiydiA.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-n5T5l2pY.js";import{u as useVibe64SessionSelection}from"./useVibe64SessionSelection-D1wXIWTm.js";import{a as VTab,V as VTabs}from"./VTabs-BGX5dGoS.js";import"./vibe64SessionRequestConfig-B7Llggdb.js";const _hoisted_1$3={key:0,class:"runtime-config-records-table__actions-column"};const _hoisted_2$2={key:0};const _hoisted_3$2=["onClick"];const _hoisted_4$2={key:0,class:"runtime-config-records-table__secret-value"};const _hoisted_5$2={key:0};const _hoisted_6$1={class:"runtime-config-records-table__edit"};const _sfc_main$3={__name:"RuntimeConfigRecordsTable",props:{environmentLabel:{default:"environment",type:String},records:{default:()=>[],type:Array},revealedSecrets:{default:()=>({}),type:Object},saveBusy:{default:false,type:Boolean},secretRevealBusyKey:{default:"",type:String},secretRevealEnabled:{default:false,type:Boolean},showActions:{default:false,type:Boolean}},emits:["hide-secret","remove-record","reveal-secret","save-record"],setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const draftValues=ref({});function recordKey(record={}){return`${record.scope||props.environmentLabel}:${record.key||""}`}function draftTouched(record={}){return Object.hasOwn(draftValues.value,recordKey(record))}function draftValue(record={}){return draftTouched(record)?draftValues.value[recordKey(record)]:""}function setDraftValue(record={},value=""){draftValues.value={...draftValues.value,[recordKey(record)]:String(value??"")}}function recordValueLabel(record={}){if(record.secret){return secretIsRevealed(record)?String(props.revealedSecrets[record.key]??""):record.valuePresent?"********":""}return String(record.value??"")}function secretIsRevealed(record={}){return Boolean(record.key)&&Object.hasOwn(props.revealedSecrets,record.key)}function secretVisibilityAction(record={}){return secretIsRevealed(record)?"Hide":"Reveal"}function secretVisibilityLabel(record={}){return`${secretVisibilityAction(record)} ${record.key||"secret"}`}function toggleSecretVisibility(record={}){emit(secretIsRevealed(record)?"hide-secret":"reveal-secret",record)}function saveRecord(record={}){if(!props.showActions||!draftTouched(record)){return}const key=recordKey(record);const value=draftValue(record);const nextDraftValues={...draftValues.value};delete nextDraftValues[key];draftValues.value=nextDraftValues;emit("save-record",{record,value})}function removeRecord(record={}){if(props.showActions){emit("remove-record",record)}}async function copyKey(key=""){const text=String(key||"");if(typeof navigator!=="undefined"&&navigator.clipboard&&text){await navigator.clipboard.writeText(text)}}return(_ctx,_cache)=>{return openBlock(),createBlock(VTable,{class:"runtime-config-records-table",density:"compact"},{default:withCtx(()=>[createBaseVNode("colgroup",null,[_cache[0]||(_cache[0]=createBaseVNode("col",{class:"runtime-config-records-table__key-column"},null,-1)),_cache[1]||(_cache[1]=createBaseVNode("col",{class:"runtime-config-records-table__value-column"},null,-1)),__props.showActions?(openBlock(),createElementBlock("col",_hoisted_1$3)):createCommentVNode("",true)]),createBaseVNode("thead",null,[createBaseVNode("tr",null,[_cache[2]||(_cache[2]=createBaseVNode("th",null,"Key",-1)),_cache[3]||(_cache[3]=createBaseVNode("th",null,"Value",-1)),__props.showActions?(openBlock(),createElementBlock("th",_hoisted_2$2,"Actions")):createCommentVNode("",true)])]),createBaseVNode("tbody",null,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.records,record=>{return openBlock(),createElementBlock("tr",{key:recordKey(record)},[createBaseVNode("td",null,[createBaseVNode("button",{class:"runtime-config-records-table__key",type:"button",onClick:$event=>copyKey(record.key)},toDisplayString(record.key),9,_hoisted_3$2)]),createBaseVNode("td",null,[record.secret?(openBlock(),createElementBlock("div",_hoisted_4$2,[createBaseVNode("code",null,toDisplayString(recordValueLabel(record)),1),__props.secretRevealEnabled&&record.valuePresent?(openBlock(),createBlock(VBtn,{key:0,"aria-label":secretVisibilityLabel(record),disabled:Boolean(__props.secretRevealBusyKey)&&__props.secretRevealBusyKey!==record.key,loading:__props.secretRevealBusyKey===record.key,size:"x-small",type:"button",variant:"text",onClick:$event=>toggleSecretVisibility(record)},{default:withCtx(()=>[createTextVNode(toDisplayString(secretVisibilityAction(record)),1)]),_:2},1032,["aria-label","disabled","loading","onClick"])):createCommentVNode("",true)])):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(recordValueLabel(record)),1)],64))]),__props.showActions?(openBlock(),createElementBlock("td",_hoisted_5$2,[createBaseVNode("div",_hoisted_6$1,[createVNode(VTextField,{"model-value":draftValue(record),type:record.secret?"password":"text",density:"compact","hide-details":"",label:"New value",spellcheck:"false",variant:"outlined","onUpdate:modelValue":$event=>setDraftValue(record,$event)},null,8,["model-value","type","onUpdate:modelValue"]),createVNode(VBtn,{disabled:!draftTouched(record),loading:__props.saveBusy,size:"small",type:"button",variant:"tonal",onClick:$event=>saveRecord(record)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(" Save ",-1)])]),_:1},8,["disabled","loading","onClick"]),createVNode(VBtn,{loading:__props.saveBusy,size:"small",type:"button",variant:"text",onClick:$event=>removeRecord(record)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(" Remove ",-1)])]),_:1},8,["loading","onClick"])])])):createCommentVNode("",true)])}),128))])]),_:1})}}};const RuntimeConfigRecordsTable=_export_sfc(_sfc_main$3,[["__scopeId","data-v-2fe6f275"]]);const _hoisted_1$2={class:"runtime-config-records"};const _hoisted_2$1={class:"runtime-config-records__section"};const _hoisted_3$1={class:"runtime-config-records__heading"};const _hoisted_4$1={key:1,class:"runtime-config-records__empty"};const _hoisted_5$1={class:"runtime-config-records__system-title"};const _sfc_main$2={__name:"RuntimeConfigRecordsView",props:{editableEmptyText:{default:"No user Env values.",type:String},editableTitle:{default:"User values",type:String},environmentLabel:{default:"environment",type:String},records:{default:()=>[],type:Array},revealedSecrets:{default:()=>({}),type:Object},saveBusy:{default:false,type:Boolean},secretRevealBusyKey:{default:"",type:String},secretRevealEnabled:{default:false,type:Boolean},systemTitle:{default:"System values",type:String}},emits:["hide-secret","remove-record","reveal-secret","save-record"],setup(__props){const props=__props;const records=computed(()=>Array.isArray(props.records)?props.records:[]);const editableRecords=computed(()=>records.value.filter(recordEditable));const systemRecords=computed(()=>records.value.filter(record=>!recordEditable(record)));function recordEditable(record={}){return record.editable===true}return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$2,[createBaseVNode("section",_hoisted_2$1,[createBaseVNode("div",_hoisted_3$1,[createBaseVNode("h2",null,toDisplayString(__props.editableTitle),1),createVNode(VChip,{size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(editableRecords.value.length),1)]),_:1})]),editableRecords.value.length?(openBlock(),createBlock(RuntimeConfigRecordsTable,{key:0,"environment-label":__props.environmentLabel,records:editableRecords.value,"revealed-secrets":__props.revealedSecrets,"save-busy":__props.saveBusy,"secret-reveal-busy-key":__props.secretRevealBusyKey,"secret-reveal-enabled":__props.secretRevealEnabled,"show-actions":"",onHideSecret:_cache[0]||(_cache[0]=$event=>_ctx.$emit("hide-secret",$event)),onRemoveRecord:_cache[1]||(_cache[1]=$event=>_ctx.$emit("remove-record",$event)),onRevealSecret:_cache[2]||(_cache[2]=$event=>_ctx.$emit("reveal-secret",$event)),onSaveRecord:_cache[3]||(_cache[3]=$event=>_ctx.$emit("save-record",$event))},null,8,["environment-label","records","revealed-secrets","save-busy","secret-reveal-busy-key","secret-reveal-enabled"])):(openBlock(),createElementBlock("p",_hoisted_4$1,toDisplayString(__props.editableEmptyText),1))]),systemRecords.value.length?(openBlock(),createBlock(VExpansionPanels,{key:0,class:"runtime-config-records__system",variant:"accordion"},{default:withCtx(()=>[createVNode(VExpansionPanel,null,{default:withCtx(()=>[createVNode(VExpansionPanelTitle,null,{default:withCtx(()=>[createBaseVNode("span",_hoisted_5$1,[createTextVNode(toDisplayString(__props.systemTitle)+" ",1),createVNode(VChip,{size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(systemRecords.value.length),1)]),_:1})])]),_:1}),createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createVNode(RuntimeConfigRecordsTable,{"environment-label":__props.environmentLabel,records:systemRecords.value,"revealed-secrets":__props.revealedSecrets,"secret-reveal-busy-key":__props.secretRevealBusyKey,"secret-reveal-enabled":__props.secretRevealEnabled,onHideSecret:_cache[4]||(_cache[4]=$event=>_ctx.$emit("hide-secret",$event)),onRevealSecret:_cache[5]||(_cache[5]=$event=>_ctx.$emit("reveal-secret",$event))},null,8,["environment-label","records","revealed-secrets","secret-reveal-busy-key","secret-reveal-enabled"])]),_:1})]),_:1})]),_:1})):createCommentVNode("",true)])}}};const RuntimeConfigRecordsView=_export_sfc(_sfc_main$2,[["__scopeId","data-v-8f9be4ce"]]);function runtimeConfigSecretKey(value={}){return String(typeof value==="string"?value:(value==null?void 0:value.key)||"").trim()}function useRuntimeConfigSecretReveal({revealValue}={}){if(typeof revealValue!=="function"){throw new TypeError("useRuntimeConfigSecretReveal requires revealValue().")}const revealedSecrets=ref({});const secretRevealBusyKey=ref("");async function revealSecret(record={}){const key=runtimeConfigSecretKey(record);if(!key||secretRevealBusyKey.value){return false}secretRevealBusyKey.value=key;try{const value=await revealValue(key,record);if(value===void 0||value===null){return false}revealedSecrets.value={...revealedSecrets.value,[key]:String(value)};return true}finally{secretRevealBusyKey.value=""}}function hideSecret(record={}){const key=runtimeConfigSecretKey(record);if(!key||!Object.hasOwn(revealedSecrets.value,key)){return false}const next={...revealedSecrets.value};delete next[key];revealedSecrets.value=next;return true}function clearRevealedSecrets(){revealedSecrets.value={}}return{clearRevealedSecrets,hideSecret,revealedSecrets,revealSecret,secretRevealBusyKey}}const _hoisted_1$1={class:"env-panel"};const _hoisted_2={class:"env-panel__header"};const _hoisted_3={class:"env-panel__title"};const _hoisted_4={class:"env-panel__actions"};const _hoisted_5={key:2,class:"env-panel__expected"};const _hoisted_6={class:"env-panel__section-heading env-panel__section-heading--inline"};const _hoisted_7={class:"env-panel__expected-keys"};const _hoisted_8={class:"env-panel__add"};const PROJECT_ENV_TAB="dev";const PROJECT_ENVIRONMENT="dev";const PROJECT_ENVIRONMENT_LABEL="development";const _sfc_main$1={__name:"EnvPanel",setup(__props){const projectSlug=useVibe64ProjectSlug();const sessionSelection=useVibe64SessionSelection({projectSlug});const selectedSessionId=sessionSelection.selectedId;const activeTab=ref(PROJECT_ENV_TAB);const newValue=ref(emptyNewValue());const route=useRoute();watch(()=>[route.query.prefillKey,route.query.prefillValue,route.query.prefillSecret],([key,value,secret])=>{if(typeof key!=="string"||!/^[A-Z_][A-Z0-9_]*$/u.test(key)||key.length>200)return;if(secret==="true"){newValue.value={key,value:"",secret:true}}else if(value===void 0||typeof value==="string"&&value.length<=4096){newValue.value={key,value:value??"",secret:false}}},{immediate:true});const pendingRemoval=ref(null);const envResource=useEndpointResource({fallbackLoadError:"Env could not load.",path:ENV_ENDPOINT,queryKey:computed(()=>[...envQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),PROJECT_ENVIRONMENT,selectedSessionId.value||"baseline"]),readQuery:computed(()=>({environment:PROJECT_ENVIRONMENT,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{}})),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT},refreshOnPull:true,requestRecoveryLabel:"Env"});const saveCommand=useCommand({access:"never",apiSuffix:VIBE64_ENV_USER_VALUES_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:ENV_USER_VALUES_ENDPOINT}),buildRawPayload:(_model,{context})=>({environment:PROJECT_ENVIRONMENT,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{},values:context.values||{}}),fallbackRunError:"Env value could not be saved.",messages:{error:"Env value could not be saved.",success:"Env saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.env.user-values.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const revealCommand=useCommand({access:"never",apiSuffix:VIBE64_ENV_SECRET_REVEAL_API_SUFFIX,buildCommandOptions:()=>({method:"POST",path:ENV_SECRET_REVEAL_ENDPOINT}),buildRawPayload:(_model,{context})=>({environment:PROJECT_ENVIRONMENT,key:context.key,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{}}),fallbackRunError:"Env secret could not be revealed.",messages:{error:"Env secret could not be revealed."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.env.secret.reveal",suppressSuccessMessage:true,surfaceId:VIBE64_SURFACE_ID,writeMethod:"POST"});const{clearRevealedSecrets,hideSecret,revealedSecrets,revealSecret,secretRevealBusyKey}=useRuntimeConfigSecretReveal({async revealValue(key){const response=await revealCommand.run({key});return(response==null?void 0:response.ok)===false?null:response==null?void 0:response.value}});watch([projectSlug,selectedSessionId],clearRevealedSecrets);const env=computed(()=>{var _a;return((_a=envResource.data.value)==null?void 0:_a.env)||{}});const envConfigSourceLabel=computed(()=>{var _a,_b;return String(((_b=(_a=env.value)==null?void 0:_a.configSource)==null?void 0:_b.label)||"")});const envLoading=computed(()=>envResource.isLoading.value===true);const envLoadError=computed(()=>String(envResource.loadError.value||""));const envUnavailable=computed(()=>{var _a;return Boolean((_a=env.value)==null?void 0:_a.unavailable)});const envUnavailableMessage=computed(()=>{var _a,_b;return String(((_b=(_a=env.value)==null?void 0:_a.unavailable)==null?void 0:_b.message)||"Project Env is unavailable. Fix the project configuration and try again.")});const saveBusy=computed(()=>saveCommand.isRunning===true);const removeConfirmOpen=computed({get:()=>Boolean(pendingRemoval.value),set:open=>{if(!open&&!saveBusy.value){pendingRemoval.value=null}}});const pendingRemovalKey=computed(()=>{var _a;return String(((_a=pendingRemoval.value)==null?void 0:_a.key)||"")});const projectEnvTabActive=computed(()=>activeTab.value===PROJECT_ENV_TAB);const records=computed(()=>{var _a;return Array.isArray((_a=env.value)==null?void 0:_a.records)?env.value.records:[]});const existingNewValue=computed(()=>records.value.some(record=>record.key===String(newValue.value.key||"").trim()&&record.valuePresent===true));const missingRecords=computed(()=>records.value.filter(recordMissing));const expectedMissingRecords=computed(()=>missingRecords.value.filter(recordEditable));const environmentLabel=PROJECT_ENVIRONMENT_LABEL;function emptyNewValue(){return{key:"",secret:true,value:""}}function recordEditable(record={}){return record.editable===true}function recordMissing(record={}){return record.valuePresent!==true&&(record.missing===true||Array.isArray(record.requiredFor)&&record.requiredFor.length>0)}function selectExpectedRecord(record={}){const key=String(record.key||"").trim();if(!key){return}newValue.value={key,secret:record.secret===true,value:""}}async function refresh(){clearRevealedSecrets();await envResource.reload()}async function saveRecord({record={},value=""}={}){if(!recordEditable(record)){return}await saveValues({[record.key]:{secret:record.secret===true,value}})}function requestRemoveRecord(record={}){if(!recordEditable(record)){return}pendingRemoval.value=record}function cancelRemoveRecord(){if(!saveBusy.value){pendingRemoval.value=null}}async function confirmRemoveRecord(){const record=pendingRemoval.value;if(!recordEditable(record)){pendingRemoval.value=null;return}await saveValues({[record.key]:{remove:true}});pendingRemoval.value=null}async function saveNewValue(){const key=String(newValue.value.key||"").trim();if(!key){return}await saveValues({[key]:{secret:newValue.value.secret===true,value:newValue.value.value}});newValue.value=emptyNewValue()}async function saveValues(values={}){clearRevealedSecrets();await saveCommand.run({values});await envResource.reload()}function reloadPage(){if(typeof window!=="undefined"){window.location.reload()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$1,[createBaseVNode("header",_hoisted_2,[createBaseVNode("div",_hoisted_3,[_cache[5]||(_cache[5]=createBaseVNode("h1",null,"Env",-1)),envConfigSourceLabel.value?(openBlock(),createBlock(VChip,{key:0,size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(envConfigSourceLabel.value),1)]),_:1})):createCommentVNode("",true)]),createBaseVNode("div",_hoisted_4,[projectEnvTabActive.value?(openBlock(),createBlock(VBtn,{key:0,loading:envLoading.value,size:"small",type:"button",variant:"tonal",onClick:refresh},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(" Refresh ",-1)])]),_:1},8,["loading"])):createCommentVNode("",true),renderSlot(_ctx.$slots,"tab-actions",{activeTab:activeTab.value},void 0,true)])]),createVNode(VTabs,{modelValue:activeTab.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>activeTab.value=$event),class:"env-panel__tabs",density:"comfortable"},{default:withCtx(()=>[createVNode(VTab,{value:PROJECT_ENV_TAB},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode("Development",-1)])]),_:1}),renderSlot(_ctx.$slots,"tabs",{},void 0,true)]),_:3},8,["modelValue"]),projectEnvTabActive.value&&(envLoading.value||envLoadError.value)?(openBlock(),createBlock(Vibe64AsyncModuleState,{key:0,label:"Env",loading:envLoading.value,message:envLoadError.value||"Loading Env.","min-height":"12rem",onReload:reloadPage,onRetry:refresh},null,8,["loading","message"])):projectEnvTabActive.value?(openBlock(),createElementBlock(Fragment,{key:1},[envUnavailable.value?(openBlock(),createBlock(VAlert,{key:0,class:"env-panel__alert",type:"info",variant:"tonal",density:"compact"},{default:withCtx(()=>[createTextVNode(toDisplayString(envUnavailableMessage.value),1)]),_:1})):createCommentVNode("",true),missingRecords.value.length?(openBlock(),createBlock(VAlert,{key:1,class:"env-panel__alert",type:"warning",variant:"tonal",density:"compact"},{default:withCtx(()=>[createTextVNode(" Missing "+toDisplayString(unref(environmentLabel))+" value(s): "+toDisplayString(missingRecords.value.map(record=>record.key).join(", ")),1)]),_:1})):createCommentVNode("",true),expectedMissingRecords.value.length?(openBlock(),createElementBlock("section",_hoisted_5,[createBaseVNode("div",_hoisted_6,[_cache[8]||(_cache[8]=createBaseVNode("h2",null,"Expected user values",-1)),createVNode(VChip,{size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(expectedMissingRecords.value.length),1)]),_:1})]),createBaseVNode("div",_hoisted_7,[(openBlock(true),createElementBlock(Fragment,null,renderList(expectedMissingRecords.value,record=>{return openBlock(),createBlock(VBtn,{key:`expected:${record.key}`,size:"small",type:"button",variant:"tonal",onClick:$event=>selectExpectedRecord(record)},{default:withCtx(()=>[createTextVNode(toDisplayString(record.key),1)]),_:2},1032,["onClick"])}),128))])])):createCommentVNode("",true),existingNewValue.value?(openBlock(),createBlock(VAlert,{key:3,type:"info",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(newValue.value.key)+" already has a value. Saving replaces this value in development; other Env values stay unchanged. ",1)]),_:1})):createCommentVNode("",true),createBaseVNode("section",_hoisted_8,[createVNode(VTextField,{modelValue:newValue.value.key,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>newValue.value.key=$event),density:"compact","hide-details":"",label:"Key",spellcheck:"false",variant:"outlined"},null,8,["modelValue"]),createVNode(VTextField,{modelValue:newValue.value.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>newValue.value.value=$event),type:newValue.value.secret?"password":"text",density:"compact","hide-details":"",label:"Value",spellcheck:"false",variant:"outlined"},null,8,["modelValue","type"]),createVNode(VCheckbox,{modelValue:newValue.value.secret,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>newValue.value.secret=$event),density:"compact","hide-details":"",label:"Secret"},null,8,["modelValue"]),createVNode(VBtn,{disabled:!newValue.value.key,loading:saveBusy.value,color:"primary",type:"button",variant:"flat",onClick:saveNewValue},{default:withCtx(()=>[createTextVNode(toDisplayString(existingNewValue.value?"Replace value":"Add"),1)]),_:1},8,["disabled","loading"])]),createVNode(RuntimeConfigRecordsView,{"editable-empty-text":"No user Env values.","editable-title":"User values","environment-label":unref(environmentLabel),records:records.value,"revealed-secrets":unref(revealedSecrets),"save-busy":saveBusy.value,"secret-reveal-busy-key":unref(secretRevealBusyKey),"secret-reveal-enabled":"","system-title":"System values",onHideSecret:unref(hideSecret),onRemoveRecord:requestRemoveRecord,onRevealSecret:unref(revealSecret),onSaveRecord:saveRecord},null,8,["environment-label","records","revealed-secrets","save-busy","secret-reveal-busy-key","onHideSecret","onRevealSecret"])],64)):renderSlot(_ctx.$slots,"tab-panel",{activeTab:activeTab.value},void 0,true,2),createVNode(VDialog,{modelValue:removeConfirmOpen.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>removeConfirmOpen.value=$event),"max-width":"30rem"},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode("Remove Env value?",-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode("code",null,toDisplayString(pendingRemovalKey.value),1),_cache[10]||(_cache[10]=createTextVNode(" will no longer be supplied to this project's development processes. ",-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:saveBusy.value,type:"button",variant:"text",onClick:cancelRemoveRecord},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(" Cancel ",-1)])]),_:1},8,["disabled"]),createVNode(VBtn,{color:"error",loading:saveBusy.value,type:"button",variant:"flat",onClick:confirmRemoveRecord},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(" Remove ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["modelValue"])])}}};const EnvPanel=_export_sfc(_sfc_main$1,[["__scopeId","data-v-3de313ec"]]);const _hoisted_1={class:"vibe64-dashboard-page"};const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[createVNode(EnvPanel)])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-c6bb4035"]]);export{index as default};
1
+ import{_ as _export_sfc,a as openBlock,b as createBlock,w as withCtx,d as createBaseVNode,c as createElementBlock,r as createCommentVNode,F as Fragment,y as renderList,t as toDisplayString,n as VBtn,j as createTextVNode,e as createVNode,a9 as VTextField,bV as VTable,B as ref,ai as VChip,bW as VExpansionPanel,bX as VExpansionPanelTitle,bY as VExpansionPanelText,bZ as VExpansionPanels,A as computed,aR as useRoute,H as watch,D as useEndpointResource,E as useCommand,R as ROUTE_VISIBILITY_PUBLIC,Q as VIBE64_SURFACE_ID,J as renderSlot,I as VAlert,i as unref,b_ as VCheckbox,V as VCard,g as VCardTitle,k as VCardText,l as VCardActions,z as VSpacer,p as VDialog}from"./index-C4KnwA0g.js";import{V as Vibe64AsyncModuleState}from"./Vibe64AsyncModuleState-DuuzlJDp.js";import{E as ENV_ENDPOINT,a as VIBE64_PROJECT_CHANGED_EVENT,i as VIBE64_ENV_USER_VALUES_API_SUFFIX,j as ENV_USER_VALUES_ENDPOINT,k as VIBE64_ENV_SECRET_REVEAL_API_SUFFIX,l as ENV_SECRET_REVEAL_ENDPOINT,m as envQueryKey}from"./studioGateApi-BwBnOYBp.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-DcDkjbLT.js";import{u as useVibe64SessionSelection}from"./useVibe64SessionSelection-G6KQKJxb.js";import{a as VTab,V as VTabs}from"./VTabs-CQq9CAuT.js";import"./vibe64SessionRequestConfig-uGWcyQY6.js";const _hoisted_1$3={key:0,class:"runtime-config-records-table__actions-column"};const _hoisted_2$2={key:0};const _hoisted_3$2=["onClick"];const _hoisted_4$2={key:0,class:"runtime-config-records-table__secret-value"};const _hoisted_5$2={key:0};const _hoisted_6$1={class:"runtime-config-records-table__edit"};const _sfc_main$3={__name:"RuntimeConfigRecordsTable",props:{environmentLabel:{default:"environment",type:String},records:{default:()=>[],type:Array},revealedSecrets:{default:()=>({}),type:Object},saveBusy:{default:false,type:Boolean},secretRevealBusyKey:{default:"",type:String},secretRevealEnabled:{default:false,type:Boolean},showActions:{default:false,type:Boolean}},emits:["hide-secret","remove-record","reveal-secret","save-record"],setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const draftValues=ref({});function recordKey(record={}){return`${record.scope||props.environmentLabel}:${record.key||""}`}function draftTouched(record={}){return Object.hasOwn(draftValues.value,recordKey(record))}function draftValue(record={}){return draftTouched(record)?draftValues.value[recordKey(record)]:""}function setDraftValue(record={},value=""){draftValues.value={...draftValues.value,[recordKey(record)]:String(value??"")}}function recordValueLabel(record={}){if(record.secret){return secretIsRevealed(record)?String(props.revealedSecrets[record.key]??""):record.valuePresent?"********":""}return String(record.value??"")}function secretIsRevealed(record={}){return Boolean(record.key)&&Object.hasOwn(props.revealedSecrets,record.key)}function secretVisibilityAction(record={}){return secretIsRevealed(record)?"Hide":"Reveal"}function secretVisibilityLabel(record={}){return`${secretVisibilityAction(record)} ${record.key||"secret"}`}function toggleSecretVisibility(record={}){emit(secretIsRevealed(record)?"hide-secret":"reveal-secret",record)}function saveRecord(record={}){if(!props.showActions||!draftTouched(record)){return}const key=recordKey(record);const value=draftValue(record);const nextDraftValues={...draftValues.value};delete nextDraftValues[key];draftValues.value=nextDraftValues;emit("save-record",{record,value})}function removeRecord(record={}){if(props.showActions){emit("remove-record",record)}}async function copyKey(key=""){const text=String(key||"");if(typeof navigator!=="undefined"&&navigator.clipboard&&text){await navigator.clipboard.writeText(text)}}return(_ctx,_cache)=>{return openBlock(),createBlock(VTable,{class:"runtime-config-records-table",density:"compact"},{default:withCtx(()=>[createBaseVNode("colgroup",null,[_cache[0]||(_cache[0]=createBaseVNode("col",{class:"runtime-config-records-table__key-column"},null,-1)),_cache[1]||(_cache[1]=createBaseVNode("col",{class:"runtime-config-records-table__value-column"},null,-1)),__props.showActions?(openBlock(),createElementBlock("col",_hoisted_1$3)):createCommentVNode("",true)]),createBaseVNode("thead",null,[createBaseVNode("tr",null,[_cache[2]||(_cache[2]=createBaseVNode("th",null,"Key",-1)),_cache[3]||(_cache[3]=createBaseVNode("th",null,"Value",-1)),__props.showActions?(openBlock(),createElementBlock("th",_hoisted_2$2,"Actions")):createCommentVNode("",true)])]),createBaseVNode("tbody",null,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.records,record=>{return openBlock(),createElementBlock("tr",{key:recordKey(record)},[createBaseVNode("td",null,[createBaseVNode("button",{class:"runtime-config-records-table__key",type:"button",onClick:$event=>copyKey(record.key)},toDisplayString(record.key),9,_hoisted_3$2)]),createBaseVNode("td",null,[record.secret?(openBlock(),createElementBlock("div",_hoisted_4$2,[createBaseVNode("code",null,toDisplayString(recordValueLabel(record)),1),__props.secretRevealEnabled&&record.valuePresent?(openBlock(),createBlock(VBtn,{key:0,"aria-label":secretVisibilityLabel(record),disabled:Boolean(__props.secretRevealBusyKey)&&__props.secretRevealBusyKey!==record.key,loading:__props.secretRevealBusyKey===record.key,size:"x-small",type:"button",variant:"text",onClick:$event=>toggleSecretVisibility(record)},{default:withCtx(()=>[createTextVNode(toDisplayString(secretVisibilityAction(record)),1)]),_:2},1032,["aria-label","disabled","loading","onClick"])):createCommentVNode("",true)])):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(recordValueLabel(record)),1)],64))]),__props.showActions?(openBlock(),createElementBlock("td",_hoisted_5$2,[createBaseVNode("div",_hoisted_6$1,[createVNode(VTextField,{"model-value":draftValue(record),type:record.secret?"password":"text",density:"compact","hide-details":"",label:"New value",spellcheck:"false",variant:"outlined","onUpdate:modelValue":$event=>setDraftValue(record,$event)},null,8,["model-value","type","onUpdate:modelValue"]),createVNode(VBtn,{disabled:!draftTouched(record),loading:__props.saveBusy,size:"small",type:"button",variant:"tonal",onClick:$event=>saveRecord(record)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(" Save ",-1)])]),_:1},8,["disabled","loading","onClick"]),createVNode(VBtn,{loading:__props.saveBusy,size:"small",type:"button",variant:"text",onClick:$event=>removeRecord(record)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(" Remove ",-1)])]),_:1},8,["loading","onClick"])])])):createCommentVNode("",true)])}),128))])]),_:1})}}};const RuntimeConfigRecordsTable=_export_sfc(_sfc_main$3,[["__scopeId","data-v-2fe6f275"]]);const _hoisted_1$2={class:"runtime-config-records"};const _hoisted_2$1={class:"runtime-config-records__section"};const _hoisted_3$1={class:"runtime-config-records__heading"};const _hoisted_4$1={key:1,class:"runtime-config-records__empty"};const _hoisted_5$1={class:"runtime-config-records__system-title"};const _sfc_main$2={__name:"RuntimeConfigRecordsView",props:{editableEmptyText:{default:"No user Env values.",type:String},editableTitle:{default:"User values",type:String},environmentLabel:{default:"environment",type:String},records:{default:()=>[],type:Array},revealedSecrets:{default:()=>({}),type:Object},saveBusy:{default:false,type:Boolean},secretRevealBusyKey:{default:"",type:String},secretRevealEnabled:{default:false,type:Boolean},systemTitle:{default:"System values",type:String}},emits:["hide-secret","remove-record","reveal-secret","save-record"],setup(__props){const props=__props;const records=computed(()=>Array.isArray(props.records)?props.records:[]);const editableRecords=computed(()=>records.value.filter(recordEditable));const systemRecords=computed(()=>records.value.filter(record=>!recordEditable(record)));function recordEditable(record={}){return record.editable===true}return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$2,[createBaseVNode("section",_hoisted_2$1,[createBaseVNode("div",_hoisted_3$1,[createBaseVNode("h2",null,toDisplayString(__props.editableTitle),1),createVNode(VChip,{size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(editableRecords.value.length),1)]),_:1})]),editableRecords.value.length?(openBlock(),createBlock(RuntimeConfigRecordsTable,{key:0,"environment-label":__props.environmentLabel,records:editableRecords.value,"revealed-secrets":__props.revealedSecrets,"save-busy":__props.saveBusy,"secret-reveal-busy-key":__props.secretRevealBusyKey,"secret-reveal-enabled":__props.secretRevealEnabled,"show-actions":"",onHideSecret:_cache[0]||(_cache[0]=$event=>_ctx.$emit("hide-secret",$event)),onRemoveRecord:_cache[1]||(_cache[1]=$event=>_ctx.$emit("remove-record",$event)),onRevealSecret:_cache[2]||(_cache[2]=$event=>_ctx.$emit("reveal-secret",$event)),onSaveRecord:_cache[3]||(_cache[3]=$event=>_ctx.$emit("save-record",$event))},null,8,["environment-label","records","revealed-secrets","save-busy","secret-reveal-busy-key","secret-reveal-enabled"])):(openBlock(),createElementBlock("p",_hoisted_4$1,toDisplayString(__props.editableEmptyText),1))]),systemRecords.value.length?(openBlock(),createBlock(VExpansionPanels,{key:0,class:"runtime-config-records__system",variant:"accordion"},{default:withCtx(()=>[createVNode(VExpansionPanel,null,{default:withCtx(()=>[createVNode(VExpansionPanelTitle,null,{default:withCtx(()=>[createBaseVNode("span",_hoisted_5$1,[createTextVNode(toDisplayString(__props.systemTitle)+" ",1),createVNode(VChip,{size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(systemRecords.value.length),1)]),_:1})])]),_:1}),createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createVNode(RuntimeConfigRecordsTable,{"environment-label":__props.environmentLabel,records:systemRecords.value,"revealed-secrets":__props.revealedSecrets,"secret-reveal-busy-key":__props.secretRevealBusyKey,"secret-reveal-enabled":__props.secretRevealEnabled,onHideSecret:_cache[4]||(_cache[4]=$event=>_ctx.$emit("hide-secret",$event)),onRevealSecret:_cache[5]||(_cache[5]=$event=>_ctx.$emit("reveal-secret",$event))},null,8,["environment-label","records","revealed-secrets","secret-reveal-busy-key","secret-reveal-enabled"])]),_:1})]),_:1})]),_:1})):createCommentVNode("",true)])}}};const RuntimeConfigRecordsView=_export_sfc(_sfc_main$2,[["__scopeId","data-v-8f9be4ce"]]);function runtimeConfigSecretKey(value={}){return String(typeof value==="string"?value:(value==null?void 0:value.key)||"").trim()}function useRuntimeConfigSecretReveal({revealValue}={}){if(typeof revealValue!=="function"){throw new TypeError("useRuntimeConfigSecretReveal requires revealValue().")}const revealedSecrets=ref({});const secretRevealBusyKey=ref("");async function revealSecret(record={}){const key=runtimeConfigSecretKey(record);if(!key||secretRevealBusyKey.value){return false}secretRevealBusyKey.value=key;try{const value=await revealValue(key,record);if(value===void 0||value===null){return false}revealedSecrets.value={...revealedSecrets.value,[key]:String(value)};return true}finally{secretRevealBusyKey.value=""}}function hideSecret(record={}){const key=runtimeConfigSecretKey(record);if(!key||!Object.hasOwn(revealedSecrets.value,key)){return false}const next={...revealedSecrets.value};delete next[key];revealedSecrets.value=next;return true}function clearRevealedSecrets(){revealedSecrets.value={}}return{clearRevealedSecrets,hideSecret,revealedSecrets,revealSecret,secretRevealBusyKey}}const _hoisted_1$1={class:"env-panel"};const _hoisted_2={class:"env-panel__header"};const _hoisted_3={class:"env-panel__title"};const _hoisted_4={class:"env-panel__actions"};const _hoisted_5={key:2,class:"env-panel__expected"};const _hoisted_6={class:"env-panel__section-heading env-panel__section-heading--inline"};const _hoisted_7={class:"env-panel__expected-keys"};const _hoisted_8={class:"env-panel__add"};const PROJECT_ENV_TAB="dev";const PROJECT_ENVIRONMENT="dev";const PROJECT_ENVIRONMENT_LABEL="development";const _sfc_main$1={__name:"EnvPanel",setup(__props){const projectSlug=useVibe64ProjectSlug();const sessionSelection=useVibe64SessionSelection({projectSlug});const selectedSessionId=sessionSelection.selectedId;const activeTab=ref(PROJECT_ENV_TAB);const newValue=ref(emptyNewValue());const route=useRoute();watch(()=>[route.query.prefillKey,route.query.prefillValue,route.query.prefillSecret],([key,value,secret])=>{if(typeof key!=="string"||!/^[A-Z_][A-Z0-9_]*$/u.test(key)||key.length>200)return;if(secret==="true"){newValue.value={key,value:"",secret:true}}else if(value===void 0||typeof value==="string"&&value.length<=4096){newValue.value={key,value:value??"",secret:false}}},{immediate:true});const pendingRemoval=ref(null);const envResource=useEndpointResource({fallbackLoadError:"Env could not load.",path:ENV_ENDPOINT,queryKey:computed(()=>[...envQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),PROJECT_ENVIRONMENT,selectedSessionId.value||"baseline"]),readQuery:computed(()=>({environment:PROJECT_ENVIRONMENT,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{}})),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT},refreshOnPull:true,requestRecoveryLabel:"Env"});const saveCommand=useCommand({access:"never",apiSuffix:VIBE64_ENV_USER_VALUES_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:ENV_USER_VALUES_ENDPOINT}),buildRawPayload:(_model,{context})=>({environment:PROJECT_ENVIRONMENT,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{},values:context.values||{}}),fallbackRunError:"Env value could not be saved.",messages:{error:"Env value could not be saved.",success:"Env saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.env.user-values.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const revealCommand=useCommand({access:"never",apiSuffix:VIBE64_ENV_SECRET_REVEAL_API_SUFFIX,buildCommandOptions:()=>({method:"POST",path:ENV_SECRET_REVEAL_ENDPOINT}),buildRawPayload:(_model,{context})=>({environment:PROJECT_ENVIRONMENT,key:context.key,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{}}),fallbackRunError:"Env secret could not be revealed.",messages:{error:"Env secret could not be revealed."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.env.secret.reveal",suppressSuccessMessage:true,surfaceId:VIBE64_SURFACE_ID,writeMethod:"POST"});const{clearRevealedSecrets,hideSecret,revealedSecrets,revealSecret,secretRevealBusyKey}=useRuntimeConfigSecretReveal({async revealValue(key){const response=await revealCommand.run({key});return(response==null?void 0:response.ok)===false?null:response==null?void 0:response.value}});watch([projectSlug,selectedSessionId],clearRevealedSecrets);const env=computed(()=>{var _a;return((_a=envResource.data.value)==null?void 0:_a.env)||{}});const envConfigSourceLabel=computed(()=>{var _a,_b;return String(((_b=(_a=env.value)==null?void 0:_a.configSource)==null?void 0:_b.label)||"")});const envLoading=computed(()=>envResource.isLoading.value===true);const envLoadError=computed(()=>String(envResource.loadError.value||""));const envUnavailable=computed(()=>{var _a;return Boolean((_a=env.value)==null?void 0:_a.unavailable)});const envUnavailableMessage=computed(()=>{var _a,_b;return String(((_b=(_a=env.value)==null?void 0:_a.unavailable)==null?void 0:_b.message)||"Project Env is unavailable. Fix the project configuration and try again.")});const saveBusy=computed(()=>saveCommand.isRunning===true);const removeConfirmOpen=computed({get:()=>Boolean(pendingRemoval.value),set:open=>{if(!open&&!saveBusy.value){pendingRemoval.value=null}}});const pendingRemovalKey=computed(()=>{var _a;return String(((_a=pendingRemoval.value)==null?void 0:_a.key)||"")});const projectEnvTabActive=computed(()=>activeTab.value===PROJECT_ENV_TAB);const records=computed(()=>{var _a;return Array.isArray((_a=env.value)==null?void 0:_a.records)?env.value.records:[]});const existingNewValue=computed(()=>records.value.some(record=>record.key===String(newValue.value.key||"").trim()&&record.valuePresent===true));const missingRecords=computed(()=>records.value.filter(recordMissing));const expectedMissingRecords=computed(()=>missingRecords.value.filter(recordEditable));const environmentLabel=PROJECT_ENVIRONMENT_LABEL;function emptyNewValue(){return{key:"",secret:true,value:""}}function recordEditable(record={}){return record.editable===true}function recordMissing(record={}){return record.valuePresent!==true&&(record.missing===true||Array.isArray(record.requiredFor)&&record.requiredFor.length>0)}function selectExpectedRecord(record={}){const key=String(record.key||"").trim();if(!key){return}newValue.value={key,secret:record.secret===true,value:""}}async function refresh(){clearRevealedSecrets();await envResource.reload()}async function saveRecord({record={},value=""}={}){if(!recordEditable(record)){return}await saveValues({[record.key]:{secret:record.secret===true,value}})}function requestRemoveRecord(record={}){if(!recordEditable(record)){return}pendingRemoval.value=record}function cancelRemoveRecord(){if(!saveBusy.value){pendingRemoval.value=null}}async function confirmRemoveRecord(){const record=pendingRemoval.value;if(!recordEditable(record)){pendingRemoval.value=null;return}await saveValues({[record.key]:{remove:true}});pendingRemoval.value=null}async function saveNewValue(){const key=String(newValue.value.key||"").trim();if(!key){return}await saveValues({[key]:{secret:newValue.value.secret===true,value:newValue.value.value}});newValue.value=emptyNewValue()}async function saveValues(values={}){clearRevealedSecrets();await saveCommand.run({values});await envResource.reload()}function reloadPage(){if(typeof window!=="undefined"){window.location.reload()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$1,[createBaseVNode("header",_hoisted_2,[createBaseVNode("div",_hoisted_3,[_cache[5]||(_cache[5]=createBaseVNode("h1",null,"Env",-1)),envConfigSourceLabel.value?(openBlock(),createBlock(VChip,{key:0,size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(envConfigSourceLabel.value),1)]),_:1})):createCommentVNode("",true)]),createBaseVNode("div",_hoisted_4,[projectEnvTabActive.value?(openBlock(),createBlock(VBtn,{key:0,loading:envLoading.value,size:"small",type:"button",variant:"tonal",onClick:refresh},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(" Refresh ",-1)])]),_:1},8,["loading"])):createCommentVNode("",true),renderSlot(_ctx.$slots,"tab-actions",{activeTab:activeTab.value},void 0,true)])]),createVNode(VTabs,{modelValue:activeTab.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>activeTab.value=$event),class:"env-panel__tabs",density:"comfortable"},{default:withCtx(()=>[createVNode(VTab,{value:PROJECT_ENV_TAB},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode("Development",-1)])]),_:1}),renderSlot(_ctx.$slots,"tabs",{},void 0,true)]),_:3},8,["modelValue"]),projectEnvTabActive.value&&(envLoading.value||envLoadError.value)?(openBlock(),createBlock(Vibe64AsyncModuleState,{key:0,label:"Env",loading:envLoading.value,message:envLoadError.value||"Loading Env.","min-height":"12rem",onReload:reloadPage,onRetry:refresh},null,8,["loading","message"])):projectEnvTabActive.value?(openBlock(),createElementBlock(Fragment,{key:1},[envUnavailable.value?(openBlock(),createBlock(VAlert,{key:0,class:"env-panel__alert",type:"info",variant:"tonal",density:"compact"},{default:withCtx(()=>[createTextVNode(toDisplayString(envUnavailableMessage.value),1)]),_:1})):createCommentVNode("",true),missingRecords.value.length?(openBlock(),createBlock(VAlert,{key:1,class:"env-panel__alert",type:"warning",variant:"tonal",density:"compact"},{default:withCtx(()=>[createTextVNode(" Missing "+toDisplayString(unref(environmentLabel))+" value(s): "+toDisplayString(missingRecords.value.map(record=>record.key).join(", ")),1)]),_:1})):createCommentVNode("",true),expectedMissingRecords.value.length?(openBlock(),createElementBlock("section",_hoisted_5,[createBaseVNode("div",_hoisted_6,[_cache[8]||(_cache[8]=createBaseVNode("h2",null,"Expected user values",-1)),createVNode(VChip,{size:"x-small",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(expectedMissingRecords.value.length),1)]),_:1})]),createBaseVNode("div",_hoisted_7,[(openBlock(true),createElementBlock(Fragment,null,renderList(expectedMissingRecords.value,record=>{return openBlock(),createBlock(VBtn,{key:`expected:${record.key}`,size:"small",type:"button",variant:"tonal",onClick:$event=>selectExpectedRecord(record)},{default:withCtx(()=>[createTextVNode(toDisplayString(record.key),1)]),_:2},1032,["onClick"])}),128))])])):createCommentVNode("",true),existingNewValue.value?(openBlock(),createBlock(VAlert,{key:3,type:"info",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(newValue.value.key)+" already has a value. Saving replaces this value in development; other Env values stay unchanged. ",1)]),_:1})):createCommentVNode("",true),createBaseVNode("section",_hoisted_8,[createVNode(VTextField,{modelValue:newValue.value.key,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>newValue.value.key=$event),density:"compact","hide-details":"",label:"Key",spellcheck:"false",variant:"outlined"},null,8,["modelValue"]),createVNode(VTextField,{modelValue:newValue.value.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>newValue.value.value=$event),type:newValue.value.secret?"password":"text",density:"compact","hide-details":"",label:"Value",spellcheck:"false",variant:"outlined"},null,8,["modelValue","type"]),createVNode(VCheckbox,{modelValue:newValue.value.secret,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>newValue.value.secret=$event),density:"compact","hide-details":"",label:"Secret"},null,8,["modelValue"]),createVNode(VBtn,{disabled:!newValue.value.key,loading:saveBusy.value,color:"primary",type:"button",variant:"flat",onClick:saveNewValue},{default:withCtx(()=>[createTextVNode(toDisplayString(existingNewValue.value?"Replace value":"Add"),1)]),_:1},8,["disabled","loading"])]),createVNode(RuntimeConfigRecordsView,{"editable-empty-text":"No user Env values.","editable-title":"User values","environment-label":unref(environmentLabel),records:records.value,"revealed-secrets":unref(revealedSecrets),"save-busy":saveBusy.value,"secret-reveal-busy-key":unref(secretRevealBusyKey),"secret-reveal-enabled":"","system-title":"System values",onHideSecret:unref(hideSecret),onRemoveRecord:requestRemoveRecord,onRevealSecret:unref(revealSecret),onSaveRecord:saveRecord},null,8,["environment-label","records","revealed-secrets","save-busy","secret-reveal-busy-key","onHideSecret","onRevealSecret"])],64)):renderSlot(_ctx.$slots,"tab-panel",{activeTab:activeTab.value},void 0,true,2),createVNode(VDialog,{modelValue:removeConfirmOpen.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>removeConfirmOpen.value=$event),"max-width":"30rem"},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode("Remove Env value?",-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode("code",null,toDisplayString(pendingRemovalKey.value),1),_cache[10]||(_cache[10]=createTextVNode(" will no longer be supplied to this project's development processes. ",-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:saveBusy.value,type:"button",variant:"text",onClick:cancelRemoveRecord},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(" Cancel ",-1)])]),_:1},8,["disabled"]),createVNode(VBtn,{color:"error",loading:saveBusy.value,type:"button",variant:"flat",onClick:confirmRemoveRecord},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(" Remove ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["modelValue"])])}}};const EnvPanel=_export_sfc(_sfc_main$1,[["__scopeId","data-v-3de313ec"]]);const _hoisted_1={class:"vibe64-dashboard-page"};const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[createVNode(EnvPanel)])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-c6bb4035"]]);export{index as default};
@@ -1 +1 @@
1
- import{_ as _export_sfc,D as useEndpointResource,A as computed,E as useCommand,R as ROUTE_VISIBILITY_PUBLIC,Q as VIBE64_SURFACE_ID,H as watch,a as openBlock,c as createElementBlock,d as createBaseVNode,e as createVNode,w as withCtx,j as createTextVNode,t as toDisplayString,n as VBtn,b as createBlock,F as Fragment,y as renderList,r as createCommentVNode,B as ref,a9 as VTextField,i as unref,bb as VSelect,ai as VChip}from"./index-SBc6H2In.js";import{V as Vibe64AsyncModuleState}from"./Vibe64AsyncModuleState-Cel3OePx.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-n5T5l2pY.js";import{u as useVibe64SessionSelection}from"./useVibe64SessionSelection-D1wXIWTm.js";import{f as PREVIEW_IDENTITIES_ENDPOINT,a as VIBE64_PROJECT_CHANGED_EVENT,g as VIBE64_PREVIEW_IDENTITIES_API_SUFFIX,h as previewIdentitiesQueryKey}from"./studioGateApi-B2eiydiA.js";import"./vibe64SessionRequestConfig-B7Llggdb.js";const _hoisted_1$1={class:"preview-identity-settings"};const _hoisted_2={class:"preview-identity-settings__header"};const _hoisted_3={class:"preview-identity-settings__header-actions"};const _hoisted_4={key:1,class:"preview-identity-settings__section"};const _hoisted_5={class:"preview-identity-settings__list"};const _hoisted_6={class:"preview-identity-settings__fields"};const _hoisted_7={class:"preview-identity-settings__identity-actions"};const _hoisted_8={key:0,class:"preview-identity-settings__empty"};const _sfc_main$1={__name:"PreviewIdentitySettings",setup(__props){const identityTypes=Object.freeze([{label:"Email",value:"email"},{label:"Login name",value:"login"},{label:"User ID",value:"user-id"}]);const projectSlug=useVibe64ProjectSlug();const sessionSelection=useVibe64SessionSelection({projectSlug});const selectedSessionId=sessionSelection.selectedId;const identities=ref([]);const savedIdentities=ref([]);const resource=useEndpointResource({fallbackLoadError:"Managed app identities could not load.",path:PREVIEW_IDENTITIES_ENDPOINT,queryKey:computed(()=>[...previewIdentitiesQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),selectedSessionId.value||"baseline"]),readQuery:computed(()=>selectedSessionId.value?{sessionId:selectedSessionId.value}:{}),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT},refreshOnPull:true,requestRecoveryLabel:"Managed app access"});const saveCommand=useCommand({access:"never",apiSuffix:VIBE64_PREVIEW_IDENTITIES_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:PREVIEW_IDENTITIES_ENDPOINT}),buildRawPayload:(_model,{context})=>({identities:context.identities,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{}}),fallbackRunError:"Managed app identities could not be saved.",messages:{error:"Managed app identities could not be saved.",success:"Managed app identities saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.preview-identities.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const loading=computed(()=>resource.isLoading.value===true);const loadError=computed(()=>String(resource.loadError.value||""));const saving=computed(()=>saveCommand.isRunning===true);const changed=computed(()=>JSON.stringify(identities.value)!==JSON.stringify(savedIdentities.value));watch(()=>{var _a;return(_a=resource.data.value)==null?void 0:_a.identities},value=>{const next=cloneIdentities(value);identities.value=next;savedIdentities.value=cloneIdentities(next)},{immediate:true});function cloneIdentities(value=[]){return(Array.isArray(value)?value:[]).map(identity=>({name:String((identity==null?void 0:identity.name)||""),type:String((identity==null?void 0:identity.type)||""),value:String((identity==null?void 0:identity.value)||"")}))}function identityPlaceholder(type=""){return{email:"admin@example.com",login:"admin","user-id":"42"}[String(type||"")]||"Application identifier"}function addIdentity(){identities.value.push({name:"",type:"email",value:""})}function removeIdentity(index2=-1){identities.value.splice(index2,1)}function makeDefault(index2=-1){if(index2<=0||index2>=identities.value.length){return}identities.value.unshift(identities.value.splice(index2,1)[0])}async function refresh(){await resource.reload()}async function save(){await saveCommand.run({identities:cloneIdentities(identities.value)});await resource.reload()}function reloadPage(){if(typeof window!=="undefined"){window.location.reload()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$1,[createBaseVNode("header",_hoisted_2,[_cache[0]||(_cache[0]=createBaseVNode("div",null,[createBaseVNode("h1",null,"Managed app access"),createBaseVNode("p",null," Named existing application accounts for authenticated Preview and Playwright. The first identity is the default. ")],-1)),createBaseVNode("div",_hoisted_3,[createVNode(VBtn,{disabled:loading.value||saving.value,size:"small",type:"button",variant:"tonal",onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?"Refreshing…":"Refresh"),1)]),_:1},8,["disabled"]),createVNode(VBtn,{color:"primary",disabled:!changed.value||loading.value||saving.value,size:"small",type:"button",variant:"flat",onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?"Saving…":"Save"),1)]),_:1},8,["disabled"])])]),loading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState,{key:0,label:"Managed app access",loading:loading.value,message:loadError.value||"Loading managed app identities.","min-height":"12rem",onReload:reloadPage,onRetry:refresh},null,8,["loading","message"])):(openBlock(),createElementBlock("section",_hoisted_4,[_cache[5]||(_cache[5]=createBaseVNode("div",{class:"preview-identity-settings__section-copy"},[createBaseVNode("h2",null,"Managed app identities"),createBaseVNode("p",null,[createTextVNode(" Saved in "),createBaseVNode("code",null,".vibe64/preview-identities.json"),createTextVNode(" in the active project source, so they follow the repository. These are application identifiers, not passwords or authentication secrets. ")])],-1)),createBaseVNode("div",_hoisted_5,[(openBlock(true),createElementBlock(Fragment,null,renderList(identities.value,(identity,index2)=>{return openBlock(),createElementBlock("div",{key:index2,class:"preview-identity-settings__identity"},[createBaseVNode("div",_hoisted_6,[createVNode(VTextField,{modelValue:identity.name,"onUpdate:modelValue":$event=>identity.name=$event,autocomplete:"off",density:"compact",label:"Name",placeholder:"admin",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue"]),createVNode(VSelect,{modelValue:identity.type,"onUpdate:modelValue":$event=>identity.type=$event,density:"compact","item-title":"label","item-value":"value",items:unref(identityTypes),label:"App identifier",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue","items"]),createVNode(VTextField,{modelValue:identity.value,"onUpdate:modelValue":$event=>identity.value=$event,autocomplete:"off",density:"compact",label:"Application value",placeholder:identityPlaceholder(identity.type),type:identity.type==="email"?"email":"text",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue","placeholder","type"])]),createBaseVNode("div",_hoisted_7,[index2===0?(openBlock(),createBlock(VChip,{key:0,color:"primary",size:"small",variant:"tonal"},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(" Default ",-1)])]),_:1})):(openBlock(),createBlock(VBtn,{key:1,size:"small",type:"button",variant:"text",onClick:$event=>makeDefault(index2)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(" Make default ",-1)])]),_:1},8,["onClick"])),createVNode(VBtn,{color:"error",size:"small",type:"button",variant:"text",onClick:$event=>removeIdentity(index2)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(" Remove ",-1)])]),_:1},8,["onClick"])])])}),128)),identities.value.length===0?(openBlock(),createElementBlock("p",_hoisted_8," No managed app identities are configured. Preview remains available as a guest when the application supports it. ")):createCommentVNode("",true),createVNode(VBtn,{class:"preview-identity-settings__add",size:"small",type:"button",variant:"outlined",onClick:addIdentity},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(" Add identity ",-1)])]),_:1})])]))])}}};const PreviewIdentitySettings=_export_sfc(_sfc_main$1,[["__scopeId","data-v-a63a6799"]]);const _hoisted_1={class:"vibe64-dashboard-page"};const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[createVNode(PreviewIdentitySettings)])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-207f989d"]]);export{index as default};
1
+ import{_ as _export_sfc,D as useEndpointResource,A as computed,E as useCommand,R as ROUTE_VISIBILITY_PUBLIC,Q as VIBE64_SURFACE_ID,H as watch,a as openBlock,c as createElementBlock,d as createBaseVNode,e as createVNode,w as withCtx,j as createTextVNode,t as toDisplayString,n as VBtn,b as createBlock,F as Fragment,y as renderList,r as createCommentVNode,B as ref,a9 as VTextField,i as unref,bb as VSelect,ai as VChip}from"./index-C4KnwA0g.js";import{V as Vibe64AsyncModuleState}from"./Vibe64AsyncModuleState-DuuzlJDp.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-DcDkjbLT.js";import{u as useVibe64SessionSelection}from"./useVibe64SessionSelection-G6KQKJxb.js";import{f as PREVIEW_IDENTITIES_ENDPOINT,a as VIBE64_PROJECT_CHANGED_EVENT,g as VIBE64_PREVIEW_IDENTITIES_API_SUFFIX,h as previewIdentitiesQueryKey}from"./studioGateApi-BwBnOYBp.js";import"./vibe64SessionRequestConfig-uGWcyQY6.js";const _hoisted_1$1={class:"preview-identity-settings"};const _hoisted_2={class:"preview-identity-settings__header"};const _hoisted_3={class:"preview-identity-settings__header-actions"};const _hoisted_4={key:1,class:"preview-identity-settings__section"};const _hoisted_5={class:"preview-identity-settings__list"};const _hoisted_6={class:"preview-identity-settings__fields"};const _hoisted_7={class:"preview-identity-settings__identity-actions"};const _hoisted_8={key:0,class:"preview-identity-settings__empty"};const _sfc_main$1={__name:"PreviewIdentitySettings",setup(__props){const identityTypes=Object.freeze([{label:"Email",value:"email"},{label:"Login name",value:"login"},{label:"User ID",value:"user-id"}]);const projectSlug=useVibe64ProjectSlug();const sessionSelection=useVibe64SessionSelection({projectSlug});const selectedSessionId=sessionSelection.selectedId;const identities=ref([]);const savedIdentities=ref([]);const resource=useEndpointResource({fallbackLoadError:"Managed app identities could not load.",path:PREVIEW_IDENTITIES_ENDPOINT,queryKey:computed(()=>[...previewIdentitiesQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),selectedSessionId.value||"baseline"]),readQuery:computed(()=>selectedSessionId.value?{sessionId:selectedSessionId.value}:{}),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT},refreshOnPull:true,requestRecoveryLabel:"Managed app access"});const saveCommand=useCommand({access:"never",apiSuffix:VIBE64_PREVIEW_IDENTITIES_API_SUFFIX,buildCommandOptions:()=>({method:"PUT",path:PREVIEW_IDENTITIES_ENDPOINT}),buildRawPayload:(_model,{context})=>({identities:context.identities,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{}}),fallbackRunError:"Managed app identities could not be saved.",messages:{error:"Managed app identities could not be saved.",success:"Managed app identities saved."},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:"vibe64.preview-identities.save",surfaceId:VIBE64_SURFACE_ID,writeMethod:"PUT"});const loading=computed(()=>resource.isLoading.value===true);const loadError=computed(()=>String(resource.loadError.value||""));const saving=computed(()=>saveCommand.isRunning===true);const changed=computed(()=>JSON.stringify(identities.value)!==JSON.stringify(savedIdentities.value));watch(()=>{var _a;return(_a=resource.data.value)==null?void 0:_a.identities},value=>{const next=cloneIdentities(value);identities.value=next;savedIdentities.value=cloneIdentities(next)},{immediate:true});function cloneIdentities(value=[]){return(Array.isArray(value)?value:[]).map(identity=>({name:String((identity==null?void 0:identity.name)||""),type:String((identity==null?void 0:identity.type)||""),value:String((identity==null?void 0:identity.value)||"")}))}function identityPlaceholder(type=""){return{email:"admin@example.com",login:"admin","user-id":"42"}[String(type||"")]||"Application identifier"}function addIdentity(){identities.value.push({name:"",type:"email",value:""})}function removeIdentity(index2=-1){identities.value.splice(index2,1)}function makeDefault(index2=-1){if(index2<=0||index2>=identities.value.length){return}identities.value.unshift(identities.value.splice(index2,1)[0])}async function refresh(){await resource.reload()}async function save(){await saveCommand.run({identities:cloneIdentities(identities.value)});await resource.reload()}function reloadPage(){if(typeof window!=="undefined"){window.location.reload()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1$1,[createBaseVNode("header",_hoisted_2,[_cache[0]||(_cache[0]=createBaseVNode("div",null,[createBaseVNode("h1",null,"Managed app access"),createBaseVNode("p",null," Named existing application accounts for authenticated Preview and Playwright. The first identity is the default. ")],-1)),createBaseVNode("div",_hoisted_3,[createVNode(VBtn,{disabled:loading.value||saving.value,size:"small",type:"button",variant:"tonal",onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?"Refreshing…":"Refresh"),1)]),_:1},8,["disabled"]),createVNode(VBtn,{color:"primary",disabled:!changed.value||loading.value||saving.value,size:"small",type:"button",variant:"flat",onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?"Saving…":"Save"),1)]),_:1},8,["disabled"])])]),loading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState,{key:0,label:"Managed app access",loading:loading.value,message:loadError.value||"Loading managed app identities.","min-height":"12rem",onReload:reloadPage,onRetry:refresh},null,8,["loading","message"])):(openBlock(),createElementBlock("section",_hoisted_4,[_cache[5]||(_cache[5]=createBaseVNode("div",{class:"preview-identity-settings__section-copy"},[createBaseVNode("h2",null,"Managed app identities"),createBaseVNode("p",null,[createTextVNode(" Saved in "),createBaseVNode("code",null,".vibe64/preview-identities.json"),createTextVNode(" in the active project source, so they follow the repository. These are application identifiers, not passwords or authentication secrets. ")])],-1)),createBaseVNode("div",_hoisted_5,[(openBlock(true),createElementBlock(Fragment,null,renderList(identities.value,(identity,index2)=>{return openBlock(),createElementBlock("div",{key:index2,class:"preview-identity-settings__identity"},[createBaseVNode("div",_hoisted_6,[createVNode(VTextField,{modelValue:identity.name,"onUpdate:modelValue":$event=>identity.name=$event,autocomplete:"off",density:"compact",label:"Name",placeholder:"admin",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue"]),createVNode(VSelect,{modelValue:identity.type,"onUpdate:modelValue":$event=>identity.type=$event,density:"compact","item-title":"label","item-value":"value",items:unref(identityTypes),label:"App identifier",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue","items"]),createVNode(VTextField,{modelValue:identity.value,"onUpdate:modelValue":$event=>identity.value=$event,autocomplete:"off",density:"compact",label:"Application value",placeholder:identityPlaceholder(identity.type),type:identity.type==="email"?"email":"text",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue","placeholder","type"])]),createBaseVNode("div",_hoisted_7,[index2===0?(openBlock(),createBlock(VChip,{key:0,color:"primary",size:"small",variant:"tonal"},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(" Default ",-1)])]),_:1})):(openBlock(),createBlock(VBtn,{key:1,size:"small",type:"button",variant:"text",onClick:$event=>makeDefault(index2)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(" Make default ",-1)])]),_:1},8,["onClick"])),createVNode(VBtn,{color:"error",size:"small",type:"button",variant:"text",onClick:$event=>removeIdentity(index2)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(" Remove ",-1)])]),_:1},8,["onClick"])])])}),128)),identities.value.length===0?(openBlock(),createElementBlock("p",_hoisted_8," No managed app identities are configured. Preview remains available as a guest when the application supports it. ")):createCommentVNode("",true),createVNode(VBtn,{class:"preview-identity-settings__add",size:"small",type:"button",variant:"outlined",onClick:addIdentity},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(" Add identity ",-1)])]),_:1})])]))])}}};const PreviewIdentitySettings=_export_sfc(_sfc_main$1,[["__scopeId","data-v-a63a6799"]]);const _hoisted_1={class:"vibe64-dashboard-page"};const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock("section",_hoisted_1,[createVNode(PreviewIdentitySettings)])}}};const index=_export_sfc(_sfc_main,[["__scopeId","data-v-207f989d"]]);export{index as default};
@@ -1 +1 @@
1
- import{_ as _export_sfc,D as useEndpointResource,A as computed,a as openBlock,b as createBlock,w as withCtx,d as createBaseVNode,e as createVNode,n as VBtn,i as unref,aj as mdiRefresh,j as createTextVNode,I as VAlert,t as toDisplayString,K as VSkeletonLoader,c as createElementBlock,F as Fragment,y as renderList,h as VIcon,aA as mdiCheckCircleOutline,q as mdiAlertCircleOutline,V as VCard,R as ROUTE_VISIBILITY_PUBLIC,Q as VIBE64_SURFACE_ID}from"./index-SBc6H2In.js";import{s as studioHealthQueryKey,S as STUDIO_HEALTH_ENDPOINT}from"./studioGateApi-B2eiydiA.js";import{v as vibe64ResourceResponseError}from"./vibe64ApiResponses-COQ3JIKv.js";const _hoisted_1={class:"studio-health__header"};const _hoisted_2={class:"studio-health__checks"};const _hoisted_3={class:"studio-health__check-copy"};const _hoisted_4={class:"studio-health__check-heading"};const _sfc_main$1={__name:"StudioHealthScreen",setup(__props){const resource=useEndpointResource({fallbackLoadError:"Studio Health could not run.",path:computed(()=>STUDIO_HEALTH_ENDPOINT),queryKey:computed(()=>studioHealthQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC)),queryOptions:{refetchOnMount:false,refetchOnWindowFocus:false},requestRecoveryLabel:"Studio Health"});const{data,isFetching,isInitialLoading,loadError:endpointLoadError,reload}=resource;const health=computed(()=>data.value||{});const checks=computed(()=>Array.isArray(health.value.checks)?health.value.checks:[]);const loadError=computed(()=>vibe64ResourceResponseError(health.value,"Studio Health could not run.")||endpointLoadError.value);const summaryText=computed(()=>{const summary=health.value.summary||{};if(health.value.healthy===true){return`All ${Number(summary.total||checks.value.length)} platform checks passed.`}return`${Number(summary.failed||0)} of ${Number(summary.total||checks.value.length)} platform checks need attention.`});return(_ctx,_cache)=>{return openBlock(),createBlock(VCard,{class:"studio-health",rounded:"lg",variant:"outlined"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_1,[_cache[1]||(_cache[1]=createBaseVNode("div",null,[createBaseVNode("p",{class:"studio-health__eyebrow"},"Vibe64"),createBaseVNode("h2",{class:"studio-health__title"},"Studio Health"),createBaseVNode("p",{class:"studio-health__intro"}," Read-only checks for the editor, credentials, Genesis, and pinned runtimes. ")],-1)),createVNode(VBtn,{disabled:unref(isFetching),loading:unref(isFetching),"prepend-icon":unref(mdiRefresh),type:"button",variant:"tonal",onClick:unref(reload)},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(" Refresh ",-1)])]),_:1},8,["disabled","loading","prepend-icon","onClick"])]),loadError.value?(openBlock(),createBlock(VAlert,{key:0,border:"start",type:"error",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(loadError.value),1)]),_:1})):unref(isInitialLoading)?(openBlock(),createBlock(VSkeletonLoader,{key:1,"aria-label":"Checking Studio health",type:"list-item-three-line@5"})):(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VAlert,{type:health.value.healthy?"success":"warning",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(summaryText.value),1)]),_:1},8,["type"]),createBaseVNode("div",_hoisted_2,[(openBlock(true),createElementBlock(Fragment,null,renderList(checks.value,check=>{return openBlock(),createElementBlock("article",{key:check.id,class:"studio-health__check"},[createVNode(VIcon,{color:check.status==="pass"?"success":"warning",icon:check.status==="pass"?unref(mdiCheckCircleOutline):unref(mdiAlertCircleOutline),size:"22"},null,8,["color","icon"]),createBaseVNode("div",_hoisted_3,[createBaseVNode("div",_hoisted_4,[createBaseVNode("strong",null,toDisplayString(check.label),1),createBaseVNode("span",null,toDisplayString(check.group),1)]),createBaseVNode("p",null,toDisplayString(check.observed),1),createBaseVNode("small",null,toDisplayString(check.explanation),1)])])}),128))])],64))]),_:1})}}};const StudioHealthScreen=_export_sfc(_sfc_main$1,[["__scopeId","data-v-7832cebb"]]);const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(StudioHealthScreen)}}};export{_sfc_main as default};
1
+ import{_ as _export_sfc,D as useEndpointResource,A as computed,a as openBlock,b as createBlock,w as withCtx,d as createBaseVNode,e as createVNode,n as VBtn,i as unref,aj as mdiRefresh,j as createTextVNode,I as VAlert,t as toDisplayString,K as VSkeletonLoader,c as createElementBlock,F as Fragment,y as renderList,h as VIcon,aA as mdiCheckCircleOutline,q as mdiAlertCircleOutline,V as VCard,R as ROUTE_VISIBILITY_PUBLIC,Q as VIBE64_SURFACE_ID}from"./index-C4KnwA0g.js";import{s as studioHealthQueryKey,S as STUDIO_HEALTH_ENDPOINT}from"./studioGateApi-BwBnOYBp.js";import{v as vibe64ResourceResponseError}from"./vibe64ApiResponses-COQ3JIKv.js";const _hoisted_1={class:"studio-health__header"};const _hoisted_2={class:"studio-health__checks"};const _hoisted_3={class:"studio-health__check-copy"};const _hoisted_4={class:"studio-health__check-heading"};const _sfc_main$1={__name:"StudioHealthScreen",setup(__props){const resource=useEndpointResource({fallbackLoadError:"Studio Health could not run.",path:computed(()=>STUDIO_HEALTH_ENDPOINT),queryKey:computed(()=>studioHealthQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC)),queryOptions:{refetchOnMount:false,refetchOnWindowFocus:false},requestRecoveryLabel:"Studio Health"});const{data,isFetching,isInitialLoading,loadError:endpointLoadError,reload}=resource;const health=computed(()=>data.value||{});const checks=computed(()=>Array.isArray(health.value.checks)?health.value.checks:[]);const loadError=computed(()=>vibe64ResourceResponseError(health.value,"Studio Health could not run.")||endpointLoadError.value);const summaryText=computed(()=>{const summary=health.value.summary||{};if(health.value.healthy===true){return`All ${Number(summary.total||checks.value.length)} platform checks passed.`}return`${Number(summary.failed||0)} of ${Number(summary.total||checks.value.length)} platform checks need attention.`});return(_ctx,_cache)=>{return openBlock(),createBlock(VCard,{class:"studio-health",rounded:"lg",variant:"outlined"},{default:withCtx(()=>[createBaseVNode("div",_hoisted_1,[_cache[1]||(_cache[1]=createBaseVNode("div",null,[createBaseVNode("p",{class:"studio-health__eyebrow"},"Vibe64"),createBaseVNode("h2",{class:"studio-health__title"},"Studio Health"),createBaseVNode("p",{class:"studio-health__intro"}," Read-only checks for the editor, credentials, Genesis, and pinned runtimes. ")],-1)),createVNode(VBtn,{disabled:unref(isFetching),loading:unref(isFetching),"prepend-icon":unref(mdiRefresh),type:"button",variant:"tonal",onClick:unref(reload)},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(" Refresh ",-1)])]),_:1},8,["disabled","loading","prepend-icon","onClick"])]),loadError.value?(openBlock(),createBlock(VAlert,{key:0,border:"start",type:"error",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(loadError.value),1)]),_:1})):unref(isInitialLoading)?(openBlock(),createBlock(VSkeletonLoader,{key:1,"aria-label":"Checking Studio health",type:"list-item-three-line@5"})):(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VAlert,{type:health.value.healthy?"success":"warning",variant:"tonal"},{default:withCtx(()=>[createTextVNode(toDisplayString(summaryText.value),1)]),_:1},8,["type"]),createBaseVNode("div",_hoisted_2,[(openBlock(true),createElementBlock(Fragment,null,renderList(checks.value,check=>{return openBlock(),createElementBlock("article",{key:check.id,class:"studio-health__check"},[createVNode(VIcon,{color:check.status==="pass"?"success":"warning",icon:check.status==="pass"?unref(mdiCheckCircleOutline):unref(mdiAlertCircleOutline),size:"22"},null,8,["color","icon"]),createBaseVNode("div",_hoisted_3,[createBaseVNode("div",_hoisted_4,[createBaseVNode("strong",null,toDisplayString(check.label),1),createBaseVNode("span",null,toDisplayString(check.group),1)]),createBaseVNode("p",null,toDisplayString(check.observed),1),createBaseVNode("small",null,toDisplayString(check.explanation),1)])])}),128))])],64))]),_:1})}}};const StudioHealthScreen=_export_sfc(_sfc_main$1,[["__scopeId","data-v-7832cebb"]]);const _sfc_main={__name:"index",setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(StudioHealthScreen)}}};export{_sfc_main as default};
@@ -1 +1 @@
1
- import{eL as definePlacement,a5 as mdiCogOutline,eM as mdiFileCogOutline,eN as mdiConnection,eO as mdiAccountKeyOutline,e4 as mdiHistory,eP as mdiHeartPulse}from"./index-SBc6H2In.js";import{b as VIBE64_ACTIVE_SESSION_NAV_OWNER,c as VIBE64_ACTIVE_SESSION_NAV_TARGET,V as VIBE64_SESSION_TOOL_DEFINITIONS,v as vibe64SessionToolDashboardSuffix}from"./vibe64SessionToolDefinitions-C4maKOfp.js";function createPlacementRegistry({entries=[]}={}){const placements=[];const ids=new Set;function addPlacement2(value={}){const placement=definePlacement(value);if(ids.has(placement.id)){return false}ids.add(placement.id);placements.push(placement);return true}for(const entry of Array.isArray(entries)?entries:[]){addPlacement2(entry)}function hasPlacement(id){return ids.has(String(id||"").trim())}function build(){return Object.freeze([...placements])}return Object.freeze({addPlacement:addPlacement2,hasPlacement,build})}const registry=createPlacementRegistry();const{addPlacement}=registry;function getPlacements(){return uniqueDashboardSectionPlacements(registry.build())}function uniqueDashboardSectionPlacements(placements=[]){const winners=new Map;for(const placement of placements){const key=dashboardSectionPlacementKey(placement);if(!key){continue}const current=winners.get(key);if(!current||dashboardSectionPlacementOrder(placement)<dashboardSectionPlacementOrder(current)){winners.set(key,placement)}}return placements.filter(placement=>{const key=dashboardSectionPlacementKey(placement);return!key||winners.get(key)===placement})}function dashboardSectionPlacementKey(placement={}){if((placement==null?void 0:placement.kind)!=="link"||(placement==null?void 0:placement.owner)!=="app-dashboard"||(placement==null?void 0:placement.target)!=="page.section-nav"){return""}const destination=dashboardSectionPlacementDestination(placement);return destination?`${placement.owner}:${placement.target}:${destination}`:""}function dashboardSectionPlacementDestination(placement={}){var _a,_b,_c;const raw=String(((_a=placement==null?void 0:placement.props)==null?void 0:_a.scopedSuffix)||((_b=placement==null?void 0:placement.props)==null?void 0:_b.unscopedSuffix)||((_c=placement==null?void 0:placement.props)==null?void 0:_c.to)||"").trim();if(!raw){return""}const normalized=raw.replace(/^\/+/u,"").replace(/^project\/\[slug\](?=\/|$)/u,"").replace(/^\[slug\](?=\/|$)/u,"").replace(/^\/+/u,"").replace(/\/+$/u,"");return normalized?`/${normalized}`:"/"}function dashboardSectionPlacementOrder(placement={}){const order=Number(placement==null?void 0:placement.order);return Number.isFinite(order)?order:Number.MAX_SAFE_INTEGER}addPlacement({id:"realtime.connection.indicator",target:"shell.status",kind:"component",surfaces:["*"],order:950,componentToken:"realtime.web.connection.indicator"});addPlacement({id:"vibe64.active-session.heading",target:VIBE64_ACTIVE_SESSION_NAV_TARGET,owner:VIBE64_ACTIVE_SESSION_NAV_OWNER,kind:"link",surfaces:["app"],order:100,props:{role:"heading"},when:activeSessionNavPlacementVisible});for(const tool of VIBE64_SESSION_TOOL_DEFINITIONS){addPlacement({id:`vibe64.active-session.${tool.id}`,target:VIBE64_ACTIVE_SESSION_NAV_TARGET,owner:VIBE64_ACTIVE_SESSION_NAV_OWNER,kind:"link",surfaces:["app"],order:100+tool.order,props:{icon:tool.icon,label:tool.label,scopedSuffix:`/project/[slug]${vibe64SessionToolDashboardSuffix(tool.id)}`,title:tool.title,toolId:tool.id,unscopedSuffix:`/project/[slug]${vibe64SessionToolDashboardSuffix(tool.id)}`},when:activeSessionNavPlacementVisible})}function activeSessionNavPlacementVisible({activeSessionNav}={}){return(activeSessionNav==null?void 0:activeSessionNav.visible)===true}addPlacement({id:"vibe64.project-settings.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:250,props:{label:"Project settings",icon:mdiCogOutline,surface:"app",scopedSuffix:"/project/[slug]/dashboard/settings",unscopedSuffix:"/project/[slug]/dashboard/settings",to:""}});{addPlacement({id:"ui-generator.page.app.dashboard.env.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:300,props:{label:"Env",icon:mdiFileCogOutline,surface:"app",scopedSuffix:"/project/[slug]/dashboard/env",unscopedSuffix:"/project/[slug]/dashboard/env",to:""}})}addPlacement({id:"vibe64.integrations.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:350,props:{label:"Integrations",icon:mdiConnection,surface:"app",scopedSuffix:"/project/[slug]/dashboard/integrations",unscopedSuffix:"/project/[slug]/dashboard/integrations",to:""}});addPlacement({id:"vibe64.preview-identities.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:400,props:{label:"App access",icon:mdiAccountKeyOutline,surface:"app",scopedSuffix:"/project/[slug]/dashboard/access",unscopedSuffix:"/project/[slug]/dashboard/access",to:""}});{addPlacement({id:"ui-generator.page.app.dashboard.history.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:600,props:{label:"Session History",icon:mdiHistory,surface:"app",scopedSuffix:"/project/[slug]/dashboard/history",unscopedSuffix:"/project/[slug]/dashboard/history",to:""}})}addPlacement({id:"vibe64.studio-health.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:700,props:{label:"Health",icon:mdiHeartPulse,surface:"app",scopedSuffix:"/project/[slug]/dashboard/health",unscopedSuffix:"/project/[slug]/dashboard/health",to:""}});export{addPlacement,getPlacements as default,uniqueDashboardSectionPlacements};
1
+ import{eL as definePlacement,a5 as mdiCogOutline,eM as mdiFileCogOutline,eN as mdiConnection,eO as mdiAccountKeyOutline,e4 as mdiHistory,eP as mdiHeartPulse}from"./index-C4KnwA0g.js";import{b as VIBE64_ACTIVE_SESSION_NAV_OWNER,c as VIBE64_ACTIVE_SESSION_NAV_TARGET,V as VIBE64_SESSION_TOOL_DEFINITIONS,v as vibe64SessionToolDashboardSuffix}from"./vibe64SessionToolDefinitions-D5CgOIqa.js";function createPlacementRegistry({entries=[]}={}){const placements=[];const ids=new Set;function addPlacement2(value={}){const placement=definePlacement(value);if(ids.has(placement.id)){return false}ids.add(placement.id);placements.push(placement);return true}for(const entry of Array.isArray(entries)?entries:[]){addPlacement2(entry)}function hasPlacement(id){return ids.has(String(id||"").trim())}function build(){return Object.freeze([...placements])}return Object.freeze({addPlacement:addPlacement2,hasPlacement,build})}const registry=createPlacementRegistry();const{addPlacement}=registry;function getPlacements(){return uniqueDashboardSectionPlacements(registry.build())}function uniqueDashboardSectionPlacements(placements=[]){const winners=new Map;for(const placement of placements){const key=dashboardSectionPlacementKey(placement);if(!key){continue}const current=winners.get(key);if(!current||dashboardSectionPlacementOrder(placement)<dashboardSectionPlacementOrder(current)){winners.set(key,placement)}}return placements.filter(placement=>{const key=dashboardSectionPlacementKey(placement);return!key||winners.get(key)===placement})}function dashboardSectionPlacementKey(placement={}){if((placement==null?void 0:placement.kind)!=="link"||(placement==null?void 0:placement.owner)!=="app-dashboard"||(placement==null?void 0:placement.target)!=="page.section-nav"){return""}const destination=dashboardSectionPlacementDestination(placement);return destination?`${placement.owner}:${placement.target}:${destination}`:""}function dashboardSectionPlacementDestination(placement={}){var _a,_b,_c;const raw=String(((_a=placement==null?void 0:placement.props)==null?void 0:_a.scopedSuffix)||((_b=placement==null?void 0:placement.props)==null?void 0:_b.unscopedSuffix)||((_c=placement==null?void 0:placement.props)==null?void 0:_c.to)||"").trim();if(!raw){return""}const normalized=raw.replace(/^\/+/u,"").replace(/^project\/\[slug\](?=\/|$)/u,"").replace(/^\[slug\](?=\/|$)/u,"").replace(/^\/+/u,"").replace(/\/+$/u,"");return normalized?`/${normalized}`:"/"}function dashboardSectionPlacementOrder(placement={}){const order=Number(placement==null?void 0:placement.order);return Number.isFinite(order)?order:Number.MAX_SAFE_INTEGER}addPlacement({id:"realtime.connection.indicator",target:"shell.status",kind:"component",surfaces:["*"],order:950,componentToken:"realtime.web.connection.indicator"});addPlacement({id:"vibe64.active-session.heading",target:VIBE64_ACTIVE_SESSION_NAV_TARGET,owner:VIBE64_ACTIVE_SESSION_NAV_OWNER,kind:"link",surfaces:["app"],order:100,props:{role:"heading"},when:activeSessionNavPlacementVisible});for(const tool of VIBE64_SESSION_TOOL_DEFINITIONS){addPlacement({id:`vibe64.active-session.${tool.id}`,target:VIBE64_ACTIVE_SESSION_NAV_TARGET,owner:VIBE64_ACTIVE_SESSION_NAV_OWNER,kind:"link",surfaces:["app"],order:100+tool.order,props:{icon:tool.icon,label:tool.label,scopedSuffix:`/project/[slug]${vibe64SessionToolDashboardSuffix(tool.id)}`,title:tool.title,toolId:tool.id,unscopedSuffix:`/project/[slug]${vibe64SessionToolDashboardSuffix(tool.id)}`},when:activeSessionNavPlacementVisible})}function activeSessionNavPlacementVisible({activeSessionNav}={}){return(activeSessionNav==null?void 0:activeSessionNav.visible)===true}addPlacement({id:"vibe64.project-settings.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:250,props:{label:"Project settings",icon:mdiCogOutline,surface:"app",scopedSuffix:"/project/[slug]/dashboard/settings",unscopedSuffix:"/project/[slug]/dashboard/settings",to:""}});{addPlacement({id:"ui-generator.page.app.dashboard.env.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:300,props:{label:"Env",icon:mdiFileCogOutline,surface:"app",scopedSuffix:"/project/[slug]/dashboard/env",unscopedSuffix:"/project/[slug]/dashboard/env",to:""}})}addPlacement({id:"vibe64.integrations.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:350,props:{label:"Integrations",icon:mdiConnection,surface:"app",scopedSuffix:"/project/[slug]/dashboard/integrations",unscopedSuffix:"/project/[slug]/dashboard/integrations",to:""}});addPlacement({id:"vibe64.preview-identities.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:400,props:{label:"App access",icon:mdiAccountKeyOutline,surface:"app",scopedSuffix:"/project/[slug]/dashboard/access",unscopedSuffix:"/project/[slug]/dashboard/access",to:""}});{addPlacement({id:"ui-generator.page.app.dashboard.history.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:600,props:{label:"Session History",icon:mdiHistory,surface:"app",scopedSuffix:"/project/[slug]/dashboard/history",unscopedSuffix:"/project/[slug]/dashboard/history",to:""}})}addPlacement({id:"vibe64.studio-health.link",target:"page.section-nav",owner:"app-dashboard",kind:"link",surfaces:["app"],order:700,props:{label:"Health",icon:mdiHeartPulse,surface:"app",scopedSuffix:"/project/[slug]/dashboard/health",unscopedSuffix:"/project/[slug]/dashboard/health",to:""}});export{addPlacement,getPlacements as default,uniqueDashboardSectionPlacements};
@@ -1 +1 @@
1
- import{bi as studioApiPath,dz as vibe64ProjectQueryScope}from"./index-SBc6H2In.js";const VIBE64_PROJECT_CREATE_API_SUFFIX="/vibe64/projects";const VIBE64_ENV_SECRET_REVEAL_API_SUFFIX="/vibe64/env/reveal";const VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX="/vibe64/settings/development-database";const VIBE64_ENGINEERING_API_SUFFIX="/vibe64/settings/engineering";const VIBE64_COLLABORATION_API_SUFFIX="/vibe64/settings/collaboration";const VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX="/vibe64/settings/prompt-hints";const VIBE64_ENV_USER_VALUES_API_SUFFIX="/vibe64/env/user-values";const VIBE64_PREVIEW_IDENTITIES_API_SUFFIX="/vibe64/preview-identities";const VIBE64_PROJECT_SELECT_API_SUFFIX="/vibe64/projects/select";const VIBE64_CONNECTIONS_CHANGED_EVENT="vibe64.connections.changed";const VIBE64_PROJECT_CHANGED_EVENT="vibe64.project.changed";studioApiPath("studio/current-app");const STUDIO_HEALTH_ENDPOINT=studioApiPath("studio/health");const VIBE64_ENDPOINT=studioApiPath("vibe64");const PROJECT_SELECTION_ENDPOINT=`${VIBE64_ENDPOINT}/projects`;const ENV_ENDPOINT=`${VIBE64_ENDPOINT}/env`;const ENV_SECRET_REVEAL_ENDPOINT=`${ENV_ENDPOINT}/reveal`;const PROJECT_SETTINGS_ENDPOINT=`${VIBE64_ENDPOINT}/settings`;const DEVELOPMENT_DATABASE_ENDPOINT=`${PROJECT_SETTINGS_ENDPOINT}/development-database`;const ENGINEERING_ENDPOINT=`${PROJECT_SETTINGS_ENDPOINT}/engineering`;const COLLABORATION_ENDPOINT=`${PROJECT_SETTINGS_ENDPOINT}/collaboration`;const PROMPT_HINTS_SETTINGS_ENDPOINT=`${PROJECT_SETTINGS_ENDPOINT}/prompt-hints`;const ENV_USER_VALUES_ENDPOINT=`${ENV_ENDPOINT}/user-values`;const PREVIEW_IDENTITIES_ENDPOINT=`${VIBE64_ENDPOINT}/preview-identities`;function projectSelectionQueryKey(surfaceId,ownershipFilter,projectSlug){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"projects"]}function envQueryKey(surfaceId,ownershipFilter,projectSlug){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"env"]}function projectSettingsQueryKey(surfaceId,ownershipFilter,projectSlug,sessionId=""){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"settings",String(sessionId||"").trim()||"selected-source"]}function engineeringSettingsQueryKey(surfaceId,ownershipFilter,projectSlug,sessionId=""){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"engineering",String(sessionId||"").trim()||"selected-source"]}function previewIdentitiesQueryKey(surfaceId,ownershipFilter,projectSlug){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"preview-identities"]}function studioHealthQueryKey(surfaceId,ownershipFilter){return["vibe64",surfaceId,ownershipFilter,"studio-health"]}export{COLLABORATION_ENDPOINT as C,DEVELOPMENT_DATABASE_ENDPOINT as D,ENV_ENDPOINT as E,PROJECT_SETTINGS_ENDPOINT as P,STUDIO_HEALTH_ENDPOINT as S,VIBE64_CONNECTIONS_CHANGED_EVENT as V,VIBE64_PROJECT_CHANGED_EVENT as a,PROJECT_SELECTION_ENDPOINT as b,VIBE64_PROJECT_CREATE_API_SUFFIX as c,VIBE64_PROJECT_SELECT_API_SUFFIX as d,projectSelectionQueryKey as e,PREVIEW_IDENTITIES_ENDPOINT as f,VIBE64_PREVIEW_IDENTITIES_API_SUFFIX as g,previewIdentitiesQueryKey as h,VIBE64_ENV_USER_VALUES_API_SUFFIX as i,ENV_USER_VALUES_ENDPOINT as j,VIBE64_ENV_SECRET_REVEAL_API_SUFFIX as k,ENV_SECRET_REVEAL_ENDPOINT as l,envQueryKey as m,VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX as n,VIBE64_COLLABORATION_API_SUFFIX as o,projectSettingsQueryKey as p,VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX as q,PROMPT_HINTS_SETTINGS_ENDPOINT as r,studioHealthQueryKey as s,VIBE64_ENGINEERING_API_SUFFIX as t,ENGINEERING_ENDPOINT as u,engineeringSettingsQueryKey as v};
1
+ import{bi as studioApiPath,dz as vibe64ProjectQueryScope}from"./index-C4KnwA0g.js";const VIBE64_PROJECT_CREATE_API_SUFFIX="/vibe64/projects";const VIBE64_ENV_SECRET_REVEAL_API_SUFFIX="/vibe64/env/reveal";const VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX="/vibe64/settings/development-database";const VIBE64_ENGINEERING_API_SUFFIX="/vibe64/settings/engineering";const VIBE64_COLLABORATION_API_SUFFIX="/vibe64/settings/collaboration";const VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX="/vibe64/settings/prompt-hints";const VIBE64_ENV_USER_VALUES_API_SUFFIX="/vibe64/env/user-values";const VIBE64_PREVIEW_IDENTITIES_API_SUFFIX="/vibe64/preview-identities";const VIBE64_PROJECT_SELECT_API_SUFFIX="/vibe64/projects/select";const VIBE64_CONNECTIONS_CHANGED_EVENT="vibe64.connections.changed";const VIBE64_PROJECT_CHANGED_EVENT="vibe64.project.changed";studioApiPath("studio/current-app");const STUDIO_HEALTH_ENDPOINT=studioApiPath("studio/health");const VIBE64_ENDPOINT=studioApiPath("vibe64");const PROJECT_SELECTION_ENDPOINT=`${VIBE64_ENDPOINT}/projects`;const ENV_ENDPOINT=`${VIBE64_ENDPOINT}/env`;const ENV_SECRET_REVEAL_ENDPOINT=`${ENV_ENDPOINT}/reveal`;const PROJECT_SETTINGS_ENDPOINT=`${VIBE64_ENDPOINT}/settings`;const DEVELOPMENT_DATABASE_ENDPOINT=`${PROJECT_SETTINGS_ENDPOINT}/development-database`;const ENGINEERING_ENDPOINT=`${PROJECT_SETTINGS_ENDPOINT}/engineering`;const COLLABORATION_ENDPOINT=`${PROJECT_SETTINGS_ENDPOINT}/collaboration`;const PROMPT_HINTS_SETTINGS_ENDPOINT=`${PROJECT_SETTINGS_ENDPOINT}/prompt-hints`;const ENV_USER_VALUES_ENDPOINT=`${ENV_ENDPOINT}/user-values`;const PREVIEW_IDENTITIES_ENDPOINT=`${VIBE64_ENDPOINT}/preview-identities`;function projectSelectionQueryKey(surfaceId,ownershipFilter,projectSlug){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"projects"]}function envQueryKey(surfaceId,ownershipFilter,projectSlug){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"env"]}function projectSettingsQueryKey(surfaceId,ownershipFilter,projectSlug,sessionId=""){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"settings",String(sessionId||"").trim()||"selected-source"]}function engineeringSettingsQueryKey(surfaceId,ownershipFilter,projectSlug,sessionId=""){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"engineering",String(sessionId||"").trim()||"selected-source"]}function previewIdentitiesQueryKey(surfaceId,ownershipFilter,projectSlug){return["vibe64",...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,"preview-identities"]}function studioHealthQueryKey(surfaceId,ownershipFilter){return["vibe64",surfaceId,ownershipFilter,"studio-health"]}export{COLLABORATION_ENDPOINT as C,DEVELOPMENT_DATABASE_ENDPOINT as D,ENV_ENDPOINT as E,PROJECT_SETTINGS_ENDPOINT as P,STUDIO_HEALTH_ENDPOINT as S,VIBE64_CONNECTIONS_CHANGED_EVENT as V,VIBE64_PROJECT_CHANGED_EVENT as a,PROJECT_SELECTION_ENDPOINT as b,VIBE64_PROJECT_CREATE_API_SUFFIX as c,VIBE64_PROJECT_SELECT_API_SUFFIX as d,projectSelectionQueryKey as e,PREVIEW_IDENTITIES_ENDPOINT as f,VIBE64_PREVIEW_IDENTITIES_API_SUFFIX as g,previewIdentitiesQueryKey as h,VIBE64_ENV_USER_VALUES_API_SUFFIX as i,ENV_USER_VALUES_ENDPOINT as j,VIBE64_ENV_SECRET_REVEAL_API_SUFFIX as k,ENV_SECRET_REVEAL_ENDPOINT as l,envQueryKey as m,VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX as n,VIBE64_COLLABORATION_API_SUFFIX as o,projectSettingsQueryKey as p,VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX as q,PROMPT_HINTS_SETTINGS_ENDPOINT as r,studioHealthQueryKey as s,VIBE64_ENGINEERING_API_SUFFIX as t,ENGINEERING_ENDPOINT as u,engineeringSettingsQueryKey as v};
@@ -1 +1 @@
1
- import{aR as useRoute,P as usePaths,D as useEndpointResource,A as computed,by as proxyRefs,aj as mdiRefresh,H as watch,d9 as mdiSourceBranch,da as mdiEyeOutline,m as mdiArchiveOutline,db as mdiSourceCommit,ct as mdiFileDocumentOutline,aU as projectAppPath,Q as VIBE64_SURFACE_ID,R as ROUTE_VISIBILITY_PUBLIC}from"./index-SBc6H2In.js";import{N as VIBE64_ARCHIVED_SESSIONS_API_SUFFIX,O as vibe64SessionsQueryKey,c as VIBE64_SESSIONS_API_SUFFIX,v as vibe64SessionPath,n as vibe64SessionQueryKey}from"./vibe64SessionRequestConfig-B7Llggdb.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-n5T5l2pY.js";import{u as useVibe64ConversationLog}from"./useVibe64ConversationLog-BPyKYbvH.js";import{e as enrichVibe64SessionForDisplay}from"./vibe64SessionPanelModel-5UED-6V-.js";import{s as shortVibe64SessionId,v as vibe64SessionStatusLabel,a as vibe64SessionStatusColor}from"./vibe64SessionViewModel-C4e2otoM.js";const archivedVibe64SessionsEmits=["loading-changed"];const archivedAtFormatter=new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"});const archivedVibe64SessionsProps={description:{default:"",type:String},emptyText:{default:"",type:String},emptyTitle:{default:"No sessions",type:String},showRefresh:{default:true,type:Boolean},title:{default:"",type:String}};function useArchivedVibe64Sessions(emit){const paths=usePaths();const projectSlug=useVibe64ProjectSlug();const sessionsApiPath=computed(()=>paths.api(VIBE64_ARCHIVED_SESSIONS_API_SUFFIX,{surface:VIBE64_SURFACE_ID}));const sessionListResource=useEndpointResource({fallbackLoadError:"Archived sessions could not be loaded.",path:sessionsApiPath,queryKey:computed(()=>[...vibe64SessionsQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),"archived"]),requestRecoveryLabel:"Archived sessions"});const loading=computed(()=>Boolean(sessionListResource.isLoading.value));const error=computed(()=>String(sessionListResource.loadError.value||""));const sessions=computed(()=>{const payload=sessionListResource.data.value;const items=Array.isArray(payload==null?void 0:payload.sessions)?payload.sessions:[];return items.map(enrichVibe64SessionForDisplay).filter(sessionIsInArchive)});watch(loading,isLoading=>{emit("loading-changed",isLoading)},{immediate:true});return{archiveIcon:mdiArchiveOutline,error,loadSessions,loading,formatArchivedAt,mdiEyeOutline,mdiRefresh,mdiSourceBranch,sessionRoute,sessions,shortSessionId,statusColor,statusLabel};function sessionIsInArchive(session={}){return String(session.status||"")==="archived"}async function loadSessions(){await sessionListResource.reload()}function sessionRoute(session={}){return archivedSessionDetailRoute({projectSlug:projectSlug.value,sessionId:session.sessionId})}}function useArchivedVibe64SessionDetail(){const route=useRoute();const paths=usePaths();const projectSlug=useVibe64ProjectSlug(route);const sessionId=computed(()=>firstRouteParam(route.params.sessionId));const sessionsApiPath=computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:VIBE64_SURFACE_ID}));const sessionPath=computed(()=>sessionId.value?vibe64SessionPath(sessionsApiPath.value,sessionId.value):"");const sessionResource=useEndpointResource({enabled:computed(()=>Boolean(sessionId.value)),fallbackLoadError:"Archived session could not be loaded.",path:sessionPath,queryKey:computed(()=>[...vibe64SessionQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),"archive-detail",sessionId.value]),readQuery:computed(()=>projectSlug.value?{projectSlug:projectSlug.value}:null),requestRecoveryLabel:"Archived session"});const session=computed(()=>{const payload=sessionResource.data.value;if(!payload||typeof payload!=="object"||Array.isArray(payload)){return null}if(String(payload.sessionId||"").trim()!==sessionId.value){return null}const enrichedSession=enrichVibe64SessionForDisplay(payload);return String(enrichedSession.status||"")==="archived"?enrichedSession:null});const backTo=computed(()=>({path:`${projectAppPath(projectSlug.value)}/dashboard/history`}));const conversationLog=proxyRefs(useVibe64ConversationLog({active:computed(()=>Boolean(session.value)),session}));return{backTo,conversationLog,error:computed(()=>String(sessionResource.loadError.value||"")),loading:computed(()=>{var _a;return Boolean(sessionResource.isLoading.value||((_a=sessionResource.isInitialLoading)==null?void 0:_a.value))}),mdiRefresh,reload:sessionResource.reload,session,sessionId,sessionsApiPath,projectSlug}}function shortSessionId(sessionId){return shortVibe64SessionId(sessionId)}function statusLabel(status){return vibe64SessionStatusLabel(status)}function statusColor(status){return vibe64SessionStatusColor(status)}function formatArchivedAt(value=""){const date=new Date(String(value||""));return Number.isNaN(date.getTime())?"time unavailable":archivedAtFormatter.format(date)}function archivedSessionDetailRoute({projectSlug="",sessionId=""}={}){return{path:`${projectAppPath(projectSlug)}/dashboard/history/${encodeURIComponent(String(sessionId||"").trim())}`}}function firstRouteParam(value){return String(Array.isArray(value)?value[0]:value||"").trim()}function metadataValue(session={},name=""){var _a;return String(((_a=session.metadata)==null?void 0:_a[name])||"").trim()}function archiveFactRows(session={}){return[{icon:mdiSourceBranch,label:"Branch",value:session.branch||metadataValue(session,"source_recovery_branch")},{icon:mdiSourceCommit,label:"Head",value:metadataValue(session,"source_recovery_head")||metadataValue(session,"base_commit")},{icon:mdiFileDocumentOutline,label:"Saved patch",value:metadataValue(session,"source_recovery_patch_artifact")||"No saved patch"},{icon:mdiFileDocumentOutline,label:"Untracked files",value:metadataValue(session,"source_recovery_untracked_artifact")||"No saved untracked archive"}].filter(row=>row.value)}export{archivedVibe64SessionsEmits as a,archivedVibe64SessionsProps as b,archiveFactRows as c,useArchivedVibe64SessionDetail as d,shortSessionId as s,useArchivedVibe64Sessions as u};
1
+ import{aR as useRoute,P as usePaths,D as useEndpointResource,A as computed,by as proxyRefs,aj as mdiRefresh,H as watch,d9 as mdiSourceBranch,da as mdiEyeOutline,m as mdiArchiveOutline,db as mdiSourceCommit,ct as mdiFileDocumentOutline,aU as projectAppPath,Q as VIBE64_SURFACE_ID,R as ROUTE_VISIBILITY_PUBLIC}from"./index-C4KnwA0g.js";import{N as VIBE64_ARCHIVED_SESSIONS_API_SUFFIX,O as vibe64SessionsQueryKey,c as VIBE64_SESSIONS_API_SUFFIX,v as vibe64SessionPath,n as vibe64SessionQueryKey}from"./vibe64SessionRequestConfig-uGWcyQY6.js";import{u as useVibe64ProjectSlug}from"./useVibe64ProjectScope-DcDkjbLT.js";import{u as useVibe64ConversationLog}from"./useVibe64ConversationLog-BjnpqM9K.js";import{e as enrichVibe64SessionForDisplay}from"./vibe64SessionPanelModel-DDaXjAJ_.js";import{s as shortVibe64SessionId,v as vibe64SessionStatusLabel,a as vibe64SessionStatusColor}from"./vibe64SessionViewModel-C4e2otoM.js";const archivedVibe64SessionsEmits=["loading-changed"];const archivedAtFormatter=new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"});const archivedVibe64SessionsProps={description:{default:"",type:String},emptyText:{default:"",type:String},emptyTitle:{default:"No sessions",type:String},showRefresh:{default:true,type:Boolean},title:{default:"",type:String}};function useArchivedVibe64Sessions(emit){const paths=usePaths();const projectSlug=useVibe64ProjectSlug();const sessionsApiPath=computed(()=>paths.api(VIBE64_ARCHIVED_SESSIONS_API_SUFFIX,{surface:VIBE64_SURFACE_ID}));const sessionListResource=useEndpointResource({fallbackLoadError:"Archived sessions could not be loaded.",path:sessionsApiPath,queryKey:computed(()=>[...vibe64SessionsQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),"archived"]),requestRecoveryLabel:"Archived sessions"});const loading=computed(()=>Boolean(sessionListResource.isLoading.value));const error=computed(()=>String(sessionListResource.loadError.value||""));const sessions=computed(()=>{const payload=sessionListResource.data.value;const items=Array.isArray(payload==null?void 0:payload.sessions)?payload.sessions:[];return items.map(enrichVibe64SessionForDisplay).filter(sessionIsInArchive)});watch(loading,isLoading=>{emit("loading-changed",isLoading)},{immediate:true});return{archiveIcon:mdiArchiveOutline,error,loadSessions,loading,formatArchivedAt,mdiEyeOutline,mdiRefresh,mdiSourceBranch,sessionRoute,sessions,shortSessionId,statusColor,statusLabel};function sessionIsInArchive(session={}){return String(session.status||"")==="archived"}async function loadSessions(){await sessionListResource.reload()}function sessionRoute(session={}){return archivedSessionDetailRoute({projectSlug:projectSlug.value,sessionId:session.sessionId})}}function useArchivedVibe64SessionDetail(){const route=useRoute();const paths=usePaths();const projectSlug=useVibe64ProjectSlug(route);const sessionId=computed(()=>firstRouteParam(route.params.sessionId));const sessionsApiPath=computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:VIBE64_SURFACE_ID}));const sessionPath=computed(()=>sessionId.value?vibe64SessionPath(sessionsApiPath.value,sessionId.value):"");const sessionResource=useEndpointResource({enabled:computed(()=>Boolean(sessionId.value)),fallbackLoadError:"Archived session could not be loaded.",path:sessionPath,queryKey:computed(()=>[...vibe64SessionQueryKey(VIBE64_SURFACE_ID,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),"archive-detail",sessionId.value]),readQuery:computed(()=>projectSlug.value?{projectSlug:projectSlug.value}:null),requestRecoveryLabel:"Archived session"});const session=computed(()=>{const payload=sessionResource.data.value;if(!payload||typeof payload!=="object"||Array.isArray(payload)){return null}if(String(payload.sessionId||"").trim()!==sessionId.value){return null}const enrichedSession=enrichVibe64SessionForDisplay(payload);return String(enrichedSession.status||"")==="archived"?enrichedSession:null});const backTo=computed(()=>({path:`${projectAppPath(projectSlug.value)}/dashboard/history`}));const conversationLog=proxyRefs(useVibe64ConversationLog({active:computed(()=>Boolean(session.value)),session}));return{backTo,conversationLog,error:computed(()=>String(sessionResource.loadError.value||"")),loading:computed(()=>{var _a;return Boolean(sessionResource.isLoading.value||((_a=sessionResource.isInitialLoading)==null?void 0:_a.value))}),mdiRefresh,reload:sessionResource.reload,session,sessionId,sessionsApiPath,projectSlug}}function shortSessionId(sessionId){return shortVibe64SessionId(sessionId)}function statusLabel(status){return vibe64SessionStatusLabel(status)}function statusColor(status){return vibe64SessionStatusColor(status)}function formatArchivedAt(value=""){const date=new Date(String(value||""));return Number.isNaN(date.getTime())?"time unavailable":archivedAtFormatter.format(date)}function archivedSessionDetailRoute({projectSlug="",sessionId=""}={}){return{path:`${projectAppPath(projectSlug)}/dashboard/history/${encodeURIComponent(String(sessionId||"").trim())}`}}function firstRouteParam(value){return String(Array.isArray(value)?value[0]:value||"").trim()}function metadataValue(session={},name=""){var _a;return String(((_a=session.metadata)==null?void 0:_a[name])||"").trim()}function archiveFactRows(session={}){return[{icon:mdiSourceBranch,label:"Branch",value:session.branch||metadataValue(session,"source_recovery_branch")},{icon:mdiSourceCommit,label:"Head",value:metadataValue(session,"source_recovery_head")||metadataValue(session,"base_commit")},{icon:mdiFileDocumentOutline,label:"Saved patch",value:metadataValue(session,"source_recovery_patch_artifact")||"No saved patch"},{icon:mdiFileDocumentOutline,label:"Untracked files",value:metadataValue(session,"source_recovery_untracked_artifact")||"No saved untracked archive"}].filter(row=>row.value)}export{archivedVibe64SessionsEmits as a,archivedVibe64SessionsProps as b,archiveFactRows as c,useArchivedVibe64SessionDetail as d,shortSessionId as s,useArchivedVibe64Sessions as u};