vibe64 0.1.47 → 0.1.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/bin/run.js +1657 -1631
  2. package/bin/upgrade-state.js +2547 -2500
  3. package/dist/assets/{GithubBrowserTabs-D-Z3TlA8.js → GithubBrowserTabs-_l6htLOV.js} +1 -1
  4. package/dist/assets/{LocalDatabaseServer-6VzPWZxG.js → LocalDatabaseServer-ih_gadbx.js} +1 -1
  5. package/dist/assets/{Vibe64AuthSettingsButton-TLwqAxDo.js → Vibe64AuthSettingsButton-BZsCIA2Z.js} +1 -1
  6. package/dist/assets/{Vibe64DashboardShell-B4dQ-oHD.js → Vibe64DashboardShell-DFE-2tFZ.js} +1 -1
  7. package/dist/assets/{Vibe64DatabaseWorkspace-Bh5WIPOj.js → Vibe64DatabaseWorkspace-BdvxuFPT.js} +1 -1
  8. package/dist/assets/{Vibe64OutputControls-DtybwgL3.js → Vibe64OutputControls-DsCbasR0.js} +1 -1
  9. package/dist/assets/{Vibe64RepositoryWorkspace-idDg94lc.js → Vibe64RepositoryWorkspace-CVN2HKCB.js} +1 -1
  10. package/dist/assets/{Vibe64SessionFiles-Z9zxosyl.js → Vibe64SessionFiles-DKo5wd8-.js} +2 -3
  11. package/dist/assets/{Vibe64UiStoryboardView-CrCDWMdR.js → Vibe64UiStoryboardView-BYqVdBAt.js} +1 -1
  12. package/dist/assets/{Vibe64UnavailableSessions-TqsxvGSf.js → Vibe64UnavailableSessions-CQjgoaS0.js} +1 -1
  13. package/dist/assets/{_sessionId_-7F1VGOou.js → _sessionId_-ByUkrRd7.js} +1 -1
  14. package/dist/assets/{_slug_-Bq84T_Iv.js → _slug_-hep_be7Z.js} +3 -3
  15. package/dist/assets/{access-Cx9RH95J.js → access-CWZMu-ND.js} +1 -1
  16. package/dist/assets/{app-DPx4KKOa.js → app-D_itm2S5.js} +1 -1
  17. package/dist/assets/asyncModuleRecovery-DJsn5NrL.js +1 -0
  18. package/dist/assets/{changes-DYsuQLFW.js → changes-BYuFfnEm.js} +1 -1
  19. package/dist/assets/{client-BYsDPxR3.js → client-B88Jggew.js} +1 -1
  20. package/dist/assets/client-CP2EwnrY.js +1 -0
  21. package/dist/assets/{conversation-3ln-WnbL.css → conversation-CSDHdGDb.css} +1 -1
  22. package/dist/assets/conversation-DG9lp25w.js +8 -0
  23. package/dist/assets/conversation-DL4AODd9.js +13 -0
  24. package/dist/assets/{dashboard-CWswAbYP.js → dashboard-R4qgYv8O.js} +1 -1
  25. package/dist/assets/english-definitions-CdIGswXU.js +1 -0
  26. package/dist/assets/{env-X7EOFLtl.js → env-DtkytCtq.js} +1 -1
  27. package/dist/assets/{health-C0f6s-G1.js → health-Ut9eZrbK.js} +1 -1
  28. package/dist/assets/{history-BQjETNB9.js → history-BrmvkGgi.js} +1 -1
  29. package/dist/assets/{incoming-COpY201m.js → incoming-CicEs40v.js} +1 -1
  30. package/dist/assets/{index-MWACm8Pp.css → index-B-dukXUB.css} +1 -1
  31. package/dist/assets/index-DZgCwvFD.js +136 -0
  32. package/dist/assets/{integrations-BBkvNRHu.js → integrations-QHeHC-C9.js} +10 -2
  33. package/dist/assets/issues-Ds7iAQFQ.js +1 -0
  34. package/dist/assets/{learning-B8_wHoe1.js → learning-Dq0xbg3x.js} +1 -1
  35. package/dist/assets/linkPath-Ch9eft18.js +1 -0
  36. package/dist/assets/{placement-DXvgK433.js → placement-BNmlke_j.js} +1 -1
  37. package/dist/assets/placement-DYM3JJ-F.js +1 -0
  38. package/dist/assets/{publish-CeLZE2AG.js → publish-eErG67LW.js} +1 -1
  39. package/dist/assets/pull-requests-DHLK83qZ.js +1 -0
  40. package/dist/assets/{repository-BNPt7UWc.js → repository-DWw1VFIQ.js} +1 -1
  41. package/dist/assets/{settings-lecRzZ-r.js → settings-QkwnoNn3.js} +1 -1
  42. package/dist/assets/{studioGateApi-BVdclhPL.js → studioGateApi-mkX1eOTX.js} +1 -1
  43. package/dist/assets/{studioUrls-CGKCbM_d.js → studioUrls-B0-GdWh8.js} +1 -1
  44. package/dist/assets/{useArchivedVibe64Sessions-DHYRnyJD.js → useArchivedVibe64Sessions-Biy_4sxD.js} +1 -1
  45. package/dist/assets/useCommand-DhwB5k1w.js +1 -0
  46. package/dist/assets/useEndpointResource-tVvsJvd4.js +1 -0
  47. package/dist/assets/usePaths-Y6UuQxmI.js +1 -0
  48. package/dist/assets/{useUiFeedback-B51xtCAK.js → useUiFeedback-DLUToc5y.js} +1 -1
  49. package/dist/assets/useVibe64ConversationLog-jM3KOvN7.js +1 -0
  50. package/dist/assets/{useVibe64DatabaseTools-BE_yXZFn.js → useVibe64DatabaseTools-Cac_aZnv.js} +1 -1
  51. package/dist/assets/{useVibe64ProjectScope-D7b8n1gx.js → useVibe64ProjectScope-DXjsKKhl.js} +1 -1
  52. package/dist/assets/useVibe64SessionData-FGnNvFfK.js +1 -0
  53. package/dist/assets/{useVibe64SessionSelection-CDaX4uwY.js → useVibe64SessionSelection-Bgsif-tm.js} +1 -1
  54. package/dist/assets/{useVibe64SystemGraph-CDDcsye4.js → useVibe64SystemGraph-idV9zXa9.js} +1 -1
  55. package/dist/assets/{useVibe64Terminal-Zr3Mig2L.js → useVibe64Terminal-B9EWJ9Ba.js} +2 -2
  56. package/dist/assets/vibe64ProjectScope.local-l5_-E6pq.js +1 -0
  57. package/dist/assets/{vibe64SessionFocus-DzqbVq60.js → vibe64SessionFocus-CDIB5Gpr.js} +1 -1
  58. package/dist/index.html +25 -22
  59. package/docs/colleague-usage/preview-browser-checks.md +5 -3
  60. package/node_modules/@jskit-ai/assistant-core/CHANGELOG.md +539 -0
  61. package/node_modules/@jskit-ai/assistant-core/locales/en.json +383 -0
  62. package/node_modules/@jskit-ai/assistant-core/package.json +3 -2
  63. package/node_modules/@jskit-ai/assistant-runtime/CHANGELOG.md +138 -0
  64. package/node_modules/@jskit-ai/assistant-runtime/locales/en.json +136 -0
  65. package/node_modules/@jskit-ai/assistant-runtime/package.json +3 -2
  66. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/assistantConfigRepository.js +223 -203
  67. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/conversationsRepository.js +286 -266
  68. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/messagesRepository.js +270 -250
  69. package/node_modules/@jskit-ai/assistant-voice/locales/en.json +182 -0
  70. package/node_modules/@jskit-ai/assistant-voice/package.json +3 -2
  71. package/node_modules/@jskit-ai/connector-google-calendar/CHANGELOG.md +83 -0
  72. package/node_modules/@jskit-ai/connector-google-calendar/locales/en.json +91 -0
  73. package/node_modules/@jskit-ai/connector-google-calendar/package.json +4 -3
  74. package/node_modules/@jskit-ai/connectors-catalog/CHANGELOG.md +1722 -0
  75. package/node_modules/@jskit-ai/connectors-catalog/README.md +11 -0
  76. package/node_modules/@jskit-ai/connectors-catalog/locales/en.json +3139 -0
  77. package/node_modules/@jskit-ai/connectors-catalog/package.json +5 -4
  78. package/node_modules/@jskit-ai/connectors-core/CHANGELOG.md +183 -0
  79. package/node_modules/@jskit-ai/connectors-core/locales/en.json +92 -0
  80. package/node_modules/@jskit-ai/connectors-core/package.json +3 -2
  81. package/node_modules/@jskit-ai/http-runtime/CHANGELOG.md +31 -0
  82. package/node_modules/@jskit-ai/http-runtime/locales/en.json +14 -0
  83. package/node_modules/@jskit-ai/http-runtime/package.json +3 -2
  84. package/node_modules/@jskit-ai/kernel/CHANGELOG.md +182 -0
  85. package/node_modules/@jskit-ai/kernel/locales/en.json +94 -0
  86. package/node_modules/@jskit-ai/kernel/package.json +6 -2
  87. package/node_modules/@jskit-ai/payments-core/CHANGELOG.md +128 -0
  88. package/node_modules/@jskit-ai/payments-core/locales/en.json +77 -0
  89. package/node_modules/@jskit-ai/payments-core/package.json +3 -2
  90. package/node_modules/@jskit-ai/realtime/CHANGELOG.md +20 -0
  91. package/node_modules/@jskit-ai/realtime/locales/en.json +14 -0
  92. package/node_modules/@jskit-ai/realtime/package.json +3 -2
  93. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  94. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  95. package/node_modules/@jskit-ai/uploads-runtime/CHANGELOG.md +35 -0
  96. package/node_modules/@jskit-ai/uploads-runtime/locales/en.json +15 -0
  97. package/node_modules/@jskit-ai/uploads-runtime/package.json +3 -2
  98. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +15 -14
  99. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +493 -453
  100. package/node_modules/@local/vibe64-genesis/src/server/index.js +45 -45
  101. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +119 -119
  102. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +106 -106
  103. package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +195 -175
  104. package/package.json +14 -14
  105. package/server.bundle.mjs +42147 -40883
  106. package/dist/assets/conversation-Bn7wpATa.js +0 -2
  107. package/dist/assets/conversation-CNcCrV-R.js +0 -16
  108. package/dist/assets/definitions-CEbi4qae.js +0 -1
  109. package/dist/assets/index-CBo1BEk6.js +0 -138
  110. package/dist/assets/issues-BiSiUd5o.js +0 -1
  111. package/dist/assets/placement-B5T1LR7m.js +0 -1
  112. package/dist/assets/pull-requests-pTdQOT7i.js +0 -1
  113. package/dist/assets/useCommand-Epd2yHhQ.js +0 -1
  114. package/dist/assets/useEndpointResource-DBRQISI_.js +0 -1
  115. package/dist/assets/usePaths-DdAnjVDj.js +0 -1
  116. package/dist/assets/useVibe64ConversationLog-DboM3tYN.js +0 -1
  117. package/dist/assets/useVibe64SessionData-CreWtQAO.js +0 -1
  118. package/dist/assets/vibe64ProjectScope.local-BxTBYuRg.js +0 -1
@@ -1 +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,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-DBRQISI_.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{t as VChip}from"./VChip-Uixfx461.js";import{t as VTextField}from"./VTextField-CnkGeXaT.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useCommand}from"./useCommand-Epd2yHhQ.js";import{E as previewIdentitiesQueryKey,b as VIBE64_PROJECT_CHANGED_EVENT,s as PREVIEW_IDENTITIES_ENDPOINT,y as VIBE64_PREVIEW_IDENTITIES_API_SUFFIX}from"./studioGateApi-BVdclhPL.js";import{n as useVibe64ProjectSlug}from"./useVibe64ProjectScope-D7b8n1gx.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-CPEGxBWZ.js";import{n as useVibe64SessionSelection}from"./useVibe64SessionSelection-CDaX4uwY.js";var PREVIEW_IDENTITY_SELECTOR_EMAIL=`email`;var PREVIEW_IDENTITY_SELECTOR_LOGIN=`login`;var PREVIEW_IDENTITY_SELECTOR_USER_ID=`user-id`;var PREVIEW_IDENTITY_SELECTOR_TYPES=Object.freeze([PREVIEW_IDENTITY_SELECTOR_EMAIL,PREVIEW_IDENTITY_SELECTOR_LOGIN,PREVIEW_IDENTITY_SELECTOR_USER_ID]);var _hoisted_1$1={class:`preview-identity-settings`};var _hoisted_2={class:`preview-identity-settings__header`};var _hoisted_3={class:`preview-identity-settings__header-actions`};var _hoisted_4={key:1,class:`preview-identity-settings__section`};var _hoisted_5={class:`preview-identity-settings__list`};var _hoisted_6={class:`preview-identity-settings__fields`};var _hoisted_7={class:`preview-identity-settings__identity-actions`};var _hoisted_8={key:1,class:`preview-identity-settings__empty`};var _sfc_main$1={__name:`PreviewIdentitySettings`,setup(__props){const identityTypeLabels=Object.freeze({[PREVIEW_IDENTITY_SELECTOR_EMAIL]:`Email`,[PREVIEW_IDENTITY_SELECTOR_LOGIN]:`Login name`,[PREVIEW_IDENTITY_SELECTOR_USER_ID]:`User ID`});const identityTypes=Object.freeze(PREVIEW_IDENTITY_SELECTOR_TYPES.map(value=>({label:identityTypeLabels[value],value})));const projectSlug=useVibe64ProjectSlug();const selectedSessionId=useVibe64SessionSelection({projectSlug}).selectedId;const identities=ref([]);const savedIdentities=ref([]);const resource=useEndpointResource({fallbackLoadError:`Managed app identities could not load.`,path:PREVIEW_IDENTITIES_ENDPOINT,queryKey:computed(()=>[...previewIdentitiesQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),selectedSessionId.value||`baseline`]),readQuery:computed(()=>selectedSessionId.value?{sessionId:selectedSessionId.value}:{}),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT},refreshOnPull:true,requestRecoveryLabel:`Managed app access`});const saveCommand=useCommand({access:`never`,apiSuffix:VIBE64_PREVIEW_IDENTITIES_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:PREVIEW_IDENTITIES_ENDPOINT}),buildRawPayload:(_model,{context})=>({identities:context.identities,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{}}),fallbackRunError:`Managed app identities could not be saved.`,messages:{error:`Managed app identities could not be saved.`,success:`Managed app identities saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.preview-identities.save`,surfaceId:`app`,writeMethod:`PUT`});const loading=computed(()=>resource.isLoading.value===true);const loadError=computed(()=>String(resource.loadError.value||``));const saving=computed(()=>saveCommand.isRunning===true);const changed=computed(()=>JSON.stringify(identities.value)!==JSON.stringify(savedIdentities.value));const stale=ref(false);let draftSource=``;watch(()=>[resource.data.value?.identities,projectSlug.value,selectedSessionId.value||``],([value,slug,sessionId])=>{const source=JSON.stringify([slug,sessionId]);const dirty=changed.value;const previous=JSON.stringify(savedIdentities.value);savedIdentities.value=cloneIdentities(value);const saved=JSON.stringify(savedIdentities.value);if(source!==draftSource||!dirty)resetDraft();else if(saved!==previous)stale.value=saved!==JSON.stringify(identities.value);draftSource=source},{immediate:true});function resetDraft(){identities.value=cloneIdentities(savedIdentities.value);stale.value=false}function cloneIdentities(value=[]){return(Array.isArray(value)?value:[]).map(identity=>({name:String(identity?.name||``),type:String(identity?.type||``),value:String(identity?.value||``)}))}function identityPlaceholder(type=``){return{email:`admin@example.com`,login:`admin`,"user-id":`42`}[String(type||``)]||`Application identifier`}function addIdentity(){identities.value.push({name:``,type:`email`,value:``})}function removeIdentity(index=-1){identities.value.splice(index,1)}function makeDefault(index=-1){if(index<=0||index>=identities.value.length)return;identities.value.unshift(identities.value.splice(index,1)[0])}async function refresh(){await resource.reload()}async function save(){const saved=await saveCommand.run({identities:cloneIdentities(identities.value)});await resource.reload();if(saved!==null)resetDraft()}function reloadPage(){if(typeof window!==`undefined`)window.location.reload()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$1,[createBaseVNode(`header`,_hoisted_2,[_cache[0]||(_cache[0]=createBaseVNode(`div`,null,[createBaseVNode(`h1`,{class:`text-headline-small font-weight-bold ma-0`},`Managed app access`),createBaseVNode(`p`,null,` Named existing application accounts for authenticated Preview and Playwright. The first identity is the default. `)],-1)),createBaseVNode(`div`,_hoisted_3,[createVNode(VBtn,{disabled:loading.value||saving.value,size:`small`,type:`button`,variant:`tonal`,onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,disabled:!changed.value||stale.value||loading.value||saving.value,size:`small`,type:`button`,variant:`flat`,onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?`Saving…`:`Save`),1)]),_:1},8,[`disabled`])])]),loading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:0,label:`Managed app access`,loading:loading.value,message:loadError.value||`Loading managed app identities.`,"min-height":`12rem`,onReload:reloadPage,onRetry:refresh},null,8,[`loading`,`message`])):(openBlock(),createElementBlock(`section`,_hoisted_4,[_cache[7]||(_cache[7]=createBaseVNode(`div`,{class:`preview-identity-settings__section-copy`},[createBaseVNode(`h2`,null,`Managed app identities`),createBaseVNode(`p`,null,[createTextVNode(` Saved in `),createBaseVNode(`code`,null,`.vibe64/preview-identities.json`),createTextVNode(` in the active project source, so they follow the repository. These are application identifiers, not passwords or authentication secrets. `)])],-1)),createBaseVNode(`div`,_hoisted_5,[stale.value?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`},{default:withCtx(()=>[_cache[2]||(_cache[2]=createTextVNode(` The saved identities changed while you were editing. Reload the saved identities and review your changes before saving. `,-1)),createVNode(VBtn,{variant:`text`,onClick:resetDraft},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Reload saved identities`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(identities.value,(identity,index)=>{return openBlock(),createElementBlock(`div`,{key:index,class:`preview-identity-settings__identity`},[createBaseVNode(`div`,_hoisted_6,[createVNode(VTextField,{modelValue:identity.name,"onUpdate:modelValue":$event=>identity.name=$event,autocomplete:`off`,density:`compact`,label:`Name`,placeholder:`admin`,variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`]),createVNode(VSelect,{modelValue:identity.type,"onUpdate:modelValue":$event=>identity.type=$event,density:`compact`,"item-title":`label`,"item-value":`value`,items:unref(identityTypes),label:`App identifier`,variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`,`items`]),createVNode(VTextField,{modelValue:identity.value,"onUpdate:modelValue":$event=>identity.value=$event,autocomplete:`off`,density:`compact`,label:`Application value`,placeholder:identityPlaceholder(identity.type),type:identity.type===`email`?`email`:`text`,variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`,`type`])]),createBaseVNode(`div`,_hoisted_7,[index===0?(openBlock(),createBlock(VChip,{key:0,color:`primary`,size:`small`,variant:`tonal`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Default `,-1)])]),_:1})):(openBlock(),createBlock(VBtn,{key:1,size:`small`,type:`button`,variant:`text`,onClick:$event=>makeDefault(index)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Make default `,-1)])]),_:1},8,[`onClick`])),createVNode(VBtn,{color:`error`,size:`small`,type:`button`,variant:`text`,onClick:$event=>removeIdentity(index)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Remove `,-1)])]),_:1},8,[`onClick`])])])}),128)),identities.value.length===0?(openBlock(),createElementBlock(`p`,_hoisted_8,` No managed app identities are configured. Preview remains available as a guest when the application supports it. `)):createCommentVNode(``,true),createVNode(VBtn,{class:`preview-identity-settings__add`,size:`small`,type:`button`,variant:`outlined`,onClick:addIdentity},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Add identity `,-1)])]),_:1})])]))])}}};var PreviewIdentitySettings_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-996d90f3`]]);var _hoisted_1={class:`vibe64-dashboard-page`};var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(PreviewIdentitySettings_default)])}}};var access_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-207f989d`]]);export{access_default as default};
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{D as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-tVvsJvd4.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{t as VChip}from"./VChip-Uixfx461.js";import{t as VTextField}from"./VTextField-CnkGeXaT.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as useCommand}from"./useCommand-DhwB5k1w.js";import{E as previewIdentitiesQueryKey,b as VIBE64_PROJECT_CHANGED_EVENT,s as PREVIEW_IDENTITIES_ENDPOINT,y as VIBE64_PREVIEW_IDENTITIES_API_SUFFIX}from"./studioGateApi-mkX1eOTX.js";import{n as useVibe64ProjectSlug}from"./useVibe64ProjectScope-DXjsKKhl.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-CPEGxBWZ.js";import{n as useVibe64SessionSelection}from"./useVibe64SessionSelection-Bgsif-tm.js";var PREVIEW_IDENTITY_SELECTOR_EMAIL=`email`;var PREVIEW_IDENTITY_SELECTOR_LOGIN=`login`;var PREVIEW_IDENTITY_SELECTOR_USER_ID=`user-id`;var PREVIEW_IDENTITY_SELECTOR_TYPES=Object.freeze([PREVIEW_IDENTITY_SELECTOR_EMAIL,PREVIEW_IDENTITY_SELECTOR_LOGIN,PREVIEW_IDENTITY_SELECTOR_USER_ID]);var _hoisted_1$1={class:`preview-identity-settings`};var _hoisted_2={class:`preview-identity-settings__header`};var _hoisted_3={class:`preview-identity-settings__header-actions`};var _hoisted_4={key:1,class:`preview-identity-settings__section`};var _hoisted_5={class:`preview-identity-settings__list`};var _hoisted_6={class:`preview-identity-settings__fields`};var _hoisted_7={class:`preview-identity-settings__identity-actions`};var _hoisted_8={key:1,class:`preview-identity-settings__empty`};var _sfc_main$1={__name:`PreviewIdentitySettings`,setup(__props){const identityTypeLabels=Object.freeze({[PREVIEW_IDENTITY_SELECTOR_EMAIL]:`Email`,[PREVIEW_IDENTITY_SELECTOR_LOGIN]:`Login name`,[PREVIEW_IDENTITY_SELECTOR_USER_ID]:`User ID`});const identityTypes=Object.freeze(PREVIEW_IDENTITY_SELECTOR_TYPES.map(value=>({label:identityTypeLabels[value],value})));const projectSlug=useVibe64ProjectSlug();const selectedSessionId=useVibe64SessionSelection({projectSlug}).selectedId;const identities=ref([]);const savedIdentities=ref([]);const resource=useEndpointResource({fallbackLoadError:`Managed app identities could not load.`,path:PREVIEW_IDENTITIES_ENDPOINT,queryKey:computed(()=>[...previewIdentitiesQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),selectedSessionId.value||`baseline`]),readQuery:computed(()=>selectedSessionId.value?{sessionId:selectedSessionId.value}:{}),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT},refreshOnPull:true,requestRecoveryLabel:`Managed app access`});const saveCommand=useCommand({access:`never`,apiSuffix:VIBE64_PREVIEW_IDENTITIES_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:PREVIEW_IDENTITIES_ENDPOINT}),buildRawPayload:(_model,{context})=>({identities:context.identities,...selectedSessionId.value?{sessionId:selectedSessionId.value}:{}}),fallbackRunError:`Managed app identities could not be saved.`,messages:{error:`Managed app identities could not be saved.`,success:`Managed app identities saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.preview-identities.save`,surfaceId:`app`,writeMethod:`PUT`});const loading=computed(()=>resource.isLoading.value===true);const loadError=computed(()=>String(resource.loadError.value||``));const saving=computed(()=>saveCommand.isRunning===true);const changed=computed(()=>JSON.stringify(identities.value)!==JSON.stringify(savedIdentities.value));const stale=ref(false);let draftSource=``;watch(()=>[resource.data.value?.identities,projectSlug.value,selectedSessionId.value||``],([value,slug,sessionId])=>{const source=JSON.stringify([slug,sessionId]);const dirty=changed.value;const previous=JSON.stringify(savedIdentities.value);savedIdentities.value=cloneIdentities(value);const saved=JSON.stringify(savedIdentities.value);if(source!==draftSource||!dirty)resetDraft();else if(saved!==previous)stale.value=saved!==JSON.stringify(identities.value);draftSource=source},{immediate:true});function resetDraft(){identities.value=cloneIdentities(savedIdentities.value);stale.value=false}function cloneIdentities(value=[]){return(Array.isArray(value)?value:[]).map(identity=>({name:String(identity?.name||``),type:String(identity?.type||``),value:String(identity?.value||``)}))}function identityPlaceholder(type=``){return{email:`admin@example.com`,login:`admin`,"user-id":`42`}[String(type||``)]||`Application identifier`}function addIdentity(){identities.value.push({name:``,type:`email`,value:``})}function removeIdentity(index=-1){identities.value.splice(index,1)}function makeDefault(index=-1){if(index<=0||index>=identities.value.length)return;identities.value.unshift(identities.value.splice(index,1)[0])}async function refresh(){await resource.reload()}async function save(){const saved=await saveCommand.run({identities:cloneIdentities(identities.value)});await resource.reload();if(saved!==null)resetDraft()}function reloadPage(){if(typeof window!==`undefined`)window.location.reload()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$1,[createBaseVNode(`header`,_hoisted_2,[_cache[0]||(_cache[0]=createBaseVNode(`div`,null,[createBaseVNode(`h1`,{class:`text-headline-small font-weight-bold ma-0`},`Managed app access`),createBaseVNode(`p`,null,` Named existing application accounts for authenticated Preview and Playwright. The first identity is the default. `)],-1)),createBaseVNode(`div`,_hoisted_3,[createVNode(VBtn,{disabled:loading.value||saving.value,size:`small`,type:`button`,variant:`tonal`,onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,disabled:!changed.value||stale.value||loading.value||saving.value,size:`small`,type:`button`,variant:`flat`,onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?`Saving…`:`Save`),1)]),_:1},8,[`disabled`])])]),loading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:0,label:`Managed app access`,loading:loading.value,message:loadError.value||`Loading managed app identities.`,"min-height":`12rem`,onReload:reloadPage,onRetry:refresh},null,8,[`loading`,`message`])):(openBlock(),createElementBlock(`section`,_hoisted_4,[_cache[7]||(_cache[7]=createBaseVNode(`div`,{class:`preview-identity-settings__section-copy`},[createBaseVNode(`h2`,null,`Managed app identities`),createBaseVNode(`p`,null,[createTextVNode(` Saved in `),createBaseVNode(`code`,null,`.vibe64/preview-identities.json`),createTextVNode(` in the active project source, so they follow the repository. These are application identifiers, not passwords or authentication secrets. `)])],-1)),createBaseVNode(`div`,_hoisted_5,[stale.value?(openBlock(),createBlock(VAlert,{key:0,type:`warning`,variant:`tonal`},{default:withCtx(()=>[_cache[2]||(_cache[2]=createTextVNode(` The saved identities changed while you were editing. Reload the saved identities and review your changes before saving. `,-1)),createVNode(VBtn,{variant:`text`,onClick:resetDraft},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Reload saved identities`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(identities.value,(identity,index)=>{return openBlock(),createElementBlock(`div`,{key:index,class:`preview-identity-settings__identity`},[createBaseVNode(`div`,_hoisted_6,[createVNode(VTextField,{modelValue:identity.name,"onUpdate:modelValue":$event=>identity.name=$event,autocomplete:`off`,density:`compact`,label:`Name`,placeholder:`admin`,variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`]),createVNode(VSelect,{modelValue:identity.type,"onUpdate:modelValue":$event=>identity.type=$event,density:`compact`,"item-title":`label`,"item-value":`value`,items:unref(identityTypes),label:`App identifier`,variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`,`items`]),createVNode(VTextField,{modelValue:identity.value,"onUpdate:modelValue":$event=>identity.value=$event,autocomplete:`off`,density:`compact`,label:`Application value`,placeholder:identityPlaceholder(identity.type),type:identity.type===`email`?`email`:`text`,variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`,`type`])]),createBaseVNode(`div`,_hoisted_7,[index===0?(openBlock(),createBlock(VChip,{key:0,color:`primary`,size:`small`,variant:`tonal`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Default `,-1)])]),_:1})):(openBlock(),createBlock(VBtn,{key:1,size:`small`,type:`button`,variant:`text`,onClick:$event=>makeDefault(index)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Make default `,-1)])]),_:1},8,[`onClick`])),createVNode(VBtn,{color:`error`,size:`small`,type:`button`,variant:`text`,onClick:$event=>removeIdentity(index)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(` Remove `,-1)])]),_:1},8,[`onClick`])])])}),128)),identities.value.length===0?(openBlock(),createElementBlock(`p`,_hoisted_8,` No managed app identities are configured. Preview remains available as a guest when the application supports it. `)):createCommentVNode(``,true),createVNode(VBtn,{class:`preview-identity-settings__add`,size:`small`,type:`button`,variant:`outlined`,onClick:addIdentity},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Add identity `,-1)])]),_:1})])]))])}}};var PreviewIdentitySettings_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-996d90f3`]]);var _hoisted_1={class:`vibe64-dashboard-page`};var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(PreviewIdentitySettings_default)])}}};var access_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-207f989d`]]);export{access_default as default};
@@ -1 +1 @@
1
- import{D as createVNode,E as createTextVNode,Ht as watch,_ as createBaseVNode,mt as openBlock,qt as withCtx,v as createBlock,vn as ref}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as useRouter}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.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 StudioErrorNotice_default}from"./StudioErrorNotice-DudSuU3G.js";import{v as useVibe64Learning}from"./index-CBo1BEk6.js";import{n as StudioAppShellLayout_default,t as Vibe64AuthSettingsButton_default}from"./Vibe64AuthSettingsButton-TLwqAxDo.js";import{t as route_block_default}from"./route-block-DbL-SuOj.js";var _hoisted_1={class:`vibe64-app-resolver`};var _sfc_main={__name:`index`,setup(__props){const router=useRouter();const learning=useVibe64Learning();const error=ref(``);let resolving=false;async function startedProjectPath(){const response=await globalThis.fetch(`/app`,{method:`HEAD`,credentials:`same-origin`});const path=new URL(response.url).pathname.replace(/\/+$/u,``);return path.startsWith(`/app/project/`)?path:``}async function resolve(){if(resolving)return;resolving=true;error.value=``;try{if(learning?.learnMode){await router.replace(learning.modePlace());return}const path=await startedProjectPath();if(!path)throw new Error(`This Vibe64 has no started project. Start Vibe64 in a project folder.`);await router.replace(path)}catch(cause){error.value=String(cause?.message||`Your project could not be opened. Try again.`)}finally{resolving=false}}watch(()=>!learning||learning.state.modeRead,ready=>{if(ready)resolve()},{immediate:true});return(_ctx,_cache)=>{return openBlock(),createBlock(StudioAppShellLayout_default,null,{"top-right":withCtx(()=>[createVNode(Vibe64AuthSettingsButton_default)]),default:withCtx(()=>[createBaseVNode(`section`,_hoisted_1,[error.value?(openBlock(),createBlock(StudioErrorNotice_default,{key:0,title:`Project could not open`,error:error.value,compact:``},{actions:withCtx(()=>[createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,onClick:resolve},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1},8,[`error`])):(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`article`,"aria-label":`Opening your project`}))])]),_:1})}}};if(typeof route_block_default===`function`)route_block_default(_sfc_main);var app_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-4452bfe4`]]);export{app_default as default};
1
+ import{D as createVNode,E as createTextVNode,Ht as watch,_ as createBaseVNode,mt as openBlock,qt as withCtx,v as createBlock,vn as ref}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as useRouter}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.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 StudioErrorNotice_default}from"./StudioErrorNotice-DudSuU3G.js";import{x as useVibe64Learning}from"./index-DZgCwvFD.js";import{n as StudioAppShellLayout_default,t as Vibe64AuthSettingsButton_default}from"./Vibe64AuthSettingsButton-BZsCIA2Z.js";import{t as route_block_default}from"./route-block-DbL-SuOj.js";var _hoisted_1={class:`vibe64-app-resolver`};var _sfc_main={__name:`index`,setup(__props){const router=useRouter();const learning=useVibe64Learning();const error=ref(``);let resolving=false;async function startedProjectPath(){const response=await globalThis.fetch(`/app`,{method:`HEAD`,credentials:`same-origin`});const path=new URL(response.url).pathname.replace(/\/+$/u,``);return path.startsWith(`/app/project/`)?path:``}async function resolve(){if(resolving)return;resolving=true;error.value=``;try{if(learning?.learnMode){await router.replace(learning.modePlace());return}const path=await startedProjectPath();if(!path)throw new Error(`This Vibe64 has no started project. Start Vibe64 in a project folder.`);await router.replace(path)}catch(cause){error.value=String(cause?.message||`Your project could not be opened. Try again.`)}finally{resolving=false}}watch(()=>!learning||learning.state.modeRead,ready=>{if(ready)resolve()},{immediate:true});return(_ctx,_cache)=>{return openBlock(),createBlock(StudioAppShellLayout_default,null,{"top-right":withCtx(()=>[createVNode(Vibe64AuthSettingsButton_default)]),default:withCtx(()=>[createBaseVNode(`section`,_hoisted_1,[error.value?(openBlock(),createBlock(StudioErrorNotice_default,{key:0,title:`Project could not open`,error:error.value,compact:``},{actions:withCtx(()=>[createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,onClick:resolve},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1},8,[`error`])):(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`article`,"aria-label":`Opening your project`}))])]),_:1})}}};if(typeof route_block_default===`function`)route_block_default(_sfc_main);var app_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-4452bfe4`]]);export{app_default as default};
@@ -0,0 +1 @@
1
+ import{r as isRecord}from"./normalize-BNAdWJYg.js";var DYNAMIC_IMPORT_ERROR_PATTERNS=Object.freeze([/ChunkLoadError/iu,/Failed to fetch dynamically imported module/iu,/Importing a module script failed/iu,/error loading dynamically imported module/iu,/Loading chunk .+ failed/iu,/Unable to preload CSS/iu]);function errorText(error=null){return String(error?.message||error||``).trim()}function isDynamicImportError(error=null){const text=errorText(error);return Boolean(text&&DYNAMIC_IMPORT_ERROR_PATTERNS.some(pattern=>pattern.test(text)))}var RELOAD_UNAVAILABLE=Object.freeze({message:`The app cannot reload because the app server is not reachable. Restart the server, then click Retry or Reload.`,messageCode:`kernel.moduleLoad.reloadUnavailable`});var BUILT_IN_LABEL_MESSAGE_CODES=Object.freeze({"App module":Object.freeze({stale:{messageCode:`kernel.moduleLoad.appModuleNotDownloaded`},failed:{messageCode:`kernel.moduleLoad.appModuleFailed`}}),Page:Object.freeze({stale:{messageCode:`kernel.moduleLoad.pageNotDownloaded`},failed:{messageCode:`kernel.moduleLoad.pageFailed`}})});function dynamicImportErrorMessage(error=null,{label=`App module`,stale=isDynamicImportError(error)}={}){const moduleLabel=String(label||`App module`).trim();if(stale)return`${moduleLabel} did not download. The app may have been updated, or the network request failed.`;return`${moduleLabel} could not load.`}function dynamicImportErrorMessageCode(label,stale){const builtIn=Object.hasOwn(BUILT_IN_LABEL_MESSAGE_CODES,label)?BUILT_IN_LABEL_MESSAGE_CODES[label]:null;if(builtIn)return{...stale?builtIn.stale:builtIn.failed,messageParams:{}};return stale?{messageCode:`kernel.moduleLoad.notDownloaded`,messageParams:{label}}:{messageCode:`kernel.moduleLoad.failed`,messageParams:{label}}}function createAsyncModuleRecoveryState({label=`App module`,message=``,retry=null}={}){return{attempt:0,error:null,label:String(label||`App module`).trim(),message:String(message||``).trim(),messageCode:``,messageParams:{},retry:typeof retry===`function`?retry:null,stale:false,visible:false}}function notifyAsyncModuleLoadError(state,error=null,{label=`App module`,message=``,messageCode=``,messageParams={},retry=null,stale=isDynamicImportError(error)}={}){if(!isRecord(state))throw new TypeError(`notifyAsyncModuleLoadError requires a mutable recovery state object.`);const normalizedLabel=String(label||`App module`).trim();const callerMessage=String(message||``).trim();const coded=callerMessage?{messageCode:String(messageCode||``).trim(),messageParams:isRecord(messageParams)?messageParams:{}}:dynamicImportErrorMessageCode(normalizedLabel,Boolean(stale));state.attempt=Number(state.attempt||0)+1;state.error=error||null;state.label=normalizedLabel;state.message=callerMessage||dynamicImportErrorMessage(error,{label:normalizedLabel,stale});state.messageCode=coded.messageCode;state.messageParams=coded.messageParams;state.retry=typeof retry===`function`?retry:null;state.stale=Boolean(stale);state.visible=true;return state}async function guardedReloadApp({browserWindow=typeof window!==`undefined`?window:null,fetchFn=typeof fetch===`function`?fetch:null,state=null,label=`App`,message=RELOAD_UNAVAILABLE.message,messageCode=message===RELOAD_UNAVAILABLE.message?RELOAD_UNAVAILABLE.messageCode:``,messageParams={}}={}){if(!browserWindow?.location)return false;if(typeof fetchFn!==`function`){browserWindow.location.reload();return true}try{const response=await fetchFn(String(browserWindow.location.href||`/`),{cache:`no-store`,credentials:`same-origin`,headers:{Accept:`text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`},method:`GET`});if(!response?.ok)throw new Error(`Reload check failed with HTTP ${response?.status||0}.`);browserWindow.location.reload();return true}catch(error){if(state)notifyAsyncModuleLoadError(state,error,{label,message,messageCode,messageParams,retry:state.retry,stale:false});return false}}function installAsyncModuleRecoveryHandlers({router=null,state,label=`App module`,onNotify=null,windowObject=typeof window!==`undefined`?window:null}={}){if(!isRecord(state))throw new TypeError(`installAsyncModuleRecoveryHandlers requires a mutable recovery state object.`);const disposers=[];const notify=typeof onNotify===`function`?onNotify:()=>null;if(router&&typeof router.onError===`function`){const removeRouterHandler=router.onError((error,to={})=>{if(!isDynamicImportError(error))return;const fullPath=String(to?.fullPath||``);notifyAsyncModuleLoadError(state,error,{label:`Page`,retry:fullPath&&typeof router.replace===`function`?()=>router.replace(fullPath):null,stale:true});notify(state)});if(typeof removeRouterHandler===`function`)disposers.push(removeRouterHandler)}if(windowObject&&typeof windowObject.addEventListener===`function`){const handler=event=>{const error=event?.reason;if(!isDynamicImportError(error))return;notifyAsyncModuleLoadError(state,error,{label,stale:true});notify(state)};windowObject.addEventListener(`unhandledrejection`,handler);disposers.push(()=>{windowObject.removeEventListener?.(`unhandledrejection`,handler)})}return Object.freeze({dispose(){for(const dispose of disposers.splice(0))dispose()}})}export{isDynamicImportError as a,installAsyncModuleRecoveryHandlers as i,dynamicImportErrorMessage as n,notifyAsyncModuleLoadError as o,guardedReloadApp as r,createAsyncModuleRecoveryState as t};
@@ -1 +1 @@
1
- import{mt as openBlock,v as createBlock,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as Vibe64RepositoryWorkspace_default}from"./Vibe64RepositoryWorkspace-idDg94lc.js";var _sfc_main={__name:`index`,props:{dashboardContext:{default:()=>({}),type:Object}},setup(__props){return(_ctx,_cache)=>{return __props.dashboardContext.active!==false?(openBlock(),createBlock(Vibe64RepositoryWorkspace_default,{key:0,"dashboard-context":__props.dashboardContext,view:`changes`},null,8,[`dashboard-context`])):createCommentVNode(``,true)}}};export{_sfc_main as default};
1
+ import{mt as openBlock,v as createBlock,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as Vibe64RepositoryWorkspace_default}from"./Vibe64RepositoryWorkspace-CVN2HKCB.js";var _sfc_main={__name:`index`,props:{dashboardContext:{default:()=>({}),type:Object}},setup(__props){return(_ctx,_cache)=>{return __props.dashboardContext.active!==false?(openBlock(),createBlock(Vibe64RepositoryWorkspace_default,{key:0,"dashboard-context":__props.dashboardContext,view:`changes`},null,8,[`dashboard-context`])):createCommentVNode(``,true)}}};export{_sfc_main as default};