vibe64 0.1.47 → 0.1.49

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 (150) hide show
  1. package/bin/run.js +1734 -1687
  2. package/bin/server.js +75 -75
  3. package/bin/upgrade-state.js +4539 -4471
  4. package/dist/assets/GithubBrowserTabs-BwpiRS2u.js +1 -0
  5. package/dist/assets/{LocalDatabaseServer-6VzPWZxG.js → LocalDatabaseServer-u_Ky7bNS.js} +1 -1
  6. package/dist/assets/{Vibe64AuthSettingsButton-TLwqAxDo.js → Vibe64AuthSettingsButton-BCwswT1G.js} +1 -1
  7. package/dist/assets/{Vibe64DashboardShell-B4dQ-oHD.js → Vibe64DashboardShell-CWlgrR2B.js} +1 -1
  8. package/dist/assets/{Vibe64DatabaseWorkspace-Bh5WIPOj.js → Vibe64DatabaseWorkspace-Dhs8_H0P.js} +1 -1
  9. package/dist/assets/Vibe64OutputControls-Dn548CZa.js +8 -0
  10. package/dist/assets/{Vibe64RepositoryWorkspace-idDg94lc.js → Vibe64RepositoryWorkspace-C-8S4JUF.js} +1 -1
  11. package/dist/assets/{Vibe64SessionFiles-Z9zxosyl.js → Vibe64SessionFiles-Cx6J7DDN.js} +2 -3
  12. package/dist/assets/{Vibe64UiStoryboardView-CrCDWMdR.js → Vibe64UiStoryboardView-DHyhJiWS.js} +1 -1
  13. package/dist/assets/{Vibe64UnavailableSessions-TqsxvGSf.js → Vibe64UnavailableSessions-Da4RxIhA.js} +1 -1
  14. package/dist/assets/{_sessionId_-7F1VGOou.js → _sessionId_-DCpgDPSI.js} +1 -1
  15. package/dist/assets/_slug_-BbEWp01a.js +25 -0
  16. package/dist/assets/{_slug_-B16mTWjj.css → _slug_-DerKOisL.css} +1 -1
  17. package/dist/assets/{access-Cx9RH95J.js → access-D4di2sCr.js} +1 -1
  18. package/dist/assets/{app-DPx4KKOa.js → app-Adr9Iz8p.js} +1 -1
  19. package/dist/assets/asyncModuleRecovery-DJsn5NrL.js +1 -0
  20. package/dist/assets/{changes-DYsuQLFW.js → changes-3Dd1O8Lu.js} +1 -1
  21. package/dist/assets/client-BAXHGUOC.js +1 -0
  22. package/dist/assets/{client-BYsDPxR3.js → client-CCZIu6yc.js} +1 -1
  23. package/dist/assets/{conversation-3ln-WnbL.css → conversation-CSDHdGDb.css} +1 -1
  24. package/dist/assets/conversation-DG9lp25w.js +8 -0
  25. package/dist/assets/conversation-ErAO1CmH.js +13 -0
  26. package/dist/assets/{dashboard-CWswAbYP.js → dashboard-0tCzDYCX.js} +1 -1
  27. package/dist/assets/english-definitions-DeiQ-jTT.js +1 -0
  28. package/dist/assets/env-DsyQ2MFX.js +1 -0
  29. package/dist/assets/{health-C0f6s-G1.js → health-DyTXU-nb.js} +1 -1
  30. package/dist/assets/{history-BQjETNB9.js → history-BXGAdPMI.js} +1 -1
  31. package/dist/assets/{incoming-COpY201m.js → incoming-yajkdGBY.js} +1 -1
  32. package/dist/assets/{index-MWACm8Pp.css → index-B-dukXUB.css} +1 -1
  33. package/dist/assets/index-CGz4Yow6.js +136 -0
  34. package/dist/assets/{integrations-BBkvNRHu.js → integrations-BMrXET36.js} +10 -2
  35. package/dist/assets/issues-kc1XBZCK.js +1 -0
  36. package/dist/assets/{learning-B8_wHoe1.js → learning-CIE5ghYv.js} +1 -1
  37. package/dist/assets/linkPath-Ch9eft18.js +1 -0
  38. package/dist/assets/{placement-DXvgK433.js → placement-BNmlke_j.js} +1 -1
  39. package/dist/assets/placement-DYM3JJ-F.js +1 -0
  40. package/dist/assets/publish-DTh6amqi.js +3 -0
  41. package/dist/assets/pull-requests-CbfGSSIh.js +1 -0
  42. package/dist/assets/{repository-BNPt7UWc.js → repository-BstMh-bG.js} +1 -1
  43. package/dist/assets/settings-Bf8C6dls.js +1 -0
  44. package/dist/assets/{studioGateApi-BVdclhPL.js → studioGateApi-mkX1eOTX.js} +1 -1
  45. package/dist/assets/{studioUrls-CGKCbM_d.js → studioUrls-B0-GdWh8.js} +1 -1
  46. package/dist/assets/useArchivedVibe64Sessions-DIOpfUxD.js +1 -0
  47. package/dist/assets/useCommand-CVuya6vG.js +1 -0
  48. package/dist/assets/useEndpointResource-7-YDfAxX.js +1 -0
  49. package/dist/assets/usePaths-Y6UuQxmI.js +1 -0
  50. package/dist/assets/{useUiFeedback-B51xtCAK.js → useUiFeedback-Bd3rao6E.js} +1 -1
  51. package/dist/assets/useVibe64ConversationLog-ChJOU2SD.js +1 -0
  52. package/dist/assets/{useVibe64DatabaseTools-BE_yXZFn.js → useVibe64DatabaseTools-DKV-TeNJ.js} +1 -1
  53. package/dist/assets/{useVibe64ProjectScope-D7b8n1gx.js → useVibe64ProjectScope-DXjsKKhl.js} +1 -1
  54. package/dist/assets/useVibe64SessionData-BkIHUrP5.js +1 -0
  55. package/dist/assets/useVibe64SessionSelection-N8wX5oqo.js +1 -0
  56. package/dist/assets/{useVibe64SystemGraph-CDDcsye4.js → useVibe64SystemGraph-Db_eD-X8.js} +1 -1
  57. package/dist/assets/{useVibe64Terminal-Zr3Mig2L.js → useVibe64Terminal-B9EWJ9Ba.js} +2 -2
  58. package/dist/assets/vibe64ProjectScope.local-l5_-E6pq.js +1 -0
  59. package/dist/assets/vibe64RepositoryRealtime-CHT4-6VN.js +1 -0
  60. package/dist/assets/vibe64SessionFocus-CS6Ex53G.js +1 -0
  61. package/dist/assets/vibe64SessionFocus-CSm4YJQD.css +1 -0
  62. package/dist/assets/vibe64SessionRequestConfig-xIx-5jxQ.js +1 -0
  63. package/dist/index.html +26 -22
  64. package/docs/colleague-usage/ai-accounts.md +6 -2
  65. package/docs/colleague-usage/ai-balance-and-allowance.md +15 -2
  66. package/docs/colleague-usage/coding-agent-failures.md +2 -1
  67. package/docs/colleague-usage/coding-agent-goals.md +8 -3
  68. package/docs/colleague-usage/coding-agents.md +16 -0
  69. package/docs/colleague-usage/github-work.md +14 -0
  70. package/docs/colleague-usage/preview-browser-checks.md +5 -3
  71. package/docs/colleague-usage/project-setup.md +6 -3
  72. package/docs/colleague-usage/running-vibe64-on-your-computer.md +3 -1
  73. package/docs/colleague-usage/sessions.md +35 -7
  74. package/docs/colleague-usage/starter-apps.md +3 -0
  75. package/docs/colleague-usage/temporary-chat-context.md +2 -1
  76. package/docs/colleague-usage/temporary-chats.md +17 -5
  77. package/node_modules/@jskit-ai/assistant-core/CHANGELOG.md +539 -0
  78. package/node_modules/@jskit-ai/assistant-core/locales/en.json +383 -0
  79. package/node_modules/@jskit-ai/assistant-core/package.json +3 -2
  80. package/node_modules/@jskit-ai/assistant-runtime/CHANGELOG.md +138 -0
  81. package/node_modules/@jskit-ai/assistant-runtime/README.md +2 -1
  82. package/node_modules/@jskit-ai/assistant-runtime/locales/en.json +137 -0
  83. package/node_modules/@jskit-ai/assistant-runtime/package.json +3 -2
  84. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/assistantConfigRepository.js +223 -203
  85. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/conversationsRepository.js +286 -266
  86. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/messagesRepository.js +270 -250
  87. package/node_modules/@jskit-ai/assistant-voice/locales/en.json +182 -0
  88. package/node_modules/@jskit-ai/assistant-voice/package.json +3 -2
  89. package/node_modules/@jskit-ai/connector-google-calendar/CHANGELOG.md +83 -0
  90. package/node_modules/@jskit-ai/connector-google-calendar/locales/en.json +91 -0
  91. package/node_modules/@jskit-ai/connector-google-calendar/package.json +4 -3
  92. package/node_modules/@jskit-ai/connectors-catalog/CHANGELOG.md +1722 -0
  93. package/node_modules/@jskit-ai/connectors-catalog/README.md +11 -0
  94. package/node_modules/@jskit-ai/connectors-catalog/locales/en.json +3139 -0
  95. package/node_modules/@jskit-ai/connectors-catalog/package.json +5 -4
  96. package/node_modules/@jskit-ai/connectors-core/CHANGELOG.md +183 -0
  97. package/node_modules/@jskit-ai/connectors-core/locales/en.json +92 -0
  98. package/node_modules/@jskit-ai/connectors-core/package.json +3 -2
  99. package/node_modules/@jskit-ai/http-runtime/CHANGELOG.md +31 -0
  100. package/node_modules/@jskit-ai/http-runtime/locales/en.json +14 -0
  101. package/node_modules/@jskit-ai/http-runtime/package.json +3 -2
  102. package/node_modules/@jskit-ai/kernel/CHANGELOG.md +182 -0
  103. package/node_modules/@jskit-ai/kernel/locales/en.json +94 -0
  104. package/node_modules/@jskit-ai/kernel/package.json +6 -2
  105. package/node_modules/@jskit-ai/payments-core/CHANGELOG.md +128 -0
  106. package/node_modules/@jskit-ai/payments-core/locales/en.json +77 -0
  107. package/node_modules/@jskit-ai/payments-core/package.json +3 -2
  108. package/node_modules/@jskit-ai/realtime/CHANGELOG.md +20 -0
  109. package/node_modules/@jskit-ai/realtime/locales/en.json +14 -0
  110. package/node_modules/@jskit-ai/realtime/package.json +3 -2
  111. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  112. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  113. package/node_modules/@jskit-ai/uploads-runtime/CHANGELOG.md +35 -0
  114. package/node_modules/@jskit-ai/uploads-runtime/locales/en.json +15 -0
  115. package/node_modules/@jskit-ai/uploads-runtime/package.json +3 -2
  116. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +49 -48
  117. package/node_modules/@local/vibe64-execution/src/server/gitTurnCheckpointCommand.js +1327 -0
  118. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +430 -390
  119. package/node_modules/@local/vibe64-genesis/src/server/index.js +45 -45
  120. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +119 -119
  121. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +57 -57
  122. package/node_modules/@local/vibe64-sessions/package.json +2 -1
  123. package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +195 -175
  124. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1385 -1362
  125. package/package.json +15 -15
  126. package/server.bundle.mjs +44206 -42825
  127. package/dist/assets/GithubBrowserTabs-D-Z3TlA8.js +0 -1
  128. package/dist/assets/Vibe64OutputControls-DtybwgL3.js +0 -8
  129. package/dist/assets/_slug_-Bq84T_Iv.js +0 -24
  130. package/dist/assets/conversation-Bn7wpATa.js +0 -2
  131. package/dist/assets/conversation-CNcCrV-R.js +0 -16
  132. package/dist/assets/definitions-CEbi4qae.js +0 -1
  133. package/dist/assets/env-X7EOFLtl.js +0 -1
  134. package/dist/assets/index-CBo1BEk6.js +0 -138
  135. package/dist/assets/issues-BiSiUd5o.js +0 -1
  136. package/dist/assets/placement-B5T1LR7m.js +0 -1
  137. package/dist/assets/publish-CeLZE2AG.js +0 -3
  138. package/dist/assets/pull-requests-pTdQOT7i.js +0 -1
  139. package/dist/assets/settings-lecRzZ-r.js +0 -1
  140. package/dist/assets/useArchivedVibe64Sessions-DHYRnyJD.js +0 -1
  141. package/dist/assets/useCommand-Epd2yHhQ.js +0 -1
  142. package/dist/assets/useEndpointResource-DBRQISI_.js +0 -1
  143. package/dist/assets/usePaths-DdAnjVDj.js +0 -1
  144. package/dist/assets/useVibe64ConversationLog-DboM3tYN.js +0 -1
  145. package/dist/assets/useVibe64SessionData-CreWtQAO.js +0 -1
  146. package/dist/assets/useVibe64SessionSelection-CDaX4uwY.js +0 -1
  147. package/dist/assets/vibe64ProjectScope.local-BxTBYuRg.js +0 -1
  148. package/dist/assets/vibe64RepositoryRealtime-C-J0I5jY.js +0 -1
  149. package/dist/assets/vibe64SessionFocus-DSW5Irm6.css +0 -1
  150. package/dist/assets/vibe64SessionFocus-DzqbVq60.js +0 -1
@@ -0,0 +1 @@
1
+ import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,_ as createBaseVNode,b as createElementBlock,bt as renderList,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,vn as ref,wt as resolveDynamicComponent,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon}from"./VAvatar-H2hyOWlB.js";import{D as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-7-YDfAxX.js";import{g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{t as VChip}from"./VChip-Uixfx461.js";import{t as VTextField}from"./VTextField-CnkGeXaT.js";import{At as mdiFileCogOutline,Cn as mdiLinkVariant,er as mdiRefresh}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VCheckbox}from"./VCheckbox-CHFec5Bg.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{i as VExpansionPanelText,n as VExpansionPanel,r as VExpansionPanelTitle,t as VExpansionPanels}from"./VExpansionPanels-BgimJBV2.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useCommand}from"./useCommand-CVuya6vG.js";import{T as envQueryKey,_ as VIBE64_ENV_SECRET_REVEAL_API_SUFFIX,a as ENV_SECRET_REVEAL_ENDPOINT,b as VIBE64_PROJECT_CHANGED_EVENT,i as ENV_ENDPOINT,o as ENV_USER_VALUES_ENDPOINT,v as VIBE64_ENV_USER_VALUES_API_SUFFIX}from"./studioGateApi-mkX1eOTX.js";import{n as useVibe64ProjectSlug}from"./useVibe64ProjectScope-DXjsKKhl.js";import{H as VTabs,U as VTab,q as VTable}from"./index-CGz4Yow6.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-CPEGxBWZ.js";import{n as useVibe64SessionSelection}from"./useVibe64SessionSelection-N8wX5oqo.js";import{t as Vibe64DashboardPageHeader_default}from"./Vibe64DashboardPageHeader-BhPHQu6p.js";import{n as savedEnvValueEnvironment,r as useVibe64SavedEnvValues,t as recordIsSavedEnvValue}from"./vibe64SavedEnvValues-9FX5u8Ht.js";var _hoisted_1$3={key:0,class:`runtime-config-records-table__actions-column`};var _hoisted_2$2={key:0};var _hoisted_3$2=[`onClick`];var _hoisted_4$2=[`title`];var _hoisted_5$2={class:`runtime-config-records-table__linked-label`};var _hoisted_6={key:1,class:`runtime-config-records-table__secret-value`};var _hoisted_7={key:0};var _hoisted_8={key:0,class:`runtime-config-records-table__saved-actions`};var _hoisted_9={key:1,class:`runtime-config-records-table__edit`};var _hoisted_10={class:`runtime-config-records-table__edit-actions`};var _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`,`saved-value-changed`],setup(__props,{emit:__emit}){const emit=__emit;const props=__props;const draftValues=ref({});const projectSlug=useVibe64ProjectSlug();const savedValues=useVibe64SavedEnvValues();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[2]||(_cache[2]=createBaseVNode(`col`,{class:`runtime-config-records-table__key-column`},null,-1)),_cache[3]||(_cache[3]=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[4]||(_cache[4]=createBaseVNode(`th`,null,`Key`,-1)),_cache[5]||(_cache[5]=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,[unref(recordIsSavedEnvValue)(record)?(openBlock(),createElementBlock(`div`,{key:0,class:`runtime-config-records-table__linked`,title:record.label},[createVNode(VIcon,{class:`runtime-config-records-table__linked-icon`,icon:unref(mdiLinkVariant),size:`16`},null,8,[`icon`]),createBaseVNode(`span`,_hoisted_5$2,toDisplayString(record.label||`Linked`),1)],8,_hoisted_4$2)):record.secret?(openBlock(),createElementBlock(`div`,_hoisted_6,[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:2},[createTextVNode(toDisplayString(recordValueLabel(record)),1)],64))]),__props.showActions?(openBlock(),createElementBlock(`td`,_hoisted_7,[unref(recordIsSavedEnvValue)(record)?(openBlock(),createElementBlock(`div`,_hoisted_8,[unref(savedValues)?(openBlock(),createBlock(resolveDynamicComponent(unref(savedValues).component),{key:0,environment:unref(savedEnvValueEnvironment)(__props.environmentLabel),placement:`env-row`,"project-slug":unref(projectSlug),secret:record.secret===true,variable:record.key,onChanged:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`saved-value-changed`))},null,40,[`environment`,`project-slug`,`secret`,`variable`])):createCommentVNode(``,true)])):(openBlock(),createElementBlock(`div`,_hoisted_9,[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`]),createBaseVNode(`span`,_hoisted_10,[unref(savedValues)?(openBlock(),createBlock(resolveDynamicComponent(unref(savedValues).component),{key:0,environment:unref(savedEnvValueEnvironment)(__props.environmentLabel),"has-value":record.valuePresent===true,placement:`env-row`,"project-slug":unref(projectSlug),secret:record.secret===true,variable:record.key,onChanged:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`saved-value-changed`))},null,40,[`environment`,`has-value`,`project-slug`,`secret`,`variable`])):createCommentVNode(``,true),createVNode(VBtn,{disabled:!draftTouched(record),loading:__props.saveBusy,size:`small`,type:`button`,variant:`tonal`,onClick:$event=>saveRecord(record)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[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[7]||(_cache[7]=[createTextVNode(` Remove `,-1)])]),_:1},8,[`loading`,`onClick`])])]))])):createCommentVNode(``,true)])}),128))])]),_:1})}}};var RuntimeConfigRecordsTable_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-9fcec261`]]);var _hoisted_1$2={class:`runtime-config-records`};var _hoisted_2$1={class:`runtime-config-records__section`};var _hoisted_3$1={class:`runtime-config-records__heading`};var _hoisted_4$1={key:1,class:`runtime-config-records__empty`};var _hoisted_5$1={class:`runtime-config-records__system-title`};var _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},readonly:{default:false,type:Boolean},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`,`saved-value-changed`],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||recordIsSavedEnvValue(record)}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_default,{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":!__props.readonly,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)),onSavedValueChanged:_cache[4]||(_cache[4]=$event=>_ctx.$emit(`saved-value-changed`))},null,8,[`environment-label`,`records`,`revealed-secrets`,`save-busy`,`secret-reveal-busy-key`,`secret-reveal-enabled`,`show-actions`])):(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_default,{"environment-label":__props.environmentLabel,records:systemRecords.value,"revealed-secrets":__props.revealedSecrets,"secret-reveal-busy-key":__props.secretRevealBusyKey,"secret-reveal-enabled":__props.secretRevealEnabled,onHideSecret:_cache[5]||(_cache[5]=$event=>_ctx.$emit(`hide-secret`,$event)),onRevealSecret:_cache[6]||(_cache[6]=$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)])}}};var RuntimeConfigRecordsView_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-705aded9`]]);function runtimeConfigSecretKey(value={}){return String(typeof value===`string`?value: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}}var _hoisted_1$1={class:`env-panel`};var _hoisted_2={key:2,class:`env-panel__expected`};var _hoisted_3={class:`env-panel__section-heading env-panel__section-heading--inline`};var _hoisted_4={class:`env-panel__expected-keys`};var _hoisted_5={class:`env-panel__add`};var PROJECT_ENV_TAB=`dev`;var PROJECT_ENVIRONMENT=`dev`;var PROJECT_ENVIRONMENT_LABEL=`development`;var _sfc_main$1={__name:`EnvPanel`,setup(__props){const projectSlug=useVibe64ProjectSlug();const selectedSessionId=useVibe64SessionSelection({projectSlug}).selectedId;const activeTab=ref(PROJECT_ENV_TAB);const savedValues=useVibe64SavedEnvValues();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(`app`,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:`app`,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:`app`,writeMethod:`POST`});const{clearRevealedSecrets,hideSecret,revealedSecrets,revealSecret,secretRevealBusyKey}=useRuntimeConfigSecretReveal({async revealValue(key){const response=await revealCommand.run({key});return response?.ok===false?null:response?.value}});watch([projectSlug,selectedSessionId],clearRevealedSecrets);const env=computed(()=>envResource.data.value?.env||{});const envConfigSourceLabel=computed(()=>String(env.value?.configSource?.label||``));const envLoading=computed(()=>envResource.isLoading.value===true);const envLoadError=computed(()=>String(envResource.loadError.value||``));const envUnavailable=computed(()=>Boolean(env.value?.unavailable));const envUnavailableMessage=computed(()=>String(env.value?.unavailable?.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(()=>String(pendingRemoval.value?.key||``));const projectEnvTabActive=computed(()=>activeTab.value===PROJECT_ENV_TAB);const records=computed(()=>Array.isArray(env.value?.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()}async function savedValueChanged(){newValue.value=emptyNewValue();await refresh()}function reloadPage(){if(typeof window!==`undefined`)window.location.reload()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$1,[createVNode(Vibe64DashboardPageHeader_default,{description:`Values supplied to this project's development processes.`,icon:unref(mdiFileCogOutline),title:`Env`},{meta:withCtx(()=>[envConfigSourceLabel.value?(openBlock(),createBlock(VChip,{key:0,class:`env-panel__source`,label:``,size:`small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(envConfigSourceLabel.value),1)]),_:1})):createCommentVNode(``,true)]),actions:withCtx(()=>[projectEnvTabActive.value?(openBlock(),createBlock(VBtn,{key:0,loading:envLoading.value,"prepend-icon":unref(mdiRefresh),rounded:`pill`,type:`button`,variant:`tonal`,onClick:refresh},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Refresh `,-1)])]),_:1},8,[`loading`,`prepend-icon`])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`tab-actions`,{activeTab:activeTab.value},void 0,true)]),_:3},8,[`icon`]),createVNode(VTabs,{modelValue:activeTab.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>activeTab.value=$event),class:`env-panel__tabs`,color:`primary`,density:`comfortable`},{default:withCtx(()=>[createVNode(VTab,{value:PROJECT_ENV_TAB},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Development`,-1)])]),_:1}),renderSlot(_ctx.$slots,`tabs`,{},void 0,true)]),_:3},8,[`modelValue`]),projectEnvTabActive.value&&(envLoading.value||envLoadError.value)?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{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_2,[createBaseVNode(`div`,_hoisted_3,[_cache[7]||(_cache[7]=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_4,[(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_5,[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`]),unref(savedValues)?(openBlock(),createBlock(resolveDynamicComponent(unref(savedValues).component),{key:0,environment:unref(savedEnvValueEnvironment)(unref(environmentLabel)),"has-value":existingNewValue.value,placement:`env-add`,"project-slug":unref(projectSlug),secret:newValue.value.secret===true,variable:String(newValue.value.key||``).trim(),onChanged:savedValueChanged},null,40,[`environment`,`has-value`,`project-slug`,`secret`,`variable`])):createCommentVNode(``,true)]),createVNode(RuntimeConfigRecordsView_default,{"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,onSavedValueChanged:refresh},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[8]||(_cache[8]=[createTextVNode(`Remove Env value?`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`code`,null,toDisplayString(pendingRemovalKey.value),1),_cache[9]||(_cache[9]=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[10]||(_cache[10]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,loading:saveBusy.value,type:`button`,variant:`flat`,onClick:confirmRemoveRecord},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(` Remove `,-1)])]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])])}}};var EnvPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-f77b996b`]]);var _hoisted_1={class:`vibe64-dashboard-page`};var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(EnvPanel_default)])}}};var env_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-c6bb4035`]]);export{env_default as default};
@@ -1 +1 @@
1
- import{D as createVNode,E as createTextVNode,On as unref,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon}from"./VAvatar-H2hyOWlB.js";import{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-DBRQISI_.js";import{R as mdiCheckCircle,Yt as mdiHeartPulse,er as mdiRefresh,f as mdiAlertCircleOutline}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{m as Vibe64CopyCommand_default,p as ToolInstallRow_default,u as requestVibe64AiOnboarding}from"./client-BYsDPxR3.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{i as vibe64ResourceResponseError}from"./vibe64ApiResponses-B4VY77Q_.js";import{d as STUDIO_HEALTH_ENDPOINT,k as studioHealthQueryKey}from"./studioGateApi-BVdclhPL.js";import{t as Vibe64DashboardPageHeader_default}from"./Vibe64DashboardPageHeader-BhPHQu6p.js";var _hoisted_1={class:`studio-health`};var _hoisted_2={key:0};var _hoisted_3={class:`studio-health__section-title`};var _hoisted_4={class:`studio-health__list`};var _hoisted_5={class:`studio-health__check-copy`};var _hoisted_6={class:`studio-health__check-heading`};var _hoisted_7={key:0};var _hoisted_8={key:0,class:`studio-health__sentence`};var _hoisted_9={key:1};var _sfc_main$1={__name:`StudioHealthScreen`,setup(__props){const{data,isFetching,isInitialLoading,loadError:endpointLoadError,reload}=useEndpointResource({fallbackLoadError:`Studio Health could not run.`,path:computed(()=>STUDIO_HEALTH_ENDPOINT),queryKey:computed(()=>studioHealthQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC)),queryOptions:{refetchOnMount:false,refetchOnWindowFocus:false},requestRecoveryLabel:`Studio Health`});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`Vibe64 has what it needs.`;const failed=Number(summary.failed||0);return failed===1?`One thing Vibe64 needs is missing.`:`${failed} things Vibe64 needs are missing.`});const optionalText=computed(()=>{const missing=Number(health.value.summary?.optionalMissing||0);if(!missing)return``;return missing===1?`1 optional extra isn't set up. Nothing depends on it.`:`${missing} optional extras aren't set up. Nothing depends on them.`});const sections=computed(()=>[{need:`needed`,title:`Needed`,caption:`Vibe64 can't work without these.`},{need:`optional`,title:`Optional`,caption:`Nice to have. Install them when you want them.`}].map(section=>({...section,checks:checks.value.filter(check=>(check.need||`needed`)===section.need).map((check,index)=>({check,index,rank:section.need===`optional`?optionalRank(check):0})).sort((a,b)=>a.rank-b.rank||a.index-b.index).map(({check})=>check)})).filter(section=>section.checks.length));function optionalRank(check){if(check.status===`pass`)return 1;return check.tool?2:0}const aiSetupCheckId=computed(()=>checks.value.find(check=>[`ai-tool`,`ai-auth`].includes(check.id)&&check.status!==`pass`)?.id||``);function found(check){const text=String(check.observed||``);const lead=`${check.label} `;return check.tool&&text.startsWith(lead)?text.slice(lead.length):text}function breakable(text=``){return String(text).split(/(?<=\/)/u)}function iconColor(check){if(check.status===`pass`)return`success`;return check.need===`optional`?`grey`:`warning`}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(Vibe64DashboardPageHeader_default,{description:`What this computer has, and what Vibe64 needs from it.`,icon:unref(mdiHeartPulse),title:`Studio Health`},{actions:withCtx(()=>[createVNode(VBtn,{disabled:unref(isFetching),loading:unref(isFetching),"prepend-icon":unref(mdiRefresh),rounded:`pill`,type:`button`,variant:`tonal`,onClick:unref(reload)},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Refresh `,-1)])]),_:1},8,[`disabled`,`loading`,`prepend-icon`,`onClick`])]),_:1},8,[`icon`]),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},[createBaseVNode(`div`,{class:normalizeClass([`studio-health__summary`,health.value.healthy?`studio-health__summary--ok`:`studio-health__summary--attention`])},[createVNode(VIcon,{icon:health.value.healthy?unref(mdiCheckCircle):unref(mdiAlertCircleOutline),size:`28`},null,8,[`icon`]),createBaseVNode(`div`,null,[createBaseVNode(`strong`,null,toDisplayString(summaryText.value),1),optionalText.value?(openBlock(),createElementBlock(`p`,_hoisted_2,toDisplayString(optionalText.value),1)):createCommentVNode(``,true)])],2),(openBlock(true),createElementBlock(Fragment,null,renderList(sections.value,section=>{return openBlock(),createElementBlock(`section`,{key:section.need,class:`studio-health__section`},[createBaseVNode(`h2`,_hoisted_3,[createTextVNode(toDisplayString(section.title)+` `,1),createBaseVNode(`span`,null,toDisplayString(section.caption),1)]),createBaseVNode(`div`,_hoisted_4,[(openBlock(true),createElementBlock(Fragment,null,renderList(section.checks,check=>{return openBlock(),createElementBlock(Fragment,{key:check.id},[check.tool&&check.status!==`pass`?(openBlock(),createBlock(ToolInstallRow_default,{key:0,checking:unref(isFetching),flat:``,optional:check.need===`optional`,tool:check.tool,class:`studio-health__check studio-health__check--tool`,onCheck:unref(reload)},null,8,[`checking`,`optional`,`tool`,`onCheck`])):(openBlock(),createElementBlock(`article`,{key:1,class:normalizeClass([`studio-health__check`,{"studio-health__check--open":check.status!==`pass`}])},[createVNode(VIcon,{color:iconColor(check),icon:check.status===`pass`?unref(mdiCheckCircle):unref(mdiAlertCircleOutline),size:`20`},null,8,[`color`,`icon`]),createBaseVNode(`div`,_hoisted_5,[createBaseVNode(`div`,_hoisted_6,[createBaseVNode(`strong`,null,toDisplayString(check.label),1),check.status===`pass`?(openBlock(),createElementBlock(`span`,_hoisted_7,[(openBlock(true),createElementBlock(Fragment,null,renderList(breakable(found(check)),(part,index)=>{return openBlock(),createElementBlock(Fragment,{key:index},[createTextVNode(toDisplayString(part),1),_cache[2]||(_cache[2]=createBaseVNode(`wbr`,null,null,-1))],64)}),128))])):createCommentVNode(``,true)]),check.status!==`pass`?(openBlock(),createElementBlock(`p`,_hoisted_8,toDisplayString(check.observed),1)):createCommentVNode(``,true),check.explanation?(openBlock(),createElementBlock(`small`,_hoisted_9,toDisplayString(check.explanation),1)):createCommentVNode(``,true),check.command?(openBlock(),createBlock(Vibe64CopyCommand_default,{key:2,class:`mt-1`,command:check.command},null,8,[`command`])):createCommentVNode(``,true),check.id===aiSetupCheckId.value?(openBlock(),createBlock(VBtn,{key:3,class:`studio-health__action`,color:`primary`,rounded:`pill`,variant:`flat`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestVibe64AiOnboarding)())},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Set up your AI `,-1)])]),_:1})):createCommentVNode(``,true)])],2))],64)}),128))])])}),128))],64))])}}};var StudioHealthScreen_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-3de1f6c9`]]);var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(StudioHealthScreen_default)}}};export{_sfc_main as default};
1
+ import{D as createVNode,E as createTextVNode,On as unref,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon}from"./VAvatar-H2hyOWlB.js";import{D as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-7-YDfAxX.js";import{R as mdiCheckCircle,Yt as mdiHeartPulse,er as mdiRefresh,f as mdiAlertCircleOutline}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{m as Vibe64CopyCommand_default,p as ToolInstallRow_default,u as requestVibe64AiOnboarding}from"./client-CCZIu6yc.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{i as vibe64ResourceResponseError}from"./vibe64ApiResponses-B4VY77Q_.js";import{d as STUDIO_HEALTH_ENDPOINT,k as studioHealthQueryKey}from"./studioGateApi-mkX1eOTX.js";import{t as Vibe64DashboardPageHeader_default}from"./Vibe64DashboardPageHeader-BhPHQu6p.js";var _hoisted_1={class:`studio-health`};var _hoisted_2={key:0};var _hoisted_3={class:`studio-health__section-title`};var _hoisted_4={class:`studio-health__list`};var _hoisted_5={class:`studio-health__check-copy`};var _hoisted_6={class:`studio-health__check-heading`};var _hoisted_7={key:0};var _hoisted_8={key:0,class:`studio-health__sentence`};var _hoisted_9={key:1};var _sfc_main$1={__name:`StudioHealthScreen`,setup(__props){const{data,isFetching,isInitialLoading,loadError:endpointLoadError,reload}=useEndpointResource({fallbackLoadError:`Studio Health could not run.`,path:computed(()=>STUDIO_HEALTH_ENDPOINT),queryKey:computed(()=>studioHealthQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC)),queryOptions:{refetchOnMount:false,refetchOnWindowFocus:false},requestRecoveryLabel:`Studio Health`});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`Vibe64 has what it needs.`;const failed=Number(summary.failed||0);return failed===1?`One thing Vibe64 needs is missing.`:`${failed} things Vibe64 needs are missing.`});const optionalText=computed(()=>{const missing=Number(health.value.summary?.optionalMissing||0);if(!missing)return``;return missing===1?`1 optional extra isn't set up. Nothing depends on it.`:`${missing} optional extras aren't set up. Nothing depends on them.`});const sections=computed(()=>[{need:`needed`,title:`Needed`,caption:`Vibe64 can't work without these.`},{need:`optional`,title:`Optional`,caption:`Nice to have. Install them when you want them.`}].map(section=>({...section,checks:checks.value.filter(check=>(check.need||`needed`)===section.need).map((check,index)=>({check,index,rank:section.need===`optional`?optionalRank(check):0})).sort((a,b)=>a.rank-b.rank||a.index-b.index).map(({check})=>check)})).filter(section=>section.checks.length));function optionalRank(check){if(check.status===`pass`)return 1;return check.tool?2:0}const aiSetupCheckId=computed(()=>checks.value.find(check=>[`ai-tool`,`ai-auth`].includes(check.id)&&check.status!==`pass`)?.id||``);function found(check){const text=String(check.observed||``);const lead=`${check.label} `;return check.tool&&text.startsWith(lead)?text.slice(lead.length):text}function breakable(text=``){return String(text).split(/(?<=\/)/u)}function iconColor(check){if(check.status===`pass`)return`success`;return check.need===`optional`?`grey`:`warning`}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(Vibe64DashboardPageHeader_default,{description:`What this computer has, and what Vibe64 needs from it.`,icon:unref(mdiHeartPulse),title:`Studio Health`},{actions:withCtx(()=>[createVNode(VBtn,{disabled:unref(isFetching),loading:unref(isFetching),"prepend-icon":unref(mdiRefresh),rounded:`pill`,type:`button`,variant:`tonal`,onClick:unref(reload)},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Refresh `,-1)])]),_:1},8,[`disabled`,`loading`,`prepend-icon`,`onClick`])]),_:1},8,[`icon`]),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},[createBaseVNode(`div`,{class:normalizeClass([`studio-health__summary`,health.value.healthy?`studio-health__summary--ok`:`studio-health__summary--attention`])},[createVNode(VIcon,{icon:health.value.healthy?unref(mdiCheckCircle):unref(mdiAlertCircleOutline),size:`28`},null,8,[`icon`]),createBaseVNode(`div`,null,[createBaseVNode(`strong`,null,toDisplayString(summaryText.value),1),optionalText.value?(openBlock(),createElementBlock(`p`,_hoisted_2,toDisplayString(optionalText.value),1)):createCommentVNode(``,true)])],2),(openBlock(true),createElementBlock(Fragment,null,renderList(sections.value,section=>{return openBlock(),createElementBlock(`section`,{key:section.need,class:`studio-health__section`},[createBaseVNode(`h2`,_hoisted_3,[createTextVNode(toDisplayString(section.title)+` `,1),createBaseVNode(`span`,null,toDisplayString(section.caption),1)]),createBaseVNode(`div`,_hoisted_4,[(openBlock(true),createElementBlock(Fragment,null,renderList(section.checks,check=>{return openBlock(),createElementBlock(Fragment,{key:check.id},[check.tool&&check.status!==`pass`?(openBlock(),createBlock(ToolInstallRow_default,{key:0,checking:unref(isFetching),flat:``,optional:check.need===`optional`,tool:check.tool,class:`studio-health__check studio-health__check--tool`,onCheck:unref(reload)},null,8,[`checking`,`optional`,`tool`,`onCheck`])):(openBlock(),createElementBlock(`article`,{key:1,class:normalizeClass([`studio-health__check`,{"studio-health__check--open":check.status!==`pass`}])},[createVNode(VIcon,{color:iconColor(check),icon:check.status===`pass`?unref(mdiCheckCircle):unref(mdiAlertCircleOutline),size:`20`},null,8,[`color`,`icon`]),createBaseVNode(`div`,_hoisted_5,[createBaseVNode(`div`,_hoisted_6,[createBaseVNode(`strong`,null,toDisplayString(check.label),1),check.status===`pass`?(openBlock(),createElementBlock(`span`,_hoisted_7,[(openBlock(true),createElementBlock(Fragment,null,renderList(breakable(found(check)),(part,index)=>{return openBlock(),createElementBlock(Fragment,{key:index},[createTextVNode(toDisplayString(part),1),_cache[2]||(_cache[2]=createBaseVNode(`wbr`,null,null,-1))],64)}),128))])):createCommentVNode(``,true)]),check.status!==`pass`?(openBlock(),createElementBlock(`p`,_hoisted_8,toDisplayString(check.observed),1)):createCommentVNode(``,true),check.explanation?(openBlock(),createElementBlock(`small`,_hoisted_9,toDisplayString(check.explanation),1)):createCommentVNode(``,true),check.command?(openBlock(),createBlock(Vibe64CopyCommand_default,{key:2,class:`mt-1`,command:check.command},null,8,[`command`])):createCommentVNode(``,true),check.id===aiSetupCheckId.value?(openBlock(),createBlock(VBtn,{key:3,class:`studio-health__action`,color:`primary`,rounded:`pill`,variant:`flat`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestVibe64AiOnboarding)())},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Set up your AI `,-1)])]),_:1})):createCommentVNode(``,true)])],2))],64)}),128))])])}),128))],64))])}}};var StudioHealthScreen_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-3de1f6c9`]]);var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(StudioHealthScreen_default)}}};export{_sfc_main as default};
@@ -1 +1 @@
1
- import{D as createVNode,E as createTextVNode,On as unref,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon}from"./VAvatar-H2hyOWlB.js";import{t as VChip}from"./VChip-Uixfx461.js";import{Dt as mdiEyeOutline,Zt as mdiHistory,b as mdiArchiveOutline,er as mdiRefresh}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{n as VCardText,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{c as vibe64SessionStatusColor,i as vibe64SessionDisplayTitle,l as vibe64SessionStatusLabel}from"./vibe64SessionViewModel-B0cCumM8.js";import{t as Vibe64UnavailableSessions_default}from"./Vibe64UnavailableSessions-TqsxvGSf.js";import{t as Vibe64DashboardPageHeader_default}from"./Vibe64DashboardPageHeader-BhPHQu6p.js";import{a as useArchivedVibe64Sessions,n as archivedVibe64SessionsEmits,r as archivedVibe64SessionsProps}from"./useArchivedVibe64Sessions-DHYRnyJD.js";var _hoisted_1$1={class:`studio-archived-sessions d-flex flex-column ga-3`};var _hoisted_2={key:0,class:`studio-archived-sessions__copy`};var _hoisted_3={class:`text-headline-small font-weight-bold ma-0`};var _hoisted_4={key:0,class:`text-body-2 text-medium-emphasis mb-0`};var _hoisted_5={key:2,"aria-label":`Loading archived sessions`,class:`studio-archived-sessions__grid`,role:`status`};var _hoisted_6={class:`studio-archived-sessions__card-heading`};var _hoisted_7={class:`studio-archived-sessions__identity`};var _hoisted_8={class:`text-subtitle-1 mb-1`};var _hoisted_9={class:`text-body-2 text-medium-emphasis mb-0`};var _hoisted_10={key:4,class:`studio-archived-sessions__grid`};var _hoisted_11={class:`studio-archived-sessions__card-heading`};var _hoisted_12={class:`studio-archived-sessions__icon`};var _hoisted_13={class:`studio-archived-sessions__identity`};var _hoisted_14={class:`studio-archived-sessions__session-id`};var _hoisted_15={class:`studio-archived-sessions__meta`};var _hoisted_16=[`datetime`];var _sfc_main$1={__name:`ArchivedVibe64Sessions`,props:archivedVibe64SessionsProps,emits:archivedVibe64SessionsEmits,setup(__props,{expose:__expose,emit:__emit}){const{error,formatArchivedAt,loadSessions,loading,sessionRoute,sessions,unavailableSessions}=useArchivedVibe64Sessions(__emit);__expose({refresh:loadSessions});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$1,[_ctx.title||_ctx.$slots.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.$slots.title&&!_ctx.description}])},[_ctx.title||_ctx.$slots.title||_ctx.description?(openBlock(),createElementBlock(`div`,_hoisted_2,[renderSlot(_ctx.$slots,`title`,{},()=>[createBaseVNode(`h2`,_hoisted_3,toDisplayString(_ctx.title),1)],true),_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),createVNode(Vibe64UnavailableSessions_default,{sessions:unref(unavailableSessions),loading:unref(loading),onRecheck:unref(loadSessions)},null,8,[`sessions`,`loading`,`onRecheck`]),unref(loading)&&unref(sessions).length<1?(openBlock(),createElementBlock(`div`,_hoisted_5,[(openBlock(),createElementBlock(Fragment,null,renderList(4,index=>{return createVNode(VCard,{key:`archived-session-skeleton-${index}`,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(unavailableSessions).length&&!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(mdiArchiveOutline),size:`22`},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_13,[createBaseVNode(`div`,_hoisted_14,toDisplayString(unref(vibe64SessionDisplayTitle)(session)),1),createBaseVNode(`div`,_hoisted_15,[createVNode(VChip,{color:unref(vibe64SessionStatusColor)(session.status),size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(vibe64SessionStatusLabel)(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)])}}};var ArchivedVibe64Sessions_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-9206865a`]]);var _hoisted_1={class:`vibe64-dashboard-page`};var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(ArchivedVibe64Sessions_default,{"empty-text":`Archived chats will appear here after their active workspaces are removed.`,"empty-title":`No archived chats`},{title:withCtx(()=>[createVNode(Vibe64DashboardPageHeader_default,{description:`Archived chats and their conversations.`,icon:unref(mdiHistory),title:`Session history`},null,8,[`icon`])]),_:1})])}}};var history_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-6c313fbf`]]);export{history_default as default};
1
+ import{D as createVNode,E as createTextVNode,On as unref,Zn as normalizeClass,_ as createBaseVNode,b as createElementBlock,bt as renderList,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,xt as renderSlot,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon}from"./VAvatar-H2hyOWlB.js";import{t as VChip}from"./VChip-Uixfx461.js";import{Dt as mdiEyeOutline,Zt as mdiHistory,b as mdiArchiveOutline,er as mdiRefresh}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{n as VCardText,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{c as vibe64SessionStatusColor,i as vibe64SessionDisplayTitle,l as vibe64SessionStatusLabel}from"./vibe64SessionViewModel-B0cCumM8.js";import{t as Vibe64UnavailableSessions_default}from"./Vibe64UnavailableSessions-Da4RxIhA.js";import{t as Vibe64DashboardPageHeader_default}from"./Vibe64DashboardPageHeader-BhPHQu6p.js";import{a as useArchivedVibe64Sessions,n as archivedVibe64SessionsEmits,r as archivedVibe64SessionsProps}from"./useArchivedVibe64Sessions-DIOpfUxD.js";var _hoisted_1$1={class:`studio-archived-sessions d-flex flex-column ga-3`};var _hoisted_2={key:0,class:`studio-archived-sessions__copy`};var _hoisted_3={class:`text-headline-small font-weight-bold ma-0`};var _hoisted_4={key:0,class:`text-body-2 text-medium-emphasis mb-0`};var _hoisted_5={key:2,"aria-label":`Loading archived sessions`,class:`studio-archived-sessions__grid`,role:`status`};var _hoisted_6={class:`studio-archived-sessions__card-heading`};var _hoisted_7={class:`studio-archived-sessions__identity`};var _hoisted_8={class:`text-subtitle-1 mb-1`};var _hoisted_9={class:`text-body-2 text-medium-emphasis mb-0`};var _hoisted_10={key:4,class:`studio-archived-sessions__grid`};var _hoisted_11={class:`studio-archived-sessions__card-heading`};var _hoisted_12={class:`studio-archived-sessions__icon`};var _hoisted_13={class:`studio-archived-sessions__identity`};var _hoisted_14={class:`studio-archived-sessions__session-id`};var _hoisted_15={class:`studio-archived-sessions__meta`};var _hoisted_16=[`datetime`];var _sfc_main$1={__name:`ArchivedVibe64Sessions`,props:archivedVibe64SessionsProps,emits:archivedVibe64SessionsEmits,setup(__props,{expose:__expose,emit:__emit}){const{error,formatArchivedAt,loadSessions,loading,sessionRoute,sessions,unavailableSessions}=useArchivedVibe64Sessions(__emit);__expose({refresh:loadSessions});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$1,[_ctx.title||_ctx.$slots.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.$slots.title&&!_ctx.description}])},[_ctx.title||_ctx.$slots.title||_ctx.description?(openBlock(),createElementBlock(`div`,_hoisted_2,[renderSlot(_ctx.$slots,`title`,{},()=>[createBaseVNode(`h2`,_hoisted_3,toDisplayString(_ctx.title),1)],true),_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),createVNode(Vibe64UnavailableSessions_default,{sessions:unref(unavailableSessions),loading:unref(loading),onRecheck:unref(loadSessions)},null,8,[`sessions`,`loading`,`onRecheck`]),unref(loading)&&unref(sessions).length<1?(openBlock(),createElementBlock(`div`,_hoisted_5,[(openBlock(),createElementBlock(Fragment,null,renderList(4,index=>{return createVNode(VCard,{key:`archived-session-skeleton-${index}`,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(unavailableSessions).length&&!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(mdiArchiveOutline),size:`22`},null,8,[`icon`])]),createBaseVNode(`div`,_hoisted_13,[createBaseVNode(`div`,_hoisted_14,toDisplayString(unref(vibe64SessionDisplayTitle)(session)),1),createBaseVNode(`div`,_hoisted_15,[createVNode(VChip,{color:unref(vibe64SessionStatusColor)(session.status),size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(vibe64SessionStatusLabel)(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)])}}};var ArchivedVibe64Sessions_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-9206865a`]]);var _hoisted_1={class:`vibe64-dashboard-page`};var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(ArchivedVibe64Sessions_default,{"empty-text":`Archived chats will appear here after their active workspaces are removed.`,"empty-title":`No archived chats`},{title:withCtx(()=>[createVNode(Vibe64DashboardPageHeader_default,{description:`Archived chats and their conversations.`,icon:unref(mdiHistory),title:`Session history`},null,8,[`icon`])]),_:1})])}}};var history_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-6c313fbf`]]);export{history_default as default};
@@ -1,2 +1,2 @@
1
- import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,_ as createBaseVNode,b as createElementBlock,bt as renderList,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{J as useQueryClient,t as useEndpointResource}from"./useEndpointResource-DBRQISI_.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{o as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-BxTBYuRg.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-CGKCbM_d.js";import{S as mdiArrowLeft,b as mdiArchiveOutline,br as mdiSourceMerge,er as mdiRefresh}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useUiFeedback}from"./useUiFeedback-B51xtCAK.js";import{i as vibe64ResourceResponseError,t as vibe64ApiError}from"./vibe64ApiResponses-B4VY77Q_.js";import{t as Vibe64TemporaryAiFixAction_default}from"./Vibe64TemporaryAiFixAction-CV26vPTg.js";var _hoisted_1={class:`incoming d-flex flex-column ga-3`,"aria-label":`Incoming changes`};var _hoisted_2={class:`d-flex align-center flex-wrap ga-2`};var _hoisted_3={class:`ma-0 text-body-medium`};var _hoisted_4={key:1,class:`ma-0`};var _hoisted_5={class:`incoming__summary`};var _hoisted_6={class:`ma-0 text-title-medium`};var _hoisted_7={class:`ma-0 text-body-small`};var _hoisted_8={class:`d-flex flex-wrap ga-2`};var _hoisted_9={class:`ma-0 text-title-medium`};var _hoisted_10={class:`ma-0`};var _hoisted_11={class:`ma-0`};var _hoisted_12={key:0,class:`ma-0`};var _hoisted_13={key:1,class:`ma-0`};var _hoisted_14={class:`d-flex flex-wrap ga-2`};var _hoisted_15={class:`d-flex flex-wrap ga-2 mt-2`};var _hoisted_16={key:3,class:`ma-0`,role:`status`};var _hoisted_17={key:4,class:`ma-0`,role:`status`};var _hoisted_18={key:0,class:`ma-0`};var _hoisted_19={class:`incoming__diff pa-4`};var _hoisted_20={key:0};var _sfc_main$1={__name:`IncomingChangesPanel`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){const props=__props;const route=useRoute();const router=useRouter();const queryClient=useQueryClient();const feedback=useUiFeedback({source:`vibe64.incoming`});const projectSlug=computed(()=>projectSlugFromRoute(route));const sessionId=computed(()=>props.dashboardContext.sessionId||``);const available=computed(()=>props.dashboardContext.projectContext?.repositoryMode===`github`);const id=computed(()=>String(route.query.contribution||``));const state=computed(()=>[`pending`,`merged`,`discarded`,`unresolved`,`all`].includes(route.query.state)?route.query.state:`pending`);const offset=computed(()=>/^\d+$/u.test(String(route.query.offset||``))?Number(route.query.offset):0);const basePath=computed(()=>scopedDevelopmentApiUrl(`/api/vibe64/incoming`,projectSlug.value));const path=computed(()=>id.value?`${basePath.value}/${encodeURIComponent(id.value)}`:basePath.value);const readQuery=computed(()=>({sessionId:sessionId.value,...!id.value?{state:state.value,offset:offset.value,limit:25}:{}}));const resource=useEndpointResource({path,readQuery,queryKey:computed(()=>[`vibe64.incoming`,basePath.value,id.value,readQuery.value]),enabled:computed(()=>available.value&&Boolean(sessionId.value)&&props.dashboardContext.active!==false),queryOptions:{retry:false},mutationOptions:{retry:false},fallbackLoadError:`Incoming changes could not load.`});const entry=computed(()=>id.value?resource.data.value?.contributions?.[0]:null);const confirmation=ref(null);const pending=ref(false);const uncertain=ref(false);const conflict=ref(null);const repair=ref(null);const openingRepair=ref(false);const loadError=computed(()=>resource.loadError.value||vibe64ResourceResponseError(resource.data.value));watch(()=>[path.value,sessionId.value],()=>{confirmation.value=null;uncertain.value=false;conflict.value=null;repair.value=null});const actionDisabled=computed(()=>pending.value||openingRepair.value||uncertain.value||resource.isFetching.value||props.dashboardContext.sourceOperationsSuspended);function navigate(query){return router.push({query:{...route.query,...query}})}function back(){const previous=router.options.history.state.back;if(typeof previous===`string`&&previous.startsWith(projectAppPath(projectSlug.value)+`/`))router.back();else router.push(projectAppPath(projectSlug.value,`/dashboard/env`))}function confirm(action){if(actionDisabled.value||!entry.value?.review||resource.data.value?.actions?.[action])return;confirmation.value={action,review:{...entry.value.review},id:entry.value.id,...action===`merge`&&repair.value?{repairReview:{...repair.value.repairReview}}:{},path:path.value,sessionId:sessionId.value,basePath:basePath.value}}async function apply(){if(pending.value||!confirmation.value||uncertain.value)return;const reviewed=confirmation.value;pending.value=true;try{const result=await resource.save({sessionId:reviewed.sessionId,action:reviewed.action,review:reviewed.review,...reviewed.repairReview?{repairReview:reviewed.repairReview}:{}},{method:`POST`,path:reviewed.path});if(result?.ok!==true)throw vibe64ApiError(result,`The contribution action was not confirmed.`);feedback.success(reviewed.action===`merge`?`Contribution merged.`:`Contribution discarded; its commits are preserved.`);confirmation.value=null;conflict.value=null;repair.value=null;await queryClient.invalidateQueries({queryKey:[`vibe64.incoming`,reviewed.basePath]})}catch(error){if(path.value===reviewed.path&&sessionId.value===reviewed.sessionId){confirmation.value=null;repair.value=null;if(error.code===`vibe64_incoming_merge_conflict`)conflict.value={...error.details,review:reviewed.review};else uncertain.value=true}feedback.error(error,`The result was not confirmed. Refresh Incoming changes before trying again.`)}finally{pending.value=false}}async function fixConflict(){if(actionDisabled.value||!conflict.value||props.dashboardContext.assistantFixAllowed===false||typeof props.dashboardContext.requestTemporaryAi!==`function`)return;const{review,conflictPaths,checkpointCommit}=conflict.value;openingRepair.value=true;try{await props.dashboardContext.requestTemporaryAi({code:`vibe64_incoming_merge_conflict`,title:`Resolve Incoming merge`,error:[`Receiving repository: ${review.repository}; target ${review.targetBranch} at ${review.targetHead}.`,`Contribution vibe64-incoming/${review.id} at ${review.activeHead}.`,`Original receiving work is preserved by checkpoint ${checkpointCommit}.`,`Conflicting files: ${JSON.stringify(conflictPaths)}.`].join(`
1
+ import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,_ as createBaseVNode,b as createElementBlock,bt as renderList,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as useEndpointResource,tt as useQueryClient}from"./useEndpointResource-7-YDfAxX.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{o as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-l5_-E6pq.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-B0-GdWh8.js";import{S as mdiArrowLeft,b as mdiArchiveOutline,br as mdiSourceMerge,er as mdiRefresh}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useUiFeedback}from"./useUiFeedback-Bd3rao6E.js";import{i as vibe64ResourceResponseError,t as vibe64ApiError}from"./vibe64ApiResponses-B4VY77Q_.js";import{t as Vibe64TemporaryAiFixAction_default}from"./Vibe64TemporaryAiFixAction-CV26vPTg.js";var _hoisted_1={class:`incoming d-flex flex-column ga-3`,"aria-label":`Incoming changes`};var _hoisted_2={class:`d-flex align-center flex-wrap ga-2`};var _hoisted_3={class:`ma-0 text-body-medium`};var _hoisted_4={key:1,class:`ma-0`};var _hoisted_5={class:`incoming__summary`};var _hoisted_6={class:`ma-0 text-title-medium`};var _hoisted_7={class:`ma-0 text-body-small`};var _hoisted_8={class:`d-flex flex-wrap ga-2`};var _hoisted_9={class:`ma-0 text-title-medium`};var _hoisted_10={class:`ma-0`};var _hoisted_11={class:`ma-0`};var _hoisted_12={key:0,class:`ma-0`};var _hoisted_13={key:1,class:`ma-0`};var _hoisted_14={class:`d-flex flex-wrap ga-2`};var _hoisted_15={class:`d-flex flex-wrap ga-2 mt-2`};var _hoisted_16={key:3,class:`ma-0`,role:`status`};var _hoisted_17={key:4,class:`ma-0`,role:`status`};var _hoisted_18={key:0,class:`ma-0`};var _hoisted_19={class:`incoming__diff pa-4`};var _hoisted_20={key:0};var _sfc_main$1={__name:`IncomingChangesPanel`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){const props=__props;const route=useRoute();const router=useRouter();const queryClient=useQueryClient();const feedback=useUiFeedback({source:`vibe64.incoming`});const projectSlug=computed(()=>projectSlugFromRoute(route));const sessionId=computed(()=>props.dashboardContext.sessionId||``);const available=computed(()=>props.dashboardContext.projectContext?.repositoryMode===`github`);const id=computed(()=>String(route.query.contribution||``));const state=computed(()=>[`pending`,`merged`,`discarded`,`unresolved`,`all`].includes(route.query.state)?route.query.state:`pending`);const offset=computed(()=>/^\d+$/u.test(String(route.query.offset||``))?Number(route.query.offset):0);const basePath=computed(()=>scopedDevelopmentApiUrl(`/api/vibe64/incoming`,projectSlug.value));const path=computed(()=>id.value?`${basePath.value}/${encodeURIComponent(id.value)}`:basePath.value);const readQuery=computed(()=>({sessionId:sessionId.value,...!id.value?{state:state.value,offset:offset.value,limit:25}:{}}));const resource=useEndpointResource({path,readQuery,queryKey:computed(()=>[`vibe64.incoming`,basePath.value,id.value,readQuery.value]),enabled:computed(()=>available.value&&Boolean(sessionId.value)&&props.dashboardContext.active!==false),queryOptions:{retry:false},mutationOptions:{retry:false},fallbackLoadError:`Incoming changes could not load.`});const entry=computed(()=>id.value?resource.data.value?.contributions?.[0]:null);const confirmation=ref(null);const pending=ref(false);const uncertain=ref(false);const conflict=ref(null);const repair=ref(null);const openingRepair=ref(false);const loadError=computed(()=>resource.loadError.value||vibe64ResourceResponseError(resource.data.value));watch(()=>[path.value,sessionId.value],()=>{confirmation.value=null;uncertain.value=false;conflict.value=null;repair.value=null});const actionDisabled=computed(()=>pending.value||openingRepair.value||uncertain.value||resource.isFetching.value||props.dashboardContext.sourceOperationsSuspended);function navigate(query){return router.push({query:{...route.query,...query}})}function back(){const previous=router.options.history.state.back;if(typeof previous===`string`&&previous.startsWith(projectAppPath(projectSlug.value)+`/`))router.back();else router.push(projectAppPath(projectSlug.value,`/dashboard/env`))}function confirm(action){if(actionDisabled.value||!entry.value?.review||resource.data.value?.actions?.[action])return;confirmation.value={action,review:{...entry.value.review},id:entry.value.id,...action===`merge`&&repair.value?{repairReview:{...repair.value.repairReview}}:{},path:path.value,sessionId:sessionId.value,basePath:basePath.value}}async function apply(){if(pending.value||!confirmation.value||uncertain.value)return;const reviewed=confirmation.value;pending.value=true;try{const result=await resource.save({sessionId:reviewed.sessionId,action:reviewed.action,review:reviewed.review,...reviewed.repairReview?{repairReview:reviewed.repairReview}:{}},{method:`POST`,path:reviewed.path});if(result?.ok!==true)throw vibe64ApiError(result,`The contribution action was not confirmed.`);feedback.success(reviewed.action===`merge`?`Contribution merged.`:`Contribution discarded; its commits are preserved.`);confirmation.value=null;conflict.value=null;repair.value=null;await queryClient.invalidateQueries({queryKey:[`vibe64.incoming`,reviewed.basePath]})}catch(error){if(path.value===reviewed.path&&sessionId.value===reviewed.sessionId){confirmation.value=null;repair.value=null;if(error.code===`vibe64_incoming_merge_conflict`)conflict.value={...error.details,review:reviewed.review};else uncertain.value=true}feedback.error(error,`The result was not confirmed. Refresh Incoming changes before trying again.`)}finally{pending.value=false}}async function fixConflict(){if(actionDisabled.value||!conflict.value||props.dashboardContext.assistantFixAllowed===false||typeof props.dashboardContext.requestTemporaryAi!==`function`)return;const{review,conflictPaths,checkpointCommit}=conflict.value;openingRepair.value=true;try{await props.dashboardContext.requestTemporaryAi({code:`vibe64_incoming_merge_conflict`,title:`Resolve Incoming merge`,error:[`Receiving repository: ${review.repository}; target ${review.targetBranch} at ${review.targetHead}.`,`Contribution vibe64-incoming/${review.id} at ${review.activeHead}.`,`Original receiving work is preserved by checkpoint ${checkpointCommit}.`,`Conflicting files: ${JSON.stringify(conflictPaths)}.`].join(`
2
2
  `)})}finally{openingRepair.value=false}}async function reviewRepair(){if(actionDisabled.value||!entry.value?.review)return;const reviewed={path:path.value,sessionId:sessionId.value,review:{...entry.value.review}};pending.value=true;try{const result=await resource.save({sessionId:reviewed.sessionId,action:`review-repair`,review:reviewed.review},{method:`POST`,path:reviewed.path});if(result?.ok!==true||result.status!==`repair-review`)throw vibe64ApiError(result,`Repair review was not confirmed. Refresh before retrying.`);if(path.value===reviewed.path&&sessionId.value===reviewed.sessionId)repair.value=result}catch(error){if(path.value===reviewed.path&&sessionId.value===reviewed.sessionId){repair.value=null;uncertain.value=true}feedback.error(error,`Repair review failed. The contribution has not been merged.`)}finally{pending.value=false}}async function refresh(){confirmation.value=null;repair.value=null;conflict.value=null;await resource.reload();if(!loadError.value)uncertain.value=false}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`div`,_hoisted_2,[createVNode(VBtn,{"prepend-icon":unref(mdiArrowLeft),variant:`text`,height:`48`,onClick:back},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Back`,-1)])]),_:1},8,[`prepend-icon`]),id.value?(openBlock(),createBlock(VBtn,{key:0,variant:`tonal`,height:`48`,onClick:_cache[0]||(_cache[0]=$event=>navigate({contribution:void 0}))},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`All incoming changes`,-1)])]),_:1})):createCommentVNode(``,true),createVNode(VSpacer),createVNode(VBtn,{"prepend-icon":unref(mdiRefresh),variant:`text`,height:`48`,disabled:pending.value||unref(resource).isFetching.value||!sessionId.value||!available.value,onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(resource).isFetching.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`prepend-icon`,`disabled`])]),!available.value?(openBlock(),createBlock(VAlert,{key:0,type:`info`,variant:`tonal`},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Incoming changes require a configured GitHub receiving project.`,-1)])]),_:1})):!sessionId.value?(openBlock(),createBlock(VAlert,{key:1,type:`info`,variant:`tonal`},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Select or create a working session to read this project's Incoming changes. The queue is shared by all sessions.`,-1)])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:2},[!id.value?(openBlock(),createBlock(VSelect,{key:0,"model-value":state.value,label:`Contribution state`,"hide-details":``,variant:`outlined`,items:[`pending`,`merged`,`discarded`,`unresolved`,`all`].map(value=>({value,title:value[0].toUpperCase()+value.slice(1)})),"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>navigate({state:$event,offset:void 0}))},null,8,[`model-value`,`items`])):createCommentVNode(``,true),unref(resource).isInitialLoading.value?(openBlock(),createBlock(VSheet,{key:1,border:``,rounded:`lg`,class:`pa-4`,"aria-label":`Loading incoming changes`,"aria-busy":`true`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(3,index=>{return createVNode(VSkeletonLoader,{key:index,type:id.value?`paragraph`:`list-item-two-line`},null,8,[`type`])}),64))]),_:1})):loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(loadError.value),1)]),_:1})):!id.value?(openBlock(),createElementBlock(Fragment,{key:3},[unref(resource).data.value?.unresolvedCount>0&&state.value!==`unresolved`?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(resource).data.value.unresolvedCount)+` interrupted discards need review. `,1),createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[2]||(_cache[2]=$event=>navigate({state:`unresolved`,offset:void 0}))},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Review interrupted discards`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),createBaseVNode(`p`,_hoisted_3,toDisplayString(unref(resource).data.value?.totalCount||0)+` `+toDisplayString(state.value)+` contributions`,1),!unref(resource).data.value?.contributions?.length?(openBlock(),createElementBlock(`p`,_hoisted_4,`No contributions in this view.`)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(unref(resource).data.value?.contributions||[],item=>{return openBlock(),createBlock(VSheet,{key:item.id,border:``,rounded:`lg`,class:`pa-4 d-flex flex-wrap align-center ga-3`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_5,[createBaseVNode(`p`,_hoisted_6,toDisplayString(item.title||item.branch),1),createBaseVNode(`p`,_hoisted_7,toDisplayString(item.status)+` · `+toDisplayString(item.fileCount)+` changed files`,1)]),createVNode(VBtn,{variant:`tonal`,height:`48`,onClick:$event=>navigate({contribution:item.id})},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Review`,-1)])]),_:1},8,[`onClick`])]),_:2},1024)}),128)),createBaseVNode(`div`,_hoisted_8,[createVNode(VBtn,{variant:`text`,height:`48`,disabled:offset.value===0,onClick:_cache[3]||(_cache[3]=$event=>navigate({offset:Math.max(0,offset.value-25)||void 0}))},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Previous page`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{variant:`text`,height:`48`,disabled:unref(resource).data.value?.nextOffset==null,onClick:_cache[4]||(_cache[4]=$event=>navigate({offset:unref(resource).data.value.nextOffset}))},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Next page`,-1)])]),_:1},8,[`disabled`])])],64)):entry.value?(openBlock(),createElementBlock(Fragment,{key:4},[createVNode(VSheet,{border:``,rounded:`lg`,class:`pa-4 d-flex flex-column ga-3`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_9,toDisplayString(entry.value.title),1),createBaseVNode(`p`,_hoisted_10,toDisplayString(unref(resource).data.value.repository)+` · `+toDisplayString(entry.value.status)+` · `+toDisplayString(entry.value.fileCount)+` changed files`,1),createBaseVNode(`p`,_hoisted_11,[_cache[17]||(_cache[17]=createTextVNode(`Contribution: `,-1)),createBaseVNode(`code`,null,toDisplayString(entry.value.head),1),_cache[18]||(_cache[18]=createBaseVNode(`br`,null,null,-1)),createTextVNode(`Target `+toDisplayString(unref(resource).data.value.targetBranch)+`: `,1),createBaseVNode(`code`,null,toDisplayString(unref(resource).data.value.targetHead),1)]),entry.value.status===`unresolved`?(openBlock(),createElementBlock(`p`,_hoisted_12,`Both active and discarded branches exist. Refresh and finish Discard only when both still point to the same reviewed commit. Different heads require inspection by a coding agent.`)):createCommentVNode(``,true),unref(resource).data.value.actions?.merge?(openBlock(),createElementBlock(`p`,_hoisted_13,toDisplayString(unref(resource).data.value.actions.merge),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_14,[entry.value.status===`pending`?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,height:`48`,"prepend-icon":unref(mdiSourceMerge),disabled:actionDisabled.value||Boolean(unref(resource).data.value.actions?.merge)||Boolean(conflict.value&&!repair.value),onClick:_cache[5]||(_cache[5]=$event=>confirm(`merge`))},{default:withCtx(()=>[createTextVNode(`Merge into `+toDisplayString(unref(resource).data.value.targetBranch),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),entry.value.activeHead&&(!entry.value.discardedHead||entry.value.discardedHead===entry.value.activeHead)?(openBlock(),createBlock(VBtn,{key:1,variant:`outlined`,height:`48`,"prepend-icon":unref(mdiArchiveOutline),disabled:actionDisabled.value||Boolean(unref(resource).data.value.actions?.discard),onClick:_cache[6]||(_cache[6]=$event=>confirm(`discard`))},{default:withCtx(()=>[createTextVNode(toDisplayString(entry.value.status===`unresolved`?`Finish discard`:`Discard contribution`),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),conflict.value?(openBlock(),createBlock(VAlert,{key:2,type:`warning`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(` These files need repair in this receiving session: `+toDisplayString(conflict.value.conflictPaths?.join(`, `))+`. Your original work has a private checkpoint. AI completion does not merge or push anything. `,1),createBaseVNode(`div`,_hoisted_15,[createVNode(Vibe64TemporaryAiFixAction_default,{pending:openingRepair.value,disabled:actionDisabled.value||__props.dashboardContext.assistantFixAllowed===false||typeof __props.dashboardContext.requestTemporaryAi!==`function`,onClick:fixConflict},null,8,[`pending`,`disabled`]),createVNode(VBtn,{height:`48`,variant:`tonal`,disabled:actionDisabled.value,onClick:reviewRepair},{default:withCtx(()=>[..._cache[19]||(_cache[19]=[createTextVNode(`Review resolved conflicts`,-1)])]),_:1},8,[`disabled`])])]),_:1})):createCommentVNode(``,true),repair.value?(openBlock(),createElementBlock(`p`,_hoisted_16,`Review the repaired merge below, then choose Merge into `+toDisplayString(unref(resource).data.value.targetBranch)+`. Only the conflicting paths come from this session; unrelated local changes are excluded.`,1)):createCommentVNode(``,true),uncertain.value?(openBlock(),createElementBlock(`p`,_hoisted_17,`Refresh to inspect the current branches before acting again.`)):createCommentVNode(``,true)]),_:1}),(repair.value?.diff||entry.value.diff)?.truncated?(openBlock(),createElementBlock(`p`,_hoisted_18,`This diff is truncated. Inspect the complete change in a coding session before merging.`)):createCommentVNode(``,true),createBaseVNode(`pre`,_hoisted_19,toDisplayString((repair.value?.diff||entry.value.diff)?.content||`No file differences from the target.`),1)],64)):createCommentVNode(``,true)],64)),createVNode(VDialog,{"model-value":Boolean(confirmation.value),"max-width":`640`,persistent:pending.value,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>!$event&&!pending.value&&(confirmation.value=null))},{default:withCtx(()=>[confirmation.value?(openBlock(),createBlock(VCard,{key:0,title:confirmation.value.action===`merge`?`Merge contribution?`:`Discard contribution?`},{default:withCtx(()=>[createVNode(VCardText,{class:`incoming`},{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(confirmation.value.review.repository)+` → `+toDisplayString(confirmation.value.review.targetBranch),1),createBaseVNode(`p`,null,[createBaseVNode(`code`,null,toDisplayString(confirmation.value.review.activeHead),1)]),confirmation.value.repairReview?(openBlock(),createElementBlock(`p`,_hoisted_20,[_cache[20]||(_cache[20]=createTextVNode(`Merge the reviewed repair `,-1)),createBaseVNode(`code`,null,toDisplayString(confirmation.value.repairReview.tree),1),_cache[21]||(_cache[21]=createTextVNode(`. Changed source or remote heads require another review.`,-1))])):createCommentVNode(``,true),createBaseVNode(`p`,null,toDisplayString(confirmation.value.action===`merge`?`Integrate this reviewed commit while preserving its history. The contribution branch remains available.`:`Rename the branch with _discarded appended. Its commits and the author’s checkout are preserved; dependent work remains blocked.`),1)]),_:1}),createVNode(VCardActions,{class:`flex-wrap`},{default:withCtx(()=>[createVNode(VBtn,{height:`48`,disabled:pending.value,onClick:_cache[7]||(_cache[7]=$event=>confirmation.value=null)},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,height:`48`,disabled:pending.value||uncertain.value,onClick:apply},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Applying…`:confirmation.value.action===`merge`?`Merge contribution`:`Discard contribution`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1},8,[`title`])):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])])}}};var IncomingChangesPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-529cf3bd`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(IncomingChangesPanel_default,{"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main as default};