vibe64 0.1.40 → 0.1.41

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 (67) hide show
  1. package/bin/run.js +1841 -1837
  2. package/bin/upgrade-state.js +2693 -2685
  3. package/dist/assets/{GithubBrowserTabs-BoDkGFtY.js → GithubBrowserTabs-YvIe2BdE.js} +1 -1
  4. package/dist/assets/{Vibe64AuthSettingsButton-CmiidAs5.js → Vibe64AuthSettingsButton-DLdfT68V.js} +1 -1
  5. package/dist/assets/{Vibe64DashboardShell-MCzEQCWu.js → Vibe64DashboardShell-DMPz6fIx.js} +1 -1
  6. package/dist/assets/{Vibe64DatabaseWorkspace-DM9V017v.js → Vibe64DatabaseWorkspace-BCEIOlSg.js} +1 -1
  7. package/dist/assets/{Vibe64OutputControls-CU9H0Dur.js → Vibe64OutputControls-DMoqL0VD.js} +1 -1
  8. package/dist/assets/{Vibe64RepositoryWorkspace-DaAChLA8.js → Vibe64RepositoryWorkspace-BdwRwbxp.js} +1 -1
  9. package/dist/assets/{Vibe64SessionFiles-CM2EzXBf.js → Vibe64SessionFiles-ChJWUOqm.js} +1 -1
  10. package/dist/assets/{_sessionId_-DVHd6D5V.js → _sessionId_-Bw0KfJeR.js} +1 -1
  11. package/dist/assets/_slug_-CAmuBm-M.css +1 -0
  12. package/dist/assets/_slug_-q9prK_gX.js +25 -0
  13. package/dist/assets/{access-BbzSuMt5.js → access-C05Nkq6r.js} +1 -1
  14. package/dist/assets/{app-BNh2oZg-.js → app-D1CGY9Xm.js} +1 -1
  15. package/dist/assets/{changes-D8Koqrqg.js → changes-D17XpgGz.js} +1 -1
  16. package/dist/assets/{client-CybfBKCn.js → client-BxGiylrJ.js} +1 -1
  17. package/dist/assets/{client-D6UGamrv.css → client-C8jwAMY9.css} +1 -1
  18. package/dist/assets/{dashboard-DLrmf5ed.js → dashboard-BXXgeQ0Q.js} +1 -1
  19. package/dist/assets/{definitions-DgyQJgn-.js → definitions-SNvFDEFS.js} +1 -1
  20. package/dist/assets/{env-rVQwLtYr.js → env-sXAQqKWk.js} +1 -1
  21. package/dist/assets/{health-B6r9LLrd.js → health-Cr34pf2p.js} +1 -1
  22. package/dist/assets/{history-C6xLWUxL.js → history-N1iRZaab.js} +1 -1
  23. package/dist/assets/{index-BC29JK2e.css → index-B17d4wpZ.css} +1 -1
  24. package/dist/assets/index-Mxalhei8.js +138 -0
  25. package/dist/assets/{integrations-CcrqPXxj.js → integrations-BmwFvHgZ.js} +1 -1
  26. package/dist/assets/{issues-DEjIlMdl.js → issues-BbiG7dCV.js} +1 -1
  27. package/dist/assets/{learning-BP1xvd8w.js → learning-CUCuuoHM.js} +1 -1
  28. package/dist/assets/{publish-CVXolnAG.js → publish-4r_4K5IY.js} +1 -1
  29. package/dist/assets/{publish-CPWnztCc.css → publish-BFTsAMCF.css} +1 -1
  30. package/dist/assets/{pull-requests-DdgzLzY_.js → pull-requests-DY9jg3cE.js} +1 -1
  31. package/dist/assets/{repository-5S0LzRq3.js → repository-DhXdoMP6.js} +1 -1
  32. package/dist/assets/{settings-BKP_eQ3F.js → settings-Cj4u-76p.js} +1 -1
  33. package/dist/assets/{useArchivedVibe64Sessions-D8DWpcSy.js → useArchivedVibe64Sessions-BXNg8oES.js} +1 -1
  34. package/dist/assets/{useVibe64ConversationLog-D-Vkq0sK.js → useVibe64ConversationLog-C1xjhFtS.js} +1 -1
  35. package/dist/assets/{useVibe64DatabaseTools-Dpm53ruL.js → useVibe64DatabaseTools-H6H-YJQX.js} +1 -1
  36. package/dist/assets/{useVibe64SessionData-CGJXj3r7.js → useVibe64SessionData-CnDOFFHb.js} +1 -1
  37. package/dist/assets/{useVibe64SessionSelection-BEqKR412.js → useVibe64SessionSelection-J87nJ9p5.js} +1 -1
  38. package/dist/assets/{vibe64SessionFocus-tv2wz7_H.js → vibe64SessionFocus-DlN8NwcE.js} +1 -1
  39. package/dist/index.html +5 -5
  40. package/docs/colleague-usage/ai-onboarding.md +3 -1
  41. package/docs/colleague-usage/learning-environment.md +39 -25
  42. package/docs/colleague-usage/learning-mode-ui.md +18 -9
  43. package/docs/colleague-usage/learning-practice-projects.md +2 -2
  44. package/docs/colleague-usage/learning-teacher-guide.md +2 -1
  45. package/docs/colleague-usage/learning-with-colleague.md +3 -3
  46. package/docs/colleague-usage/lesson-authoring.md +1 -1
  47. package/docs/colleague-usage/lesson-step-bar.md +38 -24
  48. package/docs/colleague-usage/preview-starting-application.md +10 -1
  49. package/docs/colleague-usage/project-setup.md +2 -2
  50. package/docs/colleague-usage/publishing.md +3 -1
  51. package/docs/colleague-usage/starter-apps.md +2 -2
  52. package/docs/training-content.md +2 -2
  53. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  54. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  55. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  56. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  57. package/node_modules/@jskit-ai/realtime/package.json +1 -1
  58. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +77 -80
  59. package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +6 -6
  60. package/node_modules/@local/vibe64-genesis/src/server/index.js +195 -194
  61. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +144 -149
  62. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +8 -7
  63. package/package.json +8 -8
  64. package/server.bundle.mjs +14269 -14252
  65. package/dist/assets/_slug_-DsfaE8Vh.js +0 -25
  66. package/dist/assets/_slug_-_qfQqdHb.css +0 -1
  67. package/dist/assets/index-B9P6KjvH.js +0 -138
@@ -1 +1 @@
1
- @layer vuetify-components{.v-file-input--hide.v-input .v-field,.v-file-input--hide.v-input .v-input__control,.v-file-input--hide.v-input .v-input__details{display:none}.v-file-input--hide.v-input .v-input__prepend{grid-area:control;margin:0 auto}.v-file-input--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-file-input .v-field__input{word-break:break-word}.v-file-input input[type=file]{opacity:0;z-index:0;width:100%;height:100%;position:absolute;top:0;left:0}.v-file-input .v-field{outline-offset:2px;outline:2px dashed #0000;transition:outline-color .25s cubic-bezier(.4,0,.2,1)}.v-file-input--dragging .v-field{outline-color:rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity))}.v-file-input--dragging input[type=file]{z-index:1}.v-file-input input[inert]{pointer-events:none}}.publish-destinations[data-v-d387eb0c]{gap:var(--v64-space-3,12px);grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));display:grid}.publish-destination[data-v-d387eb0c]{--accent:rgb(var(--v-theme-primary));background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);color:inherit;cursor:pointer;font:inherit;align-items:flex-start;gap:var(--v64-space-3,12px);padding:var(--v64-space-4,16px);text-align:left;transition:border-color .15s,background .15s,transform .15s;display:flex}.publish-destination[data-v-d387eb0c]:not(:disabled):hover,.publish-destination[data-v-d387eb0c]:focus-visible{background:color-mix(in srgb, var(--accent) 6%, var(--v64-surface-container-low));border-color:var(--accent);transform:translateY(-1px)}.publish-destination[data-v-d387eb0c]:disabled{cursor:not-allowed;background:0 0;border-style:dashed}.publish-destination:disabled .publish-destination__icon[data-v-d387eb0c],.publish-destination:disabled .publish-destination__copy[data-v-d387eb0c]>:not(.publish-destination__missing){opacity:.6}.publish-destination:disabled .publish-destination__icon[data-v-d387eb0c]{filter:grayscale()}.publish-destination--success[data-v-d387eb0c]{--accent:rgb(var(--v-theme-success))}.publish-destination--error[data-v-d387eb0c]{--accent:rgb(var(--v-theme-error))}.publish-destination--info[data-v-d387eb0c]{--accent:rgb(var(--v-theme-info))}.publish-destination__icon[data-v-d387eb0c]{background:color-mix(in srgb, var(--accent) 14%, var(--v64-surface));border-radius:var(--v64-shape-md,12px);color:var(--accent);flex:none;justify-content:center;align-items:center;width:44px;height:44px;display:inline-flex}.publish-destination__copy[data-v-d387eb0c]{gap:4px;min-width:0;display:grid}.publish-destination__copy strong[data-v-d387eb0c]{font:var(--v64-type-title-md)}.publish-destination__copy>span[data-v-d387eb0c],.publish-destination__meta[data-v-d387eb0c]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md)}.publish-destination__meta[data-v-d387eb0c]{flex-wrap:wrap;gap:4px 14px;margin-top:4px;font-size:.8125rem;display:flex}.publish-destination__missing[data-v-d387eb0c]{color:rgb(var(--v-theme-warning))!important;font-size:.8125rem!important}.publish-add-form[data-v-d387eb0c]{gap:var(--v64-space-2,8px);display:grid}.publish-add-needs[data-v-d387eb0c]{background:var(--v64-surface-container-low);border-radius:var(--v64-shape-lg,16px);margin-bottom:var(--v64-space-3,12px);padding:var(--v64-space-4,16px)}.publish-add-needs h3[data-v-d387eb0c]{font:var(--v64-type-title-md);margin:0 0 8px}.publish-add-needs ul[data-v-d387eb0c]{gap:6px;margin:0 0 8px;padding:0;list-style:none;display:grid}.publish-add-needs li[data-v-d387eb0c]{align-items:baseline;gap:8px;display:flex}.publish-add-needs li .v-icon[data-v-d387eb0c]{color:var(--v64-on-surface-variant);flex:none;transform:translateY(3px)}.publish-add-needs li.is-done .v-icon[data-v-d387eb0c]{color:rgb(var(--v-theme-success))}.publish-add-needs p[data-v-d387eb0c]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0}.publish-licence[data-v-a2740dee]{gap:10px;display:grid}.publish-licence__lead[data-v-a2740dee],.publish-licence__packages[data-v-a2740dee]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0}.publish-licence__packages[data-v-a2740dee]{font-size:.8125rem}.publish-licence__meta[data-v-a2740dee]{font:var(--v64-type-label-lg);justify-content:space-between;align-items:center;display:flex}.publish-licence__meta a[data-v-a2740dee]{color:rgb(var(--v-theme-primary))}.publish-licence__text[data-v-a2740dee]{background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-md,12px);white-space:pre-wrap;max-height:18rem;padding:12px 14px;font-family:inherit;font-size:.8125rem;line-height:1.5;overflow:auto}.publish-confirm__hero[data-v-5c444628]{background:radial-gradient(120% 140% at 50% 0%, color-mix(in srgb, rgb(var(--v-theme-primary)) 16%, transparent), transparent 70%), var(--v64-surface-container-low);border-bottom:1px solid var(--v64-outline-variant);text-align:center;justify-items:center;padding:28px 24px 20px;display:grid}.publish-confirm__badge[data-v-5c444628]{background:rgb(var(--v-theme-primary));box-shadow:0 8px 24px color-mix(in srgb, rgb(var(--v-theme-primary)) 35%, transparent);color:rgb(var(--v-theme-on-primary));border-radius:50%;justify-content:center;align-items:center;width:56px;height:56px;margin-bottom:12px;display:inline-flex}.publish-confirm__hero h2[data-v-5c444628]{font:var(--v64-type-headline-sm);margin:0 0 6px}.publish-confirm__hero p[data-v-5c444628]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);max-width:26rem;margin:0}.publish-confirm__body[data-v-5c444628]{padding:20px 24px 8px!important}.publish-confirm__meta[data-v-5c444628]{color:var(--v64-on-surface-variant);font:var(--v64-type-label-lg);flex-wrap:wrap;align-items:center;gap:6px 16px;margin-bottom:12px;display:flex}.publish-confirm__meta span[data-v-5c444628]{align-items:center;gap:4px;display:inline-flex}.publish-confirm__plan[data-v-5c444628]{margin-left:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.publish-confirm__targets[data-v-5c444628]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);margin:0;padding:0;list-style:none;overflow:hidden}.publish-confirm__targets li[data-v-5c444628]{--accent:rgb(var(--v-theme-primary));grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 16px;display:grid}.publish-confirm__targets li+li[data-v-5c444628]{border-top:1px solid var(--v64-outline-variant)}.publish-confirm__targets li.is-success[data-v-5c444628]{--accent:rgb(var(--v-theme-success))}.publish-confirm__targets li.is-error[data-v-5c444628]{--accent:rgb(var(--v-theme-error))}.publish-confirm__targets li.is-info[data-v-5c444628]{--accent:rgb(var(--v-theme-info))}.publish-confirm__targets .v-icon[data-v-5c444628]{color:var(--accent)}.publish-confirm__where[data-v-5c444628]{min-width:0;display:grid}.publish-confirm__where strong[data-v-5c444628]{font:var(--v64-type-label-lg)}.publish-confirm__where span[data-v-5c444628]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem}.publish-confirm__version[data-v-5c444628]{font:var(--v64-type-title-md);font-variant-numeric:tabular-nums}.publish-install__layout[data-v-7a3bfa13]{grid-template-columns:200px minmax(0,1fr);align-items:center;gap:20px;display:grid}.publish-install__qr[data-v-7a3bfa13]{aspect-ratio:1;border-radius:var(--v64-shape-lg,16px);box-shadow:0 0 0 1px var(--v64-outline-variant), var(--v64-elevation-1);background:#fff;justify-content:center;align-items:center;padding:10px;display:flex}.publish-install__qr.is-waiting[data-v-7a3bfa13]{background:var(--v64-surface-container-low)}.publish-install__code[data-v-7a3bfa13],.publish-install__code[data-v-7a3bfa13] svg{width:100%;height:100%;display:block}.publish-install__title[data-v-7a3bfa13]{align-items:center;gap:12px!important}.publish-install__title small[data-v-7a3bfa13]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem;display:block}.publish-install__badge[data-v-7a3bfa13]{background:var(--v64-success-container);border-radius:var(--v64-shape-md,12px);color:rgb(var(--v-theme-success));flex:none;justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex}.publish-install__here[data-v-7a3bfa13]{justify-items:start;gap:16px;margin-bottom:8px;display:grid}.publish-install__here .v-btn--block[data-v-7a3bfa13]{justify-self:stretch}.publish-install__steps[data-v-7a3bfa13]{counter-reset:step;gap:12px;margin:0;padding:0;list-style:none;display:grid}.publish-install__steps li[data-v-7a3bfa13]{color:var(--v64-on-surface-variant);counter-increment:step;font:var(--v64-type-body-md);padding-left:34px;position:relative}.publish-install__steps li[data-v-7a3bfa13]:before{background:var(--v64-success-container);color:rgb(var(--v-theme-success));content:counter(step);font:var(--v64-type-label-lg);border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;display:inline-flex;position:absolute;top:-1px;left:0}.publish-install__steps strong[data-v-7a3bfa13]{color:var(--v64-on-surface)}.publish-install__expiry[data-v-7a3bfa13]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);align-items:center;gap:6px;margin:16px 0 0;font-size:.8125rem;display:flex}@media (width<=520px){.publish-install__layout[data-v-7a3bfa13]{grid-template-columns:minmax(0,1fr);justify-items:center}.publish-install__qr[data-v-7a3bfa13]{width:min(240px,100%)}}.publish-keys[data-v-9609ce99]{gap:12px;display:grid}.publish-keys__vault[data-v-9609ce99]{background:linear-gradient(135deg, color-mix(in srgb, rgb(var(--v-theme-primary)) 10%, transparent), transparent 70%), var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);align-items:center;gap:14px;padding:16px;display:flex}.publish-keys__vault.is-open[data-v-9609ce99]{background:linear-gradient(135deg, color-mix(in srgb, rgb(var(--v-theme-success)) 12%, transparent), transparent 70%), var(--v64-surface-container-low)}.publish-keys__vault-icon[data-v-9609ce99]{background:var(--v64-primary-container);color:var(--v64-primary);border-radius:50%;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex}.is-open .publish-keys__vault-icon[data-v-9609ce99]{background:var(--v64-success-container);color:rgb(var(--v-theme-success))}.publish-keys__vault-copy[data-v-9609ce99]{flex:auto;gap:2px;display:grid}.publish-keys__vault-copy strong[data-v-9609ce99],.publish-keys__heading[data-v-9609ce99]{font:var(--v64-type-title-md)}.publish-keys__vault-copy span[data-v-9609ce99],.publish-keys__note[data-v-9609ce99],.publish-keys__list span[data-v-9609ce99],.publish-keys__kit span[data-v-9609ce99]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem}.publish-keys__note[data-v-9609ce99]{margin:0}.publish-keys__form[data-v-9609ce99]{gap:8px;display:grid}.publish-keys__inline[data-v-9609ce99]{align-items:center;gap:12px;display:flex}.publish-keys__heading[data-v-9609ce99]{align-items:center;margin:8px 0 0;display:flex}.publish-keys__list[data-v-9609ce99]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);margin:0;padding:0;list-style:none}.publish-keys__list li[data-v-9609ce99],.publish-keys__kit[data-v-9609ce99]{grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px 14px;display:grid}.publish-keys__list li[data-v-9609ce99]{grid-template-columns:22px minmax(0,1fr) auto auto;gap:4px 12px}.publish-keys__list li+li[data-v-9609ce99]{border-top:1px solid var(--v64-outline-variant)}.publish-keys__list strong[data-v-9609ce99],.publish-keys__kit strong[data-v-9609ce99]{font:var(--v64-type-label-lg);display:block}.publish-keys__list span[data-v-9609ce99],.publish-keys__kit span[data-v-9609ce99]{display:block}.publish-keys__add[data-v-9609ce99]{background:var(--v64-surface-container-low);border-radius:var(--v64-shape-lg,16px);padding:16px}.publish-keys__add-actions[data-v-9609ce99]{justify-content:flex-end;gap:8px;display:flex}.publish-keys__kit[data-v-9609ce99]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px)}.publish-keys__kit.is-stale[data-v-9609ce99]{background:color-mix(in srgb, rgb(var(--v-theme-warning)) 8%, transparent);border-color:color-mix(in srgb, rgb(var(--v-theme-warning)) 40%, var(--v64-outline-variant))}@media (width<=600px){.publish-keys__inline[data-v-9609ce99]{flex-direction:column;align-items:stretch}}.publish-kit[data-v-2e7a21ff]{gap:8px;display:grid}.publish-kit__lead[data-v-2e7a21ff]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0 0 8px}.publish-release__steps[data-v-df56d934]{align-items:center;gap:8px;padding:0 24px 8px;display:flex}.publish-release__steps button[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-label-lg);white-space:nowrap;background:0 0;border:0;border-radius:999px;align-items:center;gap:8px;padding:4px 10px 4px 4px;display:inline-flex}.publish-release__steps button span[data-v-df56d934]{background:var(--v64-surface-container-high);border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;display:inline-flex}.publish-release__steps button.is-current[data-v-df56d934]{background:var(--v64-secondary-container);color:var(--v64-on-secondary-container)}.publish-release__steps button.is-current span[data-v-df56d934]{background:rgb(var(--v-theme-primary));color:rgb(var(--v-theme-on-primary))}.publish-release__rule[data-v-df56d934]{background:var(--v64-outline-variant);flex:0 48px;min-width:12px;height:1px}.publish-release__body[data-v-df56d934]{gap:12px;display:grid;padding:12px 24px!important}.publish-release__lead[data-v-df56d934],.publish-release__muted[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0}.publish-release__bumps[data-v-df56d934]{min-width:0}.publish-release__package[data-v-df56d934]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;padding:10px 14px;display:flex}.publish-release__package-name[data-v-df56d934]{display:grid}.publish-release__package-name strong[data-v-df56d934]{font:var(--v64-type-title-md)}.publish-release__package-name span[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem}.publish-release__kind[data-v-df56d934]{letter-spacing:.04em;opacity:.7;text-transform:uppercase;margin-left:6px;font-size:.6875rem}.publish-release__baseline[data-v-df56d934]{background:var(--v64-surface-container-low);border-radius:var(--v64-shape-md,12px);font:var(--v64-type-body-md);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;display:flex}.publish-release__heading[data-v-df56d934]{font:var(--v64-type-title-md);align-items:center;gap:8px;margin:8px 0 0;display:flex}.publish-release__plan-id[data-v-df56d934]{color:var(--v64-on-surface-variant);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem}.publish-release__targets[data-v-df56d934]{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));display:grid}.publish-release__unlock[data-v-df56d934]{align-items:center;gap:12px;display:flex}.publish-release__checks[data-v-df56d934]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);margin:0;padding:0;list-style:none}.publish-release__checks li[data-v-df56d934]{grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px 14px;display:grid}.publish-release__checks li+li[data-v-df56d934]{border-top:1px solid var(--v64-outline-variant)}.publish-release__checks strong[data-v-df56d934]{font:var(--v64-type-label-lg);display:block}.publish-release__checks span[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem;display:block}.publish-release__passed[data-v-df56d934]{padding:0!important;display:block!important}.publish-release__passed button[data-v-df56d934]{color:var(--v64-on-surface-variant);cursor:pointer;font:var(--v64-type-label-lg);text-align:left;background:0 0;border:0;align-items:center;gap:12px;width:100%;padding:10px 14px;display:flex}.publish-release__passed button span[data-v-df56d934]{color:inherit!important;font:inherit!important}.publish-release__passed button em[data-v-df56d934]{color:rgb(var(--v-theme-primary));margin-left:auto;font-style:normal}.publish-release__passed button>span[data-v-df56d934]{flex:auto;display:flex!important}.publish-release__checks li.is-warning[data-v-df56d934]{background:color-mix(in srgb, rgb(var(--v-theme-warning)) 7%, transparent)}.publish-release__checks li.is-failed[data-v-df56d934]{background:color-mix(in srgb, rgb(var(--v-theme-error)) 5%, transparent)}.publish-release__plan[data-v-df56d934]{counter-reset:plan;gap:2px;margin:0;padding:0;list-style:none;display:grid}.publish-release__plan li[data-v-df56d934]{border-radius:var(--v64-shape-sm,8px);font:var(--v64-type-body-md);grid-template-columns:18px minmax(0,1fr);align-items:center;gap:10px;padding:6px 4px;display:grid}.publish-release__plan li .v-icon[data-v-df56d934]{color:var(--v64-on-surface-variant)}.publish-release__plan em[data-v-df56d934]{color:var(--v64-on-surface-variant);margin-left:8px;font-size:.8125rem;font-style:normal}.publish-release__note[data-v-df56d934]{background:var(--v64-surface-container-low);border-radius:var(--v64-shape-md,12px);color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);align-items:flex-start;gap:10px;padding:10px 14px;display:flex}.publish-release__note .v-icon[data-v-df56d934]{color:rgb(var(--v-theme-info));flex:none;margin-top:1px}.publish-release__blocked[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin-right:4px;font-size:.8125rem}.publish-release__output-toggle[data-v-df56d934]{color:rgb(var(--v-theme-primary));cursor:pointer;font:var(--v64-type-label-lg);background:0 0;border:0;margin-top:4px;padding:0}.publish-release__output[data-v-df56d934]{background:var(--v64-surface);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-sm,8px);white-space:pre-wrap;max-height:12rem;margin-top:6px;padding:8px 10px;font-size:.75rem;overflow:auto}@media (width<=600px){.publish-release__unlock[data-v-df56d934]{flex-direction:column;align-items:stretch}}.publish-history__empty[data-v-d3846248]{background:var(--v64-surface-container-low);border:1px dashed var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);text-align:center;margin:0;padding:20px}.publish-history__list[data-v-d3846248]{background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);margin:0;padding:0;list-style:none;overflow:hidden}.publish-history__list>li+li[data-v-d3846248]{border-top:1px solid var(--v64-outline-variant)}.publish-history__row[data-v-d3846248]{color:inherit;text-align:left;background:0 0;border:0;grid-template-columns:22px minmax(0,1fr) 20px;align-items:center;gap:12px;width:100%;padding:12px 16px;display:grid}.publish-history__row[data-v-d3846248]:hover{background:color-mix(in srgb, var(--v64-on-surface) 4%, transparent)}.publish-history__what[data-v-d3846248]{min-width:0;display:grid}.publish-history__what strong[data-v-d3846248]{font:var(--v64-type-label-lg);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.publish-history__what span[data-v-d3846248]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem}.publish-history__chevron[data-v-d3846248]{transition:transform .15s}.is-open .publish-history__chevron[data-v-d3846248]{transform:rotate(180deg)}.publish-history__detail[data-v-d3846248]{gap:10px;padding:4px 16px 16px 50px;display:grid}.publish-history__steps[data-v-d3846248],.publish-history__outcomes[data-v-d3846248]{gap:4px;margin:0;padding:0;list-style:none;display:grid}.publish-history__steps li[data-v-d3846248]{font:var(--v64-type-body-md);grid-template-columns:16px auto minmax(0,1fr);align-items:center;gap:8px;font-size:.8125rem;display:grid}.publish-history__message[data-v-d3846248]{color:var(--v64-on-surface-variant);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.publish-history__outcomes li[data-v-d3846248]{background:var(--v64-surface);border-radius:var(--v64-shape-sm,8px);flex-wrap:wrap;align-items:center;gap:4px 12px;padding:6px 10px;font-size:.8125rem;display:flex}.publish-history__target[data-v-d3846248]{align-items:center;gap:6px;display:inline-flex}.publish-history__proof[data-v-d3846248]{color:var(--v64-on-surface-variant);overflow-wrap:anywhere;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.publish-history__apk[data-v-d3846248]{margin-left:auto}.publish-history__error[data-v-d3846248]{color:rgb(var(--v-theme-error));font:var(--v64-type-body-md);margin:0;font-size:.8125rem}.publish-history__tools[data-v-d3846248]{gap:8px;display:flex}.publish-history__log[data-v-d3846248]{background:var(--v64-surface);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-sm,8px);white-space:pre-wrap;max-height:16rem;padding:10px 12px;font-size:.75rem;overflow:auto}.publish-history__log--failure[data-v-d3846248]{border-color:color-mix(in srgb, rgb(var(--v-theme-error)) 35%, var(--v64-outline-variant))}@media (width<=600px){.publish-history__detail[data-v-d3846248]{padding-left:16px}}.publish-target[data-v-aa617e31]{--accent:rgb(var(--v-theme-primary));background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);gap:var(--v64-space-3,12px);min-width:0;padding:var(--v64-space-4,16px);transition:border-color var(--v64-duration-short,.15s) var(--v64-ease-standard,ease), box-shadow var(--v64-duration-short,.15s) var(--v64-ease-standard,ease);flex-direction:column;display:flex;position:relative;overflow:hidden}.publish-target[data-v-aa617e31]:before{background:linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 20%, transparent));content:"";opacity:.85;height:3px;position:absolute;inset:0 0 auto}.publish-target[data-v-aa617e31]:hover{border-color:color-mix(in srgb, var(--accent) 40%, var(--v64-outline-variant));box-shadow:var(--v64-elevation-1)}.publish-target--success[data-v-aa617e31]{--accent:rgb(var(--v-theme-success))}.publish-target--error[data-v-aa617e31]{--accent:rgb(var(--v-theme-error))}.publish-target--info[data-v-aa617e31]{--accent:rgb(var(--v-theme-info))}.publish-target__head[data-v-aa617e31]{align-items:center;gap:var(--v64-space-3,12px);min-width:0;display:flex}.publish-target__icon[data-v-aa617e31]{background:color-mix(in srgb, var(--accent) 14%, var(--v64-surface));border-radius:var(--v64-shape-md,12px);color:var(--accent);flex:none;justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex}.publish-target__title[data-v-aa617e31]{flex:auto;min-width:0}.publish-target__title h3[data-v-aa617e31]{font:var(--v64-type-title-md);letter-spacing:0;margin:0}.publish-target__title p[data-v-aa617e31],.publish-target__version span[data-v-aa617e31]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.publish-target__version[data-v-aa617e31]{gap:2px;display:grid}.publish-target__version strong[data-v-aa617e31]{font:var(--v64-type-headline-sm);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.publish-target__version strong.publish-target__none[data-v-aa617e31]{color:var(--v64-on-surface-variant);font:var(--v64-type-title-md)}.publish-target.is-running[data-v-aa617e31]:before{background:linear-gradient(90deg, transparent, var(--accent), transparent);background-repeat:no-repeat;background-size:50% 100%;animation:1.4s linear infinite publish-target-sweep-aa617e31}@keyframes publish-target-sweep-aa617e31{0%{background-position:-50% 0}to{background-position:150% 0}}@media (prefers-reduced-motion:reduce){.publish-target.is-running[data-v-aa617e31]:before{animation:none}}.publish-target__pending[data-v-aa617e31]{color:rgb(var(--v-theme-primary));font:var(--v64-type-title-md)!important}.publish-target__progress[data-v-aa617e31]{margin-top:6px}.publish-target__version .publish-target__live[data-v-aa617e31]{align-items:center;gap:6px;display:inline-flex}.publish-target__live i[data-v-aa617e31]{background:rgb(var(--v-theme-success));box-shadow:0 0 0 3px color-mix(in srgb, rgb(var(--v-theme-success)) 22%, transparent);border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.publish-target__failure[data-v-aa617e31]{background:color-mix(in srgb, rgb(var(--v-theme-error)) 9%, var(--v64-surface));border:1px solid color-mix(in srgb, rgb(var(--v-theme-error)) 28%, transparent);border-radius:var(--v64-shape-md,12px);color:inherit;cursor:pointer;font:var(--v64-type-body-md);text-align:left;align-items:flex-start;gap:8px;padding:8px 10px;font-size:.8125rem;display:flex}.publish-target__failure .v-icon[data-v-aa617e31]{color:rgb(var(--v-theme-error));flex:none;margin-top:1px}.publish-target__failure span[data-v-aa617e31]{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.publish-target__failure[data-v-aa617e31]:hover,.publish-target__failure[data-v-aa617e31]:focus-visible{border-color:rgb(var(--v-theme-error))}.publish-target__verified[data-v-aa617e31]{align-items:center;gap:6px;display:flex!important}.publish-target__verified span[data-v-aa617e31]{color:var(--v64-on-surface-variant);text-overflow:ellipsis;min-width:0;overflow:hidden}.publish-target__verified-files[data-v-aa617e31]{gap:4px;min-width:0;display:grid!important}.publish-target__verified--file[data-v-aa617e31]{align-items:flex-start!important}.publish-target__file-lines[data-v-aa617e31]{min-width:0;display:grid}.publish-target__file-lines>span[data-v-aa617e31]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.publish-target__facts[data-v-aa617e31]{align-content:start;gap:6px;margin:0;display:grid}.publish-target__facts[data-v-aa617e31]>div{align-items:baseline;gap:var(--v64-space-2,8px);grid-template-columns:6.5rem minmax(0,1fr);display:grid}.publish-target__facts[data-v-aa617e31] dt{color:var(--v64-on-surface-variant);font:var(--v64-type-label-md)}.publish-target__facts[data-v-aa617e31] dd{font:var(--v64-type-body-md);text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;overflow:hidden}.publish-target__mono[data-v-aa617e31],.publish-target__facts[data-v-aa617e31] .publish-target__mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem}.publish-target__actions[data-v-aa617e31]{gap:var(--v64-space-2,8px);flex-wrap:wrap;margin-top:auto;display:flex}.publish-android-tasks[data-v-f643e832]{background:var(--v64-surface);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-md,12px);margin:0;padding:4px 0;list-style:none;display:grid}.publish-android-tasks li[data-v-f643e832]{align-items:center;gap:var(--v64-space-3,12px);grid-template-columns:20px minmax(0,1fr) auto;padding:8px 12px;display:grid}.publish-android-tasks li+li[data-v-f643e832]{border-top:1px solid var(--v64-outline-variant)}.publish-android-tasks strong[data-v-f643e832]{font:var(--v64-type-label-lg);display:block}.publish-android-tasks span[data-v-f643e832]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem;display:block}.publish-android-tasks li.is-done strong[data-v-f643e832]{color:var(--v64-on-surface-variant)}.publish-page[data-v-ce43f346]{align-content:start;gap:var(--v64-space-4,16px);width:100%;min-width:0;max-width:68rem;margin-inline:auto;display:grid}.publish-banner[data-v-ce43f346]{border-radius:var(--v64-shape-lg,16px);grid-template-columns:22px minmax(0,1fr) auto auto;align-items:center;gap:8px 14px;padding:14px 16px;display:grid}.publish-banner strong[data-v-ce43f346]{font:var(--v64-type-title-md);display:block}.publish-banner span[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);display:block}.publish-banner--ask[data-v-ce43f346]{background:var(--v64-primary-container);color:var(--v64-on-primary-container)}.publish-banner--running[data-v-ce43f346]{background:var(--v64-surface-container);border:1px solid color-mix(in srgb, rgb(var(--v-theme-primary)) 30%, var(--v64-outline-variant));grid-template-columns:22px minmax(0,1fr)}.publish-banner__spin[data-v-ce43f346]{color:rgb(var(--v-theme-primary));animation:1.6s linear infinite publish-spin-ce43f346}@keyframes publish-spin-ce43f346{to{transform:rotate(360deg)}}.publish-saved[data-v-ce43f346]{background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);grid-template-columns:auto minmax(0,1fr);gap:12px 32px;padding:14px 18px;display:grid}.publish-saved>.publish-saved__packages[data-v-ce43f346]{border-top:1px solid var(--v64-outline-variant);grid-column:1/-1;padding-top:12px}.publish-saved>div[data-v-ce43f346]{gap:4px;min-width:0;display:grid}.publish-saved__label[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-label-md);letter-spacing:.02em}.publish-saved__line[data-v-ce43f346]{font:var(--v64-type-body-md);flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.publish-saved__line code[data-v-ce43f346]{font-size:.875rem}.publish-saved__chips[data-v-ce43f346]{flex-wrap:wrap;gap:6px;display:flex}.publish-chip[data-v-ce43f346]{background:var(--v64-surface);border:1px solid var(--v64-outline-variant);font:var(--v64-type-label-lg);border-radius:999px;padding:2px 10px}.publish-chip em[data-v-ce43f346]{color:var(--v64-on-surface-variant);font-variant-numeric:tabular-nums;margin-left:4px;font-style:normal}.publish-saved__muted[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md)}.publish-targets[data-v-ce43f346]{display:grid}.publish-targets__grid[data-v-ce43f346]{gap:var(--v64-space-3,12px);grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));display:grid}.publish-targets__add[data-v-ce43f346]{border:1.5px dashed var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);color:var(--v64-on-surface-variant);cursor:pointer;font:inherit;text-align:center;background:0 0;align-content:center;justify-items:center;gap:6px;min-height:180px;padding:20px;transition:border-color .15s,background .15s,color .15s;display:grid}.publish-targets__add[data-v-ce43f346]:hover,.publish-targets__add[data-v-ce43f346]:focus-visible{background:color-mix(in srgb, rgb(var(--v-theme-primary)) 5%, transparent);border-color:rgb(var(--v-theme-primary));color:rgb(var(--v-theme-primary))}.publish-targets__add-icon[data-v-ce43f346]{background:var(--v64-surface-container-high);border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex}.publish-targets__add strong[data-v-ce43f346]{color:var(--v64-on-surface);font:var(--v64-type-title-md)}.publish-targets__add span[data-v-ce43f346]:last-child{font:var(--v64-type-body-md);max-width:16rem;font-size:.8125rem}.publish-saved__output[data-v-ce43f346]{background:var(--v64-surface);border:1px solid color-mix(in srgb, rgb(var(--v-theme-error)) 30%, var(--v64-outline-variant));border-radius:var(--v64-shape-sm,8px);white-space:pre-wrap;grid-column:1/-1;max-height:14rem;padding:10px 12px;font-size:.75rem;overflow:auto}.publish-start__meta--missing[data-v-ce43f346]{color:rgb(var(--v-theme-warning))!important}.publish-empty[data-v-ce43f346]{background:var(--v64-surface-container-low);border:1px dashed var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);text-align:center;justify-items:center;gap:8px;padding:36px 24px;display:grid}.publish-empty h2[data-v-ce43f346]{font:var(--v64-type-title-lg);margin:0}.publish-empty p[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);max-width:38rem;margin:0}.publish-empty__diagnostics[data-v-ce43f346]{color:rgb(var(--v-theme-warning));text-align:left;margin:4px 0 0;font-size:.8125rem}.publish-start[data-v-ce43f346]{gap:12px;display:grid}.publish-start__lead[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0}.publish-start__grid[data-v-ce43f346]{gap:var(--v64-space-3,12px);grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));display:grid}.publish-start__tile[data-v-ce43f346]{--accent:rgb(var(--v-theme-primary));background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);color:inherit;cursor:pointer;font:inherit;text-align:left;align-content:start;justify-items:start;gap:6px;padding:18px;transition:border-color .15s,transform .15s,box-shadow .15s;display:grid}.publish-start__tile[data-v-ce43f346]:not(:disabled):hover,.publish-start__tile[data-v-ce43f346]:focus-visible{border-color:var(--accent);box-shadow:var(--v64-elevation-1);transform:translateY(-2px)}.publish-start__tile[data-v-ce43f346]:disabled{cursor:not-allowed;background:0 0;border-style:dashed}.publish-start__tile[data-v-ce43f346]:disabled>:not(.publish-start__meta--missing){opacity:.55}.publish-start__tile:disabled .publish-start__icon[data-v-ce43f346]{filter:grayscale()}.publish-start__tile--success[data-v-ce43f346]{--accent:rgb(var(--v-theme-success))}.publish-start__tile--error[data-v-ce43f346]{--accent:rgb(var(--v-theme-error))}.publish-start__tile--info[data-v-ce43f346]{--accent:rgb(var(--v-theme-info))}.publish-start__icon[data-v-ce43f346]{background:color-mix(in srgb, var(--accent) 14%, var(--v64-surface));border-radius:var(--v64-shape-md,12px);color:var(--accent);justify-content:center;align-items:center;width:48px;height:48px;margin-bottom:6px;display:inline-flex}.publish-start__tile strong[data-v-ce43f346]{font:var(--v64-type-title-md)}.publish-start__tile>span[data-v-ce43f346]:not(.publish-start__icon){color:var(--v64-on-surface-variant);font:var(--v64-type-body-md)}.publish-start__meta[data-v-ce43f346]{align-items:center;gap:4px;margin-top:auto;font-size:.8125rem;display:inline-flex}@media (width<=760px){.publish-saved[data-v-ce43f346]{grid-template-columns:minmax(0,1fr)}.publish-banner[data-v-ce43f346]{grid-template-columns:22px minmax(0,1fr)}.publish-banner>.v-btn[data-v-ce43f346]{grid-column:2;justify-self:start}}.publish-dialog__title{font:var(--v64-type-title-lg);align-items:center;gap:4px;padding:20px 24px 8px;display:flex}.publish-dialog__actions{flex-wrap:wrap;padding:8px 20px 16px}.publish-section-title{font:var(--v64-type-title-lg);letter-spacing:0;align-items:center;gap:8px;margin:8px 0 12px;display:flex}
1
+ @layer vuetify-components{.v-file-input--hide.v-input .v-field,.v-file-input--hide.v-input .v-input__control,.v-file-input--hide.v-input .v-input__details{display:none}.v-file-input--hide.v-input .v-input__prepend{grid-area:control;margin:0 auto}.v-file-input--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-file-input--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-file-input .v-field__input{word-break:break-word}.v-file-input input[type=file]{opacity:0;z-index:0;width:100%;height:100%;position:absolute;top:0;left:0}.v-file-input .v-field{outline-offset:2px;outline:2px dashed #0000;transition:outline-color .25s cubic-bezier(.4,0,.2,1)}.v-file-input--dragging .v-field{outline-color:rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity))}.v-file-input--dragging input[type=file]{z-index:1}.v-file-input input[inert]{pointer-events:none}}.publish-destinations[data-v-d387eb0c]{gap:var(--v64-space-3,12px);grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));display:grid}.publish-destination[data-v-d387eb0c]{--accent:rgb(var(--v-theme-primary));background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);color:inherit;cursor:pointer;font:inherit;align-items:flex-start;gap:var(--v64-space-3,12px);padding:var(--v64-space-4,16px);text-align:left;transition:border-color .15s,background .15s,transform .15s;display:flex}.publish-destination[data-v-d387eb0c]:not(:disabled):hover,.publish-destination[data-v-d387eb0c]:focus-visible{background:color-mix(in srgb, var(--accent) 6%, var(--v64-surface-container-low));border-color:var(--accent);transform:translateY(-1px)}.publish-destination[data-v-d387eb0c]:disabled{cursor:not-allowed;background:0 0;border-style:dashed}.publish-destination:disabled .publish-destination__icon[data-v-d387eb0c],.publish-destination:disabled .publish-destination__copy[data-v-d387eb0c]>:not(.publish-destination__missing){opacity:.6}.publish-destination:disabled .publish-destination__icon[data-v-d387eb0c]{filter:grayscale()}.publish-destination--success[data-v-d387eb0c]{--accent:rgb(var(--v-theme-success))}.publish-destination--error[data-v-d387eb0c]{--accent:rgb(var(--v-theme-error))}.publish-destination--info[data-v-d387eb0c]{--accent:rgb(var(--v-theme-info))}.publish-destination__icon[data-v-d387eb0c]{background:color-mix(in srgb, var(--accent) 14%, var(--v64-surface));border-radius:var(--v64-shape-md,12px);color:var(--accent);flex:none;justify-content:center;align-items:center;width:44px;height:44px;display:inline-flex}.publish-destination__copy[data-v-d387eb0c]{gap:4px;min-width:0;display:grid}.publish-destination__copy strong[data-v-d387eb0c]{font:var(--v64-type-title-md)}.publish-destination__copy>span[data-v-d387eb0c],.publish-destination__meta[data-v-d387eb0c]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md)}.publish-destination__meta[data-v-d387eb0c]{flex-wrap:wrap;gap:4px 14px;margin-top:4px;font-size:.8125rem;display:flex}.publish-destination__missing[data-v-d387eb0c]{color:rgb(var(--v-theme-warning))!important;font-size:.8125rem!important}.publish-add-form[data-v-d387eb0c]{gap:var(--v64-space-2,8px);display:grid}.publish-add-needs[data-v-d387eb0c]{background:var(--v64-surface-container-low);border-radius:var(--v64-shape-lg,16px);margin-bottom:var(--v64-space-3,12px);padding:var(--v64-space-4,16px)}.publish-add-needs h3[data-v-d387eb0c]{font:var(--v64-type-title-md);margin:0 0 8px}.publish-add-needs ul[data-v-d387eb0c]{gap:6px;margin:0 0 8px;padding:0;list-style:none;display:grid}.publish-add-needs li[data-v-d387eb0c]{align-items:baseline;gap:8px;display:flex}.publish-add-needs li .v-icon[data-v-d387eb0c]{color:var(--v64-on-surface-variant);flex:none;transform:translateY(3px)}.publish-add-needs li.is-done .v-icon[data-v-d387eb0c]{color:rgb(var(--v-theme-success))}.publish-add-needs p[data-v-d387eb0c]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0}.publish-licence[data-v-a2740dee]{gap:10px;display:grid}.publish-licence__lead[data-v-a2740dee],.publish-licence__packages[data-v-a2740dee]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0}.publish-licence__packages[data-v-a2740dee]{font-size:.8125rem}.publish-licence__meta[data-v-a2740dee]{font:var(--v64-type-label-lg);justify-content:space-between;align-items:center;display:flex}.publish-licence__meta a[data-v-a2740dee]{color:rgb(var(--v-theme-primary))}.publish-licence__text[data-v-a2740dee]{background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-md,12px);white-space:pre-wrap;max-height:18rem;padding:12px 14px;font-family:inherit;font-size:.8125rem;line-height:1.5;overflow:auto}.publish-confirm__hero[data-v-5c444628]{background:radial-gradient(120% 140% at 50% 0%, color-mix(in srgb, rgb(var(--v-theme-primary)) 16%, transparent), transparent 70%), var(--v64-surface-container-low);border-bottom:1px solid var(--v64-outline-variant);text-align:center;justify-items:center;padding:28px 24px 20px;display:grid}.publish-confirm__badge[data-v-5c444628]{background:rgb(var(--v-theme-primary));box-shadow:0 8px 24px color-mix(in srgb, rgb(var(--v-theme-primary)) 35%, transparent);color:rgb(var(--v-theme-on-primary));border-radius:50%;justify-content:center;align-items:center;width:56px;height:56px;margin-bottom:12px;display:inline-flex}.publish-confirm__hero h2[data-v-5c444628]{font:var(--v64-type-headline-sm);margin:0 0 6px}.publish-confirm__hero p[data-v-5c444628]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);max-width:26rem;margin:0}.publish-confirm__body[data-v-5c444628]{padding:20px 24px 8px!important}.publish-confirm__meta[data-v-5c444628]{color:var(--v64-on-surface-variant);font:var(--v64-type-label-lg);flex-wrap:wrap;align-items:center;gap:6px 16px;margin-bottom:12px;display:flex}.publish-confirm__meta span[data-v-5c444628]{align-items:center;gap:4px;display:inline-flex}.publish-confirm__plan[data-v-5c444628]{margin-left:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.publish-confirm__targets[data-v-5c444628]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);margin:0;padding:0;list-style:none;overflow:hidden}.publish-confirm__targets li[data-v-5c444628]{--accent:rgb(var(--v-theme-primary));grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 16px;display:grid}.publish-confirm__targets li+li[data-v-5c444628]{border-top:1px solid var(--v64-outline-variant)}.publish-confirm__targets li.is-success[data-v-5c444628]{--accent:rgb(var(--v-theme-success))}.publish-confirm__targets li.is-error[data-v-5c444628]{--accent:rgb(var(--v-theme-error))}.publish-confirm__targets li.is-info[data-v-5c444628]{--accent:rgb(var(--v-theme-info))}.publish-confirm__targets .v-icon[data-v-5c444628]{color:var(--accent)}.publish-confirm__where[data-v-5c444628]{min-width:0;display:grid}.publish-confirm__where strong[data-v-5c444628]{font:var(--v64-type-label-lg)}.publish-confirm__where span[data-v-5c444628]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem}.publish-confirm__version[data-v-5c444628]{font:var(--v64-type-title-md);font-variant-numeric:tabular-nums}.publish-install__layout[data-v-7a3bfa13]{grid-template-columns:200px minmax(0,1fr);align-items:center;gap:20px;display:grid}.publish-install__qr[data-v-7a3bfa13]{aspect-ratio:1;border-radius:var(--v64-shape-lg,16px);box-shadow:0 0 0 1px var(--v64-outline-variant), var(--v64-elevation-1);background:#fff;justify-content:center;align-items:center;padding:10px;display:flex}.publish-install__qr.is-waiting[data-v-7a3bfa13]{background:var(--v64-surface-container-low)}.publish-install__code[data-v-7a3bfa13],.publish-install__code[data-v-7a3bfa13] svg{width:100%;height:100%;display:block}.publish-install__title[data-v-7a3bfa13]{align-items:center;gap:12px!important}.publish-install__title small[data-v-7a3bfa13]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem;display:block}.publish-install__badge[data-v-7a3bfa13]{background:var(--v64-success-container);border-radius:var(--v64-shape-md,12px);color:rgb(var(--v-theme-success));flex:none;justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex}.publish-install__here[data-v-7a3bfa13]{justify-items:start;gap:16px;margin-bottom:8px;display:grid}.publish-install__here .v-btn--block[data-v-7a3bfa13]{justify-self:stretch}.publish-install__steps[data-v-7a3bfa13]{counter-reset:step;gap:12px;margin:0;padding:0;list-style:none;display:grid}.publish-install__steps li[data-v-7a3bfa13]{color:var(--v64-on-surface-variant);counter-increment:step;font:var(--v64-type-body-md);padding-left:34px;position:relative}.publish-install__steps li[data-v-7a3bfa13]:before{background:var(--v64-success-container);color:rgb(var(--v-theme-success));content:counter(step);font:var(--v64-type-label-lg);border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;display:inline-flex;position:absolute;top:-1px;left:0}.publish-install__steps strong[data-v-7a3bfa13]{color:var(--v64-on-surface)}.publish-install__expiry[data-v-7a3bfa13]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);align-items:center;gap:6px;margin:16px 0 0;font-size:.8125rem;display:flex}@media (width<=520px){.publish-install__layout[data-v-7a3bfa13]{grid-template-columns:minmax(0,1fr);justify-items:center}.publish-install__qr[data-v-7a3bfa13]{width:min(240px,100%)}}.publish-keys[data-v-2e47370e]{gap:12px;display:grid}.publish-keys__vault[data-v-2e47370e]{background:linear-gradient(135deg, color-mix(in srgb, rgb(var(--v-theme-primary)) 10%, transparent), transparent 70%), var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);align-items:center;gap:14px;padding:16px;display:flex}.publish-keys__vault.is-open[data-v-2e47370e]{background:linear-gradient(135deg, color-mix(in srgb, rgb(var(--v-theme-success)) 12%, transparent), transparent 70%), var(--v64-surface-container-low)}.publish-keys__vault-icon[data-v-2e47370e]{background:var(--v64-primary-container);color:var(--v64-primary);border-radius:50%;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex}.is-open .publish-keys__vault-icon[data-v-2e47370e]{background:var(--v64-success-container);color:rgb(var(--v-theme-success))}.publish-keys__vault-copy[data-v-2e47370e]{flex:auto;gap:2px;display:grid}.publish-keys__vault-copy strong[data-v-2e47370e],.publish-keys__heading[data-v-2e47370e]{font:var(--v64-type-title-md)}.publish-keys__vault-copy span[data-v-2e47370e],.publish-keys__note[data-v-2e47370e],.publish-keys__list span[data-v-2e47370e],.publish-keys__kit span[data-v-2e47370e]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem}.publish-keys__note[data-v-2e47370e]{margin:0}.publish-keys__form[data-v-2e47370e]{gap:8px;display:grid}.publish-keys__inline[data-v-2e47370e]{align-items:center;gap:12px;display:flex}.publish-keys__heading[data-v-2e47370e]{align-items:center;margin:8px 0 0;display:flex}.publish-keys__list[data-v-2e47370e]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);margin:0;padding:0;list-style:none}.publish-keys__list li[data-v-2e47370e],.publish-keys__kit[data-v-2e47370e]{grid-template-columns:22px minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px 14px;display:grid}.publish-keys__list li[data-v-2e47370e]{grid-template-columns:22px minmax(0,1fr) auto auto;gap:4px 12px}.publish-keys__list li+li[data-v-2e47370e]{border-top:1px solid var(--v64-outline-variant)}.publish-keys__list strong[data-v-2e47370e],.publish-keys__kit strong[data-v-2e47370e]{font:var(--v64-type-label-lg);display:block}.publish-keys__list span[data-v-2e47370e],.publish-keys__kit span[data-v-2e47370e]{display:block}.publish-keys__add[data-v-2e47370e]{background:var(--v64-surface-container-low);border-radius:var(--v64-shape-lg,16px);padding:16px}.publish-keys__add-actions[data-v-2e47370e]{justify-content:flex-end;gap:8px;display:flex}.publish-keys__kit[data-v-2e47370e]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px)}.publish-keys__kit.is-stale[data-v-2e47370e]{background:color-mix(in srgb, rgb(var(--v-theme-warning)) 8%, transparent);border-color:color-mix(in srgb, rgb(var(--v-theme-warning)) 40%, var(--v64-outline-variant))}@media (width<=600px){.publish-keys__inline[data-v-2e47370e]{flex-direction:column;align-items:stretch}}.publish-kit[data-v-14fb34ce]{gap:8px;display:grid}.publish-kit__lead[data-v-14fb34ce]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0 0 8px}.publish-release__steps[data-v-df56d934]{align-items:center;gap:8px;padding:0 24px 8px;display:flex}.publish-release__steps button[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-label-lg);white-space:nowrap;background:0 0;border:0;border-radius:999px;align-items:center;gap:8px;padding:4px 10px 4px 4px;display:inline-flex}.publish-release__steps button span[data-v-df56d934]{background:var(--v64-surface-container-high);border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;display:inline-flex}.publish-release__steps button.is-current[data-v-df56d934]{background:var(--v64-secondary-container);color:var(--v64-on-secondary-container)}.publish-release__steps button.is-current span[data-v-df56d934]{background:rgb(var(--v-theme-primary));color:rgb(var(--v-theme-on-primary))}.publish-release__rule[data-v-df56d934]{background:var(--v64-outline-variant);flex:0 48px;min-width:12px;height:1px}.publish-release__body[data-v-df56d934]{gap:12px;display:grid;padding:12px 24px!important}.publish-release__lead[data-v-df56d934],.publish-release__muted[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0}.publish-release__bumps[data-v-df56d934]{min-width:0}.publish-release__package[data-v-df56d934]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;padding:10px 14px;display:flex}.publish-release__package-name[data-v-df56d934]{display:grid}.publish-release__package-name strong[data-v-df56d934]{font:var(--v64-type-title-md)}.publish-release__package-name span[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem}.publish-release__kind[data-v-df56d934]{letter-spacing:.04em;opacity:.7;text-transform:uppercase;margin-left:6px;font-size:.6875rem}.publish-release__baseline[data-v-df56d934]{background:var(--v64-surface-container-low);border-radius:var(--v64-shape-md,12px);font:var(--v64-type-body-md);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;display:flex}.publish-release__heading[data-v-df56d934]{font:var(--v64-type-title-md);align-items:center;gap:8px;margin:8px 0 0;display:flex}.publish-release__plan-id[data-v-df56d934]{color:var(--v64-on-surface-variant);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem}.publish-release__targets[data-v-df56d934]{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));display:grid}.publish-release__unlock[data-v-df56d934]{align-items:center;gap:12px;display:flex}.publish-release__checks[data-v-df56d934]{border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);margin:0;padding:0;list-style:none}.publish-release__checks li[data-v-df56d934]{grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:12px;padding:10px 14px;display:grid}.publish-release__checks li+li[data-v-df56d934]{border-top:1px solid var(--v64-outline-variant)}.publish-release__checks strong[data-v-df56d934]{font:var(--v64-type-label-lg);display:block}.publish-release__checks span[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem;display:block}.publish-release__passed[data-v-df56d934]{padding:0!important;display:block!important}.publish-release__passed button[data-v-df56d934]{color:var(--v64-on-surface-variant);cursor:pointer;font:var(--v64-type-label-lg);text-align:left;background:0 0;border:0;align-items:center;gap:12px;width:100%;padding:10px 14px;display:flex}.publish-release__passed button span[data-v-df56d934]{color:inherit!important;font:inherit!important}.publish-release__passed button em[data-v-df56d934]{color:rgb(var(--v-theme-primary));margin-left:auto;font-style:normal}.publish-release__passed button>span[data-v-df56d934]{flex:auto;display:flex!important}.publish-release__checks li.is-warning[data-v-df56d934]{background:color-mix(in srgb, rgb(var(--v-theme-warning)) 7%, transparent)}.publish-release__checks li.is-failed[data-v-df56d934]{background:color-mix(in srgb, rgb(var(--v-theme-error)) 5%, transparent)}.publish-release__plan[data-v-df56d934]{counter-reset:plan;gap:2px;margin:0;padding:0;list-style:none;display:grid}.publish-release__plan li[data-v-df56d934]{border-radius:var(--v64-shape-sm,8px);font:var(--v64-type-body-md);grid-template-columns:18px minmax(0,1fr);align-items:center;gap:10px;padding:6px 4px;display:grid}.publish-release__plan li .v-icon[data-v-df56d934]{color:var(--v64-on-surface-variant)}.publish-release__plan em[data-v-df56d934]{color:var(--v64-on-surface-variant);margin-left:8px;font-size:.8125rem;font-style:normal}.publish-release__note[data-v-df56d934]{background:var(--v64-surface-container-low);border-radius:var(--v64-shape-md,12px);color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);align-items:flex-start;gap:10px;padding:10px 14px;display:flex}.publish-release__note .v-icon[data-v-df56d934]{color:rgb(var(--v-theme-info));flex:none;margin-top:1px}.publish-release__blocked[data-v-df56d934]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin-right:4px;font-size:.8125rem}.publish-release__output-toggle[data-v-df56d934]{color:rgb(var(--v-theme-primary));cursor:pointer;font:var(--v64-type-label-lg);background:0 0;border:0;margin-top:4px;padding:0}.publish-release__output[data-v-df56d934]{background:var(--v64-surface);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-sm,8px);white-space:pre-wrap;max-height:12rem;margin-top:6px;padding:8px 10px;font-size:.75rem;overflow:auto}@media (width<=600px){.publish-release__unlock[data-v-df56d934]{flex-direction:column;align-items:stretch}}.publish-history__empty[data-v-d3846248]{background:var(--v64-surface-container-low);border:1px dashed var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);text-align:center;margin:0;padding:20px}.publish-history__list[data-v-d3846248]{background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);margin:0;padding:0;list-style:none;overflow:hidden}.publish-history__list>li+li[data-v-d3846248]{border-top:1px solid var(--v64-outline-variant)}.publish-history__row[data-v-d3846248]{color:inherit;text-align:left;background:0 0;border:0;grid-template-columns:22px minmax(0,1fr) 20px;align-items:center;gap:12px;width:100%;padding:12px 16px;display:grid}.publish-history__row[data-v-d3846248]:hover{background:color-mix(in srgb, var(--v64-on-surface) 4%, transparent)}.publish-history__what[data-v-d3846248]{min-width:0;display:grid}.publish-history__what strong[data-v-d3846248]{font:var(--v64-type-label-lg);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.publish-history__what span[data-v-d3846248]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem}.publish-history__chevron[data-v-d3846248]{transition:transform .15s}.is-open .publish-history__chevron[data-v-d3846248]{transform:rotate(180deg)}.publish-history__detail[data-v-d3846248]{gap:10px;padding:4px 16px 16px 50px;display:grid}.publish-history__steps[data-v-d3846248],.publish-history__outcomes[data-v-d3846248]{gap:4px;margin:0;padding:0;list-style:none;display:grid}.publish-history__steps li[data-v-d3846248]{font:var(--v64-type-body-md);grid-template-columns:16px auto minmax(0,1fr);align-items:center;gap:8px;font-size:.8125rem;display:grid}.publish-history__message[data-v-d3846248]{color:var(--v64-on-surface-variant);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.publish-history__outcomes li[data-v-d3846248]{background:var(--v64-surface);border-radius:var(--v64-shape-sm,8px);flex-wrap:wrap;align-items:center;gap:4px 12px;padding:6px 10px;font-size:.8125rem;display:flex}.publish-history__target[data-v-d3846248]{align-items:center;gap:6px;display:inline-flex}.publish-history__proof[data-v-d3846248]{color:var(--v64-on-surface-variant);overflow-wrap:anywhere;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.publish-history__apk[data-v-d3846248]{margin-left:auto}.publish-history__error[data-v-d3846248]{color:rgb(var(--v-theme-error));font:var(--v64-type-body-md);margin:0;font-size:.8125rem}.publish-history__tools[data-v-d3846248]{gap:8px;display:flex}.publish-history__log[data-v-d3846248]{background:var(--v64-surface);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-sm,8px);white-space:pre-wrap;max-height:16rem;padding:10px 12px;font-size:.75rem;overflow:auto}.publish-history__log--failure[data-v-d3846248]{border-color:color-mix(in srgb, rgb(var(--v-theme-error)) 35%, var(--v64-outline-variant))}@media (width<=600px){.publish-history__detail[data-v-d3846248]{padding-left:16px}}.publish-target[data-v-aa617e31]{--accent:rgb(var(--v-theme-primary));background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);gap:var(--v64-space-3,12px);min-width:0;padding:var(--v64-space-4,16px);transition:border-color var(--v64-duration-short,.15s) var(--v64-ease-standard,ease), box-shadow var(--v64-duration-short,.15s) var(--v64-ease-standard,ease);flex-direction:column;display:flex;position:relative;overflow:hidden}.publish-target[data-v-aa617e31]:before{background:linear-gradient(90deg, var(--accent), color-mix(in srgb, var(--accent) 20%, transparent));content:"";opacity:.85;height:3px;position:absolute;inset:0 0 auto}.publish-target[data-v-aa617e31]:hover{border-color:color-mix(in srgb, var(--accent) 40%, var(--v64-outline-variant));box-shadow:var(--v64-elevation-1)}.publish-target--success[data-v-aa617e31]{--accent:rgb(var(--v-theme-success))}.publish-target--error[data-v-aa617e31]{--accent:rgb(var(--v-theme-error))}.publish-target--info[data-v-aa617e31]{--accent:rgb(var(--v-theme-info))}.publish-target__head[data-v-aa617e31]{align-items:center;gap:var(--v64-space-3,12px);min-width:0;display:flex}.publish-target__icon[data-v-aa617e31]{background:color-mix(in srgb, var(--accent) 14%, var(--v64-surface));border-radius:var(--v64-shape-md,12px);color:var(--accent);flex:none;justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex}.publish-target__title[data-v-aa617e31]{flex:auto;min-width:0}.publish-target__title h3[data-v-aa617e31]{font:var(--v64-type-title-md);letter-spacing:0;margin:0}.publish-target__title p[data-v-aa617e31],.publish-target__version span[data-v-aa617e31]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.publish-target__version[data-v-aa617e31]{gap:2px;display:grid}.publish-target__version strong[data-v-aa617e31]{font:var(--v64-type-headline-sm);font-variant-numeric:tabular-nums;letter-spacing:-.01em}.publish-target__version strong.publish-target__none[data-v-aa617e31]{color:var(--v64-on-surface-variant);font:var(--v64-type-title-md)}.publish-target.is-running[data-v-aa617e31]:before{background:linear-gradient(90deg, transparent, var(--accent), transparent);background-repeat:no-repeat;background-size:50% 100%;animation:1.4s linear infinite publish-target-sweep-aa617e31}@keyframes publish-target-sweep-aa617e31{0%{background-position:-50% 0}to{background-position:150% 0}}@media (prefers-reduced-motion:reduce){.publish-target.is-running[data-v-aa617e31]:before{animation:none}}.publish-target__pending[data-v-aa617e31]{color:rgb(var(--v-theme-primary));font:var(--v64-type-title-md)!important}.publish-target__progress[data-v-aa617e31]{margin-top:6px}.publish-target__version .publish-target__live[data-v-aa617e31]{align-items:center;gap:6px;display:inline-flex}.publish-target__live i[data-v-aa617e31]{background:rgb(var(--v-theme-success));box-shadow:0 0 0 3px color-mix(in srgb, rgb(var(--v-theme-success)) 22%, transparent);border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.publish-target__failure[data-v-aa617e31]{background:color-mix(in srgb, rgb(var(--v-theme-error)) 9%, var(--v64-surface));border:1px solid color-mix(in srgb, rgb(var(--v-theme-error)) 28%, transparent);border-radius:var(--v64-shape-md,12px);color:inherit;cursor:pointer;font:var(--v64-type-body-md);text-align:left;align-items:flex-start;gap:8px;padding:8px 10px;font-size:.8125rem;display:flex}.publish-target__failure .v-icon[data-v-aa617e31]{color:rgb(var(--v-theme-error));flex:none;margin-top:1px}.publish-target__failure span[data-v-aa617e31]{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.publish-target__failure[data-v-aa617e31]:hover,.publish-target__failure[data-v-aa617e31]:focus-visible{border-color:rgb(var(--v-theme-error))}.publish-target__verified[data-v-aa617e31]{align-items:center;gap:6px;display:flex!important}.publish-target__verified span[data-v-aa617e31]{color:var(--v64-on-surface-variant);text-overflow:ellipsis;min-width:0;overflow:hidden}.publish-target__verified-files[data-v-aa617e31]{gap:4px;min-width:0;display:grid!important}.publish-target__verified--file[data-v-aa617e31]{align-items:flex-start!important}.publish-target__file-lines[data-v-aa617e31]{min-width:0;display:grid}.publish-target__file-lines>span[data-v-aa617e31]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.publish-target__facts[data-v-aa617e31]{align-content:start;gap:6px;margin:0;display:grid}.publish-target__facts[data-v-aa617e31]>div{align-items:baseline;gap:var(--v64-space-2,8px);grid-template-columns:6.5rem minmax(0,1fr);display:grid}.publish-target__facts[data-v-aa617e31] dt{color:var(--v64-on-surface-variant);font:var(--v64-type-label-md)}.publish-target__facts[data-v-aa617e31] dd{font:var(--v64-type-body-md);text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0;overflow:hidden}.publish-target__mono[data-v-aa617e31],.publish-target__facts[data-v-aa617e31] .publish-target__mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8125rem}.publish-target__actions[data-v-aa617e31]{gap:var(--v64-space-2,8px);flex-wrap:wrap;margin-top:auto;display:flex}.publish-android-tasks[data-v-f643e832]{background:var(--v64-surface);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-md,12px);margin:0;padding:4px 0;list-style:none;display:grid}.publish-android-tasks li[data-v-f643e832]{align-items:center;gap:var(--v64-space-3,12px);grid-template-columns:20px minmax(0,1fr) auto;padding:8px 12px;display:grid}.publish-android-tasks li+li[data-v-f643e832]{border-top:1px solid var(--v64-outline-variant)}.publish-android-tasks strong[data-v-f643e832]{font:var(--v64-type-label-lg);display:block}.publish-android-tasks span[data-v-f643e832]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);font-size:.8125rem;display:block}.publish-android-tasks li.is-done strong[data-v-f643e832]{color:var(--v64-on-surface-variant)}.publish-page[data-v-ce43f346]{align-content:start;gap:var(--v64-space-4,16px);width:100%;min-width:0;max-width:68rem;margin-inline:auto;display:grid}.publish-banner[data-v-ce43f346]{border-radius:var(--v64-shape-lg,16px);grid-template-columns:22px minmax(0,1fr) auto auto;align-items:center;gap:8px 14px;padding:14px 16px;display:grid}.publish-banner strong[data-v-ce43f346]{font:var(--v64-type-title-md);display:block}.publish-banner span[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);display:block}.publish-banner--ask[data-v-ce43f346]{background:var(--v64-primary-container);color:var(--v64-on-primary-container)}.publish-banner--running[data-v-ce43f346]{background:var(--v64-surface-container);border:1px solid color-mix(in srgb, rgb(var(--v-theme-primary)) 30%, var(--v64-outline-variant));grid-template-columns:22px minmax(0,1fr)}.publish-banner__spin[data-v-ce43f346]{color:rgb(var(--v-theme-primary));animation:1.6s linear infinite publish-spin-ce43f346}@keyframes publish-spin-ce43f346{to{transform:rotate(360deg)}}.publish-saved[data-v-ce43f346]{background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);grid-template-columns:auto minmax(0,1fr);gap:12px 32px;padding:14px 18px;display:grid}.publish-saved>.publish-saved__packages[data-v-ce43f346]{border-top:1px solid var(--v64-outline-variant);grid-column:1/-1;padding-top:12px}.publish-saved>div[data-v-ce43f346]{gap:4px;min-width:0;display:grid}.publish-saved__label[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-label-md);letter-spacing:.02em}.publish-saved__line[data-v-ce43f346]{font:var(--v64-type-body-md);flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.publish-saved__line code[data-v-ce43f346]{font-size:.875rem}.publish-saved__chips[data-v-ce43f346]{flex-wrap:wrap;gap:6px;display:flex}.publish-chip[data-v-ce43f346]{background:var(--v64-surface);border:1px solid var(--v64-outline-variant);font:var(--v64-type-label-lg);border-radius:999px;padding:2px 10px}.publish-chip em[data-v-ce43f346]{color:var(--v64-on-surface-variant);font-variant-numeric:tabular-nums;margin-left:4px;font-style:normal}.publish-saved__muted[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md)}.publish-targets[data-v-ce43f346]{display:grid}.publish-targets__grid[data-v-ce43f346]{gap:var(--v64-space-3,12px);grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));display:grid}.publish-targets__add[data-v-ce43f346]{border:1.5px dashed var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);color:var(--v64-on-surface-variant);cursor:pointer;font:inherit;text-align:center;background:0 0;align-content:center;justify-items:center;gap:6px;min-height:180px;padding:20px;transition:border-color .15s,background .15s,color .15s;display:grid}.publish-targets__add[data-v-ce43f346]:hover,.publish-targets__add[data-v-ce43f346]:focus-visible{background:color-mix(in srgb, rgb(var(--v-theme-primary)) 5%, transparent);border-color:rgb(var(--v-theme-primary));color:rgb(var(--v-theme-primary))}.publish-targets__add-icon[data-v-ce43f346]{background:var(--v64-surface-container-high);border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex}.publish-targets__add strong[data-v-ce43f346]{color:var(--v64-on-surface);font:var(--v64-type-title-md)}.publish-targets__add span[data-v-ce43f346]:last-child{font:var(--v64-type-body-md);max-width:16rem;font-size:.8125rem}.publish-saved__output[data-v-ce43f346]{background:var(--v64-surface);border:1px solid color-mix(in srgb, rgb(var(--v-theme-error)) 30%, var(--v64-outline-variant));border-radius:var(--v64-shape-sm,8px);white-space:pre-wrap;grid-column:1/-1;max-height:14rem;padding:10px 12px;font-size:.75rem;overflow:auto}.publish-start__meta--missing[data-v-ce43f346]{color:rgb(var(--v-theme-warning))!important}.publish-empty[data-v-ce43f346]{background:var(--v64-surface-container-low);border:1px dashed var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);text-align:center;justify-items:center;gap:8px;padding:36px 24px;display:grid}.publish-empty h2[data-v-ce43f346]{font:var(--v64-type-title-lg);margin:0}.publish-empty p[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);max-width:38rem;margin:0}.publish-empty__diagnostics[data-v-ce43f346]{color:rgb(var(--v-theme-warning));text-align:left;margin:4px 0 0;font-size:.8125rem}.publish-start[data-v-ce43f346]{gap:12px;display:grid}.publish-start__lead[data-v-ce43f346]{color:var(--v64-on-surface-variant);font:var(--v64-type-body-md);margin:0}.publish-start__grid[data-v-ce43f346]{gap:var(--v64-space-3,12px);grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));display:grid}.publish-start__tile[data-v-ce43f346]{--accent:rgb(var(--v-theme-primary));background:var(--v64-surface-container-low);border:1px solid var(--v64-outline-variant);border-radius:var(--v64-shape-lg,16px);color:inherit;cursor:pointer;font:inherit;text-align:left;align-content:start;justify-items:start;gap:6px;padding:18px;transition:border-color .15s,transform .15s,box-shadow .15s;display:grid}.publish-start__tile[data-v-ce43f346]:not(:disabled):hover,.publish-start__tile[data-v-ce43f346]:focus-visible{border-color:var(--accent);box-shadow:var(--v64-elevation-1);transform:translateY(-2px)}.publish-start__tile[data-v-ce43f346]:disabled{cursor:not-allowed;background:0 0;border-style:dashed}.publish-start__tile[data-v-ce43f346]:disabled>:not(.publish-start__meta--missing){opacity:.55}.publish-start__tile:disabled .publish-start__icon[data-v-ce43f346]{filter:grayscale()}.publish-start__tile--success[data-v-ce43f346]{--accent:rgb(var(--v-theme-success))}.publish-start__tile--error[data-v-ce43f346]{--accent:rgb(var(--v-theme-error))}.publish-start__tile--info[data-v-ce43f346]{--accent:rgb(var(--v-theme-info))}.publish-start__icon[data-v-ce43f346]{background:color-mix(in srgb, var(--accent) 14%, var(--v64-surface));border-radius:var(--v64-shape-md,12px);color:var(--accent);justify-content:center;align-items:center;width:48px;height:48px;margin-bottom:6px;display:inline-flex}.publish-start__tile strong[data-v-ce43f346]{font:var(--v64-type-title-md)}.publish-start__tile>span[data-v-ce43f346]:not(.publish-start__icon){color:var(--v64-on-surface-variant);font:var(--v64-type-body-md)}.publish-start__meta[data-v-ce43f346]{align-items:center;gap:4px;margin-top:auto;font-size:.8125rem;display:inline-flex}@media (width<=760px){.publish-saved[data-v-ce43f346]{grid-template-columns:minmax(0,1fr)}.publish-banner[data-v-ce43f346]{grid-template-columns:22px minmax(0,1fr)}.publish-banner>.v-btn[data-v-ce43f346]{grid-column:2;justify-self:start}}.publish-dialog__title{font:var(--v64-type-title-lg);align-items:center;gap:4px;padding:20px 24px 8px;display:flex}.publish-dialog__actions{flex-wrap:wrap;padding:8px 20px 16px}.publish-section-title{font:var(--v64-type-title-lg);letter-spacing:0;align-items:center;gap:8px;margin:8px 0 12px;display:flex}
@@ -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{h as VIcon,or as withKeys,sr as withModifiers}from"./ripple-EFNA8EBu.js";import{J as useQueryClient,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{a as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-B06ABkhI.js";import{t as VSelect}from"./VSelect-D3oLvCcB.js";import{c as VListItemTitle,n as VList,s as VListItem}from"./VMenu-CDcBLYWR.js";import{t as VChip}from"./VChip-VVdtjfq-.js";import{t as VTextField}from"./VTextField-C0b_0cSa.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-DpSS-0z1.js";import{C as mdiArrowRight,Cr as mdiSourcePull,L as mdiCheck,Q as mdiCloseCircleOutline,Rn as mdiOpenInNew,Sr as mdiSourceMerge,Yn as mdiPlus,br as mdiSourceBranchSync,kn as mdiMagnify,nr as mdiRefresh,vr as mdiSourceBranch}from"./mdi-Bt90Ns76.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VAlert}from"./VAlert-gwuhYlYb.js";import{t as VDivider}from"./VDivider-Dq25WsKu.js";import{t as VSheet}from"./VSheet-DxYEFfnM.js";import{t as VDialog}from"./VDialog-CQDhjRiV.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-C3Hx769y.js";import{t as VSpacer}from"./VSpacer-CgWOWvBh.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-Cync3lZZ.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{_ as parseLongTextReviewBlocks,g as LongTextPreviewBlocks_default}from"./conversation-DZW4-Wck.js";import{t as useUiFeedback}from"./useUiFeedback-CMwE4MLs.js";import{a as vibe64SessionPullRequest}from"./vibe64SessionViewModel-DR4tOlGM.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-Go_MJuIK.js";import{n as githubProjectRepositoryName,t as githubProjectAvailable}from"./vibe64GithubProject-CdFrbVHp.js";import{n as Vibe64AssistantSessionDialog_default,r as Vibe64CreatePullRequestDialog_default,t as focusCreatedVibe64SessionTab}from"./vibe64SessionFocus-tv2wz7_H.js";import{t as _sfc_main$3}from"./GithubBrowserTabs-BoDkGFtY.js";var _hoisted_1$1={key:0,role:`status`,class:`text-body-medium ma-0`};var _hoisted_2$1={class:`d-flex flex-wrap ga-2 text-body-small`};var _hoisted_3$1={key:0,class:`text-body-medium ma-0`};var _hoisted_4$1={class:`d-flex flex-wrap ga-2`};var _hoisted_5$1={class:`text-wrap`};var _hoisted_6$1={class:`text-wrap`};var _hoisted_7$1={key:1,class:`text-body-small ma-0`};var _hoisted_8$1={key:2,class:`text-body-medium ma-0`};var _hoisted_9$1={key:3,class:`text-body-medium ma-0`};var _hoisted_10$1={class:`text-body-medium ma-0`};var _hoisted_11$1={key:0,class:`text-body-medium ma-0`};var _hoisted_12$1={key:1,class:`text-body-medium ma-0`};var _hoisted_13$1={key:1,class:`text-body-small ma-0`};var _hoisted_14$1=[`href`];var _sfc_main$2={__name:`GithubPullRequestActions`,props:{pullRequest:{type:Object,required:true},apiPath:{type:String,required:true},disabled:Boolean},emits:[`changed`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const feedback=useUiFeedback({source:`vibe64.pullRequests.actions`});const confirmation=ref(null);const pending=ref(false);const mergeMethod=ref(``);const notice=ref(``);const updatingHead=ref(``);const failed=ref(false);const methodLabels={merge:`Create a merge commit`,squash:`Squash and merge`,rebase:`Rebase and merge`};const checksLabel=computed(()=>({SUCCESS:`Checks passed`,FAILURE:`Some checks failed`,ERROR:`Checks reported an error`,PENDING:`Checks are running`,EXPECTED:`Waiting for checks`})[props.pullRequest.checksState]||`No checks reported`);const reviewLabel=computed(()=>({APPROVED:`Reviews approved`,CHANGES_REQUESTED:`Changes requested`,REVIEW_REQUIRED:`Reviews required`})[props.pullRequest.reviewDecision]||``);const path=computed(()=>confirmation.value?.path||props.apiPath);const command=useEndpointResource({path,enabled:false,queryKey:computed(()=>[`vibe64.pullRequestAction`,path.value]),mutationOptions:{retry:false}});const actionDisabled=computed(()=>props.disabled||pending.value||!props.pullRequest.review);watch(()=>props.apiPath,()=>{confirmation.value=null;notice.value=``;updatingHead.value=``;failed.value=false});watch(()=>[props.pullRequest.headRefOid,props.pullRequest.state],([head,state])=>{if(state!==`OPEN`){notice.value=``;updatingHead.value=``}else if(updatingHead.value&&head&&head!==updatingHead.value){notice.value=`New commits are available. Update your session to load them.`;updatingHead.value=``}});function open(operation){const pr=props.pullRequest;if(actionDisabled.value||pr.actions?.[operation]!==``)return;mergeMethod.value=pr.mergeMethods[0]||``;const head=`${pr.review.headRepository}:${pr.review.headBranch}`;const base=`${pr.review.repository}:${pr.review.baseBranch}`;confirmation.value={operation,path:`${props.apiPath}/${operation}`,apiPath:props.apiPath,review:{...pr.review},url:pr.url,methods:pr.mergeMethods,from:operation===`update-branch`?base:head,to:operation===`update-branch`?head:base,title:operation===`ready`?`Ready for review?`:operation===`update-branch`?`Update branch from ${pr.baseRefName}?`:`Merge into ${pr.baseRefName}?`};failed.value=false}async function submit(){const reviewed=confirmation.value;if(!reviewed||pending.value||props.disabled)return;pending.value=true;failed.value=false;try{const result=await command.save({review:reviewed.review,...reviewed.operation===`merge`?{mergeMethod:mergeMethod.value}:{}},{method:`POST`,path:reviewed.path});if(props.apiPath===reviewed.apiPath){notice.value=result.pending?result.message:``;updatingHead.value=result.pending?reviewed.review.headCommit:``;confirmation.value=null}feedback.success(`PR #${reviewed.review.number}: ${result.message}`);emit(`changed`,{apiPath:reviewed.apiPath,operation:reviewed.operation})}catch(error){if(props.apiPath===reviewed.apiPath)failed.value=true;feedback.error(error,`The result could not be confirmed. Refresh this pull request before trying again.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VSheet,{rounded:`xl`,border:``,class:`pa-5 d-flex flex-column ga-3 pr-actions`},{default:withCtx(()=>[notice.value?(openBlock(),createElementBlock(`p`,_hoisted_1$1,toDisplayString(notice.value),1)):createCommentVNode(``,true),__props.pullRequest.state===`OPEN`?(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`div`,_hoisted_2$1,[createVNode(VChip,{size:`small`,color:[`FAILURE`,`ERROR`].includes(__props.pullRequest.checksState)?`warning`:void 0},{default:withCtx(()=>[createTextVNode(toDisplayString(checksLabel.value),1)]),_:1},8,[`color`]),reviewLabel.value?(openBlock(),createBlock(VChip,{key:0,size:`small`},{default:withCtx(()=>[createTextVNode(toDisplayString(reviewLabel.value),1)]),_:1})):createCommentVNode(``,true)]),__props.pullRequest.actions?.merge?(openBlock(),createElementBlock(`p`,_hoisted_3$1,toDisplayString(__props.pullRequest.actions.merge),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_4$1,[__props.pullRequest.isDraft?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiCheck),disabled:actionDisabled.value||Boolean(__props.pullRequest.actions?.ready),onClick:_cache[0]||(_cache[0]=$event=>open(`ready`))},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createBaseVNode(`span`,{class:`text-wrap`},`Ready for review`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),__props.pullRequest.actions?.[`update-branch`]===``?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiSourceBranchSync),disabled:actionDisabled.value,onClick:_cache[1]||(_cache[1]=$event=>open(`update-branch`))},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_5$1,`Update branch from `+toDisplayString(__props.pullRequest.baseRefName),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),!__props.pullRequest.isDraft?(openBlock(),createBlock(VBtn,{key:2,color:`primary`,variant:`flat`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiSourceMerge),disabled:actionDisabled.value||Boolean(__props.pullRequest.actions?.merge),onClick:_cache[2]||(_cache[2]=$event=>open(`merge`))},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_6$1,`Merge into `+toDisplayString(__props.pullRequest.baseRefName),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),__props.pullRequest.isDraft&&__props.pullRequest.actions?.ready?(openBlock(),createElementBlock(`p`,_hoisted_7$1,toDisplayString(__props.pullRequest.actions.ready),1)):createCommentVNode(``,true)],64)):__props.pullRequest.state===`MERGED`&&!notice.value?(openBlock(),createElementBlock(`p`,_hoisted_8$1,` Merged into `+toDisplayString(__props.pullRequest.baseRefName)+`. Archive your session when you have finished with it. `,1)):!notice.value?(openBlock(),createElementBlock(`p`,_hoisted_9$1,`This pull request is closed.`)):createCommentVNode(``,true)]),_:1}),createVNode(VDialog,{"model-value":Boolean(confirmation.value),"max-width":`36rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>!$event&&!pending.value&&(confirmation.value=null))},{default:withCtx(()=>[confirmation.value?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(confirmation.value.title),1)]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-3 pr-confirmation`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_10$1,toDisplayString(confirmation.value.from)+` → `+toDisplayString(confirmation.value.to),1),confirmation.value.operation===`ready`?(openBlock(),createElementBlock(`p`,_hoisted_11$1,`Mark this draft ready so reviewers can review it.`)):confirmation.value.operation===`update-branch`?(openBlock(),createElementBlock(`p`,_hoisted_12$1,` Merge `+toDisplayString(confirmation.value.review.baseBranch)+` into `+toDisplayString(confirmation.value.review.headBranch)+` on GitHub. Then use Update session to load those changes into your session. `,1)):(openBlock(),createElementBlock(Fragment,{key:2},[_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`text-body-medium ma-0`},`Merge the commits already on GitHub. Save any session work you want included first.`,-1)),confirmation.value.methods.length>1?(openBlock(),createBlock(VSelect,{key:0,modelValue:mergeMethod.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>mergeMethod.value=$event),label:`Merge method`,variant:`outlined`,"hide-details":``,items:confirmation.value.methods.map(value=>({title:methodLabels[value],value})),disabled:pending.value},null,8,[`modelValue`,`items`,`disabled`])):(openBlock(),createElementBlock(`p`,_hoisted_13$1,toDisplayString(methodLabels[mergeMethod.value]),1))],64)),failed.value?(openBlock(),createBlock(VAlert,{key:3,type:`warning`,variant:`tonal`},{default:withCtx(()=>[_cache[8]||(_cache[8]=createTextVNode(` This action was not confirmed. Close this dialog and refresh, or view the pull request on GitHub, before trying again. `,-1)),createBaseVNode(`a`,{href:confirmation.value.url,target:`_blank`,rel:`noopener noreferrer`},`View on GitHub`,8,_hoisted_14$1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-4 flex-wrap`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:pending.value,height:`48`,onClick:_cache[4]||(_cache[4]=$event=>confirmation.value=null)},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`48`,disabled:pending.value||__props.disabled||failed.value,"aria-busy":pending.value,onClick:submit},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Working…`:confirmation.value.operation===`ready`?`Ready for review`:confirmation.value.operation===`merge`?`Merge pull request`:`Update branch`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])],64)}}};var GithubPullRequestActions_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-5aa628de`]]);var _hoisted_1={class:`pull-requests d-flex flex-column ga-2`};var _hoisted_2={class:`d-flex align-center flex-wrap ga-2`};var _hoisted_3={class:`d-flex justify-space-between px-2 text-label-large text-medium-emphasis`};var _hoisted_4={class:`d-flex flex-wrap ga-2 text-body-small text-medium-emphasis mt-1`};var _hoisted_5={class:`pull-requests__branch`};var _hoisted_6={class:`d-flex justify-end ga-2`};var _hoisted_7={class:`px-2`};var _hoisted_8={class:`d-flex align-center flex-wrap ga-2 mb-3`};var _hoisted_9={class:`text-body-medium text-medium-emphasis`};var _hoisted_10={class:`text-headline-small mb-3`};var _hoisted_11={class:`d-flex flex-wrap ga-3 text-body-small text-medium-emphasis`};var _hoisted_12={class:`text-success`};var _hoisted_13={class:`text-error`};var _hoisted_14={class:`d-flex align-start ga-3`};var _hoisted_15={class:`pull-requests__branch`};var _hoisted_16={class:`text-body-medium mt-1`};var _hoisted_17={class:`text-body-small text-medium-emphasis mt-1`};var _hoisted_18={key:0,class:`text-body-medium ma-0`};var _hoisted_19={key:1,class:`text-body-medium ma-0`};var _hoisted_20={key:2,class:`text-body-medium ma-0`};var _hoisted_21={class:`d-flex flex-wrap ga-2`};var _hoisted_22={key:1,class:`text-body-medium text-medium-emphasis ma-0`};var _sfc_main$1={__name:`GithubPullRequestsPanel`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){const props=__props;const route=useRoute();const router=useRouter();const queryClient=useQueryClient();const projectSlug=computed(()=>projectSlugFromRoute(route));const repository=computed(()=>githubProjectRepositoryName(props.dashboardContext.projectContext));const available=computed(()=>githubProjectAvailable(props.dashboardContext.projectContext));const active=computed(()=>available.value&&props.dashboardContext.active!==false);const number=computed(()=>/^\d+$/u.test(String(route.query.pr||``))?String(route.query.pr):``);const state=computed(()=>[`open`,`closed`,`merged`,`all`].includes(route.query.prState)?route.query.prState:`open`);const search=ref(String(route.query.prSearch||``));watch(()=>route.query.prSearch,value=>{search.value=String(value||``)});const basePath=computed(()=>scopedDevelopmentApiUrl(`/api/vibe64/pull-requests`,projectSlug.value));const listQuery=computed(()=>({state:state.value,search:String(route.query.prSearch||``),...route.query.prCursor?{cursor:route.query.prCursor}:{}}));const list=useEndpointResource({path:basePath,readQuery:listQuery,queryKey:computed(()=>[`vibe64.pullRequests`,basePath.value,listQuery.value]),enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},fallbackLoadError:`Pull requests could not load.`});const detail=useEndpointResource({path:computed(()=>`${basePath.value}/${number.value}`),queryKey:computed(()=>[`vibe64.pullRequest`,basePath.value,number.value]),enabled:computed(()=>active.value&&Boolean(number.value)),queryOptions:{retry:false},fallbackLoadError:`This pull request could not load.`});const resource=computed(()=>number.value?detail:list);const pr=computed(()=>detail.data.value?.pullRequest);const description=computed(()=>parseLongTextReviewBlocks(pr.value?.body||``));const assistantDialog=ref(false);const createDialog=ref(false);const selectedSource=computed(()=>vibe64SessionPullRequest(props.dashboardContext.session));const createAvailable=computed(()=>Boolean(props.dashboardContext.sessionId)&&!selectedSource.value?.number);const toolbar=computed(()=>({...props.dashboardContext.sessionToolbar,repositoryBranchSelectionDisabled:true,createSession:(selection,options={})=>props.dashboardContext.sessionToolbar?.createSession?.(selection,{...options,pullRequestNumber:Number(number.value)})}));watch(()=>route.query.createPullRequest,value=>{if(value&&createAvailable.value)createDialog.value=true},{immediate:true});function navigate(query){return router.push({query:{...route.query,...query}})}function filter(nextState=state.value){return navigate({prState:nextState,prSearch:String(search.value||``).trim()||void 0,prCursor:void 0,pr:void 0})}function status(item){if(item.state===`MERGED`)return`Merged`;if(item.state===`CLOSED`)return`Closed`;return item.isDraft?`Draft`:`Open`}function color(item){if(item.state===`MERGED`)return`primary`;if(item.state===`CLOSED`)return`error`;return item.isDraft?void 0:`success`}function icon(item){if(item.state===`MERGED`)return mdiSourceMerge;return item.state===`CLOSED`?mdiCloseCircleOutline:mdiSourcePull}function date(value){return value?new Date(value).toLocaleDateString(void 0,{month:`short`,day:`numeric`}):``}async function created(response){if(!response?.sessionId)return;await router.push(projectAppPath(projectSlug.value,`/dashboard/changes`));focusCreatedVibe64SessionTab(response.sessionId)}async function published(source){await list.reload();await navigate({pr:String(source.number),createPullRequest:void 0});await detail.reload()}async function actionFinished({apiPath}){await queryClient.invalidateQueries({queryKey:[`vibe64.pullRequests`,apiPath.replace(/\/\d+$/u,``)]});if(apiPath!==`${basePath.value}/${number.value}`)return;await detail.reload();props.dashboardContext.refreshSessionWork?.()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`div`,_hoisted_2,[createVNode(Vibe64DashboardBackButton_default,{to:available.value&&number.value?void 0:unref(projectAppPath)(projectSlug.value,`/dashboard/env`),onClick:_cache[0]||(_cache[0]=$event=>available.value&&number.value&&navigate({pr:void 0}))},{default:withCtx(()=>[createTextVNode(toDisplayString(available.value&&number.value?`All pull requests`:`Back to dashboard`),1)]),_:1},8,[`to`]),createVNode(VSpacer),available.value?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiRefresh),variant:`text`,size:`small`,height:`48`,disabled:resource.value.isFetching.value,onClick:_cache[1]||(_cache[1]=$event=>resource.value.reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.isFetching.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),available.value&&createAvailable.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`tonal`,rounded:`pill`,size:`small`,height:`48`,"prepend-icon":unref(mdiPlus),disabled:__props.dashboardContext.sourceOperationsSuspended,onClick:_cache[2]||(_cache[2]=$event=>createDialog.value=true)},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(` Create from session `,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),!available.value?(openBlock(),createBlock(VAlert,{key:0,type:`info`,variant:`tonal`},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Pull requests are available only for GitHub projects.`,-1)])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(_sfc_main$3),!number.value?(openBlock(),createElementBlock(`form`,{key:0,class:`d-flex flex-wrap align-center ga-3`,onSubmit:_cache[8]||(_cache[8]=withModifiers($event=>filter(),[`prevent`]))},[createVNode(VBtnToggle,{"model-value":state.value,mandatory:``,divided:``,rounded:`pill`,color:`primary`,variant:`outlined`,"aria-label":`Pull request state`,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>filter($event))},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList([`open`,`closed`,`merged`,`all`],value=>{return createVNode(VBtn,{key:value,value,height:`48`},{default:withCtx(()=>[createTextVNode(toDisplayString(value[0].toUpperCase()+value.slice(1)),1)]),_:2},1032,[`value`])}),64))]),_:1},8,[`model-value`]),createVNode(VTextField,{modelValue:search.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>search.value=$event),class:`pull-requests__search`,label:`Search pull requests`,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,rounded:`pill`,"hide-details":``,maxlength:`200`,clearable:``,onKeydown:_cache[6]||(_cache[6]=withKeys(withModifiers($event=>filter(),[`prevent`]),[`enter`])),"onClick:clear":_cache[7]||(_cache[7]=$event=>{search.value=``;filter()})},{"append-inner":withCtx(()=>[createVNode(VBtn,{icon:unref(mdiArrowRight),variant:`text`,size:`48`,"aria-label":`Search pull requests`,onClick:_cache[4]||(_cache[4]=$event=>filter())},null,8,[`icon`])]),_:1},8,[`modelValue`,`prepend-inner-icon`])],32)):createCommentVNode(``,true),resource.value.isInitialLoading.value?(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,border:``,class:`pa-4`,"aria-label":`Loading pull requests`,"aria-busy":`true`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(4,index=>{return createVNode(VSkeletonLoader,{key:index,type:number.value?`paragraph`:`list-item-two-line`},null,8,[`type`])}),64))]),_:1})):resource.value.loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[9]||(_cache[9]=$event=>resource.value.reload())},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.loadError.value)+` `,1)]),_:1})):!number.value?(openBlock(),createElementBlock(Fragment,{key:3},[createBaseVNode(`div`,_hoisted_3,[createBaseVNode(`span`,null,toDisplayString(unref(list).data.value?.total||0)+` pull requests`,1),_cache[18]||(_cache[18]=createBaseVNode(`span`,null,`Recently updated`,-1))]),unref(list).data.value?.pullRequests?.length?(openBlock(),createBlock(VList,{key:0,class:`pa-0`,density:`compact`,rounded:`xl`,border:``,slim:``,"aria-label":`GitHub pull requests`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(list).data.value.pullRequests,(item,index)=>{return openBlock(),createElementBlock(Fragment,{key:item.number},[index?(openBlock(),createBlock(VDivider,{key:0})):createCommentVNode(``,true),createVNode(VListItem,{class:`py-2`,active:false,to:{query:{..._ctx.$route.query,pr:String(item.number)}}},{prepend:withCtx(()=>[createVNode(VIcon,{icon:icon(item),color:color(item)},null,8,[`icon`,`color`])]),default:withCtx(()=>[createVNode(VListItemTitle,{class:`text-title-medium text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1024),createBaseVNode(`div`,_hoisted_4,[createBaseVNode(`span`,null,`#`+toDisplayString(item.number)+` · `+toDisplayString(status(item))+` · `+toDisplayString(item.author?.login)+` · `+toDisplayString(date(item.updatedAt)),1),createBaseVNode(`span`,_hoisted_5,toDisplayString(item.headRefName)+` → `+toDisplayString(item.baseRefName),1)])]),_:2},1032,[`to`])],64)}),128))]),_:1})):(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,color:`surface-light`,class:`pa-8 text-center`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiSourcePull),size:`40`,class:`mb-3`},null,8,[`icon`]),_cache[19]||(_cache[19]=createBaseVNode(`h2`,{class:`text-title-large mb-2`},`No pull requests here`,-1)),_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis`},`Try another filter, or turn your session into a pull request.`,-1))]),_:1})),createBaseVNode(`div`,_hoisted_6,[_ctx.$route.query.prCursor?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[10]||(_cache[10]=$event=>navigate({prCursor:void 0}))},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`First page`,-1)])]),_:1})):createCommentVNode(``,true),unref(list).data.value?.pageInfo?.hasNextPage?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,height:`48`,"append-icon":unref(mdiArrowRight),onClick:_cache[11]||(_cache[11]=$event=>navigate({prCursor:unref(list).data.value.pageInfo.endCursor}))},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Next page `,-1)])]),_:1},8,[`append-icon`])):createCommentVNode(``,true)])],64)):pr.value?(openBlock(),createElementBlock(Fragment,{key:4},[createBaseVNode(`div`,_hoisted_7,[createBaseVNode(`div`,_hoisted_8,[createVNode(VChip,{color:color(pr.value),"prepend-icon":icon(pr.value),variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(status(pr.value)),1)]),_:1},8,[`color`,`prepend-icon`]),createBaseVNode(`span`,_hoisted_9,`#`+toDisplayString(pr.value.number)+` · `+toDisplayString(pr.value.author?.login),1)]),createBaseVNode(`h2`,_hoisted_10,toDisplayString(pr.value.title),1),createBaseVNode(`div`,_hoisted_11,[createBaseVNode(`span`,null,toDisplayString(pr.value.changedFiles)+` files changed`,1),createBaseVNode(`span`,_hoisted_12,`+`+toDisplayString(pr.value.additions),1),createBaseVNode(`span`,_hoisted_13,`−`+toDisplayString(pr.value.deletions),1)])]),createVNode(VSheet,{rounded:`xl`,color:`surface-light`,class:`pa-5 d-flex flex-column ga-4`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_14,[createVNode(VIcon,{icon:unref(mdiSourceBranch),color:`primary`,class:`mt-1`},null,8,[`icon`]),createBaseVNode(`div`,_hoisted_15,[_cache[23]||(_cache[23]=createBaseVNode(`div`,{class:`text-label-large`},`Session source · Save destination`,-1)),createBaseVNode(`div`,_hoisted_16,toDisplayString(pr.value.headRepository?.nameWithOwner||`Deleted repository`)+`:`+toDisplayString(pr.value.headRefName),1),createBaseVNode(`div`,_hoisted_17,`Proposed into `+toDisplayString(repository.value)+`:`+toDisplayString(pr.value.baseRefName),1)])]),pr.value.state===`OPEN`?(openBlock(),createElementBlock(`p`,_hoisted_18,`Open an isolated session with this PR’s changes and description. Save pushes further work to its source branch.`)):createCommentVNode(``,true),pr.value.state===`OPEN`&&pr.value.unavailableReason?(openBlock(),createElementBlock(`p`,_hoisted_19,toDisplayString(pr.value.unavailableReason),1)):pr.value.state===`OPEN`&&!toolbar.value.canCreateSession?(openBlock(),createElementBlock(`p`,_hoisted_20,toDisplayString(toolbar.value.createSessionTitle),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_21,[pr.value.state===`OPEN`?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,rounded:`pill`,height:`48`,"prepend-icon":unref(mdiSourcePull),disabled:Boolean(pr.value.unavailableReason)||!toolbar.value.canCreateSession||toolbar.value.createSessionRunning,onClick:_cache[12]||(_cache[12]=$event=>assistantDialog.value=true)},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(` Open as session `,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{href:pr.value.url,target:`_blank`,rel:`noopener noreferrer`,variant:`text`,height:`48`,"append-icon":unref(mdiOpenInNew)},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`View on GitHub`,-1)])]),_:1},8,[`href`,`append-icon`])])]),_:1}),createVNode(GithubPullRequestActions_default,{"pull-request":pr.value,"api-path":`${basePath.value}/${number.value}`,disabled:unref(detail).isFetching.value,onChanged:actionFinished},null,8,[`pull-request`,`api-path`,`disabled`]),createVNode(VSheet,{rounded:`xl`,border:``,class:`pa-5 pull-requests__description`},{default:withCtx(()=>[_cache[26]||(_cache[26]=createBaseVNode(`h3`,{class:`text-title-medium mb-4`},`Description`,-1)),pr.value.body?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:0,blocks:description.value},null,8,[`blocks`])):(openBlock(),createElementBlock(`p`,_hoisted_22,`No description provided.`))]),_:1})],64)):createCommentVNode(``,true)],64)),available.value&&assistantDialog.value?(openBlock(),createBlock(Vibe64AssistantSessionDialog_default,{key:2,modelValue:assistantDialog.value,"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>assistantDialog.value=$event),toolbar:toolbar.value,onCreated:created},null,8,[`modelValue`,`toolbar`])):createCommentVNode(``,true),available.value?(openBlock(),createBlock(Vibe64CreatePullRequestDialog_default,{key:3,modelValue:createDialog.value,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>createDialog.value=$event),"dashboard-context":__props.dashboardContext,onCreated:published},null,8,[`modelValue`,`dashboard-context`])):createCommentVNode(``,true)])}}};var GithubPullRequestsPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-f75e5bff`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(GithubPullRequestsPanel_default,{"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main 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{h as VIcon,or as withKeys,sr as withModifiers}from"./ripple-EFNA8EBu.js";import{J as useQueryClient,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{a as projectSlugFromRoute,r as projectAppPath}from"./vibe64ProjectScope.local-B06ABkhI.js";import{t as VSelect}from"./VSelect-D3oLvCcB.js";import{c as VListItemTitle,n as VList,s as VListItem}from"./VMenu-CDcBLYWR.js";import{t as VChip}from"./VChip-VVdtjfq-.js";import{t as VTextField}from"./VTextField-C0b_0cSa.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-DpSS-0z1.js";import{C as mdiArrowRight,Cr as mdiSourcePull,L as mdiCheck,Q as mdiCloseCircleOutline,Rn as mdiOpenInNew,Sr as mdiSourceMerge,Yn as mdiPlus,br as mdiSourceBranchSync,kn as mdiMagnify,nr as mdiRefresh,vr as mdiSourceBranch}from"./mdi-Bt90Ns76.js";import{i as VBtnToggle,t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VAlert}from"./VAlert-gwuhYlYb.js";import{t as VDivider}from"./VDivider-Dq25WsKu.js";import{t as VSheet}from"./VSheet-DxYEFfnM.js";import{t as VDialog}from"./VDialog-CQDhjRiV.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-C3Hx769y.js";import{t as VSpacer}from"./VSpacer-CgWOWvBh.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-Cync3lZZ.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{_ as parseLongTextReviewBlocks,g as LongTextPreviewBlocks_default}from"./conversation-DZW4-Wck.js";import{t as useUiFeedback}from"./useUiFeedback-CMwE4MLs.js";import{a as vibe64SessionPullRequest}from"./vibe64SessionViewModel-DR4tOlGM.js";import{t as Vibe64DashboardBackButton_default}from"./Vibe64DashboardBackButton-Go_MJuIK.js";import{n as githubProjectRepositoryName,t as githubProjectAvailable}from"./vibe64GithubProject-CdFrbVHp.js";import{n as Vibe64AssistantSessionDialog_default,r as Vibe64CreatePullRequestDialog_default,t as focusCreatedVibe64SessionTab}from"./vibe64SessionFocus-DlN8NwcE.js";import{t as _sfc_main$3}from"./GithubBrowserTabs-YvIe2BdE.js";var _hoisted_1$1={key:0,role:`status`,class:`text-body-medium ma-0`};var _hoisted_2$1={class:`d-flex flex-wrap ga-2 text-body-small`};var _hoisted_3$1={key:0,class:`text-body-medium ma-0`};var _hoisted_4$1={class:`d-flex flex-wrap ga-2`};var _hoisted_5$1={class:`text-wrap`};var _hoisted_6$1={class:`text-wrap`};var _hoisted_7$1={key:1,class:`text-body-small ma-0`};var _hoisted_8$1={key:2,class:`text-body-medium ma-0`};var _hoisted_9$1={key:3,class:`text-body-medium ma-0`};var _hoisted_10$1={class:`text-body-medium ma-0`};var _hoisted_11$1={key:0,class:`text-body-medium ma-0`};var _hoisted_12$1={key:1,class:`text-body-medium ma-0`};var _hoisted_13$1={key:1,class:`text-body-small ma-0`};var _hoisted_14$1=[`href`];var _sfc_main$2={__name:`GithubPullRequestActions`,props:{pullRequest:{type:Object,required:true},apiPath:{type:String,required:true},disabled:Boolean},emits:[`changed`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const feedback=useUiFeedback({source:`vibe64.pullRequests.actions`});const confirmation=ref(null);const pending=ref(false);const mergeMethod=ref(``);const notice=ref(``);const updatingHead=ref(``);const failed=ref(false);const methodLabels={merge:`Create a merge commit`,squash:`Squash and merge`,rebase:`Rebase and merge`};const checksLabel=computed(()=>({SUCCESS:`Checks passed`,FAILURE:`Some checks failed`,ERROR:`Checks reported an error`,PENDING:`Checks are running`,EXPECTED:`Waiting for checks`})[props.pullRequest.checksState]||`No checks reported`);const reviewLabel=computed(()=>({APPROVED:`Reviews approved`,CHANGES_REQUESTED:`Changes requested`,REVIEW_REQUIRED:`Reviews required`})[props.pullRequest.reviewDecision]||``);const path=computed(()=>confirmation.value?.path||props.apiPath);const command=useEndpointResource({path,enabled:false,queryKey:computed(()=>[`vibe64.pullRequestAction`,path.value]),mutationOptions:{retry:false}});const actionDisabled=computed(()=>props.disabled||pending.value||!props.pullRequest.review);watch(()=>props.apiPath,()=>{confirmation.value=null;notice.value=``;updatingHead.value=``;failed.value=false});watch(()=>[props.pullRequest.headRefOid,props.pullRequest.state],([head,state])=>{if(state!==`OPEN`){notice.value=``;updatingHead.value=``}else if(updatingHead.value&&head&&head!==updatingHead.value){notice.value=`New commits are available. Update your session to load them.`;updatingHead.value=``}});function open(operation){const pr=props.pullRequest;if(actionDisabled.value||pr.actions?.[operation]!==``)return;mergeMethod.value=pr.mergeMethods[0]||``;const head=`${pr.review.headRepository}:${pr.review.headBranch}`;const base=`${pr.review.repository}:${pr.review.baseBranch}`;confirmation.value={operation,path:`${props.apiPath}/${operation}`,apiPath:props.apiPath,review:{...pr.review},url:pr.url,methods:pr.mergeMethods,from:operation===`update-branch`?base:head,to:operation===`update-branch`?head:base,title:operation===`ready`?`Ready for review?`:operation===`update-branch`?`Update branch from ${pr.baseRefName}?`:`Merge into ${pr.baseRefName}?`};failed.value=false}async function submit(){const reviewed=confirmation.value;if(!reviewed||pending.value||props.disabled)return;pending.value=true;failed.value=false;try{const result=await command.save({review:reviewed.review,...reviewed.operation===`merge`?{mergeMethod:mergeMethod.value}:{}},{method:`POST`,path:reviewed.path});if(props.apiPath===reviewed.apiPath){notice.value=result.pending?result.message:``;updatingHead.value=result.pending?reviewed.review.headCommit:``;confirmation.value=null}feedback.success(`PR #${reviewed.review.number}: ${result.message}`);emit(`changed`,{apiPath:reviewed.apiPath,operation:reviewed.operation})}catch(error){if(props.apiPath===reviewed.apiPath)failed.value=true;feedback.error(error,`The result could not be confirmed. Refresh this pull request before trying again.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VSheet,{rounded:`xl`,border:``,class:`pa-5 d-flex flex-column ga-3 pr-actions`},{default:withCtx(()=>[notice.value?(openBlock(),createElementBlock(`p`,_hoisted_1$1,toDisplayString(notice.value),1)):createCommentVNode(``,true),__props.pullRequest.state===`OPEN`?(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`div`,_hoisted_2$1,[createVNode(VChip,{size:`small`,color:[`FAILURE`,`ERROR`].includes(__props.pullRequest.checksState)?`warning`:void 0},{default:withCtx(()=>[createTextVNode(toDisplayString(checksLabel.value),1)]),_:1},8,[`color`]),reviewLabel.value?(openBlock(),createBlock(VChip,{key:0,size:`small`},{default:withCtx(()=>[createTextVNode(toDisplayString(reviewLabel.value),1)]),_:1})):createCommentVNode(``,true)]),__props.pullRequest.actions?.merge?(openBlock(),createElementBlock(`p`,_hoisted_3$1,toDisplayString(__props.pullRequest.actions.merge),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_4$1,[__props.pullRequest.isDraft?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiCheck),disabled:actionDisabled.value||Boolean(__props.pullRequest.actions?.ready),onClick:_cache[0]||(_cache[0]=$event=>open(`ready`))},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createBaseVNode(`span`,{class:`text-wrap`},`Ready for review`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),__props.pullRequest.actions?.[`update-branch`]===``?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiSourceBranchSync),disabled:actionDisabled.value,onClick:_cache[1]||(_cache[1]=$event=>open(`update-branch`))},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_5$1,`Update branch from `+toDisplayString(__props.pullRequest.baseRefName),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),!__props.pullRequest.isDraft?(openBlock(),createBlock(VBtn,{key:2,color:`primary`,variant:`flat`,"min-height":`48`,height:`auto`,"max-width":`100%`,"prepend-icon":unref(mdiSourceMerge),disabled:actionDisabled.value||Boolean(__props.pullRequest.actions?.merge),onClick:_cache[2]||(_cache[2]=$event=>open(`merge`))},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_6$1,`Merge into `+toDisplayString(__props.pullRequest.baseRefName),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),__props.pullRequest.isDraft&&__props.pullRequest.actions?.ready?(openBlock(),createElementBlock(`p`,_hoisted_7$1,toDisplayString(__props.pullRequest.actions.ready),1)):createCommentVNode(``,true)],64)):__props.pullRequest.state===`MERGED`&&!notice.value?(openBlock(),createElementBlock(`p`,_hoisted_8$1,` Merged into `+toDisplayString(__props.pullRequest.baseRefName)+`. Archive your session when you have finished with it. `,1)):!notice.value?(openBlock(),createElementBlock(`p`,_hoisted_9$1,`This pull request is closed.`)):createCommentVNode(``,true)]),_:1}),createVNode(VDialog,{"model-value":Boolean(confirmation.value),"max-width":`36rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>!$event&&!pending.value&&(confirmation.value=null))},{default:withCtx(()=>[confirmation.value?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(confirmation.value.title),1)]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-3 pr-confirmation`},{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_10$1,toDisplayString(confirmation.value.from)+` → `+toDisplayString(confirmation.value.to),1),confirmation.value.operation===`ready`?(openBlock(),createElementBlock(`p`,_hoisted_11$1,`Mark this draft ready so reviewers can review it.`)):confirmation.value.operation===`update-branch`?(openBlock(),createElementBlock(`p`,_hoisted_12$1,` Merge `+toDisplayString(confirmation.value.review.baseBranch)+` into `+toDisplayString(confirmation.value.review.headBranch)+` on GitHub. Then use Update session to load those changes into your session. `,1)):(openBlock(),createElementBlock(Fragment,{key:2},[_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`text-body-medium ma-0`},`Merge the commits already on GitHub. Save any session work you want included first.`,-1)),confirmation.value.methods.length>1?(openBlock(),createBlock(VSelect,{key:0,modelValue:mergeMethod.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>mergeMethod.value=$event),label:`Merge method`,variant:`outlined`,"hide-details":``,items:confirmation.value.methods.map(value=>({title:methodLabels[value],value})),disabled:pending.value},null,8,[`modelValue`,`items`,`disabled`])):(openBlock(),createElementBlock(`p`,_hoisted_13$1,toDisplayString(methodLabels[mergeMethod.value]),1))],64)),failed.value?(openBlock(),createBlock(VAlert,{key:3,type:`warning`,variant:`tonal`},{default:withCtx(()=>[_cache[8]||(_cache[8]=createTextVNode(` This action was not confirmed. Close this dialog and refresh, or view the pull request on GitHub, before trying again. `,-1)),createBaseVNode(`a`,{href:confirmation.value.url,target:`_blank`,rel:`noopener noreferrer`},`View on GitHub`,8,_hoisted_14$1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`pa-4 flex-wrap`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{disabled:pending.value,height:`48`,onClick:_cache[4]||(_cache[4]=$event=>confirmation.value=null)},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,height:`48`,disabled:pending.value||__props.disabled||failed.value,"aria-busy":pending.value,onClick:submit},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Working…`:confirmation.value.operation===`ready`?`Ready for review`:confirmation.value.operation===`merge`?`Merge pull request`:`Update branch`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])],64)}}};var GithubPullRequestActions_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-5aa628de`]]);var _hoisted_1={class:`pull-requests d-flex flex-column ga-2`};var _hoisted_2={class:`d-flex align-center flex-wrap ga-2`};var _hoisted_3={class:`d-flex justify-space-between px-2 text-label-large text-medium-emphasis`};var _hoisted_4={class:`d-flex flex-wrap ga-2 text-body-small text-medium-emphasis mt-1`};var _hoisted_5={class:`pull-requests__branch`};var _hoisted_6={class:`d-flex justify-end ga-2`};var _hoisted_7={class:`px-2`};var _hoisted_8={class:`d-flex align-center flex-wrap ga-2 mb-3`};var _hoisted_9={class:`text-body-medium text-medium-emphasis`};var _hoisted_10={class:`text-headline-small mb-3`};var _hoisted_11={class:`d-flex flex-wrap ga-3 text-body-small text-medium-emphasis`};var _hoisted_12={class:`text-success`};var _hoisted_13={class:`text-error`};var _hoisted_14={class:`d-flex align-start ga-3`};var _hoisted_15={class:`pull-requests__branch`};var _hoisted_16={class:`text-body-medium mt-1`};var _hoisted_17={class:`text-body-small text-medium-emphasis mt-1`};var _hoisted_18={key:0,class:`text-body-medium ma-0`};var _hoisted_19={key:1,class:`text-body-medium ma-0`};var _hoisted_20={key:2,class:`text-body-medium ma-0`};var _hoisted_21={class:`d-flex flex-wrap ga-2`};var _hoisted_22={key:1,class:`text-body-medium text-medium-emphasis ma-0`};var _sfc_main$1={__name:`GithubPullRequestsPanel`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){const props=__props;const route=useRoute();const router=useRouter();const queryClient=useQueryClient();const projectSlug=computed(()=>projectSlugFromRoute(route));const repository=computed(()=>githubProjectRepositoryName(props.dashboardContext.projectContext));const available=computed(()=>githubProjectAvailable(props.dashboardContext.projectContext));const active=computed(()=>available.value&&props.dashboardContext.active!==false);const number=computed(()=>/^\d+$/u.test(String(route.query.pr||``))?String(route.query.pr):``);const state=computed(()=>[`open`,`closed`,`merged`,`all`].includes(route.query.prState)?route.query.prState:`open`);const search=ref(String(route.query.prSearch||``));watch(()=>route.query.prSearch,value=>{search.value=String(value||``)});const basePath=computed(()=>scopedDevelopmentApiUrl(`/api/vibe64/pull-requests`,projectSlug.value));const listQuery=computed(()=>({state:state.value,search:String(route.query.prSearch||``),...route.query.prCursor?{cursor:route.query.prCursor}:{}}));const list=useEndpointResource({path:basePath,readQuery:listQuery,queryKey:computed(()=>[`vibe64.pullRequests`,basePath.value,listQuery.value]),enabled:computed(()=>active.value&&!number.value),queryOptions:{retry:false},fallbackLoadError:`Pull requests could not load.`});const detail=useEndpointResource({path:computed(()=>`${basePath.value}/${number.value}`),queryKey:computed(()=>[`vibe64.pullRequest`,basePath.value,number.value]),enabled:computed(()=>active.value&&Boolean(number.value)),queryOptions:{retry:false},fallbackLoadError:`This pull request could not load.`});const resource=computed(()=>number.value?detail:list);const pr=computed(()=>detail.data.value?.pullRequest);const description=computed(()=>parseLongTextReviewBlocks(pr.value?.body||``));const assistantDialog=ref(false);const createDialog=ref(false);const selectedSource=computed(()=>vibe64SessionPullRequest(props.dashboardContext.session));const createAvailable=computed(()=>Boolean(props.dashboardContext.sessionId)&&!selectedSource.value?.number);const toolbar=computed(()=>({...props.dashboardContext.sessionToolbar,repositoryBranchSelectionDisabled:true,createSession:(selection,options={})=>props.dashboardContext.sessionToolbar?.createSession?.(selection,{...options,pullRequestNumber:Number(number.value)})}));watch(()=>route.query.createPullRequest,value=>{if(value&&createAvailable.value)createDialog.value=true},{immediate:true});function navigate(query){return router.push({query:{...route.query,...query}})}function filter(nextState=state.value){return navigate({prState:nextState,prSearch:String(search.value||``).trim()||void 0,prCursor:void 0,pr:void 0})}function status(item){if(item.state===`MERGED`)return`Merged`;if(item.state===`CLOSED`)return`Closed`;return item.isDraft?`Draft`:`Open`}function color(item){if(item.state===`MERGED`)return`primary`;if(item.state===`CLOSED`)return`error`;return item.isDraft?void 0:`success`}function icon(item){if(item.state===`MERGED`)return mdiSourceMerge;return item.state===`CLOSED`?mdiCloseCircleOutline:mdiSourcePull}function date(value){return value?new Date(value).toLocaleDateString(void 0,{month:`short`,day:`numeric`}):``}async function created(response){if(!response?.sessionId)return;await router.push(projectAppPath(projectSlug.value,`/dashboard/changes`));focusCreatedVibe64SessionTab(response.sessionId)}async function published(source){await list.reload();await navigate({pr:String(source.number),createPullRequest:void 0});await detail.reload()}async function actionFinished({apiPath}){await queryClient.invalidateQueries({queryKey:[`vibe64.pullRequests`,apiPath.replace(/\/\d+$/u,``)]});if(apiPath!==`${basePath.value}/${number.value}`)return;await detail.reload();props.dashboardContext.refreshSessionWork?.()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createBaseVNode(`div`,_hoisted_2,[createVNode(Vibe64DashboardBackButton_default,{to:available.value&&number.value?void 0:unref(projectAppPath)(projectSlug.value,`/dashboard/env`),onClick:_cache[0]||(_cache[0]=$event=>available.value&&number.value&&navigate({pr:void 0}))},{default:withCtx(()=>[createTextVNode(toDisplayString(available.value&&number.value?`All pull requests`:`Back to dashboard`),1)]),_:1},8,[`to`]),createVNode(VSpacer),available.value?(openBlock(),createBlock(VBtn,{key:0,"prepend-icon":unref(mdiRefresh),variant:`text`,size:`small`,height:`48`,disabled:resource.value.isFetching.value,onClick:_cache[1]||(_cache[1]=$event=>resource.value.reload())},{default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.isFetching.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),available.value&&createAvailable.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`tonal`,rounded:`pill`,size:`small`,height:`48`,"prepend-icon":unref(mdiPlus),disabled:__props.dashboardContext.sourceOperationsSuspended,onClick:_cache[2]||(_cache[2]=$event=>createDialog.value=true)},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(` Create from session `,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true)]),!available.value?(openBlock(),createBlock(VAlert,{key:0,type:`info`,variant:`tonal`},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(`Pull requests are available only for GitHub projects.`,-1)])]),_:1})):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(_sfc_main$3),!number.value?(openBlock(),createElementBlock(`form`,{key:0,class:`d-flex flex-wrap align-center ga-3`,onSubmit:_cache[8]||(_cache[8]=withModifiers($event=>filter(),[`prevent`]))},[createVNode(VBtnToggle,{"model-value":state.value,mandatory:``,divided:``,rounded:`pill`,color:`primary`,variant:`outlined`,"aria-label":`Pull request state`,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>filter($event))},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList([`open`,`closed`,`merged`,`all`],value=>{return createVNode(VBtn,{key:value,value,height:`48`},{default:withCtx(()=>[createTextVNode(toDisplayString(value[0].toUpperCase()+value.slice(1)),1)]),_:2},1032,[`value`])}),64))]),_:1},8,[`model-value`]),createVNode(VTextField,{modelValue:search.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>search.value=$event),class:`pull-requests__search`,label:`Search pull requests`,"prepend-inner-icon":unref(mdiMagnify),variant:`outlined`,rounded:`pill`,"hide-details":``,maxlength:`200`,clearable:``,onKeydown:_cache[6]||(_cache[6]=withKeys(withModifiers($event=>filter(),[`prevent`]),[`enter`])),"onClick:clear":_cache[7]||(_cache[7]=$event=>{search.value=``;filter()})},{"append-inner":withCtx(()=>[createVNode(VBtn,{icon:unref(mdiArrowRight),variant:`text`,size:`48`,"aria-label":`Search pull requests`,onClick:_cache[4]||(_cache[4]=$event=>filter())},null,8,[`icon`])]),_:1},8,[`modelValue`,`prepend-inner-icon`])],32)):createCommentVNode(``,true),resource.value.isInitialLoading.value?(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,border:``,class:`pa-4`,"aria-label":`Loading pull requests`,"aria-busy":`true`},{default:withCtx(()=>[(openBlock(),createElementBlock(Fragment,null,renderList(4,index=>{return createVNode(VSkeletonLoader,{key:index,type:number.value?`paragraph`:`list-item-two-line`},null,8,[`type`])}),64))]),_:1})):resource.value.loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,rounded:`lg`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,height:`48`,onClick:_cache[9]||(_cache[9]=$event=>resource.value.reload())},{default:withCtx(()=>[..._cache[17]||(_cache[17]=[createTextVNode(`Retry`,-1)])]),_:1})]),default:withCtx(()=>[createTextVNode(toDisplayString(resource.value.loadError.value)+` `,1)]),_:1})):!number.value?(openBlock(),createElementBlock(Fragment,{key:3},[createBaseVNode(`div`,_hoisted_3,[createBaseVNode(`span`,null,toDisplayString(unref(list).data.value?.total||0)+` pull requests`,1),_cache[18]||(_cache[18]=createBaseVNode(`span`,null,`Recently updated`,-1))]),unref(list).data.value?.pullRequests?.length?(openBlock(),createBlock(VList,{key:0,class:`pa-0`,density:`compact`,rounded:`xl`,border:``,slim:``,"aria-label":`GitHub pull requests`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(list).data.value.pullRequests,(item,index)=>{return openBlock(),createElementBlock(Fragment,{key:item.number},[index?(openBlock(),createBlock(VDivider,{key:0})):createCommentVNode(``,true),createVNode(VListItem,{class:`py-2`,active:false,to:{query:{..._ctx.$route.query,pr:String(item.number)}}},{prepend:withCtx(()=>[createVNode(VIcon,{icon:icon(item),color:color(item)},null,8,[`icon`,`color`])]),default:withCtx(()=>[createVNode(VListItemTitle,{class:`text-title-medium text-wrap`},{default:withCtx(()=>[createTextVNode(toDisplayString(item.title),1)]),_:2},1024),createBaseVNode(`div`,_hoisted_4,[createBaseVNode(`span`,null,`#`+toDisplayString(item.number)+` · `+toDisplayString(status(item))+` · `+toDisplayString(item.author?.login)+` · `+toDisplayString(date(item.updatedAt)),1),createBaseVNode(`span`,_hoisted_5,toDisplayString(item.headRefName)+` → `+toDisplayString(item.baseRefName),1)])]),_:2},1032,[`to`])],64)}),128))]),_:1})):(openBlock(),createBlock(VSheet,{key:1,rounded:`xl`,color:`surface-light`,class:`pa-8 text-center`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiSourcePull),size:`40`,class:`mb-3`},null,8,[`icon`]),_cache[19]||(_cache[19]=createBaseVNode(`h2`,{class:`text-title-large mb-2`},`No pull requests here`,-1)),_cache[20]||(_cache[20]=createBaseVNode(`p`,{class:`text-body-medium text-medium-emphasis`},`Try another filter, or turn your session into a pull request.`,-1))]),_:1})),createBaseVNode(`div`,_hoisted_6,[_ctx.$route.query.prCursor?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,height:`48`,onClick:_cache[10]||(_cache[10]=$event=>navigate({prCursor:void 0}))},{default:withCtx(()=>[..._cache[21]||(_cache[21]=[createTextVNode(`First page`,-1)])]),_:1})):createCommentVNode(``,true),unref(list).data.value?.pageInfo?.hasNextPage?(openBlock(),createBlock(VBtn,{key:1,variant:`tonal`,height:`48`,"append-icon":unref(mdiArrowRight),onClick:_cache[11]||(_cache[11]=$event=>navigate({prCursor:unref(list).data.value.pageInfo.endCursor}))},{default:withCtx(()=>[..._cache[22]||(_cache[22]=[createTextVNode(` Next page `,-1)])]),_:1},8,[`append-icon`])):createCommentVNode(``,true)])],64)):pr.value?(openBlock(),createElementBlock(Fragment,{key:4},[createBaseVNode(`div`,_hoisted_7,[createBaseVNode(`div`,_hoisted_8,[createVNode(VChip,{color:color(pr.value),"prepend-icon":icon(pr.value),variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(status(pr.value)),1)]),_:1},8,[`color`,`prepend-icon`]),createBaseVNode(`span`,_hoisted_9,`#`+toDisplayString(pr.value.number)+` · `+toDisplayString(pr.value.author?.login),1)]),createBaseVNode(`h2`,_hoisted_10,toDisplayString(pr.value.title),1),createBaseVNode(`div`,_hoisted_11,[createBaseVNode(`span`,null,toDisplayString(pr.value.changedFiles)+` files changed`,1),createBaseVNode(`span`,_hoisted_12,`+`+toDisplayString(pr.value.additions),1),createBaseVNode(`span`,_hoisted_13,`−`+toDisplayString(pr.value.deletions),1)])]),createVNode(VSheet,{rounded:`xl`,color:`surface-light`,class:`pa-5 d-flex flex-column ga-4`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_14,[createVNode(VIcon,{icon:unref(mdiSourceBranch),color:`primary`,class:`mt-1`},null,8,[`icon`]),createBaseVNode(`div`,_hoisted_15,[_cache[23]||(_cache[23]=createBaseVNode(`div`,{class:`text-label-large`},`Session source · Save destination`,-1)),createBaseVNode(`div`,_hoisted_16,toDisplayString(pr.value.headRepository?.nameWithOwner||`Deleted repository`)+`:`+toDisplayString(pr.value.headRefName),1),createBaseVNode(`div`,_hoisted_17,`Proposed into `+toDisplayString(repository.value)+`:`+toDisplayString(pr.value.baseRefName),1)])]),pr.value.state===`OPEN`?(openBlock(),createElementBlock(`p`,_hoisted_18,`Open an isolated session with this PR’s changes and description. Save pushes further work to its source branch.`)):createCommentVNode(``,true),pr.value.state===`OPEN`&&pr.value.unavailableReason?(openBlock(),createElementBlock(`p`,_hoisted_19,toDisplayString(pr.value.unavailableReason),1)):pr.value.state===`OPEN`&&!toolbar.value.canCreateSession?(openBlock(),createElementBlock(`p`,_hoisted_20,toDisplayString(toolbar.value.createSessionTitle),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_21,[pr.value.state===`OPEN`?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,rounded:`pill`,height:`48`,"prepend-icon":unref(mdiSourcePull),disabled:Boolean(pr.value.unavailableReason)||!toolbar.value.canCreateSession||toolbar.value.createSessionRunning,onClick:_cache[12]||(_cache[12]=$event=>assistantDialog.value=true)},{default:withCtx(()=>[..._cache[24]||(_cache[24]=[createTextVNode(` Open as session `,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):createCommentVNode(``,true),createVNode(VBtn,{href:pr.value.url,target:`_blank`,rel:`noopener noreferrer`,variant:`text`,height:`48`,"append-icon":unref(mdiOpenInNew)},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`View on GitHub`,-1)])]),_:1},8,[`href`,`append-icon`])])]),_:1}),createVNode(GithubPullRequestActions_default,{"pull-request":pr.value,"api-path":`${basePath.value}/${number.value}`,disabled:unref(detail).isFetching.value,onChanged:actionFinished},null,8,[`pull-request`,`api-path`,`disabled`]),createVNode(VSheet,{rounded:`xl`,border:``,class:`pa-5 pull-requests__description`},{default:withCtx(()=>[_cache[26]||(_cache[26]=createBaseVNode(`h3`,{class:`text-title-medium mb-4`},`Description`,-1)),pr.value.body?(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:0,blocks:description.value},null,8,[`blocks`])):(openBlock(),createElementBlock(`p`,_hoisted_22,`No description provided.`))]),_:1})],64)):createCommentVNode(``,true)],64)),available.value&&assistantDialog.value?(openBlock(),createBlock(Vibe64AssistantSessionDialog_default,{key:2,modelValue:assistantDialog.value,"onUpdate:modelValue":_cache[13]||(_cache[13]=$event=>assistantDialog.value=$event),toolbar:toolbar.value,onCreated:created},null,8,[`modelValue`,`toolbar`])):createCommentVNode(``,true),available.value?(openBlock(),createBlock(Vibe64CreatePullRequestDialog_default,{key:3,modelValue:createDialog.value,"onUpdate:modelValue":_cache[14]||(_cache[14]=$event=>createDialog.value=$event),"dashboard-context":__props.dashboardContext,onCreated:published},null,8,[`modelValue`,`dashboard-context`])):createCommentVNode(``,true)])}}};var GithubPullRequestsPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-f75e5bff`]]);var _sfc_main={__name:`index`,props:{dashboardContext:{type:Object,default:()=>({})}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(GithubPullRequestsPanel_default,{"dashboard-context":__props.dashboardContext},null,8,[`dashboard-context`])}}};export{_sfc_main as default};
@@ -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-DaAChLA8.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:`history`},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-BdwRwbxp.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:`history`},null,8,[`dashboard-context`])):createCommentVNode(``,true)}}};export{_sfc_main as default};
@@ -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-Ds8EDBZ2.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{t as VSelect}from"./VSelect-D3oLvCcB.js";import{t as VTextField}from"./VTextField-C0b_0cSa.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-DpSS-0z1.js";import{t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VAlert}from"./VAlert-gwuhYlYb.js";import{t as VCheckbox}from"./VCheckbox-DyCGSN0H.js";import{n as VRadio,t as VRadioGroup}from"./VRadioGroup-CAjNZwF7.js";import{t as VSwitch}from"./VSwitch-BxGuGypi.js";import{t as VTextarea}from"./VTextarea-B7sZd1JY.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-DrOiU8lJ.js";import{t as useCommand}from"./useCommand-nWFczmJy.js";import{C as VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX,O as projectSettingsQueryKey,b as VIBE64_PROJECT_CHANGED_EVENT,g as VIBE64_ENGINEERING_API_SUFFIX,h as VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX,l as PROJECT_SETTINGS_ENDPOINT,n as DEVELOPMENT_DATABASE_ENDPOINT,p as VIBE64_COLLABORATION_API_SUFFIX,r as ENGINEERING_ENDPOINT,t as COLLABORATION_ENDPOINT,u as PROMPT_HINTS_SETTINGS_ENDPOINT,w as engineeringSettingsQueryKey}from"./studioGateApi-BXHVBVEc.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{O as VIBE64_SESSION_CHANGED_EVENT,S as requestVibe64AccountConnectionsDialog}from"./index-B9P6KjvH.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-syuPcpGx.js";import{t as sessionListRealtimeShouldRefresh}from"./useVibe64SessionData-CGJXj3r7.js";var CONNECTED_CUSTOM_PACKAGE_TYPE=`custom`;var CONNECTED_PACKAGE_TYPES=Object.freeze([Object.freeze({value:`npm`,label:`npm (Node.js)`}),Object.freeze({value:`composer`,label:`Composer (PHP)`}),Object.freeze({value:`pip`,label:`pip (Python)`}),Object.freeze({value:`bundler`,label:`Bundler (Ruby)`}),Object.freeze({value:`gomod`,label:`Go modules`}),Object.freeze({value:`cargo`,label:`Cargo (Rust)`}),Object.freeze({value:`maven`,label:`Maven`}),Object.freeze({value:`gradle`,label:`Gradle`}),Object.freeze({value:`nuget`,label:`NuGet (.NET)`}),Object.freeze({value:CONNECTED_CUSTOM_PACKAGE_TYPE,label:`custom`})]);var CONNECTED_PACKAGE_TYPE_VALUES=Object.freeze(CONNECTED_PACKAGE_TYPES.map(type=>type.value));function connectedPackageTypeUsesScript(type){return type===CONNECTED_CUSTOM_PACKAGE_TYPE}var _hoisted_1$2={class:`project-settings__section`,"aria-labelledby":`connected-projects-title`};var _hoisted_2$1={class:`project-settings__content text-body-medium`};var _hoisted_3$1={key:0};var _hoisted_4$1={key:0};var _hoisted_5$1=[`disabled`];var _hoisted_6$1={class:`text-label-large`};var _hoisted_7$1={key:2};var _hoisted_8$1={class:`connection-actions`};var _sfc_main$2={__name:`ConnectedProjectsSettings`,props:{projectSlug:{type:String,required:true},state:{type:Object,default:()=>({})}},emits:[`saved`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const draft=ref([]);const baseline=ref(`[]`);const revision=ref(``);const saving=ref(false);const changed=computed(()=>JSON.stringify(draft.value)!==baseline.value);const stale=computed(()=>props.state.available&&revision.value!==props.state.revision);const relationships=[{label:`Dependency — a library or tool`,value:`dependency`},{label:`Composition — source assembled into this project`,value:`composition`}];const packageTypes=[{label:`Stack default`,value:``},...CONNECTED_PACKAGE_TYPES];function scriptAllowed(entry){return!entry.type||connectedPackageTypeUsesScript(entry.type)}function setPackageType(entry,value){if(value)entry.type=value;else delete entry.type;if(!scriptAllowed(entry))delete entry.script}function setScript(entry,value){if(value)entry.script=value;else delete entry.script}function resetDraft(){draft.value=(props.state.projects||[]).map(entry=>({...entry}));baseline.value=JSON.stringify(draft.value);revision.value=props.state.revision||``}let sourceIdentity=``;watch(()=>[props.projectSlug,props.state],()=>{if(!props.state.source)return;const identity=JSON.stringify([props.projectSlug,props.state.source]);if(identity!==sourceIdentity||!changed.value)resetDraft();sourceIdentity=identity},{immediate:true});const saveCommand=useCommand({access:`never`,apiSuffix:`/vibe64/settings/connections`,buildCommandOptions:()=>({method:`PUT`,path:scopedDevelopmentApiUrl(`/api/vibe64/settings/connections`,props.projectSlug)}),buildRawPayload:(_model,{context})=>context,fallbackRunError:`Connected projects could not be saved.`,messages:{error:`Connected projects could not be saved.`,success:`Connected projects saved in source.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.project.connections.save`,surfaceId:`app`,writeMethod:`PUT`});async function save(){if(saving.value||stale.value||!props.state.canEdit)return;saving.value=true;try{if(!await saveCommand.run({projects:draft.value.map(entry=>({...entry})),revision:revision.value,sessionId:props.state.source?.sessionId||``}))return;baseline.value=JSON.stringify(draft.value);emit(`saved`)}catch{}finally{saving.value=false}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$2,[_cache[6]||(_cache[6]=createBaseVNode(`div`,{class:`project-settings__section-copy text-body-medium`},[createBaseVNode(`h2`,{id:`connected-projects-title`,class:`text-title-medium font-weight-bold`},`Connected projects`),createBaseVNode(`p`,null,`Libraries and source projects you contribute to from this project.`),createBaseVNode(`p`,null,[createTextVNode(`Saved in this source checkout’s `),createBaseVNode(`code`,null,`vibe64.connections.json`),createTextVNode(`. Changes follow normal project Save.`)])],-1)),createBaseVNode(`div`,_hoisted_2$1,[!__props.state.available?(openBlock(),createElementBlock(`p`,_hoisted_3$1,toDisplayString(__props.state.unavailableReason||`Select a session to configure connected projects.`),1)):(openBlock(),createElementBlock(Fragment,{key:1},[!__props.state.exists?(openBlock(),createElementBlock(`p`,_hoisted_4$1,`No connection file yet. Add projects below, then save the list.`)):createCommentVNode(``,true),stale.value?(openBlock(),createBlock(VAlert,{key:1,type:`warning`,variant:`tonal`},{default:withCtx(()=>[_cache[2]||(_cache[2]=createTextVNode(` The saved list changed while you were editing. Reload the saved list and review your changes before saving. `,-1)),createVNode(VBtn,{variant:`text`,onClick:resetDraft},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Reload saved list`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(draft.value,(entry,index)=>{return openBlock(),createElementBlock(`fieldset`,{key:index,class:`connection-entry`,disabled:!__props.state.canEdit||saving.value},[createBaseVNode(`legend`,_hoisted_6$1,`Connected project `+toDisplayString(index+1),1),createVNode(VTextField,{disabled:!__props.state.canEdit||saving.value,modelValue:entry.name,"onUpdate:modelValue":$event=>entry.name=$event,label:`Name`,maxlength:`100`,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`modelValue`,`onUpdate:modelValue`]),createVNode(VTextField,{disabled:!__props.state.canEdit||saving.value,modelValue:entry.repository,"onUpdate:modelValue":$event=>entry.repository=$event,label:`GitHub repository URL`,placeholder:`https://github.com/owner/repository`,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`modelValue`,`onUpdate:modelValue`]),createVNode(VSelect,{disabled:!__props.state.canEdit||saving.value,modelValue:entry.relationship,"onUpdate:modelValue":$event=>entry.relationship=$event,label:`Relationship`,items:relationships,"item-title":`label`,"item-value":`value`,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`modelValue`,`onUpdate:modelValue`]),createVNode(VSelect,{disabled:!__props.state.canEdit||saving.value,"model-value":entry.type||``,"onUpdate:modelValue":$event=>setPackageType(entry,$event),label:`Package type`,items:packageTypes,"item-title":`label`,"item-value":`value`,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`model-value`,`onUpdate:modelValue`]),createVNode(VTextField,{disabled:!__props.state.canEdit||saving.value||!scriptAllowed(entry),"model-value":entry.script||``,"onUpdate:modelValue":$event=>setScript(entry,$event),label:`Preparation script (project-relative)`,placeholder:`tooling/prepare-native-worker.mjs`,maxlength:`1024`,hint:`Required for custom. Relative to this project's root; Stack declares the runtime.`,"persistent-hint":``,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`model-value`,`onUpdate:modelValue`]),createVNode(VBtn,{disabled:!__props.state.canEdit||saving.value,variant:`text`,"aria-label":`Remove ${entry.name||`connected project`}`,onClick:$event=>draft.value.splice(index,1)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Remove`,-1)])]),_:1},8,[`disabled`,`aria-label`,`onClick`])],8,_hoisted_5$1)}),128)),__props.state.exists&&!draft.value.length?(openBlock(),createElementBlock(`p`,_hoisted_7$1,`No connected projects.`)):createCommentVNode(``,true),_cache[5]||(_cache[5]=createBaseVNode(`p`,{class:`text-body-small`},`Removing a connection preserves its existing contributions and pending work.`,-1)),createBaseVNode(`div`,_hoisted_8$1,[createVNode(VBtn,{disabled:!__props.state.canEdit||saving.value||draft.value.length>=64,variant:`outlined`,onClick:_cache[0]||(_cache[0]=$event=>draft.value.push({name:``,repository:``,relationship:`dependency`}))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Add project`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:!__props.state.canEdit||saving.value||stale.value||!changed.value&&__props.state.exists,color:`primary`,variant:`flat`,onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?`Saving…`:`Save connected projects`),1)]),_:1},8,[`disabled`])])],64))])])}}};var ConnectedProjectsSettings_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-f2a13772`]]);var _hoisted_1$1={class:`project-settings`};var _hoisted_2={class:`project-settings__header`};var _hoisted_3={class:`project-settings__section`,"aria-labelledby":`engineering-approach-title`};var _hoisted_4={class:`project-settings__section-copy text-body-medium`};var _hoisted_5={key:0,class:`project-settings__scope text-label-medium`};var _hoisted_6={key:0,class:`project-settings__content text-body-medium`};var _hoisted_7={class:`project-settings__engineering-field`};var _hoisted_8={class:`project-settings__action text-body-small`};var _hoisted_9={key:1,class:`project-settings__action text-body-small`};var _hoisted_10={class:`project-settings__section`,"aria-labelledby":`development-database-title`};var _hoisted_11={class:`project-settings__section-copy text-body-medium`};var _hoisted_12={key:0};var _hoisted_13={key:1};var _hoisted_14={key:0,class:`project-settings__content text-body-medium`};var _hoisted_15={class:`project-settings__option`};var _hoisted_16={key:0,id:`development-database-session-reason`,class:`project-settings__option-support text-body-small`};var _hoisted_17={class:`project-settings__option`};var _hoisted_18={key:0,id:`development-database-project-reason`,class:`project-settings__option-support text-body-small`};var _hoisted_19={key:0,class:`project-settings__action text-body-small`};var _hoisted_20={class:`project-settings__action text-body-small`};var _hoisted_21={key:0};var _hoisted_22={key:1};var _hoisted_23={class:`project-settings__section`,"aria-labelledby":`ai-behaviour-title`};var _hoisted_24={class:`project-settings__section-copy text-body-medium`};var _hoisted_25={class:`project-settings__scope text-label-medium`};var _hoisted_26={class:`project-settings__content text-body-medium`};var _hoisted_27={class:`project-settings__ai-fields`};var _hoisted_28={class:`project-settings__action text-body-small`};var _hoisted_29={key:0};var _hoisted_30={key:1};var _hoisted_31={key:2};var _hoisted_32={class:`project-settings__section`,"aria-labelledby":`prompt-suggestions-title`};var _hoisted_33={class:`project-settings__content text-body-medium`};var _hoisted_34={class:`project-settings__action text-body-small`};var _hoisted_35={key:0,class:`project-settings__section`,"aria-labelledby":`repository-workflow-title`};var _hoisted_36={class:`project-settings__content text-body-medium`};var _hoisted_37={class:`project-settings__action text-body-small`};var _sfc_main$1={__name:`ProjectSettingsPanel`,setup(__props){const projectSlug=useVibe64ProjectSlug();const route=useRoute();const router=useRouter();const scopeDraft=ref(`session`);const sharedSessionsDraft=ref(false);const collaborationDraft=ref(normalizeCollaborationDraft());const savedCollaboration=ref(normalizeCollaborationDraft());const promptHintsDraft=ref(true);const savedPromptHints=ref(true);const requirePullRequest=ref(false);const engineeringProfileDraft=ref(``);const savedEngineeringProfile=ref(``);const routeSessionId=computed(()=>String(route.query.sessionId||``).trim());const resource=useEndpointResource({fallbackLoadError:`Project settings could not load.`,path:computed(()=>scopedDevelopmentApiUrl(PROJECT_SETTINGS_ENDPOINT,projectSlug.value)),queryKey:computed(()=>projectSettingsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,routeSessionId.value)),readQuery:computed(()=>routeSessionId.value?{sessionId:routeSessionId.value}:{}),refreshOnPull:true,requestRecoveryLabel:`Project settings`});const engineeringResource=useEndpointResource({fallbackLoadError:`Engineering approach could not load.`,path:computed(()=>scopedDevelopmentApiUrl(ENGINEERING_ENDPOINT,projectSlug.value)),queryKey:computed(()=>engineeringSettingsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,routeSessionId.value)),readQuery:computed(()=>routeSessionId.value?{sessionId:routeSessionId.value}:{}),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT,matches:()=>!engineeringSaveCommand.isRunning},refreshOnPull:true,requestRecoveryLabel:`Engineering approach`});const databaseSaveCommand=useCommand({access:`never`,apiSuffix:VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:DEVELOPMENT_DATABASE_ENDPOINT}),buildRawPayload:(_model,{context})=>({scope:context.scope,allowSharedDatabaseSessions:context.allowSharedDatabaseSessions}),fallbackRunError:`Development database choice could not be saved.`,messages:{error:`Development database choice could not be saved.`,success:`Development database choice saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.development-database.scope.save`,surfaceId:`app`,writeMethod:`PUT`});const collaborationSaveCommand=useCommand({access:`never`,apiSuffix:VIBE64_COLLABORATION_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:COLLABORATION_ENDPOINT}),buildRawPayload:(_model,{context})=>({...context.collaboration,...context.sessionId?{sessionId:context.sessionId}:{}}),fallbackRunError:`Collaboration guidance could not be saved.`,messages:{error:`Collaboration guidance could not be saved.`,success:`Collaboration guidance saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.collaboration.save`,surfaceId:`app`,writeMethod:`PUT`});const promptHintsSaveCommand=useCommand({access:`never`,apiSuffix:VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:PROMPT_HINTS_SETTINGS_ENDPOINT}),buildRawPayload:(_model,{context})=>({promptHints:context.promptHints}),fallbackRunError:`Prompt suggestions could not be saved.`,messages:{error:`Prompt suggestions could not be saved.`,success:`Prompt suggestions saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.prompt-hints.save`,surfaceId:`app`,writeMethod:`PUT`});const repositoryWorkflowCommand=useCommand({access:`never`,apiSuffix:`/vibe64/repository/workflow`,buildCommandOptions:()=>({method:`PUT`,path:scopedDevelopmentApiUrl(`/api/vibe64/repository/workflow`,projectSlug.value)}),buildRawPayload:(_model,{context})=>({requirePullRequest:context.requirePullRequest}),fallbackRunError:`Repository workflow could not be saved.`,messages:{error:`Repository workflow could not be saved.`,success:`Repository workflow saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.repository.workflow`,surfaceId:`app`,writeMethod:`PUT`});const repositoryWorkflow=computed(()=>resource.data.value?.repositoryWorkflow||{});watch(()=>repositoryWorkflow.value.requirePullRequest,value=>{requirePullRequest.value=value===true},{immediate:true});async function saveRepositoryWorkflow(){await repositoryWorkflowCommand.run({requirePullRequest:requirePullRequest.value});await resource.reload()}const engineeringSaveCommand=useCommand({access:`never`,apiSuffix:VIBE64_ENGINEERING_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:ENGINEERING_ENDPOINT}),buildRawPayload:(_model,{context})=>({profile:context.profile,...context.sessionId?{sessionId:context.sessionId}:{}}),fallbackRunError:`Engineering approach could not be saved.`,messages:{error:`Engineering approach could not be saved.`,success:`Engineering approach saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.engineering.profile.save`,surfaceId:`app`,writeMethod:`PUT`});const developmentDatabase=computed(()=>resource.data.value?.developmentDatabase||{});const managed=computed(()=>developmentDatabase.value.managed===true);const canChange=computed(()=>developmentDatabase.value.canChange===true);const disabledReason=computed(()=>String(developmentDatabase.value.disabledReason||``));const sessionScopeOption=computed(()=>developmentDatabase.value.options?.session||{});const projectScopeOption=computed(()=>developmentDatabase.value.options?.project||{});const sessionScopeAvailable=computed(()=>sessionScopeOption.value.available===true);const projectScopeAvailable=computed(()=>projectScopeOption.value.available===true);const sessionScopeReason=computed(()=>String(sessionScopeOption.value.disabledReason||``));const projectScopeReason=computed(()=>String(projectScopeOption.value.disabledReason||``));const scopeDraftAvailable=computed(()=>scopeDraft.value===`project`?projectScopeAvailable.value:sessionScopeAvailable.value);const collaboration=computed(()=>resource.data.value?.collaboration||{});const collaborationAvailable=computed(()=>collaboration.value.available===true);const collaborationCanEdit=computed(()=>collaboration.value.canEdit===true);const collaborationSourceLabel=computed(()=>collaboration.value.source?.rootKind===`session-source`?`This session's project source`:`This project source`);const collaborationUnavailableReason=computed(()=>String(collaboration.value.unavailableReason||`Collaboration guidance is not available for this source.`));const toneOptions=computed(()=>collaborationOptions(`tone`));const responseLengthOptions=computed(()=>collaborationOptions(`responseLength`));const experienceOptions=computed(()=>collaborationOptions(`experience`));const explanationStyleOptions=computed(()=>collaborationOptions(`explanationStyle`));const promptHints=computed(()=>resource.data.value?.promptHints||{});const promptHintsCanEdit=computed(()=>promptHints.value.canEdit===true);const engineering=computed(()=>engineeringResource.data.value?.engineering||{});const engineeringAvailable=computed(()=>engineering.value.available===true);const engineeringProfiles=computed(()=>Array.isArray(engineering.value.profiles)?engineering.value.profiles:[]);const engineeringSourceLabel=computed(()=>engineering.value.source?.rootKind===`session-source`?`This session's project source`:`This project source`);const engineeringUnavailableReason=computed(()=>String(engineering.value.unavailableReason||`An engineering profile is not available for this source.`));const selectedEngineeringDescription=computed(()=>String(engineeringProfiles.value.find(profile=>profile.id===engineeringProfileDraft.value)?.description||``));const engineeringStatusText=computed(()=>engineering.value.status===`defaulted`?`The focused default is active. Saving records the choice in genesis/engineering.md.`:`This choice is stored in genesis/engineering.md and follows the source.`);const loading=computed(()=>resource.isLoading.value===true||engineeringResource.isLoading.value===true);const initialLoading=computed(()=>loading.value&&(!resource.data.value||!engineeringResource.data.value));const loadError=computed(()=>String(resource.loadError.value||engineeringResource.loadError.value||``));const databaseSaving=computed(()=>databaseSaveCommand.isRunning===true);const collaborationSaving=ref(false);const promptHintsSaving=computed(()=>promptHintsSaveCommand.isRunning===true);const engineeringSaving=ref(false);const databaseChanged=computed(()=>managed.value&&(scopeDraft.value!==developmentDatabase.value.scope||sharedSessionsDraft.value!==(developmentDatabase.value.allowSharedDatabaseSessions===true)));const databaseSaveAllowed=computed(()=>scopeDraft.value===developmentDatabase.value.scope||canChange.value&&scopeDraftAvailable.value);const collaborationChanged=computed(()=>JSON.stringify(collaborationDraft.value)!==JSON.stringify(savedCollaboration.value));const promptHintsChanged=computed(()=>promptHintsDraft.value!==savedPromptHints.value);const engineeringChanged=computed(()=>engineeringAvailable.value&&Boolean(engineeringProfileDraft.value)&&engineeringProfileDraft.value!==savedEngineeringProfile.value);watch(()=>developmentDatabase.value.allowSharedDatabaseSessions,value=>{sharedSessionsDraft.value=value===true},{immediate:true});watch(()=>developmentDatabase.value.scope,scope=>{if([`project`,`session`].includes(scope))scopeDraft.value=scope},{immediate:true});let collaborationSource=null;watch([projectSlug,collaboration],([slug,value])=>{if(!value.source)return;const sourceChanged=!collaborationSource||collaborationSource.projectSlug!==slug||collaborationSource.rootKind!==value.source.rootKind||collaborationSource.sessionId!==value.source.sessionId;const next=normalizeCollaborationDraft(value);if(sourceChanged||!collaborationChanged.value)collaborationDraft.value=next;savedCollaboration.value={...next};collaborationSource={projectSlug:slug,...value.source}},{immediate:true});watch(()=>promptHints.value.enabled,value=>{const enabled=value!==false;if(!promptHintsChanged.value)promptHintsDraft.value=enabled;savedPromptHints.value=enabled},{immediate:true});let engineeringSource=null;watch([projectSlug,engineering],([slug,value])=>{if(!value.source)return;const sourceChanged=!engineeringSource||engineeringSource.projectSlug!==slug||engineeringSource.rootKind!==value.source.rootKind||engineeringSource.sessionId!==value.source.sessionId;const profile=String(value.profile?.id||``).trim();if(sourceChanged||engineeringProfileDraft.value===savedEngineeringProfile.value)engineeringProfileDraft.value=profile;savedEngineeringProfile.value=profile;engineeringSource={projectSlug:slug,...value.source};const sourceSessionId=String(value.source?.sessionId||``).trim();if(!routeSessionId.value&&sourceSessionId)router.replace({query:{...route.query,sessionId:sourceSessionId}})},{immediate:true});useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:sessionListRealtimeShouldRefresh,onEvent(){resource.reload();engineeringResource.reload()}});async function refresh(){await Promise.all([resource.reload(),engineeringResource.reload()])}function collaborationOptions(field=``){const choices=collaboration.value.choices?.[field];return(Array.isArray(choices)?choices:[]).flatMap(choice=>{const value=String(choice?.id||``).trim();const label=String(choice?.name||``).trim();return value&&label?[{label,value}]:[]})}function normalizeCollaborationDraft(value={}){return{tone:String(value?.tone||``),responseLength:String(value?.responseLength||``),experience:String(value?.experience||``),explanationStyle:String(value?.explanationStyle||``),requirements:String(value?.requirements||``)}}async function saveDatabase(){if(!databaseChanged.value||!databaseSaveAllowed.value||databaseSaving.value)return;await databaseSaveCommand.run({scope:scopeDraft.value,allowSharedDatabaseSessions:sharedSessionsDraft.value});await resource.reload()}async function saveCollaboration(){if(!collaborationChanged.value||!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value)return;collaborationSaving.value=true;try{try{await collaborationSaveCommand.run({collaboration:normalizeCollaborationDraft(collaborationDraft.value),sessionId:routeSessionId.value||String(collaboration.value.source?.sessionId||``).trim()})}catch{return}await resource.reload()}finally{collaborationSaving.value=false}}async function savePromptHints(){if(!promptHintsChanged.value||!promptHintsCanEdit.value||promptHintsSaving.value)return;await promptHintsSaveCommand.run({promptHints:promptHintsDraft.value});await resource.reload()}async function saveEngineeringProfile(){if(!engineeringChanged.value||engineeringSaving.value)return;engineeringSaving.value=true;try{await engineeringSaveCommand.run({profile:engineeringProfileDraft.value,sessionId:routeSessionId.value||String(engineering.value.source?.sessionId||``).trim()})}catch{}finally{try{await engineeringResource.reload()}finally{engineeringSaving.value=false}}}function openPersonalSettings(){requestVibe64AccountConnectionsDialog({refresh:false,section:`profile`})}function reloadPage(){if(typeof window!==`undefined`)window.location.reload()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$1,[createBaseVNode(`header`,_hoisted_2,[_cache[11]||(_cache[11]=createBaseVNode(`div`,null,[createBaseVNode(`h1`,{class:`text-headline-small font-weight-bold ma-0`},`Project settings`),createBaseVNode(`p`,{class:`text-body-medium`},`Choose how you and your AI work on this project.`)],-1)),createVNode(VBtn,{class:`project-settings__refresh`,disabled:loading.value,height:`48`,type:`button`,variant:`text`,onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`])]),initialLoading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:0,label:`Project settings`,loading:loading.value,message:loadError.value||`Loading project settings.`,"min-height":`12rem`,onReload:reloadPage,onRetry:refresh},null,8,[`loading`,`message`])):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(ConnectedProjectsSettings_default,{"project-slug":unref(projectSlug),state:unref(resource).data.value?.connectedProjects,onSaved:_cache[0]||(_cache[0]=$event=>unref(resource).reload())},null,8,[`project-slug`,`state`]),createBaseVNode(`section`,_hoisted_3,[createBaseVNode(`div`,_hoisted_4,[engineeringAvailable.value?(openBlock(),createElementBlock(`p`,_hoisted_5,toDisplayString(engineeringSourceLabel.value),1)):createCommentVNode(``,true),_cache[12]||(_cache[12]=createBaseVNode(`h2`,{id:`engineering-approach-title`,class:`text-title-medium font-weight-bold`},`Engineering approach`,-1)),_cache[13]||(_cache[13]=createBaseVNode(`p`,null,` Choose how cautiously the AI changes your software. Every profile keeps changes simple and asks before adding necessary complexity. `,-1))]),engineeringAvailable.value?(openBlock(),createElementBlock(`div`,_hoisted_6,[createBaseVNode(`div`,_hoisted_7,[createVNode(VSelect,{modelValue:engineeringProfileDraft.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>engineeringProfileDraft.value=$event),disabled:engineeringSaving.value,density:`comfortable`,"hide-details":`auto`,hint:selectedEngineeringDescription.value,"item-title":`name`,"item-value":`id`,items:engineeringProfiles.value,label:`Engineering profile`,"persistent-hint":``,variant:`outlined`},null,8,[`modelValue`,`disabled`,`hint`,`items`])]),createBaseVNode(`div`,_hoisted_8,[createBaseVNode(`p`,null,toDisplayString(engineeringStatusText.value),1),createVNode(VBtn,{disabled:!engineeringChanged.value||engineeringSaving.value,color:engineeringChanged.value?`primary`:void 0,height:`48`,type:`button`,variant:`flat`,onClick:saveEngineeringProfile},{default:withCtx(()=>[createTextVNode(toDisplayString(engineeringSaving.value?`Saving…`:`Save engineering approach`),1)]),_:1},8,[`disabled`,`color`])])])):(openBlock(),createElementBlock(`div`,_hoisted_9,[createBaseVNode(`p`,null,toDisplayString(engineeringUnavailableReason.value),1)]))]),createBaseVNode(`section`,_hoisted_10,[createBaseVNode(`div`,_hoisted_11,[_cache[14]||(_cache[14]=createBaseVNode(`h2`,{id:`development-database-title`,class:`text-title-medium font-weight-bold`},`Development database`,-1)),managed.value?(openBlock(),createElementBlock(`p`,_hoisted_12,` Share development data across sessions or keep a separate database for each. `)):(openBlock(),createElementBlock(`p`,_hoisted_13,` This Vibe64 installation does not manage development databases. The application receives its database connection through the project Env configuration. `))]),managed.value?(openBlock(),createElementBlock(`div`,_hoisted_14,[createVNode(VRadioGroup,{modelValue:scopeDraft.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>scopeDraft.value=$event),"aria-labelledby":`development-database-title`,class:`project-settings__options`,disabled:databaseSaving.value,"hide-details":``},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_15,[createVNode(VRadio,{class:`py-1`,"aria-describedby":sessionScopeReason.value?`development-database-session-reason`:void 0,disabled:!sessionScopeAvailable.value,label:`A separate database for each session`,value:`session`},null,8,[`aria-describedby`,`disabled`]),sessionScopeReason.value?(openBlock(),createElementBlock(`p`,_hoisted_16,toDisplayString(sessionScopeReason.value),1)):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_17,[createVNode(VRadio,{class:`py-1`,"aria-describedby":projectScopeReason.value?`development-database-project-reason`:void 0,disabled:!projectScopeAvailable.value,label:`One database shared by this project`,value:`project`},null,8,[`aria-describedby`,`disabled`]),projectScopeReason.value?(openBlock(),createElementBlock(`p`,_hoisted_18,toDisplayString(projectScopeReason.value),1)):createCommentVNode(``,true)])]),_:1},8,[`modelValue`,`disabled`]),scopeDraft.value===`project`?(openBlock(),createElementBlock(`div`,_hoisted_19,[createVNode(VCheckbox,{modelValue:sharedSessionsDraft.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>sharedSessionsDraft.value=$event),label:`Allow multiple sessions with this shared database`,disabled:databaseSaving.value,"hide-details":``},null,8,[`modelValue`,`disabled`]),_cache[15]||(_cache[15]=createBaseVNode(`p`,null,`All sessions will share the same database.`,-1))])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_20,[disabledReason.value?(openBlock(),createElementBlock(`p`,_hoisted_21,toDisplayString(disabledReason.value),1)):scopeDraft.value===`project`?(openBlock(),createElementBlock(`p`,_hoisted_22,` Data and schema changes will be visible to every project session and remain after a session is archived. `)):createCommentVNode(``,true),createVNode(VBtn,{disabled:!databaseChanged.value||!databaseSaveAllowed.value||databaseSaving.value,color:databaseChanged.value?`primary`:void 0,height:`48`,type:`button`,variant:`flat`,onClick:saveDatabase},{default:withCtx(()=>[createTextVNode(toDisplayString(databaseSaving.value?`Saving…`:`Save database choice`),1)]),_:1},8,[`disabled`,`color`])])])):createCommentVNode(``,true)]),createBaseVNode(`section`,_hoisted_23,[createBaseVNode(`div`,_hoisted_24,[createBaseVNode(`p`,_hoisted_25,toDisplayString(collaborationSourceLabel.value),1),_cache[17]||(_cache[17]=createBaseVNode(`h2`,{id:`ai-behaviour-title`,class:`text-title-medium font-weight-bold`},`AI behaviour`,-1)),_cache[18]||(_cache[18]=createBaseVNode(`p`,null,` Set the tone, level of detail and project requirements for your conversations. These choices follow your project source. `,-1)),createVNode(VBtn,{class:`project-settings__account-link`,height:`48`,type:`button`,variant:`text`,onClick:openPersonalSettings},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(` Set your Vibe64 name `,-1)])]),_:1})]),createBaseVNode(`div`,_hoisted_26,[createBaseVNode(`div`,_hoisted_27,[createVNode(VSelect,{modelValue:collaborationDraft.value.tone,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>collaborationDraft.value.tone=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:`comfortable`,"hide-details":``,"item-title":`label`,"item-value":`value`,items:toneOptions.value,label:`Tone`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`items`]),createVNode(VSelect,{modelValue:collaborationDraft.value.responseLength,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>collaborationDraft.value.responseLength=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:`comfortable`,"hide-details":``,"item-title":`label`,"item-value":`value`,items:responseLengthOptions.value,label:`Response length`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`items`]),createVNode(VSelect,{modelValue:collaborationDraft.value.experience,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>collaborationDraft.value.experience=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:`comfortable`,"hide-details":``,"item-title":`label`,"item-value":`value`,items:experienceOptions.value,label:`Experience level`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`items`]),createVNode(VSelect,{modelValue:collaborationDraft.value.explanationStyle,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>collaborationDraft.value.explanationStyle=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:`comfortable`,"hide-details":``,"item-title":`label`,"item-value":`value`,items:explanationStyleOptions.value,label:`Explanation style`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`items`]),createVNode(VTextarea,{modelValue:collaborationDraft.value.requirements,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>collaborationDraft.value.requirements=$event),class:`project-settings__ai-note`,disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,"auto-grow":``,density:`comfortable`,"hide-details":``,label:`Project requirements (optional)`,placeholder:`For example: use Australian English.`,rows:`6`,"max-rows":`18`,variant:`outlined`},null,8,[`modelValue`,`disabled`])]),createBaseVNode(`div`,_hoisted_28,[!collaborationAvailable.value?(openBlock(),createElementBlock(`p`,_hoisted_29,toDisplayString(collaborationUnavailableReason.value),1)):!collaborationCanEdit.value?(openBlock(),createElementBlock(`p`,_hoisted_30,` Only the project owner can change these controls in Settings. Anyone who can edit this source can change genesis/collaboration.md directly. `)):(openBlock(),createElementBlock(`p`,_hoisted_31,` Applies when a conversation next starts or refreshes its context. Existing history and instructions in an active Codex conversation stay as they are. `)),createVNode(VBtn,{disabled:!collaborationChanged.value||!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,color:collaborationChanged.value?`primary`:void 0,height:`48`,type:`button`,variant:`flat`,onClick:saveCollaboration},{default:withCtx(()=>[createTextVNode(toDisplayString(collaborationSaving.value?`Saving…`:`Save collaboration`),1)]),_:1},8,[`disabled`,`color`])])])]),createBaseVNode(`section`,_hoisted_32,[_cache[19]||(_cache[19]=createBaseVNode(`div`,{class:`project-settings__section-copy text-body-medium`},[createBaseVNode(`h2`,{id:`prompt-suggestions-title`,class:`text-title-medium font-weight-bold`},`Prompt suggestions`),createBaseVNode(`p`,null,`Get ideas for what to ask next. This Vibe64 setting does not change your AI's instructions.`)],-1)),createBaseVNode(`div`,_hoisted_33,[createVNode(VSwitch,{modelValue:promptHintsDraft.value,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>promptHintsDraft.value=$event),class:`project-settings__ai-hints`,color:`primary`,disabled:!promptHintsCanEdit.value||promptHintsSaving.value,"hide-details":``,label:`Suggest useful next prompts`},null,8,[`modelValue`,`disabled`]),createBaseVNode(`div`,_hoisted_34,[createVNode(VBtn,{disabled:!promptHintsChanged.value||!promptHintsCanEdit.value||promptHintsSaving.value,color:promptHintsChanged.value?`primary`:void 0,height:`48`,type:`button`,variant:`flat`,onClick:savePromptHints},{default:withCtx(()=>[createTextVNode(toDisplayString(promptHintsSaving.value?`Saving…`:`Save prompt suggestions`),1)]),_:1},8,[`disabled`,`color`])])])]),repositoryWorkflow.value.available?(openBlock(),createElementBlock(`section`,_hoisted_35,[_cache[22]||(_cache[22]=createBaseVNode(`div`,{class:`project-settings__section-copy text-body-medium`},[createBaseVNode(`h2`,{id:`repository-workflow-title`,class:`text-title-medium font-weight-bold`},`Git workflow`),createBaseVNode(`p`,null,`Choose how Vibe64 saves changes to this repository.`)],-1)),createBaseVNode(`div`,_hoisted_36,[createVNode(VRadioGroup,{modelValue:requirePullRequest.value,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>requirePullRequest.value=$event),label:`GitHub save workflow`,color:`primary`,"hide-details":``,disabled:!repositoryWorkflow.value.canEdit||unref(repositoryWorkflowCommand).isRunning},{default:withCtx(()=>[createVNode(VRadio,{label:`Allow direct commits and pushes`,value:false,class:`py-1`}),createVNode(VRadio,{label:`Require pull requests`,value:true,class:`py-1`})]),_:1},8,[`modelValue`,`disabled`]),_cache[20]||(_cache[20]=createBaseVNode(`p`,null,`GitHub branch rules still apply. Requiring pull requests makes Create draft PR the main Save action until a session is attached to a PR.`,-1)),_cache[21]||(_cache[21]=createBaseVNode(`p`,null,`This setting controls Vibe64's Save actions. GitHub rules control pushes from terminals and other tools.`,-1)),createBaseVNode(`div`,_hoisted_37,[createVNode(VBtn,{color:requirePullRequest.value!==repositoryWorkflow.value.requirePullRequest?`primary`:void 0,height:`48`,variant:`flat`,disabled:!repositoryWorkflow.value.canEdit||unref(repositoryWorkflowCommand).isRunning||requirePullRequest.value===repositoryWorkflow.value.requirePullRequest,onClick:saveRepositoryWorkflow},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(repositoryWorkflowCommand).isRunning?`Saving…`:`Save repository workflow`),1)]),_:1},8,[`color`,`disabled`])])])])):createCommentVNode(``,true)],64))])}}};var ProjectSettingsPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-0efe387b`]]);var _hoisted_1={class:`vibe64-dashboard-page`};var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(ProjectSettingsPanel_default)])}}};var settings_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-d998a641`]]);export{settings_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{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{t as VSelect}from"./VSelect-D3oLvCcB.js";import{t as VTextField}from"./VTextField-C0b_0cSa.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-DpSS-0z1.js";import{t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VAlert}from"./VAlert-gwuhYlYb.js";import{t as VCheckbox}from"./VCheckbox-DyCGSN0H.js";import{n as VRadio,t as VRadioGroup}from"./VRadioGroup-CAjNZwF7.js";import{t as VSwitch}from"./VSwitch-BxGuGypi.js";import{t as VTextarea}from"./VTextarea-B7sZd1JY.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-DrOiU8lJ.js";import{t as useCommand}from"./useCommand-nWFczmJy.js";import{C as VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX,O as projectSettingsQueryKey,b as VIBE64_PROJECT_CHANGED_EVENT,g as VIBE64_ENGINEERING_API_SUFFIX,h as VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX,l as PROJECT_SETTINGS_ENDPOINT,n as DEVELOPMENT_DATABASE_ENDPOINT,p as VIBE64_COLLABORATION_API_SUFFIX,r as ENGINEERING_ENDPOINT,t as COLLABORATION_ENDPOINT,u as PROMPT_HINTS_SETTINGS_ENDPOINT,w as engineeringSettingsQueryKey}from"./studioGateApi-BXHVBVEc.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{O as VIBE64_SESSION_CHANGED_EVENT,S as requestVibe64AccountConnectionsDialog}from"./index-Mxalhei8.js";import{t as Vibe64AsyncModuleState_default}from"./Vibe64AsyncModuleState-syuPcpGx.js";import{t as sessionListRealtimeShouldRefresh}from"./useVibe64SessionData-CnDOFFHb.js";var CONNECTED_CUSTOM_PACKAGE_TYPE=`custom`;var CONNECTED_PACKAGE_TYPES=Object.freeze([Object.freeze({value:`npm`,label:`npm (Node.js)`}),Object.freeze({value:`composer`,label:`Composer (PHP)`}),Object.freeze({value:`pip`,label:`pip (Python)`}),Object.freeze({value:`bundler`,label:`Bundler (Ruby)`}),Object.freeze({value:`gomod`,label:`Go modules`}),Object.freeze({value:`cargo`,label:`Cargo (Rust)`}),Object.freeze({value:`maven`,label:`Maven`}),Object.freeze({value:`gradle`,label:`Gradle`}),Object.freeze({value:`nuget`,label:`NuGet (.NET)`}),Object.freeze({value:CONNECTED_CUSTOM_PACKAGE_TYPE,label:`custom`})]);var CONNECTED_PACKAGE_TYPE_VALUES=Object.freeze(CONNECTED_PACKAGE_TYPES.map(type=>type.value));function connectedPackageTypeUsesScript(type){return type===CONNECTED_CUSTOM_PACKAGE_TYPE}var _hoisted_1$2={class:`project-settings__section`,"aria-labelledby":`connected-projects-title`};var _hoisted_2$1={class:`project-settings__content text-body-medium`};var _hoisted_3$1={key:0};var _hoisted_4$1={key:0};var _hoisted_5$1=[`disabled`];var _hoisted_6$1={class:`text-label-large`};var _hoisted_7$1={key:2};var _hoisted_8$1={class:`connection-actions`};var _sfc_main$2={__name:`ConnectedProjectsSettings`,props:{projectSlug:{type:String,required:true},state:{type:Object,default:()=>({})}},emits:[`saved`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const draft=ref([]);const baseline=ref(`[]`);const revision=ref(``);const saving=ref(false);const changed=computed(()=>JSON.stringify(draft.value)!==baseline.value);const stale=computed(()=>props.state.available&&revision.value!==props.state.revision);const relationships=[{label:`Dependency — a library or tool`,value:`dependency`},{label:`Composition — source assembled into this project`,value:`composition`}];const packageTypes=[{label:`Stack default`,value:``},...CONNECTED_PACKAGE_TYPES];function scriptAllowed(entry){return!entry.type||connectedPackageTypeUsesScript(entry.type)}function setPackageType(entry,value){if(value)entry.type=value;else delete entry.type;if(!scriptAllowed(entry))delete entry.script}function setScript(entry,value){if(value)entry.script=value;else delete entry.script}function resetDraft(){draft.value=(props.state.projects||[]).map(entry=>({...entry}));baseline.value=JSON.stringify(draft.value);revision.value=props.state.revision||``}let sourceIdentity=``;watch(()=>[props.projectSlug,props.state],()=>{if(!props.state.source)return;const identity=JSON.stringify([props.projectSlug,props.state.source]);if(identity!==sourceIdentity||!changed.value)resetDraft();sourceIdentity=identity},{immediate:true});const saveCommand=useCommand({access:`never`,apiSuffix:`/vibe64/settings/connections`,buildCommandOptions:()=>({method:`PUT`,path:scopedDevelopmentApiUrl(`/api/vibe64/settings/connections`,props.projectSlug)}),buildRawPayload:(_model,{context})=>context,fallbackRunError:`Connected projects could not be saved.`,messages:{error:`Connected projects could not be saved.`,success:`Connected projects saved in source.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.project.connections.save`,surfaceId:`app`,writeMethod:`PUT`});async function save(){if(saving.value||stale.value||!props.state.canEdit)return;saving.value=true;try{if(!await saveCommand.run({projects:draft.value.map(entry=>({...entry})),revision:revision.value,sessionId:props.state.source?.sessionId||``}))return;baseline.value=JSON.stringify(draft.value);emit(`saved`)}catch{}finally{saving.value=false}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$2,[_cache[6]||(_cache[6]=createBaseVNode(`div`,{class:`project-settings__section-copy text-body-medium`},[createBaseVNode(`h2`,{id:`connected-projects-title`,class:`text-title-medium font-weight-bold`},`Connected projects`),createBaseVNode(`p`,null,`Libraries and source projects you contribute to from this project.`),createBaseVNode(`p`,null,[createTextVNode(`Saved in this source checkout’s `),createBaseVNode(`code`,null,`vibe64.connections.json`),createTextVNode(`. Changes follow normal project Save.`)])],-1)),createBaseVNode(`div`,_hoisted_2$1,[!__props.state.available?(openBlock(),createElementBlock(`p`,_hoisted_3$1,toDisplayString(__props.state.unavailableReason||`Select a session to configure connected projects.`),1)):(openBlock(),createElementBlock(Fragment,{key:1},[!__props.state.exists?(openBlock(),createElementBlock(`p`,_hoisted_4$1,`No connection file yet. Add projects below, then save the list.`)):createCommentVNode(``,true),stale.value?(openBlock(),createBlock(VAlert,{key:1,type:`warning`,variant:`tonal`},{default:withCtx(()=>[_cache[2]||(_cache[2]=createTextVNode(` The saved list changed while you were editing. Reload the saved list and review your changes before saving. `,-1)),createVNode(VBtn,{variant:`text`,onClick:resetDraft},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Reload saved list`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(draft.value,(entry,index)=>{return openBlock(),createElementBlock(`fieldset`,{key:index,class:`connection-entry`,disabled:!__props.state.canEdit||saving.value},[createBaseVNode(`legend`,_hoisted_6$1,`Connected project `+toDisplayString(index+1),1),createVNode(VTextField,{disabled:!__props.state.canEdit||saving.value,modelValue:entry.name,"onUpdate:modelValue":$event=>entry.name=$event,label:`Name`,maxlength:`100`,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`modelValue`,`onUpdate:modelValue`]),createVNode(VTextField,{disabled:!__props.state.canEdit||saving.value,modelValue:entry.repository,"onUpdate:modelValue":$event=>entry.repository=$event,label:`GitHub repository URL`,placeholder:`https://github.com/owner/repository`,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`modelValue`,`onUpdate:modelValue`]),createVNode(VSelect,{disabled:!__props.state.canEdit||saving.value,modelValue:entry.relationship,"onUpdate:modelValue":$event=>entry.relationship=$event,label:`Relationship`,items:relationships,"item-title":`label`,"item-value":`value`,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`modelValue`,`onUpdate:modelValue`]),createVNode(VSelect,{disabled:!__props.state.canEdit||saving.value,"model-value":entry.type||``,"onUpdate:modelValue":$event=>setPackageType(entry,$event),label:`Package type`,items:packageTypes,"item-title":`label`,"item-value":`value`,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`model-value`,`onUpdate:modelValue`]),createVNode(VTextField,{disabled:!__props.state.canEdit||saving.value||!scriptAllowed(entry),"model-value":entry.script||``,"onUpdate:modelValue":$event=>setScript(entry,$event),label:`Preparation script (project-relative)`,placeholder:`tooling/prepare-native-worker.mjs`,maxlength:`1024`,hint:`Required for custom. Relative to this project's root; Stack declares the runtime.`,"persistent-hint":``,variant:`outlined`,"hide-details":`auto`},null,8,[`disabled`,`model-value`,`onUpdate:modelValue`]),createVNode(VBtn,{disabled:!__props.state.canEdit||saving.value,variant:`text`,"aria-label":`Remove ${entry.name||`connected project`}`,onClick:$event=>draft.value.splice(index,1)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Remove`,-1)])]),_:1},8,[`disabled`,`aria-label`,`onClick`])],8,_hoisted_5$1)}),128)),__props.state.exists&&!draft.value.length?(openBlock(),createElementBlock(`p`,_hoisted_7$1,`No connected projects.`)):createCommentVNode(``,true),_cache[5]||(_cache[5]=createBaseVNode(`p`,{class:`text-body-small`},`Removing a connection preserves its existing contributions and pending work.`,-1)),createBaseVNode(`div`,_hoisted_8$1,[createVNode(VBtn,{disabled:!__props.state.canEdit||saving.value||draft.value.length>=64,variant:`outlined`,onClick:_cache[0]||(_cache[0]=$event=>draft.value.push({name:``,repository:``,relationship:`dependency`}))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Add project`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:!__props.state.canEdit||saving.value||stale.value||!changed.value&&__props.state.exists,color:`primary`,variant:`flat`,onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?`Saving…`:`Save connected projects`),1)]),_:1},8,[`disabled`])])],64))])])}}};var ConnectedProjectsSettings_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-f2a13772`]]);var _hoisted_1$1={class:`project-settings`};var _hoisted_2={class:`project-settings__header`};var _hoisted_3={class:`project-settings__section`,"aria-labelledby":`engineering-approach-title`};var _hoisted_4={class:`project-settings__section-copy text-body-medium`};var _hoisted_5={key:0,class:`project-settings__scope text-label-medium`};var _hoisted_6={key:0,class:`project-settings__content text-body-medium`};var _hoisted_7={class:`project-settings__engineering-field`};var _hoisted_8={class:`project-settings__action text-body-small`};var _hoisted_9={key:1,class:`project-settings__action text-body-small`};var _hoisted_10={class:`project-settings__section`,"aria-labelledby":`development-database-title`};var _hoisted_11={class:`project-settings__section-copy text-body-medium`};var _hoisted_12={key:0};var _hoisted_13={key:1};var _hoisted_14={key:0,class:`project-settings__content text-body-medium`};var _hoisted_15={class:`project-settings__option`};var _hoisted_16={key:0,id:`development-database-session-reason`,class:`project-settings__option-support text-body-small`};var _hoisted_17={class:`project-settings__option`};var _hoisted_18={key:0,id:`development-database-project-reason`,class:`project-settings__option-support text-body-small`};var _hoisted_19={key:0,class:`project-settings__action text-body-small`};var _hoisted_20={class:`project-settings__action text-body-small`};var _hoisted_21={key:0};var _hoisted_22={key:1};var _hoisted_23={class:`project-settings__section`,"aria-labelledby":`ai-behaviour-title`};var _hoisted_24={class:`project-settings__section-copy text-body-medium`};var _hoisted_25={class:`project-settings__scope text-label-medium`};var _hoisted_26={class:`project-settings__content text-body-medium`};var _hoisted_27={class:`project-settings__ai-fields`};var _hoisted_28={class:`project-settings__action text-body-small`};var _hoisted_29={key:0};var _hoisted_30={key:1};var _hoisted_31={key:2};var _hoisted_32={class:`project-settings__section`,"aria-labelledby":`prompt-suggestions-title`};var _hoisted_33={class:`project-settings__content text-body-medium`};var _hoisted_34={class:`project-settings__action text-body-small`};var _hoisted_35={key:0,class:`project-settings__section`,"aria-labelledby":`repository-workflow-title`};var _hoisted_36={class:`project-settings__content text-body-medium`};var _hoisted_37={class:`project-settings__action text-body-small`};var _sfc_main$1={__name:`ProjectSettingsPanel`,setup(__props){const projectSlug=useVibe64ProjectSlug();const route=useRoute();const router=useRouter();const scopeDraft=ref(`session`);const sharedSessionsDraft=ref(false);const collaborationDraft=ref(normalizeCollaborationDraft());const savedCollaboration=ref(normalizeCollaborationDraft());const promptHintsDraft=ref(true);const savedPromptHints=ref(true);const requirePullRequest=ref(false);const engineeringProfileDraft=ref(``);const savedEngineeringProfile=ref(``);const routeSessionId=computed(()=>String(route.query.sessionId||``).trim());const resource=useEndpointResource({fallbackLoadError:`Project settings could not load.`,path:computed(()=>scopedDevelopmentApiUrl(PROJECT_SETTINGS_ENDPOINT,projectSlug.value)),queryKey:computed(()=>projectSettingsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,routeSessionId.value)),readQuery:computed(()=>routeSessionId.value?{sessionId:routeSessionId.value}:{}),refreshOnPull:true,requestRecoveryLabel:`Project settings`});const engineeringResource=useEndpointResource({fallbackLoadError:`Engineering approach could not load.`,path:computed(()=>scopedDevelopmentApiUrl(ENGINEERING_ENDPOINT,projectSlug.value)),queryKey:computed(()=>engineeringSettingsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,routeSessionId.value)),readQuery:computed(()=>routeSessionId.value?{sessionId:routeSessionId.value}:{}),realtime:{event:VIBE64_PROJECT_CHANGED_EVENT,matches:()=>!engineeringSaveCommand.isRunning},refreshOnPull:true,requestRecoveryLabel:`Engineering approach`});const databaseSaveCommand=useCommand({access:`never`,apiSuffix:VIBE64_DEVELOPMENT_DATABASE_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:DEVELOPMENT_DATABASE_ENDPOINT}),buildRawPayload:(_model,{context})=>({scope:context.scope,allowSharedDatabaseSessions:context.allowSharedDatabaseSessions}),fallbackRunError:`Development database choice could not be saved.`,messages:{error:`Development database choice could not be saved.`,success:`Development database choice saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.development-database.scope.save`,surfaceId:`app`,writeMethod:`PUT`});const collaborationSaveCommand=useCommand({access:`never`,apiSuffix:VIBE64_COLLABORATION_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:COLLABORATION_ENDPOINT}),buildRawPayload:(_model,{context})=>({...context.collaboration,...context.sessionId?{sessionId:context.sessionId}:{}}),fallbackRunError:`Collaboration guidance could not be saved.`,messages:{error:`Collaboration guidance could not be saved.`,success:`Collaboration guidance saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.collaboration.save`,surfaceId:`app`,writeMethod:`PUT`});const promptHintsSaveCommand=useCommand({access:`never`,apiSuffix:VIBE64_PROMPT_HINTS_SETTINGS_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:PROMPT_HINTS_SETTINGS_ENDPOINT}),buildRawPayload:(_model,{context})=>({promptHints:context.promptHints}),fallbackRunError:`Prompt suggestions could not be saved.`,messages:{error:`Prompt suggestions could not be saved.`,success:`Prompt suggestions saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.prompt-hints.save`,surfaceId:`app`,writeMethod:`PUT`});const repositoryWorkflowCommand=useCommand({access:`never`,apiSuffix:`/vibe64/repository/workflow`,buildCommandOptions:()=>({method:`PUT`,path:scopedDevelopmentApiUrl(`/api/vibe64/repository/workflow`,projectSlug.value)}),buildRawPayload:(_model,{context})=>({requirePullRequest:context.requirePullRequest}),fallbackRunError:`Repository workflow could not be saved.`,messages:{error:`Repository workflow could not be saved.`,success:`Repository workflow saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.repository.workflow`,surfaceId:`app`,writeMethod:`PUT`});const repositoryWorkflow=computed(()=>resource.data.value?.repositoryWorkflow||{});watch(()=>repositoryWorkflow.value.requirePullRequest,value=>{requirePullRequest.value=value===true},{immediate:true});async function saveRepositoryWorkflow(){await repositoryWorkflowCommand.run({requirePullRequest:requirePullRequest.value});await resource.reload()}const engineeringSaveCommand=useCommand({access:`never`,apiSuffix:VIBE64_ENGINEERING_API_SUFFIX,buildCommandOptions:()=>({method:`PUT`,path:ENGINEERING_ENDPOINT}),buildRawPayload:(_model,{context})=>({profile:context.profile,...context.sessionId?{sessionId:context.sessionId}:{}}),fallbackRunError:`Engineering approach could not be saved.`,messages:{error:`Engineering approach could not be saved.`,success:`Engineering approach saved.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.engineering.profile.save`,surfaceId:`app`,writeMethod:`PUT`});const developmentDatabase=computed(()=>resource.data.value?.developmentDatabase||{});const managed=computed(()=>developmentDatabase.value.managed===true);const canChange=computed(()=>developmentDatabase.value.canChange===true);const disabledReason=computed(()=>String(developmentDatabase.value.disabledReason||``));const sessionScopeOption=computed(()=>developmentDatabase.value.options?.session||{});const projectScopeOption=computed(()=>developmentDatabase.value.options?.project||{});const sessionScopeAvailable=computed(()=>sessionScopeOption.value.available===true);const projectScopeAvailable=computed(()=>projectScopeOption.value.available===true);const sessionScopeReason=computed(()=>String(sessionScopeOption.value.disabledReason||``));const projectScopeReason=computed(()=>String(projectScopeOption.value.disabledReason||``));const scopeDraftAvailable=computed(()=>scopeDraft.value===`project`?projectScopeAvailable.value:sessionScopeAvailable.value);const collaboration=computed(()=>resource.data.value?.collaboration||{});const collaborationAvailable=computed(()=>collaboration.value.available===true);const collaborationCanEdit=computed(()=>collaboration.value.canEdit===true);const collaborationSourceLabel=computed(()=>collaboration.value.source?.rootKind===`session-source`?`This session's project source`:`This project source`);const collaborationUnavailableReason=computed(()=>String(collaboration.value.unavailableReason||`Collaboration guidance is not available for this source.`));const toneOptions=computed(()=>collaborationOptions(`tone`));const responseLengthOptions=computed(()=>collaborationOptions(`responseLength`));const experienceOptions=computed(()=>collaborationOptions(`experience`));const explanationStyleOptions=computed(()=>collaborationOptions(`explanationStyle`));const promptHints=computed(()=>resource.data.value?.promptHints||{});const promptHintsCanEdit=computed(()=>promptHints.value.canEdit===true);const engineering=computed(()=>engineeringResource.data.value?.engineering||{});const engineeringAvailable=computed(()=>engineering.value.available===true);const engineeringProfiles=computed(()=>Array.isArray(engineering.value.profiles)?engineering.value.profiles:[]);const engineeringSourceLabel=computed(()=>engineering.value.source?.rootKind===`session-source`?`This session's project source`:`This project source`);const engineeringUnavailableReason=computed(()=>String(engineering.value.unavailableReason||`An engineering profile is not available for this source.`));const selectedEngineeringDescription=computed(()=>String(engineeringProfiles.value.find(profile=>profile.id===engineeringProfileDraft.value)?.description||``));const engineeringStatusText=computed(()=>engineering.value.status===`defaulted`?`The focused default is active. Saving records the choice in genesis/engineering.md.`:`This choice is stored in genesis/engineering.md and follows the source.`);const loading=computed(()=>resource.isLoading.value===true||engineeringResource.isLoading.value===true);const initialLoading=computed(()=>loading.value&&(!resource.data.value||!engineeringResource.data.value));const loadError=computed(()=>String(resource.loadError.value||engineeringResource.loadError.value||``));const databaseSaving=computed(()=>databaseSaveCommand.isRunning===true);const collaborationSaving=ref(false);const promptHintsSaving=computed(()=>promptHintsSaveCommand.isRunning===true);const engineeringSaving=ref(false);const databaseChanged=computed(()=>managed.value&&(scopeDraft.value!==developmentDatabase.value.scope||sharedSessionsDraft.value!==(developmentDatabase.value.allowSharedDatabaseSessions===true)));const databaseSaveAllowed=computed(()=>scopeDraft.value===developmentDatabase.value.scope||canChange.value&&scopeDraftAvailable.value);const collaborationChanged=computed(()=>JSON.stringify(collaborationDraft.value)!==JSON.stringify(savedCollaboration.value));const promptHintsChanged=computed(()=>promptHintsDraft.value!==savedPromptHints.value);const engineeringChanged=computed(()=>engineeringAvailable.value&&Boolean(engineeringProfileDraft.value)&&engineeringProfileDraft.value!==savedEngineeringProfile.value);watch(()=>developmentDatabase.value.allowSharedDatabaseSessions,value=>{sharedSessionsDraft.value=value===true},{immediate:true});watch(()=>developmentDatabase.value.scope,scope=>{if([`project`,`session`].includes(scope))scopeDraft.value=scope},{immediate:true});let collaborationSource=null;watch([projectSlug,collaboration],([slug,value])=>{if(!value.source)return;const sourceChanged=!collaborationSource||collaborationSource.projectSlug!==slug||collaborationSource.rootKind!==value.source.rootKind||collaborationSource.sessionId!==value.source.sessionId;const next=normalizeCollaborationDraft(value);if(sourceChanged||!collaborationChanged.value)collaborationDraft.value=next;savedCollaboration.value={...next};collaborationSource={projectSlug:slug,...value.source}},{immediate:true});watch(()=>promptHints.value.enabled,value=>{const enabled=value!==false;if(!promptHintsChanged.value)promptHintsDraft.value=enabled;savedPromptHints.value=enabled},{immediate:true});let engineeringSource=null;watch([projectSlug,engineering],([slug,value])=>{if(!value.source)return;const sourceChanged=!engineeringSource||engineeringSource.projectSlug!==slug||engineeringSource.rootKind!==value.source.rootKind||engineeringSource.sessionId!==value.source.sessionId;const profile=String(value.profile?.id||``).trim();if(sourceChanged||engineeringProfileDraft.value===savedEngineeringProfile.value)engineeringProfileDraft.value=profile;savedEngineeringProfile.value=profile;engineeringSource={projectSlug:slug,...value.source};const sourceSessionId=String(value.source?.sessionId||``).trim();if(!routeSessionId.value&&sourceSessionId)router.replace({query:{...route.query,sessionId:sourceSessionId}})},{immediate:true});useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:sessionListRealtimeShouldRefresh,onEvent(){resource.reload();engineeringResource.reload()}});async function refresh(){await Promise.all([resource.reload(),engineeringResource.reload()])}function collaborationOptions(field=``){const choices=collaboration.value.choices?.[field];return(Array.isArray(choices)?choices:[]).flatMap(choice=>{const value=String(choice?.id||``).trim();const label=String(choice?.name||``).trim();return value&&label?[{label,value}]:[]})}function normalizeCollaborationDraft(value={}){return{tone:String(value?.tone||``),responseLength:String(value?.responseLength||``),experience:String(value?.experience||``),explanationStyle:String(value?.explanationStyle||``),requirements:String(value?.requirements||``)}}async function saveDatabase(){if(!databaseChanged.value||!databaseSaveAllowed.value||databaseSaving.value)return;await databaseSaveCommand.run({scope:scopeDraft.value,allowSharedDatabaseSessions:sharedSessionsDraft.value});await resource.reload()}async function saveCollaboration(){if(!collaborationChanged.value||!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value)return;collaborationSaving.value=true;try{try{await collaborationSaveCommand.run({collaboration:normalizeCollaborationDraft(collaborationDraft.value),sessionId:routeSessionId.value||String(collaboration.value.source?.sessionId||``).trim()})}catch{return}await resource.reload()}finally{collaborationSaving.value=false}}async function savePromptHints(){if(!promptHintsChanged.value||!promptHintsCanEdit.value||promptHintsSaving.value)return;await promptHintsSaveCommand.run({promptHints:promptHintsDraft.value});await resource.reload()}async function saveEngineeringProfile(){if(!engineeringChanged.value||engineeringSaving.value)return;engineeringSaving.value=true;try{await engineeringSaveCommand.run({profile:engineeringProfileDraft.value,sessionId:routeSessionId.value||String(engineering.value.source?.sessionId||``).trim()})}catch{}finally{try{await engineeringResource.reload()}finally{engineeringSaving.value=false}}}function openPersonalSettings(){requestVibe64AccountConnectionsDialog({refresh:false,section:`profile`})}function reloadPage(){if(typeof window!==`undefined`)window.location.reload()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$1,[createBaseVNode(`header`,_hoisted_2,[_cache[11]||(_cache[11]=createBaseVNode(`div`,null,[createBaseVNode(`h1`,{class:`text-headline-small font-weight-bold ma-0`},`Project settings`),createBaseVNode(`p`,{class:`text-body-medium`},`Choose how you and your AI work on this project.`)],-1)),createVNode(VBtn,{class:`project-settings__refresh`,disabled:loading.value,height:`48`,type:`button`,variant:`text`,onClick:refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(loading.value?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`])]),initialLoading.value||loadError.value?(openBlock(),createBlock(Vibe64AsyncModuleState_default,{key:0,label:`Project settings`,loading:loading.value,message:loadError.value||`Loading project settings.`,"min-height":`12rem`,onReload:reloadPage,onRetry:refresh},null,8,[`loading`,`message`])):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(ConnectedProjectsSettings_default,{"project-slug":unref(projectSlug),state:unref(resource).data.value?.connectedProjects,onSaved:_cache[0]||(_cache[0]=$event=>unref(resource).reload())},null,8,[`project-slug`,`state`]),createBaseVNode(`section`,_hoisted_3,[createBaseVNode(`div`,_hoisted_4,[engineeringAvailable.value?(openBlock(),createElementBlock(`p`,_hoisted_5,toDisplayString(engineeringSourceLabel.value),1)):createCommentVNode(``,true),_cache[12]||(_cache[12]=createBaseVNode(`h2`,{id:`engineering-approach-title`,class:`text-title-medium font-weight-bold`},`Engineering approach`,-1)),_cache[13]||(_cache[13]=createBaseVNode(`p`,null,` Choose how cautiously the AI changes your software. Every profile keeps changes simple and asks before adding necessary complexity. `,-1))]),engineeringAvailable.value?(openBlock(),createElementBlock(`div`,_hoisted_6,[createBaseVNode(`div`,_hoisted_7,[createVNode(VSelect,{modelValue:engineeringProfileDraft.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>engineeringProfileDraft.value=$event),disabled:engineeringSaving.value,density:`comfortable`,"hide-details":`auto`,hint:selectedEngineeringDescription.value,"item-title":`name`,"item-value":`id`,items:engineeringProfiles.value,label:`Engineering profile`,"persistent-hint":``,variant:`outlined`},null,8,[`modelValue`,`disabled`,`hint`,`items`])]),createBaseVNode(`div`,_hoisted_8,[createBaseVNode(`p`,null,toDisplayString(engineeringStatusText.value),1),createVNode(VBtn,{disabled:!engineeringChanged.value||engineeringSaving.value,color:engineeringChanged.value?`primary`:void 0,height:`48`,type:`button`,variant:`flat`,onClick:saveEngineeringProfile},{default:withCtx(()=>[createTextVNode(toDisplayString(engineeringSaving.value?`Saving…`:`Save engineering approach`),1)]),_:1},8,[`disabled`,`color`])])])):(openBlock(),createElementBlock(`div`,_hoisted_9,[createBaseVNode(`p`,null,toDisplayString(engineeringUnavailableReason.value),1)]))]),createBaseVNode(`section`,_hoisted_10,[createBaseVNode(`div`,_hoisted_11,[_cache[14]||(_cache[14]=createBaseVNode(`h2`,{id:`development-database-title`,class:`text-title-medium font-weight-bold`},`Development database`,-1)),managed.value?(openBlock(),createElementBlock(`p`,_hoisted_12,` Share development data across sessions or keep a separate database for each. `)):(openBlock(),createElementBlock(`p`,_hoisted_13,` This Vibe64 installation does not manage development databases. The application receives its database connection through the project Env configuration. `))]),managed.value?(openBlock(),createElementBlock(`div`,_hoisted_14,[createVNode(VRadioGroup,{modelValue:scopeDraft.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>scopeDraft.value=$event),"aria-labelledby":`development-database-title`,class:`project-settings__options`,disabled:databaseSaving.value,"hide-details":``},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_15,[createVNode(VRadio,{class:`py-1`,"aria-describedby":sessionScopeReason.value?`development-database-session-reason`:void 0,disabled:!sessionScopeAvailable.value,label:`A separate database for each session`,value:`session`},null,8,[`aria-describedby`,`disabled`]),sessionScopeReason.value?(openBlock(),createElementBlock(`p`,_hoisted_16,toDisplayString(sessionScopeReason.value),1)):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_17,[createVNode(VRadio,{class:`py-1`,"aria-describedby":projectScopeReason.value?`development-database-project-reason`:void 0,disabled:!projectScopeAvailable.value,label:`One database shared by this project`,value:`project`},null,8,[`aria-describedby`,`disabled`]),projectScopeReason.value?(openBlock(),createElementBlock(`p`,_hoisted_18,toDisplayString(projectScopeReason.value),1)):createCommentVNode(``,true)])]),_:1},8,[`modelValue`,`disabled`]),scopeDraft.value===`project`?(openBlock(),createElementBlock(`div`,_hoisted_19,[createVNode(VCheckbox,{modelValue:sharedSessionsDraft.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>sharedSessionsDraft.value=$event),label:`Allow multiple sessions with this shared database`,disabled:databaseSaving.value,"hide-details":``},null,8,[`modelValue`,`disabled`]),_cache[15]||(_cache[15]=createBaseVNode(`p`,null,`All sessions will share the same database.`,-1))])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_20,[disabledReason.value?(openBlock(),createElementBlock(`p`,_hoisted_21,toDisplayString(disabledReason.value),1)):scopeDraft.value===`project`?(openBlock(),createElementBlock(`p`,_hoisted_22,` Data and schema changes will be visible to every project session and remain after a session is archived. `)):createCommentVNode(``,true),createVNode(VBtn,{disabled:!databaseChanged.value||!databaseSaveAllowed.value||databaseSaving.value,color:databaseChanged.value?`primary`:void 0,height:`48`,type:`button`,variant:`flat`,onClick:saveDatabase},{default:withCtx(()=>[createTextVNode(toDisplayString(databaseSaving.value?`Saving…`:`Save database choice`),1)]),_:1},8,[`disabled`,`color`])])])):createCommentVNode(``,true)]),createBaseVNode(`section`,_hoisted_23,[createBaseVNode(`div`,_hoisted_24,[createBaseVNode(`p`,_hoisted_25,toDisplayString(collaborationSourceLabel.value),1),_cache[17]||(_cache[17]=createBaseVNode(`h2`,{id:`ai-behaviour-title`,class:`text-title-medium font-weight-bold`},`AI behaviour`,-1)),_cache[18]||(_cache[18]=createBaseVNode(`p`,null,` Set the tone, level of detail and project requirements for your conversations. These choices follow your project source. `,-1)),createVNode(VBtn,{class:`project-settings__account-link`,height:`48`,type:`button`,variant:`text`,onClick:openPersonalSettings},{default:withCtx(()=>[..._cache[16]||(_cache[16]=[createTextVNode(` Set your Vibe64 name `,-1)])]),_:1})]),createBaseVNode(`div`,_hoisted_26,[createBaseVNode(`div`,_hoisted_27,[createVNode(VSelect,{modelValue:collaborationDraft.value.tone,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>collaborationDraft.value.tone=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:`comfortable`,"hide-details":``,"item-title":`label`,"item-value":`value`,items:toneOptions.value,label:`Tone`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`items`]),createVNode(VSelect,{modelValue:collaborationDraft.value.responseLength,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>collaborationDraft.value.responseLength=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:`comfortable`,"hide-details":``,"item-title":`label`,"item-value":`value`,items:responseLengthOptions.value,label:`Response length`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`items`]),createVNode(VSelect,{modelValue:collaborationDraft.value.experience,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>collaborationDraft.value.experience=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:`comfortable`,"hide-details":``,"item-title":`label`,"item-value":`value`,items:experienceOptions.value,label:`Experience level`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`items`]),createVNode(VSelect,{modelValue:collaborationDraft.value.explanationStyle,"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>collaborationDraft.value.explanationStyle=$event),disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,density:`comfortable`,"hide-details":``,"item-title":`label`,"item-value":`value`,items:explanationStyleOptions.value,label:`Explanation style`,variant:`outlined`},null,8,[`modelValue`,`disabled`,`items`]),createVNode(VTextarea,{modelValue:collaborationDraft.value.requirements,"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>collaborationDraft.value.requirements=$event),class:`project-settings__ai-note`,disabled:!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,"auto-grow":``,density:`comfortable`,"hide-details":``,label:`Project requirements (optional)`,placeholder:`For example: use Australian English.`,rows:`6`,"max-rows":`18`,variant:`outlined`},null,8,[`modelValue`,`disabled`])]),createBaseVNode(`div`,_hoisted_28,[!collaborationAvailable.value?(openBlock(),createElementBlock(`p`,_hoisted_29,toDisplayString(collaborationUnavailableReason.value),1)):!collaborationCanEdit.value?(openBlock(),createElementBlock(`p`,_hoisted_30,` Only the project owner can change these controls in Settings. Anyone who can edit this source can change genesis/collaboration.md directly. `)):(openBlock(),createElementBlock(`p`,_hoisted_31,` Applies when a conversation next starts or refreshes its context. Existing history and instructions in an active Codex conversation stay as they are. `)),createVNode(VBtn,{disabled:!collaborationChanged.value||!collaborationAvailable.value||!collaborationCanEdit.value||collaborationSaving.value,color:collaborationChanged.value?`primary`:void 0,height:`48`,type:`button`,variant:`flat`,onClick:saveCollaboration},{default:withCtx(()=>[createTextVNode(toDisplayString(collaborationSaving.value?`Saving…`:`Save collaboration`),1)]),_:1},8,[`disabled`,`color`])])])]),createBaseVNode(`section`,_hoisted_32,[_cache[19]||(_cache[19]=createBaseVNode(`div`,{class:`project-settings__section-copy text-body-medium`},[createBaseVNode(`h2`,{id:`prompt-suggestions-title`,class:`text-title-medium font-weight-bold`},`Prompt suggestions`),createBaseVNode(`p`,null,`Get ideas for what to ask next. This Vibe64 setting does not change your AI's instructions.`)],-1)),createBaseVNode(`div`,_hoisted_33,[createVNode(VSwitch,{modelValue:promptHintsDraft.value,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>promptHintsDraft.value=$event),class:`project-settings__ai-hints`,color:`primary`,disabled:!promptHintsCanEdit.value||promptHintsSaving.value,"hide-details":``,label:`Suggest useful next prompts`},null,8,[`modelValue`,`disabled`]),createBaseVNode(`div`,_hoisted_34,[createVNode(VBtn,{disabled:!promptHintsChanged.value||!promptHintsCanEdit.value||promptHintsSaving.value,color:promptHintsChanged.value?`primary`:void 0,height:`48`,type:`button`,variant:`flat`,onClick:savePromptHints},{default:withCtx(()=>[createTextVNode(toDisplayString(promptHintsSaving.value?`Saving…`:`Save prompt suggestions`),1)]),_:1},8,[`disabled`,`color`])])])]),repositoryWorkflow.value.available?(openBlock(),createElementBlock(`section`,_hoisted_35,[_cache[22]||(_cache[22]=createBaseVNode(`div`,{class:`project-settings__section-copy text-body-medium`},[createBaseVNode(`h2`,{id:`repository-workflow-title`,class:`text-title-medium font-weight-bold`},`Git workflow`),createBaseVNode(`p`,null,`Choose how Vibe64 saves changes to this repository.`)],-1)),createBaseVNode(`div`,_hoisted_36,[createVNode(VRadioGroup,{modelValue:requirePullRequest.value,"onUpdate:modelValue":_cache[10]||(_cache[10]=$event=>requirePullRequest.value=$event),label:`GitHub save workflow`,color:`primary`,"hide-details":``,disabled:!repositoryWorkflow.value.canEdit||unref(repositoryWorkflowCommand).isRunning},{default:withCtx(()=>[createVNode(VRadio,{label:`Allow direct commits and pushes`,value:false,class:`py-1`}),createVNode(VRadio,{label:`Require pull requests`,value:true,class:`py-1`})]),_:1},8,[`modelValue`,`disabled`]),_cache[20]||(_cache[20]=createBaseVNode(`p`,null,`GitHub branch rules still apply. Requiring pull requests makes Create draft PR the main Save action until a session is attached to a PR.`,-1)),_cache[21]||(_cache[21]=createBaseVNode(`p`,null,`This setting controls Vibe64's Save actions. GitHub rules control pushes from terminals and other tools.`,-1)),createBaseVNode(`div`,_hoisted_37,[createVNode(VBtn,{color:requirePullRequest.value!==repositoryWorkflow.value.requirePullRequest?`primary`:void 0,height:`48`,variant:`flat`,disabled:!repositoryWorkflow.value.canEdit||unref(repositoryWorkflowCommand).isRunning||requirePullRequest.value===repositoryWorkflow.value.requirePullRequest,onClick:saveRepositoryWorkflow},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(repositoryWorkflowCommand).isRunning?`Saving…`:`Save repository workflow`),1)]),_:1},8,[`color`,`disabled`])])])])):createCommentVNode(``,true)],64))])}}};var ProjectSettingsPanel_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-0efe387b`]]);var _hoisted_1={class:`vibe64-dashboard-page`};var _sfc_main={__name:`index`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1,[createVNode(ProjectSettingsPanel_default)])}}};var settings_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-d998a641`]]);export{settings_default as default};
@@ -1 +1 @@
1
- import{Ht as watch,g as computed,hn as proxyRefs}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{r as projectAppPath}from"./vibe64ProjectScope.local-B06ABkhI.js";import{Dt as mdiEyeOutline,Nt as mdiFileDocumentOutline,b as mdiArchiveOutline,nr as mdiRefresh,vr as mdiSourceBranch,xr as mdiSourceCommit}from"./mdi-Bt90Ns76.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{D as VIBE64_SESSIONS_API_SUFFIX,T as VIBE64_ARCHIVED_SESSIONS_API_SUFFIX,at as vibe64SessionsQueryKey,et as vibe64SessionPath,it as vibe64SessionQueryKey}from"./index-B9P6KjvH.js";import{n as enrichVibe64SessionForDisplay}from"./vibe64SessionPanelModel-DDorOuiL.js";import{c as vibe64SessionStatusLabel,r as shortVibe64SessionId,s as vibe64SessionStatusColor}from"./vibe64SessionViewModel-DR4tOlGM.js";import{t as useVibe64ConversationLog}from"./useVibe64ConversationLog-D-Vkq0sK.js";var archivedVibe64SessionsEmits=[`loading-changed`];var archivedAtFormatter=new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`});var archivedVibe64SessionsProps={description:{default:``,type:String},emptyText:{default:``,type:String},emptyTitle:{default:`No sessions`,type:String},showRefresh:{default:true,type:Boolean},title:{default:``,type:String}};function useArchivedVibe64Sessions(emit){const paths=usePaths();const projectSlug=useVibe64ProjectSlug();const sessionsApiPath=computed(()=>paths.api(VIBE64_ARCHIVED_SESSIONS_API_SUFFIX,{surface:`app`}));const sessionListResource=useEndpointResource({fallbackLoadError:`Archived sessions could not be loaded.`,path:sessionsApiPath,queryKey:computed(()=>[...vibe64SessionsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),`archived`]),requestRecoveryLabel:`Archived sessions`});const loading=computed(()=>Boolean(sessionListResource.isLoading.value));const error=computed(()=>String(sessionListResource.loadError.value||``));const sessions=computed(()=>{const payload=sessionListResource.data.value;return(Array.isArray(payload?.sessions)?payload.sessions:[]).map(enrichVibe64SessionForDisplay).filter(sessionIsInArchive)});watch(loading,isLoading=>{emit(`loading-changed`,isLoading)},{immediate:true});return{archiveIcon:mdiArchiveOutline,unavailableSessions:computed(()=>sessionListResource.data.value?.unavailableSessions||[]),error,loadSessions,loading,formatArchivedAt,mdiEyeOutline,mdiRefresh,mdiSourceBranch,sessionRoute,sessions,shortSessionId,statusColor,statusLabel};function sessionIsInArchive(session={}){return String(session.status||``)===`archived`}async function loadSessions(){await sessionListResource.reload()}function sessionRoute(session={}){return archivedSessionDetailRoute({projectSlug:projectSlug.value,sessionId:session.sessionId})}}function useArchivedVibe64SessionDetail(){const route=useRoute();const paths=usePaths();const projectSlug=useVibe64ProjectSlug(route);const sessionId=computed(()=>firstRouteParam(route.params.sessionId));const sessionsApiPath=computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:`app`}));const sessionPath=computed(()=>sessionId.value?vibe64SessionPath(sessionsApiPath.value,sessionId.value):``);const sessionResource=useEndpointResource({enabled:computed(()=>Boolean(sessionId.value)),fallbackLoadError:`Archived session could not be loaded.`,path:sessionPath,queryKey:computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),`archive-detail`,sessionId.value]),readQuery:computed(()=>projectSlug.value?{projectSlug:projectSlug.value}:null),requestRecoveryLabel:`Archived session`});const session=computed(()=>{const payload=sessionResource.data.value;if(!payload||typeof payload!==`object`||Array.isArray(payload))return null;if(String(payload.sessionId||``).trim()!==sessionId.value)return null;const enrichedSession=enrichVibe64SessionForDisplay(payload);return String(enrichedSession.status||``)===`archived`?enrichedSession:null});return{backTo:computed(()=>({path:`${projectAppPath(projectSlug.value)}/dashboard/history`})),conversationLog:proxyRefs(useVibe64ConversationLog({active:computed(()=>Boolean(session.value)),session})),error:computed(()=>String(sessionResource.loadError.value||``)),loading:computed(()=>Boolean(sessionResource.isLoading.value||sessionResource.isInitialLoading?.value)),mdiRefresh,reload:sessionResource.reload,session,sessionId,sessionsApiPath,projectSlug}}function shortSessionId(sessionId){return shortVibe64SessionId(sessionId)}function statusLabel(status){return vibe64SessionStatusLabel(status)}function statusColor(status){return vibe64SessionStatusColor(status)}function formatArchivedAt(value=``){const date=new Date(String(value||``));return Number.isNaN(date.getTime())?`time unavailable`:archivedAtFormatter.format(date)}function archivedSessionDetailRoute({projectSlug=``,sessionId=``}={}){return{path:`${projectAppPath(projectSlug)}/dashboard/history/${encodeURIComponent(String(sessionId||``).trim())}`}}function firstRouteParam(value){return String(Array.isArray(value)?value[0]:value||``).trim()}function metadataValue(session={},name=``){return String(session.metadata?.[name]||``).trim()}function archiveFactRows(session={}){return[{icon:mdiSourceBranch,label:`Branch`,value:session.branch||metadataValue(session,`source_recovery_branch`)},{icon:mdiSourceCommit,label:`Head`,value:metadataValue(session,`source_recovery_head`)||metadataValue(session,`base_commit`)},{icon:mdiFileDocumentOutline,label:`Saved patch`,value:metadataValue(session,`source_recovery_patch_artifact`)||`No saved patch`},{icon:mdiFileDocumentOutline,label:`Untracked files`,value:metadataValue(session,`source_recovery_untracked_artifact`)||`No saved untracked archive`}].filter(row=>row.value)}export{useArchivedVibe64SessionDetail as a,shortSessionId as i,archivedVibe64SessionsEmits as n,useArchivedVibe64Sessions as o,archivedVibe64SessionsProps as r,archiveFactRows as t};
1
+ import{Ht as watch,g as computed,hn as proxyRefs}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{r as projectAppPath}from"./vibe64ProjectScope.local-B06ABkhI.js";import{Dt as mdiEyeOutline,Nt as mdiFileDocumentOutline,b as mdiArchiveOutline,nr as mdiRefresh,vr as mdiSourceBranch,xr as mdiSourceCommit}from"./mdi-Bt90Ns76.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{D as VIBE64_SESSIONS_API_SUFFIX,T as VIBE64_ARCHIVED_SESSIONS_API_SUFFIX,at as vibe64SessionsQueryKey,et as vibe64SessionPath,it as vibe64SessionQueryKey}from"./index-Mxalhei8.js";import{n as enrichVibe64SessionForDisplay}from"./vibe64SessionPanelModel-DDorOuiL.js";import{c as vibe64SessionStatusLabel,r as shortVibe64SessionId,s as vibe64SessionStatusColor}from"./vibe64SessionViewModel-DR4tOlGM.js";import{t as useVibe64ConversationLog}from"./useVibe64ConversationLog-C1xjhFtS.js";var archivedVibe64SessionsEmits=[`loading-changed`];var archivedAtFormatter=new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`});var archivedVibe64SessionsProps={description:{default:``,type:String},emptyText:{default:``,type:String},emptyTitle:{default:`No sessions`,type:String},showRefresh:{default:true,type:Boolean},title:{default:``,type:String}};function useArchivedVibe64Sessions(emit){const paths=usePaths();const projectSlug=useVibe64ProjectSlug();const sessionsApiPath=computed(()=>paths.api(VIBE64_ARCHIVED_SESSIONS_API_SUFFIX,{surface:`app`}));const sessionListResource=useEndpointResource({fallbackLoadError:`Archived sessions could not be loaded.`,path:sessionsApiPath,queryKey:computed(()=>[...vibe64SessionsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),`archived`]),requestRecoveryLabel:`Archived sessions`});const loading=computed(()=>Boolean(sessionListResource.isLoading.value));const error=computed(()=>String(sessionListResource.loadError.value||``));const sessions=computed(()=>{const payload=sessionListResource.data.value;return(Array.isArray(payload?.sessions)?payload.sessions:[]).map(enrichVibe64SessionForDisplay).filter(sessionIsInArchive)});watch(loading,isLoading=>{emit(`loading-changed`,isLoading)},{immediate:true});return{archiveIcon:mdiArchiveOutline,unavailableSessions:computed(()=>sessionListResource.data.value?.unavailableSessions||[]),error,loadSessions,loading,formatArchivedAt,mdiEyeOutline,mdiRefresh,mdiSourceBranch,sessionRoute,sessions,shortSessionId,statusColor,statusLabel};function sessionIsInArchive(session={}){return String(session.status||``)===`archived`}async function loadSessions(){await sessionListResource.reload()}function sessionRoute(session={}){return archivedSessionDetailRoute({projectSlug:projectSlug.value,sessionId:session.sessionId})}}function useArchivedVibe64SessionDetail(){const route=useRoute();const paths=usePaths();const projectSlug=useVibe64ProjectSlug(route);const sessionId=computed(()=>firstRouteParam(route.params.sessionId));const sessionsApiPath=computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:`app`}));const sessionPath=computed(()=>sessionId.value?vibe64SessionPath(sessionsApiPath.value,sessionId.value):``);const sessionResource=useEndpointResource({enabled:computed(()=>Boolean(sessionId.value)),fallbackLoadError:`Archived session could not be loaded.`,path:sessionPath,queryKey:computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),`archive-detail`,sessionId.value]),readQuery:computed(()=>projectSlug.value?{projectSlug:projectSlug.value}:null),requestRecoveryLabel:`Archived session`});const session=computed(()=>{const payload=sessionResource.data.value;if(!payload||typeof payload!==`object`||Array.isArray(payload))return null;if(String(payload.sessionId||``).trim()!==sessionId.value)return null;const enrichedSession=enrichVibe64SessionForDisplay(payload);return String(enrichedSession.status||``)===`archived`?enrichedSession:null});return{backTo:computed(()=>({path:`${projectAppPath(projectSlug.value)}/dashboard/history`})),conversationLog:proxyRefs(useVibe64ConversationLog({active:computed(()=>Boolean(session.value)),session})),error:computed(()=>String(sessionResource.loadError.value||``)),loading:computed(()=>Boolean(sessionResource.isLoading.value||sessionResource.isInitialLoading?.value)),mdiRefresh,reload:sessionResource.reload,session,sessionId,sessionsApiPath,projectSlug}}function shortSessionId(sessionId){return shortVibe64SessionId(sessionId)}function statusLabel(status){return vibe64SessionStatusLabel(status)}function statusColor(status){return vibe64SessionStatusColor(status)}function formatArchivedAt(value=``){const date=new Date(String(value||``));return Number.isNaN(date.getTime())?`time unavailable`:archivedAtFormatter.format(date)}function archivedSessionDetailRoute({projectSlug=``,sessionId=``}={}){return{path:`${projectAppPath(projectSlug)}/dashboard/history/${encodeURIComponent(String(sessionId||``).trim())}`}}function firstRouteParam(value){return String(Array.isArray(value)?value[0]:value||``).trim()}function metadataValue(session={},name=``){return String(session.metadata?.[name]||``).trim()}function archiveFactRows(session={}){return[{icon:mdiSourceBranch,label:`Branch`,value:session.branch||metadataValue(session,`source_recovery_branch`)},{icon:mdiSourceCommit,label:`Head`,value:metadataValue(session,`source_recovery_head`)||metadataValue(session,`base_commit`)},{icon:mdiFileDocumentOutline,label:`Saved patch`,value:metadataValue(session,`source_recovery_patch_artifact`)||`No saved patch`},{icon:mdiFileDocumentOutline,label:`Untracked files`,value:metadataValue(session,`source_recovery_untracked_artifact`)||`No saved untracked archive`}].filter(row=>row.value)}export{useArchivedVibe64SessionDetail as a,shortSessionId as i,archivedVibe64SessionsEmits as n,useArchivedVibe64Sessions as o,archivedVibe64SessionsProps as r,archiveFactRows as t};