@loicngr/kobo 1.11.13 → 1.11.14

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 (64) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/mcp-server/kobo-tasks-handlers.js +26 -3
  3. package/dist/server/index.js +5 -7
  4. package/dist/server/routes/export.js +2 -1
  5. package/dist/server/routes/workspaces.js +15 -0
  6. package/dist/server/services/agent/engines/claude-code/engine.js +9 -7
  7. package/dist/server/services/agent/engines/claude-code/event-mapper.js +3 -1
  8. package/dist/server/services/agent/orchestrator.js +34 -8
  9. package/dist/server/services/cron-service.js +2 -1
  10. package/dist/server/services/dev-server-service.js +13 -1
  11. package/dist/server/services/wakeup-service.js +14 -12
  12. package/dist/server/utils/git-ops.js +3 -2
  13. package/dist/server/utils/safe-path.js +34 -0
  14. package/package.json +3 -3
  15. package/src/client/dist/pwa/assets/{ActivityFeed-Ds8cAMNc.js → ActivityFeed-DqDJDX2v.js} +1 -1
  16. package/src/client/dist/pwa/assets/{ChangelogPage-DO6DNO4Q.js → ChangelogPage-Dw2LbIK2.js} +1 -1
  17. package/src/client/dist/pwa/assets/{ClosePopup-DuAqn8Pb.js → ClosePopup-eKuUr7CY.js} +1 -1
  18. package/src/client/dist/pwa/assets/{CreatePage-BnMSo_79.js → CreatePage--4KDhiYt.js} +1 -1
  19. package/src/client/dist/pwa/assets/{DiffViewer-CMnFGReI.js → DiffViewer-Bl9D1N1M.js} +3 -3
  20. package/src/client/dist/pwa/assets/{HealthPage-BRAxQKSP.js → HealthPage-CaOdjuVx.js} +1 -1
  21. package/src/client/dist/pwa/assets/{MainLayout-BN1ug95K.js → MainLayout-DP9shoO1.js} +2 -2
  22. package/src/client/dist/pwa/assets/{QBtnToggle-DsCDNQzX.js → QBtnToggle-BwPZ0Smh.js} +1 -1
  23. package/src/client/dist/pwa/assets/{QChip-DWGDTZnX.js → QChip-CY0_8v_e.js} +1 -1
  24. package/src/client/dist/pwa/assets/{QSelect-8Ip46vhk.js → QSelect-xHphd7hW.js} +1 -1
  25. package/src/client/dist/pwa/assets/{QTooltip-Bz4g3bmr.js → QTooltip-DyS20jDT.js} +1 -1
  26. package/src/client/dist/pwa/assets/{SearchPage-BD53VJEr.js → SearchPage-CggXs3dH.js} +1 -1
  27. package/src/client/dist/pwa/assets/{SettingsPage-3rYdJZga.js → SettingsPage-8AWL_4DM.js} +1 -1
  28. package/src/client/dist/pwa/assets/{TouchPan-BKu8V4eN.js → TouchPan-Cd9KTb6-.js} +1 -1
  29. package/src/client/dist/pwa/assets/{WorkspacePage-CbC_t5Rx.js → WorkspacePage-CJKSrSEC.js} +3 -3
  30. package/src/client/dist/pwa/assets/{cssMode-vaMVESGy.js → cssMode-BsN8TWME.js} +1 -1
  31. package/src/client/dist/pwa/assets/{documents-CyKQ9lT6.js → documents-DJy1tgPd.js} +1 -1
  32. package/src/client/dist/pwa/assets/{editor.api-CH3dhpKq.js → editor.api-Dj6TIm_z.js} +1 -1
  33. package/src/client/dist/pwa/assets/{expand-template-DQQQftsk.js → expand-template-By-8Db7_.js} +1 -1
  34. package/src/client/dist/pwa/assets/{freemarker2-deLpERsj.js → freemarker2-DC0xjWx5.js} +1 -1
  35. package/src/client/dist/pwa/assets/{handlebars-DdjS05Tc.js → handlebars-0Uz9nw5d.js} +1 -1
  36. package/src/client/dist/pwa/assets/{html-pK1ZEFvP.js → html-BYPeU1Vb.js} +1 -1
  37. package/src/client/dist/pwa/assets/{htmlMode-DJFDI9Ru.js → htmlMode-B0UND_vz.js} +1 -1
  38. package/src/client/dist/pwa/assets/i18n-DPDR4mQI.js +1 -0
  39. package/src/client/dist/pwa/assets/{index-B_OmZ65F.js → index-CtK8ORpZ.js} +3 -3
  40. package/src/client/dist/pwa/assets/{javascript-DbuFfxco.js → javascript-B8PZW8pe.js} +1 -1
  41. package/src/client/dist/pwa/assets/{jsonMode-B0Fu8Dcc.js → jsonMode-BixnmFse.js} +1 -1
  42. package/src/client/dist/pwa/assets/{kobo-commands-rb43ZeWG.js → kobo-commands-CX8pforo.js} +1 -1
  43. package/src/client/dist/pwa/assets/{layout-tAFrvQ5V.js → layout-BAE6NR2A.js} +1 -1
  44. package/src/client/dist/pwa/assets/{liquid-DqDIKOCy.js → liquid-BH16_Zn1.js} +1 -1
  45. package/src/client/dist/pwa/assets/{lspLanguageFeatures-CVcEibfJ.js → lspLanguageFeatures-YMzTIuK0.js} +1 -1
  46. package/src/client/dist/pwa/assets/{mdx-Bs4CovhI.js → mdx-CrrWJ7fg.js} +1 -1
  47. package/src/client/dist/pwa/assets/{network-auth-DYrrh7Zr.js → network-auth-NMnCVoaZ.js} +1 -1
  48. package/src/client/dist/pwa/assets/{pending-diff-open-D1IYH8Pd.js → pending-diff-open-DHlXLorX.js} +1 -1
  49. package/src/client/dist/pwa/assets/{project-color-DO6uj29M.js → project-color-BJrCEQ0A.js} +1 -1
  50. package/src/client/dist/pwa/assets/{python-BJoP0uN-.js → python-fk3K3s3o.js} +1 -1
  51. package/src/client/dist/pwa/assets/{razor-cwD-YBcr.js → razor-Dg1yHOal.js} +1 -1
  52. package/src/client/dist/pwa/assets/{render-chat-markdown-DZnIueUV.js → render-chat-markdown-C00A6CfY.js} +1 -1
  53. package/src/client/dist/pwa/assets/{tsMode-of3oS9sU.js → tsMode-qJ7nTArc.js} +1 -1
  54. package/src/client/dist/pwa/assets/{typescript-BTWMoUxn.js → typescript-DayfKox1.js} +1 -1
  55. package/src/client/dist/pwa/assets/{use-onboarding-BTFkRBjE.js → use-onboarding-CF_D2gbm.js} +1 -1
  56. package/src/client/dist/pwa/assets/{use-quasar-C1RCDSb6.js → use-quasar-C3oo6nVn.js} +1 -1
  57. package/src/client/dist/pwa/assets/{vs-DDeaNKsH.js → vs-qnWnWXG9.js} +3 -3
  58. package/src/client/dist/pwa/assets/{workers-DQnKuGcq.js → workers-CvvtZekC.js} +1 -1
  59. package/src/client/dist/pwa/assets/{xml-RglGWD_3.js → xml-CJ1QFxhD.js} +1 -1
  60. package/src/client/dist/pwa/assets/{yaml-CSqGQpai.js → yaml-C3N49N5E.js} +1 -1
  61. package/src/client/dist/pwa/index.html +1 -1
  62. package/src/client/dist/pwa/sw.js +1 -1
  63. package/src/mcp-server/kobo-tasks-handlers.ts +24 -4
  64. package/src/client/dist/pwa/assets/i18n-CK38o-IF.js +0 -1
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MainLayout-BN1ug95K.js","assets/vue-i18n-C3W5i7h6.js","assets/reactivity.esm-bundler-DtSZKRQB.js","assets/runtime-dom.esm-bundler-DgevF6KV.js","assets/QIcon--SvgE-nS.js","assets/QSeparator-BdyRE-AM.js","assets/use-checkbox-SrkgiJho.js","assets/use-quasar-C1RCDSb6.js","assets/QSelect-8Ip46vhk.js","assets/QTooltip-Bz4g3bmr.js","assets/QChip-DWGDTZnX.js","assets/documents-CyKQ9lT6.js","assets/ClosePopup-DuAqn8Pb.js","assets/TouchPan-BKu8V4eN.js","assets/render-chat-markdown-DZnIueUV.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/QBadge-sMJZ_eZm.js","assets/QSpace-D9UEvM99.js","assets/QBtnToggle-DsCDNQzX.js","assets/QList-Be_FbTA3.js","assets/layout-tAFrvQ5V.js","assets/kobo-commands-rb43ZeWG.js","assets/formatters-D0dU6VcA.js","assets/project-color-DO6uj29M.js","assets/use-onboarding-BTFkRBjE.js","assets/use-onboarding-CTZuBZOi.css","assets/MainLayout-u-AM87m3.css","assets/WorkspacePage-CbC_t5Rx.js","assets/QSpinnerDots-B4RmFJUj.js","assets/QPage-DuIsRmYu.js","assets/expand-template-DQQQftsk.js","assets/expand-template-D2yUa54D.css","assets/permissionModes-6jhegAm-.js","assets/QBanner-DedhGMcj.js","assets/WorkspacePage-ChnyJ3xI.css","assets/CreatePage-BnMSo_79.js","assets/CreatePage-CV_RpAuV.css","assets/SettingsPage-3rYdJZga.js","assets/SettingsPage-BJZWZYPC.css","assets/SearchPage-BD53VJEr.js","assets/SearchPage-B08_UXDs.css","assets/HealthPage-BRAxQKSP.js","assets/ChangelogPage-DO6DNO4Q.js","assets/ChangelogPage-CQ33An2f.css"])))=>i.map(i=>d[i]);
2
- import{n as e,t}from"./vue-i18n-C3W5i7h6.js";import{A as n,B as r,C as i,O as a,T as o,g as s,wt as c,x as l}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as u,A as d,At as f,B as p,Bt as m,C as h,H as g,It as _,Kt as v,Mt as y,Ot as b,P as x,Rt as S,Tt as C,U as w,V as T,W as ee,Z as E,_n as D,fn as O,i as te,n as k,st as A,t as ne,ut as j,vt as M,yn as re}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{C as ie,D as N,E as P,F as ae,I as F,M as I,N as L,O as oe,P as R,a as z,b as se,f as ce,j as le,k as ue,l as de,n as fe,o as pe,p as me,r as he,s as ge,t as _e,w as ve,x as ye}from"./QIcon--SvgE-nS.js";import{a as be,d as xe,f as B,i as Se,l as Ce,o as we,p as Te,s as Ee,t as De,u as Oe}from"./QSeparator-BdyRE-AM.js";import{a as ke,d as Ae,i as je,l as Me,n as Ne,o as Pe,r as Fe,t as Ie}from"./use-checkbox-SrkgiJho.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Le=[`sm`,`md`,`lg`,`xl`],{passive:Re}=P,ze=ae({width:0,height:0,name:`xs`,sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1},{setSizes:N,setDebounce:N,install({$q:e,onSSRHydrated:t}){if(e.screen=this,this.__installed){e.config.screen!==void 0&&(e.config.screen.bodyClasses?this.__update(!0):document.body.classList.remove(`screen--${this.name}`));return}let{visualViewport:n}=window,r=n||window,i=document.scrollingElement||document.documentElement,a=n===void 0||B.is.mobile?()=>[Math.max(window.innerWidth,i.clientWidth),Math.max(window.innerHeight,i.clientHeight)]:()=>[n.width*n.scale+window.innerWidth-i.clientWidth,n.height*n.scale+window.innerHeight-i.clientHeight],o=e.config.screen?.bodyClasses===!0;this.__update=e=>{let[t,n]=a();if(n!==this.height&&(this.height=n),t!==this.width)this.width=t;else if(e!==!0)return;let r=this.sizes;this.gt.xs=t>=r.sm,this.gt.sm=t>=r.md,this.gt.md=t>=r.lg,this.gt.lg=t>=r.xl,this.lt.sm=t<r.sm,this.lt.md=t<r.md,this.lt.lg=t<r.lg,this.lt.xl=t<r.xl,this.xs=this.lt.sm,this.sm=this.gt.xs&&this.lt.md,this.md=this.gt.sm&&this.lt.lg,this.lg=this.gt.md&&this.lt.xl,this.xl=this.gt.lg,r=this.xs&&`xs`||this.sm&&`sm`||this.md&&`md`||this.lg&&`lg`||`xl`,r!==this.name&&(o&&(document.body.classList.remove(`screen--${this.name}`),document.body.classList.add(`screen--${r}`)),this.name=r)};let s,c={},l=16;this.setSizes=e=>{Le.forEach(t=>{e[t]!==void 0&&(c[t]=e[t])})},this.setDebounce=e=>{l=e};let u=()=>{let e=getComputedStyle(document.body);e.getPropertyValue(`--q-size-sm`)&&Le.forEach(t=>{this.sizes[t]=Number.parseInt(e.getPropertyValue(`--q-size-${t}`),10)}),this.setSizes=e=>{Le.forEach(t=>{e[t]&&(this.sizes[t]=e[t])}),this.__update(!0)},this.setDebounce=e=>{s!==void 0&&r.removeEventListener(`resize`,s,Re),s=e>0?Oe(this.__update,e):this.__update,r.addEventListener(`resize`,s,Re)},this.setDebounce(l),Object.keys(c).length===0?this.__update():(this.setSizes(c),c=void 0),o&&this.name===`xs`&&document.body.classList.add(`screen--xs`)};Te.value?t.push(u):u()}}),V=ae({isActive:!1,mode:!1},{__media:void 0,set(e){V.mode=e,e===`auto`?(V.__media===void 0&&(V.__media=window.matchMedia(`(prefers-color-scheme: dark)`),V.__updateMedia=()=>{V.set(`auto`)},V.__media.addListener(V.__updateMedia)),e=V.__media.matches):V.__media!==void 0&&(V.__media.removeListener(V.__updateMedia),V.__media=void 0),V.isActive=e===!0,document.body.classList.remove(`body--${e===!0?`light`:`dark`}`),document.body.classList.add(`body--${e===!0?`dark`:`light`}`)},toggle(){V.set(!V.isActive)},install({$q:e,ssrContext:t}){let n=e.config.dark;e.dark=this,this.__installed||this.set(n!==void 0&&n)}});function Be(e,t,n=document.body){if(typeof e!=`string`)throw TypeError(`Expected a string as propName`);if(typeof t!=`string`)throw TypeError(`Expected a string as value`);if(!(n instanceof Element))throw TypeError(`Expected a DOM element`);n.style.setProperty(`--q-${e}`,t)}function Ve(e){if(e.ios)return`ios`;if(e.android)return`android`}function He({is:e,has:t,within:n},r){let i=[e.desktop?`desktop`:`mobile`,`${t.touch?``:`no-`}touch`];if(e.mobile){let t=Ve(e);t!==void 0&&i.push(`platform-`+t)}if(e.nativeMobile){let t=e.nativeMobileWrapper,n=r[t];i.push(t,`native-mobile`),e.ios&&(n===void 0||n.iosStatusBarPadding)?i.push(`q-ios-padding`):e.android&&(n===void 0||n.androidStatusBarPadding!==!1)&&i.push(`q-safe-area-padding`)}else e.electron?i.push(`electron`):e.bex&&i.push(`bex`);return n.iframe&&i.push(`within-iframe`),i}function Ue(){let{is:e}=B,t=document.body.className,n=new Set(t.replaceAll(/ {2}/g,` `).split(` `));if(!e.nativeMobile&&!e.electron&&!e.bex){if(e.desktop)n.delete(`mobile`),n.delete(`platform-ios`),n.delete(`platform-android`),n.add(`desktop`);else if(e.mobile){n.delete(`desktop`),n.add(`mobile`),n.delete(`platform-ios`),n.delete(`platform-android`);let t=Ve(e);t!==void 0&&n.add(`platform-${t}`)}}B.has.touch&&(n.delete(`no-touch`),n.add(`touch`)),B.within.iframe&&n.add(`within-iframe`);let r=[...n].join(` `);t!==r&&(document.body.className=r)}function We(e){for(let t in e)Be(t,e[t])}var Ge={install(e){if(!this.__installed){if(Te.value)Ue();else{let{$q:t}=e;t.config.brand!==void 0&&We(t.config.brand),document.body.classList.add(...He(B,t.config))}B.is.ios&&document.body.addEventListener(`touchstart`,N),window.addEventListener(`keydown`,ye,!0)}}},Ke=()=>!0;function qe(e){return typeof e==`string`&&e!==``&&e!==`/`&&e!==`#/`}function Je(e){return e.startsWith(`#`)&&(e=e.slice(1)),e.startsWith(`/`)||(e=`/`+e),e.endsWith(`/`)&&(e=e.slice(0,-1)),`#`+e}function Ye(e){if(e.backButtonExit===!1)return()=>!1;if(e.backButtonExit===`*`)return Ke;let t=[`#/`];return Array.isArray(e.backButtonExit)&&t.push(...e.backButtonExit.filter(qe).map(Je)),()=>t.includes(window.location.hash)}var Xe={__history:[],add:N,remove:N,install({$q:e}){if(this.__installed)return;let{cordova:t,capacitor:n}=B.is;if(!t&&!n)return;let r=e.config[t?`cordova`:`capacitor`];if(r?.backButton===!1||n&&(window.Capacitor===void 0||window.Capacitor.Plugins.App===void 0))return;this.add=e=>{e.condition===void 0&&(e.condition=Ke),this.__history.push(e)},this.remove=e=>{let t=this.__history.indexOf(e);t!==-1&&this.__history.splice(t,1)};let i=Ye({backButtonExit:!0,...r}),a=()=>{if(this.__history.length!==0){let e=this.__history.at(-1);e.condition()&&(this.__history.pop(),e.handler())}else i()?navigator.app.exitApp():window.history.back()};t?document.addEventListener(`deviceready`,()=>{document.addEventListener(`backbutton`,a,!1)}):window.Capacitor.Plugins.App.addListener(`backButton`,a)}},Ze={isoName:`en-US`,nativeName:`English (US)`,label:{clear:`Clear`,ok:`OK`,cancel:`Cancel`,close:`Close`,set:`Set`,select:`Select`,reset:`Reset`,remove:`Remove`,update:`Update`,create:`Create`,search:`Search`,filter:`Filter`,refresh:`Refresh`,expand:e=>e?`Expand "${e}"`:`Expand`,collapse:e=>e?`Collapse "${e}"`:`Collapse`},date:{days:`Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday`.split(`_`),daysShort:`Sun_Mon_Tue_Wed_Thu_Fri_Sat`.split(`_`),months:`January_February_March_April_May_June_July_August_September_October_November_December`.split(`_`),monthsShort:`Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec`.split(`_`),firstDayOfWeek:0,format24h:!1,pluralDay:`days`,prevMonth:`Previous month`,nextMonth:`Next month`,prevYear:`Previous year`,nextYear:`Next year`,today:`Today`,prevRangeYears:e=>`Previous ${e} years`,nextRangeYears:e=>`Next ${e} years`},table:{noData:`No data available`,noResults:`No matching records found`,loading:`Loading...`,selectedRecords:e=>e===1?`1 record selected.`:(e===0?`No`:e)+` records selected.`,recordsPerPage:`Records per page:`,allRows:`All`,pagination:(e,t,n)=>e+`–`+t+` of `+n,columns:`Columns`},pagination:{first:`First page`,prev:`Previous page`,next:`Next page`,last:`Last page`},editor:{url:`URL`,bold:`Bold`,italic:`Italic`,strikethrough:`Strikethrough`,underline:`Underline`,unorderedList:`Unordered List`,orderedList:`Ordered List`,subscript:`Subscript`,superscript:`Superscript`,hyperlink:`Hyperlink`,toggleFullscreen:`Toggle Fullscreen`,quote:`Quote`,left:`Left align`,center:`Center align`,right:`Right align`,justify:`Justify align`,print:`Print`,outdent:`Decrease indentation`,indent:`Increase indentation`,removeFormat:`Remove formatting`,formatting:`Formatting`,fontSize:`Font Size`,align:`Align`,hr:`Insert Horizontal Rule`,undo:`Undo`,redo:`Redo`,heading1:`Heading 1`,heading2:`Heading 2`,heading3:`Heading 3`,heading4:`Heading 4`,heading5:`Heading 5`,heading6:`Heading 6`,paragraph:`Paragraph`,code:`Code`,size1:`Very small`,size2:`A bit small`,size3:`Normal`,size4:`Medium-large`,size5:`Big`,size6:`Very big`,size7:`Maximum`,defaultFont:`Default Font`,viewSource:`View Source`},tree:{noNodes:`No nodes available`,noResults:`No matching nodes found`}};function Qe(){let e=Array.isArray(navigator.languages)&&navigator.languages.length!==0?navigator.languages[0]:navigator.language;if(typeof e==`string`)return e.split(/[-_]/).map((e,t)=>t===0?e.toLowerCase():t>1||e.length<4?e.toUpperCase():e[0].toUpperCase()+e.slice(1).toLowerCase()).join(`-`)}var $e=ae({__qLang:{}},{getLocale:Qe,set(e=Ze,t){let n={...e,rtl:e.rtl===!0,getLocale:Qe};if(n.set=$e.set,$e.__langConfig===void 0||!$e.__langConfig.noHtmlAttrs){let e=document.documentElement;e.setAttribute(`dir`,n.rtl?`rtl`:`ltr`),e.setAttribute(`lang`,n.isoName)}Object.assign($e.__qLang,n)},install({$q:e,lang:t,ssrContext:n}){e.lang=$e.__qLang,$e.__langConfig=e.config.lang,this.__installed?t!==void 0&&this.set(t):(this.props=new Proxy(this.__qLang,{get:Reflect.get,ownKeys(e){return Reflect.ownKeys(e).filter(e=>e!==`set`&&e!==`getLocale`)}}),this.set(t||Ze))}}),et={name:`material-icons`,type:{positive:`check_circle`,negative:`warning`,info:`info`,warning:`priority_high`},arrow:{up:`arrow_upward`,right:`arrow_forward`,down:`arrow_downward`,left:`arrow_back`,dropdown:`arrow_drop_down`},chevron:{left:`chevron_left`,right:`chevron_right`},colorPicker:{spectrum:`gradient`,tune:`tune`,palette:`style`},pullToRefresh:{icon:`refresh`},carousel:{left:`chevron_left`,right:`chevron_right`,up:`keyboard_arrow_up`,down:`keyboard_arrow_down`,navigationIcon:`lens`},chip:{remove:`cancel`,selected:`check`},datetime:{arrowLeft:`chevron_left`,arrowRight:`chevron_right`,now:`access_time`,today:`today`},editor:{bold:`format_bold`,italic:`format_italic`,strikethrough:`strikethrough_s`,underline:`format_underlined`,unorderedList:`format_list_bulleted`,orderedList:`format_list_numbered`,subscript:`vertical_align_bottom`,superscript:`vertical_align_top`,hyperlink:`link`,toggleFullscreen:`fullscreen`,quote:`format_quote`,left:`format_align_left`,center:`format_align_center`,right:`format_align_right`,justify:`format_align_justify`,print:`print`,outdent:`format_indent_decrease`,indent:`format_indent_increase`,removeFormat:`format_clear`,formatting:`text_format`,fontSize:`format_size`,align:`format_align_left`,hr:`remove`,undo:`undo`,redo:`redo`,heading:`format_size`,code:`code`,size:`format_size`,font:`font_download`,viewSource:`code`},expansionItem:{icon:`keyboard_arrow_down`,denseIcon:`arrow_drop_down`},fab:{icon:`add`,activeIcon:`close`},field:{clear:`cancel`,error:`error`},pagination:{first:`first_page`,prev:`keyboard_arrow_left`,next:`keyboard_arrow_right`,last:`last_page`},rating:{icon:`grade`},stepper:{done:`check`,active:`edit`,error:`warning`},tabs:{left:`chevron_left`,right:`chevron_right`,up:`keyboard_arrow_up`,down:`keyboard_arrow_down`},table:{arrowUp:`arrow_upward`,warning:`warning`,firstPage:`first_page`,prevPage:`chevron_left`,nextPage:`chevron_right`,lastPage:`last_page`},tree:{icon:`play_arrow`},uploader:{done:`done`,clear:`clear`,add:`add_box`,upload:`cloud_upload`,removeQueue:`clear_all`,removeUploaded:`done_all`}},tt=ae({iconMapFn:null,__qIconSet:{}},{set(e,t){let n={...e};n.set=tt.set,Object.assign(tt.__qIconSet,n)},install({$q:e,iconSet:t,ssrContext:n}){e.config.iconMapFn!==void 0&&(this.iconMapFn=e.config.iconMapFn),e.iconSet=this.__qIconSet,F(e,`iconMapFn`,()=>this.iconMapFn,e=>{this.iconMapFn=e}),this.__installed?t!==void 0&&this.set(t):(this.props=new Proxy(this.__qIconSet,{get:Reflect.get,ownKeys(e){return Reflect.ownKeys(e).filter(e=>e!==`set`)}}),this.set(t||et))}});function nt(e,t){if(e===t)return!0;if(e!==null&&t!==null&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;let n,r;if(e.constructor===Array){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!nt(e[r],t[r]))return!1;return!0}if(e.constructor===Map){if(e.size!==t.size)return!1;let n=e.entries();for(r=n.next();!r.done;){if(!t.has(r.value[0]))return!1;r=n.next()}for(n=e.entries(),r=n.next();!r.done;){if(!nt(r.value[1],t.get(r.value[0])))return!1;r=n.next()}return!0}if(e.constructor===Set){if(e.size!==t.size)return!1;let n=e.entries();for(r=n.next();!r.done;){if(!t.has(r.value[0]))return!1;r=n.next()}return!0}if(e.buffer!=null&&e.buffer.constructor===ArrayBuffer){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();let i=Object.keys(e).filter(t=>e[t]!==void 0);if(n=i.length,n!==Object.keys(t).filter(e=>t[e]!==void 0).length)return!1;for(r=n;r--!==0;){let n=i[r];if(!nt(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function H(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function rt(e){return typeof e==`number`&&Number.isFinite(e)}var it={},at=!1;function ot(){at=!0}var st=[xe,Ge,V,ze,Xe,$e,tt];function ct(e,t){let n=te(e);n.config.globalProperties=t.config.globalProperties;let{reload:r,...i}=t._context;return Object.assign(n._context,i),n}function lt(e,t){t.forEach(t=>{t.install(e),t.__installed=!0})}function ut(e,t,n){e.config.globalProperties.$q=n.$q,e.provide(`_q_`,n.$q),lt(n,st),t.components!==void 0&&Object.values(t.components).forEach(t=>{H(t)&&t.name!==void 0&&e.component(t.name,t)}),t.directives!==void 0&&Object.values(t.directives).forEach(t=>{H(t)&&t.name!==void 0&&e.directive(t.name,t)}),t.plugins!==void 0&&lt(n,Object.values(t.plugins).filter(e=>typeof e.install==`function`&&!st.includes(e))),Te.value&&(n.$q.onSSRHydrated=()=>{n.onSSRHydrated.forEach(e=>{e()}),n.$q.onSSRHydrated=()=>{}})}var dt={name:`Quasar`,version:`2.24.0`,install:function(e,t={}){let n={version:`2.24.0`};at?n.config=t.config||{}:(t.config!==void 0&&Object.assign(it,t.config),n.config={...it},ot()),ut(e,t,{parentApp:e,$q:n,lang:t.lang,iconSet:t.iconSet,onSSRHydrated:[]})},lang:$e,iconSet:tt},U=L({name:`QCardSection`,props:{tag:{type:String,default:`div`},horizontal:Boolean},setup(e,{slots:t}){let n=p(()=>`q-card__section q-card__section--${e.horizontal?`horiz row no-wrap`:`vert`}`);return()=>j(e.tag,{class:n.value},ge(t.default))}}),ft={xs:2,sm:4,md:6,lg:10,xl:14};function pt(e){return{transform:`scale3d(${e},1,1)`}}var mt=L({name:`QLinearProgress`,props:{...he,...me,value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean},setup(e,{slots:t}){let{proxy:n}=A(),r=fe(e,n.$q),i=ce(e,ft),a=p(()=>e.indeterminate||e.query),o=p(()=>({...i.value===null?{}:i.value,"--q-linear-progress-speed":`${e.animationSpeed}ms`})),s=p(()=>`q-linear-progress`+(e.color===void 0?``:` text-${e.color}`)+(e.reverse||e.query?` q-linear-progress--reverse`:``)+(e.rounded?` rounded-borders`:``)),c=p(()=>pt(e.buffer===void 0?1:e.buffer)),l=p(()=>`with${e.instantFeedback?`out`:``}-transition`),u=p(()=>`q-linear-progress__track absolute-full q-linear-progress__track--${l.value} q-linear-progress__track--${r.value?`dark`:`light`}`+(e.trackColor===void 0?``:` bg-${e.trackColor}`)),d=p(()=>pt(a.value?1:e.value)),f=p(()=>`q-linear-progress__model absolute-full q-linear-progress__model--${l.value} q-linear-progress__model--${a.value?`in`:``}determinate`),m=p(()=>({width:`${e.value*100}%`})),h=p(()=>`q-linear-progress__stripe absolute-${e.reverse?`right`:`left`} q-linear-progress__stripe--${l.value}`);return()=>{let n=[j(`div`,{class:u.value,style:c.value}),j(`div`,{class:f.value,style:d.value})];return e.stripe&&!a.value&&n.push(j(`div`,{class:h.value,style:m.value})),j(`div`,{class:s.value,style:o.value,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":e.indeterminate?void 0:e.value},z(t.default,n))}}}),ht=L({name:`QCard`,props:{...he,tag:{type:String,default:`div`},square:Boolean,flat:Boolean,bordered:Boolean},setup(e,{slots:t}){let{proxy:{$q:n}}=A(),r=fe(e,n),i=p(()=>`q-card`+(r.value?` q-card--dark q-dark`:``)+(e.bordered?` q-card--bordered`:``)+(e.square?` q-card--square no-border-radius`:``)+(e.flat?` q-card--flat no-shadow`:``));return()=>j(e.tag,{class:i.value},ge(t.default))}});function gt(e,t,n){let r;function i(){r!==void 0&&(Xe.remove(r),r=void 0)}return b(()=>{e.value&&i()}),{removeFromHistory:i,addToHistory(){r={condition:()=>n.value,handler:t},Xe.add(r)}}}function _t(e){if(Object(e.$parent)===e.$parent)return e.$parent;let{parent:t}=e.$;for(;Object(t)===t;){if(Object(t.proxy)===t.proxy)return t.proxy;t=t.parent}}function vt(e,t){typeof t.type==`symbol`?Array.isArray(t.children)&&t.children.forEach(t=>{vt(e,t)}):e.add(t)}function yt(e){let t=new Set;return e.forEach(e=>{vt(t,e)}),[...t]}function bt(e){return e.appContext.config.globalProperties.$router!==void 0}function xt(e){return e.isUnmounted===!0||e.isDeactivated===!0}function St(){let e=null,t=A();function n(){e!==null&&(clearTimeout(e),e=null)}return f(n),b(n),{removeTimeout:n,registerTimeout(r,i){n(),xt(t)||(e=setTimeout(()=>{e=null,r()},i))}}}function Ct(){let e,t=A();function n(){e=void 0}return f(n),b(n),{removeTick:n,registerTick(n){e=n,C(()=>{e===n&&(xt(t)||e(),e=void 0)})}}}var wt={modelValue:{type:Boolean,default:null},"onUpdate:modelValue":[Function,Array]},Tt=[`beforeShow`,`show`,`beforeHide`,`hide`];function Et({showing:e,canShow:t,hideOnRouteChange:n,handleShow:r,handleHide:i,handleRouteChange:a,processOnMount:o}){let s=A(),{props:c,emit:l,proxy:u}=s,d;function f(t){e.value?h(t):p(t)}function p(e){if(c.disable||e?.qAnchorHandled===!0||t!==void 0&&!t(e))return;let n=c[`onUpdate:modelValue`]!==void 0;n&&(l(`update:modelValue`,!0),d=e,C(()=>{d===e&&(d=void 0)})),(c.modelValue===null||!n)&&m(e)}function m(t){e.value||(e.value=!0,l(`beforeShow`,t),r===void 0?l(`show`,t):r(t))}function h(e){if(c.disable)return;let t=c[`onUpdate:modelValue`]!==void 0;t&&(l(`update:modelValue`,!1),d=e,C(()=>{d===e&&(d=void 0)})),(c.modelValue===null||!t)&&g(e)}function g(t){e.value&&(e.value=!1,l(`beforeHide`,t),i===void 0?l(`hide`,t):i(t))}function _(t){c.disable&&t?c[`onUpdate:modelValue`]!==void 0&&l(`update:modelValue`,!1):t===!0!==e.value&&(t?m:g)(d)}O(()=>c.modelValue,_),n!==void 0&&bt(s)&&O(()=>u.$route.fullPath,()=>{n.value&&e.value&&(a?.(),h())}),o&&y(()=>{_(c.modelValue)});let v={show:p,hide:h,toggle:f};return Object.assign(u,v),v}var Dt={transitionShow:{type:String,default:`fade`},transitionHide:{type:String,default:`fade`},transitionDuration:{type:[String,Number],default:300}};function Ot(e,t=()=>{},n=()=>{}){return{transitionProps:p(()=>{let r=`q-transition--${e.transitionShow||t()}`,i=`q-transition--${e.transitionHide||n()}`;return{appear:!0,enterFromClass:`${r}-enter-from`,enterActiveClass:`${r}-enter-active`,enterToClass:`${r}-enter-to`,leaveFromClass:`${i}-leave-from`,leaveActiveClass:`${i}-leave-active`,leaveToClass:`${i}-leave-to`}}),transitionStyle:p(()=>`--q-transition-duration: ${e.transitionDuration}ms`)}}var kt=[];function At(e){return kt.find(t=>t.contentEl!==null&&t.contentEl.contains(e))}function jt(e,t){do{if(e.$options.name===`QMenu`){if(e.hide(t),e.$props.separateClosePopup)return _t(e)}else if(e.__qPortal){let n=_t(e);return n?.$options.name===`QPopupProxy`?(e.hide(t),n):e}e=_t(e)}while(e!=null)}function Mt(e,t,n){for(;n!==0&&e!=null;){if(e.__qPortal){if(n--,e.$options.name===`QMenu`){e=jt(e,t);continue}e.hide(t)}e=_t(e)}}var Nt=[],Pt=[],Ft=1,It=document.body;function Lt(e,t){let n=document.createElement(`div`);if(n.id=t===void 0?e:`q-portal--${t}--${Ft++}`,it.globalNodes!==void 0){let e=it.globalNodes.class;e!==void 0&&(n.className=e)}return It.append(n),Nt.push(n),Pt.push(t),n}function Rt(e){let t=Nt.indexOf(e);t!==-1&&(Nt.splice(t,1),Pt.splice(t,1)),e.remove()}var zt=L({name:`QPortal`,setup(e,{slots:t}){return()=>t.default()}});function Bt(e){for(e=e.parent;e!=null;){if(e.type.name===`QGlobalDialog`)return!0;if(e.type.name===`QDialog`||e.type.name===`QMenu`)return!1;e=e.parent}return!1}function Vt(e,t,n,r){let a=i(!1),o=i(!1),s=null,c={},l=r===`dialog`&&Bt(e);function u(t){if(t){Ce(c),o.value=!0;return}o.value=!1,a.value||(!l&&s===null&&(s=Lt(!1,r)),a.value=!0,kt.push(e.proxy),Ee(c))}function d(t){if(o.value=!1,!t)return;Ce(c),a.value=!1;let n=kt.indexOf(e.proxy);n!==-1&&kt.splice(n,1),s!==null&&(Rt(s),s=null)}return _(()=>{d(!0)}),e.proxy.__qPortal=!0,F(e.proxy,`contentEl`,()=>t.value),{showPortal:u,hidePortal:d,portalIsActive:a,portalIsAccessible:o,renderPortal:()=>l?n():a.value?[j(x,{to:s},j(zt,n))]:void 0}}function Ht(e,t){let n=e.style;for(let e in t)n[e]=t[e]}function Ut(e){if(e==null)return;if(typeof e==`string`)try{return document.querySelector(e)||void 0}catch{return}let t=r(e);if(t)return t.$el||t}function Wt(e,t){if(e==null||e.contains(t))return!0;for(let n=e.nextElementSibling;n!==null;n=n.nextElementSibling)if(n.contains(t))return!0;return!1}var Gt=[Element,String],Kt=[null,document,document.body,document.scrollingElement,document.documentElement];function qt(e,t){let n=Ut(t);if(n===void 0){if(e==null)return window;n=e.closest(`.scroll,.scroll-y,.overflow-auto`)}return Kt.includes(n)?window:n}function Jt(e){return e===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:e.scrollTop}function Yt(e){return e===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:e.scrollLeft}function Xt(e,t,n=0,r){let i=r===void 0?performance.now():r,a=Jt(e);if(n<=0){a!==t&&Qt(e,t);return}requestAnimationFrame(r=>{let o=r-i,s=a+(t-a)/Math.max(o,n)*o;Qt(e,s),s!==t&&Xt(e,t,n-o,r)})}function Zt(e,t,n=0,r){let i=r===void 0?performance.now():r,a=Yt(e);if(n<=0){a!==t&&$t(e,t);return}requestAnimationFrame(r=>{let o=r-i,s=a+(t-a)/Math.max(o,n)*o;$t(e,s),s!==t&&Zt(e,t,n-o,r)})}function Qt(e,t){if(e===window){window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,t);return}e.scrollTop=t}function $t(e,t){if(e===window){window.scrollTo(t,window.pageYOffset||window.scrollY||document.body.scrollTop||0);return}e.scrollLeft=t}function en(e,t,n){if(n){Xt(e,t,n);return}Qt(e,t)}function tn(e,t,n){if(n){Zt(e,t,n);return}$t(e,t)}var nn;function rn(){if(nn!==void 0)return nn;let e=document.createElement(`p`),t=document.createElement(`div`);Ht(e,{width:`100%`,height:`200px`}),Ht(t,{position:`absolute`,top:`0px`,left:`0px`,visibility:`hidden`,width:`200px`,height:`150px`,overflow:`hidden`}),t.append(e),document.body.append(t);let n=e.offsetWidth;t.style.overflow=`scroll`;let r=e.offsetWidth;return n===r&&(r=t.clientWidth),t.remove(),nn=n-r,nn}var an=0,on,sn,cn,ln=!1,un,dn,fn,pn=null;function mn(e){e.target===document&&(document.scrollingElement.scrollTop=document.scrollingElement.scrollTop)}function hn(e){ln||(ln=!0,requestAnimationFrame(()=>{ln=!1;let{height:t}=e.target,{clientHeight:n,scrollTop:r}=document.scrollingElement;(cn===void 0||t!==window.innerHeight)&&(cn=n-t,document.scrollingElement.scrollTop=r),r>cn&&(document.scrollingElement.scrollTop-=Math.ceil((r-cn)/8))}))}function gn(e){let t=document.body,n=window.visualViewport!==void 0;if(e===`add`){let{overflowY:e,overflowX:r}=window.getComputedStyle(t);on=Yt(window),sn=Jt(window),un=t.style.left,dn=t.style.top,fn=window.location.pathname,t.style.left=`-${on}px`,t.style.top=`-${sn}px`,r!==`hidden`&&(r===`scroll`||t.scrollWidth>window.innerWidth)&&t.classList.add(`q-body--force-scrollbar-x`),e!==`hidden`&&(e===`scroll`||t.scrollHeight>window.innerHeight)&&t.classList.add(`q-body--force-scrollbar-y`),document.documentElement.classList.add(`q-document--prevent-scroll`),document.qScrollPrevented=!0,B.is.ios&&(n?(window.scrollTo(0,0),window.visualViewport.addEventListener(`resize`,hn,P.passiveCapture),window.visualViewport.addEventListener(`scroll`,hn,P.passiveCapture),window.scrollTo(0,0)):window.addEventListener(`scroll`,mn,P.passiveCapture))}else B.is.ios&&(n?(window.visualViewport.removeEventListener(`resize`,hn,P.passiveCapture),window.visualViewport.removeEventListener(`scroll`,hn,P.passiveCapture)):window.removeEventListener(`scroll`,mn,P.passiveCapture)),document.documentElement.classList.remove(`q-document--prevent-scroll`),t.classList.remove(`q-body--force-scrollbar-x`,`q-body--force-scrollbar-y`),document.qScrollPrevented=!1,t.style.left=un,t.style.top=dn,window.location.pathname===fn&&window.scrollTo(on,sn),cn=void 0}function _n(e){let t=`add`;if(e===!0){if(an++,pn!==null){clearTimeout(pn),pn=null;return}if(an>1)return}else{if(an===0||(an--,an>0))return;if(t=`remove`,B.is.ios&&B.is.nativeMobile){pn!==null&&clearTimeout(pn),pn=setTimeout(()=>{gn(t),pn=null},100);return}}gn(t)}function vn(){let e;return{preventBodyScroll(t){t!==e&&(e!==void 0||t)&&(e=t,_n(t))}}}var yn=[],bn;function xn(e){e.keyCode===27&&(bn=!0)}function Sn(){bn&&=!1}function Cn(e){bn&&se(e,27)&&(bn=!1,yn.at(-1)(e))}function wn(e){window[e](`keydown`,xn),window[e](`blur`,Sn),window[e](`keyup`,Cn),bn=!1}function Tn(e){B.is.desktop&&(yn.push(e),yn.length===1&&wn(`addEventListener`))}function En(e){let t=yn.indexOf(e);t!==-1&&(yn.splice(t,1),yn.length===0&&wn(`removeEventListener`))}var Dn=[];function On(e){Dn.at(-1)(e)}function kn(e){B.is.desktop&&(Dn.push(e),Dn.length===1&&document.body.addEventListener(`focusin`,On))}function An(e){let t=Dn.indexOf(e);t!==-1&&(Dn.splice(t,1),Dn.length===0&&document.body.removeEventListener(`focusin`,On))}var jn=new Map;function Mn(e){for(let[t,n]of jn)if(n.$el.contains(e)===!0)return t}function Nn(e,t){if(e==null)return!1;let n=new Set;for(let r=Mn(t);r!==void 0&&n.has(r)===!1;r=Mn(r)){if(Wt(e,r)===!0)return!0;n.add(r)}return!1}var Pn=0,Fn={standard:`fixed-full flex-center`,top:`fixed-top justify-center`,bottom:`fixed-bottom justify-center`,right:`fixed-right items-center`,left:`fixed-left items-center`},In={standard:[`scale`,`scale`],top:[`slide-down`,`slide-up`],bottom:[`slide-up`,`slide-down`],right:[`slide-left`,`slide-right`],left:[`slide-right`,`slide-left`]},Ln=L({name:`QDialog`,inheritAttrs:!1,props:{...wt,...Dt,transitionShow:String,transitionHide:String,persistent:Boolean,autoClose:Boolean,allowFocusOutside:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,backdropFilter:String,position:{type:String,default:`standard`,validator:e=>[`standard`,`top`,`bottom`,`left`,`right`].includes(e)}},emits:[...Tt,`shake`,`click`,`escapeKey`],setup(e,{slots:t,emit:n,attrs:r}){let a=A(),o=i(null),s=i(!1),c=i(!1),l=null,u=null,d=!1,f=!1,m=p(()=>!e.persistent&&!e.noRouteDismiss&&!e.seamless),{preventBodyScroll:h}=vn(),{registerTimeout:g}=St(),{registerTick:_,removeTick:v}=Ct(),{transitionProps:y,transitionStyle:x}=Ot(e,()=>In[e.position][0],()=>In[e.position][1]),S=p(()=>x.value+(e.backdropFilter===void 0?``:`;backdrop-filter:${e.backdropFilter};-webkit-backdrop-filter:${e.backdropFilter}`)),{showPortal:C,hidePortal:w,portalIsAccessible:T,renderPortal:ee}=Vt(a,o,le,`dialog`),{hide:E}=Et({showing:s,hideOnRouteChange:m,handleShow:N,handleHide:P,handleRouteChange:ae,processOnMount:!0}),{addToHistory:D,removeFromHistory:te}=gt(s,E,m),k=p(()=>`q-dialog__inner flex no-pointer-events q-dialog__inner--${e.maximized?`maximized`:`minimized`} q-dialog__inner--${e.position} ${Fn[e.position]}`+(c.value?` q-dialog__inner--animating`:``)+(e.fullWidth?` q-dialog__inner--fullwidth`:``)+(e.fullHeight?` q-dialog__inner--fullheight`:``)+(e.square?` q-dialog__inner--square`:``)),M=p(()=>s.value&&!e.seamless),re=p(()=>e.autoClose?{onClick:z}:{}),ie=p(()=>[`q-dialog fullscreen no-pointer-events q-dialog--${M.value?`modal`:`seamless`}`,r.class]);O(()=>e.maximized,e=>{s.value&&R(e)}),O(M,e=>{h(e),e?(kn(ce),Tn(L)):(An(ce),En(L))});function N(t){D(),u=!e.noRefocus&&document.activeElement!==null?document.activeElement:null,R(e.maximized),C(),c.value=!0,e.noFocus?v():(document.activeElement?.blur(),_(F)),g(()=>{if(a.proxy.$q.platform.is.ios){if(!e.seamless&&document.activeElement){let{top:e,bottom:t}=document.activeElement.getBoundingClientRect(),{innerHeight:n}=window,r=window.visualViewport===void 0?n:window.visualViewport.height;e>0&&t>r/2&&(document.scrollingElement.scrollTop=Math.min(document.scrollingElement.scrollHeight-r,t>=n?1/0:Math.ceil(document.scrollingElement.scrollTop+t-r/2))),document.activeElement.scrollIntoView()}f=!0,o.value.click(),f=!1}C(!0),c.value=!1,n(`show`,t)},e.transitionDuration)}function P(t){if(v(),te(),oe(!0),c.value=!0,w(),u!==null){let e=(t?.type.indexOf(`key`)===0?u.closest(`[tabindex]:not([tabindex^="-"])`):void 0)||u;u=null,we(()=>{e.isConnected&&e.focus({preventScroll:!0})})}g(()=>{w(!0),c.value=!1,n(`hide`,t)},e.transitionDuration)}function ae(){u=null}function F(e){we(()=>{let t=o.value;if(t!==null){if(e!==void 0){let n=t.querySelector(e);if(n!==null){n.focus({preventScroll:!0});return}}t.contains(document.activeElement)||(t=t.querySelector(`[autofocus][tabindex], [data-autofocus][tabindex]`)||t.querySelector(`[autofocus] [tabindex], [data-autofocus] [tabindex]`)||t.querySelector(`[autofocus], [data-autofocus]`)||t,t.focus({preventScroll:!0}))}})}function I(e){e&&typeof e.focus==`function`?e.focus({preventScroll:!0}):F(),n(`shake`);let t=o.value;t!==null&&(t.classList.remove(`q-animate--scale`),t.classList.add(`q-animate--scale`),l!==null&&clearTimeout(l),l=setTimeout(()=>{l=null,o.value!==null&&(t.classList.remove(`q-animate--scale`),F())},170))}function L(){e.seamless||(e.persistent||e.noEscDismiss?!e.maximized&&!e.noShake&&I():(n(`escapeKey`),E()))}function oe(t){l!==null&&(clearTimeout(l),l=null),(t||s.value)&&(R(!1),e.seamless||(h(!1),An(ce),En(L))),t||(u=null)}function R(e){e?d||=(Pn<1&&document.body.classList.add(`q-body--dialog`),Pn++,!0):d&&=(Pn<2&&document.body.classList.remove(`q-body--dialog`),Pn--,!1)}function z(e){f||(E(e),n(`click`,e))}function se(t){!e.persistent&&!e.noBackdropDismiss?E(t):e.noShake||I()}function ce(t){!e.allowFocusOutside&&T.value&&!Wt(o.value,t.target)&&!Nn(o.value,t.target)&&F(`[tabindex]:not([tabindex="-1"])`)}Object.assign(a.proxy,{focus:F,shake:I,__updateRefocusTarget(e){u=e||null}}),b(oe);function le(){return j(`div`,{role:`dialog`,"aria-modal":M.value?`true`:`false`,...r,class:ie.value},[j(ne,{name:`q-transition--fade`,appear:!0},()=>M.value?j(`div`,{class:`q-dialog__backdrop fixed-full`,style:S.value,"aria-hidden":`true`,onClick:se}):null),j(ne,y.value,()=>s.value?j(`div`,{ref:o,class:k.value,style:x.value,tabindex:-1,...re.value},ge(t.default)):null)])}return ee}});function Rn(e){"@babel/helpers - typeof";return Rn=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Rn(e)}function zn(e,t){if(Rn(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(Rn(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Bn(e){var t=zn(e,`string`);return Rn(t)==`symbol`?t:t+``}function Vn(e,t,n){return(t=Bn(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Hn=be(`migration`,()=>{let e=i({state:`idle`});async function t(){try{let t=await fetch(`/api/migration/status`);if(!t.ok)return;e.value=await t.json()}catch{}}function n(t){e.value={...t}}return{status:e,fetchInitial:t,update:n}}),Un={class:`text-h6`},Wn={class:`text-h6`},Gn={class:`text-h6 text-negative`},Kn={class:`q-mt-sm`},qn={key:0,class:`q-mt-md text-caption`},Jn={class:`q-mt-md text-caption`},Yn=u({__name:`MigrationOverlay`,setup(t){let{t:n}=e(),i=Hn(),a=p(()=>[`backing-up`,`running`,`error`].includes(i.status.state));return y(()=>{i.fetchInitial()}),(e,t)=>(S(),g(Ln,{modelValue:a.value,"onUpdate:modelValue":t[0]||=e=>a.value=e,persistent:``,"no-backdrop-dismiss":``},{default:D(()=>[E(ht,{style:{"min-width":`400px`}},{default:D(()=>[r(i).status.state===`backing-up`?(S(),g(U,{key:0},{default:D(()=>[T(`div`,Un,c(r(n)(`migration.backing_up`)),1),E(de,{class:`q-mt-md`})]),_:1})):r(i).status.state===`running`?(S(),g(U,{key:1},{default:D(()=>[T(`div`,Wn,c(r(n)(`migration.running`,{processed:r(i).status.processed,total:r(i).status.total})),1),E(mt,{value:r(i).status.total>0?r(i).status.processed/r(i).status.total:0,class:`q-mt-md`},null,8,[`value`])]),_:1})):r(i).status.state===`error`?(S(),g(U,{key:2},{default:D(()=>[T(`div`,Gn,c(r(n)(`migration.error`)),1),T(`div`,Kn,c(r(i).status.errorMessage),1),r(i).status.backupPath?(S(),ee(`div`,qn,c(r(n)(`migration.backup_location`,{path:r(i).status.backupPath})),1)):w(``,!0),T(`div`,Jn,c(r(n)(`migration.retry`)),1)]),_:1})):w(``,!0)]),_:1})]),_:1},8,[`modelValue`]))}});function Xn(e,t=250){let n=!1,r;return function(...i){return n||(n=!0,setTimeout(()=>{n=!1},t),r=e.apply(this,i)),r}}function Zn(e,t,n,r){n.modifiers.stop&&le(e);let i=n.modifiers.color,a=n.modifiers.center||r===!0,o=document.createElement(`span`),s=document.createElement(`span`),c=oe(e),{left:l,top:u,width:d,height:f}=t.getBoundingClientRect(),p=Math.hypot(d,f),m=p/2,h=`${(d-p)/2}px`,g=a?h:`${c.left-l-m}px`,_=`${(f-p)/2}px`,v=a?_:`${c.top-u-m}px`;s.className=`q-ripple__inner`,Ht(s,{height:`${p}px`,width:`${p}px`,transform:`translate3d(${g},${v},0) scale3d(.2,.2,1)`,opacity:0}),o.className=`q-ripple${i?` text-`+i:``}`,o.setAttribute(`dir`,`ltr`),o.append(s),t.append(o);let y=()=>{o.remove(),clearTimeout(b)};n.abort.push(y);let b=setTimeout(()=>{s.classList.add(`q-ripple__inner--enter`),s.style.transform=`translate3d(${h},${_},0) scale3d(1,1,1)`,s.style.opacity=.2,b=setTimeout(()=>{s.classList.remove(`q-ripple__inner--enter`),s.classList.add(`q-ripple__inner--leave`),s.style.opacity=0,b=setTimeout(()=>{o.remove(),n.abort.splice(n.abort.indexOf(y),1)},275)},250)},50)}function Qn(e,{modifiers:t,value:n,arg:r}){let i={...e.cfg.ripple,...t,...n};e.modifiers={early:i.early===!0,stop:i.stop===!0,center:i.center===!0,color:i.color||r,keyCodes:[i.keyCodes||13].flat()}}var $n=R({name:`ripple`,beforeMount(e,t){let n=t.instance.$.appContext.config.globalProperties.$q.config||{};if(n.ripple===!1)return;let r={cfg:n,enabled:t.value!==!1,modifiers:{},abort:[],start(t){r.enabled&&!t.qSkipRipple&&t.type===(r.modifiers.early?`pointerdown`:`click`)&&Zn(t,e,r,t.qKeyEvent===!0)},keystart:Xn(t=>{r.enabled&&!t.qSkipRipple&&se(t,r.modifiers.keyCodes)&&t.type===`key${r.modifiers.early?`down`:`up`}`&&Zn(t,e,r,!0)},300)};Qn(r,t),e.__qripple=r,ie(r,`main`,[[e,`pointerdown`,`start`,`passive`],[e,`click`,`start`,`passive`],[e,`keydown`,`keystart`,`passive`],[e,`keyup`,`keystart`,`passive`]])},updated(e,t){if(t.oldValue!==t.value){let n=e.__qripple;n!==void 0&&(n.enabled=t.value!==!1,n.enabled&&Object(t.value)===t.value&&Qn(n,t))}},beforeUnmount(e){let t=e.__qripple;t!==void 0&&(t.abort.forEach(e=>{e()}),ve(t,`main`),delete e.__qripple)}}),er={left:`start`,center:`center`,right:`end`,between:`between`,around:`around`,evenly:`evenly`,stretch:`stretch`},tr=Object.keys(er),nr={align:{type:String,validator:e=>tr.includes(e)}};function rr(e){return p(()=>{let t=e.align===void 0?e.vertical?`stretch`:`left`:e.align;return`${e.vertical?`items`:`justify`}-${er[t]}`})}function ir(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}function ar(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function or(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!Array.isArray(i)||i.length!==r.length||r.some((e,t)=>e!==i[t]))return!1}return!0}function sr(e,t){return Array.isArray(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function cr(e,t){return Array.isArray(e)?sr(e,t):Array.isArray(t)?sr(t,e):e===t}function lr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(!cr(e[n],t[n]))return!1;return!0}var ur={to:[String,Object],replace:Boolean,href:String,target:String,disable:Boolean},dr={...ur,exact:Boolean,activeClass:{type:String,default:`q-router-link--active`},exactActiveClass:{type:String,default:`q-router-link--exact-active`}};function fr({fallbackTag:e,useDisableForRouterLinkProps:t=!0}={}){let n=A(),{props:r,proxy:i,emit:a}=n,o=bt(n),s=p(()=>!r.disable&&r.href!==void 0),c=p(t?()=>o&&!r.disable&&!s.value&&r.to!==void 0&&r.to!==null&&r.to!==``:()=>o&&!s.value&&r.to!==void 0&&r.to!==null&&r.to!==``),l=p(()=>c.value?y(r.to):null),u=p(()=>l.value!==null),d=p(()=>s.value||u.value),f=p(()=>r.type===`a`||d.value?`a`:r.tag||e||`div`),m=p(()=>s.value?{href:r.href,target:r.target}:u.value?{href:l.value.href,target:r.target}:{}),h=p(()=>{if(!u.value)return-1;let{matched:e}=l.value,{length:t}=e,n=e[t-1];if(n===void 0)return-1;let r=i.$route.matched;if(r.length===0)return-1;let a=r.findIndex(ar.bind(null,n));if(a!==-1)return a;let o=ir(e[t-2]);return t>1&&ir(n)===o&&r.at(-1).path!==o?r.findIndex(ar.bind(null,e[t-2])):a}),g=p(()=>u.value&&h.value!==-1&&or(i.$route.params,l.value.params)),_=p(()=>g.value&&h.value===i.$route.matched.length-1&&lr(i.$route.params,l.value.params)),v=p(()=>u.value?_.value?` ${r.exactActiveClass} ${r.activeClass}`:r.exact?``:g.value?` ${r.activeClass}`:``:``);function y(e){try{return i.$router.resolve(e)}catch{}return null}function b(e,{returnRouterError:t,to:n=r.to,replace:a=r.replace}={}){if(r.disable)return e.preventDefault(),Promise.resolve(!1);if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.button!==void 0&&e.button!==0||r.target===`_blank`)return Promise.resolve(!1);e.preventDefault();let o=i.$router[a?`replace`:`push`](n);return t?o:o.then(()=>{}).catch(()=>{})}function x(e){if(u.value){let t=t=>b(e,t);a(`click`,e,t),e.defaultPrevented||t()}else a(`click`,e)}return{hasRouterLink:u,hasHrefLink:s,hasLink:d,linkTag:f,resolvedLink:l,linkIsActive:g,linkIsExactActive:_,linkClass:v,linkAttrs:m,getLink:y,navigateToRouterLink:b,navigateOnClick:x}}var pr={none:0,xs:4,sm:8,md:16,lg:24,xl:32},mr={xs:8,sm:10,md:14,lg:20,xl:24},hr=[`button`,`submit`,`reset`],gr=/[^\s]\/[^\s]/,_r=[`flat`,`outline`,`push`,`unelevated`];function vr(e,t){return e.flat?`flat`:e.outline?`outline`:e.push?`push`:e.unelevated?`unelevated`:t}function yr(e){let t=vr(e);return t===void 0?{}:{[t]:!0}}var br={...me,...ur,type:{type:String,default:`button`},label:[Number,String],icon:String,iconRight:String,..._r.reduce((e,t)=>(e[t]=Boolean)&&e,{}),square:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],ripple:{type:[Boolean,Object],default:!0},align:{...nr.align,default:`center`},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean},xr={...br,round:Boolean};function Sr(e){let t=ce(e,mr),n=rr(e),{hasRouterLink:r,hasLink:i,linkTag:a,linkAttrs:o,navigateOnClick:s}=fr({fallbackTag:`button`}),c=p(()=>{let n=e.fab||e.fabMini?{}:t.value;return e.padding===void 0?n:{...n,padding:e.padding.split(/\s+/).map(e=>e in pr?pr[e]+`px`:e).join(` `),minWidth:`0`,minHeight:`0`}}),l=p(()=>e.rounded||e.fab||e.fabMini),u=p(()=>!e.disable&&!e.loading),d=p(()=>u.value?e.tabindex||0:-1),f=p(()=>vr(e,`standard`)),m=p(()=>{let t={tabindex:d.value};return i.value?Object.assign(t,o.value):hr.includes(e.type)&&(t.type=e.type),a.value===`a`?(e.disable?t[`aria-disabled`]=`true`:t.href===void 0&&(t.role=`button`),!r.value&&gr.test(e.type)&&(t.type=e.type)):e.disable&&(t.disabled=``,t[`aria-disabled`]=`true`),e.loading&&e.percentage!==void 0&&Object.assign(t,{role:`progressbar`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e.percentage}),t});return{classes:p(()=>{let t;e.color===void 0?e.textColor&&(t=`text-${e.textColor}`):t=e.flat||e.outline?`text-${e.textColor||e.color}`:`bg-${e.color} text-${e.textColor||`white`}`;let n=e.round?`round`:`rectangle${l.value?` q-btn--rounded`:e.square?` q-btn--square`:``}`;return`q-btn--${f.value} q-btn--${n}`+(t===void 0?``:` `+t)+(u.value?` q-btn--actionable q-focusable q-hoverable`:e.disable?` disabled`:``)+(e.fab?` q-btn--fab`:e.fabMini?` q-btn--fab-mini`:``)+(e.noCaps?` q-btn--no-uppercase`:``)+(e.dense?` q-btn--dense`:``)+(e.stretch?` no-border-radius self-stretch`:``)+(e.glossy?` glossy`:``)+(e.square?` q-btn--square`:``)}),style:c,innerClasses:p(()=>n.value+(e.stack?` column`:` row`)+(e.noWrap?` no-wrap text-no-wrap`:``)+(e.loading?` q-btn__content--hidden`:``)),attributes:m,hasLink:i,linkTag:a,navigateOnClick:s,isActionable:u}}var{passiveCapture:W}=P,Cr=null,wr=null,Tr=null;function Er(e){I(e),e.qSkipRipple=!0}var Dr=L({name:`QBtn`,props:{...xr,percentage:Number,darkPercentage:Boolean,onTouchstart:[Function,Array]},emits:[`click`,`keydown`,`mousedown`,`keyup`],setup(e,{slots:t,emit:n}){let{proxy:r}=A(),{classes:a,style:o,innerClasses:s,attributes:c,hasLink:l,linkTag:u,navigateOnClick:d,isActionable:f}=Sr(e),m=i(null),h=i(null),g=null,_,v=null,y=null,x=p(()=>e.label!==void 0&&e.label!==null&&e.label!==``),S=p(()=>e.disable||e.ripple===!1?!1:{keyCodes:l.value?[13,32]:[13],...e.ripple===!0?{}:e.ripple}),C=p(()=>({center:e.round})),w=p(()=>{let t=Math.max(0,Math.min(100,e.percentage));return t>0?{transition:`transform 0.6s`,transform:`translateX(${t-100}%)`}:{}}),T=p(()=>{if(e.loading)return{onMousedown:Er,onTouchstart:Er,onClick:Er,onKeydown:Er,onKeyup:Er};if(f.value){let t={onClick:E,onKeydown:D,onMousedown:te};if(r.$q.platform.has.touch){let n=e.onTouchstart===void 0?`Passive`:``;t[`onTouchstart${n}`]=O}return t}return{onClick:I}}),ee=p(()=>({ref:m,class:`q-btn q-btn-item non-selectable no-outline `+a.value,style:o.value,...c.value,...T.value}));function E(t){if(m.value!==null){if(t!==void 0){if(t.defaultPrevented)return;let n=document.activeElement;if(e.type===`submit`&&n!==document.body&&!m.value.contains(n)&&!n.contains(m.value)){t.qAvoidFocus||m.value.focus();let e=()=>{y=null,document.removeEventListener(`keydown`,I,!0),document.removeEventListener(`keyup`,e,W),m.value?.removeEventListener(`blur`,e,W)};y=e,document.addEventListener(`keydown`,I,!0),document.addEventListener(`keyup`,e,W),m.value.addEventListener(`blur`,e,W)}}d(t)}}function D(e){m.value!==null&&(n(`keydown`,e),se(e,[13,32])&&wr!==m.value&&(wr!==null&&M(),e.defaultPrevented||(e.qAvoidFocus||m.value.focus(),wr=m.value,m.value.classList.add(`q-btn--active`),document.addEventListener(`keyup`,k,!0),m.value.addEventListener(`blur`,k,W)),I(e)))}function O(e){m.value!==null&&(n(`touchstart`,e),!e.defaultPrevented&&(Cr!==m.value&&(Cr!==null&&M(),Cr=m.value,g=e.target,g.addEventListener(`touchcancel`,k,W),g.addEventListener(`touchend`,k,W)),_=!0,v!==null&&clearTimeout(v),v=setTimeout(()=>{v=null,_=!1},200)))}function te(e){m.value!==null&&(e.qSkipRipple=_===!0,n(`mousedown`,e),!e.defaultPrevented&&Tr!==m.value&&(Tr!==null&&M(),Tr=m.value,m.value.classList.add(`q-btn--active`),document.addEventListener(`mouseup`,k,W)))}function k(e){if(m.value!==null&&(e?.type!==`blur`||document.activeElement!==m.value)){if(e?.type===`keyup`){if(wr===m.value&&se(e,[13,32])){let t=new MouseEvent(`click`,e);t.qKeyEvent=!0,e.defaultPrevented&&ue(t),e.cancelBubble&&le(t),m.value.dispatchEvent(t),I(e),e.qKeyEvent=!0}n(`keyup`,e)}M()}}function M(e){y?.();let t=h.value;!e&&(Cr===m.value||Tr===m.value)&&t!==null&&t!==document.activeElement&&(t.setAttribute(`tabindex`,-1),t.focus({preventScroll:!0})),Cr===m.value&&(g!==null&&(g.removeEventListener(`touchcancel`,k,W),g.removeEventListener(`touchend`,k,W)),Cr=g=null),Tr===m.value&&(document.removeEventListener(`mouseup`,k,W),Tr=null),wr===m.value&&(document.removeEventListener(`keyup`,k,!0),m.value?.removeEventListener(`blur`,k,W),wr=null),m.value?.classList.remove(`q-btn--active`)}return b(()=>{M(!0)}),Object.assign(r,{click:e=>{f.value&&E(e)}}),()=>{let n=[];e.icon!==void 0&&n.push(j(_e,{name:e.icon,left:!e.stack&&x.value,role:`img`})),x.value&&n.push(j(`span`,{class:`block`},[e.label])),n=z(t.default,n),e.iconRight!==void 0&&!e.round&&n.push(j(_e,{name:e.iconRight,right:!e.stack&&x.value,role:`img`}));let r=[j(`span`,{class:`q-focus-helper`,ref:h})];return e.loading&&e.percentage!==void 0&&r.push(j(`span`,{class:`q-btn__progress absolute-full overflow-hidden`+(e.darkPercentage?` q-btn__progress--dark`:``)},[j(`span`,{class:`q-btn__progress-indicator fit block`,style:w.value})])),r.push(j(`span`,{class:`q-btn__content text-center col items-center q-anchor--skip `+s.value},n)),e.loading!==null&&r.push(j(ne,{name:`q-transition--fade`},()=>e.loading?[j(`span`,{key:`loading`,class:`absolute-full flex flex-center`},t.loading===void 0?[j(de)]:t.loading())]:null)),re(j(u.value,ee.value,r),[[$n,S.value,void 0,C.value]])}}}),Or=L({name:`QCardActions`,props:{...nr,vertical:Boolean},setup(e,{slots:t}){let n=rr(e),r=p(()=>`q-card__actions ${n.value} q-card__actions--${e.vertical?`vert column`:`horiz row`}`);return()=>j(`div`,{class:r.value},ge(t.default))}}),kr=`kobo:network-token`;function Ar(){try{return localStorage.getItem(kr)}catch{return null}}function jr(e){try{localStorage.setItem(kr,e)}catch{}}function Mr(e){try{let t=new URL(e,window.location.origin);return t.origin===window.location.origin&&t.pathname.startsWith(`/api/`)}catch{return typeof e==`string`&&e.startsWith(`/api/`)}}function Nr(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}token=${encodeURIComponent(t)}`:e}var Pr=i(!1);function Fr(){Pr.value=!0}function Ir(){Pr.value=!1}var Lr={class:`text-h6`},Rr={class:`text-caption text-grey-7 q-mt-sm`},zr=u({__name:`NetworkLoginDialog`,setup(t){let{t:n}=e(),a=p({get:()=>Pr.value,set:e=>{e||Ir()}}),o=i(``),s=i(!1),l=i(!1),u=i(``);async function d(){let e=o.value.trim();if(e){s.value=!0,l.value=!1;try{let t=await fetch(`/api/settings/network/ping`,{headers:{"X-Kobo-Token":e}});if(t.ok){jr(e),Ir(),window.location.reload();return}u.value=t.status===401?n(`network.login.invalid`):n(`network.login.serverError`),l.value=!0}catch{u.value=n(`network.login.unreachable`),l.value=!0}finally{s.value=!1}}}return(e,t)=>(S(),g(Ln,{modelValue:a.value,"onUpdate:modelValue":t[1]||=e=>a.value=e,persistent:``},{default:D(()=>[E(ht,{style:{"min-width":`320px`,"max-width":`90vw`}},{default:D(()=>[E(U,null,{default:D(()=>[T(`div`,Lr,c(r(n)(`network.login.title`)),1),T(`div`,Rr,c(r(n)(`network.login.description`)),1)]),_:1}),E(U,null,{default:D(()=>[E(Pe,{modelValue:o.value,"onUpdate:modelValue":t[0]||=e=>o.value=e,label:r(n)(`network.login.tokenLabel`),placeholder:r(n)(`network.login.tokenPlaceholder`),error:l.value,"error-message":u.value,autofocus:``,dense:``,outlined:``,onKeyup:h(d,[`enter`])},null,8,[`modelValue`,`label`,`placeholder`,`error`,`error-message`])]),_:1}),E(Or,{align:`right`},{default:D(()=>[E(Dr,{label:r(n)(`network.login.connect`),color:`indigo-4`,loading:s.value,unelevated:``,onClick:d},null,8,[`label`,`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]))}}),Br=be(`templates`,{state:()=>({templates:[],defaultSlugs:[],loading:!1,loaded:!1}),getters:{isDefault:e=>t=>e.defaultSlugs.includes(t)},actions:{async fetchTemplates(){if(!this.loading){this.loading=!0;try{let e=await fetch(`/api/templates`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this.templates=t.templates,this.defaultSlugs=t.defaultSlugs??[],this.loaded=!0}catch(e){console.error(`[templates store] fetchTemplates failed:`,e)}finally{this.loading=!1}}},async createTemplate(e){let t=await fetch(`/api/templates`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let n=await t.json();return this.templates.push(n),n},async updateTemplate(e,t){let n=await fetch(`/api/templates/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json(),i=this.templates.findIndex(t=>t.slug===e);return i>=0&&(this.templates[i]=r),r},async reloadDefaults(){let e=await fetch(`/api/templates/reload-defaults`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`HTTP ${e.status}`)}let t=await e.json();return t.added.length>0&&await this.fetchTemplates(),t},async deleteTemplate(e){let t=await fetch(`/api/templates/${encodeURIComponent(e)}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}this.templates=this.templates.filter(t=>t.slug!==e)},async resetToDefault(e){let t=await fetch(`/api/templates/${encodeURIComponent(e)}/reset-default`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({error:`Reset failed`}));throw Error(e.error??`Reset failed`)}let{template:n}=await t.json(),r=this.templates.findIndex(t=>t.slug===e);return r>=0?this.templates[r]=n:this.templates.push(n),n}}}),Vr=L({name:`QAvatar`,props:{...me,fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},setup(e,{slots:t}){let n=ce(e),r=p(()=>`q-avatar`+(e.color?` bg-${e.color}`:``)+(e.textColor?` text-${e.textColor} q-chip--colored`:``)+(e.square?` q-avatar--square`:e.rounded?` rounded-borders`:``)),i=p(()=>e.fontSize?{fontSize:e.fontSize}:null);return()=>{let a=e.icon===void 0?void 0:[j(_e,{name:e.icon})];return j(`div`,{class:r.value,style:n.value},[j(`div`,{class:`q-avatar__content row flex-center overflow-hidden`,style:i.value},pe(t.default,a))])}}}),Hr=0,Ur={},Wr={},G={},Gr={},Kr=/^\s*$/,qr=[],Jr=[void 0,null,!0,!1,``],Yr=[`top-left`,`top-right`,`bottom-left`,`bottom-right`,`top`,`bottom`,`left`,`right`,`center`],Xr=[`top-left`,`top-right`,`bottom-left`,`bottom-right`],Zr={positive:{icon:e=>e.iconSet.type.positive,color:`positive`},negative:{icon:e=>e.iconSet.type.negative,color:`negative`},warning:{icon:e=>e.iconSet.type.warning,color:`warning`,textColor:`dark`},info:{icon:e=>e.iconSet.type.info,color:`info`},ongoing:{group:!1,timeout:0,spinner:!0,color:`grey-8`}};function Qr(e,t,n){if(!e)return ti(`parameter required`);let r,i={textColor:`white`};if(e.ignoreDefaults||Object.assign(i,Ur),H(e)||(i.type&&Object.assign(i,Zr[i.type]),e={message:e}),Object.assign(i,Zr[e.type||i.type],e),typeof i.icon==`function`&&(i.icon=i.icon(t)),i.spinner=i.spinner?i.spinner===!0?de:s(i.spinner):!1,i.meta={hasMedia:!!(i.spinner||i.icon||i.avatar),hasText:ei(i.message)||ei(i.caption)},i.position){if(!Yr.includes(i.position))return ti(`wrong position`,e)}else i.position=`bottom`;if(Jr.includes(i.timeout))i.timeout=5e3;else{let t=Number.parseFloat(i.timeout);if(!Number.isFinite(t)||t<0)return ti(`wrong timeout`,e);i.timeout=t}i.timeout===0?i.progress=!1:i.progress&&(i.meta.progressClass=`q-notification__progress`+(i.progressClass?` ${i.progressClass}`:``),i.meta.progressStyle={animationDuration:`${i.timeout+1e3}ms`});let a=[...Array.isArray(e.actions)?e.actions:[],...!e.ignoreDefaults&&Array.isArray(Ur.actions)?Ur.actions:[],...Array.isArray(Zr[e.type]?.actions)?Zr[e.type].actions:[]],{closeBtn:o}=i;if(o&&a.push({label:typeof o==`string`?o:t.lang.label.close}),i.actions=a.map(({handler:e,noDismiss:t,...n})=>({flat:!0,...n,onClick:typeof e==`function`?()=>{e(),t||c()}:()=>{c()}})),i.multiLine===void 0&&(i.multiLine=i.actions.length>1),Object.assign(i.meta,{class:`q-notification row items-stretch q-notification--${i.multiLine?`multi-line`:`standard`}`+(i.color===void 0?``:` bg-${i.color}`)+(i.textColor===void 0?``:` text-${i.textColor}`)+(i.classes===void 0?``:` ${i.classes}`),wrapperClass:`q-notification__wrapper col relative-position border-radius-inherit `+(i.multiLine?`column no-wrap justify-center`:`row items-center`),contentClass:`q-notification__content row items-center`+(i.multiLine?``:` col`),leftClass:i.meta.hasText?`additional`:`single`,attrs:{role:`alert`,...i.attrs}}),i.group===!1?(i.group=void 0,i.meta.group=void 0):((i.group===void 0||i.group===!0)&&(i.group=[i.message,i.caption,i.multiLine,...i.actions.map(e=>`${e.label}*${e.icon}`)].join(`|`)),i.meta.group=i.group+`|`+i.position),i.actions.length===0?i.actions=void 0:i.meta.actionsClass=`q-notification__actions row items-center `+(i.multiLine?`justify-end`:`col-auto`)+(i.meta.hasMedia?` q-notification__actions--with-media`:``),n!==void 0){n.notif.meta.timer&&(clearTimeout(n.notif.meta.timer),n.notif.meta.timer=void 0),i.meta.uid=n.notif.meta.uid;let e=G[i.position].value.indexOf(n.notif);G[i.position].value[e]=i}else{let t=Wr[i.meta.group];if(t===void 0){if(i.meta.uid=Hr++,i.meta.badge=1,[`left`,`right`,`center`].includes(i.position))G[i.position].value.splice(Math.floor(G[i.position].value.length/2),0,i);else{let e=i.position.includes(`top`)?`unshift`:`push`;G[i.position].value[e](i)}i.group!==void 0&&(Wr[i.meta.group]=i)}else{if(t.meta.timer&&(clearTimeout(t.meta.timer),t.meta.timer=void 0),i.badgePosition!==void 0){if(!Xr.includes(i.badgePosition))return ti(`wrong badgePosition`,e)}else i.badgePosition=`top-${i.position.includes(`left`)?`right`:`left`}`;i.meta.uid=t.meta.uid,i.meta.badge=t.meta.badge+1,i.meta.badgeClass=`q-notification__badge q-notification__badge--${i.badgePosition}`+(i.badgeColor===void 0?``:` bg-${i.badgeColor}`)+(i.badgeTextColor===void 0?``:` text-${i.badgeTextColor}`)+(i.badgeClass?` ${i.badgeClass}`:``);let n=G[i.position].value.indexOf(t);G[i.position].value[n]=Wr[i.meta.group]=i}}let c=()=>{$r(i),r=void 0};if(i.timeout>0&&(i.meta.timer=setTimeout(()=>{i.meta.timer=void 0,c()},i.timeout+1e3)),i.group!==void 0)return t=>{t===void 0?c():ti(`trying to update a grouped one which is forbidden`,e)};if(r={dismiss:c,config:e,notif:i},n!==void 0){Object.assign(n,r);return}return e=>{r!==void 0&&(e===void 0?r.dismiss():Qr({...r.config,...e,group:!1,position:i.position},t,r))}}function $r(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);let t=G[e.position].value.indexOf(e);if(t!==-1){e.group!==void 0&&delete Wr[e.meta.group];let n=qr[String(e.meta.uid)];if(n){let{width:e,height:t}=getComputedStyle(n);n.style.left=`${n.offsetLeft}px`,n.style.width=e,n.style.height=t}G[e.position].value.splice(t,1),typeof e.onDismiss==`function`&&e.onDismiss()}}function ei(e){return e!=null&&!Kr.test(e)}function ti(e,t){return console.error(`Notify: ${e}`,t),!1}function ni(){return L({name:`QNotifications`,devtools:{hide:!0},setup(){return()=>j(`div`,{class:`q-notifications`},Yr.map(e=>j(k,{key:e,class:Gr[e],tag:`div`,name:`q-notification--${e}`},()=>G[e].value.map(e=>{let t=e.meta,n=[];if(t.hasMedia&&(e.spinner?n.push(j(e.spinner,{class:`q-notification__spinner q-notification__spinner--`+t.leftClass,color:e.spinnerColor,size:e.spinnerSize})):e.icon?n.push(j(_e,{class:`q-notification__icon q-notification__icon--`+t.leftClass,name:e.icon,color:e.iconColor,size:e.iconSize,role:`img`})):e.avatar&&n.push(j(Vr,{class:`q-notification__avatar q-notification__avatar--`+t.leftClass},()=>j(`img`,{src:e.avatar,"aria-hidden":`true`})))),t.hasText){let t,r={class:`q-notification__message col`};if(e.html)r.innerHTML=e.caption?`<div>${e.message}</div><div class="q-notification__caption">${e.caption}</div>`:e.message;else{let n=[e.message];t=e.caption?[j(`div`,n),j(`div`,{class:`q-notification__caption`},[e.caption])]:n}n.push(j(`div`,r,t))}let r=[j(`div`,{class:t.contentClass},n)];return e.progress&&r.push(j(`div`,{key:`${t.uid}|p|${t.badge}`,class:t.progressClass,style:t.progressStyle})),e.actions&&r.push(j(`div`,{class:t.actionsClass},e.actions.map(e=>j(Dr,e)))),t.badge>1&&r.push(j(`div`,{key:`${t.uid}|${t.badge}`,class:e.meta.badgeClass,style:e.badgeStyle},[t.badge])),j(`div`,{ref:e=>{qr[String(t.uid)]=e},key:t.uid,class:t.class,...t.attrs},[j(`div`,{class:t.wrapperClass},r)])}))))}})}var K={setDefaults(e){H(e)&&Object.assign(Ur,e)},registerType(e,t){H(t)&&(Zr[e]=t)},install({$q:e,parentApp:t}){if(e.notify=this.create=t=>Qr(t,e),e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,e.config.notify!==void 0&&this.setDefaults(e.config.notify),!this.__installed){Yr.forEach(e=>{G[e]=i([]);let t=e===`left`||e===`center`||e===`right`?`center`:e.includes(`top`)?`top`:`bottom`,n=e.includes(`left`)?`start`:e.includes(`right`)?`end`:`center`;Gr[e]=`q-notifications__list q-notifications__list--${t} fixed column no-wrap ${e===`left`||e===`right`?`items-${e===`left`?`start`:`end`} justify-center`:e===`center`?`flex-center`:`items-${n}`}`});let e=Lt(`q-notify`);ct(ni(),t).mount(e)}}},ri={"model.tooltip":`Modell, das der Agent für diesen Workspace verwendet`,"reasoning.tooltip":`Denkaufwand des Agenten für diesen Workspace`,"thinking.label":`Überlegung`,"thinking.noDetails":`Der Agent denkt nach…`,"common.save":`Speichern`,"common.cancel":`Abbrechen`,"common.delete":`Löschen`,"common.close":`Schließen`,"common.details":`Details`,"common.ok":`OK`,"whatsNew.title":`Neuigkeiten`,"common.loading":`Laden...`,"common.search":`Suchen...`,"common.refresh":`Aktualisieren`,"common.copy":`Kopieren`,"common.copied":`In die Zwischenablage kopiert`,"common.copyFailed":`Kopieren fehlgeschlagen`,"common.add":`Hinzufügen`,"folderPicker.title":`Ordner auswählen`,"folderPicker.parent":`Übergeordneter Ordner`,"folderPicker.empty":`Keine Unterordner`,"folderPicker.select":`Diesen Ordner auswählen`,"common.start":`Starten`,"common.stop":`Stoppen`,"common.archive":`Archivieren`,"common.unarchive":`Wiederherstellen`,"common.selectWorkspace":`Arbeitsbereich auswählen`,"common.noResults":`Keine Ergebnisse für „{query}"`,"common.send":`senden`,"common.newLine":`neue Zeile`,"common.history":`Verlauf`,"common.justNow":`gerade eben`,"common.minutesAgo":`vor {count}m`,"common.hoursAgo":`vor {count}h`,"common.daysAgo":`vor {count}T`,"model.auto":`Auto`,"model.fable5":`Fable 5`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable5Description":`Leistungsfähigstes Modell — Nachfolger von Opus 4.8, 1M Kontext, adaptive thinking`,"model.mythos5Description":`Fable 5 ohne Sicherheitsklassifikatoren — eingeschränkter Zugriff (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude wählt das optimale Modell`,"model.opus5Description":`Für komplexes agentisches Coding und Unternehmenseinsätze, 1M Kontext`,"model.opus48Description":`Leistungsfähigstes Opus — Long-Horizon-Coding, 1M-Kontext standardmäßig, hoher Effort standardmäßig`,"model.opus47ClassicDescription":`Neuestes Opus, am leistungsfähigsten`,"model.opus471mDescription":`Neuestes Opus, 1M Kontext`,"model.opusClassicDescription":`Am leistungsstärksten`,"model.opus1mDescription":`Am leistungsstärksten, 1M Kontext`,"model.sonnet5Description":`Beste Mischung aus Geschwindigkeit und Intelligenz, 1M Kontext`,"model.sonnetClassicDescription":`Ausgewogen`,"model.sonnet1mDescription":`Ausgewogen, 1M Kontext`,"model.haikuDescription":`Am schnellsten`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`Neuestes Spitzenmodell für agentisches Coding (erfordert ChatGPT-Anmeldung)`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Ausgewogenes agentisches Coding-Modell für den Alltag (erfordert ChatGPT-Anmeldung)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Schnelles und günstiges agentisches Coding-Modell (erfordert ChatGPT-Anmeldung)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Empfohlen für komplexes Coding (erfordert ChatGPT-Anmeldung)`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Standard-Fallback — starkes Reasoning, funktioniert mit API-Key-Authentifizierung`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Schnell und effizient — ideal für reaktive Aufgaben und Subagenten`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimiert für professionelle Arbeit und langlaufende Agenten`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Auf Coding spezialisiertes Modell für komplexe Softwareentwicklung`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`keine`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Engine entscheidet automatisch`,"reasoning.minimalDescription":`Schnellstes, oberflächlichstes Reasoning`,"reasoning.noneDescription":`Ohne zusätzliches Reasoning`,"reasoning.lowDescription":`Schneller, weniger Tiefe`,"reasoning.mediumDescription":`Ausgewogen`,"reasoning.highDescription":`Mehr Tiefe`,"reasoning.xhighDescription":`Erweiterte Tiefe, langfristige Aufgaben`,"reasoning.maxDescription":`Maximale Tiefe`,"agentPermissionMode.label":`Berechtigungsmodus`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Edits akzeptieren`,"agentPermissionMode.interactive":`Interaktiv`,"agentPermissionMode.tooltip":`Wie der Agent Tool-Berechtigungen handhabt. Plan: schreibgeschützt, keine Schreibvorgänge. Bypass: alle Nachfragen überspringen. Strict: Datei-Edits automatisch akzeptieren, allow/deny für den Rest beachten. Interaktiv: vor jedem Tool den Benutzer per Berechtigungs-Panel fragen.`,"agentPermissionMode.autoLoopOverride":`Auto-Loop erzwingt einen Modus außer Plan — Plan blockiert MCP-Tools und Edits, die der Loop benötigt. Wähle stattdessen Bypass, Strict oder Interaktiv.`,"agentPermissionMode.autoLoopLocked":`Auf Bypass gesperrt, solange Auto-Loop aktiv ist — jeder andere Modus würde den Loop bei Berechtigungsabfragen anhalten. AskUserQuestion funktioniert weiterhin.`,"workspaceList.title":`Arbeitsbereiche`,"workspaceList.needsAttention":`Aufmerksamkeit erforderlich`,"workspaceList.running":`Aktiv`,"workspaceList.idle":`Inaktiv`,"workspaceList.archived":`Archiviert`,"workspaceList.noWorkspaces":`Noch keine Arbeitsbereiche`,"workspaceList.footer":`{count} Arbeitsbereich | {count} Arbeitsbereiche`,"workspaceList.footerRunning":`{count} aktiv`,"workspaceList.deleteDialog.title":`Arbeitsbereich löschen?`,"workspaceList.deleteDialog.deleteLocal":`Lokalen Branch löschen`,"workspaceList.deleteDialog.deleteRemote":`Remote-Branch löschen`,"workspaceList.deleteDialog.warning":`Achtung: Diese Aktion ist auf dem Remote unwiderruflich.`,"workspaceList.deleteArchivedDialog.tooltip":`Alle archivierten Arbeitsbereiche löschen`,"workspaceList.deleteArchivedDialog.title":`Alle archivierten Arbeitsbereiche löschen?`,"workspaceList.deleteArchivedDialog.message":`Dadurch werden die {count} archivierten Arbeitsbereiche endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.`,"workspacePage.selectWorkspace":`Arbeitsbereich auswählen, um zu beginnen`,"workspacePage.commandPalettePlaceholder":`Befehle suchen…`,"workspacePage.commandPaletteEmpty":`Kein passender Befehl`,"workspacePage.commandFocusChat":`Chat-Eingabe fokussieren`,"workspacePage.commandSearchHistory":`Workspace-Verlauf durchsuchen`,"workspacePage.commandTogglePanel":`Seitenleiste ein- oder ausblenden`,"workspacePage.commandStartAgent":`Agent starten`,"workspacePage.commandStopAgent":`Agent stoppen`,"workspacePage.session":`Sitzung #{n}`,"workspacePage.newSession":`+ Neue Sitzung`,"workspacePage.renameSession":`Umbenennen`,"workspacePage.renameSessionTitle":`Sitzung umbenennen`,"workspacePage.sessionNameLabel":`Sitzungsname`,"workspacePage.sessionEndedNotice":`Diese Sitzung ist beendet. Erstelle eine neue Sitzung um fortzufahren.`,"workspacePage.renameFailed":`Umbenennung fehlgeschlagen`,"workspacePage.copySessionId":`Sitzungs-ID kopieren`,"workspacePage.deleteSession":`Sitzung löschen`,"workspacePage.deleteSessionTitle":`Sitzung löschen?`,"workspacePage.deleteSessionConfirm":`Diese Sitzung und ihr Gesprächsverlauf werden dauerhaft gelöscht.`,"workspacePage.deleteSessionFailed":`Sitzung konnte nicht gelöscht werden`,"workspacePage.noEngineSessionId":`Noch keine Sitzungs-ID — der Agent hat diese Sitzung noch nicht gestartet`,"workspacePage.createSessionFailed":`Sitzung konnte nicht erstellt werden`,"workspacePage.startFailed":`Start fehlgeschlagen`,"workspacePage.stopFailed":`Stopp fehlgeschlagen`,"workspacePage.interrupt":`Unterbrechen`,"workspacePage.interrupted":`Agent unterbrochen — wartet auf Ihre nächste Nachricht`,"workspacePage.archivedBanner":`Archivierter Workspace — schreibgeschützt`,"workspacePage.worktreePurgedBanner":`Worktree gelöscht — Verlauf erhalten, keine Wiederherstellung in dieser Version`,"workspacePage.worktreePurgedTooltip":"Der Worktree-Ordner wurde von der Festplatte gelöscht, um Speicherplatz zurückzugewinnen. Chat-Verlauf, Sitzungen und PR-Metadaten bleiben hier abrufbar, aber das Arbeitsverzeichnis existiert lokal nicht mehr. Eine zukünftige Kōbō-Version wird den Worktree aus der gemergten PR wiederherstellen können — vorerst musst du ihn manuell über `gh pr checkout` oder `git worktree add` neu erstellen.","workspacePage.pendingInitialPromptBanner":`Ein anfänglicher Prompt ist ausstehend — der Agent hat ihn nie erhalten (Setup-Script abgestürzt oder Workspace nie gestartet). Klicke auf Start, um ihn jetzt zu senden.`,"workspacePage.unarchived":`Workspace dearchiviert`,"workspacePage.unarchiveFailed":`Dearchivierung fehlgeschlagen`,"workspacePage.interruptFailed":`Unterbrechung fehlgeschlagen`,"workspacePage.interruptTooltip":`Sanfte Unterbrechung (wie Escape) — stoppt das aktuelle Tool, hält die Sitzung aktiv`,"workspacePage.pendingNextRun":`Beim nächsten Start angewendet`,"workspacePage.activeSessionModel":`Aktiv: {model}`,"workspacePage.activeSessionModelTooltip":`Modell, das von der ausgewählten Sitzung tatsächlich verwendet wird`,"workspacePage.switchEngine":`Engine wechseln`,"workspacePage.switchEngineHint":`Diesen Workspace mit einer anderen Agent-Engine fortsetzen`,"workspacePage.switchEngineTitle":`Agent-Engine wechseln`,"workspacePage.switchEngineWarning":`Der aktuelle Agent wird gestoppt und eine neue Sitzung startet im selben Worktree.`,"workspacePage.engineLabel":`Engine`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Übergabe für die neue Engine`,"workspacePage.engineHandoffHint":`Überprüfen oder bearbeiten Sie den Kontext für den neuen Agenten.`,"workspacePage.confirmSwitchEngine":`Engine wechseln`,"workspacePage.switchEngineFailed":`Engine-Wechsel fehlgeschlagen`,"whip.dispatchFailed":`Peitschen-Nachricht konnte nicht gesendet werden`,"whip.phrase1":`Schneller, tocard!`,"whip.phrase2":`Leg einen Zahn zu, tocard!`,"whip.phrase3":`Zurück an die Arbeit, tocard!`,"whip.phrase4":`Zeig etwas Tempo, tocard!`,"whip.phrase5":`Weniger denken, mehr machen, tocard!`,"search.title":`Suche`,"search.tooltip":`Agent-Verlauf durchsuchen`,"search.placeholder":`In allen Agent-Nachrichten suchen…`,"search.includeArchived":`Archivierte Arbeitsbereiche einbeziehen`,"search.loading":`Suche läuft…`,"search.noResults":`Keine Treffer`,"search.error":`Suche fehlgeschlagen: {message}`,"search.resultCount":`{n} Treffer`,"search.eventType.userMessage":`Sie`,"search.eventType.agentOutput":`Agent`,"activityFeed.empty":`Noch keine Aktivität`,"activityFeed.emptyHint":`Starten Sie einen Arbeitsbereich, um die Agentenausgabe hier zu sehen`,"activityFeed.initialPrompt":`Initialer Prompt`,"activityFeed.you":`Sie`,"activityFeed.agent":`Agent`,"activityFeed.question":`Frage`,"activityFeed.goToPrevious":`Zur vorherigen Nachricht`,"activityFeed.scrollToBottom":`Nach unten scrollen`,"activityFeed.sendAnswers":`Antworten senden`,"agentBusy.banner":`Agent ist beschäftigt`,"agentBusy.subagentsRunning":`1 Sub-Agent aktiv | {n} Sub-Agents aktiv`,"agentBusy.viewSubagents":`Sub-Agents anzeigen`,"agentBusy.pendingMessage":`Warten — Agent ist beschäftigt`,"terminal.title":`Terminal`,"terminal.open":`Terminal öffnen`,"terminal.close":`Terminal schließen`,"terminal.noWorkspace":`Workspace auswählen`,"terminal.noWorktree":`Worktree noch nicht erstellt`,"terminal.error":`Terminalfehler`,"terminal.exited":`Terminal beendet`,"chatInput.placeholder":`Nachricht... (/ für Skills)`,"chatInput.fileSearchHint":`Datei suchen`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Bild anhängen`,"chatInput.queueBanner":`Nachricht in Warteschlange — wird gesendet, wenn der Agent fertig ist`,"chatInput.forceQueue":`Senden erzwingen`,"chatInput.searchHistory":`suchen`,"chatInput.commandPalette":`Befehle`,"chatInput.shortcuts":`Tastenkürzel`,"chatInput.cancelQueue":`Warteschlange abbrechen`,"chatInput.autoLoopBanner":`Auto-Loop läuft — beende ihn, um eine Nachricht zu senden`,"chatInput.awaitingUserBanner":`Der Agent wartet auf deine Antwort oben — antworte über das Fragefenster`,"chatInput.autoLoopStop":`Beenden`,"koboCommand.checkProgressDesc":`Fortschritt bei Aufgaben und Akzeptanzkriterien prüfen`,"chatInput.uploading":`Wird hochgeladen...`,"voice.title":`Sprachtranskription`,"voice.enabled":`Lokale Sprachtranskription aktivieren`,"voice.pttKey":`Push-to-talk-Taste`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Strg+Leertaste`,"voice.language":`Sprache (auto oder Code)`,"voice.model":`Aktives Modell`,"voice.commandPath":`Pfad zur Whisper-Binärdatei (optional)`,"voice.ffmpegPath":`Pfad zur ffmpeg-Binärdatei (optional)`,"voice.temperature":`Temperatur`,"voice.temperatureHint":`Niedriger = deterministischer, höher = flexibler, aber potenziell weniger stabil.`,"voice.initialPrompt":`Initial Prompt (optional)`,"voice.initialPromptHint":`Optionaler Kontext, um Whisper bei Namen, Fachbegriffen oder domänenspezifischem Vokabular zu helfen.`,"voice.translateToEnglish":`Ins Englische übersetzen`,"voice.translateToEnglishHint":`Wenn aktiviert, wird nicht-englische Sprache ins Englische übersetzt statt originalgetreu transkribiert.`,"voice.suppressNst":`Nicht-Sprach-Tokens unterdrücken`,"voice.suppressNstHint":`Versucht, Nicht-Sprach-Artefakte im Transkript zu reduzieren.`,"voice.installLink":`whisper.cpp installieren`,"voice.installGuideTitle":`Installationsanleitung`,"voice.installGuideIntro":`Installiere whisper.cpp und ffmpeg und setze bei Bedarf unten die Binärpfade.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Nach dem CMake-Build liegt die Whisper-Binärdatei üblicherweise hier: whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Danach in diesem Bereich „Pfad zur Whisper-Binärdatei“ und „Pfad zur ffmpeg-Binärdatei“ setzen (oder leer lassen, wenn im PATH).`,"voice.noneModel":`Kein aktives Modell`,"voice.notInstalled":`nicht installiert`,"voice.download":`Herunterladen`,"voice.delete":`Löschen`,"voice.holdToTalk":`Zum Sprechen gedrückt halten`,"voice.recording":`Aufnahme...`,"voice.transcribing":`Transkription...`,"voice.notSupported":`Sprachaufnahme wird in diesem Browser nicht unterstützt`,"voice.errorMicPermission":`Mikrofonberechtigung verweigert`,"voice.errorTranscription":`Sprachtranskription fehlgeschlagen`,"voice.downloadFailed":`Modelldownload fehlgeschlagen`,"voice.deleteFailed":`Modell konnte nicht gelöscht werden`,"voice.errorDisabled":`Sprachtranskription ist in den Einstellungen deaktiviert`,"voice.errorModelMissing":`Kein aktives Sprachmodell konfiguriert`,"voice.errorModelNotInstalled":`Das aktive Sprachmodell ist nicht installiert`,"voice.errorAudioInvalid":`Audioaufnahme ist ungültig oder leer`,"voice.errorLanguageInvalid":`Sprachkonfiguration ist ungültig`,"voice.errorRuntimeMissing":`Whisper-Runtime ist nicht installiert oder nicht im PATH`,"voice.maxDurationReached":`Maximale Aufnahmedauer erreicht`,"voice.runtimeReady":`Runtime bereit: {command}`,"voice.runtimeMissing":`Runtime fehlt: {command}`,"voice.ffmpegReady":`ffmpeg bereit`,"voice.ffmpegMissing":`ffmpeg fehlt`,"voice.sectionRuntime":`Runtime-Status`,"voice.sectionActivation":`Aktivierung`,"voice.sectionModels":`Whisper-Modelle`,"voice.sectionAdvanced":`Erweiterte Optionen`,"voice.sectionBehavior":`Transkriptionsverhalten`,"voice.sectionBinaries":`Binärpfade`,"voice.downloadModels":`Modell herunterladen`,"voice.cancelFailed":`Abbrechen des Downloads fehlgeschlagen`,"createPage.title":`Workspace erstellen`,"createPage.subtitle":`Beschreiben Sie die Aufgabe, wählen Sie ein Projekt und konfigurieren Sie den Agenten.`,"createPage.sectionMission":`Aufgabe`,"createPage.sectionMissionHint":`Geben Sie dem Agenten ein klares Ziel und den erforderlichen Kontext.`,"createPage.workspaceNameLabel":`Workspace-Name`,"createPage.descriptionLabel":`Aufgabenbeschreibung`,"createPage.sources":`Optionale Quellen`,"createPage.sectionGit":`Git-Projekt`,"createPage.sectionGitHint":`Wählen Sie Repository, Ausgangsbranch und Worktree-Modus.`,"createPage.worktreeMode":`Worktree-Modus`,"createPage.worktreeNew":`Neuer isolierter Worktree`,"createPage.worktreeExisting":`Vorhandenen Worktree verwenden`,"createPage.projectLabel":`Projekt`,"createPage.sourceBranch":`Ausgangsbranch`,"createPage.workingBranchPreview":`Vorschau des Arbeitsbranches`,"createPage.branchNamePending":`workspace-name`,"createPage.sectionAgent":`Agent`,"createPage.sectionAgentHint":`Prüfen Sie die Ausführungsvorgaben oder aktivieren Sie die Automatisierung.`,"createPage.configureAgent":`Agent konfigurieren`,"createPage.advancedOptions":`Erweiterte Optionen`,"createPage.keyboardHint":`Drücken Sie Strg/Cmd + Enter, um den Workspace zu erstellen.`,"createPage.createWorkspace":`Workspace erstellen`,"createPage.notionEnabled":`Notion aktiviert`,"createPage.importNotion":`Aus Notion importieren`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`Die URL muss mit https://www.notion.so/ oder https://app.notion.com/ beginnen`,"createPage.notionAutoExtract":`Unteraufgaben und Akzeptanzkriterien werden automatisch extrahiert.`,"createPage.notionPanelChoiceLabel":`Diese URL verweist auf eine Unterseite (?p=). An welcher möchtest du arbeiten?`,"createPage.notionPanelOption":`Unterseite (Panel)`,"createPage.notionPanelOptionDesc":`Die Seite, die du angesehen hast — empfohlen`,"createPage.notionParentOption":`Übergeordnete Seite`,"createPage.notionParentOptionDesc":`Das Epic / die Datenbank dazu`,"createPage.importSentry":`Sentry importieren`,"createPage.sentryEnabled":`Sentry aktiviert`,"createPage.sentryPlaceholder":`https://ihre-org.sentry.io/issues/123456`,"createPage.sentryValidation":`Die URL muss auf ein Sentry-Issue zeigen (/issues/<id>)`,"createPage.sentryAutoExtract":`Sentry-Issue wird automatisch importiert`,"createPage.sentryExtractHint":`Kobo extrahiert das Issue und schreibt es nach .ai/thoughts/`,"createPage.workspaceName":`Name des Arbeitsbereichs (Standard: Notion-Seitentitel)`,"createPage.workspaceNamePlaceholder":`Name des Arbeitsbereichs...`,"createPage.instructions":`Zusätzliche Anweisungen (optional)...`,"createPage.instructionsPlaceholder":`Aufgabe beschreiben...`,"createPage.tasks":`Aufgaben ({count})`,"createPage.addTask":`Aufgabe hinzufügen...`,"createPage.acceptanceCriteria":`Akzeptanzkriterien ({count})`,"createPage.addCriterion":`Kriterium hinzufügen...`,"createPage.projectPath":`Projektpfad eingeben`,"createPage.branchType":`Branch-Typ`,"createPage.branch":`Branch`,"createPage.noBranches":`Keine Branches gefunden`,"createPage.enterPath":`Projektpfad eingeben`,"createPage.skipSetupScript":`Setup-Skript überspringen`,"createPage.worktreePickerLabel":`Bestehender Worktree`,"createPage.noOrphanWorktrees":`Kein verwaister Worktree in diesem Projekt`,"createPage.pickWorktreeRequired":`Bitte einen Worktree zum Anhängen auswählen`,"createPage.notionExtractHint":`Unteraufgaben und Akzeptanzkriterien werden aus der Notion-Seite extrahiert.`,"createPage.errorCreating":`Fehler beim Erstellen des Arbeitsbereichs.`,"createPage.branchAdjusted":"Branch existierte bereits — stattdessen `{branch}` erstellt. Der zugehörige Worktree-Ordner verwendet das gleiche Suffix.","createPage.localSourceFallback":`Workspace vom lokalen Branch erstellt (origin nicht erreichbar) — die Basis ist möglicherweise veraltet.`,"createPage.validationNotionUrl":`Bitte eine gültige Notion-URL einfügen (https://www.notion.so/... oder https://app.notion.com/...).`,"createPage.validationDescription":`Bitte beschreiben Sie die Aufgabe.`,"createPage.validationName":`Bitte geben Sie einen Arbeitsbereichnamen an.`,"createPage.validationPath":`Bitte geben Sie den Projektpfad ein.`,"createPage.validationBranch":`Bitte wählen Sie einen Branch aus.`,"settings.title":`Einstellungen`,"settings.language":`Sprache`,"settings.projectColor":`Farbe`,"settings.projectColorClear":`Löschen`,"settings.projectColorDefault":`Standard (grau)`,"settings.workspaceListSection":`Workspace-Liste`,"settings.flattenWorkspaceList":`Workspace-Liste flach anzeigen`,"settings.flattenWorkspaceListHint":`Zeigt alle Workspaces in einer flachen Liste mit Projekt-Badge, anstatt nach Projekt gruppiert.`,"settings.skillSuite.section":`Skill-Suite`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Benutzerdefiniert`,"settings.skillSuite.superpowersHint":`Opinionierter TDD / Brainstorm / Plan-Workflow (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Garry Tans Suite — /review, /ship, /qa, /office-hours usw. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Beide Suites lassen sich kombinieren — superpowers für Methodik (Brainstorm / TDD / Pläne / Prinzipien-Review), gstack für konkrete Workflows (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Agent-Harness-Framework von affaan-m — Agents, Skills, Rules und Hooks zum Planen, Testen, Implementieren, Reviewen und Speichern (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Alle drei lassen sich kombinieren — superpowers für Methodik, gstack für konkrete Workflows, ECC für strukturierte Multi-Agent-Review-/Implementierungsdurchläufe.`,"settings.skillSuite.customHint":`Bearbeite die vier Prompts unten selbst. Beginnt mit der agnostischen Basis.`,"settings.skillSuite.reloadDefaults":`Standard wiederherstellen`,"settings.skillSuite.reloadDefaultsConfirm":`Die vier benutzerdefinierten Prompts durch die agnostischen Standardwerte ersetzen?`,"settings.skillSuite.customPrompts":`Benutzerdefinierte Prompts`,"settings.skillSuite.reviewTemplate":`Review-Vorlage`,"settings.skillSuite.autoLoopReviewGate":`Auto-Loop Review-Gate`,"settings.skillSuite.autoLoopGroomingIntro":`Auto-Loop Grooming-Intro`,"settings.skillSuite.qaTemplate":`QA-Vorlage`,"settings.skillSuite.brainstormingInstruction":`Anweisung für die Brainstorming-Phase`,"settings.global":`Allgemein`,"settings.projects":`Projekte`,"settings.globalSettings":`Allgemeine Einstellungen`,"settings.defaultModel":`Standardmodell`,"settings.defaultModelClaude":`Standardmodell (Claude Code)`,"settings.defaultModelCodex":`Standardmodell (OpenAI Codex)`,"settings.agentPermissions":`Agentenberechtigungen`,"settings.skipPermissions":`Berechtigungsabfragen überspringen (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Achtung: Wird diese Option deaktiviert, werden alle Tool-Berechtigungen (Write, Edit, Bash...) im Headless-Modus automatisch abgelehnt. Der Agent kann dann nur lesen.`,"settings.notifications":`Benachrichtigungen`,"settings.browserNotifications":`Browser-Benachrichtigung wenn Agent fertig ist`,"settings.audioNotifications":`Ton-Benachrichtigung wenn Agent fertig ist`,"settings.enableBrowserNotifications":`Browser-Benachrichtigungen aktivieren`,"settings.testBrowserNotification":`Benachrichtigung testen`,"settings.browserNotificationGranted":`Browser-Benachrichtigungen erlaubt`,"settings.browserNotificationDenied":`Browser-Benachrichtigungen blockiert`,"settings.browserNotificationAsk":`Browser-Berechtigung erforderlich`,"settings.browserNotificationUnsupported":`Browser-Benachrichtigungen nicht verfügbar`,"settings.browserNotificationPermissionNeeded":`Erlaube Browser-Benachrichtigungen, um einen Test zu senden.`,"settings.browserNotificationTestTitle":`Kōbō-Benachrichtigungstest`,"settings.browserNotificationTestBody":`Browser-Benachrichtigungen funktionieren.`,"settings.enableAudio":`Audio aktivieren`,"settings.notificationSound":`Benachrichtigungston`,"settings.notificationSoundHint":`Wird abgespielt, wenn der Agent fertig ist oder eine Berechtigung anfordert.`,"settings.questionSound":`Frageton`,"settings.questionSoundHint":`Wird nur abgespielt, wenn der Agent eine Frage stellt.`,"settings.workspaceCreatedSound":`Ton für Workspace-Erstellung`,"settings.workspaceCreatedSoundHint":`Wird nach dem Erstellen eines Workspaces abgespielt.`,"settings.notificationSoundPreview":`Anhören`,"settings.notificationVolume":`Lautstärke`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Agentenfehler`,"settings.agentErrorSoundHint":`Wird bei Quoten-, Rate-Limit- und Agentenfehlern abgespielt.`,"settings.notificationSoundBasic":`Standardbenachrichtigung`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Arbeit`,"settings.notificationSoundTravailTermine":`Arbeit erledigt`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Das wird knallen`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR und CI`,"settings.soundGeneral":`Allgemeiner Ton`,"settings.soundNone":`Kein Ton`,"settings.prCiFailedSound":`CI fehlgeschlagen`,"settings.prCiRecoveredSound":`CI wieder erfolgreich`,"settings.prChangesRequestedSound":`Änderungen angefordert`,"settings.prApprovedSound":`PR genehmigt`,"settings.prMergeConflictSound":`Merge-Konflikt`,"settings.prReadyToMergeSound":`Bereit zum Mergen`,"settings.prMergedSound":`PR gemergt`,"settings.prCiFailedSoundHint":`Wird abgespielt, wenn die CI fehlschlägt.`,"settings.prCiRecoveredSoundHint":`Wird abgespielt, wenn sich die CI nach einem Fehler erholt.`,"settings.prChangesRequestedSoundHint":`Wird abgespielt, wenn Änderungen angefordert werden.`,"settings.prApprovedSoundHint":`Wird abgespielt, wenn der Pull Request genehmigt wird.`,"settings.prMergeConflictSoundHint":`Wird abgespielt, wenn ein Merge-Konflikt erkannt wird.`,"settings.prReadyToMergeSoundHint":`Wird abgespielt, wenn der Pull Request merge-bereit ist.`,"settings.prMergedSoundHint":`Wird abgespielt, wenn der Pull Request gemergt wird.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Standard-Berechtigungsmodus`,"settings.defaultPermissionModeClaude":`Standard-Berechtigungsmodus (Claude Code)`,"settings.defaultPermissionModeCodex":`Standard-Berechtigungsmodus (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Modus bei der Erstellung eines neuen Workspaces. Plan = nur lesen, Bypass = keine Nachfragen, Strict = Edits automatisch akzeptieren mit allow-list, Interaktiv = vor jedem Tool fragen.`,"settings.activityFeed":`Aktivitätsfeed`,"settings.showThinkingBlocks":`Denkblöcke der Agenten anzeigen`,"settings.whipSettings":`Peitsche`,"settings.whipSettingsHint":`Konfiguriere den optionalen Peitschen-Kurzbefehl und die Lautstärke.`,"settings.whipEnabled":`Peitsche aktivieren`,"settings.whipEnabledHint":`Zeigt die interaktive Peitsche in geeigneten laufenden Workspaces an.`,"settings.whipVolume":`Peitschenlautstärke`,"settings.whipVolumeMasterAudioDisabled":`Der Hauptton ist ausgeschaltet. Aktivieren Sie Audio-Benachrichtigungen, um die Peitschenlautstärke anzupassen; der gespeicherte Wert bleibt erhalten.`,"whip.overlayLabel":`Interaktive Peitsche`,"whip.overlayInstructions":`Bewegen Sie den Zeiger, um die Peitsche zu steuern. Drücken Sie Eingabe oder Leertaste zum Knallen. Drücken Sie Escape zum Schließen.`,"settings.whipShortcut":`Peitschen-Tastenkürzel`,"settings.whipShortcutHint":`Klicken Sie und drücken Sie dann das gewünschte Tastenkürzel.`,"settings.whipShortcutRecording":`Tastenkürzel drücken…`,"settings.whipShortcutButtonLabel":`Peitschen-Tastenkürzel: {shortcut}`,"settings.whipShortcutRecordingLabel":`Peitschen-Tastenkürzel wird aufgezeichnet. Tastenkürzel drücken…`,"settings.whipShortcutReset":`Tastenkürzel zurücksetzen`,"settings.whipShortcutReserved":`Dieses Tastenkürzel ist vom Browser reserviert.`,"settings.testIntegration":`Verbindung testen`,"pwa.offline":`Du bist offline. Chat und Agenten benötigen den Kōbō-Server.`,"pwa.reconnecting":`Verbindung zum Kōbō-Server wird wiederhergestellt…`,"pwa.installReady":`Kōbō als App installieren.`,"pwa.install":`Installieren`,"pwa.ignore":`Ignorieren`,"pwa.updateReady":`Ein Kōbō-Update ist verfügbar.`,"pwa.reload":`Neu laden`,"chat.searchWorkspaceHistory":`Workspace-Verlauf durchsuchen`,"chat.historySearch.user":`Sie`,"chat.historySearch.agent":`Agent`,"chat.openInGitDiff":`Im Git-Diff öffnen`,"timeline.title":`Sitzungszeitachse`,"timeline.export":`Diagnose exportieren`,"timeline.unnamed":`Agent-Sitzung`,"timeline.tools":`{count} Tools`,"timeline.errors":`{count} Fehler`,"settings.verboseMessages":`Ausführliche Systemnachrichten anzeigen (task_progress, task_started)`,"settings.availableVariables":`Verfügbare Template-Variablen`,"settings.prPromptTemplate":`PR-Prompt-Vorlage`,"settings.prPromptPlaceholder":`Anweisungen für den Agenten bei der Erstellung von GitHub-PRs...`,"settings.prPromptHint":`Verwenden Sie die oben aufgeführten Platzhalter (doppelte geschweifte Klammern).`,"settings.reviewPromptTemplate":`Review-Prompt-Vorlage`,"settings.reviewPromptPlaceholder":`Anweisungen für den Agenten bei der Review von Branch-Änderungen...`,"settings.ciFixPromptTemplate":`CI-Fix-Prompt-Vorlage`,"settings.ciFixPromptHint":`Wird an den Agenten gesendet, wenn die CI eines Workspaces fehlschlägt. Variablen (doppelte geschweifte Klammern): pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Den Agenten bitten, die fehlschlagenden CI-Jobs zu diagnostizieren und zu beheben...`,"settings.finalizationPromptTemplate":`Auto-Loop-Finalisierungs-Prompt`,"settings.finalizationPromptHint":`Standard-Prompt für die letzte Auto-Loop-Iteration (abschließende Qualitätsprüfungen). Wird verwendet, wenn ein Projekt seinen eigenen Finalisierungs-Prompt leer lässt.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Notion-Initial-Prompt`,"settings.notionInitialPrompt.help":`Wird an den Workspace-Erstellungsprompt angehängt, wenn der Workspace ein Notion-Ticket hat. Variablen: {variables}.`,"settings.notionInitialPrompt.project":`Notion-Initial-Prompt (Überschreibung)`,"settings.sentryInitialPrompt":`Sentry-Initial-Prompt`,"settings.sentryInitialPrompt.help":`Wird an den Workspace-Erstellungsprompt angehängt, wenn der Workspace ein Sentry-Issue hat. Variablen: {variables}.`,"settings.sentryInitialPrompt.project":`Sentry-Initial-Prompt (Überschreibung)`,"settings.initialPrompt.inheritHint":`Leer lassen, um zu erben. Geben Sie ein Leerzeichen ein, um die Injektion auf dieser Ebene zu deaktivieren.`,"settings.resetToDefault":`Zurücksetzen`,"settings.resetFailed":`Standardwert konnte nicht geladen werden`,"settings.sentryIntegration":`Sentry-Integration`,"settings.var.prNumber":`PR-Nummer (z. B. 42)`,"settings.var.prUrl":`Vollständige URL der erstellten PR`,"settings.var.branchName":`Name des Arbeitsbranches`,"settings.var.sourceBranch":`Quellbranch, auf den die PR abzielt`,"settings.var.workspaceName":`Workspace-Name`,"settings.var.projectName":`Letztes Segment des Projektpfads`,"settings.var.notionUrl":`Notion-URL falls gesetzt, sonst leer`,"settings.var.commits":`Aufzählung der Commits zwischen Source und Head`,"settings.var.diffStats":`Git-Shortstat-Zusammenfassung (Dateien, Einfügungen, Löschungen)`,"settings.var.tasks":`Reguläre Aufgaben als Checkliste`,"settings.var.acceptanceCriteria":`Akzeptanzkriterien als Checkliste`,"settings.gitConventions":`Git-Konventionen (global)`,"settings.gitConventionsPlaceholder":`# Git-Konventionen...`,"settings.gitConventionsHint":`Diese Konventionen werden in .ai/.git-conventions.md jedes neuen Arbeitsbereichs geschrieben und müssen vom Agenten vor jeder Git-Operation eingehalten werden. Werden durch projektspezifische Konventionen überschrieben, falls definiert.`,"settings.setupScript":`Setup-Skript`,"settings.cleanupScript":`Cleanup-Skript`,"settings.archiveScript":`Archiv-Skript`,"settings.archiveScriptHint":`Shell-Skript, das serverseitig im Worktree ausgeführt wird, wenn ein Workspace archiviert wird. Leer lassen zum Deaktivieren.`,"settings.archiveScriptPlaceholder":`z. B. Container aufräumen, Speicherplatz freigeben…`,"settings.changeSourceBranchScript":`Quellbranch-Wechsel-Skript`,"settings.changeSourceBranchScript.help":`Ersetzt den eingebauten Cherry-Pick, wenn nicht leer. Das Skript verwaltet Git, PR-Basis, Force-Push und Konflikte; Kōbō verweigert nur, solange der Agent läuft, und aktualisiert die Quellbranch-Metadaten bei Exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — neuer Quellbranch aus dem Dialog
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MainLayout-DP9shoO1.js","assets/vue-i18n-C3W5i7h6.js","assets/reactivity.esm-bundler-DtSZKRQB.js","assets/runtime-dom.esm-bundler-DgevF6KV.js","assets/QIcon--SvgE-nS.js","assets/QSeparator-BdyRE-AM.js","assets/use-checkbox-SrkgiJho.js","assets/use-quasar-C3oo6nVn.js","assets/QSelect-xHphd7hW.js","assets/QTooltip-DyS20jDT.js","assets/QChip-CY0_8v_e.js","assets/documents-DJy1tgPd.js","assets/ClosePopup-eKuUr7CY.js","assets/TouchPan-Cd9KTb6-.js","assets/render-chat-markdown-C00A6CfY.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/QBadge-sMJZ_eZm.js","assets/QSpace-D9UEvM99.js","assets/QBtnToggle-BwPZ0Smh.js","assets/QList-Be_FbTA3.js","assets/layout-BAE6NR2A.js","assets/kobo-commands-CX8pforo.js","assets/formatters-D0dU6VcA.js","assets/project-color-BJrCEQ0A.js","assets/use-onboarding-CF_D2gbm.js","assets/use-onboarding-CTZuBZOi.css","assets/MainLayout-u-AM87m3.css","assets/WorkspacePage-CJKSrSEC.js","assets/QSpinnerDots-B4RmFJUj.js","assets/QPage-DuIsRmYu.js","assets/expand-template-By-8Db7_.js","assets/expand-template-D2yUa54D.css","assets/permissionModes-6jhegAm-.js","assets/QBanner-DedhGMcj.js","assets/WorkspacePage-ChnyJ3xI.css","assets/CreatePage--4KDhiYt.js","assets/CreatePage-CV_RpAuV.css","assets/SettingsPage-8AWL_4DM.js","assets/SettingsPage-BJZWZYPC.css","assets/SearchPage-CggXs3dH.js","assets/SearchPage-B08_UXDs.css","assets/HealthPage-CaOdjuVx.js","assets/ChangelogPage-Dw2LbIK2.js","assets/ChangelogPage-CQ33An2f.css"])))=>i.map(i=>d[i]);
2
+ import{n as e,t}from"./vue-i18n-C3W5i7h6.js";import{A as n,B as r,C as i,O as a,T as o,g as s,wt as c,x as l}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as u,A as d,At as f,B as p,Bt as m,C as h,H as g,It as _,Kt as v,Mt as y,Ot as b,P as x,Rt as S,Tt as C,U as w,V as T,W as ee,Z as E,_n as D,fn as O,i as te,n as k,st as A,t as j,ut as M,vt as N,yn as ne}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{C as re,D as P,E as F,F as ie,I,M as L,N as R,O as ae,P as z,a as B,b as oe,f as se,j as ce,k as le,l as ue,n as de,o as fe,p as pe,r as me,s as he,t as ge,w as _e,x as ve}from"./QIcon--SvgE-nS.js";import{a as ye,d as be,f as V,i as xe,l as Se,o as Ce,p as we,s as Te,t as Ee,u as De}from"./QSeparator-BdyRE-AM.js";import{a as Oe,d as ke,i as Ae,l as je,n as Me,o as Ne,r as Pe,t as Fe}from"./use-checkbox-SrkgiJho.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Ie=[`sm`,`md`,`lg`,`xl`],{passive:Le}=F,Re=ie({width:0,height:0,name:`xs`,sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1},{setSizes:P,setDebounce:P,install({$q:e,onSSRHydrated:t}){if(e.screen=this,this.__installed){e.config.screen!==void 0&&(e.config.screen.bodyClasses?this.__update(!0):document.body.classList.remove(`screen--${this.name}`));return}let{visualViewport:n}=window,r=n||window,i=document.scrollingElement||document.documentElement,a=n===void 0||V.is.mobile?()=>[Math.max(window.innerWidth,i.clientWidth),Math.max(window.innerHeight,i.clientHeight)]:()=>[n.width*n.scale+window.innerWidth-i.clientWidth,n.height*n.scale+window.innerHeight-i.clientHeight],o=e.config.screen?.bodyClasses===!0;this.__update=e=>{let[t,n]=a();if(n!==this.height&&(this.height=n),t!==this.width)this.width=t;else if(e!==!0)return;let r=this.sizes;this.gt.xs=t>=r.sm,this.gt.sm=t>=r.md,this.gt.md=t>=r.lg,this.gt.lg=t>=r.xl,this.lt.sm=t<r.sm,this.lt.md=t<r.md,this.lt.lg=t<r.lg,this.lt.xl=t<r.xl,this.xs=this.lt.sm,this.sm=this.gt.xs&&this.lt.md,this.md=this.gt.sm&&this.lt.lg,this.lg=this.gt.md&&this.lt.xl,this.xl=this.gt.lg,r=this.xs&&`xs`||this.sm&&`sm`||this.md&&`md`||this.lg&&`lg`||`xl`,r!==this.name&&(o&&(document.body.classList.remove(`screen--${this.name}`),document.body.classList.add(`screen--${r}`)),this.name=r)};let s,c={},l=16;this.setSizes=e=>{Ie.forEach(t=>{e[t]!==void 0&&(c[t]=e[t])})},this.setDebounce=e=>{l=e};let u=()=>{let e=getComputedStyle(document.body);e.getPropertyValue(`--q-size-sm`)&&Ie.forEach(t=>{this.sizes[t]=Number.parseInt(e.getPropertyValue(`--q-size-${t}`),10)}),this.setSizes=e=>{Ie.forEach(t=>{e[t]&&(this.sizes[t]=e[t])}),this.__update(!0)},this.setDebounce=e=>{s!==void 0&&r.removeEventListener(`resize`,s,Le),s=e>0?De(this.__update,e):this.__update,r.addEventListener(`resize`,s,Le)},this.setDebounce(l),Object.keys(c).length===0?this.__update():(this.setSizes(c),c=void 0),o&&this.name===`xs`&&document.body.classList.add(`screen--xs`)};we.value?t.push(u):u()}}),H=ie({isActive:!1,mode:!1},{__media:void 0,set(e){H.mode=e,e===`auto`?(H.__media===void 0&&(H.__media=window.matchMedia(`(prefers-color-scheme: dark)`),H.__updateMedia=()=>{H.set(`auto`)},H.__media.addListener(H.__updateMedia)),e=H.__media.matches):H.__media!==void 0&&(H.__media.removeListener(H.__updateMedia),H.__media=void 0),H.isActive=e===!0,document.body.classList.remove(`body--${e===!0?`light`:`dark`}`),document.body.classList.add(`body--${e===!0?`dark`:`light`}`)},toggle(){H.set(!H.isActive)},install({$q:e,ssrContext:t}){let n=e.config.dark;e.dark=this,this.__installed||this.set(n!==void 0&&n)}});function ze(e,t,n=document.body){if(typeof e!=`string`)throw TypeError(`Expected a string as propName`);if(typeof t!=`string`)throw TypeError(`Expected a string as value`);if(!(n instanceof Element))throw TypeError(`Expected a DOM element`);n.style.setProperty(`--q-${e}`,t)}function Be(e){if(e.ios)return`ios`;if(e.android)return`android`}function Ve({is:e,has:t,within:n},r){let i=[e.desktop?`desktop`:`mobile`,`${t.touch?``:`no-`}touch`];if(e.mobile){let t=Be(e);t!==void 0&&i.push(`platform-`+t)}if(e.nativeMobile){let t=e.nativeMobileWrapper,n=r[t];i.push(t,`native-mobile`),e.ios&&(n===void 0||n.iosStatusBarPadding)?i.push(`q-ios-padding`):e.android&&(n===void 0||n.androidStatusBarPadding!==!1)&&i.push(`q-safe-area-padding`)}else e.electron?i.push(`electron`):e.bex&&i.push(`bex`);return n.iframe&&i.push(`within-iframe`),i}function He(){let{is:e}=V,t=document.body.className,n=new Set(t.replaceAll(/ {2}/g,` `).split(` `));if(!e.nativeMobile&&!e.electron&&!e.bex){if(e.desktop)n.delete(`mobile`),n.delete(`platform-ios`),n.delete(`platform-android`),n.add(`desktop`);else if(e.mobile){n.delete(`desktop`),n.add(`mobile`),n.delete(`platform-ios`),n.delete(`platform-android`);let t=Be(e);t!==void 0&&n.add(`platform-${t}`)}}V.has.touch&&(n.delete(`no-touch`),n.add(`touch`)),V.within.iframe&&n.add(`within-iframe`);let r=[...n].join(` `);t!==r&&(document.body.className=r)}function Ue(e){for(let t in e)ze(t,e[t])}var We={install(e){if(!this.__installed){if(we.value)He();else{let{$q:t}=e;t.config.brand!==void 0&&Ue(t.config.brand),document.body.classList.add(...Ve(V,t.config))}V.is.ios&&document.body.addEventListener(`touchstart`,P),window.addEventListener(`keydown`,ve,!0)}}},Ge=()=>!0;function Ke(e){return typeof e==`string`&&e!==``&&e!==`/`&&e!==`#/`}function qe(e){return e.startsWith(`#`)&&(e=e.slice(1)),e.startsWith(`/`)||(e=`/`+e),e.endsWith(`/`)&&(e=e.slice(0,-1)),`#`+e}function Je(e){if(e.backButtonExit===!1)return()=>!1;if(e.backButtonExit===`*`)return Ge;let t=[`#/`];return Array.isArray(e.backButtonExit)&&t.push(...e.backButtonExit.filter(Ke).map(qe)),()=>t.includes(window.location.hash)}var Ye={__history:[],add:P,remove:P,install({$q:e}){if(this.__installed)return;let{cordova:t,capacitor:n}=V.is;if(!t&&!n)return;let r=e.config[t?`cordova`:`capacitor`];if(r?.backButton===!1||n&&(window.Capacitor===void 0||window.Capacitor.Plugins.App===void 0))return;this.add=e=>{e.condition===void 0&&(e.condition=Ge),this.__history.push(e)},this.remove=e=>{let t=this.__history.indexOf(e);t!==-1&&this.__history.splice(t,1)};let i=Je({backButtonExit:!0,...r}),a=()=>{if(this.__history.length!==0){let e=this.__history.at(-1);e.condition()&&(this.__history.pop(),e.handler())}else i()?navigator.app.exitApp():window.history.back()};t?document.addEventListener(`deviceready`,()=>{document.addEventListener(`backbutton`,a,!1)}):window.Capacitor.Plugins.App.addListener(`backButton`,a)}},Xe={isoName:`en-US`,nativeName:`English (US)`,label:{clear:`Clear`,ok:`OK`,cancel:`Cancel`,close:`Close`,set:`Set`,select:`Select`,reset:`Reset`,remove:`Remove`,update:`Update`,create:`Create`,search:`Search`,filter:`Filter`,refresh:`Refresh`,expand:e=>e?`Expand "${e}"`:`Expand`,collapse:e=>e?`Collapse "${e}"`:`Collapse`},date:{days:`Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday`.split(`_`),daysShort:`Sun_Mon_Tue_Wed_Thu_Fri_Sat`.split(`_`),months:`January_February_March_April_May_June_July_August_September_October_November_December`.split(`_`),monthsShort:`Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec`.split(`_`),firstDayOfWeek:0,format24h:!1,pluralDay:`days`,prevMonth:`Previous month`,nextMonth:`Next month`,prevYear:`Previous year`,nextYear:`Next year`,today:`Today`,prevRangeYears:e=>`Previous ${e} years`,nextRangeYears:e=>`Next ${e} years`},table:{noData:`No data available`,noResults:`No matching records found`,loading:`Loading...`,selectedRecords:e=>e===1?`1 record selected.`:(e===0?`No`:e)+` records selected.`,recordsPerPage:`Records per page:`,allRows:`All`,pagination:(e,t,n)=>e+`–`+t+` of `+n,columns:`Columns`},pagination:{first:`First page`,prev:`Previous page`,next:`Next page`,last:`Last page`},editor:{url:`URL`,bold:`Bold`,italic:`Italic`,strikethrough:`Strikethrough`,underline:`Underline`,unorderedList:`Unordered List`,orderedList:`Ordered List`,subscript:`Subscript`,superscript:`Superscript`,hyperlink:`Hyperlink`,toggleFullscreen:`Toggle Fullscreen`,quote:`Quote`,left:`Left align`,center:`Center align`,right:`Right align`,justify:`Justify align`,print:`Print`,outdent:`Decrease indentation`,indent:`Increase indentation`,removeFormat:`Remove formatting`,formatting:`Formatting`,fontSize:`Font Size`,align:`Align`,hr:`Insert Horizontal Rule`,undo:`Undo`,redo:`Redo`,heading1:`Heading 1`,heading2:`Heading 2`,heading3:`Heading 3`,heading4:`Heading 4`,heading5:`Heading 5`,heading6:`Heading 6`,paragraph:`Paragraph`,code:`Code`,size1:`Very small`,size2:`A bit small`,size3:`Normal`,size4:`Medium-large`,size5:`Big`,size6:`Very big`,size7:`Maximum`,defaultFont:`Default Font`,viewSource:`View Source`},tree:{noNodes:`No nodes available`,noResults:`No matching nodes found`}};function Ze(){let e=Array.isArray(navigator.languages)&&navigator.languages.length!==0?navigator.languages[0]:navigator.language;if(typeof e==`string`)return e.split(/[-_]/).map((e,t)=>t===0?e.toLowerCase():t>1||e.length<4?e.toUpperCase():e[0].toUpperCase()+e.slice(1).toLowerCase()).join(`-`)}var Qe=ie({__qLang:{}},{getLocale:Ze,set(e=Xe,t){let n={...e,rtl:e.rtl===!0,getLocale:Ze};if(n.set=Qe.set,Qe.__langConfig===void 0||!Qe.__langConfig.noHtmlAttrs){let e=document.documentElement;e.setAttribute(`dir`,n.rtl?`rtl`:`ltr`),e.setAttribute(`lang`,n.isoName)}Object.assign(Qe.__qLang,n)},install({$q:e,lang:t,ssrContext:n}){e.lang=Qe.__qLang,Qe.__langConfig=e.config.lang,this.__installed?t!==void 0&&this.set(t):(this.props=new Proxy(this.__qLang,{get:Reflect.get,ownKeys(e){return Reflect.ownKeys(e).filter(e=>e!==`set`&&e!==`getLocale`)}}),this.set(t||Xe))}}),$e={name:`material-icons`,type:{positive:`check_circle`,negative:`warning`,info:`info`,warning:`priority_high`},arrow:{up:`arrow_upward`,right:`arrow_forward`,down:`arrow_downward`,left:`arrow_back`,dropdown:`arrow_drop_down`},chevron:{left:`chevron_left`,right:`chevron_right`},colorPicker:{spectrum:`gradient`,tune:`tune`,palette:`style`},pullToRefresh:{icon:`refresh`},carousel:{left:`chevron_left`,right:`chevron_right`,up:`keyboard_arrow_up`,down:`keyboard_arrow_down`,navigationIcon:`lens`},chip:{remove:`cancel`,selected:`check`},datetime:{arrowLeft:`chevron_left`,arrowRight:`chevron_right`,now:`access_time`,today:`today`},editor:{bold:`format_bold`,italic:`format_italic`,strikethrough:`strikethrough_s`,underline:`format_underlined`,unorderedList:`format_list_bulleted`,orderedList:`format_list_numbered`,subscript:`vertical_align_bottom`,superscript:`vertical_align_top`,hyperlink:`link`,toggleFullscreen:`fullscreen`,quote:`format_quote`,left:`format_align_left`,center:`format_align_center`,right:`format_align_right`,justify:`format_align_justify`,print:`print`,outdent:`format_indent_decrease`,indent:`format_indent_increase`,removeFormat:`format_clear`,formatting:`text_format`,fontSize:`format_size`,align:`format_align_left`,hr:`remove`,undo:`undo`,redo:`redo`,heading:`format_size`,code:`code`,size:`format_size`,font:`font_download`,viewSource:`code`},expansionItem:{icon:`keyboard_arrow_down`,denseIcon:`arrow_drop_down`},fab:{icon:`add`,activeIcon:`close`},field:{clear:`cancel`,error:`error`},pagination:{first:`first_page`,prev:`keyboard_arrow_left`,next:`keyboard_arrow_right`,last:`last_page`},rating:{icon:`grade`},stepper:{done:`check`,active:`edit`,error:`warning`},tabs:{left:`chevron_left`,right:`chevron_right`,up:`keyboard_arrow_up`,down:`keyboard_arrow_down`},table:{arrowUp:`arrow_upward`,warning:`warning`,firstPage:`first_page`,prevPage:`chevron_left`,nextPage:`chevron_right`,lastPage:`last_page`},tree:{icon:`play_arrow`},uploader:{done:`done`,clear:`clear`,add:`add_box`,upload:`cloud_upload`,removeQueue:`clear_all`,removeUploaded:`done_all`}},et=ie({iconMapFn:null,__qIconSet:{}},{set(e,t){let n={...e};n.set=et.set,Object.assign(et.__qIconSet,n)},install({$q:e,iconSet:t,ssrContext:n}){e.config.iconMapFn!==void 0&&(this.iconMapFn=e.config.iconMapFn),e.iconSet=this.__qIconSet,I(e,`iconMapFn`,()=>this.iconMapFn,e=>{this.iconMapFn=e}),this.__installed?t!==void 0&&this.set(t):(this.props=new Proxy(this.__qIconSet,{get:Reflect.get,ownKeys(e){return Reflect.ownKeys(e).filter(e=>e!==`set`)}}),this.set(t||$e))}});function tt(e,t){if(e===t)return!0;if(e!==null&&t!==null&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;let n,r;if(e.constructor===Array){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!tt(e[r],t[r]))return!1;return!0}if(e.constructor===Map){if(e.size!==t.size)return!1;let n=e.entries();for(r=n.next();!r.done;){if(!t.has(r.value[0]))return!1;r=n.next()}for(n=e.entries(),r=n.next();!r.done;){if(!tt(r.value[1],t.get(r.value[0])))return!1;r=n.next()}return!0}if(e.constructor===Set){if(e.size!==t.size)return!1;let n=e.entries();for(r=n.next();!r.done;){if(!t.has(r.value[0]))return!1;r=n.next()}return!0}if(e.buffer!=null&&e.buffer.constructor===ArrayBuffer){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();let i=Object.keys(e).filter(t=>e[t]!==void 0);if(n=i.length,n!==Object.keys(t).filter(e=>t[e]!==void 0).length)return!1;for(r=n;r--!==0;){let n=i[r];if(!tt(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function nt(e){return typeof e==`number`&&Number.isFinite(e)}var rt={},it=!1;function at(){it=!0}var ot=[be,We,H,Re,Ye,Qe,et];function st(e,t){let n=te(e);n.config.globalProperties=t.config.globalProperties;let{reload:r,...i}=t._context;return Object.assign(n._context,i),n}function ct(e,t){t.forEach(t=>{t.install(e),t.__installed=!0})}function lt(e,t,n){e.config.globalProperties.$q=n.$q,e.provide(`_q_`,n.$q),ct(n,ot),t.components!==void 0&&Object.values(t.components).forEach(t=>{U(t)&&t.name!==void 0&&e.component(t.name,t)}),t.directives!==void 0&&Object.values(t.directives).forEach(t=>{U(t)&&t.name!==void 0&&e.directive(t.name,t)}),t.plugins!==void 0&&ct(n,Object.values(t.plugins).filter(e=>typeof e.install==`function`&&!ot.includes(e))),we.value&&(n.$q.onSSRHydrated=()=>{n.onSSRHydrated.forEach(e=>{e()}),n.$q.onSSRHydrated=()=>{}})}var ut={name:`Quasar`,version:`2.24.0`,install:function(e,t={}){let n={version:`2.24.0`};it?n.config=t.config||{}:(t.config!==void 0&&Object.assign(rt,t.config),n.config={...rt},at()),lt(e,t,{parentApp:e,$q:n,lang:t.lang,iconSet:t.iconSet,onSSRHydrated:[]})},lang:Qe,iconSet:et},W=R({name:`QCardSection`,props:{tag:{type:String,default:`div`},horizontal:Boolean},setup(e,{slots:t}){let n=p(()=>`q-card__section q-card__section--${e.horizontal?`horiz row no-wrap`:`vert`}`);return()=>M(e.tag,{class:n.value},he(t.default))}}),dt={xs:2,sm:4,md:6,lg:10,xl:14};function ft(e){return{transform:`scale3d(${e},1,1)`}}var pt=R({name:`QLinearProgress`,props:{...me,...pe,value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean},setup(e,{slots:t}){let{proxy:n}=A(),r=de(e,n.$q),i=se(e,dt),a=p(()=>e.indeterminate||e.query),o=p(()=>({...i.value===null?{}:i.value,"--q-linear-progress-speed":`${e.animationSpeed}ms`})),s=p(()=>`q-linear-progress`+(e.color===void 0?``:` text-${e.color}`)+(e.reverse||e.query?` q-linear-progress--reverse`:``)+(e.rounded?` rounded-borders`:``)),c=p(()=>ft(e.buffer===void 0?1:e.buffer)),l=p(()=>`with${e.instantFeedback?`out`:``}-transition`),u=p(()=>`q-linear-progress__track absolute-full q-linear-progress__track--${l.value} q-linear-progress__track--${r.value?`dark`:`light`}`+(e.trackColor===void 0?``:` bg-${e.trackColor}`)),d=p(()=>ft(a.value?1:e.value)),f=p(()=>`q-linear-progress__model absolute-full q-linear-progress__model--${l.value} q-linear-progress__model--${a.value?`in`:``}determinate`),m=p(()=>({width:`${e.value*100}%`})),h=p(()=>`q-linear-progress__stripe absolute-${e.reverse?`right`:`left`} q-linear-progress__stripe--${l.value}`);return()=>{let n=[M(`div`,{class:u.value,style:c.value}),M(`div`,{class:f.value,style:d.value})];return e.stripe&&!a.value&&n.push(M(`div`,{class:h.value,style:m.value})),M(`div`,{class:s.value,style:o.value,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":e.indeterminate?void 0:e.value},B(t.default,n))}}}),mt=R({name:`QCard`,props:{...me,tag:{type:String,default:`div`},square:Boolean,flat:Boolean,bordered:Boolean},setup(e,{slots:t}){let{proxy:{$q:n}}=A(),r=de(e,n),i=p(()=>`q-card`+(r.value?` q-card--dark q-dark`:``)+(e.bordered?` q-card--bordered`:``)+(e.square?` q-card--square no-border-radius`:``)+(e.flat?` q-card--flat no-shadow`:``));return()=>M(e.tag,{class:i.value},he(t.default))}});function ht(e,t,n){let r;function i(){r!==void 0&&(Ye.remove(r),r=void 0)}return b(()=>{e.value&&i()}),{removeFromHistory:i,addToHistory(){r={condition:()=>n.value,handler:t},Ye.add(r)}}}function gt(e){if(Object(e.$parent)===e.$parent)return e.$parent;let{parent:t}=e.$;for(;Object(t)===t;){if(Object(t.proxy)===t.proxy)return t.proxy;t=t.parent}}function _t(e,t){typeof t.type==`symbol`?Array.isArray(t.children)&&t.children.forEach(t=>{_t(e,t)}):e.add(t)}function vt(e){let t=new Set;return e.forEach(e=>{_t(t,e)}),[...t]}function yt(e){return e.appContext.config.globalProperties.$router!==void 0}function bt(e){return e.isUnmounted===!0||e.isDeactivated===!0}function xt(){let e=null,t=A();function n(){e!==null&&(clearTimeout(e),e=null)}return f(n),b(n),{removeTimeout:n,registerTimeout(r,i){n(),bt(t)||(e=setTimeout(()=>{e=null,r()},i))}}}function St(){let e,t=A();function n(){e=void 0}return f(n),b(n),{removeTick:n,registerTick(n){e=n,C(()=>{e===n&&(bt(t)||e(),e=void 0)})}}}var Ct={modelValue:{type:Boolean,default:null},"onUpdate:modelValue":[Function,Array]},wt=[`beforeShow`,`show`,`beforeHide`,`hide`];function Tt({showing:e,canShow:t,hideOnRouteChange:n,handleShow:r,handleHide:i,handleRouteChange:a,processOnMount:o}){let s=A(),{props:c,emit:l,proxy:u}=s,d;function f(t){e.value?h(t):p(t)}function p(e){if(c.disable||e?.qAnchorHandled===!0||t!==void 0&&!t(e))return;let n=c[`onUpdate:modelValue`]!==void 0;n&&(l(`update:modelValue`,!0),d=e,C(()=>{d===e&&(d=void 0)})),(c.modelValue===null||!n)&&m(e)}function m(t){e.value||(e.value=!0,l(`beforeShow`,t),r===void 0?l(`show`,t):r(t))}function h(e){if(c.disable)return;let t=c[`onUpdate:modelValue`]!==void 0;t&&(l(`update:modelValue`,!1),d=e,C(()=>{d===e&&(d=void 0)})),(c.modelValue===null||!t)&&g(e)}function g(t){e.value&&(e.value=!1,l(`beforeHide`,t),i===void 0?l(`hide`,t):i(t))}function _(t){c.disable&&t?c[`onUpdate:modelValue`]!==void 0&&l(`update:modelValue`,!1):t===!0!==e.value&&(t?m:g)(d)}O(()=>c.modelValue,_),n!==void 0&&yt(s)&&O(()=>u.$route.fullPath,()=>{n.value&&e.value&&(a?.(),h())}),o&&y(()=>{_(c.modelValue)});let v={show:p,hide:h,toggle:f};return Object.assign(u,v),v}var Et={transitionShow:{type:String,default:`fade`},transitionHide:{type:String,default:`fade`},transitionDuration:{type:[String,Number],default:300}};function Dt(e,t=()=>{},n=()=>{}){return{transitionProps:p(()=>{let r=`q-transition--${e.transitionShow||t()}`,i=`q-transition--${e.transitionHide||n()}`;return{appear:!0,enterFromClass:`${r}-enter-from`,enterActiveClass:`${r}-enter-active`,enterToClass:`${r}-enter-to`,leaveFromClass:`${i}-leave-from`,leaveActiveClass:`${i}-leave-active`,leaveToClass:`${i}-leave-to`}}),transitionStyle:p(()=>`--q-transition-duration: ${e.transitionDuration}ms`)}}var Ot=[];function kt(e){return Ot.find(t=>t.contentEl!==null&&t.contentEl.contains(e))}function At(e,t){do{if(e.$options.name===`QMenu`){if(e.hide(t),e.$props.separateClosePopup)return gt(e)}else if(e.__qPortal){let n=gt(e);return n?.$options.name===`QPopupProxy`?(e.hide(t),n):e}e=gt(e)}while(e!=null)}function jt(e,t,n){for(;n!==0&&e!=null;){if(e.__qPortal){if(n--,e.$options.name===`QMenu`){e=At(e,t);continue}e.hide(t)}e=gt(e)}}var Mt=[],Nt=[],Pt=1,Ft=document.body;function It(e,t){let n=document.createElement(`div`);if(n.id=t===void 0?e:`q-portal--${t}--${Pt++}`,rt.globalNodes!==void 0){let e=rt.globalNodes.class;e!==void 0&&(n.className=e)}return Ft.append(n),Mt.push(n),Nt.push(t),n}function Lt(e){let t=Mt.indexOf(e);t!==-1&&(Mt.splice(t,1),Nt.splice(t,1)),e.remove()}var Rt=R({name:`QPortal`,setup(e,{slots:t}){return()=>t.default()}});function zt(e){for(e=e.parent;e!=null;){if(e.type.name===`QGlobalDialog`)return!0;if(e.type.name===`QDialog`||e.type.name===`QMenu`)return!1;e=e.parent}return!1}function Bt(e,t,n,r){let a=i(!1),o=i(!1),s=null,c={},l=r===`dialog`&&zt(e);function u(t){if(t){Se(c),o.value=!0;return}o.value=!1,a.value||(!l&&s===null&&(s=It(!1,r)),a.value=!0,Ot.push(e.proxy),Te(c))}function d(t){if(o.value=!1,!t)return;Se(c),a.value=!1;let n=Ot.indexOf(e.proxy);n!==-1&&Ot.splice(n,1),s!==null&&(Lt(s),s=null)}return _(()=>{d(!0)}),e.proxy.__qPortal=!0,I(e.proxy,`contentEl`,()=>t.value),{showPortal:u,hidePortal:d,portalIsActive:a,portalIsAccessible:o,renderPortal:()=>l?n():a.value?[M(x,{to:s},M(Rt,n))]:void 0}}function Vt(e,t){let n=e.style;for(let e in t)n[e]=t[e]}function Ht(e){if(e==null)return;if(typeof e==`string`)try{return document.querySelector(e)||void 0}catch{return}let t=r(e);if(t)return t.$el||t}function Ut(e,t){if(e==null||e.contains(t))return!0;for(let n=e.nextElementSibling;n!==null;n=n.nextElementSibling)if(n.contains(t))return!0;return!1}var Wt=[Element,String],Gt=[null,document,document.body,document.scrollingElement,document.documentElement];function Kt(e,t){let n=Ht(t);if(n===void 0){if(e==null)return window;n=e.closest(`.scroll,.scroll-y,.overflow-auto`)}return Gt.includes(n)?window:n}function qt(e){return e===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:e.scrollTop}function Jt(e){return e===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:e.scrollLeft}function Yt(e,t,n=0,r){let i=r===void 0?performance.now():r,a=qt(e);if(n<=0){a!==t&&Zt(e,t);return}requestAnimationFrame(r=>{let o=r-i,s=a+(t-a)/Math.max(o,n)*o;Zt(e,s),s!==t&&Yt(e,t,n-o,r)})}function Xt(e,t,n=0,r){let i=r===void 0?performance.now():r,a=Jt(e);if(n<=0){a!==t&&Qt(e,t);return}requestAnimationFrame(r=>{let o=r-i,s=a+(t-a)/Math.max(o,n)*o;Qt(e,s),s!==t&&Xt(e,t,n-o,r)})}function Zt(e,t){if(e===window){window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,t);return}e.scrollTop=t}function Qt(e,t){if(e===window){window.scrollTo(t,window.pageYOffset||window.scrollY||document.body.scrollTop||0);return}e.scrollLeft=t}function $t(e,t,n){if(n){Yt(e,t,n);return}Zt(e,t)}function en(e,t,n){if(n){Xt(e,t,n);return}Qt(e,t)}var tn;function nn(){if(tn!==void 0)return tn;let e=document.createElement(`p`),t=document.createElement(`div`);Vt(e,{width:`100%`,height:`200px`}),Vt(t,{position:`absolute`,top:`0px`,left:`0px`,visibility:`hidden`,width:`200px`,height:`150px`,overflow:`hidden`}),t.append(e),document.body.append(t);let n=e.offsetWidth;t.style.overflow=`scroll`;let r=e.offsetWidth;return n===r&&(r=t.clientWidth),t.remove(),tn=n-r,tn}var rn=0,an,on,sn,cn=!1,ln,un,dn,fn=null;function pn(e){e.target===document&&(document.scrollingElement.scrollTop=document.scrollingElement.scrollTop)}function mn(e){cn||(cn=!0,requestAnimationFrame(()=>{cn=!1;let{height:t}=e.target,{clientHeight:n,scrollTop:r}=document.scrollingElement;(sn===void 0||t!==window.innerHeight)&&(sn=n-t,document.scrollingElement.scrollTop=r),r>sn&&(document.scrollingElement.scrollTop-=Math.ceil((r-sn)/8))}))}function hn(e){let t=document.body,n=window.visualViewport!==void 0;if(e===`add`){let{overflowY:e,overflowX:r}=window.getComputedStyle(t);an=Jt(window),on=qt(window),ln=t.style.left,un=t.style.top,dn=window.location.pathname,t.style.left=`-${an}px`,t.style.top=`-${on}px`,r!==`hidden`&&(r===`scroll`||t.scrollWidth>window.innerWidth)&&t.classList.add(`q-body--force-scrollbar-x`),e!==`hidden`&&(e===`scroll`||t.scrollHeight>window.innerHeight)&&t.classList.add(`q-body--force-scrollbar-y`),document.documentElement.classList.add(`q-document--prevent-scroll`),document.qScrollPrevented=!0,V.is.ios&&(n?(window.scrollTo(0,0),window.visualViewport.addEventListener(`resize`,mn,F.passiveCapture),window.visualViewport.addEventListener(`scroll`,mn,F.passiveCapture),window.scrollTo(0,0)):window.addEventListener(`scroll`,pn,F.passiveCapture))}else V.is.ios&&(n?(window.visualViewport.removeEventListener(`resize`,mn,F.passiveCapture),window.visualViewport.removeEventListener(`scroll`,mn,F.passiveCapture)):window.removeEventListener(`scroll`,pn,F.passiveCapture)),document.documentElement.classList.remove(`q-document--prevent-scroll`),t.classList.remove(`q-body--force-scrollbar-x`,`q-body--force-scrollbar-y`),document.qScrollPrevented=!1,t.style.left=ln,t.style.top=un,window.location.pathname===dn&&window.scrollTo(an,on),sn=void 0}function gn(e){let t=`add`;if(e===!0){if(rn++,fn!==null){clearTimeout(fn),fn=null;return}if(rn>1)return}else{if(rn===0||(rn--,rn>0))return;if(t=`remove`,V.is.ios&&V.is.nativeMobile){fn!==null&&clearTimeout(fn),fn=setTimeout(()=>{hn(t),fn=null},100);return}}hn(t)}function _n(){let e;return{preventBodyScroll(t){t!==e&&(e!==void 0||t)&&(e=t,gn(t))}}}var vn=[],yn;function bn(e){e.keyCode===27&&(yn=!0)}function xn(){yn&&=!1}function Sn(e){yn&&oe(e,27)&&(yn=!1,vn.at(-1)(e))}function Cn(e){window[e](`keydown`,bn),window[e](`blur`,xn),window[e](`keyup`,Sn),yn=!1}function wn(e){V.is.desktop&&(vn.push(e),vn.length===1&&Cn(`addEventListener`))}function Tn(e){let t=vn.indexOf(e);t!==-1&&(vn.splice(t,1),vn.length===0&&Cn(`removeEventListener`))}var En=[];function Dn(e){En.at(-1)(e)}function On(e){V.is.desktop&&(En.push(e),En.length===1&&document.body.addEventListener(`focusin`,Dn))}function kn(e){let t=En.indexOf(e);t!==-1&&(En.splice(t,1),En.length===0&&document.body.removeEventListener(`focusin`,Dn))}var An=new Map;function jn(e){for(let[t,n]of An)if(n.$el.contains(e)===!0)return t}function Mn(e,t){if(e==null)return!1;let n=new Set;for(let r=jn(t);r!==void 0&&n.has(r)===!1;r=jn(r)){if(Ut(e,r)===!0)return!0;n.add(r)}return!1}var Nn=0,Pn={standard:`fixed-full flex-center`,top:`fixed-top justify-center`,bottom:`fixed-bottom justify-center`,right:`fixed-right items-center`,left:`fixed-left items-center`},Fn={standard:[`scale`,`scale`],top:[`slide-down`,`slide-up`],bottom:[`slide-up`,`slide-down`],right:[`slide-left`,`slide-right`],left:[`slide-right`,`slide-left`]},In=R({name:`QDialog`,inheritAttrs:!1,props:{...Ct,...Et,transitionShow:String,transitionHide:String,persistent:Boolean,autoClose:Boolean,allowFocusOutside:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,backdropFilter:String,position:{type:String,default:`standard`,validator:e=>[`standard`,`top`,`bottom`,`left`,`right`].includes(e)}},emits:[...wt,`shake`,`click`,`escapeKey`],setup(e,{slots:t,emit:n,attrs:r}){let a=A(),o=i(null),s=i(!1),c=i(!1),l=null,u=null,d=!1,f=!1,m=p(()=>!e.persistent&&!e.noRouteDismiss&&!e.seamless),{preventBodyScroll:h}=_n(),{registerTimeout:g}=xt(),{registerTick:_,removeTick:v}=St(),{transitionProps:y,transitionStyle:x}=Dt(e,()=>Fn[e.position][0],()=>Fn[e.position][1]),S=p(()=>x.value+(e.backdropFilter===void 0?``:`;backdrop-filter:${e.backdropFilter};-webkit-backdrop-filter:${e.backdropFilter}`)),{showPortal:C,hidePortal:w,portalIsAccessible:T,renderPortal:ee}=Bt(a,o,ce,`dialog`),{hide:E}=Tt({showing:s,hideOnRouteChange:m,handleShow:P,handleHide:F,handleRouteChange:ie,processOnMount:!0}),{addToHistory:D,removeFromHistory:te}=ht(s,E,m),k=p(()=>`q-dialog__inner flex no-pointer-events q-dialog__inner--${e.maximized?`maximized`:`minimized`} q-dialog__inner--${e.position} ${Pn[e.position]}`+(c.value?` q-dialog__inner--animating`:``)+(e.fullWidth?` q-dialog__inner--fullwidth`:``)+(e.fullHeight?` q-dialog__inner--fullheight`:``)+(e.square?` q-dialog__inner--square`:``)),N=p(()=>s.value&&!e.seamless),ne=p(()=>e.autoClose?{onClick:B}:{}),re=p(()=>[`q-dialog fullscreen no-pointer-events q-dialog--${N.value?`modal`:`seamless`}`,r.class]);O(()=>e.maximized,e=>{s.value&&z(e)}),O(N,e=>{h(e),e?(On(se),wn(R)):(kn(se),Tn(R))});function P(t){D(),u=!e.noRefocus&&document.activeElement!==null?document.activeElement:null,z(e.maximized),C(),c.value=!0,e.noFocus?v():(document.activeElement?.blur(),_(I)),g(()=>{if(a.proxy.$q.platform.is.ios){if(!e.seamless&&document.activeElement){let{top:e,bottom:t}=document.activeElement.getBoundingClientRect(),{innerHeight:n}=window,r=window.visualViewport===void 0?n:window.visualViewport.height;e>0&&t>r/2&&(document.scrollingElement.scrollTop=Math.min(document.scrollingElement.scrollHeight-r,t>=n?1/0:Math.ceil(document.scrollingElement.scrollTop+t-r/2))),document.activeElement.scrollIntoView()}f=!0,o.value.click(),f=!1}C(!0),c.value=!1,n(`show`,t)},e.transitionDuration)}function F(t){if(v(),te(),ae(!0),c.value=!0,w(),u!==null){let e=(t?.type.indexOf(`key`)===0?u.closest(`[tabindex]:not([tabindex^="-"])`):void 0)||u;u=null,Ce(()=>{e.isConnected&&e.focus({preventScroll:!0})})}g(()=>{w(!0),c.value=!1,n(`hide`,t)},e.transitionDuration)}function ie(){u=null}function I(e){Ce(()=>{let t=o.value;if(t!==null){if(e!==void 0){let n=t.querySelector(e);if(n!==null){n.focus({preventScroll:!0});return}}t.contains(document.activeElement)||(t=t.querySelector(`[autofocus][tabindex], [data-autofocus][tabindex]`)||t.querySelector(`[autofocus] [tabindex], [data-autofocus] [tabindex]`)||t.querySelector(`[autofocus], [data-autofocus]`)||t,t.focus({preventScroll:!0}))}})}function L(e){e&&typeof e.focus==`function`?e.focus({preventScroll:!0}):I(),n(`shake`);let t=o.value;t!==null&&(t.classList.remove(`q-animate--scale`),t.classList.add(`q-animate--scale`),l!==null&&clearTimeout(l),l=setTimeout(()=>{l=null,o.value!==null&&(t.classList.remove(`q-animate--scale`),I())},170))}function R(){e.seamless||(e.persistent||e.noEscDismiss?!e.maximized&&!e.noShake&&L():(n(`escapeKey`),E()))}function ae(t){l!==null&&(clearTimeout(l),l=null),(t||s.value)&&(z(!1),e.seamless||(h(!1),kn(se),Tn(R))),t||(u=null)}function z(e){e?d||=(Nn<1&&document.body.classList.add(`q-body--dialog`),Nn++,!0):d&&=(Nn<2&&document.body.classList.remove(`q-body--dialog`),Nn--,!1)}function B(e){f||(E(e),n(`click`,e))}function oe(t){!e.persistent&&!e.noBackdropDismiss?E(t):e.noShake||L()}function se(t){!e.allowFocusOutside&&T.value&&!Ut(o.value,t.target)&&!Mn(o.value,t.target)&&I(`[tabindex]:not([tabindex="-1"])`)}Object.assign(a.proxy,{focus:I,shake:L,__updateRefocusTarget(e){u=e||null}}),b(ae);function ce(){return M(`div`,{role:`dialog`,"aria-modal":N.value?`true`:`false`,...r,class:re.value},[M(j,{name:`q-transition--fade`,appear:!0},()=>N.value?M(`div`,{class:`q-dialog__backdrop fixed-full`,style:S.value,"aria-hidden":`true`,onClick:oe}):null),M(j,y.value,()=>s.value?M(`div`,{ref:o,class:k.value,style:x.value,tabindex:-1,...ne.value},he(t.default)):null)])}return ee}});function Ln(e){"@babel/helpers - typeof";return Ln=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Ln(e)}function Rn(e,t){if(Ln(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(Ln(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function zn(e){var t=Rn(e,`string`);return Ln(t)==`symbol`?t:t+``}function Bn(e,t,n){return(t=zn(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Vn=ye(`migration`,()=>{let e=i({state:`idle`});async function t(){try{let t=await fetch(`/api/migration/status`);if(!t.ok)return;e.value=await t.json()}catch{}}function n(t){e.value={...t}}return{status:e,fetchInitial:t,update:n}}),Hn={class:`text-h6`},Un={class:`text-h6`},Wn={class:`text-h6 text-negative`},Gn={class:`q-mt-sm`},Kn={key:0,class:`q-mt-md text-caption`},qn={class:`q-mt-md text-caption`},Jn=u({__name:`MigrationOverlay`,setup(t){let{t:n}=e(),i=Vn(),a=p(()=>[`backing-up`,`running`,`error`].includes(i.status.state));return y(()=>{i.fetchInitial()}),(e,t)=>(S(),g(In,{modelValue:a.value,"onUpdate:modelValue":t[0]||=e=>a.value=e,persistent:``,"no-backdrop-dismiss":``},{default:D(()=>[E(mt,{style:{"min-width":`400px`}},{default:D(()=>[r(i).status.state===`backing-up`?(S(),g(W,{key:0},{default:D(()=>[T(`div`,Hn,c(r(n)(`migration.backing_up`)),1),E(ue,{class:`q-mt-md`})]),_:1})):r(i).status.state===`running`?(S(),g(W,{key:1},{default:D(()=>[T(`div`,Un,c(r(n)(`migration.running`,{processed:r(i).status.processed,total:r(i).status.total})),1),E(pt,{value:r(i).status.total>0?r(i).status.processed/r(i).status.total:0,class:`q-mt-md`},null,8,[`value`])]),_:1})):r(i).status.state===`error`?(S(),g(W,{key:2},{default:D(()=>[T(`div`,Wn,c(r(n)(`migration.error`)),1),T(`div`,Gn,c(r(i).status.errorMessage),1),r(i).status.backupPath?(S(),ee(`div`,Kn,c(r(n)(`migration.backup_location`,{path:r(i).status.backupPath})),1)):w(``,!0),T(`div`,qn,c(r(n)(`migration.retry`)),1)]),_:1})):w(``,!0)]),_:1})]),_:1},8,[`modelValue`]))}});function Yn(e,t=250){let n=!1,r;return function(...i){return n||(n=!0,setTimeout(()=>{n=!1},t),r=e.apply(this,i)),r}}function Xn(e,t,n,r){n.modifiers.stop&&ce(e);let i=n.modifiers.color,a=n.modifiers.center||r===!0,o=document.createElement(`span`),s=document.createElement(`span`),c=ae(e),{left:l,top:u,width:d,height:f}=t.getBoundingClientRect(),p=Math.hypot(d,f),m=p/2,h=`${(d-p)/2}px`,g=a?h:`${c.left-l-m}px`,_=`${(f-p)/2}px`,v=a?_:`${c.top-u-m}px`;s.className=`q-ripple__inner`,Vt(s,{height:`${p}px`,width:`${p}px`,transform:`translate3d(${g},${v},0) scale3d(.2,.2,1)`,opacity:0}),o.className=`q-ripple${i?` text-`+i:``}`,o.setAttribute(`dir`,`ltr`),o.append(s),t.append(o);let y=()=>{o.remove(),clearTimeout(b)};n.abort.push(y);let b=setTimeout(()=>{s.classList.add(`q-ripple__inner--enter`),s.style.transform=`translate3d(${h},${_},0) scale3d(1,1,1)`,s.style.opacity=.2,b=setTimeout(()=>{s.classList.remove(`q-ripple__inner--enter`),s.classList.add(`q-ripple__inner--leave`),s.style.opacity=0,b=setTimeout(()=>{o.remove(),n.abort.splice(n.abort.indexOf(y),1)},275)},250)},50)}function Zn(e,{modifiers:t,value:n,arg:r}){let i={...e.cfg.ripple,...t,...n};e.modifiers={early:i.early===!0,stop:i.stop===!0,center:i.center===!0,color:i.color||r,keyCodes:[i.keyCodes||13].flat()}}var Qn=z({name:`ripple`,beforeMount(e,t){let n=t.instance.$.appContext.config.globalProperties.$q.config||{};if(n.ripple===!1)return;let r={cfg:n,enabled:t.value!==!1,modifiers:{},abort:[],start(t){r.enabled&&!t.qSkipRipple&&t.type===(r.modifiers.early?`pointerdown`:`click`)&&Xn(t,e,r,t.qKeyEvent===!0)},keystart:Yn(t=>{r.enabled&&!t.qSkipRipple&&oe(t,r.modifiers.keyCodes)&&t.type===`key${r.modifiers.early?`down`:`up`}`&&Xn(t,e,r,!0)},300)};Zn(r,t),e.__qripple=r,re(r,`main`,[[e,`pointerdown`,`start`,`passive`],[e,`click`,`start`,`passive`],[e,`keydown`,`keystart`,`passive`],[e,`keyup`,`keystart`,`passive`]])},updated(e,t){if(t.oldValue!==t.value){let n=e.__qripple;n!==void 0&&(n.enabled=t.value!==!1,n.enabled&&Object(t.value)===t.value&&Zn(n,t))}},beforeUnmount(e){let t=e.__qripple;t!==void 0&&(t.abort.forEach(e=>{e()}),_e(t,`main`),delete e.__qripple)}}),$n={left:`start`,center:`center`,right:`end`,between:`between`,around:`around`,evenly:`evenly`,stretch:`stretch`},er=Object.keys($n),tr={align:{type:String,validator:e=>er.includes(e)}};function nr(e){return p(()=>{let t=e.align===void 0?e.vertical?`stretch`:`left`:e.align;return`${e.vertical?`items`:`justify`}-${$n[t]}`})}function rr(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}function ir(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ar(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!Array.isArray(i)||i.length!==r.length||r.some((e,t)=>e!==i[t]))return!1}return!0}function or(e,t){return Array.isArray(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function sr(e,t){return Array.isArray(e)?or(e,t):Array.isArray(t)?or(t,e):e===t}function cr(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(!sr(e[n],t[n]))return!1;return!0}var lr={to:[String,Object],replace:Boolean,href:String,target:String,disable:Boolean},ur={...lr,exact:Boolean,activeClass:{type:String,default:`q-router-link--active`},exactActiveClass:{type:String,default:`q-router-link--exact-active`}};function dr({fallbackTag:e,useDisableForRouterLinkProps:t=!0}={}){let n=A(),{props:r,proxy:i,emit:a}=n,o=yt(n),s=p(()=>!r.disable&&r.href!==void 0),c=p(t?()=>o&&!r.disable&&!s.value&&r.to!==void 0&&r.to!==null&&r.to!==``:()=>o&&!s.value&&r.to!==void 0&&r.to!==null&&r.to!==``),l=p(()=>c.value?y(r.to):null),u=p(()=>l.value!==null),d=p(()=>s.value||u.value),f=p(()=>r.type===`a`||d.value?`a`:r.tag||e||`div`),m=p(()=>s.value?{href:r.href,target:r.target}:u.value?{href:l.value.href,target:r.target}:{}),h=p(()=>{if(!u.value)return-1;let{matched:e}=l.value,{length:t}=e,n=e[t-1];if(n===void 0)return-1;let r=i.$route.matched;if(r.length===0)return-1;let a=r.findIndex(ir.bind(null,n));if(a!==-1)return a;let o=rr(e[t-2]);return t>1&&rr(n)===o&&r.at(-1).path!==o?r.findIndex(ir.bind(null,e[t-2])):a}),g=p(()=>u.value&&h.value!==-1&&ar(i.$route.params,l.value.params)),_=p(()=>g.value&&h.value===i.$route.matched.length-1&&cr(i.$route.params,l.value.params)),v=p(()=>u.value?_.value?` ${r.exactActiveClass} ${r.activeClass}`:r.exact?``:g.value?` ${r.activeClass}`:``:``);function y(e){try{return i.$router.resolve(e)}catch{}return null}function b(e,{returnRouterError:t,to:n=r.to,replace:a=r.replace}={}){if(r.disable)return e.preventDefault(),Promise.resolve(!1);if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey||e.button!==void 0&&e.button!==0||r.target===`_blank`)return Promise.resolve(!1);e.preventDefault();let o=i.$router[a?`replace`:`push`](n);return t?o:o.then(()=>{}).catch(()=>{})}function x(e){if(u.value){let t=t=>b(e,t);a(`click`,e,t),e.defaultPrevented||t()}else a(`click`,e)}return{hasRouterLink:u,hasHrefLink:s,hasLink:d,linkTag:f,resolvedLink:l,linkIsActive:g,linkIsExactActive:_,linkClass:v,linkAttrs:m,getLink:y,navigateToRouterLink:b,navigateOnClick:x}}var fr={none:0,xs:4,sm:8,md:16,lg:24,xl:32},pr={xs:8,sm:10,md:14,lg:20,xl:24},mr=[`button`,`submit`,`reset`],hr=/[^\s]\/[^\s]/,gr=[`flat`,`outline`,`push`,`unelevated`];function _r(e,t){return e.flat?`flat`:e.outline?`outline`:e.push?`push`:e.unelevated?`unelevated`:t}function vr(e){let t=_r(e);return t===void 0?{}:{[t]:!0}}var yr={...pe,...lr,type:{type:String,default:`button`},label:[Number,String],icon:String,iconRight:String,...gr.reduce((e,t)=>(e[t]=Boolean)&&e,{}),square:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],ripple:{type:[Boolean,Object],default:!0},align:{...tr.align,default:`center`},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean},br={...yr,round:Boolean};function xr(e){let t=se(e,pr),n=nr(e),{hasRouterLink:r,hasLink:i,linkTag:a,linkAttrs:o,navigateOnClick:s}=dr({fallbackTag:`button`}),c=p(()=>{let n=e.fab||e.fabMini?{}:t.value;return e.padding===void 0?n:{...n,padding:e.padding.split(/\s+/).map(e=>e in fr?fr[e]+`px`:e).join(` `),minWidth:`0`,minHeight:`0`}}),l=p(()=>e.rounded||e.fab||e.fabMini),u=p(()=>!e.disable&&!e.loading),d=p(()=>u.value?e.tabindex||0:-1),f=p(()=>_r(e,`standard`)),m=p(()=>{let t={tabindex:d.value};return i.value?Object.assign(t,o.value):mr.includes(e.type)&&(t.type=e.type),a.value===`a`?(e.disable?t[`aria-disabled`]=`true`:t.href===void 0&&(t.role=`button`),!r.value&&hr.test(e.type)&&(t.type=e.type)):e.disable&&(t.disabled=``,t[`aria-disabled`]=`true`),e.loading&&e.percentage!==void 0&&Object.assign(t,{role:`progressbar`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":e.percentage}),t});return{classes:p(()=>{let t;e.color===void 0?e.textColor&&(t=`text-${e.textColor}`):t=e.flat||e.outline?`text-${e.textColor||e.color}`:`bg-${e.color} text-${e.textColor||`white`}`;let n=e.round?`round`:`rectangle${l.value?` q-btn--rounded`:e.square?` q-btn--square`:``}`;return`q-btn--${f.value} q-btn--${n}`+(t===void 0?``:` `+t)+(u.value?` q-btn--actionable q-focusable q-hoverable`:e.disable?` disabled`:``)+(e.fab?` q-btn--fab`:e.fabMini?` q-btn--fab-mini`:``)+(e.noCaps?` q-btn--no-uppercase`:``)+(e.dense?` q-btn--dense`:``)+(e.stretch?` no-border-radius self-stretch`:``)+(e.glossy?` glossy`:``)+(e.square?` q-btn--square`:``)}),style:c,innerClasses:p(()=>n.value+(e.stack?` column`:` row`)+(e.noWrap?` no-wrap text-no-wrap`:``)+(e.loading?` q-btn__content--hidden`:``)),attributes:m,hasLink:i,linkTag:a,navigateOnClick:s,isActionable:u}}var{passiveCapture:G}=F,Sr=null,Cr=null,wr=null;function Tr(e){L(e),e.qSkipRipple=!0}var Er=R({name:`QBtn`,props:{...br,percentage:Number,darkPercentage:Boolean,onTouchstart:[Function,Array]},emits:[`click`,`keydown`,`mousedown`,`keyup`],setup(e,{slots:t,emit:n}){let{proxy:r}=A(),{classes:a,style:o,innerClasses:s,attributes:c,hasLink:l,linkTag:u,navigateOnClick:d,isActionable:f}=xr(e),m=i(null),h=i(null),g=null,_,v=null,y=null,x=p(()=>e.label!==void 0&&e.label!==null&&e.label!==``),S=p(()=>e.disable||e.ripple===!1?!1:{keyCodes:l.value?[13,32]:[13],...e.ripple===!0?{}:e.ripple}),C=p(()=>({center:e.round})),w=p(()=>{let t=Math.max(0,Math.min(100,e.percentage));return t>0?{transition:`transform 0.6s`,transform:`translateX(${t-100}%)`}:{}}),T=p(()=>{if(e.loading)return{onMousedown:Tr,onTouchstart:Tr,onClick:Tr,onKeydown:Tr,onKeyup:Tr};if(f.value){let t={onClick:E,onKeydown:D,onMousedown:te};if(r.$q.platform.has.touch){let n=e.onTouchstart===void 0?`Passive`:``;t[`onTouchstart${n}`]=O}return t}return{onClick:L}}),ee=p(()=>({ref:m,class:`q-btn q-btn-item non-selectable no-outline `+a.value,style:o.value,...c.value,...T.value}));function E(t){if(m.value!==null){if(t!==void 0){if(t.defaultPrevented)return;let n=document.activeElement;if(e.type===`submit`&&n!==document.body&&!m.value.contains(n)&&!n.contains(m.value)){t.qAvoidFocus||m.value.focus();let e=()=>{y=null,document.removeEventListener(`keydown`,L,!0),document.removeEventListener(`keyup`,e,G),m.value?.removeEventListener(`blur`,e,G)};y=e,document.addEventListener(`keydown`,L,!0),document.addEventListener(`keyup`,e,G),m.value.addEventListener(`blur`,e,G)}}d(t)}}function D(e){m.value!==null&&(n(`keydown`,e),oe(e,[13,32])&&Cr!==m.value&&(Cr!==null&&N(),e.defaultPrevented||(e.qAvoidFocus||m.value.focus(),Cr=m.value,m.value.classList.add(`q-btn--active`),document.addEventListener(`keyup`,k,!0),m.value.addEventListener(`blur`,k,G)),L(e)))}function O(e){m.value!==null&&(n(`touchstart`,e),!e.defaultPrevented&&(Sr!==m.value&&(Sr!==null&&N(),Sr=m.value,g=e.target,g.addEventListener(`touchcancel`,k,G),g.addEventListener(`touchend`,k,G)),_=!0,v!==null&&clearTimeout(v),v=setTimeout(()=>{v=null,_=!1},200)))}function te(e){m.value!==null&&(e.qSkipRipple=_===!0,n(`mousedown`,e),!e.defaultPrevented&&wr!==m.value&&(wr!==null&&N(),wr=m.value,m.value.classList.add(`q-btn--active`),document.addEventListener(`mouseup`,k,G)))}function k(e){if(m.value!==null&&(e?.type!==`blur`||document.activeElement!==m.value)){if(e?.type===`keyup`){if(Cr===m.value&&oe(e,[13,32])){let t=new MouseEvent(`click`,e);t.qKeyEvent=!0,e.defaultPrevented&&le(t),e.cancelBubble&&ce(t),m.value.dispatchEvent(t),L(e),e.qKeyEvent=!0}n(`keyup`,e)}N()}}function N(e){y?.();let t=h.value;!e&&(Sr===m.value||wr===m.value)&&t!==null&&t!==document.activeElement&&(t.setAttribute(`tabindex`,-1),t.focus({preventScroll:!0})),Sr===m.value&&(g!==null&&(g.removeEventListener(`touchcancel`,k,G),g.removeEventListener(`touchend`,k,G)),Sr=g=null),wr===m.value&&(document.removeEventListener(`mouseup`,k,G),wr=null),Cr===m.value&&(document.removeEventListener(`keyup`,k,!0),m.value?.removeEventListener(`blur`,k,G),Cr=null),m.value?.classList.remove(`q-btn--active`)}return b(()=>{N(!0)}),Object.assign(r,{click:e=>{f.value&&E(e)}}),()=>{let n=[];e.icon!==void 0&&n.push(M(ge,{name:e.icon,left:!e.stack&&x.value,role:`img`})),x.value&&n.push(M(`span`,{class:`block`},[e.label])),n=B(t.default,n),e.iconRight!==void 0&&!e.round&&n.push(M(ge,{name:e.iconRight,right:!e.stack&&x.value,role:`img`}));let r=[M(`span`,{class:`q-focus-helper`,ref:h})];return e.loading&&e.percentage!==void 0&&r.push(M(`span`,{class:`q-btn__progress absolute-full overflow-hidden`+(e.darkPercentage?` q-btn__progress--dark`:``)},[M(`span`,{class:`q-btn__progress-indicator fit block`,style:w.value})])),r.push(M(`span`,{class:`q-btn__content text-center col items-center q-anchor--skip `+s.value},n)),e.loading!==null&&r.push(M(j,{name:`q-transition--fade`},()=>e.loading?[M(`span`,{key:`loading`,class:`absolute-full flex flex-center`},t.loading===void 0?[M(ue)]:t.loading())]:null)),ne(M(u.value,ee.value,r),[[Qn,S.value,void 0,C.value]])}}}),Dr=R({name:`QCardActions`,props:{...tr,vertical:Boolean},setup(e,{slots:t}){let n=nr(e),r=p(()=>`q-card__actions ${n.value} q-card__actions--${e.vertical?`vert column`:`horiz row`}`);return()=>M(`div`,{class:r.value},he(t.default))}}),Or=`kobo:network-token`;function kr(){try{return localStorage.getItem(Or)}catch{return null}}function Ar(e){try{localStorage.setItem(Or,e)}catch{}}function jr(e){try{let t=new URL(e,window.location.origin);return t.origin===window.location.origin&&t.pathname.startsWith(`/api/`)}catch{return typeof e==`string`&&e.startsWith(`/api/`)}}function Mr(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}token=${encodeURIComponent(t)}`:e}var Nr=i(!1);function Pr(){Nr.value=!0}function Fr(){Nr.value=!1}var Ir={class:`text-h6`},Lr={class:`text-caption text-grey-7 q-mt-sm`},Rr=u({__name:`NetworkLoginDialog`,setup(t){let{t:n}=e(),a=p({get:()=>Nr.value,set:e=>{e||Fr()}}),o=i(``),s=i(!1),l=i(!1),u=i(``);async function d(){let e=o.value.trim();if(e){s.value=!0,l.value=!1;try{let t=await fetch(`/api/settings/network/ping`,{headers:{"X-Kobo-Token":e}});if(t.ok){Ar(e),Fr(),window.location.reload();return}u.value=t.status===401?n(`network.login.invalid`):n(`network.login.serverError`),l.value=!0}catch{u.value=n(`network.login.unreachable`),l.value=!0}finally{s.value=!1}}}return(e,t)=>(S(),g(In,{modelValue:a.value,"onUpdate:modelValue":t[1]||=e=>a.value=e,persistent:``},{default:D(()=>[E(mt,{style:{"min-width":`320px`,"max-width":`90vw`}},{default:D(()=>[E(W,null,{default:D(()=>[T(`div`,Ir,c(r(n)(`network.login.title`)),1),T(`div`,Lr,c(r(n)(`network.login.description`)),1)]),_:1}),E(W,null,{default:D(()=>[E(Ne,{modelValue:o.value,"onUpdate:modelValue":t[0]||=e=>o.value=e,label:r(n)(`network.login.tokenLabel`),placeholder:r(n)(`network.login.tokenPlaceholder`),error:l.value,"error-message":u.value,autofocus:``,dense:``,outlined:``,onKeyup:h(d,[`enter`])},null,8,[`modelValue`,`label`,`placeholder`,`error`,`error-message`])]),_:1}),E(Dr,{align:`right`},{default:D(()=>[E(Er,{label:r(n)(`network.login.connect`),color:`indigo-4`,loading:s.value,unelevated:``,onClick:d},null,8,[`label`,`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]))}}),zr=ye(`templates`,{state:()=>({templates:[],defaultSlugs:[],loading:!1,loaded:!1}),getters:{isDefault:e=>t=>e.defaultSlugs.includes(t)},actions:{async fetchTemplates(){if(!this.loading){this.loading=!0;try{let e=await fetch(`/api/templates`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this.templates=t.templates,this.defaultSlugs=t.defaultSlugs??[],this.loaded=!0}catch(e){console.error(`[templates store] fetchTemplates failed:`,e)}finally{this.loading=!1}}},async createTemplate(e){let t=await fetch(`/api/templates`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let n=await t.json();return this.templates.push(n),n},async updateTemplate(e,t){let n=await fetch(`/api/templates/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json(),i=this.templates.findIndex(t=>t.slug===e);return i>=0&&(this.templates[i]=r),r},async reloadDefaults(){let e=await fetch(`/api/templates/reload-defaults`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`HTTP ${e.status}`)}let t=await e.json();return t.added.length>0&&await this.fetchTemplates(),t},async deleteTemplate(e){let t=await fetch(`/api/templates/${encodeURIComponent(e)}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}this.templates=this.templates.filter(t=>t.slug!==e)},async resetToDefault(e){let t=await fetch(`/api/templates/${encodeURIComponent(e)}/reset-default`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({error:`Reset failed`}));throw Error(e.error??`Reset failed`)}let{template:n}=await t.json(),r=this.templates.findIndex(t=>t.slug===e);return r>=0?this.templates[r]=n:this.templates.push(n),n}}}),Br=R({name:`QAvatar`,props:{...pe,fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},setup(e,{slots:t}){let n=se(e),r=p(()=>`q-avatar`+(e.color?` bg-${e.color}`:``)+(e.textColor?` text-${e.textColor} q-chip--colored`:``)+(e.square?` q-avatar--square`:e.rounded?` rounded-borders`:``)),i=p(()=>e.fontSize?{fontSize:e.fontSize}:null);return()=>{let a=e.icon===void 0?void 0:[M(ge,{name:e.icon})];return M(`div`,{class:r.value,style:n.value},[M(`div`,{class:`q-avatar__content row flex-center overflow-hidden`,style:i.value},fe(t.default,a))])}}}),Vr=0,Hr={},Ur={},K={},Wr={},Gr=/^\s*$/,Kr=[],qr=[void 0,null,!0,!1,``],Jr=[`top-left`,`top-right`,`bottom-left`,`bottom-right`,`top`,`bottom`,`left`,`right`,`center`],Yr=[`top-left`,`top-right`,`bottom-left`,`bottom-right`],Xr={positive:{icon:e=>e.iconSet.type.positive,color:`positive`},negative:{icon:e=>e.iconSet.type.negative,color:`negative`},warning:{icon:e=>e.iconSet.type.warning,color:`warning`,textColor:`dark`},info:{icon:e=>e.iconSet.type.info,color:`info`},ongoing:{group:!1,timeout:0,spinner:!0,color:`grey-8`}};function Zr(e,t,n){if(!e)return ei(`parameter required`);let r,i={textColor:`white`};if(e.ignoreDefaults||Object.assign(i,Hr),U(e)||(i.type&&Object.assign(i,Xr[i.type]),e={message:e}),Object.assign(i,Xr[e.type||i.type],e),typeof i.icon==`function`&&(i.icon=i.icon(t)),i.spinner=i.spinner?i.spinner===!0?ue:s(i.spinner):!1,i.meta={hasMedia:!!(i.spinner||i.icon||i.avatar),hasText:$r(i.message)||$r(i.caption)},i.position){if(!Jr.includes(i.position))return ei(`wrong position`,e)}else i.position=`bottom`;if(qr.includes(i.timeout))i.timeout=5e3;else{let t=Number.parseFloat(i.timeout);if(!Number.isFinite(t)||t<0)return ei(`wrong timeout`,e);i.timeout=t}i.timeout===0?i.progress=!1:i.progress&&(i.meta.progressClass=`q-notification__progress`+(i.progressClass?` ${i.progressClass}`:``),i.meta.progressStyle={animationDuration:`${i.timeout+1e3}ms`});let a=[...Array.isArray(e.actions)?e.actions:[],...!e.ignoreDefaults&&Array.isArray(Hr.actions)?Hr.actions:[],...Array.isArray(Xr[e.type]?.actions)?Xr[e.type].actions:[]],{closeBtn:o}=i;if(o&&a.push({label:typeof o==`string`?o:t.lang.label.close}),i.actions=a.map(({handler:e,noDismiss:t,...n})=>({flat:!0,...n,onClick:typeof e==`function`?()=>{e(),t||c()}:()=>{c()}})),i.multiLine===void 0&&(i.multiLine=i.actions.length>1),Object.assign(i.meta,{class:`q-notification row items-stretch q-notification--${i.multiLine?`multi-line`:`standard`}`+(i.color===void 0?``:` bg-${i.color}`)+(i.textColor===void 0?``:` text-${i.textColor}`)+(i.classes===void 0?``:` ${i.classes}`),wrapperClass:`q-notification__wrapper col relative-position border-radius-inherit `+(i.multiLine?`column no-wrap justify-center`:`row items-center`),contentClass:`q-notification__content row items-center`+(i.multiLine?``:` col`),leftClass:i.meta.hasText?`additional`:`single`,attrs:{role:`alert`,...i.attrs}}),i.group===!1?(i.group=void 0,i.meta.group=void 0):((i.group===void 0||i.group===!0)&&(i.group=[i.message,i.caption,i.multiLine,...i.actions.map(e=>`${e.label}*${e.icon}`)].join(`|`)),i.meta.group=i.group+`|`+i.position),i.actions.length===0?i.actions=void 0:i.meta.actionsClass=`q-notification__actions row items-center `+(i.multiLine?`justify-end`:`col-auto`)+(i.meta.hasMedia?` q-notification__actions--with-media`:``),n!==void 0){n.notif.meta.timer&&(clearTimeout(n.notif.meta.timer),n.notif.meta.timer=void 0),i.meta.uid=n.notif.meta.uid;let e=K[i.position].value.indexOf(n.notif);K[i.position].value[e]=i}else{let t=Ur[i.meta.group];if(t===void 0){if(i.meta.uid=Vr++,i.meta.badge=1,[`left`,`right`,`center`].includes(i.position))K[i.position].value.splice(Math.floor(K[i.position].value.length/2),0,i);else{let e=i.position.includes(`top`)?`unshift`:`push`;K[i.position].value[e](i)}i.group!==void 0&&(Ur[i.meta.group]=i)}else{if(t.meta.timer&&(clearTimeout(t.meta.timer),t.meta.timer=void 0),i.badgePosition!==void 0){if(!Yr.includes(i.badgePosition))return ei(`wrong badgePosition`,e)}else i.badgePosition=`top-${i.position.includes(`left`)?`right`:`left`}`;i.meta.uid=t.meta.uid,i.meta.badge=t.meta.badge+1,i.meta.badgeClass=`q-notification__badge q-notification__badge--${i.badgePosition}`+(i.badgeColor===void 0?``:` bg-${i.badgeColor}`)+(i.badgeTextColor===void 0?``:` text-${i.badgeTextColor}`)+(i.badgeClass?` ${i.badgeClass}`:``);let n=K[i.position].value.indexOf(t);K[i.position].value[n]=Ur[i.meta.group]=i}}let c=()=>{Qr(i),r=void 0};if(i.timeout>0&&(i.meta.timer=setTimeout(()=>{i.meta.timer=void 0,c()},i.timeout+1e3)),i.group!==void 0)return t=>{t===void 0?c():ei(`trying to update a grouped one which is forbidden`,e)};if(r={dismiss:c,config:e,notif:i},n!==void 0){Object.assign(n,r);return}return e=>{r!==void 0&&(e===void 0?r.dismiss():Zr({...r.config,...e,group:!1,position:i.position},t,r))}}function Qr(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);let t=K[e.position].value.indexOf(e);if(t!==-1){e.group!==void 0&&delete Ur[e.meta.group];let n=Kr[String(e.meta.uid)];if(n){let{width:e,height:t}=getComputedStyle(n);n.style.left=`${n.offsetLeft}px`,n.style.width=e,n.style.height=t}K[e.position].value.splice(t,1),typeof e.onDismiss==`function`&&e.onDismiss()}}function $r(e){return e!=null&&!Gr.test(e)}function ei(e,t){return console.error(`Notify: ${e}`,t),!1}function ti(){return R({name:`QNotifications`,devtools:{hide:!0},setup(){return()=>M(`div`,{class:`q-notifications`},Jr.map(e=>M(k,{key:e,class:Wr[e],tag:`div`,name:`q-notification--${e}`},()=>K[e].value.map(e=>{let t=e.meta,n=[];if(t.hasMedia&&(e.spinner?n.push(M(e.spinner,{class:`q-notification__spinner q-notification__spinner--`+t.leftClass,color:e.spinnerColor,size:e.spinnerSize})):e.icon?n.push(M(ge,{class:`q-notification__icon q-notification__icon--`+t.leftClass,name:e.icon,color:e.iconColor,size:e.iconSize,role:`img`})):e.avatar&&n.push(M(Br,{class:`q-notification__avatar q-notification__avatar--`+t.leftClass},()=>M(`img`,{src:e.avatar,"aria-hidden":`true`})))),t.hasText){let t,r={class:`q-notification__message col`};if(e.html)r.innerHTML=e.caption?`<div>${e.message}</div><div class="q-notification__caption">${e.caption}</div>`:e.message;else{let n=[e.message];t=e.caption?[M(`div`,n),M(`div`,{class:`q-notification__caption`},[e.caption])]:n}n.push(M(`div`,r,t))}let r=[M(`div`,{class:t.contentClass},n)];return e.progress&&r.push(M(`div`,{key:`${t.uid}|p|${t.badge}`,class:t.progressClass,style:t.progressStyle})),e.actions&&r.push(M(`div`,{class:t.actionsClass},e.actions.map(e=>M(Er,e)))),t.badge>1&&r.push(M(`div`,{key:`${t.uid}|${t.badge}`,class:e.meta.badgeClass,style:e.badgeStyle},[t.badge])),M(`div`,{ref:e=>{Kr[String(t.uid)]=e},key:t.uid,class:t.class,...t.attrs},[M(`div`,{class:t.wrapperClass},r)])}))))}})}var ni={setDefaults(e){U(e)&&Object.assign(Hr,e)},registerType(e,t){U(t)&&(Xr[e]=t)},install({$q:e,parentApp:t}){if(e.notify=this.create=t=>Zr(t,e),e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,e.config.notify!==void 0&&this.setDefaults(e.config.notify),!this.__installed){Jr.forEach(e=>{K[e]=i([]);let t=e===`left`||e===`center`||e===`right`?`center`:e.includes(`top`)?`top`:`bottom`,n=e.includes(`left`)?`start`:e.includes(`right`)?`end`:`center`;Wr[e]=`q-notifications__list q-notifications__list--${t} fixed column no-wrap ${e===`left`||e===`right`?`items-${e===`left`?`start`:`end`} justify-center`:e===`center`?`flex-center`:`items-${n}`}`});let e=It(`q-notify`);st(ti(),t).mount(e)}}},ri={"model.tooltip":`Modell, das der Agent für diesen Workspace verwendet`,"reasoning.tooltip":`Denkaufwand des Agenten für diesen Workspace`,"thinking.label":`Überlegung`,"thinking.noDetails":`Der Agent denkt nach…`,"common.save":`Speichern`,"common.cancel":`Abbrechen`,"common.delete":`Löschen`,"common.close":`Schließen`,"common.details":`Details`,"common.ok":`OK`,"whatsNew.title":`Neuigkeiten`,"common.loading":`Laden...`,"common.search":`Suchen...`,"common.refresh":`Aktualisieren`,"common.copy":`Kopieren`,"common.copied":`In die Zwischenablage kopiert`,"common.copyFailed":`Kopieren fehlgeschlagen`,"common.add":`Hinzufügen`,"folderPicker.title":`Ordner auswählen`,"folderPicker.parent":`Übergeordneter Ordner`,"folderPicker.empty":`Keine Unterordner`,"folderPicker.select":`Diesen Ordner auswählen`,"common.start":`Starten`,"common.stop":`Stoppen`,"common.archive":`Archivieren`,"common.unarchive":`Wiederherstellen`,"common.selectWorkspace":`Arbeitsbereich auswählen`,"common.noResults":`Keine Ergebnisse für „{query}"`,"common.send":`senden`,"common.newLine":`neue Zeile`,"common.history":`Verlauf`,"common.justNow":`gerade eben`,"common.minutesAgo":`vor {count}m`,"common.hoursAgo":`vor {count}h`,"common.daysAgo":`vor {count}T`,"model.auto":`Auto`,"model.fable5":`Fable 5`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable5Description":`Leistungsfähigstes Modell — Nachfolger von Opus 4.8, 1M Kontext, adaptive thinking`,"model.mythos5Description":`Fable 5 ohne Sicherheitsklassifikatoren — eingeschränkter Zugriff (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude wählt das optimale Modell`,"model.opus5Description":`Für komplexes agentisches Coding und Unternehmenseinsätze, 1M Kontext`,"model.opus48Description":`Leistungsfähigstes Opus — Long-Horizon-Coding, 1M-Kontext standardmäßig, hoher Effort standardmäßig`,"model.opus47ClassicDescription":`Neuestes Opus, am leistungsfähigsten`,"model.opus471mDescription":`Neuestes Opus, 1M Kontext`,"model.opusClassicDescription":`Am leistungsstärksten`,"model.opus1mDescription":`Am leistungsstärksten, 1M Kontext`,"model.sonnet5Description":`Beste Mischung aus Geschwindigkeit und Intelligenz, 1M Kontext`,"model.sonnetClassicDescription":`Ausgewogen`,"model.sonnet1mDescription":`Ausgewogen, 1M Kontext`,"model.haikuDescription":`Am schnellsten`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`Neuestes Spitzenmodell für agentisches Coding (erfordert ChatGPT-Anmeldung)`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Ausgewogenes agentisches Coding-Modell für den Alltag (erfordert ChatGPT-Anmeldung)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Schnelles und günstiges agentisches Coding-Modell (erfordert ChatGPT-Anmeldung)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Empfohlen für komplexes Coding (erfordert ChatGPT-Anmeldung)`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Standard-Fallback — starkes Reasoning, funktioniert mit API-Key-Authentifizierung`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Schnell und effizient — ideal für reaktive Aufgaben und Subagenten`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimiert für professionelle Arbeit und langlaufende Agenten`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Auf Coding spezialisiertes Modell für komplexe Softwareentwicklung`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`keine`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Engine entscheidet automatisch`,"reasoning.minimalDescription":`Schnellstes, oberflächlichstes Reasoning`,"reasoning.noneDescription":`Ohne zusätzliches Reasoning`,"reasoning.lowDescription":`Schneller, weniger Tiefe`,"reasoning.mediumDescription":`Ausgewogen`,"reasoning.highDescription":`Mehr Tiefe`,"reasoning.xhighDescription":`Erweiterte Tiefe, langfristige Aufgaben`,"reasoning.maxDescription":`Maximale Tiefe`,"agentPermissionMode.label":`Berechtigungsmodus`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Edits akzeptieren`,"agentPermissionMode.interactive":`Interaktiv`,"agentPermissionMode.tooltip":`Wie der Agent Tool-Berechtigungen handhabt. Plan: schreibgeschützt, keine Schreibvorgänge. Bypass: alle Nachfragen überspringen. Strict: Datei-Edits automatisch akzeptieren, allow/deny für den Rest beachten. Interaktiv: vor jedem Tool den Benutzer per Berechtigungs-Panel fragen.`,"agentPermissionMode.autoLoopOverride":`Auto-Loop erzwingt einen Modus außer Plan — Plan blockiert MCP-Tools und Edits, die der Loop benötigt. Wähle stattdessen Bypass, Strict oder Interaktiv.`,"agentPermissionMode.autoLoopLocked":`Auf Bypass gesperrt, solange Auto-Loop aktiv ist — jeder andere Modus würde den Loop bei Berechtigungsabfragen anhalten. AskUserQuestion funktioniert weiterhin.`,"workspaceList.title":`Arbeitsbereiche`,"workspaceList.needsAttention":`Aufmerksamkeit erforderlich`,"workspaceList.running":`Aktiv`,"workspaceList.idle":`Inaktiv`,"workspaceList.archived":`Archiviert`,"workspaceList.noWorkspaces":`Noch keine Arbeitsbereiche`,"workspaceList.footer":`{count} Arbeitsbereich | {count} Arbeitsbereiche`,"workspaceList.footerRunning":`{count} aktiv`,"workspaceList.deleteDialog.title":`Arbeitsbereich löschen?`,"workspaceList.deleteDialog.deleteLocal":`Lokalen Branch löschen`,"workspaceList.deleteDialog.deleteRemote":`Remote-Branch löschen`,"workspaceList.deleteDialog.warning":`Achtung: Diese Aktion ist auf dem Remote unwiderruflich.`,"workspaceList.deleteArchivedDialog.tooltip":`Alle archivierten Arbeitsbereiche löschen`,"workspaceList.deleteArchivedDialog.title":`Alle archivierten Arbeitsbereiche löschen?`,"workspaceList.deleteArchivedDialog.message":`Dadurch werden die {count} archivierten Arbeitsbereiche endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.`,"workspacePage.selectWorkspace":`Arbeitsbereich auswählen, um zu beginnen`,"workspacePage.commandPalettePlaceholder":`Befehle suchen…`,"workspacePage.commandPaletteEmpty":`Kein passender Befehl`,"workspacePage.commandFocusChat":`Chat-Eingabe fokussieren`,"workspacePage.commandSearchHistory":`Workspace-Verlauf durchsuchen`,"workspacePage.commandTogglePanel":`Seitenleiste ein- oder ausblenden`,"workspacePage.commandStartAgent":`Agent starten`,"workspacePage.commandStopAgent":`Agent stoppen`,"workspacePage.session":`Sitzung #{n}`,"workspacePage.newSession":`+ Neue Sitzung`,"workspacePage.renameSession":`Umbenennen`,"workspacePage.renameSessionTitle":`Sitzung umbenennen`,"workspacePage.sessionNameLabel":`Sitzungsname`,"workspacePage.sessionEndedNotice":`Diese Sitzung ist beendet. Erstelle eine neue Sitzung um fortzufahren.`,"workspacePage.renameFailed":`Umbenennung fehlgeschlagen`,"workspacePage.copySessionId":`Sitzungs-ID kopieren`,"workspacePage.deleteSession":`Sitzung löschen`,"workspacePage.deleteSessionTitle":`Sitzung löschen?`,"workspacePage.deleteSessionConfirm":`Diese Sitzung und ihr Gesprächsverlauf werden dauerhaft gelöscht.`,"workspacePage.deleteSessionFailed":`Sitzung konnte nicht gelöscht werden`,"workspacePage.noEngineSessionId":`Noch keine Sitzungs-ID — der Agent hat diese Sitzung noch nicht gestartet`,"workspacePage.createSessionFailed":`Sitzung konnte nicht erstellt werden`,"workspacePage.startFailed":`Start fehlgeschlagen`,"workspacePage.stopFailed":`Stopp fehlgeschlagen`,"workspacePage.interrupt":`Unterbrechen`,"workspacePage.interrupted":`Agent unterbrochen — wartet auf Ihre nächste Nachricht`,"workspacePage.archivedBanner":`Archivierter Workspace — schreibgeschützt`,"workspacePage.worktreePurgedBanner":`Worktree gelöscht — Verlauf erhalten, keine Wiederherstellung in dieser Version`,"workspacePage.worktreePurgedTooltip":"Der Worktree-Ordner wurde von der Festplatte gelöscht, um Speicherplatz zurückzugewinnen. Chat-Verlauf, Sitzungen und PR-Metadaten bleiben hier abrufbar, aber das Arbeitsverzeichnis existiert lokal nicht mehr. Eine zukünftige Kōbō-Version wird den Worktree aus der gemergten PR wiederherstellen können — vorerst musst du ihn manuell über `gh pr checkout` oder `git worktree add` neu erstellen.","workspacePage.pendingInitialPromptBanner":`Ein anfänglicher Prompt ist ausstehend — der Agent hat ihn nie erhalten (Setup-Script abgestürzt oder Workspace nie gestartet). Klicke auf Start, um ihn jetzt zu senden.`,"workspacePage.unarchived":`Workspace dearchiviert`,"workspacePage.unarchiveFailed":`Dearchivierung fehlgeschlagen`,"workspacePage.interruptFailed":`Unterbrechung fehlgeschlagen`,"workspacePage.interruptTooltip":`Sanfte Unterbrechung (wie Escape) — stoppt das aktuelle Tool, hält die Sitzung aktiv`,"workspacePage.pendingNextRun":`Beim nächsten Start angewendet`,"workspacePage.activeSessionModel":`Aktiv: {model}`,"workspacePage.activeSessionModelTooltip":`Modell, das von der ausgewählten Sitzung tatsächlich verwendet wird`,"workspacePage.switchEngine":`Engine wechseln`,"workspacePage.switchEngineHint":`Diesen Workspace mit einer anderen Agent-Engine fortsetzen`,"workspacePage.switchEngineTitle":`Agent-Engine wechseln`,"workspacePage.switchEngineWarning":`Der aktuelle Agent wird gestoppt und eine neue Sitzung startet im selben Worktree.`,"workspacePage.engineLabel":`Engine`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Übergabe für die neue Engine`,"workspacePage.engineHandoffHint":`Überprüfen oder bearbeiten Sie den Kontext für den neuen Agenten.`,"workspacePage.confirmSwitchEngine":`Engine wechseln`,"workspacePage.switchEngineFailed":`Engine-Wechsel fehlgeschlagen`,"whip.dispatchFailed":`Peitschen-Nachricht konnte nicht gesendet werden`,"whip.phrase1":`Schneller, tocard!`,"whip.phrase2":`Leg einen Zahn zu, tocard!`,"whip.phrase3":`Zurück an die Arbeit, tocard!`,"whip.phrase4":`Zeig etwas Tempo, tocard!`,"whip.phrase5":`Weniger denken, mehr machen, tocard!`,"search.title":`Suche`,"search.tooltip":`Agent-Verlauf durchsuchen`,"search.placeholder":`In allen Agent-Nachrichten suchen…`,"search.includeArchived":`Archivierte Arbeitsbereiche einbeziehen`,"search.loading":`Suche läuft…`,"search.noResults":`Keine Treffer`,"search.error":`Suche fehlgeschlagen: {message}`,"search.resultCount":`{n} Treffer`,"search.eventType.userMessage":`Sie`,"search.eventType.agentOutput":`Agent`,"activityFeed.empty":`Noch keine Aktivität`,"activityFeed.emptyHint":`Starten Sie einen Arbeitsbereich, um die Agentenausgabe hier zu sehen`,"activityFeed.initialPrompt":`Initialer Prompt`,"activityFeed.you":`Sie`,"activityFeed.agent":`Agent`,"activityFeed.question":`Frage`,"activityFeed.goToPrevious":`Zur vorherigen Nachricht`,"activityFeed.scrollToBottom":`Nach unten scrollen`,"activityFeed.sendAnswers":`Antworten senden`,"agentBusy.banner":`Agent ist beschäftigt`,"agentBusy.subagentsRunning":`1 Sub-Agent aktiv | {n} Sub-Agents aktiv`,"agentBusy.viewSubagents":`Sub-Agents anzeigen`,"agentBusy.pendingMessage":`Warten — Agent ist beschäftigt`,"terminal.title":`Terminal`,"terminal.open":`Terminal öffnen`,"terminal.close":`Terminal schließen`,"terminal.noWorkspace":`Workspace auswählen`,"terminal.noWorktree":`Worktree noch nicht erstellt`,"terminal.error":`Terminalfehler`,"terminal.exited":`Terminal beendet`,"chatInput.placeholder":`Nachricht... (/ für Skills)`,"chatInput.fileSearchHint":`Datei suchen`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Bild anhängen`,"chatInput.queueBanner":`Nachricht in Warteschlange — wird gesendet, wenn der Agent fertig ist`,"chatInput.forceQueue":`Senden erzwingen`,"chatInput.searchHistory":`suchen`,"chatInput.commandPalette":`Befehle`,"chatInput.shortcuts":`Tastenkürzel`,"chatInput.cancelQueue":`Warteschlange abbrechen`,"chatInput.autoLoopBanner":`Auto-Loop läuft — beende ihn, um eine Nachricht zu senden`,"chatInput.awaitingUserBanner":`Der Agent wartet auf deine Antwort oben — antworte über das Fragefenster`,"chatInput.autoLoopStop":`Beenden`,"koboCommand.checkProgressDesc":`Fortschritt bei Aufgaben und Akzeptanzkriterien prüfen`,"chatInput.uploading":`Wird hochgeladen...`,"voice.title":`Sprachtranskription`,"voice.enabled":`Lokale Sprachtranskription aktivieren`,"voice.pttKey":`Push-to-talk-Taste`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Strg+Leertaste`,"voice.language":`Sprache (auto oder Code)`,"voice.model":`Aktives Modell`,"voice.commandPath":`Pfad zur Whisper-Binärdatei (optional)`,"voice.ffmpegPath":`Pfad zur ffmpeg-Binärdatei (optional)`,"voice.temperature":`Temperatur`,"voice.temperatureHint":`Niedriger = deterministischer, höher = flexibler, aber potenziell weniger stabil.`,"voice.initialPrompt":`Initial Prompt (optional)`,"voice.initialPromptHint":`Optionaler Kontext, um Whisper bei Namen, Fachbegriffen oder domänenspezifischem Vokabular zu helfen.`,"voice.translateToEnglish":`Ins Englische übersetzen`,"voice.translateToEnglishHint":`Wenn aktiviert, wird nicht-englische Sprache ins Englische übersetzt statt originalgetreu transkribiert.`,"voice.suppressNst":`Nicht-Sprach-Tokens unterdrücken`,"voice.suppressNstHint":`Versucht, Nicht-Sprach-Artefakte im Transkript zu reduzieren.`,"voice.installLink":`whisper.cpp installieren`,"voice.installGuideTitle":`Installationsanleitung`,"voice.installGuideIntro":`Installiere whisper.cpp und ffmpeg und setze bei Bedarf unten die Binärpfade.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Nach dem CMake-Build liegt die Whisper-Binärdatei üblicherweise hier: whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Danach in diesem Bereich „Pfad zur Whisper-Binärdatei“ und „Pfad zur ffmpeg-Binärdatei“ setzen (oder leer lassen, wenn im PATH).`,"voice.noneModel":`Kein aktives Modell`,"voice.notInstalled":`nicht installiert`,"voice.download":`Herunterladen`,"voice.delete":`Löschen`,"voice.holdToTalk":`Zum Sprechen gedrückt halten`,"voice.recording":`Aufnahme...`,"voice.transcribing":`Transkription...`,"voice.notSupported":`Sprachaufnahme wird in diesem Browser nicht unterstützt`,"voice.errorMicPermission":`Mikrofonberechtigung verweigert`,"voice.errorTranscription":`Sprachtranskription fehlgeschlagen`,"voice.downloadFailed":`Modelldownload fehlgeschlagen`,"voice.deleteFailed":`Modell konnte nicht gelöscht werden`,"voice.errorDisabled":`Sprachtranskription ist in den Einstellungen deaktiviert`,"voice.errorModelMissing":`Kein aktives Sprachmodell konfiguriert`,"voice.errorModelNotInstalled":`Das aktive Sprachmodell ist nicht installiert`,"voice.errorAudioInvalid":`Audioaufnahme ist ungültig oder leer`,"voice.errorLanguageInvalid":`Sprachkonfiguration ist ungültig`,"voice.errorRuntimeMissing":`Whisper-Runtime ist nicht installiert oder nicht im PATH`,"voice.maxDurationReached":`Maximale Aufnahmedauer erreicht`,"voice.runtimeReady":`Runtime bereit: {command}`,"voice.runtimeMissing":`Runtime fehlt: {command}`,"voice.ffmpegReady":`ffmpeg bereit`,"voice.ffmpegMissing":`ffmpeg fehlt`,"voice.sectionRuntime":`Runtime-Status`,"voice.sectionActivation":`Aktivierung`,"voice.sectionModels":`Whisper-Modelle`,"voice.sectionAdvanced":`Erweiterte Optionen`,"voice.sectionBehavior":`Transkriptionsverhalten`,"voice.sectionBinaries":`Binärpfade`,"voice.downloadModels":`Modell herunterladen`,"voice.cancelFailed":`Abbrechen des Downloads fehlgeschlagen`,"createPage.title":`Workspace erstellen`,"createPage.subtitle":`Beschreiben Sie die Aufgabe, wählen Sie ein Projekt und konfigurieren Sie den Agenten.`,"createPage.sectionMission":`Aufgabe`,"createPage.sectionMissionHint":`Geben Sie dem Agenten ein klares Ziel und den erforderlichen Kontext.`,"createPage.workspaceNameLabel":`Workspace-Name`,"createPage.descriptionLabel":`Aufgabenbeschreibung`,"createPage.sources":`Optionale Quellen`,"createPage.sectionGit":`Git-Projekt`,"createPage.sectionGitHint":`Wählen Sie Repository, Ausgangsbranch und Worktree-Modus.`,"createPage.worktreeMode":`Worktree-Modus`,"createPage.worktreeNew":`Neuer isolierter Worktree`,"createPage.worktreeExisting":`Vorhandenen Worktree verwenden`,"createPage.projectLabel":`Projekt`,"createPage.sourceBranch":`Ausgangsbranch`,"createPage.workingBranchPreview":`Vorschau des Arbeitsbranches`,"createPage.branchNamePending":`workspace-name`,"createPage.sectionAgent":`Agent`,"createPage.sectionAgentHint":`Prüfen Sie die Ausführungsvorgaben oder aktivieren Sie die Automatisierung.`,"createPage.configureAgent":`Agent konfigurieren`,"createPage.advancedOptions":`Erweiterte Optionen`,"createPage.keyboardHint":`Drücken Sie Strg/Cmd + Enter, um den Workspace zu erstellen.`,"createPage.createWorkspace":`Workspace erstellen`,"createPage.notionEnabled":`Notion aktiviert`,"createPage.importNotion":`Aus Notion importieren`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`Die URL muss mit https://www.notion.so/ oder https://app.notion.com/ beginnen`,"createPage.notionAutoExtract":`Unteraufgaben und Akzeptanzkriterien werden automatisch extrahiert.`,"createPage.notionPanelChoiceLabel":`Diese URL verweist auf eine Unterseite (?p=). An welcher möchtest du arbeiten?`,"createPage.notionPanelOption":`Unterseite (Panel)`,"createPage.notionPanelOptionDesc":`Die Seite, die du angesehen hast — empfohlen`,"createPage.notionParentOption":`Übergeordnete Seite`,"createPage.notionParentOptionDesc":`Das Epic / die Datenbank dazu`,"createPage.importSentry":`Sentry importieren`,"createPage.sentryEnabled":`Sentry aktiviert`,"createPage.sentryPlaceholder":`https://ihre-org.sentry.io/issues/123456`,"createPage.sentryValidation":`Die URL muss auf ein Sentry-Issue zeigen (/issues/<id>)`,"createPage.sentryAutoExtract":`Sentry-Issue wird automatisch importiert`,"createPage.sentryExtractHint":`Kobo extrahiert das Issue und schreibt es nach .ai/thoughts/`,"createPage.workspaceName":`Name des Arbeitsbereichs (Standard: Notion-Seitentitel)`,"createPage.workspaceNamePlaceholder":`Name des Arbeitsbereichs...`,"createPage.instructions":`Zusätzliche Anweisungen (optional)...`,"createPage.instructionsPlaceholder":`Aufgabe beschreiben...`,"createPage.tasks":`Aufgaben ({count})`,"createPage.addTask":`Aufgabe hinzufügen...`,"createPage.acceptanceCriteria":`Akzeptanzkriterien ({count})`,"createPage.addCriterion":`Kriterium hinzufügen...`,"createPage.projectPath":`Projektpfad eingeben`,"createPage.branchType":`Branch-Typ`,"createPage.branch":`Branch`,"createPage.noBranches":`Keine Branches gefunden`,"createPage.enterPath":`Projektpfad eingeben`,"createPage.skipSetupScript":`Setup-Skript überspringen`,"createPage.worktreePickerLabel":`Bestehender Worktree`,"createPage.noOrphanWorktrees":`Kein verwaister Worktree in diesem Projekt`,"createPage.pickWorktreeRequired":`Bitte einen Worktree zum Anhängen auswählen`,"createPage.notionExtractHint":`Unteraufgaben und Akzeptanzkriterien werden aus der Notion-Seite extrahiert.`,"createPage.errorCreating":`Fehler beim Erstellen des Arbeitsbereichs.`,"createPage.branchAdjusted":"Branch existierte bereits — stattdessen `{branch}` erstellt. Der zugehörige Worktree-Ordner verwendet das gleiche Suffix.","createPage.localSourceFallback":`Workspace vom lokalen Branch erstellt (origin nicht erreichbar) — die Basis ist möglicherweise veraltet.`,"createPage.validationNotionUrl":`Bitte eine gültige Notion-URL einfügen (https://www.notion.so/... oder https://app.notion.com/...).`,"createPage.validationDescription":`Bitte beschreiben Sie die Aufgabe.`,"createPage.validationName":`Bitte geben Sie einen Arbeitsbereichnamen an.`,"createPage.validationPath":`Bitte geben Sie den Projektpfad ein.`,"createPage.validationBranch":`Bitte wählen Sie einen Branch aus.`,"settings.title":`Einstellungen`,"settings.language":`Sprache`,"settings.projectColor":`Farbe`,"settings.projectColorClear":`Löschen`,"settings.projectColorDefault":`Standard (grau)`,"settings.workspaceListSection":`Workspace-Liste`,"settings.flattenWorkspaceList":`Workspace-Liste flach anzeigen`,"settings.flattenWorkspaceListHint":`Zeigt alle Workspaces in einer flachen Liste mit Projekt-Badge, anstatt nach Projekt gruppiert.`,"settings.skillSuite.section":`Skill-Suite`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Benutzerdefiniert`,"settings.skillSuite.superpowersHint":`Opinionierter TDD / Brainstorm / Plan-Workflow (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Garry Tans Suite — /review, /ship, /qa, /office-hours usw. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Beide Suites lassen sich kombinieren — superpowers für Methodik (Brainstorm / TDD / Pläne / Prinzipien-Review), gstack für konkrete Workflows (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Agent-Harness-Framework von affaan-m — Agents, Skills, Rules und Hooks zum Planen, Testen, Implementieren, Reviewen und Speichern (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Alle drei lassen sich kombinieren — superpowers für Methodik, gstack für konkrete Workflows, ECC für strukturierte Multi-Agent-Review-/Implementierungsdurchläufe.`,"settings.skillSuite.customHint":`Bearbeite die vier Prompts unten selbst. Beginnt mit der agnostischen Basis.`,"settings.skillSuite.reloadDefaults":`Standard wiederherstellen`,"settings.skillSuite.reloadDefaultsConfirm":`Die vier benutzerdefinierten Prompts durch die agnostischen Standardwerte ersetzen?`,"settings.skillSuite.customPrompts":`Benutzerdefinierte Prompts`,"settings.skillSuite.reviewTemplate":`Review-Vorlage`,"settings.skillSuite.autoLoopReviewGate":`Auto-Loop Review-Gate`,"settings.skillSuite.autoLoopGroomingIntro":`Auto-Loop Grooming-Intro`,"settings.skillSuite.qaTemplate":`QA-Vorlage`,"settings.skillSuite.brainstormingInstruction":`Anweisung für die Brainstorming-Phase`,"settings.global":`Allgemein`,"settings.projects":`Projekte`,"settings.globalSettings":`Allgemeine Einstellungen`,"settings.defaultModel":`Standardmodell`,"settings.defaultModelClaude":`Standardmodell (Claude Code)`,"settings.defaultModelCodex":`Standardmodell (OpenAI Codex)`,"settings.agentPermissions":`Agentenberechtigungen`,"settings.skipPermissions":`Berechtigungsabfragen überspringen (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Achtung: Wird diese Option deaktiviert, werden alle Tool-Berechtigungen (Write, Edit, Bash...) im Headless-Modus automatisch abgelehnt. Der Agent kann dann nur lesen.`,"settings.notifications":`Benachrichtigungen`,"settings.browserNotifications":`Browser-Benachrichtigung wenn Agent fertig ist`,"settings.audioNotifications":`Ton-Benachrichtigung wenn Agent fertig ist`,"settings.enableBrowserNotifications":`Browser-Benachrichtigungen aktivieren`,"settings.testBrowserNotification":`Benachrichtigung testen`,"settings.browserNotificationGranted":`Browser-Benachrichtigungen erlaubt`,"settings.browserNotificationDenied":`Browser-Benachrichtigungen blockiert`,"settings.browserNotificationAsk":`Browser-Berechtigung erforderlich`,"settings.browserNotificationUnsupported":`Browser-Benachrichtigungen nicht verfügbar`,"settings.browserNotificationPermissionNeeded":`Erlaube Browser-Benachrichtigungen, um einen Test zu senden.`,"settings.browserNotificationTestTitle":`Kōbō-Benachrichtigungstest`,"settings.browserNotificationTestBody":`Browser-Benachrichtigungen funktionieren.`,"settings.enableAudio":`Audio aktivieren`,"settings.notificationSound":`Benachrichtigungston`,"settings.notificationSoundHint":`Wird abgespielt, wenn der Agent fertig ist oder eine Berechtigung anfordert.`,"settings.questionSound":`Frageton`,"settings.questionSoundHint":`Wird nur abgespielt, wenn der Agent eine Frage stellt.`,"settings.workspaceCreatedSound":`Ton für Workspace-Erstellung`,"settings.workspaceCreatedSoundHint":`Wird nach dem Erstellen eines Workspaces abgespielt.`,"settings.notificationSoundPreview":`Anhören`,"settings.notificationVolume":`Lautstärke`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Agentenfehler`,"settings.agentErrorSoundHint":`Wird bei Quoten-, Rate-Limit- und Agentenfehlern abgespielt.`,"settings.notificationSoundBasic":`Standardbenachrichtigung`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Arbeit`,"settings.notificationSoundTravailTermine":`Arbeit erledigt`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Das wird knallen`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR und CI`,"settings.soundGeneral":`Allgemeiner Ton`,"settings.soundNone":`Kein Ton`,"settings.prCiFailedSound":`CI fehlgeschlagen`,"settings.prCiRecoveredSound":`CI wieder erfolgreich`,"settings.prChangesRequestedSound":`Änderungen angefordert`,"settings.prApprovedSound":`PR genehmigt`,"settings.prMergeConflictSound":`Merge-Konflikt`,"settings.prReadyToMergeSound":`Bereit zum Mergen`,"settings.prMergedSound":`PR gemergt`,"settings.prCiFailedSoundHint":`Wird abgespielt, wenn die CI fehlschlägt.`,"settings.prCiRecoveredSoundHint":`Wird abgespielt, wenn sich die CI nach einem Fehler erholt.`,"settings.prChangesRequestedSoundHint":`Wird abgespielt, wenn Änderungen angefordert werden.`,"settings.prApprovedSoundHint":`Wird abgespielt, wenn der Pull Request genehmigt wird.`,"settings.prMergeConflictSoundHint":`Wird abgespielt, wenn ein Merge-Konflikt erkannt wird.`,"settings.prReadyToMergeSoundHint":`Wird abgespielt, wenn der Pull Request merge-bereit ist.`,"settings.prMergedSoundHint":`Wird abgespielt, wenn der Pull Request gemergt wird.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Standard-Berechtigungsmodus`,"settings.defaultPermissionModeClaude":`Standard-Berechtigungsmodus (Claude Code)`,"settings.defaultPermissionModeCodex":`Standard-Berechtigungsmodus (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Modus bei der Erstellung eines neuen Workspaces. Plan = nur lesen, Bypass = keine Nachfragen, Strict = Edits automatisch akzeptieren mit allow-list, Interaktiv = vor jedem Tool fragen.`,"settings.activityFeed":`Aktivitätsfeed`,"settings.showThinkingBlocks":`Denkblöcke der Agenten anzeigen`,"settings.whipSettings":`Peitsche`,"settings.whipSettingsHint":`Konfiguriere den optionalen Peitschen-Kurzbefehl und die Lautstärke.`,"settings.whipEnabled":`Peitsche aktivieren`,"settings.whipEnabledHint":`Zeigt die interaktive Peitsche in geeigneten laufenden Workspaces an.`,"settings.whipVolume":`Peitschenlautstärke`,"settings.whipVolumeMasterAudioDisabled":`Der Hauptton ist ausgeschaltet. Aktivieren Sie Audio-Benachrichtigungen, um die Peitschenlautstärke anzupassen; der gespeicherte Wert bleibt erhalten.`,"whip.overlayLabel":`Interaktive Peitsche`,"whip.overlayInstructions":`Bewegen Sie den Zeiger, um die Peitsche zu steuern. Drücken Sie Eingabe oder Leertaste zum Knallen. Drücken Sie Escape zum Schließen.`,"settings.whipShortcut":`Peitschen-Tastenkürzel`,"settings.whipShortcutHint":`Klicken Sie und drücken Sie dann das gewünschte Tastenkürzel.`,"settings.whipShortcutRecording":`Tastenkürzel drücken…`,"settings.whipShortcutButtonLabel":`Peitschen-Tastenkürzel: {shortcut}`,"settings.whipShortcutRecordingLabel":`Peitschen-Tastenkürzel wird aufgezeichnet. Tastenkürzel drücken…`,"settings.whipShortcutReset":`Tastenkürzel zurücksetzen`,"settings.whipShortcutReserved":`Dieses Tastenkürzel ist vom Browser reserviert.`,"settings.testIntegration":`Verbindung testen`,"pwa.offline":`Du bist offline. Chat und Agenten benötigen den Kōbō-Server.`,"pwa.reconnecting":`Verbindung zum Kōbō-Server wird wiederhergestellt…`,"pwa.installReady":`Kōbō als App installieren.`,"pwa.install":`Installieren`,"pwa.ignore":`Ignorieren`,"pwa.updateReady":`Ein Kōbō-Update ist verfügbar.`,"pwa.reload":`Neu laden`,"chat.searchWorkspaceHistory":`Workspace-Verlauf durchsuchen`,"chat.historySearch.user":`Sie`,"chat.historySearch.agent":`Agent`,"chat.openInGitDiff":`Im Git-Diff öffnen`,"timeline.title":`Sitzungszeitachse`,"timeline.export":`Diagnose exportieren`,"timeline.unnamed":`Agent-Sitzung`,"timeline.tools":`{count} Tools`,"timeline.errors":`{count} Fehler`,"settings.verboseMessages":`Ausführliche Systemnachrichten anzeigen (task_progress, task_started)`,"settings.availableVariables":`Verfügbare Template-Variablen`,"settings.prPromptTemplate":`PR-Prompt-Vorlage`,"settings.prPromptPlaceholder":`Anweisungen für den Agenten bei der Erstellung von GitHub-PRs...`,"settings.prPromptHint":`Verwenden Sie die oben aufgeführten Platzhalter (doppelte geschweifte Klammern).`,"settings.reviewPromptTemplate":`Review-Prompt-Vorlage`,"settings.reviewPromptPlaceholder":`Anweisungen für den Agenten bei der Review von Branch-Änderungen...`,"settings.ciFixPromptTemplate":`CI-Fix-Prompt-Vorlage`,"settings.ciFixPromptHint":`Wird an den Agenten gesendet, wenn die CI eines Workspaces fehlschlägt. Variablen (doppelte geschweifte Klammern): pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Den Agenten bitten, die fehlschlagenden CI-Jobs zu diagnostizieren und zu beheben...`,"settings.finalizationPromptTemplate":`Auto-Loop-Finalisierungs-Prompt`,"settings.finalizationPromptHint":`Standard-Prompt für die letzte Auto-Loop-Iteration (abschließende Qualitätsprüfungen). Wird verwendet, wenn ein Projekt seinen eigenen Finalisierungs-Prompt leer lässt.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Notion-Initial-Prompt`,"settings.notionInitialPrompt.help":`Wird an den Workspace-Erstellungsprompt angehängt, wenn der Workspace ein Notion-Ticket hat. Variablen: {variables}.`,"settings.notionInitialPrompt.project":`Notion-Initial-Prompt (Überschreibung)`,"settings.sentryInitialPrompt":`Sentry-Initial-Prompt`,"settings.sentryInitialPrompt.help":`Wird an den Workspace-Erstellungsprompt angehängt, wenn der Workspace ein Sentry-Issue hat. Variablen: {variables}.`,"settings.sentryInitialPrompt.project":`Sentry-Initial-Prompt (Überschreibung)`,"settings.initialPrompt.inheritHint":`Leer lassen, um zu erben. Geben Sie ein Leerzeichen ein, um die Injektion auf dieser Ebene zu deaktivieren.`,"settings.resetToDefault":`Zurücksetzen`,"settings.resetFailed":`Standardwert konnte nicht geladen werden`,"settings.sentryIntegration":`Sentry-Integration`,"settings.var.prNumber":`PR-Nummer (z. B. 42)`,"settings.var.prUrl":`Vollständige URL der erstellten PR`,"settings.var.branchName":`Name des Arbeitsbranches`,"settings.var.sourceBranch":`Quellbranch, auf den die PR abzielt`,"settings.var.workspaceName":`Workspace-Name`,"settings.var.projectName":`Letztes Segment des Projektpfads`,"settings.var.notionUrl":`Notion-URL falls gesetzt, sonst leer`,"settings.var.commits":`Aufzählung der Commits zwischen Source und Head`,"settings.var.diffStats":`Git-Shortstat-Zusammenfassung (Dateien, Einfügungen, Löschungen)`,"settings.var.tasks":`Reguläre Aufgaben als Checkliste`,"settings.var.acceptanceCriteria":`Akzeptanzkriterien als Checkliste`,"settings.gitConventions":`Git-Konventionen (global)`,"settings.gitConventionsPlaceholder":`# Git-Konventionen...`,"settings.gitConventionsHint":`Diese Konventionen werden in .ai/.git-conventions.md jedes neuen Arbeitsbereichs geschrieben und müssen vom Agenten vor jeder Git-Operation eingehalten werden. Werden durch projektspezifische Konventionen überschrieben, falls definiert.`,"settings.setupScript":`Setup-Skript`,"settings.cleanupScript":`Cleanup-Skript`,"settings.archiveScript":`Archiv-Skript`,"settings.archiveScriptHint":`Shell-Skript, das serverseitig im Worktree ausgeführt wird, wenn ein Workspace archiviert wird. Leer lassen zum Deaktivieren.`,"settings.archiveScriptPlaceholder":`z. B. Container aufräumen, Speicherplatz freigeben…`,"settings.changeSourceBranchScript":`Quellbranch-Wechsel-Skript`,"settings.changeSourceBranchScript.help":`Ersetzt den eingebauten Cherry-Pick, wenn nicht leer. Das Skript verwaltet Git, PR-Basis, Force-Push und Konflikte; Kōbō verweigert nur, solange der Agent läuft, und aktualisiert die Quellbranch-Metadaten bei Exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — neuer Quellbranch aus dem Dialog
3
3
  KOBO_OLD_BASE — vorheriger Quellbranch des Workspaces
4
4
  KOBO_WORKING_BRANCH — Arbeitsbranch des Workspaces
5
5
  KOBO_WORKTREE_PATH — absoluter Pfad des Worktrees (auch cwd)
@@ -79,4 +79,4 @@ KOBO_PR_NUMBER — numero della PR/MR sulla forge risolta (vuoto se nessuna
79
79
  # Oppure direttamente con git (funziona su GitHub anche dopo eliminazione del branch):
80
80
  git fetch origin pull/[numero-pr]/head:[nome-branch]
81
81
  git worktree add [percorso] [nome-branch]`,"settings.purgeDocsRestoreFootnote":`GitHub mantiene il ref HEAD della PR accessibile a lungo dopo l'eliminazione del branch sorgente (mesi / anni). Il rilevamento automatico gira nel watcher 30 s — nessuna azione UI necessaria una volta che la cartella riappare.`,"settings.purgeDocsPermissionsTitle":`Evitare errori di permessi durante la pulizia`,"settings.purgeDocsPermissionsIntro":`Docker spesso lascia file root-owned in node_modules / vendor dentro il worktree. Quando Kōbō prova a rimuoverli, ricevi EACCES / EPERM e la pulizia fallisce. Due modi per prevenirlo:`,"settings.purgeDocsPermissionsDocker":'Configurare il container per girare come utente host — direttiva USER nel Dockerfile, o `user: "${UID}:${GID}"` in docker-compose (con UID/GID esportati nella shell).',"settings.purgeDocsPermissionsAcl":`Pre-impostare una ACL di default sulla root dei worktrees — rete di sicurezza che funziona nella MAGGIOR PARTE dei casi (ext4/btrfs/xfs + bind mount Docker classico). Ogni nuovo file eredita allora una voce di accesso per il tuo utente, oltre al proprietario nominale:`,"settings.purgeDocsPermissionsAclCommand":` setfacl -d -m u:$(whoami):rwX [root-worktrees]`,"settings.purgeDocsPermissionsFootnote":"Limiti delle ACL: NON funzionano sui volumi Docker con nome (usa un bind mount), filesystem senza supporto ACL (NTFS, exFAT, tmpfs), SELinux strict con `:Z`, o quando Docker `userns-remap` è attivato. La soluzione più affidabile resta configurare l'utente nel container (opzione 1). Suggerimento: `rwX` (X maiuscola) aggiunge il bit eseguibile solo a directory e file già eseguibili — più pulito di `rwx` che renderebbe eseguibile ogni file di testo.","settings.purgeDocsPermissionsRecoverTitle":`Sbloccare un worktree già rotto (file root-owned esistenti)`,"settings.purgeDocsPermissionsRecoverIntro":`Se ti ritrovi con un worktree già pieno di file root-owned (Docker ha già girato, vendor / node_modules sono bloccati), l'ACL preventiva sopra non basta — devi sistemare i file ESISTENTI. Due approcci, entrambi da eseguire dentro la cartella del worktree:`,"settings.purgeDocsPermissionsRecoverAclIntro":`Opzione A — ACL ricorsiva (preserva l'ownership root per audit, aggiunge solo accesso per il tuo utente in parallelo):`,"settings.purgeDocsPermissionsRecoverAclCommand":`# imposta ACL di default per i file futuri E concede accesso a tutto l'esistente
82
- sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Opzione B — Prendere la proprietà (più semplice, perde la traccia "creato da root nel container" ma raramente conta):`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Suggerimento: puoi eseguire questi comandi direttamente sulla root dei worktrees (es. `~/.worktrees/`) per coprire tutti i workspace esistenti E futuri in un colpo solo. Una volta fatto, la pulizia Kōbō funzionerà senza errori di permessi.","contextMenu.runSetup":`Esegui script di setup`,"contextMenu.exportEvents":`Esporta eventi (CSV)`,"contextMenu.dismissChangesRequested":`Segna «Modifiche richieste» come visto`,"contextMenu.dismissCiFailure":`Segna «CI in errore» come visto`,"contextMenu.restoreChangesRequested":`Segna «Modifiche richieste» come non visto`,"contextMenu.restoreCiFailure":`Segna «CI in errore» come non visto`,"contextMenu.exportingEvents":`Preparazione dell'esportazione…`,"contextMenu.exportEventsError":`Esportazione degli eventi non riuscita`,"contextMenu.openNotion":`Apri in Notion`,"contextMenu.openSentry":`Apri in Sentry`,"contextMenu.openPr":`Apri PR`,"contextMenu.ignorePrWatch":`Ignora i controlli PR`,"contextMenu.resumePrWatch":`Riprendi i controlli PR`,"contextMenu.prWatchToggleFailed":`Aggiornamento dei controlli PR non riuscito`,"workspace.favorite":`Segna come preferito`,"workspace.unfavorite":`Rimuovi dai preferiti`,"workspace.showFavoritesOnly":`Mostra solo i preferiti`,"workspace.searchArchivedToggle":`Cerca anche nei workspace archiviati`,"workspace.descriptionPlaceholder":`Aggiungi una breve descrizione`,"workspace.descriptionDialogHint":`Testo semplice, massimo 200 caratteri. Lasciare vuoto per cancellare.`,"workspace.descriptionTooLong":`La descrizione deve avere al massimo 200 caratteri.`,"workspace.descriptionSaveFailed":`Impossibile salvare la descrizione.`,"workspace.agentDescriptionTooltip":`Stato live mantenuto dall'agente`,"mcp.tool.setWorkspaceDescription":`Imposta la breve descrizione del workspace (≤ 200 caratteri).`,"tags.manage":`Gestisci tag`,"tags.manageTitle":`Gestisci i tag del workspace`,"tags.noTagsDefined":`Nessun tag definito. Aggiungine in Impostazioni > Globale > Tag.`,"tags.orphanedHint":`{count} tag non sono più nel catalogo globale. Deseleziona per rimuoverli.`,"settings.tagsTitle":`Tag dei workspace`,"settings.tagsHint":`Definisci i tag assegnabili ai workspace. Digita per aggiungere, clicca la croce per rimuovere.`,"settings.tagsLabel":`Tag disponibili`,"settings.branchPrefixesTitle":`Prefissi di branch`,"settings.branchPrefixesHint":`Gestisci i prefissi di branch Git disponibili nella pagina di creazione del workspace. Il primo è preselezionato per impostazione predefinita.`,"settings.branchPrefixesEmpty":`Nessun prefisso di branch definito. Aggiungine almeno uno qui sotto.`,"settings.branchPrefixesAddLabel":`Nuovo prefisso`,"settings.branchPrefixesEditHint":`Clicca per rinominare`,"settings.branchPrefixesMoveUp":`Sposta su`,"settings.branchPrefixesMoveDown":`Sposta giù`,"settings.worktreesTitle":`Worktree Git`,"settings.worktreesHint":`Scegli dove creare i worktree dei nuovi workspace. I percorsi relativi sono risolti dal progetto; sono supportati percorsi assoluti Linux/macOS e Windows, $HOME, ~ e %USERPROFILE%.`,"settings.worktreesPathLabel":`Percorso worktree`,"settings.worktreesPathRequired":`Il percorso worktree è obbligatorio.`,"settings.worktreesPrefixByProject":`Aggiungi il nome del progetto come prefisso ai worktree`,"settings.worktreesPrefixByProjectHint":`Posiziona ogni worktree in una sottocartella con il nome del progetto per evitare collisioni quando più progetti condividono la stessa radice.`,"settings.shareTitle":`Condividi configurazione`,"settings.shareHint":`Esporta impostazioni, template e tag come bundle JSON. Le chiavi MCP sono escluse per sicurezza.`,"settings.exportConfig":`Esporta`,"settings.importConfig":`Importa`,"settings.exportSuccess":`Configurazione esportata`,"settings.importSuccess":`Configurazione importata`,"settings.importConfirmTitle":`Importa configurazione`,"settings.importConfirmMessage":`Questo sostituirà le tue impostazioni, template e tag attuali. Le chiavi MCP vengono preservate. Continuare?`,"settings.network.title":`Accesso di rete`,"settings.network.hint":`Controlla Kōbō da un altro dispositivo della tua LAN affidabile. Off = solo localhost. On = raggiungibile sulla rete, protetto da un token. Riavvia Kōbō dopo il cambio.`,"settings.network.enable":`Abilita accesso di rete`,"settings.network.behindProxy":`Dietro un reverse proxy`,"settings.network.behindProxyHint":`Kōbō non può più distinguere la tua macchina da una richiesta inoltrata — anche localhost dovrà presentare il token d'ora in poi. Attivalo solo se un reverse proxy (Traefik, nginx, Caddy…) si trova davanti a Kōbō.`,"settings.network.restartRequired":`Riavvia Kōbō per applicare il nuovo indirizzo di bind.`,"settings.network.token":`Token di accesso`,"settings.network.copy":`Copia`,"settings.network.copied":`Copiato`,"settings.network.regenerate":`Rigenera`,"settings.network.regenerateConfirm":`Rigenerare il token? I dispositivi connessi avranno bisogno del nuovo token.`,"settings.network.urls":`URL LAN`,"settings.network.scan":`Scansiona per connetterti`,"settings.network.noUrls":`Nessun indirizzo LAN rilevato.`,"settings.network.loadFailed":`Impossibile caricare le impostazioni di accesso di rete.`,"settings.network.updateFailed":`Impossibile aggiornare le impostazioni di accesso di rete.`,"settings.unsavedChanges.title":`Modifiche non salvate`,"settings.unsavedChanges.message":`Questo progetto ha modifiche non salvate. Cambiando progetto andranno perse.`,"settings.unsavedChanges.discard":`Scarta e cambia`,"settings.unsavedChanges.cancel":`Annulla`,"health.title":`Stato`,"health.tooltip":`Stato del sistema`,"changelog.title":`Changelog`,"changelog.tooltip":`Novità di Kōbō`,"changelog.empty":`Nessun changelog disponibile.`,"changelog.current":`corrente`,"changelog.currentVersion":`Versione corrente: v{version}`,"health.envTitle":`Ambiente`,"health.version":`Versione`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Database`,"health.dbPath":`Percorso`,"health.dbSize":`Dimensione`,"health.schemaVersion":`Versione schema`,"health.settingsSchemaVersion":`Schema impostazioni`,"health.runtimesTitle":`Runtime agente`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude non trovato nel PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`binario codex non risolvibile`,"health.workspacesTitle":`Workspace`,"health.workspacesCount":`{total} totali, {archived} archiviati`,"health.worktreesMissing":`{count} worktree mancanti sul disco`,"health.sessionsTitle":`Sessioni agente`,"health.sessionsOrphaned":`{n} sessione/sessioni orfana/e in esecuzione`,"health.integrationsTitle":`Integrazioni`,"health.integrationConfigured":`configurata`,"health.integrationMissing":`non configurata`,"health.integrationDisabled":`disabilitata`,"settings.integrationEnabled":`Attiva integrazione`,"health.activeTitle":`Stato attivo`,"health.activeQuotaBackoffs":`Quota backoff in attesa`,"health.activeWakeups":`Wakeup programmati`,"health.activeAutoLoop":`Auto-loop in esecuzione`,"health.activeAgentSessions":`Sessioni agente attive`,"health.activeDevServers":`Dev server in esecuzione`,"health.noneActive":`Nessuno.`,"health.quotaResumeAt":`riprende alle {time}`,"health.wakeupAt":`sveglia alle {time}`,"health.startedAgo":`avviata {time} fa`,"health.autoLoopReady":`pronto, in iterazione`,"health.autoLoopGrooming":`grooming in corso`,"session.started":`Sessione avviata`,"session.ended":`Sessione terminata`,"session.compacted":`Contesto compattato`,"tool.running":`In corso...`,"activity.raw_lines":`Righe di output grezze ({n})`,"activity.loading_older":`Caricamento messaggi precedenti…`,"activity.compacting":`Compattazione del contesto…`,"activity.prev_user_message":`Messaggio utente precedente`,"activity.scroll_to_bottom":`Scorri in fondo`,"chat.systemPrompt":`Prompt di sistema`,"chat.agent":`Agente`,"chat.cleanupScript":`Script di pulizia`,"chat.archiveScript":`Script di archiviazione`,"chat.setupScript":`Script di setup`,"chat.scriptDone":`Fatto`,"chat.scriptComplete":`[{phase}] Completato`,"chat.scriptError":`[{phase}] Errore: {message}`,"chat.unknownError":`sconosciuto`,"chat.you":`Tu`,"chat.session":`Sessione`,"chat.nActions":`{n} azione | {n} azioni`,"chat.lastUpdatedAt":`Ultimo aggiornamento alle {time}`,"chat.scrollToTurnTop":`Scorri all'inizio del messaggio`,"migration.backing_up":`Backup del database in corso…`,"migration.running":`Migrazione dei dati dell'agente — {processed}/{total}`,"migration.error":`Migrazione non riuscita`,"migration.backup_location":`Un backup è stato salvato in {path}. Riavvia Kōbō per riprovare.`,"migration.retry":`Riavvia Kōbō per riprovare.`,"engine.select":`Engine`,"engine.model":`Modello`,"engine.effort":`Livello di ragionamento`,"wakeup.scheduledIn":`Prossimo risveglio tra {n}s`,"wakeup.scheduledAt":`Prossimo risveglio alle {time}`,"wakeup.firing":`Risveglio in corso...`,"wakeup.reason":`Motivo: {reason}`,"wakeup.cancel":`Annulla questo risveglio`,"wakeup.pendingIndicator":`Risveglio programmato`,"cron.pendingIndicator":`{n} cron programmato/i`,"schedule.tabLabel":`Pianificazione`,"schedule.panelTitle":`Automazione`,"schedule.panelDescription":`Risvegliare questo workspace più tardi o eseguire istruzioni secondo una pianificazione.`,"schedule.activeTitle":`Pianificazioni attive`,"schedule.emptyTitle":`Nessuna pianificazione`,"schedule.emptyDescription":`Crea un wakeup singolo o un’attività ricorrente qui sotto.`,"schedule.cancelWakeup":`Annulla questo wakeup`,"schedule.cancelCron":`Elimina questa attività ricorrente`,"schedule.createTitle":`Crea una pianificazione`,"schedule.createDescription":`Scegli quando e come deve essere eseguito l'agente.`,"schedule.typeWakeup":`Wakeup singolo`,"schedule.typeRecurring":`Attività ricorrente`,"schedule.wakeupDescription":`Esegui il prompt una volta dopo un intervallo.`,"schedule.cronDescription":`Esegui il prompt periodicamente con una frequenza fissa.`,"schedule.promptHint":`Istruzioni che verranno inviate all'agente`,"schedule.frequencyTitle":`Frequenza`,"schedule.advancedDescription":`Usa un’espressione cron grezza`,"schedule.cronExpressionLabel":`Espressione cron`,"schedule.sessionModeTitle":`Sessione di esecuzione`,"schedule.modeResume":`Riprendi sessione`,"schedule.oneShotHint":`Rimuovi questa pianificazione dopo la prima esecuzione.`,"schedule.wakeupTitle":`Wakeup in attesa`,"schedule.cronsTitle":`Pianificazioni ricorrenti`,"schedule.noWakeup":`Nessun wakeup pianificato`,"schedule.noCrons":`Nessun cron pianificato`,"schedule.nextFireAt":`prossimo alle {time}`,"schedule.lastFiredAt":`ultimo {time} fa`,"schedule.addCronTitle":`Aggiungi un'attività ricorrente`,"schedule.addWakeupTitle":`Programma un wakeup`,"schedule.every":`Ogni`,"schedule.unitMinutes":`minuti`,"schedule.unitHours":`ore`,"schedule.unitDays":`giorni`,"schedule.daysDriftWarning":`L'intervallo può ridursi a 1 giorno a fine mese (limite di cron).`,"schedule.advancedExpression":`Espressione avanzata (opzionale)`,"schedule.advancedHint":`Cron grezzo (es. */15 * * * *) o {'@'}hourly/{'@'}daily — sostituisce il selettore se compilato.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Etichetta (opzionale)`,"schedule.delayMinutes":`Ritardo (minuti)`,"schedule.modeFresh":`Nuova sessione`,"schedule.oneShot":`Esegui una sola volta`,"schedule.addCronBtn":`Aggiungi cron`,"schedule.addWakeupBtn":`Programma wakeup`,"schedule.cronCreated":`Attività ricorrente aggiunta`,"schedule.wakeupCreated":`Wakeup programmato`,"askUserQuestion.title":`L'agente sta facendo una domanda`,"askUserQuestion.submit":`Invia risposta`,"askUserQuestion.multiSelectHint":`Seleziona una o più opzioni`,"askUserQuestion.otherOption":`Altro`,"askUserQuestion.otherOptionHint":`specifica nel prossimo messaggio`,"askUserQuestion.freeFormLabel":`Specifica la tua risposta`,"askUserQuestion.freeFormHint":`Questa risposta verrà inviata direttamente all'agente.`,"askUserQuestion.noPending":`Nessuna domanda in attesa`,"askUserQuestion.next":`Avanti`,"askUserQuestion.previous":`Indietro`,"askUserQuestion.cancel":`Annulla`,"askUserQuestion.cancelTooltip":`Salta questa domanda — l'agente proseguirà senza risposta`,"askUserQuestion.collapse":`Riduci il pannello della domanda`,"askUserQuestion.expand":`Espandi il pannello della domanda`,"permissionRequest.title":`L'agente vuole usare uno strumento`,"permissionRequest.allow":`Consenti`,"permissionRequest.allowOnce":`Consenti una volta`,"permissionRequest.allowTurn":`Consenti questo turno`,"permissionRequest.allowOperation":`Consenti sempre questa operazione`,"permissionRequest.allowTool":`Consenti sempre questo strumento`,"permissionRequest.deny":`Nega`,"permissionRequest.tool":`Strumento`,"permissionRequest.input":`Input`,"permissionRequest.rawInput":`Dettagli tecnici`,"permissionRequest.collapse":`Riduci il pannello dei permessi`,"permissionRequest.expand":`Espandi il pannello dei permessi`,"permissionRequest.denied":`negato dall'utente`,"workspaceStatus.awaitingUser":`in attesa della tua risposta`,"workspaceList.prOpen":`#{n} — Pull request aperta`,"workspaceList.prWatchDisabledIndicator":`Controlli PR ignorati per questo workspace`,"workspaceList.prChangesRequested":`#{n} — Modifiche richieste`,"workspaceList.attentionCiFailed":`CI fallita`,"workspaceList.attentionChangesRequested":`Modifiche richieste`,"workspaceList.attentionReadyToMerge":`Pronto per il merge`,"autoLoop.toggle":`Auto-loop`,"autoLoop.start":`Avvia l'auto-loop`,"autoLoop.prepare":`Prepara per l'auto-loop`,"autoLoop.reprepare":`Ri-prepara per l'auto-loop`,"autoLoop.reprepareTooltip":`Rilancia la fase di grooming per aggiungere o aggiornare le attività prima di riavviare il loop`,"autoLoop.prepareBusy":`Attendi che l'agente finisca prima di preparare`,"autoLoop.forceReady":`So cosa faccio — salta la preparazione`,"autoLoop.forceReadyConfirm":`Saltare la preparazione e segnare auto-loop pronto? Il loop potrebbe bloccarsi se le attività non sono atomiche.`,"autoLoop.stop":`Ferma l'auto-loop`,"autoLoop.notReady":`Esegui prima «Prepara per l'auto-loop»`,"autoLoop.noTasks":`Aggiungi prima delle attività`,"autoLoop.progress":`Auto-loop · {done}/{total} attività`,"autoLoop.preparing":`Auto-loop · preparazione`,"autoLoop.preparingTooltip":`Grooming in corso — l'agente sta creando / revisionando le attività. Il loop partirà quando chiamerà mark_auto_loop_ready.`,"autoLoop.running":`Auto-loop in corso`,"autoLoop.startInMode":`Avvia in modalità auto-loop`,"autoLoop.brainstormModelPrefix":`Brainstorm:`,"autoLoop.brainstormModelTooltip":`Modello usato solo per la sessione di brainstorming iniziale — ogni attività successiva usa il modello scelto sopra`,"autoLoop.brainstormReasoningPrefix":`Brainstorm:`,"autoLoop.brainstormReasoningTooltip":`Livello di ragionamento usato solo per la sessione di brainstorming iniziale`,"autoLoop.executionModelPrefix":`Loop:`,"autoLoop.executionModelTooltip":`Modello usato per ogni attività dell'auto-loop dopo la sessione di brainstorming iniziale`,"autoLoop.sessionMode.perTask":`Nuova sessione per attività`,"autoLoop.sessionMode.label":`Sessione:`,"autoLoop.sessionMode.perTaskTooltip":`Ogni attività avvia una nuova sessione Claude Code senza memoria delle attività precedenti`,"autoLoop.sessionMode.continuous":`Sessione continua`,"autoLoop.sessionMode.continuousTooltip":`Tutte le attività si susseguono nella stessa sessione — l'agente mantiene tutto il contesto, ma la sessione si allunga nel tempo`,"koboCommand.prepAutoloopDesc":`Preparare le attività per la modalità auto-loop (atomicità)`,"staleSessionBanner.title":`Auto-loop in corso`,"staleSessionBanner.message":`Stai visualizzando una sessione precedente — l'agente sta lavorando nella più recente.`,"staleSessionBanner.staleTitle":`Sessione precedente`,"staleSessionBanner.staleMessage":`Stai visualizzando una sessione precedente — i messaggi inviati andranno a questa sessione, non alla più recente.`,"staleSessionBanner.switchToCurrent":`Passa a quella corrente`,"network.login.title":`Accesso di rete`,"network.login.description":`Questo Kōbō richiede un token per essere controllato dalla rete. Incolla il token mostrato nelle Impostazioni sulla macchina host.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Incolla il tuo token`,"network.login.connect":`Connetti`,"network.login.invalid":`Token non valido`,"network.login.serverError":`Errore del server — riprova.`,"network.login.unreachable":`Kōbō non è raggiungibile — controlla la connessione.`,"layout.toggleWorkspaces":`Mostra/nascondi il pannello degli spazi`,"layout.togglePanel":`Mostra/nascondi il pannello laterale`},ci=`kobo:locale`,li=[`en`,`fr`,`de`,`es`,`it`];function ui(e){return li.includes(e)}function di(){let e=localStorage.getItem(ci);if(e&&ui(e))return e;let t=navigator.language.split(`-`)[0];return t&&ui(t)?(localStorage.setItem(ci,t),t):(localStorage.setItem(ci,`en`),`en`)}var fi=t({legacy:!1,locale:di(),fallbackLocale:`en`,messages:{en:ii,fr:oi,de:ri,es:ai,it:si}}),pi=5e3,mi=be(`agent-stream`,()=>{let e=i(new Map),t=i(new Map),n=i(new Map),r=i(new Map),a=i(new Map),o=i(new Map),s=i(new Map),c=i(0);function l(e){return c.value,s.value.get(e)??!1}function u(e,t){(s.value.get(e)??!1)!==t&&(s.value.set(e,t),c.value++)}function d(t){return c.value,e.value.get(t)??[]}function f(e){return c.value,t.value.get(e)??[]}function p(e){return c.value,n.value.get(e)??[]}function m(e){return c.value,r.value.get(e)??[]}function h(e){return c.value,a.value.get(e)}function g(e){return c.value,o.value.get(e)??!0}function _(i,o,s,l,u){let d=e.value.get(i)??[],f=t.value.get(i)??[],p=n.value.get(i)??[],m=r.value.get(i)??[];if(l&&m.includes(l))return;let h=d.length===0;d.push(o),f.push(s??new Date().toISOString()),p.push(u??null),m.push(l??null),e.value.set(i,d),t.value.set(i,f),n.value.set(i,p),r.value.set(i,m),h&&l&&a.value.set(i,l),v(i,d,f,p,m),c.value++}function v(e,t,n,r,i){let s=t.length-pi;if(s<=0)return;t.splice(0,s),n.splice(0,s),r.splice(0,s),i.splice(0,s);let c=i.find(e=>typeof e==`string`);c?a.value.set(e,c):a.value.delete(e),o.value.set(e,!0)}function y(i,o,s,l){let u=e.value.get(i)??[],d=t.value.get(i)??[],f=n.value.get(i)??[],p=r.value.get(i)??[],m=new Set(p.filter(e=>typeof e==`string`)),h=[];for(let e=0;e<o.length;e++){let t=o[e];if(!t)continue;let n=l.eventIds[e]??null;n&&m.has(n)||(u.push(t),d.push(s[e]??new Date().toISOString()),f.push(l.sessionIds[e]??null),p.push(n),n&&m.add(n),h.push(e))}if(h.length===0)return h;if(e.value.set(i,u),t.value.set(i,d),n.value.set(i,f),r.value.set(i,p),!a.value.has(i)){let e=p.find(e=>typeof e==`string`);e&&a.value.set(i,e)}return v(i,u,d,f,p),c.value++,h}function b(i,s,l,u){e.value.set(i,[...s]),t.value.set(i,l?[...l]:s.map(()=>new Date().toISOString())),n.value.set(i,u?.sessionIds?[...u.sessionIds]:s.map(()=>null)),r.value.set(i,u?.eventIds?[...u.eventIds]:s.map(()=>null)),u?.oldestId?a.value.set(i,u.oldestId):a.value.delete(i),u&&typeof u.hasMoreOlder==`boolean`?o.value.set(i,u.hasMoreOlder):o.value.delete(i),c.value++}function x(i,s,l,u){if(s.length===0){o.value.set(i,u.hasMoreOlder),c.value++;return}let d=e.value.get(i)??[],f=t.value.get(i)??[],p=n.value.get(i)??[],m=r.value.get(i)??[],h=u.sessionIds??s.map(()=>null),g=u.eventIds??s.map(()=>null);e.value.set(i,[...s,...d]),t.value.set(i,[...l,...f]),n.value.set(i,[...h,...p]),r.value.set(i,[...g,...m]),u.oldestId&&a.value.set(i,u.oldestId),o.value.set(i,u.hasMoreOlder),c.value++}function S(i,a){let o=e.value.get(i),s=r.value.get(i);if(!o||!s)return;let l=s.indexOf(a);if(l===-1)return;let u=t.value.get(i),d=n.value.get(i);o.splice(l,1),s.splice(l,1),u&&u.splice(l,1),d&&d.splice(l,1),c.value++}function C(i){e.value.delete(i),t.value.delete(i),n.value.delete(i),r.value.delete(i),a.value.delete(i),o.value.delete(i),s.value.delete(i),c.value++}return{events:e,timestamps:t,sessionIds:n,eventIds:r,version:c,eventsFor:d,timestampsFor:f,sessionIdsFor:p,eventIdsFor:m,oldestIdFor:h,hasMoreOlderFor:g,isCompacting:l,setCompacting:u,append:_,merge:y,reset:b,prepend:x,removeByEventId:S,clear:C}}),hi=`/sounds`,gi=[{id:`basic-notification.mp3`,labelKey:`settings.notificationSoundBasic`},{id:`hey.mp3`,labelKey:`settings.notificationSoundHey`},{id:`warcraft-3-humain-travail.mp3`,labelKey:`settings.notificationSoundWorkspaceCreated`},{id:`travail_termine.mp3`,labelKey:`settings.notificationSoundTravailTermine`},{id:`faaah.mp3`,labelKey:`settings.notificationSoundFaaah`},{id:`ca_va_peter.mp3`,labelKey:`settings.notificationSoundCaVaPeter`},{id:`dry-fart.mp3`,labelKey:`settings.notificationSoundDryFart`},{id:`for-shure.mp3`,labelKey:`settings.notificationSoundForShure`},{id:`7eme-compagnie-03.mp3`,labelKey:`settings.notificationSoundSeptiemeCompagnie03`},{id:`aller-ftg.mp3`,labelKey:`settings.notificationSoundAllerFtg`},{id:`arrete-de-mentir.mp3`,labelKey:`settings.notificationSoundArreteDeMentir`},{id:`arretez-les-messages.mp3`,labelKey:`settings.notificationSoundArretezLesMessages`},{id:`bah-alors-on-est-nul.mp3`,labelKey:`settings.notificationSoundBahAlorsOnEstNul`},{id:`gta-v-death.mp3`,labelKey:`settings.notificationSoundGtaVDeath`},{id:`nan-tu-degages.mp3`,labelKey:`settings.notificationSoundNanTuDegages`},{id:`nan-wallah-pardon.mp3`,labelKey:`settings.notificationSoundNanWallahPardon`},{id:`ouais-cest-greg.mp3`,labelKey:`settings.notificationSoundOuaisCestGreg`},{id:`pas-ca-zinedine.mp3`,labelKey:`settings.notificationSoundPasCaZinedine`},{id:`ta-gueule.mp3`,labelKey:`settings.notificationSoundTaGueule`},{id:`tu-vas-la-fermer.mp3`,labelKey:`settings.notificationSoundTuVasLaFermer`},{id:`yaaa.mp3`,labelKey:`settings.notificationSoundYaaa`},{id:`mais-laisse-moi-dormir-zebi.mp3`,labelKey:`settings.notificationSoundMaisLaisseMoiDormirZebi`}],_i=`hey.mp3`,vi=`inherit`,yi=`none`,bi=[`audioPrCiFailedSound`,`audioPrCiRecoveredSound`,`audioPrChangesRequestedSound`,`audioPrApprovedSound`,`audioPrMergeConflictSound`,`audioPrReadyToMergeSound`,`audioPrMergedSound`],xi=[`audioPrCiFailedEnabled`,`audioPrCiFailedVolume`,`audioPrCiRecoveredEnabled`,`audioPrCiRecoveredVolume`,`audioPrChangesRequestedEnabled`,`audioPrChangesRequestedVolume`,`audioPrApprovedEnabled`,`audioPrApprovedVolume`,`audioPrMergeConflictEnabled`,`audioPrMergeConflictVolume`,`audioPrReadyToMergeEnabled`,`audioPrReadyToMergeVolume`,`audioPrMergedEnabled`,`audioPrMergedVolume`],Si={audioPrCiFailedSound:vi,audioPrCiRecoveredSound:vi,audioPrChangesRequestedSound:vi,audioPrApprovedSound:vi,audioPrMergeConflictSound:vi,audioPrReadyToMergeSound:vi,audioPrMergedSound:vi,audioPrCiFailedEnabled:!1,audioPrCiFailedVolume:1,audioPrCiRecoveredEnabled:!1,audioPrCiRecoveredVolume:1,audioPrChangesRequestedEnabled:!1,audioPrChangesRequestedVolume:1,audioPrApprovedEnabled:!1,audioPrApprovedVolume:1,audioPrMergeConflictEnabled:!1,audioPrMergeConflictVolume:1,audioPrReadyToMergeEnabled:!1,audioPrReadyToMergeVolume:1,audioPrMergedEnabled:!1,audioPrMergedVolume:1};function Ci(e){return gi.some(t=>t.id===e)}function wi(e){return e&&Ci(e)?e:_i}function Ti(e){if(e===`none`)return null;if(e!==`inherit`)return typeof e==`string`&&Ci(e)?e:void 0}function Ei(e){let t=Ti(e);return t===null?yi:t??`inherit`}function Di(e){return`${hi}/${wi(e)}`}var Oi=`mod+shift+x`,ki=[`mod`,`ctrl`,`meta`,`alt`,`shift`],Ai=new Set([`mod+w`,`mod+shift+w`,`ctrl+w`,`ctrl+shift+w`,`meta+w`,`meta+shift+w`]),ji=new Set([`control`,...ki]);function Mi(e){return Ai.has(e)}function Ni(e){if(typeof e!=`string`||e.length===0||e!==e.toLowerCase()||Mi(e))return null;let t=e.split(`+`);if(t.some(e=>e.length===0))return null;let n=t.at(-1);if(!n||!/^[a-z0-9][a-z0-9_-]*$/.test(n)||ji.has(n))return null;let r=t.slice(0,-1),i=new Set,a=-1;for(let e of r){let t=ki.indexOf(e);if(t<=a)return null;a=t,i.add(e)}return{modifiers:i,key:n}}var Pi=new Set([`control`,`meta`,`alt`,`shift`]),Fi={" ":`space`,"+":`plus`,"-":`minus`,"=":`equal`,",":`comma`,".":`period`,"/":`slash`,"\\":`backslash`,";":`semicolon`,"'":`quote`,"[":`bracketleft`,"]":`bracketright`,"`":`backquote`};function Ii(e){let t=Fi[e]??e.toLowerCase();return/^[a-z0-9][a-z0-9_-]*$/.test(t)?t:null}function Li(e=globalThis.navigator?.platform??``){return/mac|iphone|ipad|ipod/i.test(e)?`mac`:`other`}function Ri(e,t){if(e.key===`Escape`)return{status:`cancelled`};if(Pi.has(e.key.toLowerCase()))return{status:`pending`};let n=Ii(e.key);if(!n)return{status:`pending`};let r=new Set;(t===`mac`?e.metaKey:e.ctrlKey)&&r.add(`mod`),t===`mac`&&e.ctrlKey&&r.add(`ctrl`),t===`other`&&e.metaKey&&r.add(`meta`),e.altKey&&r.add(`alt`),e.shiftKey&&r.add(`shift`);let i=[...ki.filter(e=>r.has(e)),n].join(`+`);return Mi(i)?{status:`reserved`}:{status:`accepted`,shortcut:i}}function zi(e,t,n){let r=Ni(t),i=Ii(e.key);if(!r||!i||i!==r.key)return!1;let a=r.modifiers.has(`ctrl`)||n===`other`&&r.modifiers.has(`mod`),o=r.modifiers.has(`meta`)||n===`mac`&&r.modifiers.has(`mod`);return e.ctrlKey===a&&e.metaKey===o&&e.altKey===r.modifiers.has(`alt`)&&e.shiftKey===r.modifiers.has(`shift`)}function Bi(e){return{space:`Space`,arrowup:`↑`,arrowdown:`↓`,arrowleft:`←`,arrowright:`→`}[e]??e.toUpperCase()}function Vi(e,t){let n=Ni(e);return n?t===`mac`?`${[n.modifiers.has(`mod`)||n.modifiers.has(`meta`)?`⌘`:``,n.modifiers.has(`ctrl`)?`⌃`:``,n.modifiers.has(`alt`)?`⌥`:``,n.modifiers.has(`shift`)?`⇧`:``].join(``)}${Bi(n.key)}`:[n.modifiers.has(`mod`)||n.modifiers.has(`ctrl`)?`Ctrl`:``,n.modifiers.has(`meta`)?`Meta`:``,n.modifiers.has(`alt`)?`Alt`:``,n.modifiers.has(`shift`)?`Shift`:``,Bi(n.key)].filter(Boolean).join(`+`):e}var Hi=`.worktrees`;function Ui(e){return btoa(e).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}var Wi=be(`settings`,{state:()=>({global:{defaultModelByEngine:{"claude-code":`auto`,codex:`auto`},dangerouslySkipPermissions:!0,prPromptTemplate:``,reviewPromptTemplate:``,ciFixPromptTemplate:``,finalizationPrompt:``,notionInitialPromptTemplate:``,sentryInitialPromptTemplate:``,gitConventions:``,editorCommand:``,fileManagerCommand:``,terminalCommand:``,autoPurgeOnPrMerged:!1,autoLoopMaxRetries:5,browserNotifications:!0,audioNotifications:!0,audioQuestionNotifications:!1,audioWorkspaceCreatedNotifications:!1,audioAgentErrorNotifications:!1,audioNotificationSound:`hey.mp3`,audioQuestionSound:`inherit`,audioWorkspaceCreatedSound:`inherit`,audioAgentErrorSound:`inherit`,...Si,audioNotificationVolume:1,audioQuestionVolume:1,audioWorkspaceCreatedVolume:1,audioAgentErrorVolume:1,notionStatusProperty:``,notionInProgressStatus:``,notionAssigneeProperty:``,notionUserId:``,defaultPermissionModeByEngine:{"claude-code":`plan`,codex:`plan`},notionMcpKey:``,sentryMcpKey:``,bitbucketToken:``,bitbucketUsername:``,notionEnabled:!0,sentryEnabled:!0,showThinkingBlocks:!0,whipEnabled:!1,whipShortcut:Oi,whipVolume:1,tags:[],branchPrefixes:[],setupScript:``,cleanupScript:``,cleanupScriptMode:`no-tasks`,cleanupScriptOnlyOnChanges:!1,archiveScript:``,changeSourceBranchScript:``,worktreesPath:Hi,worktreesPrefixByProject:!1,voiceEnabled:!1,voicePttKey:`alt`,voiceLanguage:`auto`,voiceModel:null,voiceCommandPath:``,voiceFfmpegPath:``,voiceTemperature:0,voicePrompt:``,voiceTranslateToEnglish:!1,voiceSuppressNonSpeechTokens:!0,flattenWorkspaceList:!1,skillSuite:`superpowers`,customReviewTemplate:``,customAutoLoopReviewGate:``,customAutoLoopGroomingIntro:``,customQaPromptTemplate:``,customBrainstormingInstruction:``},voiceModels:[],voiceModelsLoading:!1,voiceModelsDir:``,voiceRuntime:null,activeMcpServers:[],projects:[],loading:!1,showVerboseSystemMessages:localStorage.getItem(`kobo:showVerboseSystemMessages`)===`true`}),getters:{getProjectByPath:e=>t=>e.projects.find(e=>e.path===t)??null,projectPaths:e=>e.projects.map(e=>e.path)},actions:{async fetchSettings(){this.loading=!0;try{let e=await fetch(`/api/settings`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this.global=t.global,this.projects=t.projects}catch(e){console.error(`[settings store] fetchSettings failed:`,e)}finally{this.loading=!1}},async fetchActiveMcpServers(){try{let e=await fetch(`/api/settings/mcp-servers`);if(!e.ok)throw Error(`HTTP ${e.status}`);this.activeMcpServers=await e.json()}catch(e){console.error(`[settings store] fetchActiveMcpServers failed:`,e),this.activeMcpServers=[]}},async fetchGlobalDefaults(){let e=await fetch(`/api/settings/defaults`);if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()},async updateGlobal(e){try{let t=await fetch(`/api/settings/global`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.global=n}catch(e){throw console.error(`[settings store] updateGlobal failed:`,e),e}},async upsertProject(e,t){try{let n=Ui(e),r=await fetch(`/api/settings/projects/${n}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json(),a=this.projects.findIndex(t=>t.path===e);a>=0?this.projects[a]=i:this.projects.push(i)}catch(e){throw console.error(`[settings store] upsertProject failed:`,e),e}},toggleVerboseSystemMessages(){this.setVerboseSystemMessages(!this.showVerboseSystemMessages)},setVerboseSystemMessages(e){this.showVerboseSystemMessages=e,localStorage.setItem(`kobo:showVerboseSystemMessages`,String(e))},async deleteProject(e){try{let t=Ui(e),n=await fetch(`/api/settings/projects/${t}`,{method:`DELETE`});if(!n.ok)throw Error(`HTTP ${n.status}`);this.projects=this.projects.filter(t=>t.path!==e)}catch(e){throw console.error(`[settings store] deleteProject failed:`,e),e}},async fetchVoiceModels(){this.voiceModelsLoading=!0;try{let e=await fetch(`/api/voice/models`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this.voiceModels=t.available,this.voiceModelsDir=t.modelsDir,this.global.voiceModel=t.activeModel}catch(e){console.error(`[settings store] fetchVoiceModels failed:`,e)}finally{this.voiceModelsLoading=!1}},async cancelVoiceModelDownload(e){let t=await fetch(`/api/voice/models/${encodeURIComponent(e)}/download`,{method:`DELETE`});if(!t.ok&&t.status!==404)throw Error(`HTTP ${t.status}`);await this.fetchVoiceModels()},async fetchVoiceRuntime(){try{let e=await fetch(`/api/voice/runtime`);if(!e.ok)throw Error(`HTTP ${e.status}`);this.voiceRuntime=await e.json()}catch(e){console.error(`[settings store] fetchVoiceRuntime failed:`,e)}},async downloadVoiceModel(e){let t=await fetch(`/api/voice/models/${encodeURIComponent(e)}/download`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);await this.fetchVoiceModels()},async deleteVoiceModel(e){let t=await fetch(`/api/voice/models/${encodeURIComponent(e)}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);await this.fetchVoiceModels()}}}),Gi=6e3,Ki=new Map,qi=[],Ji=!1;function Yi(e){let t=Ki.get(e);return t||(t=new Audio(Di(e)),Ki.set(e,t)),t}function Xi(e,t){let n=new Audio(Di(wi(e)));n.preload=`auto`,n.volume=t,n.play().catch(()=>{})}function Zi(){`Notification`in window&&Notification.permission==="default"&&Notification.requestPermission()}function Qi(e){return typeof e!=`number`||!Number.isFinite(e)?1:Math.max(0,Math.min(1,e))}function $i(){let e=qi.shift();if(!e){Ji=!1;return}Ji=!0;let t=Yi(wi(e.soundId));t.volume=e.volume,t.currentTime=0;let n=!1,r=()=>{n||(n=!0,t.removeEventListener(`ended`,r),t.removeEventListener(`error`,r),$i())};t.addEventListener(`ended`,r,{once:!0}),t.addEventListener(`error`,r,{once:!0}),t.play().catch(r)}function ea(e,t){let n={soundId:wi(e),volume:Qi(t)};if(document.visibilityState===`hidden`){Xi(n.soundId,n.volume);return}qi.push(n),Ji||$i()}function ta(e,t){let n=Yi(wi(e));n.volume=Qi(t),n.currentTime=0,n.play().catch(()=>{})}function na(e,t,n,r,i,a){let o=Wi();if(!document.hasFocus()&&o.global.browserNotifications&&`Notification`in window&&Notification.permission===`granted`){let r=new Notification(e,{body:t,icon:`/favicon.ico`});n&&(r.onclick=()=>{window.focus(),window.location.hash=`#/workspace/${n}`,r.close()})}(a??o.global.audioNotifications)&&r!==null&&ea(r&&r.length>0?r:o.global.audioNotificationSound??`hey.mp3`,i??o.global.audioNotificationVolume)}var ra=be(`devServer`,{state:()=>({statuses:{},logs:{}}),getters:{getStatus:e=>t=>e.statuses[t]??null},actions:{async fetchStatus(e){try{let t=await fetch(`/api/dev-server/${e}/status`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.statuses[e]=n}catch(e){console.error(`[dev-server store] fetchStatus failed:`,e)}},async startDevServer(e){try{let t=await fetch(`/api/dev-server/${e}/start`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.statuses[e]=n}catch(e){throw console.error(`[dev-server store] startDevServer failed:`,e),e}},async stopDevServer(e){try{let t=await fetch(`/api/dev-server/${e}/stop`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.statuses[e]=n}catch(e){throw console.error(`[dev-server store] stopDevServer failed:`,e),e}},async fetchLogs(e,t=200){try{let n=await fetch(`/api/dev-server/${e}/logs?tail=${t}`);if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json();return this.logs[e]=r.logs,r.logs}catch(e){return console.error(`[dev-server store] fetchLogs failed:`,e),``}},updateFromWsEvent(e,t){this.statuses[e]=t}}});function ia(e){return e.state===`OPEN`&&e.reviewDecision===`CHANGES_REQUESTED`&&e.reviewers.some(e=>e.state===`CHANGES_REQUESTED`)}function aa(e){return e.state===`OPEN`&&e.ci.rollup===`FAILURE`}function oa(e){return e?aa(e)||ia(e):!1}var sa=[`executing`,`extracting`,`brainstorming`];function ca(e){return!!e&&sa.includes(e)}var la=class extends Error{constructor(e,t){super(e),Vn(this,`code`,void 0),this.name=`WorkspaceActionError`,this.code=t}};function ua(e){return e===`running`?`in_progress`:e}var da=5e3,fa=500,pa=null,ma=0,ha=0,ga=new Map,_a=new Map,va=new Map;function ya(e){_a.set(e,(_a.get(e)??0)+1)}function ba(e,t,n){let r={...e},i=new Set([...Object.keys(e),...Object.keys(t)]);for(let a of i){let i=t[a],o=e[a],s=(_a.get(a)??0)!==(n.get(a)??0),c=i?Date.parse(i.updatedAt):NaN,l=o?Date.parse(o.updatedAt):NaN;(s||Number.isFinite(c)&&c>l)&&(i?r[a]=i:delete r[a])}return r}function xa(e){return e===`claude-code`?`claude-code`:null}var q=be(`workspace`,{state:()=>({workspaces:[],selectedWorkspaceId:null,tasks:[],activityFeeds:{},activityFeedIds:{},activityCounts:{},subagents:{},agentTodos:{},sessions:[],selectedSessionId:null,archivedWorkspaces:[],archivedLoaded:!1,loading:!1,loadingOlderEvents:!1,hasMoreEvents:{},providerUsage:{},chatDraft:``,queuedMessages:{},activeAgentSessionIds:{},gitRefreshTrigger:0,gitStatsCache:{},pendingWakeups:{},pendingQuotaBackoffs:{},pendingDeferred:{},pendingQueue:{},prSnapshots:{},autoLoopStates:{},crons:{}}),getters:{selectedWorkspace:e=>e.workspaces.find(t=>t.id===e.selectedWorkspaceId)??e.archivedWorkspaces.find(t=>t.id===e.selectedWorkspaceId)??null,needsAttention(e){return e.workspaces.filter(t=>[`error`,`quota`,`awaiting-user`].includes(t.status)||oa(e.prSnapshots[t.id])||!ca(t.status)&&!!e.prSnapshots[t.id]?.readyToMerge)},running(e){return e.workspaces.filter(t=>ca(t.status)&&!oa(e.prSnapshots[t.id]))},idle(e){return e.workspaces.filter(t=>[`completed`,`idle`,`created`].includes(t.status)&&!oa(e.prSnapshots[t.id])&&!e.prSnapshots[t.id]?.readyToMerge)},favorites(e){return e.workspaces.filter(e=>e.favoritedAt!==null)},currentAgentTodos:e=>e.selectedWorkspaceId?e.agentTodos[e.selectedWorkspaceId]??[]:[],currentSubagents:e=>{if(!e.selectedWorkspaceId)return[];let t=e.subagents[e.selectedWorkspaceId]??{};return Object.values(t).sort((e,t)=>e.startedAt.localeCompare(t.startedAt))},activityFeed:e=>{if(!e.selectedWorkspaceId)return[];let t=e.activityFeeds[e.selectedWorkspaceId]??[];if(!e.selectedSessionId)return e.sessions.length===0?t:[];let n=e.sessions.find(t=>t.id===e.selectedSessionId)?.engineSessionId??null,r=e.sessions.length>0?e.sessions[e.sessions.length-1].id:null,i=e.selectedSessionId===r;return t.filter(t=>t.sessionId?t.sessionId===e.selectedSessionId||n!==null&&t.sessionId===n:i)},acceptanceCriteria:e=>e.tasks.filter(e=>e.isAcceptanceCriterion),archived:e=>e.archivedWorkspaces,currentProviderUsage(e){let t=e.workspaces.find(t=>t.id===e.selectedWorkspaceId);if(!t)return null;let n=xa(t.engine);return n?e.providerUsage[n]??null:null}},actions:{clearWorkspaceLocalState(e){delete this.activityFeeds[e],delete this.activityFeedIds[e],delete this.activityCounts[e],delete this.subagents[e],delete this.agentTodos[e],delete this.hasMoreEvents[e],delete this.gitStatsCache[e],delete this.pendingWakeups[e],delete this.pendingQuotaBackoffs[e],delete this.pendingDeferred[e],delete this.pendingQueue[e],delete this.prSnapshots[e],delete this.autoLoopStates[e],delete this.crons[e],delete this.activeAgentSessionIds[e];for(let t of Object.keys(this.queuedMessages))t.startsWith(`${e}:`)&&delete this.queuedMessages[t];ga.delete(e),_a.delete(e),va.delete(e),mi().clear(e),localStorage.removeItem(`kobo:session:${e}`)},async toggleFavorite(e){let t=this.workspaces.find(t=>t.id===e);if(!t)return;let n=t.favoritedAt,r=n===null,i=r?new Date().toISOString():null;this.workspaces=this.workspaces.map(t=>t.id===e?{...t,favoritedAt:i}:t);try{let t=await fetch(`/api/workspaces/${e}/favorite`,{method:r?`POST`:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t)}catch(t){throw this.workspaces=this.workspaces.map(t=>t.id===e?{...t,favoritedAt:n}:t),t}},async togglePrWatch(e){let t=this.workspaces.find(t=>t.id===e);if(!t)return;let n=t.prWatchDisabledAt===null,r=n?new Date().toISOString():null;this.workspaces=this.workspaces.map(t=>t.id===e?{...t,prWatchDisabledAt:r}:t);try{let t=await fetch(`/api/workspaces/${e}/pr-watch-disabled`,{method:n?`POST`:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);if(n){let n=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t),delete this.prSnapshots[e],ya(e)}else{let{workspace:n,prSnapshot:r}=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t),r?this.prSnapshots[e]=r:delete this.prSnapshots[e],ya(e)}}catch(n){throw this.workspaces=this.workspaces.map(n=>n.id===e?{...n,prWatchDisabledAt:t.prWatchDisabledAt}:n),n}},async setWorkspaceTags(e,t){let n=this.workspaces.find(t=>t.id===e);if(!n)return;let r=n.tags,i=[...t];this.workspaces=this.workspaces.map(t=>t.id===e?{...t,tags:i}:t);try{let n=await fetch(`/api/workspaces/${e}/tags`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tags:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json();this.workspaces=this.workspaces.map(t=>t.id===e?r:t)}catch(t){throw this.workspaces=this.workspaces.map(t=>t.id===e?{...t,tags:r}:t),t}},async fetchOrphanWorktrees(e){let t=`/api/git/orphan-worktrees?projectPath=${encodeURIComponent(e)}`,n=await fetch(t,{cache:`no-store`});if(!n.ok)throw Error(`HTTP ${n.status}`);return n.json()},async fetchWorkspaces(){this.loading=!0;try{let e=await fetch(`/api/workspaces`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this.workspaces=t.workspaces??t;for(let e of this.workspaces)[`completed`,`idle`,`error`,`quota`].includes(e.status)&&this.finalizeRunningSubagents(e.id)}catch(e){console.error(`[workspace store] fetchWorkspaces failed:`,e)}finally{this.loading=!1}},async fetchArchivedWorkspaces(){try{let e=await fetch(`/api/workspaces/archived`);if(!e.ok)throw Error(`HTTP ${e.status}`);this.archivedWorkspaces=await e.json(),this.archivedLoaded=!0}catch(e){console.error(`[workspace store] fetchArchivedWorkspaces failed:`,e)}},async fetchWorkspaceDetails(e){try{let t=await fetch(`/api/workspaces/${e}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();if(this.selectedWorkspaceId!==e)return;let r=n.workspace??n,i=this.workspaces.findIndex(t=>t.id===e);if(i>=0)this.workspaces[i]={...this.workspaces[i],...r};else{let t=this.archivedWorkspaces.findIndex(t=>t.id===e);t>=0?this.archivedWorkspaces[t]={...this.archivedWorkspaces[t],...r}:r?.archivedAt&&this.archivedWorkspaces.unshift(r)}n.tasks&&(this.tasks=n.tasks)}catch(e){console.error(`[workspace store] fetchWorkspaceDetails failed:`,e)}},async createWorkspace(e){try{let t=await fetch(`/api/workspaces`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(typeof e.error==`string`?e.error:`HTTP ${t.status}`)}let n=t.headers.get(`X-Kobo-Branch-Adjusted`)===`1`,r=t.headers.get(`X-Kobo-Source-Fallback`)===`local`,i=await t.json(),a=i.workspace??i,o=this.workspaces.findIndex(e=>e.id===a.id);return o>=0?this.workspaces[o]=a:this.workspaces.push(a),e.autoLoop&&this.fetchAutoLoopStates(),a._branchAdjusted=n,a._sourceFallback=r,a}catch(e){throw console.error(`[workspace store] createWorkspace failed:`,e),e}},async startWorkspace(e,t,n,r){try{let i=await fetch(`/api/workspaces/${e}/start`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:t,agentSessionId:n,resume:r})});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??`HTTP ${i.status}`)}await this.fetchWorkspaces()}catch(e){throw console.error(`[workspace store] startWorkspace failed:`,e),e}},async previewEngineHandoff(e,t){let n=await fetch(`/api/workspaces/${e}/engine-handoff-preview`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({engine:t})}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);return r.handoff},async switchEngine(e,t){let n=await fetch(`/api/workspaces/${e}/switch-engine`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);let i=r.workspace,a=this.workspaces.findIndex(t=>t.id===e);return a>=0&&(this.workspaces[a]=i),await this.fetchSessions(e,r.sessionId),{sessionId:r.sessionId}},async stopWorkspace(e){try{let t=await fetch(`/api/workspaces/${e}/stop`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);await this.fetchWorkspaces()}catch(e){throw console.error(`[workspace store] stopWorkspace failed:`,e),e}},async interruptAgent(e,t={}){try{let n=await fetch(`/api/workspaces/${e}/interrupt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>void 0),t=typeof e==`object`&&e&&!Array.isArray(e)?e:void 0,r=typeof t?.error==`string`?t.error:`HTTP ${n.status}`,i=t?.code;throw new la(r,n.status===409&&(i===`no_agent_running`||i===`session_not_active`)||n.status===500&&i===`interrupt_failed`?i:void 0)}}catch(e){throw console.error(`[workspace store] interruptAgent failed:`,e),e}},async deleteWorkspace(e,t){try{let n=await fetch(`/api/workspaces/${e}`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t??{})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=[];if(n.status===200){let e=await n.json().catch(()=>({}));r=Array.isArray(e.warnings)?e.warnings:[]}return this.workspaces=this.workspaces.filter(t=>t.id!==e),this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e),this.clearWorkspaceLocalState(e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]),{warnings:r}}catch(e){throw console.error(`[workspace store] deleteWorkspace failed:`,e),e}},async deleteAllArchived(e){try{let t=this.archivedWorkspaces.map(e=>e.id),n=await fetch(`/api/workspaces/archived`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e??{})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json().catch(()=>({})),i=typeof r.deleted==`number`?r.deleted:0,a=Array.isArray(r.warnings)?r.warnings:[];this.archivedWorkspaces=[];for(let e of t)this.clearWorkspaceLocalState(e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]);return{deleted:i,warnings:a,ids:t}}catch(e){throw console.error(`[workspace store] deleteAllArchived failed:`,e),e}},async updateModel(e,t){try{let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateModel failed:`,e),e}},async updateWorkspaceDescription(e,t){let n=this.workspaces.findIndex(t=>t.id===e);if(n<0)throw Error(`Workspace '${e}' not found in store`);let r=this.workspaces[n].description;this.workspaces[n]={...this.workspaces[n],description:t};try{let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({description:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json();this.workspaces=this.workspaces.map(t=>t.id===e?{...t,...r}:t)}catch(n){let i=this.workspaces.findIndex(t=>t.id===e);throw i>=0&&this.workspaces[i].description===t&&(this.workspaces[i]={...this.workspaces[i],description:r}),n}},async updateReasoningEffort(e,t){try{let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({reasoningEffort:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateReasoningEffort failed:`,e),e}},async renameWorkspaceBranch(e,t){let n=await fetch(`/api/workspaces/${e}/rename-branch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newName:t})}),r=await n.json().catch(()=>null);if(!n.ok)throw new la(r?.error??`Rename failed`,r?.code);let i=r,a=this.workspaces.findIndex(t=>t.id===e);return a>=0&&(this.workspaces[a]=i),i},async resyncWorkspaceBranch(e){let t=await fetch(`/api/workspaces/${e}/resync-branch`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();if(n.changed){let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]={...this.workspaces[t],workingBranch:n.workingBranch})}return n},async updateAgentPermissionMode(e,t){try{let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({agentPermissionMode:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateAgentPermissionMode failed:`,e),e}},async pushBranch(e,t={}){let n=await fetch(`/api/workspaces/${e}/push`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({force:t.force===!0})});if(!n.ok){let e=await n.json().catch(()=>({error:`Push failed`}));throw new la(e.error??`Push failed`,e.code)}},async fetchGitStats(e,t={}){let n=`/api/workspaces/${e}/git-stats${t.freshFetch?`?freshFetch=1`:``}`,r=await fetch(n,{signal:t.signal});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json();return this.gitStatsCache[e]=i,i},async fetchBranchDivergence(e,t={}){let n=`/api/workspaces/${e}/branch-divergence?limit=${t.limit??50}`,r=await fetch(n,{signal:t.signal});if(!r.ok)throw Error(`HTTP ${r.status}`);return await r.json()},async openPullRequest(e){let t=await fetch(`/api/workspaces/${e}/open-pr`,{method:`POST`}),n=await t.json().catch(()=>null);if(!t.ok)throw new la(n?.error??`Open PR failed`,n?.code);return n},async archiveWorkspace(e){try{let t=await fetch(`/api/workspaces/${e}/archive`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();return this.workspaces=this.workspaces.filter(t=>t.id!==e),this.archivedLoaded&&this.archivedWorkspaces.unshift(n),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]),n}catch(e){throw console.error(`[workspace store] archiveWorkspace failed:`,e),e}},async unarchiveWorkspace(e){try{let t=await fetch(`/api/workspaces/${e}/unarchive`,{method:`POST`});if(!t.ok){if(t.status===409){let e=await t.json().catch(()=>({})),n=Error(e.error??`worktree-purged`);throw n.code=`worktree-purged`,n}throw Error(`HTTP ${t.status}`)}let n=await t.json();return this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e),this.workspaces.unshift(n),n}catch(e){throw console.error(`[workspace store] unarchiveWorkspace failed:`,e),e}},async createTask(e,t,n){try{let r=await fetch(`/api/workspaces/${e}/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t,isAcceptanceCriterion:n})});if(!r.ok)throw Error(`HTTP ${r.status}`);await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] createTask failed:`,e),e}},async updateTaskTitle(e,t,n){try{let r=await fetch(`/api/workspaces/${e}/tasks/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:n})});if(!r.ok)throw Error(`HTTP ${r.status}`);await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] updateTaskTitle failed:`,e),e}},async deleteTask(e,t){try{let n=await fetch(`/api/workspaces/${e}/tasks/${t}`,{method:`DELETE`});if(!n.ok)throw Error(`HTTP ${n.status}`);await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] deleteTask failed:`,e),e}},selectWorkspace(e){this.selectedWorkspaceId=e,this.selectedSessionId=null,this.sessions=[],this.tasks=[],this.markRead(e),this.fetchWorkspaceDetails(e),this.fetchSessions(e),this.fetchPendingQuotaBackoff(e),this.fetchGitStats(e).catch(()=>{}),this.activityFeeds[e]?.length||Pa().subscribe(e)},async fetchSessions(e,t){let n=(va.get(e)??0)+1;va.set(e,n);try{let r=await fetch(`/api/workspaces/${e}/sessions`);if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json();if(this.selectedWorkspaceId!==e||va.get(e)!==n)return;if(this.sessions=i,t&&this.sessions.some(e=>e.id===t)){this.selectSession(t);return}let a=this.selectedSessionId&&this.sessions.some(e=>e.id===this.selectedSessionId);if(this.sessions.length>0&&!a){let t=localStorage.getItem(`kobo:session:${e}`),n=t?this.sessions.find(e=>e.id===t):null;this.selectSession(n?n.id:this.sessions[0].id)}}catch(e){console.error(`[workspace store] fetchSessions failed:`,e)}},async fetchOlderEvents(e){if(this.loadingOlderEvents||this.hasMoreEvents[e]===!1)return!1;let t=this.activityFeeds[e];if(!t?.length)return!1;let n=t[0].id;this.loadingOlderEvents=!0;try{let t=await fetch(`/api/workspaces/${e}/events?before=${encodeURIComponent(n)}&limit=100`);if(!t.ok)throw Error(`HTTP ${t.status}`);let r=await t.json();if(this.hasMoreEvents[e]=r.hasMore,r.events.length>0){let e=Pa();for(let t of r.events)e._routeMessage(t)}return r.events.length>0}catch(e){return console.error(`[workspace store] fetchOlderEvents failed:`,e),!1}finally{this.loadingOlderEvents=!1}},selectSession(e){this.selectedSessionId=e,this.selectedWorkspaceId&&localStorage.setItem(`kobo:session:${this.selectedWorkspaceId}`,e)},async createSession(e){try{let t=await fetch(`/api/workspaces/${e}/sessions`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let n=await t.json();return this.sessions.unshift(n),this.selectSession(n.id),n}catch(e){throw console.error(`[workspace store] createSession failed:`,e),e}},async renameWorkspace(e,t){let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]={...this.workspaces[i],...r});let a=this.archivedWorkspaces.findIndex(t=>t.id===e);a>=0&&(this.archivedWorkspaces[a]={...this.archivedWorkspaces[a],...r})},async renameSession(e,t,n){let r=await fetch(`/api/workspaces/${e}/sessions/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:n})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}let i=await r.json().catch(()=>null),a=this.sessions.find(e=>e.id===t);a&&(a.name=i?.name??n)},async deleteSession(e,t){let n=await fetch(`/api/workspaces/${e}/sessions/${t}`,{method:`DELETE`}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);let i=this.selectedSessionId===t,a=r.workspace;if(a){let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]=a)}await this.fetchSessions(e),i&&this.selectedWorkspaceId===e&&this.selectSession(this.sessions[0]?.id??null)},addActivityItem(e,t){if(this.activityFeeds[e]||(this.activityFeeds[e]=[]),this.activityFeedIds[e]||(this.activityFeedIds[e]=new Set),this.activityCounts[e]||(this.activityCounts[e]={toolUses:0,agentMessages:0,userMessages:0,errors:0}),t.meta?.sender!==`user`&&t.meta?.sender!==`system-prompt`)for(let t of this.activityFeeds[e])t.meta?.pending&&(t.meta.pending=!1);if(!this.activityFeedIds[e].has(t.id)){this.activityFeedIds[e].add(t.id),this.activityFeeds[e].push(t);let n=this.activityCounts[e];t.type===`tool_use`?n.toolUses++:t.type===`error`&&n.errors++,t.meta?.sender===`user`?n.userMessages++:t.type===`text`&&t.meta?.sender!==`system-prompt`&&n.agentMessages++}let n=this.activityFeeds[e];if(n.length>da){let t=n.splice(0,n.length-da),r=this.activityFeedIds[e];for(let e of t)r.delete(e.id)}},removeActivityItem(e,t){let n=this.activityFeeds[e],r=this.activityFeedIds[e];if(!n||!r)return;let i=n.findIndex(e=>e.id===t);if(i<0)return;let[a]=n.splice(i,1);r.delete(t);let o=this.activityCounts[e];o&&a&&(a.type===`tool_use`?o.toolUses=Math.max(0,o.toolUses-1):a.type===`error`&&(o.errors=Math.max(0,o.errors-1)),a.meta?.sender===`user`?o.userMessages=Math.max(0,o.userMessages-1):a.type===`text`&&a.meta?.sender!==`system-prompt`&&(o.agentMessages=Math.max(0,o.agentMessages-1)))},clearActivityFeed(e){e?(delete this.activityFeeds[e],delete this.activityFeedIds[e],delete this.activityCounts[e]):(this.activityFeeds={},this.activityFeedIds={},this.activityCounts={})},applyUsageSnapshot(e){this.providerUsage[e.providerId]=e.snapshot},async requestUsageRefresh(e){try{await fetch(`/api/usage/${e}/refresh`,{method:`POST`})}catch(e){console.error(`[workspace store] requestUsageRefresh failed:`,e)}},triggerGitRefresh(){this.gitRefreshTrigger++,this.schedulePrSnapshotsRefresh()},schedulePrSnapshotsRefresh(){pa!==null&&clearTimeout(pa),pa=setTimeout(()=>{pa=null,this.fetchPrSnapshots()},fa)},async fetchPrSnapshots(){let e=++ha,t=new Map(_a);try{let n=await fetch(`/api/workspaces/pr-states`,{cache:`no-store`});if(!n.ok)return;let r=await n.json();if(e!==ha)return;this.prSnapshots=ba(r,this.prSnapshots,t)}catch(e){console.error(`[workspace-store] fetchPrSnapshots failed:`,e)}},async fetchWorkspacesInfo(){let e=++ma,t=new Map(ga),n=new Map(_a);try{let r=await fetch(`/api/workspaces/info`,{cache:`no-store`});if(!r.ok)return;let i=await r.json();if(e!==ma)return;let a=new Map(this.workspaces.map(e=>[e.id,e]));this.workspaces=i.workspaces.map(e=>{let n=a.get(e.id),r=(ga.get(e.id)??0)!==(t.get(e.id)??0);return n&&r?{...e,...n}:e});for(let e of this.workspaces)[`completed`,`idle`,`error`,`quota`].includes(e.status)&&this.finalizeRunningSubagents(e.id);this.prSnapshots=ba(i.prSnapshots,this.prSnapshots,n);let o={...this.gitStatsCache};for(let[e,t]of Object.entries(i.gitStats)){let n=o[e];(!n||(t.computedAt??0)>=(n.computedAt??0))&&(o[e]=t)}this.gitStatsCache=o}catch(e){console.error(`[workspace-store] fetchWorkspacesInfo failed:`,e)}},async refreshPrSnapshot(e){try{let t=await fetch(`/api/workspaces/pr-snapshot/refresh/${e}`,{method:`POST`});if(t.status===404){let t={...this.prSnapshots};return delete t[e],this.prSnapshots=t,ya(e),null}if(!t.ok)return console.error(`[workspace-store] refreshPrSnapshot non-OK:`,t.status),null;let n=await t.json();return this.prSnapshots={...this.prSnapshots,[e]:n.snapshot},ya(e),n.snapshot}catch(e){return console.error(`[workspace-store] refreshPrSnapshot failed:`,e),null}},async fetchAutoLoopStates(){try{let e=await fetch(`/api/workspaces/auto-loop-states`,{cache:`no-store`});if(!e.ok)return;let t=await e.json();this.autoLoopStates=t}catch(e){console.error(`[workspace-store] fetchAutoLoopStates failed:`,e)}},async enableAutoLoop(e){let t=this.workspaces.find(t=>t.id===e);if(t&&t.agentPermissionMode===`plan`)try{await this.updateAgentPermissionMode(e,`bypass`)}catch{}let n=await fetch(`/api/workspaces/${e}/auto-loop`,{method:`POST`});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}await this.fetchAutoLoopStates()},async disableAutoLoop(e){let t=await fetch(`/api/workspaces/${e}/auto-loop`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}await this.fetchAutoLoopStates()},async forceAutoLoopReady(e){let t=await fetch(`/api/workspaces/${e}/auto-loop-ready`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);await this.fetchAutoLoopStates()},setAutoLoopState(e,t){this.autoLoopStates[e]=t},clearAutoLoopState(e){delete this.autoLoopStates[e]},async fetchCrons(e){try{let t=await fetch(`/api/workspaces/${e}/crons`);if(!t.ok)return;let n=await t.json();this.crons[e]=n.crons}catch(e){console.error(`[workspace-store] fetchCrons failed:`,e)}},async cancelCron(e,t){let n=this.crons[e]??[];this.crons[e]=n.filter(e=>e.id!==t);try{let n=await fetch(`/api/workspaces/${e}/crons/${t}`,{method:`DELETE`});if(!n.ok)throw Error(`HTTP ${n.status}`)}catch(t){throw this.crons[e]=n,t}},async createCron(e,t){let n=await fetch(`/api/workspaces/${e}/crons`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}await this.fetchCrons(e)},async scheduleManualWakeup(e,t){let n=await fetch(`/api/workspaces/${e}/pending-wakeup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json();r.pending&&(this.pendingWakeups[e]=r.pending)},async fetchPendingWakeup(e){try{let t=await fetch(`/api/workspaces/${e}/pending-wakeup`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();n?this.pendingWakeups[e]=n:delete this.pendingWakeups[e]}catch(e){console.error(`[workspace-store] fetchPendingWakeup failed:`,e)}},setPendingWakeup(e,t){this.pendingWakeups[e]=t},clearPendingWakeup(e){delete this.pendingWakeups[e]},async cancelPendingWakeup(e){let t=this.pendingWakeups[e]!==void 0;delete this.pendingWakeups[e];try{let t=await fetch(`/api/workspaces/${e}/pending-wakeup`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`)}catch(n){console.error(`[workspace-store] cancelPendingWakeup failed:`,n),t&&await this.fetchPendingWakeup(e)}},async fetchPendingQuotaBackoff(e){try{let t=await fetch(`/api/workspaces/${e}/quota-backoff`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();n?this.pendingQuotaBackoffs[e]=n:delete this.pendingQuotaBackoffs[e]}catch(e){console.error(`[workspace-store] fetchPendingQuotaBackoff failed:`,e)}},setPendingQuotaBackoff(e,t){this.pendingQuotaBackoffs[e]=t},clearPendingQuotaBackoff(e){delete this.pendingQuotaBackoffs[e]},async cancelQuotaBackoff(e){let t=this.pendingQuotaBackoffs[e]!==void 0;delete this.pendingQuotaBackoffs[e];try{let t=await fetch(`/api/workspaces/${e}/quota-backoff`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`)}catch(n){console.error(`[workspace-store] cancelQuotaBackoff failed:`,n),t&&await this.fetchPendingQuotaBackoff(e)}},enqueuePending(e,t){let n=this.pendingQueue[e]??[];n.some(e=>e.toolCallId===t.toolCallId)||(n.push(t),this.pendingQueue[e]=n,t.kind===`question`&&(this.pendingDeferred[e]={toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,agentSessionId:t.agentSessionId}))},peekPending(e){return this.pendingQueue[e]?.[0]},dequeuePending(e){let t=this.pendingQueue[e];if(!t||t.length===0)return;let n=t.shift();t.length===0&&delete this.pendingQueue[e];let r=this.pendingQueue[e]?.[0];return r&&r.kind===`question`?this.pendingDeferred[e]={toolCallId:r.toolCallId,toolName:r.toolName,input:r.input,agentSessionId:r.agentSessionId}:delete this.pendingDeferred[e],n},clearPendingForSession(e,t){if(t===null)return;let n=this.pendingQueue[e];if(!n)return;let r=n.filter(e=>e.agentSessionId!==t);r.length===0?delete this.pendingQueue[e]:this.pendingQueue[e]=r;let i=this.pendingDeferred[e];i&&i.agentSessionId===t&&delete this.pendingDeferred[e]},clearAllPending(e){delete this.pendingQueue[e],delete this.pendingDeferred[e]},setPendingDeferred(e,t){this.enqueuePending(e,{kind:`question`,agentSessionId:t.agentSessionId,toolCallId:t.toolCallId,toolName:t.toolName,input:t.input})},clearPendingDeferred(e,t=null){if(t===null){this.clearAllPending(e);return}this.clearPendingForSession(e,t)},getPendingDeferred(e){let t=this.peekPending(e);if(t?.kind===`question`)return{toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,agentSessionId:t.agentSessionId}},async submitDeferredAnswer(e,t,n,r,i){let a=await fetch(`/api/workspaces/${e}/deferred-tool-use/answer`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answers:t,toolCallId:n,awaitingFreeForm:r,response:i})});if(!a.ok){let t=(await a.json().catch(()=>({}))).error??`HTTP ${a.status}`;if(/no deferred tool use pending|no agent running|no active engine process|no pending callback/i.test(t)){console.warn(`[workspace] submitDeferredAnswer: deferred callback expired — clearing zombie panel locally`),this.dequeuePending(e),this.fetchWorkspaces();return}throw Error(t)}this.dequeuePending(e),this.fetchWorkspaces()},async cancelDeferredAnswer(e,t,n){let r=await fetch(`/api/workspaces/${e}/deferred-tool-use/cancel`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reason:t,toolCallId:n})});if(!r.ok){let t=(await r.json().catch(()=>({}))).error??`HTTP ${r.status}`;if(/no deferred tool use pending/i.test(t)){console.warn(`[workspace] cancelDeferredAnswer: backend has no pending — clearing zombie panel locally`),this.dequeuePending(e),this.fetchWorkspaces();return}throw Error(t)}this.dequeuePending(e),this.fetchWorkspaces()},async submitDeferredPermission(e,t,n,r,i=`once`){let a=await fetch(`/api/workspaces/${e}/deferred-permission/decision`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({toolCallId:t,decision:n,reason:r,scope:i})});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error??`HTTP ${a.status}`)}this.dequeuePending(e),this.fetchWorkspaces()},updateAgentTodos(e,t){this.agentTodos[e]=t},agentTaskCreate(e,t,n){let r=this.agentTodos[e]?[...this.agentTodos[e]]:[];r.some(e=>e.id===t)||(r.push({id:t,content:n.subject||n.description||``,status:`pending`,activeForm:n.activeForm}),this.agentTodos[e]=r)},agentTaskSetNumber(e,t,n){let r=this.agentTodos[e];r&&(this.agentTodos[e]=r.map(e=>e.id===t?{...e,taskNumber:n}:e))},agentTaskUpdate(e,t,n){let r=this.agentTodos[e];if(r){if(n.status===`deleted`){this.agentTodos[e]=r.filter(e=>e.taskNumber!==t);return}this.agentTodos[e]=r.map(e=>e.taskNumber===t?{...e,status:n.status?ua(n.status):e.status,content:n.content??e.content,activeForm:n.activeForm??e.activeForm}:e)}},finalizeRunningSubagents(e){let t=this.subagents[e];if(!t)return;let n=new Date().toISOString();for(let e of Object.keys(t)){let r=t[e];r.status===`running`&&(t[e]={...r,status:`done`,updatedAt:n})}},upsertSubagent(e,t){this.subagents[e]||(this.subagents[e]={});let n=this.subagents[e][t.toolUseId],r=new Date().toISOString(),i=n?.status===`done`?`done`:t.status??n?.status??`running`;this.subagents[e][t.toolUseId]={toolUseId:t.toolUseId,description:t.description??n?.description??``,taskType:t.taskType??n?.taskType,status:i,lastToolName:t.lastToolName??n?.lastToolName,lastDescription:t.lastDescription??n?.lastDescription,totalTokens:t.totalTokens??n?.totalTokens,toolUses:t.toolUses??n?.toolUses,durationMs:t.durationMs??n?.durationMs,startedAt:n?.startedAt??r,updatedAt:r}},async markRead(e){try{let t=await fetch(`/api/workspaces/${e}/mark-read`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=this.workspaces.findIndex(t=>t.id===e);n>=0&&(this.workspaces[n]={...this.workspaces[n],hasUnread:!1})}catch(e){console.error(`[workspace store] markRead failed:`,e)}},async purgeWorktree(e){try{let t=await fetch(`/api/workspaces/${e}/purge-worktree`,{method:`POST`}),n=await t.json();if(!t.ok)return{ok:!1,error:n.error??`HTTP ${t.status}`};let r=n.workspace;return r&&(this.updateWorkspaceFromEvent(e,{archivedAt:r.archivedAt,worktreePurgedAt:r.worktreePurgedAt,worktreePurgeRestoreData:r.worktreePurgeRestoreData}),r.archivedAt&&this.archivedLoaded&&(this.archivedWorkspaces.some(t=>t.id===e)||this.archivedWorkspaces.unshift(r),this.workspaces=this.workspaces.filter(t=>t.id!==e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]))),{ok:!0,warnings:n.warnings??[]}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}},async dismissPrAttention(e,t){let n=this.prSnapshots[e];if(n)try{let r=await fetch(`/api/workspaces/${e}/dismiss-pr-attention`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t,prUpdatedAt:n.updatedAt})});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=t===`changes-requested`?{prChangesDismissedAt:n.updatedAt}:{prCiFailureDismissedAt:n.updatedAt};this.updateWorkspaceFromEvent(e,i)}catch(e){console.error(`[workspace store] dismissPrAttention failed:`,e)}},async restorePrAttention(e,t){try{let n=await fetch(`/api/workspaces/${e}/restore-pr-attention`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=t===`changes-requested`?{prChangesDismissedAt:null}:{prCiFailureDismissedAt:null};this.updateWorkspaceFromEvent(e,r)}catch(e){console.error(`[workspace store] restorePrAttention failed:`,e)}},queuedMessageKey(e,t){return`${e}:${t}`},getQueuedMessage(e,t){return t?this.queuedMessages[this.queuedMessageKey(e,t)]:void 0},queueMessage(e,t,n){this.queuedMessages[this.queuedMessageKey(e,n)]={content:t,sessionId:n}},cancelQueuedMessage(e,t){t&&delete this.queuedMessages[this.queuedMessageKey(e,t)]},flushQueuedMessage(e,t){let n=this.getQueuedMessage(e,t);n&&(this.cancelQueuedMessage(e,t),Pa().sendChatMessage(e,n.content,t))},setActiveAgentSession(e,t){this.activeAgentSessionIds[e]=t},clearActiveAgentSession(e,t){this.activeAgentSessionIds[e]===t&&delete this.activeAgentSessionIds[e]},clearActiveAgentSessionOwner(e){delete this.activeAgentSessionIds[e]},updateWorkspaceFromEvent(e,t){ga.set(e,(ga.get(e)??0)+1);let n=this.workspaces.findIndex(t=>t.id===e);if(n>=0&&(this.workspaces[n]={...this.workspaces[n],...t}),t.status&&[`completed`,`idle`,`error`,`quota`].includes(t.status)){let t=this.activityFeeds[e];if(t)for(let e of t)e.meta?.pending&&(e.meta.pending=!1);let n=this.subagents[e];if(n)for(let[e,t]of Object.entries(n))t.status===`running`&&(n[e]={...t,status:`done`})}}}}),J=fi.global.t,Sa={"pr:ci-failed":{soundKey:`audioPrCiFailedSound`,enabledKey:`audioPrCiFailedEnabled`,volumeKey:`audioPrCiFailedVolume`},"pr:ci-recovered":{soundKey:`audioPrCiRecoveredSound`,enabledKey:`audioPrCiRecoveredEnabled`,volumeKey:`audioPrCiRecoveredVolume`},"pr:changes-requested":{soundKey:`audioPrChangesRequestedSound`,enabledKey:`audioPrChangesRequestedEnabled`,volumeKey:`audioPrChangesRequestedVolume`},"pr:approved":{soundKey:`audioPrApprovedSound`,enabledKey:`audioPrApprovedEnabled`,volumeKey:`audioPrApprovedVolume`},"pr:merge-conflict":{soundKey:`audioPrMergeConflictSound`,enabledKey:`audioPrMergeConflictEnabled`,volumeKey:`audioPrMergeConflictVolume`},"pr:ready-to-merge":{soundKey:`audioPrReadyToMergeSound`,enabledKey:`audioPrReadyToMergeEnabled`,volumeKey:`audioPrReadyToMergeVolume`},"pr:merged":{soundKey:`audioPrMergedSound`,enabledKey:`audioPrMergedEnabled`,volumeKey:`audioPrMergedVolume`}};function Ca(e,t,n){let r=Wi().global,i=Sa[n];na(e,void 0,t,Ti(r[i.soundKey]),Number(r[i.volumeKey]),!!r[i.enabledKey])}function wa(e,t){let n=[];return t&&n.push({label:J(`pr.openPr`),color:`white`,noDismiss:!0,handler:()=>window.open(t,`_blank`)}),n.push({label:J(`pr.openWorkspace`),color:`white`,noDismiss:!0,handler:()=>{window.location.hash=`#/workspace/${e}`}}),n.push({label:J(`pr.dismiss`),color:`white`}),n}var Y=null,Ta=null,Ea=0,Da=!1,Oa=!1,ka=!1;function Aa(e){ka=e}function ja(e,t,n){if(t.kind!==`session:started`)return;let r=q();if(n){r.setActiveAgentSession(e,n);let t=r.peekPending(e);t&&t.agentSessionId===n&&r.dequeuePending(e)}let i=r.workspaces.find(t=>t.id===e);i&&(i.status===`completed`||i.status===`idle`||i.status===`error`||i.status===`quota`)&&r.updateWorkspaceFromEvent(e,{status:`executing`}),!ka&&n&&r.selectedWorkspaceId===e&&r.selectedSessionId!==n&&r.fetchSessions(e,n).catch(e=>{console.error(`[websocket] fetchSessions on session:started failed:`,e)})}function Ma(e,t){let n=q();if(t.kind===`tool:call`&&t.name===`TodoWrite`){let r=t.input?.todos;return Array.isArray(r)&&n.updateAgentTodos(e,r.map(e=>({content:typeof e.content==`string`?e.content:``,status:typeof e.status==`string`?e.status:`pending`,activeForm:typeof e.activeForm==`string`?e.activeForm:void 0}))),!0}if(t.kind===`tool:call`&&t.name===`TaskCreate`){let r=t.input??{};return n.agentTaskCreate(e,t.toolCallId,{subject:typeof r.subject==`string`?r.subject:void 0,description:typeof r.description==`string`?r.description:void 0,activeForm:typeof r.activeForm==`string`?r.activeForm:void 0}),!0}if(t.kind===`tool:result`&&typeof t.output==`string`){let r=t.output.match(/^Task #(\d+) created successfully/);if(r)return n.agentTaskSetNumber(e,t.toolCallId,Number(r[1])),!0}if(t.kind===`tool:call`&&t.name===`TaskUpdate`){let r=t.input??{},i=r.task_id??r.taskId??r.id,a=typeof i==`number`?i:typeof i==`string`?Number(i):NaN;return Number.isFinite(a)&&n.agentTaskUpdate(e,a,{status:typeof r.status==`string`?r.status:void 0,content:typeof r.subject==`string`?r.subject:void 0,activeForm:typeof r.activeForm==`string`?r.activeForm:void 0}),!0}return!1}function Na(e,t,n,r,i){let a=mi();if(t.kind===`session:compacting`){a.setCompacting(e,t.active);return}a.append(e,t,n,r,i),(t.kind===`session:compacted`||t.kind===`message:text`||t.kind===`tool:call`)&&a.setCompacting(e,!1),ja(e,t,i??void 0);let o=q();if(t.kind===`session:user-input-requested`){if(t.requestKind===`question`?o.enqueuePending(e,{kind:`question`,agentSessionId:i??null,toolCallId:t.toolCallId,toolName:t.toolName,input:t.payload}):o.enqueuePending(e,{kind:`permission`,agentSessionId:i??null,toolCallId:t.toolCallId,toolName:t.toolName,toolInput:t.payload}),o.updateWorkspaceFromEvent(e,{status:`awaiting-user`}),!ka){let n=o.workspaces.find(t=>t.id===e)?.name??``,r=t.requestKind===`question`?J(`notification.agentQuestion`,{name:n}):J(`notification.agentPermissionRequest`,{name:n}),i=Wi().global;na(r,void 0,e,t.requestKind===`question`?i.audioQuestionSound:void 0,t.requestKind===`question`?i.audioQuestionVolume:void 0,i.audioQuestionNotifications)}return}if(t.kind===`subagent:progress`){o.upsertSubagent(e,{toolUseId:t.toolCallId,status:t.status,description:t.description,taskType:t.taskType,lastToolName:t.lastToolName,totalTokens:t.totalTokens,toolUses:t.toolUses,durationMs:t.durationMs});return}if(!Ma(e,t)){if(t.kind===`tool:call`&&t.name===`Bash`){let n=t.input,r=`${n?.command??``} ${n?.description??``}`;/\bgit\b|commit|push|pull|merge|rebase|checkout|branch/i.test(r)&&o.triggerGitRefresh(),/\bgit\s+branch\s+-m\b/i.test(r)&&setTimeout(()=>{o.resyncWorkspaceBranch(e).catch(e=>{console.error(`[websocket] Branch resync failed:`,e)})},2500),/\bgh\s+pr\s+create\b/i.test(r)&&setTimeout(()=>o.triggerGitRefresh(),3e3)}if(t.kind===`tool:call`&&t.name===`ExitPlanMode`&&o.workspaces.find(t=>t.id===e)?.agentPermissionMode===`plan`&&(o.updateWorkspaceFromEvent(e,{agentPermissionMode:`bypass`}),o.updateAgentPermissionMode(e,`bypass`).catch(e=>{console.error(`[websocket] failed to persist ExitPlanMode flip:`,e)})),t.kind!==`session:started`){if(t.kind===`session:ended`){i&&o.clearPendingForSession(e,i);let n=o.activeAgentSessionIds[e];if(t.superseded===!0||typeof i==`string`&&i.length>0&&n!==void 0&&i!==n){o.cancelQueuedMessage(e,i),i&&o.clearActiveAgentSession(e,i);return}a.setCompacting(e,!1),i?o.clearActiveAgentSession(e,i):o.clearActiveAgentSessionOwner(e);let r=o.workspaces.find(t=>t.id===e)?.status===`quota`?`quota`:t.reason===`completed`?`completed`:t.reason===`error`?`error`:`idle`;o.updateWorkspaceFromEvent(e,{status:r}),i&&t.reason===`completed`&&o.flushQueuedMessage(e,i),o.finalizeRunningSubagents(e),o.fetchWorkspaces(),!ka&&t.reason!==`killed`&&t.reason!==`error`&&o.autoLoopStates[e]?.auto_loop!==!0&&na(J(`notification.agentFinished`,{name:o.workspaces.find(t=>t.id===e)?.name??``}),void 0,e);return}if(t.kind===`error`&&(t.category===`quota`&&(o.updateWorkspaceFromEvent(e,{status:`quota`}),o.fetchWorkspaces()),!ka)){let t=Wi().global;na(J(`notification.agentError`,{name:o.workspaces.find(t=>t.id===e)?.name??``}),void 0,e,t.audioAgentErrorSound,t.audioAgentErrorVolume,t.audioAgentErrorNotifications)}}}}var Pa=be(`websocket`,{state:()=>({connected:!1,reconnecting:!1,reconnectAttempt:0,lastEventId:null,_replaying:!1}),actions:{connect(){if(Y)return;if(Da=!0,Oa||(Oa=!0,window.addEventListener(`online`,()=>{Da&&this.connect()}),window.addEventListener(`offline`,()=>{this.connected=!1,this.reconnecting=Da,Ta&&=(clearTimeout(Ta),null)})),!navigator.onLine){this.connected=!1,this.reconnecting=!0;return}let e=Nr(`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}/ws`,Ar()),t=new WebSocket(e);Y=t,t.addEventListener(`open`,()=>{this.connected=!0,this.reconnecting=!1,Ea=0,this.reconnectAttempt=0;let e=q().workspaces.map(e=>e.id);for(let t of e)this._send({type:`subscribe`,payload:{workspaceId:t}});this.lastEventId&&this._send({type:`sync:request`,payload:{lastEventId:this.lastEventId,workspaceIds:e}})}),t.addEventListener(`message`,e=>{try{let t=JSON.parse(e.data);this._routeMessage(t)}catch{}}),t.addEventListener(`close`,()=>{this.connected=!1,Y=null,Da&&this._scheduleReconnect()}),t.addEventListener(`error`,()=>{})},disconnect(){Da=!1,Ta&&=(clearTimeout(Ta),null),Y&&=(Y.close(),null),this.connected=!1,this.reconnecting=!1,this.reconnectAttempt=0},subscribe(e){this._send({type:`subscribe`,payload:{workspaceId:e}}),this._send({type:`sync:request`,payload:{workspaceIds:[e]}})},unsubscribe(e){this._send({type:`unsubscribe`,payload:{workspaceId:e}})},sendChatMessage(e,t,n,r,i=!1){let a=this._send({type:`chat:message`,payload:{workspaceId:e,content:t,sessionId:n,agentPermissionModeOverride:r,force:i}});if(/^\/compact(\s|$)/.test(t.trim())&&mi().setCompacting(e,!0),!a)return!1;let o=q(),s=o.workspaces.find(t=>t.id===e);return s&&(s.status===`completed`||s.status===`idle`||s.status===`error`||s.status===`quota`)&&o.updateWorkspaceFromEvent(e,{status:`executing`}),!0},_send(e){return Y&&Y.readyState===WebSocket.OPEN?(Y.send(JSON.stringify(e)),!0):!1},isConnected(){return Y!==null&&Y.readyState===WebSocket.OPEN},_scheduleReconnect(){if(Ta)return;if(!Da||!navigator.onLine){this.reconnecting=Da;return}let e=Math.min(1e3*2**Ea,3e4),t=Math.round(e*(.8+Math.random()*.4));Ea++,this.reconnecting=!0,this.reconnectAttempt=Ea,Ea===4&&Ar()&&Fr(),Ta=setTimeout(()=>{Ta=null,this.connect()},t)},_routeMessage(e){let t=q();e.replayable!==!1&&e.id?this.lastEventId=e.id:e.replayable!==!1&&e.eventId&&(this.lastEventId=e.eventId);let n=e.payload??{},r=e.workspaceId??n.workspaceId??``;switch(e.type){case`chat:accepted`:{let e=typeof n.sessionId==`string`?n.sessionId:void 0;r&&e&&t.cancelQueuedMessage(r,e);break}case`chat:rejected`:{let e=typeof n.sessionId==`string`?n.sessionId:void 0,i=typeof n.content==`string`?n.content:void 0,a=typeof n.message==`string`?n.message:J(`network.login.unreachable`);if(r&&i){let n=(t.activityFeeds[r]??[]).find(e=>e.meta?.sender===`user`&&e.meta?.pending&&e.content===i);n&&t.removeActivityItem(r,n.id),e&&t.queueMessage(r,i,e)}K.create({type:`negative`,message:a,position:`top`,timeout:6e3});break}case`agent:event`:{if(!r)break;let t=e.createdAt;Na(r,n,t,e.id??e.eventId,e.sessionId??null);break}case`agent:progress`:n.tasks&&Array.isArray(n.tasks)&&(t.tasks=n.tasks);break;case`user:message`:if(r&&n.content){let i=n.content,a=n.sender??`user`,o=e.sessionId,s=e.id??e.eventId??`user-${Date.now()}`,c=e.createdAt??new Date().toISOString(),l=t.activityFeeds[r]??[];if(a===`user`&&l.some(e=>e.meta?.sender===`user`&&e.content===i&&e.meta?.pending)){let e=l.findIndex(e=>e.meta?.sender===`user`&&e.content===i&&e.meta?.pending);e>=0&&(l[e]={...l[e],id:s,sessionId:o})}else t.addActivityItem(r,{id:s,type:`text`,content:i,timestamp:c,sessionId:o,meta:{sender:a}})}break;case`sync:response`:this._replaying=!0,Aa(!0);try{let e=n.events??[],t=n.mode===`delta`?`delta`:`snapshot`,r=new Map;for(let t of e)if(t.type!==`sync:response`){if(t.type===`agent:event`&&t.workspaceId){let e=r.get(t.workspaceId)??{events:[],timestamps:[],sessionIds:[],eventIds:[],oldestId:void 0};e.events.push(t.payload),e.timestamps.push(t.createdAt),e.sessionIds.push(t.sessionId??null),e.eventIds.push(t.id??null),e.oldestId||=t.id,r.set(t.workspaceId,e);continue}this._routeMessage(t)}if(r.size>0){let e=mi();for(let[n,{events:i,timestamps:a,sessionIds:o,eventIds:s,oldestId:c}]of r){let r=t===`delta`?e.merge(n,i,a,{sessionIds:o,eventIds:s}):i.map((e,t)=>t);t===`snapshot`&&e.reset(n,i,a,{oldestId:c,hasMoreOlder:!0,sessionIds:o,eventIds:s}),t===`snapshot`&&q().updateAgentTodos(n,[]);for(let e of r){let t=i[e];if(!t)continue;let r=o[e]??null;if(t.kind===`session:user-input-requested`){t.requestKind===`question`?q().enqueuePending(n,{kind:`question`,agentSessionId:r,toolCallId:t.toolCallId,toolName:t.toolName,input:t.payload}):q().enqueuePending(n,{kind:`permission`,agentSessionId:r,toolCallId:t.toolCallId,toolName:t.toolName,toolInput:t.payload});continue}if(t.kind===`session:started`){if(r){let e=q();e.setActiveAgentSession(n,r);let t=e.peekPending(n);t&&t.agentSessionId===r&&e.dequeuePending(n)}continue}if(t.kind===`session:ended`){let e=q();r?(e.clearPendingForSession(n,r),e.cancelQueuedMessage(n,r),e.clearActiveAgentSession(n,r)):t.superseded!==!0&&e.clearActiveAgentSessionOwner(n);continue}if(t.kind===`subagent:progress`){q().upsertSubagent(n,{toolUseId:t.toolCallId,status:t.status,description:t.description,taskType:t.taskType,lastToolName:t.lastToolName,totalTokens:t.totalTokens,toolUses:t.toolUses,durationMs:t.durationMs});continue}Ma(n,t)}}}let i=e.findLast(e=>e.replayable!==!1&&typeof e.id==`string`);i&&(this.lastEventId=i.id)}finally{this._replaying=!1,Aa(!1)}break;case`usage:snapshot`:{let e=n;e.providerId&&e.snapshot&&t.applyUsageSnapshot({providerId:e.providerId,snapshot:e.snapshot});break}case`devserver:status`:{let e=ra();r&&e.updateFromWsEvent(r,n);break}case`task:updated`:r&&t.fetchWorkspaceDetails(r);break;case`setup:output`:t.addActivityItem(r,{id:e.id??`setup-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`setup:complete`:t.addActivityItem(r,{id:e.id??`setup-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?J(`chat.scriptDone`):J(`chat.scriptComplete`,{phase:`setup`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`setup:error`:t.addActivityItem(r,{id:e.id??`setup-error-${Date.now()}`,type:`text`,content:J(`chat.scriptError`,{phase:`setup`,message:e.payload?.message??J(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`cleanup:output`:t.addActivityItem(r,{id:e.id??`cleanup-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`cleanup:complete`:t.addActivityItem(r,{id:e.id??`cleanup-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?J(`chat.scriptDone`):J(`chat.scriptComplete`,{phase:`cleanup`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`cleanup:error`:t.addActivityItem(r,{id:e.id??`cleanup-error-${Date.now()}`,type:`text`,content:J(`chat.scriptError`,{phase:`cleanup`,message:e.payload?.message??J(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`archive:output`:t.addActivityItem(r,{id:e.id??`archive-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`archive:complete`:t.addActivityItem(r,{id:e.id??`archive-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?J(`chat.scriptDone`):J(`chat.scriptComplete`,{phase:`archive`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`archive:error`:t.addActivityItem(r,{id:e.id??`archive-error-${Date.now()}`,type:`text`,content:J(`chat.scriptError`,{phase:`archive`,message:e.payload?.message??J(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`workspace:unread`:if(r){let e=n.hasUnread??!1;t.updateWorkspaceFromEvent(r,{hasUnread:e})}break;case`workspace:pr-attention-dismissed`:if(r){let e=n.kind,i=n.prUpdatedAt;e&&i&&t.updateWorkspaceFromEvent(r,e===`changes-requested`?{prChangesDismissedAt:i}:{prCiFailureDismissedAt:i})}break;case`workspace:description-updated`:{if(!r)break;let e=n.description??null;t.updateWorkspaceFromEvent(r,{description:e});break}case`workspace:agent-description-updated`:{if(!r)break;let e=n.agentDescription??null;t.updateWorkspaceFromEvent(r,{agentDescription:e});break}case`cron:created`:{if(!r)break;let e=n.cron;if(!e)break;let i=t.crons[r]??[];i.some(t=>t.id===e.id)||(t.crons[r]=[...i,e]);let a=t.autoLoopStates[r];a&&(a.crons_count=t.crons[r].length);break}case`cron:fired`:{if(!r)break;let e=n,i=t.crons[r]??[];t.crons[r]=i.map(t=>t.id===e.id?{...t,nextFireAt:e.nextFireAt??t.nextFireAt,lastFiredAt:e.lastFiredAt??new Date().toISOString()}:t);break}case`cron:cancelled`:{if(!r)break;let e=n.id;if(!e)break;t.crons[r]=(t.crons[r]??[]).filter(t=>t.id!==e);let i=t.autoLoopStates[r];i&&(i.crons_count=t.crons[r].length);break}case`cron:updated`:{if(!r)break;let e=n.crons;if(Array.isArray(e)){t.crons[r]=e;let n=t.autoLoopStates[r];n&&(n.crons_count=e.length)}break}case`workspace:archived`:case`workspace:unarchived`:case`workspace:worktree-restored`:case`workspace:worktree-purged`:e.type===`workspace:archived`&&r&&t.selectedWorkspaceId===r&&(t.selectedWorkspaceId=null),t.fetchWorkspaces(),t.archivedLoaded&&t.fetchArchivedWorkspaces();break;case`pr:base-changed`:{if(!r)break;let e=n,i=e.oldBase??``,a=e.newBase??``;t.updateWorkspaceFromEvent(r,{sourceBranch:a}),K.create({type:`info`,position:`top`,timeout:Gi,message:J(`pr.baseChanged`,{oldBase:i,newBase:a}),actions:wa(r,e.prUrl)}),na(J(`pr.baseChanged`,{oldBase:i,newBase:a}),void 0,r);break}case`pr:ci-failed`:case`pr:ci-recovered`:case`pr:merge-conflict`:case`pr:merged`:{if(!r)break;let i=e.type,a=n,o=a.prNumber??0,s={"pr:ci-failed":{key:`toast.prCiFailed`,type:`negative`,timeout:4e3},"pr:ci-recovered":{key:`toast.prCiRecovered`,type:`positive`,timeout:5e3},"pr:merge-conflict":{key:`toast.prMergeConflict`,type:`warning`,timeout:Gi},"pr:merged":{key:`toast.prMerged`,type:`positive`,timeout:5e3}}[i],c=J(s.key,{n:o});K.create({type:s.type,position:`top`,timeout:s.timeout,message:c,actions:wa(r,a.prUrl)}),Ca(c,r,i),i!==`pr:merged`&&t.refreshPrSnapshot(r);break}case`pr:changes-requested`:{if(!r)break;let e=n,i=J(`toast.prChangesRequested`,{n:e.prNumber??0});K.create({type:`warning`,position:`top`,timeout:Gi,message:i,actions:wa(r,e.prUrl)}),Ca(i,r,`pr:changes-requested`),t.refreshPrSnapshot(r);break}case`pr:approved`:{if(!r)break;let e=n,i=J(`toast.prApproved`,{n:e.prNumber??0});K.create({type:`positive`,position:`top`,timeout:5e3,message:i,actions:wa(r,e.prUrl)}),Ca(i,r,`pr:approved`),t.refreshPrSnapshot(r);break}case`pr:ready-to-merge`:{if(!r)break;let e=n,i=J(`toast.prReadyToMerge`,{n:e.prNumber??0});K.create({type:`positive`,position:`top`,timeout:5e3,message:i,actions:wa(r,e.prUrl)}),Ca(i,r,`pr:ready-to-merge`),t.refreshPrSnapshot(r);break}case`wakeup:scheduled`:if(r){let e=n;typeof e.targetAt==`string`&&t.setPendingWakeup(r,{targetAt:e.targetAt,reason:e.reason})}break;case`wakeup:cancelled`:case`wakeup:fired`:case`wakeup:skipped`:r&&t.clearPendingWakeup(r);break;case`agent:quota-backoff`:{if(!r)break;let e=n;typeof e.targetAt==`string`&&typeof e.source==`string`&&t.setPendingQuotaBackoff(r,{targetAt:e.targetAt,resetsAt:e.resetsAt??null,source:e.source});break}case`agent:quota-backoff-cancelled`:r&&t.clearPendingQuotaBackoff(r);break;case`autoloop:enabled`:case`autoloop:iteration-started`:case`autoloop:ready-flipped`:t.fetchAutoLoopStates();break;case`autoloop:permission-overridden`:r&&na(J(`notification.autoLoopPermissionOverridden`,{name:t.workspaces.find(e=>e.id===r)?.name??``}),void 0,r);break;case`autoloop:disabled`:if(t.fetchAutoLoopStates(),r){let e=n?.reason,i=t.workspaces.find(e=>e.id===r)?.name??``,a=e===`error`?`notification.autoLoopError`:e===`stall`?`notification.autoLoopStalled`:e===`completed`?`notification.autoLoopCompleted`:e===`awaiting-clarification`?`notification.autoLoopAwaitingClarification`:null;a&&na(J(a,{name:i}),void 0,r)}break;case`migration:progress`:case`migration:error`:Hn().update(n)}}}}),Fa=u({__name:`App`,setup(e){let t=Pa(),n=Br();return y(()=>{t.connect(),n.fetchTemplates(),Zi()}),_(()=>{t.disconnect()}),(e,t)=>{let n=v(`router-view`);return S(),ee(d,null,[E(n),E(Yn),E(zr)],64)}}}),Ia=e=>e,La=Ia,Ra=Ia,za=Ia(()=>Se());function Ba(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function Va(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&Ba(e.default)}var X=Object.assign;function Ha(e,t){let n={};for(let r in t){let i=t[r];n[r]=Z(i)?i.map(e):e(i)}return n}var Ua=()=>{},Z=Array.isArray;function Wa(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var Ga=Symbol(``);function Ka(e,t){return X(Error(),{type:e,[Ga]:!0},t)}function Q(e,t){return e instanceof Error&&Ga in e&&(t==null||!!(e.type&t))}var qa=Symbol(``),Ja=Symbol(``),Ya=Symbol(``),Xa=Symbol(``),Za=Symbol(``);function Qa(){return M(Ya)}function $a(e){return M(Xa)}var eo=typeof document<`u`,to=/#/g,no=/&/g,ro=/\//g,io=/=/g,ao=/\?/g,oo=/\+/g,so=/%5B/g,co=/%5D/g,lo=/%5E/g,uo=/%60/g,fo=/%7B/g,po=/%7C/g,mo=/%7D/g,ho=/%20/g;function go(e){return e==null?``:encodeURI(``+e).replace(po,`|`).replace(so,`[`).replace(co,`]`)}function _o(e){return go(e).replace(fo,`{`).replace(mo,`}`).replace(lo,`^`)}function vo(e){return go(e).replace(oo,`%2B`).replace(ho,`+`).replace(to,`%23`).replace(no,`%26`).replace(uo,"`").replace(fo,`{`).replace(mo,`}`).replace(lo,`^`)}function yo(e){return vo(e).replace(io,`%3D`)}function bo(e){return go(e).replace(to,`%23`).replace(ao,`%3F`)}function xo(e){return bo(e).replace(ro,`%2F`)}function So(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var Co=/\/$/,wo=e=>e.replace(Co,``);function To(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=No(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:So(o)}}function Eo(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function Do(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function Oo(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&ko(t.matched[r],n.matched[i])&&Ao(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ko(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ao(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!jo(e[n],t[n]))return!1;return!0}function jo(e,t){return Z(e)?Mo(e,t):Z(t)?Mo(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function Mo(e,t){return Z(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function No(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`){if(s===`..`)a>1&&a--;else break}return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var Po={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0};function Fo(e){if(!e){if(eo){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^/]+/,``)}else e=`/`}return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),wo(e)}var Io=/^[^#]+#/;function Lo(e,t){return e.replace(Io,`#`)+t}function Ro(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var zo=()=>({left:window.scrollX,top:window.scrollY});function Bo(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=Ro(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function Vo(e,t){return(history.state?history.state.position-t:-1)+e}var Ho=new Map;function Uo(e,t){Ho.set(e,t)}function Wo(e){let t=Ho.get(e);return Ho.delete(e),t}function Go(e){return typeof e==`string`||e&&typeof e==`object`}function Ko(e){return typeof e==`string`||typeof e==`symbol`}function qo(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(oo,` `),i=r.indexOf(`=`),a=So(i<0?r:r.slice(0,i)),o=i<0?null:So(r.slice(i+1));if(a in t){let e=t[a];Z(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function Jo(e){let t=``;for(let n in e){let r=e[n];if(n=yo(n),r==null){r!==void 0&&(t+=(t.length?`&`:``)+n);continue}(Z(r)?r.map(e=>e&&vo(e)):[r&&vo(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function Yo(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=Z(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}function Xo(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Zo(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(Ka(4,{from:n,to:t})):e instanceof Error?c(e):Go(e)?c(Ka(2,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function Qo(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(!(t!==`beforeRouteEnter`&&!o.instances[e])){if(Ba(s)){let c=(s.__vccOpts||s)[t];c&&a.push(Zo(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=Va(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&Zo(c,n,r,o,e,i)()}))}}}return a}function $o(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>ko(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>ko(e,s))||i.push(s))}return[n,r,i]}var es=()=>location.protocol+`//`+location.host;function ts(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),Do(n,``)}return Do(n,e)+r+i}function ns(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=ts(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:`pop`,direction:u?u>0?`forward`:`back`:``})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(X({},e.state,{scroll:zo()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function rs(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?zo():null}}function is(e){let{history:t,location:n}=window,r={value:ts(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:es()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,X({},t.state,rs(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=X({},i.value,t.state,{forward:e,scroll:zo()});a(o.current,o,!0),a(e,X({},rs(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function as(e){e=Fo(e);let t=is(e),n=ns(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=X({location:``,base:e,go:r,createHref:Lo.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function os(e){return e=location.host?e||location.pathname+location.search:``,e.includes(`#`)||(e+=`#`),as(e)}var ss={type:0,value:``},cs=/[a-zA-Z0-9_]/;function ls(e){if(!e)return[[]];if(e===`/`)return[[ss]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=0,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===0?a.push({type:0,value:l}):n===1||n===2||n===3?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;)switch(c=e[s++],n){case 0:c===`\\`?(r=n,n=4):c===`/`?(l&&d(),o()):c===`:`?(d(),n=1):f();break;case 4:f(),n=r;break;case 1:c===`(`?n=2:cs.test(c)?f():(d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case 2:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=3:u+=c;break;case 3:d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`)}return n===2&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var us=`[^/]+?`,ds={sensitive:!1,strict:!1,start:!0,end:!0},fs=/[.+*?^${}()[\]/\\]/g;function ps(e,t){let n=X({},ds,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[90];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=40+(n.sensitive?.25:0);if(o.type===0)r||(i+=`/`),i+=o.value.replace(fs,`\\$&`),s+=40;else if(o.type===1){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||us;if(u!==us){s+=10;try{RegExp(`(${u})`)}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=20,c&&(s+=-8),n&&(s+=-20),u===`.*`&&(s+=-50)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=.7000000000000001}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===0)n+=e.value;else if(e.type===1){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(Z(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=Z(c)?c.join(`/`):c;if(!l){if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`)}n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function ms(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function hs(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=ms(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(gs(r))return 1;if(gs(i))return-1}return i.length-r.length}function gs(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var _s={strict:!1,end:!0,sensitive:!1};function vs(e,t,n){let r=X(ps(ls(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function ys(e,t){let n=[],r=new Map;t=Wa(_s,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=xs(e);s.aliasOf=r&&r.record;let l=Wa(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(xs(X({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=vs(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!Cs(d)&&o(e.name)),Ds(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:Ua}function o(e){if(Ko(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=Ts(e,n);n.splice(t,0,e),e.record.name&&!Cs(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw Ka(1,{location:e});s=i.record.name,a=X(bs(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&bs(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name,i.keys.forEach(e=>{e.optional&&!a[e.name]&&delete a[e.name]}));else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw Ka(1,{location:e,currentLocation:t});s=i.record.name,a=X({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:ws(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function bs(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function xs(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Ss(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Ss(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function Cs(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ws(e){return e.reduce((e,t)=>X(e,t.meta),{})}function Ts(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;hs(e,t[i])<0?r=i:n=i+1}let i=Es(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function Es(e){let t=e;for(;t=t.parent;)if(Ds(t)&&hs(e,t)===0)return t}function Ds({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Os(e){let t=M(Ya),n=M(Xa),i=p(()=>{let n=r(e.to);return t.resolve(n)}),a=p(()=>{let{matched:e}=i.value,{length:t}=e,r=e[t-1],a=n.matched;if(!r||!a.length)return-1;let o=a.findIndex(ko.bind(null,r));if(o>-1)return o;let s=Ns(e[t-2]);return t>1&&Ns(r)===s&&a[a.length-1].path!==s?a.findIndex(ko.bind(null,e[t-2])):o}),o=p(()=>a.value>-1&&Ms(n.params,i.value.params)),s=p(()=>a.value>-1&&a.value===n.matched.length-1&&Ao(n.params,i.value.params));function c(n={}){if(js(n)){let n=t[r(e.replace)?`replace`:`push`](r(e.to)).catch(Ua);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:i,href:p(()=>i.value.href),isActive:o,isExactActive:s,navigate:c}}function ks(e){return e.length===1?e[0]:e}var As=u({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:Os,setup(e,{slots:t}){let n=l(Os(e)),{options:r}=M(Ya),i=p(()=>({[Ps(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[Ps(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&ks(t.default(n));return e.custom?r:j(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function js(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Ms(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!Z(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function Ns(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var Ps=(e,t,n)=>e??t??n,Fs=u({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let a=M(Za),o=p(()=>e.route||a.value),s=M(Ja,0),c=p(()=>{let e=r(s),{matched:t}=o.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),l=p(()=>o.value.matched[c.value]);m(Ja,p(()=>c.value+1)),m(qa,l),m(Za,o);let u=i();return O(()=>[u.value,l.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!ko(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let r=o.value,i=e.name,a=l.value,s=a&&a.components[i];if(!s)return Is(n.default,{Component:s,route:r});let c=a.props[i],d=c?c===!0?r.params:typeof c==`function`?c(r):c:null,f=j(s,X({},d,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(a.instances[i]=null)},ref:u}));return Is(n.default,{Component:f,route:r})||f}}});function Is(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var Ls=Fs;function Rs(e){let t=ys(e.routes,e),n=e.parseQuery||qo,i=e.stringifyQuery||Jo,s=e.history,c=Xo(),l=Xo(),u=Xo(),d=a(Po),f=Po;eo&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let p=Ha.bind(null,e=>``+e),m=Ha.bind(null,xo),h=Ha.bind(null,So);function g(e,n){let r,i;return Ko(e)?(r=t.getRecordMatcher(e),i=n):i=e,t.addRoute(i,r)}function _(e){let n=t.getRecordMatcher(e);n&&t.removeRoute(n)}function v(){return t.getRoutes().map(e=>e.record)}function y(e){return!!t.getRecordMatcher(e)}function b(e,r){if(r=X({},r||d.value),typeof e==`string`){let i=To(n,e,r.path),a=t.resolve({path:i.path},r),o=s.createHref(i.fullPath);return X(i,a,{params:h(a.params),redirectedFrom:void 0,href:o})}let a;if(e.path!=null)a=X({},e,{path:To(n,e.path,r.path).path});else{let t=X({},e.params);for(let e in t)t[e]??delete t[e];a=X({},e,{params:m(t)}),r.params=m(r.params)}let o=t.resolve(a,r),c=e.hash||``;o.params=p(h(o.params));let l=Eo(i,X({},e,{hash:_o(c),path:o.path})),u=s.createHref(l);return X({fullPath:l,hash:c,query:i===Jo?Yo(e.query):e.query||{}},o,{redirectedFrom:void 0,href:u})}function x(e){return typeof e==`string`?To(n,e,d.value.path):X({},e)}function S(e,t){if(f!==e)return Ka(8,{from:t,to:e})}function w(e){return E(e)}function T(e){return w(X(x(e),{replace:!0}))}function ee(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=x(i):{path:i},i.params={}),X({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function E(e,t){let n=f=b(e),r=d.value,a=e.state,o=e.force,s=e.replace===!0,c=ee(n,r);if(c)return E(X(x(c),{state:typeof c==`object`?X({},a,c.state):a,force:o,replace:s}),t||n);let l=n;l.redirectedFrom=t;let u;return!o&&Oo(i,r,n)&&(u=Ka(16,{to:l,from:r}),F(r,r,!0,!1)),(u?Promise.resolve(u):te(l,r)).catch(e=>Q(e)?Q(e,2)?e:ae(e):N(e,l,r)).then(e=>{if(e){if(Q(e,2))return E(X({replace:s},x(e.to),{state:typeof e.to==`object`?X({},a,e.to.state):a,force:o}),t||l)}else e=A(l,r,!0,s,a);return k(l,r,e),e})}function D(e,t){let n=S(e,t);return n?Promise.reject(n):Promise.resolve()}function O(e){let t=oe.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function te(e,t){let n,[r,i,a]=$o(e,t);n=Qo(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(Zo(r,e,t))});let o=D.bind(null,e,t);return n.push(o),z(n).then(()=>{n=[];for(let r of c.list())n.push(Zo(r,e,t));return n.push(o),z(n)}).then(()=>{n=Qo(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(Zo(r,e,t))});return n.push(o),z(n)}).then(()=>{n=[];for(let r of a)if(r.beforeEnter){if(Z(r.beforeEnter))for(let i of r.beforeEnter)n.push(Zo(i,e,t));else n.push(Zo(r.beforeEnter,e,t))}return n.push(o),z(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=Qo(a,`beforeRouteEnter`,e,t,O),n.push(o),z(n))).then(()=>{n=[];for(let r of l.list())n.push(Zo(r,e,t));return n.push(o),z(n)}).catch(e=>Q(e,8)?e:Promise.reject(e))}function k(e,t,n){u.list().forEach(r=>O(()=>r(e,t,n)))}function A(e,t,n,r,i){let a=S(e,t);if(a)return a;let o=t===Po,c=eo?history.state:{};n&&(r||o?s.replace(e.fullPath,X({scroll:o&&c&&c.scroll},i)):s.push(e.fullPath,i)),d.value=e,F(e,t,n,o),ae()}let ne;function j(){ne||=s.listen((e,t,n)=>{if(!R.listening)return;let r=b(e),i=ee(r,R.currentRoute.value);if(i){E(X(i,{replace:!0,force:!0}),r).catch(Ua);return}f=r;let a=d.value;eo&&Uo(Vo(a.fullPath,n.delta),zo()),te(r,a).catch(e=>Q(e,12)?e:Q(e,2)?(E(X(x(e.to),{force:!0}),r).then(e=>{Q(e,20)&&!n.delta&&n.type===`pop`&&s.go(-1,!1)}).catch(Ua),Promise.reject()):(n.delta&&s.go(-n.delta,!1),N(e,r,a))).then(e=>{e||=A(r,a,!1),e&&(n.delta&&!Q(e,8)?s.go(-n.delta,!1):n.type===`pop`&&Q(e,20)&&s.go(-1,!1)),k(r,a,e)}).catch(Ua)})}let M=Xo(),re=Xo(),ie;function N(e,t,n){ae(e);let r=re.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function P(){return ie&&d.value!==Po?Promise.resolve():new Promise((e,t)=>{M.add([e,t])})}function ae(e){return ie||(ie=!e,j(),M.list().forEach(([t,n])=>e?n(e):t()),M.reset()),e}function F(t,n,r,i){let{scrollBehavior:a}=e;if(!eo||!a)return Promise.resolve();let o=!r&&Wo(Vo(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return C().then(()=>a(t,n,o)).then(e=>t===d.value&&e&&Bo(e)).catch(e=>t===d.value&&N(e,t,n))}let I=e=>s.go(e),L,oe=new Set,R={currentRoute:d,listening:!0,addRoute:g,removeRoute:_,clearRoutes:t.clearRoutes,hasRoute:y,getRoutes:v,resolve:b,options:e,push:w,replace:T,go:I,back:()=>I(-1),forward:()=>I(1),beforeEach:c.add,beforeResolve:l.add,afterEach:u.add,onError:re.add,isReady:P,install(e){e.component(`RouterLink`,As),e.component(`RouterView`,Ls),e.config.globalProperties.$router=R,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>r(d)}),eo&&!L&&d.value===Po&&(L=!0,w(s.location).catch(e=>{}));let t={};for(let e in Po)Object.defineProperty(t,e,{get:()=>d.value[e],enumerable:!0});e.provide(Ya,R),e.provide(Xa,o(t)),e.provide(Za,d);let n=e.unmount;oe.add(e),e.unmount=function(){oe.delete(e),oe.size<1&&(f=Po,ne&&ne(),ne=null,d.value=Po,L=!1,ie=!1),n()}}};function z(e){return e.reduce((e,t)=>e.then(()=>O(t)),Promise.resolve())}return R}var zs=`modulepreload`,Bs=function(e){return`/`+e},Vs={},$=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Bs(t,n),t=s(t),t in Vs)return;Vs[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:zs,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Hs=[{path:`/`,component:()=>$(()=>import(`./MainLayout-BN1ug95K.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])),children:[{path:``,redirect:{name:`workspace`}},{path:`workspace/:id?`,name:`workspace`,component:()=>$(()=>import(`./WorkspacePage-CbC_t5Rx.js`).then(e=>e.t),__vite__mapDeps([27,1,2,3,4,5,6,28,7,8,9,10,12,14,15,16,17,19,20,21,22,29,30,31,32,33,34]))},{path:`create`,name:`create`,component:()=>$(()=>import(`./CreatePage-BnMSo_79.js`),__vite__mapDeps([35,1,2,3,4,5,6,28,7,8,9,10,15,18,23,29,30,21,31,32,36]))},{path:`settings`,name:`settings`,component:()=>$(()=>import(`./SettingsPage-3rYdJZga.js`),__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,12,13,15,17,19,23,24,25,29,32,33,38]))},{path:`search`,name:`search`,component:()=>$(()=>import(`./SearchPage-BD53VJEr.js`),__vite__mapDeps([39,1,2,3,4,5,6,15,16,17,22,29,40]))},{path:`health`,name:`health`,component:()=>$(()=>import(`./HealthPage-BRAxQKSP.js`),__vite__mapDeps([41,2,3,4,7,16,17,19,29]))},{path:`changelog`,name:`changelog`,component:()=>$(()=>import(`./ChangelogPage-DO6DNO4Q.js`),__vite__mapDeps([42,2,3,14,15,17,4,10,29,43]))}]},{path:`/:catchAll(.*)*`,redirect:`/`}],Us=Ra(()=>Rs({scrollBehavior:()=>({left:0,top:0}),routes:Hs,history:os()}));async function Ws(e,t){let n=e(Fa);n.use(dt,t);let r=typeof za==`function`?await za({}):za;n.use(r);let i=s(typeof Us==`function`?await Us({store:r}):Us);return r.use(({store:e})=>{e.router=i}),{app:n,store:r,router:i}}var Gs=()=>j(`svg`,{key:`svg`,class:`q-radio__bg absolute non-selectable`,viewBox:`0 0 24 24`},[j(`path`,{d:`M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12`}),j(`path`,{class:`q-radio__check`,d:`M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6`})]);function Ks(e){(e.keyCode===13||e.keyCode===32)&&I(e)}var qs=L({name:`QRadio`,props:{...he,...me,...Ae,modelValue:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},emits:[`update:modelValue`],setup(e,{slots:t,emit:r}){let{proxy:a}=A(),o=fe(e,a.$q),s=ce(e,je),c=i(null),{refocusTargetEl:l,refocusTarget:u}=ke(e,c),d=p(()=>n(e.modelValue)===n(e.val)),f=p(()=>`q-radio cursor-pointer no-outline row inline no-wrap items-center`+(e.disable?` disabled`:``)+(o.value?` q-radio--dark`:``)+(e.dense?` q-radio--dense`:``)+(e.leftLabel?` reverse`:``)),m=p(()=>{let t=e.color!==void 0&&(e.keepColor||d.value)?` text-${e.color}`:``;return`q-radio__inner relative-position q-radio__inner--${d.value?`truthy`:`falsy`}${t}`}),h=p(()=>(d.value?e.checkedIcon:e.uncheckedIcon)||null),g=p(()=>e.disable?-1:e.tabindex||0),_=p(()=>{let t={type:`radio`};return e.name!==void 0&&Object.assign(t,{".checked":d.value,"^checked":d.value?`checked`:void 0,name:e.name,value:e.val}),t}),v=Me(_);function y(t){t!==void 0&&(I(t),u(t)),!e.disable&&!d.value&&r(`update:modelValue`,e.val,t)}function b(e){(e.keyCode===13||e.keyCode===32)&&y(e)}Object.assign(a,{set:y});let x=Gs();return()=>{let n=h.value===null?[x]:[j(`div`,{key:`icon`,class:`q-radio__icon-container absolute-full flex flex-center no-wrap`},[j(_e,{class:`q-radio__icon`,name:h.value})])];e.disable||v(n,`unshift`,` q-radio__native q-ma-none q-pa-none`);let r=[j(`div`,{class:m.value,style:s.value,"aria-hidden":`true`},n)];l.value!==null&&r.push(l.value);let i=e.label===void 0?ge(t.default):z(t.default,[e.label]);return i!==void 0&&r.push(j(`div`,{class:`q-radio__label q-anchor--skip`},i)),j(`div`,{ref:c,class:f.value,tabindex:g.value,role:`radio`,"aria-label":e.label,"aria-checked":d.value?`true`:`false`,"aria-disabled":e.disable?`true`:void 0,onClick:y,onKeydown:Ks,onKeyup:b},r)}}}),Js=()=>j(`div`,{key:`svg`,class:`q-checkbox__bg absolute`},[j(`svg`,{class:`q-checkbox__svg fit absolute-full`,viewBox:`0 0 24 24`},[j(`path`,{class:`q-checkbox__truthy`,fill:`none`,d:`M1.73,12.91 8.1,19.28 22.79,4.59`}),j(`path`,{class:`q-checkbox__indet`,d:`M4,14H20V10H4`})])]),Ys=L({name:`QCheckbox`,props:Fe,emits:Ne,setup(e){let t=Js();function n(n,r){let i=p(()=>(n.value?e.checkedIcon:r.value?e.indeterminateIcon:e.uncheckedIcon)||null);return()=>i.value===null?[t]:[j(`div`,{key:`icon`,class:`q-checkbox__icon-container absolute-full flex flex-center no-wrap`},[j(_e,{class:`q-checkbox__icon`,name:i.value})])]}return Ie(`checkbox`,n)}}),Xs=L({name:`QToggle`,props:{...Fe,icon:String,iconColor:String},emits:Ne,setup(e){function t(t,n){let r=p(()=>(t.value?e.checkedIcon:n.value?e.indeterminateIcon:e.uncheckedIcon)||e.icon),i=p(()=>t.value?e.iconColor:null);return()=>[j(`div`,{class:`q-toggle__track`}),j(`div`,{class:`q-toggle__thumb absolute flex flex-center no-wrap`},r.value===void 0?void 0:[j(_e,{name:r.value,color:i.value})])]}return Ie(`toggle`,t)}}),Zs={radio:qs,checkbox:Ys,toggle:Xs},Qs=Object.keys(Zs);function $s(e,t){if(typeof e==`function`)return e;let n=e===void 0?t:e;return e=>e[n]}var ec=L({name:`QOptionGroup`,props:{...he,modelValue:{required:!0},options:{type:Array,validator:e=>e.every(H),default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],name:String,type:{type:String,default:`radio`,validator:e=>Qs.includes(e)},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean},emits:[`update:modelValue`],setup(e,{emit:t,slots:n}){let{proxy:{$q:r}}=A(),i=Array.isArray(e.modelValue);e.type===`radio`?i&&console.error(`q-option-group: model should not be array`):i||console.error(`q-option-group: model should be array in your case`);let a=fe(e,r),o=p(()=>Zs[e.type]),s=p(()=>$s(e.optionValue,`value`)),c=p(()=>$s(e.optionLabel,`label`)),l=p(()=>$s(e.optionDisable,`disable`)),u=p(()=>e.options.map(t=>({val:s.value(t),name:t.name===void 0?e.name:t.name,disable:e.disable||l.value(t),leftLabel:t.leftLabel===void 0?e.leftLabel:t.leftLabel,color:t.color===void 0?e.color:t.color,checkedIcon:t.checkedIcon,uncheckedIcon:t.uncheckedIcon,dark:t.dark===void 0?a.value:t.dark,size:t.size===void 0?e.size:t.size,dense:e.dense,keepColor:t.keepColor===void 0?e.keepColor:t.keepColor}))),d=p(()=>`q-option-group q-gutter-x-sm`+(e.inline?` q-option-group--inline`:``)),f=p(()=>{let t={role:`group`};return e.type===`radio`&&(t.role=`radiogroup`,e.disable&&(t[`aria-disabled`]=`true`)),t});function m(e){t(`update:modelValue`,e)}return()=>j(`div`,{class:d.value,...f.value},e.options.map((t,r)=>{let i=n[`label-`+r]===void 0?n.label===void 0?void 0:()=>n.label(t):()=>n[`label-`+r](t);return j(`div`,[j(o.value,{label:i===void 0?c.value(t):null,modelValue:e.modelValue,"onUpdate:modelValue":m,...u.value[r]},i)])}))}}),tc=L({name:`DialogPluginComponent`,props:{...he,title:String,message:String,prompt:Object,options:Object,progress:[Boolean,Object],html:Boolean,ok:{type:[String,Object,Boolean],default:!0},cancel:[String,Object,Boolean],focus:{type:String,default:`ok`,validator:e=>[`ok`,`cancel`,`none`].includes(e)},stackButtons:Boolean,color:String,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},emits:[`ok`,`hide`],setup(e,{emit:t}){let{proxy:r}=A(),{$q:a}=r,o=fe(e,a),s=i(null),c=i(e.prompt===void 0?e.options===void 0?void 0:e.options.model:e.prompt.model),l=p(()=>`q-dialog-plugin`+(o.value?` q-dialog-plugin--dark q-dark`:``)+(e.progress===!1?``:` q-dialog-plugin--progress`)),u=p(()=>e.color||(o.value?`amber`:`primary`)),d=p(()=>e.progress===!1?null:H(e.progress)?{component:e.progress.spinner||de,props:{color:e.progress.color||u.value}}:{component:de,props:{color:u.value}}),f=p(()=>e.prompt!==void 0||e.options!==void 0),m=p(()=>{if(!f.value)return{};let{model:t,isValid:n,items:r,...i}=e.prompt===void 0?e.options:e.prompt;return i}),h=p(()=>H(e.ok)||e.ok===!0?a.lang.label.ok:e.ok),g=p(()=>H(e.cancel)||e.cancel===!0?a.lang.label.cancel:e.cancel),_=p(()=>e.prompt===void 0?e.options!==void 0&&e.options.isValid!==void 0&&!e.options.isValid(c.value):e.prompt.isValid!==void 0&&!e.prompt.isValid(c.value)),v=p(()=>({color:u.value,label:h.value,ripple:!1,disable:_.value,...H(e.ok)?e.ok:{flat:!0},"data-autofocus":e.focus===`ok`&&!f.value||void 0,onClick:S})),y=p(()=>({color:u.value,label:g.value,ripple:!1,...H(e.cancel)?e.cancel:{flat:!0},"data-autofocus":e.focus===`cancel`&&!f.value||void 0,onClick:C}));O(()=>e.prompt&&e.prompt.model,T),O(()=>e.options&&e.options.model,T);function b(){s.value.show()}function x(){s.value.hide()}function S(){t(`ok`,n(c.value)),x()}function C(){x()}function w(){t(`hide`)}function T(e){c.value=e}function ee(t){!_.value&&e.prompt.type!==`textarea`&&se(t,13)&&S()}function E(t,n){return e.html?j(U,{class:t,innerHTML:n}):j(U,{class:t},()=>n)}function D(){return[j(Pe,{color:u.value,dense:!0,autofocus:!0,dark:o.value,...m.value,modelValue:c.value,"onUpdate:modelValue":T,onKeyup:ee})]}function te(){return[j(ec,{color:u.value,options:e.options.items,dark:o.value,...m.value,modelValue:c.value,"onUpdate:modelValue":T})]}function k(){let t=[];return e.cancel&&t.push(j(Dr,y.value)),e.ok&&t.push(j(Dr,v.value)),j(Or,{class:e.stackButtons?`items-end`:``,vertical:e.stackButtons,align:`right`},()=>t)}function ne(){let t=[];return e.title&&t.push(E(`q-dialog__title`,e.title)),e.progress!==!1&&t.push(j(U,{class:`q-dialog__progress`},()=>j(d.value.component,d.value.props))),e.message&&t.push(E(`q-dialog__message`,e.message)),e.prompt===void 0?e.options!==void 0&&t.push(j(De,{dark:o.value}),j(U,{class:`scroll q-dialog-plugin__form`},te),j(De,{dark:o.value})):t.push(j(U,{class:`scroll q-dialog-plugin__form`},D)),(e.ok||e.cancel)&&t.push(k()),t}function M(){return[j(ht,{class:[l.value,e.cardClass],style:e.cardStyle,dark:o.value},ne)]}return Object.assign(r,{show:b,hide:x}),()=>j(Ln,{ref:s,onHide:w},M)}});function nc(e,t){for(let n in t)n!==`spinner`&&Object(t[n])===t[n]&&!Array.isArray(t[n])?(e[n]=Object(e[n])===e[n]?{...e[n]}:{},nc(e[n],t[n])):e[n]=t[n]}function rc(e,t,n){return r=>{let a,o,s=t&&r.component!==void 0;if(s){let{component:e,componentProps:t}=r;a=typeof e==`string`?n.component(e):e,o=t||{}}else{let{class:t,style:n,...i}=r;a=e,o=i,t!==void 0&&(i.cardClass=t),n!==void 0&&(i.cardStyle=n)}let c,l=!1,u=i(null),d=Lt(!1,`dialog`),f=e=>{if(u.value?.[e]!==void 0){u.value[e]();return}let t=c.$.subTree;if(t?.component){if(t.component.proxy&&t.component.proxy[e]){t.component.proxy[e]();return}if(t.component.subTree&&t.component.subTree.component&&t.component.subTree.component.proxy&&t.component.subTree.component.proxy[e]){t.component.subTree.component.proxy[e]();return}}console.error(`[Quasar] Incorrectly defined Dialog component`)},p=[],m=[],h={onOk(e){return p.push(e),h},onCancel(e){return m.push(e),h},onDismiss(e){return p.push(e),m.push(e),h},hide(){return f(`hide`),h},update(e){if(c!==null){if(s)Object.assign(o,e);else{let{class:t,style:n,...r}=e;t!==void 0&&(r.cardClass=t),n!==void 0&&(r.cardStyle=n),nc(o,r)}c.$forceUpdate()}return h}},g=e=>{l=!0,p.forEach(t=>{t(e)})},_=()=>{v.unmount(d),Rt(d),v=null,c=null,l||m.forEach(e=>{e()})},v=ct({name:`QGlobalDialog`,setup:()=>()=>j(a,{...o,ref:u,onOk:g,onHide:_,onVnodeMounted(...e){typeof o.onVnodeMounted==`function`&&o.onVnodeMounted(...e),C(()=>f(`show`))}})},n);return c=v.mount(d),h}}var ic={config:{dark:!0,brand:{primary:`#6c63ff`,secondary:`#26a69a`,accent:`#9c27b0`,dark:`#1a1a2e`,"dark-page":`#1a1a2e`,positive:`#21ba45`,negative:`#c10015`,info:`#31ccec`,warning:`#f2c037`}},plugins:{Notify:K,Dialog:{install({$q:e,parentApp:t}){e.dialog=this.create=rc(tc,!0,t)}}}},ac=function(){return!!(window.location.hostname===`localhost`||window.location.hostname===`[::1]`||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))},oc;typeof window<`u`&&(oc=typeof Promise<`u`?new Promise(function(e){return window.addEventListener(`load`,e)}):{then:function(e){return window.addEventListener(`load`,e)}});function sc(e,t){t===void 0&&(t={});var n=t.registrationOptions;n===void 0&&(n={}),delete t.registrationOptions;var r=function(e){for(var n=[],r=arguments.length-1;r-->0;)n[r]=arguments[r+1];t&&t[e]&&t[e].apply(t,n)};`serviceWorker`in navigator&&oc.then(function(){ac()?(uc(e,r,n),navigator.serviceWorker.ready.then(function(e){r(`ready`,e)}).catch(function(e){return cc(r,e)})):(lc(e,r,n),navigator.serviceWorker.ready.then(function(e){r(`ready`,e)}).catch(function(e){return cc(r,e)}))})}function cc(e,t){navigator.onLine||e(`offline`),e(`error`,t)}function lc(e,t,n){navigator.serviceWorker.register(e,n).then(function(e){if(t(`registered`,e),e.waiting){t(`updated`,e);return}e.onupdatefound=function(){t(`updatefound`,e);var n=e.installing;n.onstatechange=function(){n.state===`installed`&&(navigator.serviceWorker.controller?t(`updated`,e):t(`cached`,e))}}}).catch(function(e){return cc(t,e)})}function uc(e,t,n){fetch(e).then(function(r){r.status===404?(t(`error`,Error(`Service worker not found at `+e)),dc()):r.headers.get(`content-type`).indexOf(`javascript`)===-1?(t(`error`,Error(`Expected `+e+` to have javascript content-type, but received `+r.headers.get(`content-type`))),dc()):lc(e,t,n)}).catch(function(e){return cc(t,e)})}function dc(){`serviceWorker`in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()}).catch(function(e){return cc(emit,e)})}sc(`/sw.js`);var fc=`/`;async function pc({app:e,router:t,store:n},r){let i=!1,a=e=>{try{return t.resolve(e).href}catch{}return Object(e)===e?null:e},o=e=>{if(i=!0,typeof e==`string`&&/^https?:\/\//.test(e)){window.location.href=e;return}let t=a(e);t!==null&&(window.location.href=t,window.location.reload())},s=window.location.href.replace(window.location.origin,``);for(let a=0;i===!1&&a<r.length;a++)try{await r[a]({app:e,router:t,store:n,ssrContext:null,redirect:o,urlPath:s,publicPath:fc})}catch(e){i||console.error(`[Quasar] boot error:`,e);return}i||(e.use(t),e.mount(`#q-app`))}Ws(te,ic).then(e=>{let[t,n]=Promise.allSettled===void 0?[`all`,e=>e.map(e=>e.default)]:[`allSettled`,e=>e.map(e=>{if(e.status===`rejected`){console.error(`[Quasar] boot error:`,e.reason);return}return e.value.default})];return Promise[t]([$(()=>import(`./i18n-CK38o-IF.js`),[]),$(()=>import(`./network-auth-DYrrh7Zr.js`),[])]).then(t=>{pc(e,n(t).filter(e=>typeof e==`function`))})});export{Nn as $,bi as A,nt as At,Nr as B,zi as C,Ct,vi as D,ht as Dt,Si as E,gt as Et,fi as F,Dr as G,jr as H,K as I,fr as J,yr as K,Vr as L,Ti as M,H as Mt,wi as N,gi as O,mt as Ot,mi as P,Ln as Q,Br as R,Vi as S,wt as St,_i as T,yt as Tt,Mr as U,Ar as V,Or as W,$n as X,dr as Y,Vn as Z,Gi as _,kt as _t,$ as a,Yt as at,Ri as b,Et as bt,La as c,Jt as ct,q as d,en as dt,kn as et,ca as f,Wt as ft,ta as g,At as gt,ra as h,Mt as ht,qs as i,vn as it,Ei as j,rt as jt,xi as k,U as kt,Pa as l,Gt as lt,aa as m,jt as mt,Xs as n,Tn as nt,$a as o,qt as ot,ia as p,Vt as pt,br as q,Ys as r,En as rt,Qa as s,rn as st,ec as t,An as tt,la as u,tn as ut,Wi as v,Ot as vt,Oi as w,St as wt,Li as x,Tt as xt,Hi as y,Dt as yt,Fr as z};
82
+ sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Opzione B — Prendere la proprietà (più semplice, perde la traccia "creato da root nel container" ma raramente conta):`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Suggerimento: puoi eseguire questi comandi direttamente sulla root dei worktrees (es. `~/.worktrees/`) per coprire tutti i workspace esistenti E futuri in un colpo solo. Una volta fatto, la pulizia Kōbō funzionerà senza errori di permessi.","contextMenu.runSetup":`Esegui script di setup`,"contextMenu.exportEvents":`Esporta eventi (CSV)`,"contextMenu.dismissChangesRequested":`Segna «Modifiche richieste» come visto`,"contextMenu.dismissCiFailure":`Segna «CI in errore» come visto`,"contextMenu.restoreChangesRequested":`Segna «Modifiche richieste» come non visto`,"contextMenu.restoreCiFailure":`Segna «CI in errore» come non visto`,"contextMenu.exportingEvents":`Preparazione dell'esportazione…`,"contextMenu.exportEventsError":`Esportazione degli eventi non riuscita`,"contextMenu.openNotion":`Apri in Notion`,"contextMenu.openSentry":`Apri in Sentry`,"contextMenu.openPr":`Apri PR`,"contextMenu.ignorePrWatch":`Ignora i controlli PR`,"contextMenu.resumePrWatch":`Riprendi i controlli PR`,"contextMenu.prWatchToggleFailed":`Aggiornamento dei controlli PR non riuscito`,"workspace.favorite":`Segna come preferito`,"workspace.unfavorite":`Rimuovi dai preferiti`,"workspace.showFavoritesOnly":`Mostra solo i preferiti`,"workspace.searchArchivedToggle":`Cerca anche nei workspace archiviati`,"workspace.descriptionPlaceholder":`Aggiungi una breve descrizione`,"workspace.descriptionDialogHint":`Testo semplice, massimo 200 caratteri. Lasciare vuoto per cancellare.`,"workspace.descriptionTooLong":`La descrizione deve avere al massimo 200 caratteri.`,"workspace.descriptionSaveFailed":`Impossibile salvare la descrizione.`,"workspace.agentDescriptionTooltip":`Stato live mantenuto dall'agente`,"mcp.tool.setWorkspaceDescription":`Imposta la breve descrizione del workspace (≤ 200 caratteri).`,"tags.manage":`Gestisci tag`,"tags.manageTitle":`Gestisci i tag del workspace`,"tags.noTagsDefined":`Nessun tag definito. Aggiungine in Impostazioni > Globale > Tag.`,"tags.orphanedHint":`{count} tag non sono più nel catalogo globale. Deseleziona per rimuoverli.`,"settings.tagsTitle":`Tag dei workspace`,"settings.tagsHint":`Definisci i tag assegnabili ai workspace. Digita per aggiungere, clicca la croce per rimuovere.`,"settings.tagsLabel":`Tag disponibili`,"settings.branchPrefixesTitle":`Prefissi di branch`,"settings.branchPrefixesHint":`Gestisci i prefissi di branch Git disponibili nella pagina di creazione del workspace. Il primo è preselezionato per impostazione predefinita.`,"settings.branchPrefixesEmpty":`Nessun prefisso di branch definito. Aggiungine almeno uno qui sotto.`,"settings.branchPrefixesAddLabel":`Nuovo prefisso`,"settings.branchPrefixesEditHint":`Clicca per rinominare`,"settings.branchPrefixesMoveUp":`Sposta su`,"settings.branchPrefixesMoveDown":`Sposta giù`,"settings.worktreesTitle":`Worktree Git`,"settings.worktreesHint":`Scegli dove creare i worktree dei nuovi workspace. I percorsi relativi sono risolti dal progetto; sono supportati percorsi assoluti Linux/macOS e Windows, $HOME, ~ e %USERPROFILE%.`,"settings.worktreesPathLabel":`Percorso worktree`,"settings.worktreesPathRequired":`Il percorso worktree è obbligatorio.`,"settings.worktreesPrefixByProject":`Aggiungi il nome del progetto come prefisso ai worktree`,"settings.worktreesPrefixByProjectHint":`Posiziona ogni worktree in una sottocartella con il nome del progetto per evitare collisioni quando più progetti condividono la stessa radice.`,"settings.shareTitle":`Condividi configurazione`,"settings.shareHint":`Esporta impostazioni, template e tag come bundle JSON. Le chiavi MCP sono escluse per sicurezza.`,"settings.exportConfig":`Esporta`,"settings.importConfig":`Importa`,"settings.exportSuccess":`Configurazione esportata`,"settings.importSuccess":`Configurazione importata`,"settings.importConfirmTitle":`Importa configurazione`,"settings.importConfirmMessage":`Questo sostituirà le tue impostazioni, template e tag attuali. Le chiavi MCP vengono preservate. Continuare?`,"settings.network.title":`Accesso di rete`,"settings.network.hint":`Controlla Kōbō da un altro dispositivo della tua LAN affidabile. Off = solo localhost. On = raggiungibile sulla rete, protetto da un token. Riavvia Kōbō dopo il cambio.`,"settings.network.enable":`Abilita accesso di rete`,"settings.network.behindProxy":`Dietro un reverse proxy`,"settings.network.behindProxyHint":`Kōbō non può più distinguere la tua macchina da una richiesta inoltrata — anche localhost dovrà presentare il token d'ora in poi. Attivalo solo se un reverse proxy (Traefik, nginx, Caddy…) si trova davanti a Kōbō.`,"settings.network.restartRequired":`Riavvia Kōbō per applicare il nuovo indirizzo di bind.`,"settings.network.token":`Token di accesso`,"settings.network.copy":`Copia`,"settings.network.copied":`Copiato`,"settings.network.regenerate":`Rigenera`,"settings.network.regenerateConfirm":`Rigenerare il token? I dispositivi connessi avranno bisogno del nuovo token.`,"settings.network.urls":`URL LAN`,"settings.network.scan":`Scansiona per connetterti`,"settings.network.noUrls":`Nessun indirizzo LAN rilevato.`,"settings.network.loadFailed":`Impossibile caricare le impostazioni di accesso di rete.`,"settings.network.updateFailed":`Impossibile aggiornare le impostazioni di accesso di rete.`,"settings.unsavedChanges.title":`Modifiche non salvate`,"settings.unsavedChanges.message":`Questo progetto ha modifiche non salvate. Cambiando progetto andranno perse.`,"settings.unsavedChanges.discard":`Scarta e cambia`,"settings.unsavedChanges.cancel":`Annulla`,"health.title":`Stato`,"health.tooltip":`Stato del sistema`,"changelog.title":`Changelog`,"changelog.tooltip":`Novità di Kōbō`,"changelog.empty":`Nessun changelog disponibile.`,"changelog.current":`corrente`,"changelog.currentVersion":`Versione corrente: v{version}`,"health.envTitle":`Ambiente`,"health.version":`Versione`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Database`,"health.dbPath":`Percorso`,"health.dbSize":`Dimensione`,"health.schemaVersion":`Versione schema`,"health.settingsSchemaVersion":`Schema impostazioni`,"health.runtimesTitle":`Runtime agente`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude non trovato nel PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`binario codex non risolvibile`,"health.workspacesTitle":`Workspace`,"health.workspacesCount":`{total} totali, {archived} archiviati`,"health.worktreesMissing":`{count} worktree mancanti sul disco`,"health.sessionsTitle":`Sessioni agente`,"health.sessionsOrphaned":`{n} sessione/sessioni orfana/e in esecuzione`,"health.integrationsTitle":`Integrazioni`,"health.integrationConfigured":`configurata`,"health.integrationMissing":`non configurata`,"health.integrationDisabled":`disabilitata`,"settings.integrationEnabled":`Attiva integrazione`,"health.activeTitle":`Stato attivo`,"health.activeQuotaBackoffs":`Quota backoff in attesa`,"health.activeWakeups":`Wakeup programmati`,"health.activeAutoLoop":`Auto-loop in esecuzione`,"health.activeAgentSessions":`Sessioni agente attive`,"health.activeDevServers":`Dev server in esecuzione`,"health.noneActive":`Nessuno.`,"health.quotaResumeAt":`riprende alle {time}`,"health.wakeupAt":`sveglia alle {time}`,"health.startedAgo":`avviata {time} fa`,"health.autoLoopReady":`pronto, in iterazione`,"health.autoLoopGrooming":`grooming in corso`,"session.started":`Sessione avviata`,"session.ended":`Sessione terminata`,"session.compacted":`Contesto compattato`,"tool.running":`In corso...`,"activity.raw_lines":`Righe di output grezze ({n})`,"activity.loading_older":`Caricamento messaggi precedenti…`,"activity.compacting":`Compattazione del contesto…`,"activity.prev_user_message":`Messaggio utente precedente`,"activity.scroll_to_bottom":`Scorri in fondo`,"chat.systemPrompt":`Prompt di sistema`,"chat.agent":`Agente`,"chat.cleanupScript":`Script di pulizia`,"chat.archiveScript":`Script di archiviazione`,"chat.setupScript":`Script di setup`,"chat.scriptDone":`Fatto`,"chat.scriptComplete":`[{phase}] Completato`,"chat.scriptError":`[{phase}] Errore: {message}`,"chat.unknownError":`sconosciuto`,"chat.you":`Tu`,"chat.session":`Sessione`,"chat.nActions":`{n} azione | {n} azioni`,"chat.lastUpdatedAt":`Ultimo aggiornamento alle {time}`,"chat.scrollToTurnTop":`Scorri all'inizio del messaggio`,"migration.backing_up":`Backup del database in corso…`,"migration.running":`Migrazione dei dati dell'agente — {processed}/{total}`,"migration.error":`Migrazione non riuscita`,"migration.backup_location":`Un backup è stato salvato in {path}. Riavvia Kōbō per riprovare.`,"migration.retry":`Riavvia Kōbō per riprovare.`,"engine.select":`Engine`,"engine.model":`Modello`,"engine.effort":`Livello di ragionamento`,"wakeup.scheduledIn":`Prossimo risveglio tra {n}s`,"wakeup.scheduledAt":`Prossimo risveglio alle {time}`,"wakeup.firing":`Risveglio in corso...`,"wakeup.reason":`Motivo: {reason}`,"wakeup.cancel":`Annulla questo risveglio`,"wakeup.pendingIndicator":`Risveglio programmato`,"cron.pendingIndicator":`{n} cron programmato/i`,"schedule.tabLabel":`Pianificazione`,"schedule.panelTitle":`Automazione`,"schedule.panelDescription":`Risvegliare questo workspace più tardi o eseguire istruzioni secondo una pianificazione.`,"schedule.activeTitle":`Pianificazioni attive`,"schedule.emptyTitle":`Nessuna pianificazione`,"schedule.emptyDescription":`Crea un wakeup singolo o un’attività ricorrente qui sotto.`,"schedule.cancelWakeup":`Annulla questo wakeup`,"schedule.cancelCron":`Elimina questa attività ricorrente`,"schedule.createTitle":`Crea una pianificazione`,"schedule.createDescription":`Scegli quando e come deve essere eseguito l'agente.`,"schedule.typeWakeup":`Wakeup singolo`,"schedule.typeRecurring":`Attività ricorrente`,"schedule.wakeupDescription":`Esegui il prompt una volta dopo un intervallo.`,"schedule.cronDescription":`Esegui il prompt periodicamente con una frequenza fissa.`,"schedule.promptHint":`Istruzioni che verranno inviate all'agente`,"schedule.frequencyTitle":`Frequenza`,"schedule.advancedDescription":`Usa un’espressione cron grezza`,"schedule.cronExpressionLabel":`Espressione cron`,"schedule.sessionModeTitle":`Sessione di esecuzione`,"schedule.modeResume":`Riprendi sessione`,"schedule.oneShotHint":`Rimuovi questa pianificazione dopo la prima esecuzione.`,"schedule.wakeupTitle":`Wakeup in attesa`,"schedule.cronsTitle":`Pianificazioni ricorrenti`,"schedule.noWakeup":`Nessun wakeup pianificato`,"schedule.noCrons":`Nessun cron pianificato`,"schedule.nextFireAt":`prossimo alle {time}`,"schedule.lastFiredAt":`ultimo {time} fa`,"schedule.addCronTitle":`Aggiungi un'attività ricorrente`,"schedule.addWakeupTitle":`Programma un wakeup`,"schedule.every":`Ogni`,"schedule.unitMinutes":`minuti`,"schedule.unitHours":`ore`,"schedule.unitDays":`giorni`,"schedule.daysDriftWarning":`L'intervallo può ridursi a 1 giorno a fine mese (limite di cron).`,"schedule.advancedExpression":`Espressione avanzata (opzionale)`,"schedule.advancedHint":`Cron grezzo (es. */15 * * * *) o {'@'}hourly/{'@'}daily — sostituisce il selettore se compilato.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Etichetta (opzionale)`,"schedule.delayMinutes":`Ritardo (minuti)`,"schedule.modeFresh":`Nuova sessione`,"schedule.oneShot":`Esegui una sola volta`,"schedule.addCronBtn":`Aggiungi cron`,"schedule.addWakeupBtn":`Programma wakeup`,"schedule.cronCreated":`Attività ricorrente aggiunta`,"schedule.wakeupCreated":`Wakeup programmato`,"askUserQuestion.title":`L'agente sta facendo una domanda`,"askUserQuestion.submit":`Invia risposta`,"askUserQuestion.multiSelectHint":`Seleziona una o più opzioni`,"askUserQuestion.otherOption":`Altro`,"askUserQuestion.otherOptionHint":`specifica nel prossimo messaggio`,"askUserQuestion.freeFormLabel":`Specifica la tua risposta`,"askUserQuestion.freeFormHint":`Questa risposta verrà inviata direttamente all'agente.`,"askUserQuestion.noPending":`Nessuna domanda in attesa`,"askUserQuestion.next":`Avanti`,"askUserQuestion.previous":`Indietro`,"askUserQuestion.cancel":`Annulla`,"askUserQuestion.cancelTooltip":`Salta questa domanda — l'agente proseguirà senza risposta`,"askUserQuestion.collapse":`Riduci il pannello della domanda`,"askUserQuestion.expand":`Espandi il pannello della domanda`,"permissionRequest.title":`L'agente vuole usare uno strumento`,"permissionRequest.allow":`Consenti`,"permissionRequest.allowOnce":`Consenti una volta`,"permissionRequest.allowTurn":`Consenti questo turno`,"permissionRequest.allowOperation":`Consenti sempre questa operazione`,"permissionRequest.allowTool":`Consenti sempre questo strumento`,"permissionRequest.deny":`Nega`,"permissionRequest.tool":`Strumento`,"permissionRequest.input":`Input`,"permissionRequest.rawInput":`Dettagli tecnici`,"permissionRequest.collapse":`Riduci il pannello dei permessi`,"permissionRequest.expand":`Espandi il pannello dei permessi`,"permissionRequest.denied":`negato dall'utente`,"workspaceStatus.awaitingUser":`in attesa della tua risposta`,"workspaceList.prOpen":`#{n} — Pull request aperta`,"workspaceList.prWatchDisabledIndicator":`Controlli PR ignorati per questo workspace`,"workspaceList.prChangesRequested":`#{n} — Modifiche richieste`,"workspaceList.attentionCiFailed":`CI fallita`,"workspaceList.attentionChangesRequested":`Modifiche richieste`,"workspaceList.attentionReadyToMerge":`Pronto per il merge`,"autoLoop.toggle":`Auto-loop`,"autoLoop.start":`Avvia l'auto-loop`,"autoLoop.prepare":`Prepara per l'auto-loop`,"autoLoop.reprepare":`Ri-prepara per l'auto-loop`,"autoLoop.reprepareTooltip":`Rilancia la fase di grooming per aggiungere o aggiornare le attività prima di riavviare il loop`,"autoLoop.prepareBusy":`Attendi che l'agente finisca prima di preparare`,"autoLoop.forceReady":`So cosa faccio — salta la preparazione`,"autoLoop.forceReadyConfirm":`Saltare la preparazione e segnare auto-loop pronto? Il loop potrebbe bloccarsi se le attività non sono atomiche.`,"autoLoop.stop":`Ferma l'auto-loop`,"autoLoop.notReady":`Esegui prima «Prepara per l'auto-loop»`,"autoLoop.noTasks":`Aggiungi prima delle attività`,"autoLoop.progress":`Auto-loop · {done}/{total} attività`,"autoLoop.preparing":`Auto-loop · preparazione`,"autoLoop.preparingTooltip":`Grooming in corso — l'agente sta creando / revisionando le attività. Il loop partirà quando chiamerà mark_auto_loop_ready.`,"autoLoop.running":`Auto-loop in corso`,"autoLoop.startInMode":`Avvia in modalità auto-loop`,"autoLoop.brainstormModelPrefix":`Brainstorm:`,"autoLoop.brainstormModelTooltip":`Modello usato solo per la sessione di brainstorming iniziale — ogni attività successiva usa il modello scelto sopra`,"autoLoop.brainstormReasoningPrefix":`Brainstorm:`,"autoLoop.brainstormReasoningTooltip":`Livello di ragionamento usato solo per la sessione di brainstorming iniziale`,"autoLoop.executionModelPrefix":`Loop:`,"autoLoop.executionModelTooltip":`Modello usato per ogni attività dell'auto-loop dopo la sessione di brainstorming iniziale`,"autoLoop.sessionMode.perTask":`Nuova sessione per attività`,"autoLoop.sessionMode.label":`Sessione:`,"autoLoop.sessionMode.perTaskTooltip":`Ogni attività avvia una nuova sessione Claude Code senza memoria delle attività precedenti`,"autoLoop.sessionMode.continuous":`Sessione continua`,"autoLoop.sessionMode.continuousTooltip":`Tutte le attività si susseguono nella stessa sessione — l'agente mantiene tutto il contesto, ma la sessione si allunga nel tempo`,"koboCommand.prepAutoloopDesc":`Preparare le attività per la modalità auto-loop (atomicità)`,"staleSessionBanner.title":`Auto-loop in corso`,"staleSessionBanner.message":`Stai visualizzando una sessione precedente — l'agente sta lavorando nella più recente.`,"staleSessionBanner.staleTitle":`Sessione precedente`,"staleSessionBanner.staleMessage":`Stai visualizzando una sessione precedente — i messaggi inviati andranno a questa sessione, non alla più recente.`,"staleSessionBanner.switchToCurrent":`Passa a quella corrente`,"network.login.title":`Accesso di rete`,"network.login.description":`Questo Kōbō richiede un token per essere controllato dalla rete. Incolla il token mostrato nelle Impostazioni sulla macchina host.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Incolla il tuo token`,"network.login.connect":`Connetti`,"network.login.invalid":`Token non valido`,"network.login.serverError":`Errore del server — riprova.`,"network.login.unreachable":`Kōbō non è raggiungibile — controlla la connessione.`,"layout.toggleWorkspaces":`Mostra/nascondi il pannello degli spazi`,"layout.togglePanel":`Mostra/nascondi il pannello laterale`},ci=`kobo:locale`,li=[`en`,`fr`,`de`,`es`,`it`];function ui(e){return li.includes(e)}function di(){let e=localStorage.getItem(ci);if(e&&ui(e))return e;let t=navigator.language.split(`-`)[0];return t&&ui(t)?(localStorage.setItem(ci,t),t):(localStorage.setItem(ci,`en`),`en`)}var fi=t({legacy:!1,locale:di(),fallbackLocale:`en`,messages:{en:ii,fr:oi,de:ri,es:ai,it:si}}),pi=5e3,mi=ye(`agent-stream`,()=>{let e=i(new Map),t=i(new Map),n=i(new Map),r=i(new Map),a=i(new Map),o=i(new Map),s=i(new Map),c=i(0);function l(e){return c.value,s.value.get(e)??!1}function u(e,t){(s.value.get(e)??!1)!==t&&(s.value.set(e,t),c.value++)}function d(t){return c.value,e.value.get(t)??[]}function f(e){return c.value,t.value.get(e)??[]}function p(e){return c.value,n.value.get(e)??[]}function m(e){return c.value,r.value.get(e)??[]}function h(e){return c.value,a.value.get(e)}function g(e){return c.value,o.value.get(e)??!0}function _(i,o,s,l,u){let d=e.value.get(i)??[],f=t.value.get(i)??[],p=n.value.get(i)??[],m=r.value.get(i)??[];if(l&&m.includes(l))return;let h=d.length===0;d.push(o),f.push(s??new Date().toISOString()),p.push(u??null),m.push(l??null),e.value.set(i,d),t.value.set(i,f),n.value.set(i,p),r.value.set(i,m),h&&l&&a.value.set(i,l),v(i,d,f,p,m),c.value++}function v(e,t,n,r,i){let s=t.length-pi;if(s<=0)return;t.splice(0,s),n.splice(0,s),r.splice(0,s),i.splice(0,s);let c=i.find(e=>typeof e==`string`);c?a.value.set(e,c):a.value.delete(e),o.value.set(e,!0)}function y(i,o,s,l){let u=e.value.get(i)??[],d=t.value.get(i)??[],f=n.value.get(i)??[],p=r.value.get(i)??[],m=new Set(p.filter(e=>typeof e==`string`)),h=[];for(let e=0;e<o.length;e++){let t=o[e];if(!t)continue;let n=l.eventIds[e]??null;n&&m.has(n)||(u.push(t),d.push(s[e]??new Date().toISOString()),f.push(l.sessionIds[e]??null),p.push(n),n&&m.add(n),h.push(e))}if(h.length===0)return h;if(e.value.set(i,u),t.value.set(i,d),n.value.set(i,f),r.value.set(i,p),!a.value.has(i)){let e=p.find(e=>typeof e==`string`);e&&a.value.set(i,e)}return v(i,u,d,f,p),c.value++,h}function b(i,s,l,u){e.value.set(i,[...s]),t.value.set(i,l?[...l]:s.map(()=>new Date().toISOString())),n.value.set(i,u?.sessionIds?[...u.sessionIds]:s.map(()=>null)),r.value.set(i,u?.eventIds?[...u.eventIds]:s.map(()=>null)),u?.oldestId?a.value.set(i,u.oldestId):a.value.delete(i),u&&typeof u.hasMoreOlder==`boolean`?o.value.set(i,u.hasMoreOlder):o.value.delete(i),c.value++}function x(i,s,l,u){if(s.length===0){o.value.set(i,u.hasMoreOlder),c.value++;return}let d=e.value.get(i)??[],f=t.value.get(i)??[],p=n.value.get(i)??[],m=r.value.get(i)??[],h=u.sessionIds??s.map(()=>null),g=u.eventIds??s.map(()=>null);e.value.set(i,[...s,...d]),t.value.set(i,[...l,...f]),n.value.set(i,[...h,...p]),r.value.set(i,[...g,...m]),u.oldestId&&a.value.set(i,u.oldestId),o.value.set(i,u.hasMoreOlder),c.value++}function S(i,a){let o=e.value.get(i),s=r.value.get(i);if(!o||!s)return;let l=s.indexOf(a);if(l===-1)return;let u=t.value.get(i),d=n.value.get(i);o.splice(l,1),s.splice(l,1),u&&u.splice(l,1),d&&d.splice(l,1),c.value++}function C(i){e.value.delete(i),t.value.delete(i),n.value.delete(i),r.value.delete(i),a.value.delete(i),o.value.delete(i),s.value.delete(i),c.value++}return{events:e,timestamps:t,sessionIds:n,eventIds:r,version:c,eventsFor:d,timestampsFor:f,sessionIdsFor:p,eventIdsFor:m,oldestIdFor:h,hasMoreOlderFor:g,isCompacting:l,setCompacting:u,append:_,merge:y,reset:b,prepend:x,removeByEventId:S,clear:C}}),hi=`/sounds`,gi=[{id:`basic-notification.mp3`,labelKey:`settings.notificationSoundBasic`},{id:`hey.mp3`,labelKey:`settings.notificationSoundHey`},{id:`warcraft-3-humain-travail.mp3`,labelKey:`settings.notificationSoundWorkspaceCreated`},{id:`travail_termine.mp3`,labelKey:`settings.notificationSoundTravailTermine`},{id:`faaah.mp3`,labelKey:`settings.notificationSoundFaaah`},{id:`ca_va_peter.mp3`,labelKey:`settings.notificationSoundCaVaPeter`},{id:`dry-fart.mp3`,labelKey:`settings.notificationSoundDryFart`},{id:`for-shure.mp3`,labelKey:`settings.notificationSoundForShure`},{id:`7eme-compagnie-03.mp3`,labelKey:`settings.notificationSoundSeptiemeCompagnie03`},{id:`aller-ftg.mp3`,labelKey:`settings.notificationSoundAllerFtg`},{id:`arrete-de-mentir.mp3`,labelKey:`settings.notificationSoundArreteDeMentir`},{id:`arretez-les-messages.mp3`,labelKey:`settings.notificationSoundArretezLesMessages`},{id:`bah-alors-on-est-nul.mp3`,labelKey:`settings.notificationSoundBahAlorsOnEstNul`},{id:`gta-v-death.mp3`,labelKey:`settings.notificationSoundGtaVDeath`},{id:`nan-tu-degages.mp3`,labelKey:`settings.notificationSoundNanTuDegages`},{id:`nan-wallah-pardon.mp3`,labelKey:`settings.notificationSoundNanWallahPardon`},{id:`ouais-cest-greg.mp3`,labelKey:`settings.notificationSoundOuaisCestGreg`},{id:`pas-ca-zinedine.mp3`,labelKey:`settings.notificationSoundPasCaZinedine`},{id:`ta-gueule.mp3`,labelKey:`settings.notificationSoundTaGueule`},{id:`tu-vas-la-fermer.mp3`,labelKey:`settings.notificationSoundTuVasLaFermer`},{id:`yaaa.mp3`,labelKey:`settings.notificationSoundYaaa`},{id:`mais-laisse-moi-dormir-zebi.mp3`,labelKey:`settings.notificationSoundMaisLaisseMoiDormirZebi`}],_i=`hey.mp3`,vi=`inherit`,yi=`none`,bi=[`audioPrCiFailedSound`,`audioPrCiRecoveredSound`,`audioPrChangesRequestedSound`,`audioPrApprovedSound`,`audioPrMergeConflictSound`,`audioPrReadyToMergeSound`,`audioPrMergedSound`],xi=[`audioPrCiFailedEnabled`,`audioPrCiFailedVolume`,`audioPrCiRecoveredEnabled`,`audioPrCiRecoveredVolume`,`audioPrChangesRequestedEnabled`,`audioPrChangesRequestedVolume`,`audioPrApprovedEnabled`,`audioPrApprovedVolume`,`audioPrMergeConflictEnabled`,`audioPrMergeConflictVolume`,`audioPrReadyToMergeEnabled`,`audioPrReadyToMergeVolume`,`audioPrMergedEnabled`,`audioPrMergedVolume`],Si={audioPrCiFailedSound:vi,audioPrCiRecoveredSound:vi,audioPrChangesRequestedSound:vi,audioPrApprovedSound:vi,audioPrMergeConflictSound:vi,audioPrReadyToMergeSound:vi,audioPrMergedSound:vi,audioPrCiFailedEnabled:!1,audioPrCiFailedVolume:1,audioPrCiRecoveredEnabled:!1,audioPrCiRecoveredVolume:1,audioPrChangesRequestedEnabled:!1,audioPrChangesRequestedVolume:1,audioPrApprovedEnabled:!1,audioPrApprovedVolume:1,audioPrMergeConflictEnabled:!1,audioPrMergeConflictVolume:1,audioPrReadyToMergeEnabled:!1,audioPrReadyToMergeVolume:1,audioPrMergedEnabled:!1,audioPrMergedVolume:1};function Ci(e){return gi.some(t=>t.id===e)}function wi(e){return e&&Ci(e)?e:_i}function Ti(e){if(e===`none`)return null;if(e!==`inherit`)return typeof e==`string`&&Ci(e)?e:void 0}function Ei(e){let t=Ti(e);return t===null?yi:t??`inherit`}function Di(e){return`${hi}/${wi(e)}`}var Oi=`mod+shift+x`,ki=[`mod`,`ctrl`,`meta`,`alt`,`shift`],Ai=new Set([`mod+w`,`mod+shift+w`,`ctrl+w`,`ctrl+shift+w`,`meta+w`,`meta+shift+w`]),ji=new Set([`control`,...ki]);function Mi(e){return Ai.has(e)}function Ni(e){if(typeof e!=`string`||e.length===0||e!==e.toLowerCase()||Mi(e))return null;let t=e.split(`+`);if(t.some(e=>e.length===0))return null;let n=t.at(-1);if(!n||!/^[a-z0-9][a-z0-9_-]*$/.test(n)||ji.has(n))return null;let r=t.slice(0,-1),i=new Set,a=-1;for(let e of r){let t=ki.indexOf(e);if(t<=a)return null;a=t,i.add(e)}return{modifiers:i,key:n}}var Pi=new Set([`control`,`meta`,`alt`,`shift`]),Fi={" ":`space`,"+":`plus`,"-":`minus`,"=":`equal`,",":`comma`,".":`period`,"/":`slash`,"\\":`backslash`,";":`semicolon`,"'":`quote`,"[":`bracketleft`,"]":`bracketright`,"`":`backquote`};function Ii(e){let t=Fi[e]??e.toLowerCase();return/^[a-z0-9][a-z0-9_-]*$/.test(t)?t:null}function Li(e=globalThis.navigator?.platform??``){return/mac|iphone|ipad|ipod/i.test(e)?`mac`:`other`}function Ri(e,t){if(e.key===`Escape`)return{status:`cancelled`};if(Pi.has(e.key.toLowerCase()))return{status:`pending`};let n=Ii(e.key);if(!n)return{status:`pending`};let r=new Set;(t===`mac`?e.metaKey:e.ctrlKey)&&r.add(`mod`),t===`mac`&&e.ctrlKey&&r.add(`ctrl`),t===`other`&&e.metaKey&&r.add(`meta`),e.altKey&&r.add(`alt`),e.shiftKey&&r.add(`shift`);let i=[...ki.filter(e=>r.has(e)),n].join(`+`);return Mi(i)?{status:`reserved`}:{status:`accepted`,shortcut:i}}function zi(e,t,n){let r=Ni(t),i=Ii(e.key);if(!r||!i||i!==r.key)return!1;let a=r.modifiers.has(`ctrl`)||n===`other`&&r.modifiers.has(`mod`),o=r.modifiers.has(`meta`)||n===`mac`&&r.modifiers.has(`mod`);return e.ctrlKey===a&&e.metaKey===o&&e.altKey===r.modifiers.has(`alt`)&&e.shiftKey===r.modifiers.has(`shift`)}function Bi(e){return{space:`Space`,arrowup:`↑`,arrowdown:`↓`,arrowleft:`←`,arrowright:`→`}[e]??e.toUpperCase()}function Vi(e,t){let n=Ni(e);return n?t===`mac`?`${[n.modifiers.has(`mod`)||n.modifiers.has(`meta`)?`⌘`:``,n.modifiers.has(`ctrl`)?`⌃`:``,n.modifiers.has(`alt`)?`⌥`:``,n.modifiers.has(`shift`)?`⇧`:``].join(``)}${Bi(n.key)}`:[n.modifiers.has(`mod`)||n.modifiers.has(`ctrl`)?`Ctrl`:``,n.modifiers.has(`meta`)?`Meta`:``,n.modifiers.has(`alt`)?`Alt`:``,n.modifiers.has(`shift`)?`Shift`:``,Bi(n.key)].filter(Boolean).join(`+`):e}var Hi=`.worktrees`;function Ui(e){return btoa(e).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}var Wi=ye(`settings`,{state:()=>({global:{defaultModelByEngine:{"claude-code":`auto`,codex:`auto`},dangerouslySkipPermissions:!0,prPromptTemplate:``,reviewPromptTemplate:``,ciFixPromptTemplate:``,finalizationPrompt:``,notionInitialPromptTemplate:``,sentryInitialPromptTemplate:``,gitConventions:``,editorCommand:``,fileManagerCommand:``,terminalCommand:``,autoPurgeOnPrMerged:!1,autoLoopMaxRetries:5,browserNotifications:!0,audioNotifications:!0,audioQuestionNotifications:!1,audioWorkspaceCreatedNotifications:!1,audioAgentErrorNotifications:!1,audioNotificationSound:`hey.mp3`,audioQuestionSound:`inherit`,audioWorkspaceCreatedSound:`inherit`,audioAgentErrorSound:`inherit`,...Si,audioNotificationVolume:1,audioQuestionVolume:1,audioWorkspaceCreatedVolume:1,audioAgentErrorVolume:1,notionStatusProperty:``,notionInProgressStatus:``,notionAssigneeProperty:``,notionUserId:``,defaultPermissionModeByEngine:{"claude-code":`plan`,codex:`plan`},notionMcpKey:``,sentryMcpKey:``,bitbucketToken:``,bitbucketUsername:``,notionEnabled:!0,sentryEnabled:!0,showThinkingBlocks:!0,whipEnabled:!1,whipShortcut:Oi,whipVolume:1,tags:[],branchPrefixes:[],setupScript:``,cleanupScript:``,cleanupScriptMode:`no-tasks`,cleanupScriptOnlyOnChanges:!1,archiveScript:``,changeSourceBranchScript:``,worktreesPath:Hi,worktreesPrefixByProject:!1,voiceEnabled:!1,voicePttKey:`alt`,voiceLanguage:`auto`,voiceModel:null,voiceCommandPath:``,voiceFfmpegPath:``,voiceTemperature:0,voicePrompt:``,voiceTranslateToEnglish:!1,voiceSuppressNonSpeechTokens:!0,flattenWorkspaceList:!1,skillSuite:`superpowers`,customReviewTemplate:``,customAutoLoopReviewGate:``,customAutoLoopGroomingIntro:``,customQaPromptTemplate:``,customBrainstormingInstruction:``},voiceModels:[],voiceModelsLoading:!1,voiceModelsDir:``,voiceRuntime:null,activeMcpServers:[],projects:[],loading:!1,showVerboseSystemMessages:localStorage.getItem(`kobo:showVerboseSystemMessages`)===`true`}),getters:{getProjectByPath:e=>t=>e.projects.find(e=>e.path===t)??null,projectPaths:e=>e.projects.map(e=>e.path)},actions:{async fetchSettings(){this.loading=!0;try{let e=await fetch(`/api/settings`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this.global=t.global,this.projects=t.projects}catch(e){console.error(`[settings store] fetchSettings failed:`,e)}finally{this.loading=!1}},async fetchActiveMcpServers(){try{let e=await fetch(`/api/settings/mcp-servers`);if(!e.ok)throw Error(`HTTP ${e.status}`);this.activeMcpServers=await e.json()}catch(e){console.error(`[settings store] fetchActiveMcpServers failed:`,e),this.activeMcpServers=[]}},async fetchGlobalDefaults(){let e=await fetch(`/api/settings/defaults`);if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()},async updateGlobal(e){try{let t=await fetch(`/api/settings/global`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.global=n}catch(e){throw console.error(`[settings store] updateGlobal failed:`,e),e}},async upsertProject(e,t){try{let n=Ui(e),r=await fetch(`/api/settings/projects/${n}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json(),a=this.projects.findIndex(t=>t.path===e);a>=0?this.projects[a]=i:this.projects.push(i)}catch(e){throw console.error(`[settings store] upsertProject failed:`,e),e}},toggleVerboseSystemMessages(){this.setVerboseSystemMessages(!this.showVerboseSystemMessages)},setVerboseSystemMessages(e){this.showVerboseSystemMessages=e,localStorage.setItem(`kobo:showVerboseSystemMessages`,String(e))},async deleteProject(e){try{let t=Ui(e),n=await fetch(`/api/settings/projects/${t}`,{method:`DELETE`});if(!n.ok)throw Error(`HTTP ${n.status}`);this.projects=this.projects.filter(t=>t.path!==e)}catch(e){throw console.error(`[settings store] deleteProject failed:`,e),e}},async fetchVoiceModels(){this.voiceModelsLoading=!0;try{let e=await fetch(`/api/voice/models`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this.voiceModels=t.available,this.voiceModelsDir=t.modelsDir,this.global.voiceModel=t.activeModel}catch(e){console.error(`[settings store] fetchVoiceModels failed:`,e)}finally{this.voiceModelsLoading=!1}},async cancelVoiceModelDownload(e){let t=await fetch(`/api/voice/models/${encodeURIComponent(e)}/download`,{method:`DELETE`});if(!t.ok&&t.status!==404)throw Error(`HTTP ${t.status}`);await this.fetchVoiceModels()},async fetchVoiceRuntime(){try{let e=await fetch(`/api/voice/runtime`);if(!e.ok)throw Error(`HTTP ${e.status}`);this.voiceRuntime=await e.json()}catch(e){console.error(`[settings store] fetchVoiceRuntime failed:`,e)}},async downloadVoiceModel(e){let t=await fetch(`/api/voice/models/${encodeURIComponent(e)}/download`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);await this.fetchVoiceModels()},async deleteVoiceModel(e){let t=await fetch(`/api/voice/models/${encodeURIComponent(e)}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);await this.fetchVoiceModels()}}}),Gi=6e3,Ki=new Map,qi=[],Ji=!1;function Yi(e){let t=Ki.get(e);return t||(t=new Audio(Di(e)),Ki.set(e,t)),t}function Xi(e,t){let n=new Audio(Di(wi(e)));n.preload=`auto`,n.volume=t,n.play().catch(()=>{})}function Zi(){`Notification`in window&&Notification.permission==="default"&&Notification.requestPermission()}function Qi(e){return typeof e!=`number`||!Number.isFinite(e)?1:Math.max(0,Math.min(1,e))}function $i(){let e=qi.shift();if(!e){Ji=!1;return}Ji=!0;let t=Yi(wi(e.soundId));t.volume=e.volume,t.currentTime=0;let n=!1,r=()=>{n||(n=!0,t.removeEventListener(`ended`,r),t.removeEventListener(`error`,r),$i())};t.addEventListener(`ended`,r,{once:!0}),t.addEventListener(`error`,r,{once:!0}),t.play().catch(r)}function ea(e,t){let n={soundId:wi(e),volume:Qi(t)};if(document.visibilityState===`hidden`){Xi(n.soundId,n.volume);return}qi.push(n),Ji||$i()}function ta(e,t){let n=Yi(wi(e));n.volume=Qi(t),n.currentTime=0,n.play().catch(()=>{})}function na(e,t,n,r,i,a){let o=Wi();if(!document.hasFocus()&&o.global.browserNotifications&&`Notification`in window&&Notification.permission===`granted`){let r=new Notification(e,{body:t,icon:`/favicon.ico`});n&&(r.onclick=()=>{window.focus(),window.location.hash=`#/workspace/${n}`,r.close()})}(a??o.global.audioNotifications)&&r!==null&&ea(r&&r.length>0?r:o.global.audioNotificationSound??`hey.mp3`,i??o.global.audioNotificationVolume)}var ra=ye(`devServer`,{state:()=>({statuses:{},logs:{}}),getters:{getStatus:e=>t=>e.statuses[t]??null},actions:{async fetchStatus(e){try{let t=await fetch(`/api/dev-server/${e}/status`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.statuses[e]=n}catch(e){console.error(`[dev-server store] fetchStatus failed:`,e)}},async startDevServer(e){try{let t=await fetch(`/api/dev-server/${e}/start`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.statuses[e]=n}catch(e){throw console.error(`[dev-server store] startDevServer failed:`,e),e}},async stopDevServer(e){try{let t=await fetch(`/api/dev-server/${e}/stop`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.statuses[e]=n}catch(e){throw console.error(`[dev-server store] stopDevServer failed:`,e),e}},async fetchLogs(e,t=200){try{let n=await fetch(`/api/dev-server/${e}/logs?tail=${t}`);if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json();return this.logs[e]=r.logs,r.logs}catch(e){return console.error(`[dev-server store] fetchLogs failed:`,e),``}},updateFromWsEvent(e,t){this.statuses[e]=t}}});function ia(e){return e.state===`OPEN`&&e.reviewDecision===`CHANGES_REQUESTED`&&e.reviewers.some(e=>e.state===`CHANGES_REQUESTED`)}function aa(e){return e.state===`OPEN`&&e.ci.rollup===`FAILURE`}function oa(e){return e?aa(e)||ia(e):!1}var sa=[`executing`,`extracting`,`brainstorming`];function ca(e){return!!e&&sa.includes(e)}var la=class extends Error{constructor(e,t){super(e),Bn(this,`code`,void 0),this.name=`WorkspaceActionError`,this.code=t}};function ua(e){return e===`running`?`in_progress`:e}var da=5e3,fa=500,pa=null,ma=0,ha=0,ga=new Map,_a=new Map,va=new Map,ya=new Map;function ba(e){_a.set(e,(_a.get(e)??0)+1)}function xa(e,t,n){let r={...e},i=new Set([...Object.keys(e),...Object.keys(t)]);for(let a of i){let i=t[a],o=e[a],s=(_a.get(a)??0)!==(n.get(a)??0),c=i?Date.parse(i.updatedAt):NaN,l=o?Date.parse(o.updatedAt):NaN;(s||Number.isFinite(c)&&c>l)&&(i?r[a]=i:delete r[a])}return r}function Sa(e){return e===`claude-code`?`claude-code`:null}var q=ye(`workspace`,{state:()=>({workspaces:[],selectedWorkspaceId:null,tasks:[],activityFeeds:{},activityFeedIds:{},activityCounts:{},subagents:{},agentTodos:{},sessions:[],selectedSessionId:null,archivedWorkspaces:[],archivedLoaded:!1,loading:!1,loadingOlderEvents:!1,hasMoreEvents:{},providerUsage:{},chatDraft:``,queuedMessages:{},activeAgentSessionIds:{},gitRefreshTrigger:0,gitStatsCache:{},pendingWakeups:{},pendingQuotaBackoffs:{},pendingDeferred:{},pendingQueue:{},prSnapshots:{},autoLoopStates:{},crons:{}}),getters:{selectedWorkspace:e=>e.workspaces.find(t=>t.id===e.selectedWorkspaceId)??e.archivedWorkspaces.find(t=>t.id===e.selectedWorkspaceId)??null,needsAttention(e){return e.workspaces.filter(t=>[`error`,`quota`,`awaiting-user`].includes(t.status)||oa(e.prSnapshots[t.id])||!ca(t.status)&&!!e.prSnapshots[t.id]?.readyToMerge)},running(e){return e.workspaces.filter(t=>ca(t.status)&&!oa(e.prSnapshots[t.id]))},idle(e){return e.workspaces.filter(t=>[`completed`,`idle`,`created`].includes(t.status)&&!oa(e.prSnapshots[t.id])&&!e.prSnapshots[t.id]?.readyToMerge)},favorites(e){return e.workspaces.filter(e=>e.favoritedAt!==null)},currentAgentTodos:e=>e.selectedWorkspaceId?e.agentTodos[e.selectedWorkspaceId]??[]:[],currentSubagents:e=>{if(!e.selectedWorkspaceId)return[];let t=e.subagents[e.selectedWorkspaceId]??{};return Object.values(t).sort((e,t)=>e.startedAt.localeCompare(t.startedAt))},activityFeed:e=>{if(!e.selectedWorkspaceId)return[];let t=e.activityFeeds[e.selectedWorkspaceId]??[];if(!e.selectedSessionId)return e.sessions.length===0?t:[];let n=e.sessions.find(t=>t.id===e.selectedSessionId)?.engineSessionId??null,r=e.sessions.length>0?e.sessions[e.sessions.length-1].id:null,i=e.selectedSessionId===r;return t.filter(t=>t.sessionId?t.sessionId===e.selectedSessionId||n!==null&&t.sessionId===n:i)},acceptanceCriteria:e=>e.tasks.filter(e=>e.isAcceptanceCriterion),archived:e=>e.archivedWorkspaces,currentProviderUsage(e){let t=e.workspaces.find(t=>t.id===e.selectedWorkspaceId);if(!t)return null;let n=Sa(t.engine);return n?e.providerUsage[n]??null:null}},actions:{clearWorkspaceLocalState(e){delete this.activityFeeds[e],delete this.activityFeedIds[e],delete this.activityCounts[e],delete this.subagents[e],delete this.agentTodos[e],delete this.hasMoreEvents[e],delete this.gitStatsCache[e],delete this.pendingWakeups[e],delete this.pendingQuotaBackoffs[e],delete this.pendingDeferred[e],delete this.pendingQueue[e],delete this.prSnapshots[e],delete this.autoLoopStates[e],delete this.crons[e],delete this.activeAgentSessionIds[e];for(let t of Object.keys(this.queuedMessages))t.startsWith(`${e}:`)&&delete this.queuedMessages[t];ga.delete(e),_a.delete(e),va.delete(e),ya.delete(e),mi().clear(e),localStorage.removeItem(`kobo:session:${e}`)},async toggleFavorite(e){let t=this.workspaces.find(t=>t.id===e);if(!t)return;let n=t.favoritedAt,r=n===null,i=r?new Date().toISOString():null;this.workspaces=this.workspaces.map(t=>t.id===e?{...t,favoritedAt:i}:t);try{let t=await fetch(`/api/workspaces/${e}/favorite`,{method:r?`POST`:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t)}catch(t){throw this.workspaces=this.workspaces.map(t=>t.id===e?{...t,favoritedAt:n}:t),t}},async togglePrWatch(e){let t=this.workspaces.find(t=>t.id===e);if(!t)return;let n=t.prWatchDisabledAt===null,r=n?new Date().toISOString():null;this.workspaces=this.workspaces.map(t=>t.id===e?{...t,prWatchDisabledAt:r}:t);try{let t=await fetch(`/api/workspaces/${e}/pr-watch-disabled`,{method:n?`POST`:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);if(n){let n=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t),delete this.prSnapshots[e],ba(e)}else{let{workspace:n,prSnapshot:r}=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t),r?this.prSnapshots[e]=r:delete this.prSnapshots[e],ba(e)}}catch(n){throw this.workspaces=this.workspaces.map(n=>n.id===e?{...n,prWatchDisabledAt:t.prWatchDisabledAt}:n),n}},async setWorkspaceTags(e,t){let n=this.workspaces.find(t=>t.id===e);if(!n)return;let r=n.tags,i=[...t];this.workspaces=this.workspaces.map(t=>t.id===e?{...t,tags:i}:t);try{let n=await fetch(`/api/workspaces/${e}/tags`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tags:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json();this.workspaces=this.workspaces.map(t=>t.id===e?r:t)}catch(t){throw this.workspaces=this.workspaces.map(t=>t.id===e?{...t,tags:r}:t),t}},async fetchOrphanWorktrees(e){let t=`/api/git/orphan-worktrees?projectPath=${encodeURIComponent(e)}`,n=await fetch(t,{cache:`no-store`});if(!n.ok)throw Error(`HTTP ${n.status}`);return n.json()},async fetchWorkspaces(){this.loading=!0;try{let e=await fetch(`/api/workspaces`);if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this.workspaces=t.workspaces??t;for(let e of this.workspaces)[`completed`,`idle`,`error`,`quota`].includes(e.status)&&this.finalizeRunningSubagents(e.id)}catch(e){console.error(`[workspace store] fetchWorkspaces failed:`,e)}finally{this.loading=!1}},async fetchArchivedWorkspaces(){try{let e=await fetch(`/api/workspaces/archived`);if(!e.ok)throw Error(`HTTP ${e.status}`);this.archivedWorkspaces=await e.json(),this.archivedLoaded=!0}catch(e){console.error(`[workspace store] fetchArchivedWorkspaces failed:`,e)}},async fetchWorkspaceDetails(e){let t=(ya.get(e)??0)+1;ya.set(e,t);try{let n=await fetch(`/api/workspaces/${e}`);if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json();if(this.selectedWorkspaceId!==e||ya.get(e)!==t)return;let i=r.workspace??r,a=this.workspaces.findIndex(t=>t.id===e);if(a>=0)this.workspaces[a]={...this.workspaces[a],...i};else{let t=this.archivedWorkspaces.findIndex(t=>t.id===e);t>=0?this.archivedWorkspaces[t]={...this.archivedWorkspaces[t],...i}:i?.archivedAt&&this.archivedWorkspaces.unshift(i)}r.tasks&&(this.tasks=r.tasks)}catch(e){console.error(`[workspace store] fetchWorkspaceDetails failed:`,e)}},async createWorkspace(e){try{let t=await fetch(`/api/workspaces`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(typeof e.error==`string`?e.error:`HTTP ${t.status}`)}let n=t.headers.get(`X-Kobo-Branch-Adjusted`)===`1`,r=t.headers.get(`X-Kobo-Source-Fallback`)===`local`,i=await t.json(),a=i.workspace??i,o=this.workspaces.findIndex(e=>e.id===a.id);return o>=0?this.workspaces[o]=a:this.workspaces.push(a),e.autoLoop&&this.fetchAutoLoopStates(),a._branchAdjusted=n,a._sourceFallback=r,a}catch(e){throw console.error(`[workspace store] createWorkspace failed:`,e),e}},async startWorkspace(e,t,n,r){try{let i=await fetch(`/api/workspaces/${e}/start`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:t,agentSessionId:n,resume:r})});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??`HTTP ${i.status}`)}await this.fetchWorkspaces()}catch(e){throw console.error(`[workspace store] startWorkspace failed:`,e),e}},async previewEngineHandoff(e,t){let n=await fetch(`/api/workspaces/${e}/engine-handoff-preview`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({engine:t})}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);return r.handoff},async switchEngine(e,t){let n=await fetch(`/api/workspaces/${e}/switch-engine`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);let i=r.workspace,a=this.workspaces.findIndex(t=>t.id===e);return a>=0&&(this.workspaces[a]=i),await this.fetchSessions(e,r.sessionId),{sessionId:r.sessionId}},async stopWorkspace(e){try{let t=await fetch(`/api/workspaces/${e}/stop`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);await this.fetchWorkspaces()}catch(e){throw console.error(`[workspace store] stopWorkspace failed:`,e),e}},async interruptAgent(e,t={}){try{let n=await fetch(`/api/workspaces/${e}/interrupt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>void 0),t=typeof e==`object`&&e&&!Array.isArray(e)?e:void 0,r=typeof t?.error==`string`?t.error:`HTTP ${n.status}`,i=t?.code;throw new la(r,n.status===409&&(i===`no_agent_running`||i===`session_not_active`)||n.status===500&&i===`interrupt_failed`?i:void 0)}}catch(e){throw console.error(`[workspace store] interruptAgent failed:`,e),e}},async deleteWorkspace(e,t){try{let n=await fetch(`/api/workspaces/${e}`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t??{})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=[];if(n.status===200){let e=await n.json().catch(()=>({}));r=Array.isArray(e.warnings)?e.warnings:[]}return this.workspaces=this.workspaces.filter(t=>t.id!==e),this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e),this.clearWorkspaceLocalState(e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]),{warnings:r}}catch(e){throw console.error(`[workspace store] deleteWorkspace failed:`,e),e}},async deleteAllArchived(e){try{let t=this.archivedWorkspaces.map(e=>e.id),n=await fetch(`/api/workspaces/archived`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e??{})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json().catch(()=>({})),i=typeof r.deleted==`number`?r.deleted:0,a=Array.isArray(r.warnings)?r.warnings:[];this.archivedWorkspaces=[];for(let e of t)this.clearWorkspaceLocalState(e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]);return{deleted:i,warnings:a,ids:t}}catch(e){throw console.error(`[workspace store] deleteAllArchived failed:`,e),e}},async updateModel(e,t){try{let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateModel failed:`,e),e}},async updateWorkspaceDescription(e,t){let n=this.workspaces.findIndex(t=>t.id===e);if(n<0)throw Error(`Workspace '${e}' not found in store`);let r=this.workspaces[n].description;this.workspaces[n]={...this.workspaces[n],description:t};try{let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({description:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json();this.workspaces=this.workspaces.map(t=>t.id===e?{...t,...r}:t)}catch(n){let i=this.workspaces.findIndex(t=>t.id===e);throw i>=0&&this.workspaces[i].description===t&&(this.workspaces[i]={...this.workspaces[i],description:r}),n}},async updateReasoningEffort(e,t){try{let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({reasoningEffort:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateReasoningEffort failed:`,e),e}},async renameWorkspaceBranch(e,t){let n=await fetch(`/api/workspaces/${e}/rename-branch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newName:t})}),r=await n.json().catch(()=>null);if(!n.ok)throw new la(r?.error??`Rename failed`,r?.code);let i=r,a=this.workspaces.findIndex(t=>t.id===e);return a>=0&&(this.workspaces[a]=i),i},async resyncWorkspaceBranch(e){let t=await fetch(`/api/workspaces/${e}/resync-branch`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();if(n.changed){let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]={...this.workspaces[t],workingBranch:n.workingBranch})}return n},async updateAgentPermissionMode(e,t){try{let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({agentPermissionMode:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateAgentPermissionMode failed:`,e),e}},async pushBranch(e,t={}){let n=await fetch(`/api/workspaces/${e}/push`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({force:t.force===!0})});if(!n.ok){let e=await n.json().catch(()=>({error:`Push failed`}));throw new la(e.error??`Push failed`,e.code)}},async fetchGitStats(e,t={}){let n=`/api/workspaces/${e}/git-stats${t.freshFetch?`?freshFetch=1`:``}`,r=await fetch(n,{signal:t.signal});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json();return this.gitStatsCache[e]=i,i},async fetchBranchDivergence(e,t={}){let n=`/api/workspaces/${e}/branch-divergence?limit=${t.limit??50}`,r=await fetch(n,{signal:t.signal});if(!r.ok)throw Error(`HTTP ${r.status}`);return await r.json()},async openPullRequest(e){let t=await fetch(`/api/workspaces/${e}/open-pr`,{method:`POST`}),n=await t.json().catch(()=>null);if(!t.ok)throw new la(n?.error??`Open PR failed`,n?.code);return n},async archiveWorkspace(e){try{let t=await fetch(`/api/workspaces/${e}/archive`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();return this.workspaces=this.workspaces.filter(t=>t.id!==e),this.archivedLoaded&&this.archivedWorkspaces.unshift(n),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]),n}catch(e){throw console.error(`[workspace store] archiveWorkspace failed:`,e),e}},async unarchiveWorkspace(e){try{let t=await fetch(`/api/workspaces/${e}/unarchive`,{method:`POST`});if(!t.ok){if(t.status===409){let e=await t.json().catch(()=>({})),n=Error(e.error??`worktree-purged`);throw n.code=`worktree-purged`,n}throw Error(`HTTP ${t.status}`)}let n=await t.json();return this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e),this.workspaces.unshift(n),n}catch(e){throw console.error(`[workspace store] unarchiveWorkspace failed:`,e),e}},async createTask(e,t,n){try{let r=await fetch(`/api/workspaces/${e}/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t,isAcceptanceCriterion:n})});if(!r.ok)throw Error(`HTTP ${r.status}`);await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] createTask failed:`,e),e}},async updateTaskTitle(e,t,n){try{let r=await fetch(`/api/workspaces/${e}/tasks/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:n})});if(!r.ok)throw Error(`HTTP ${r.status}`);await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] updateTaskTitle failed:`,e),e}},async deleteTask(e,t){try{let n=await fetch(`/api/workspaces/${e}/tasks/${t}`,{method:`DELETE`});if(!n.ok)throw Error(`HTTP ${n.status}`);await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] deleteTask failed:`,e),e}},selectWorkspace(e){this.selectedWorkspaceId=e,this.selectedSessionId=null,this.sessions=[],this.tasks=[],this.markRead(e),this.fetchWorkspaceDetails(e),this.fetchSessions(e),this.fetchPendingQuotaBackoff(e),this.fetchGitStats(e).catch(()=>{}),this.activityFeeds[e]?.length||Fa().subscribe(e)},async fetchSessions(e,t){let n=(va.get(e)??0)+1;va.set(e,n);try{let r=await fetch(`/api/workspaces/${e}/sessions`);if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json();if(this.selectedWorkspaceId!==e||va.get(e)!==n)return;if(this.sessions=i,t&&this.sessions.some(e=>e.id===t)){this.selectSession(t);return}let a=this.selectedSessionId&&this.sessions.some(e=>e.id===this.selectedSessionId);if(this.sessions.length>0&&!a){let t=localStorage.getItem(`kobo:session:${e}`),n=t?this.sessions.find(e=>e.id===t):null;this.selectSession(n?n.id:this.sessions[0].id)}}catch(e){console.error(`[workspace store] fetchSessions failed:`,e)}},async fetchOlderEvents(e){if(this.loadingOlderEvents||this.hasMoreEvents[e]===!1)return!1;let t=this.activityFeeds[e];if(!t?.length)return!1;let n=t[0].id;this.loadingOlderEvents=!0;try{let t=await fetch(`/api/workspaces/${e}/events?before=${encodeURIComponent(n)}&limit=100`);if(!t.ok)throw Error(`HTTP ${t.status}`);let r=await t.json();if(this.hasMoreEvents[e]=r.hasMore,r.events.length>0){let e=Fa();for(let t of r.events)e._routeMessage(t)}return r.events.length>0}catch(e){return console.error(`[workspace store] fetchOlderEvents failed:`,e),!1}finally{this.loadingOlderEvents=!1}},selectSession(e){this.selectedSessionId=e,this.selectedWorkspaceId&&localStorage.setItem(`kobo:session:${this.selectedWorkspaceId}`,e)},async createSession(e){try{let t=await fetch(`/api/workspaces/${e}/sessions`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let n=await t.json();return this.sessions.unshift(n),this.selectSession(n.id),n}catch(e){throw console.error(`[workspace store] createSession failed:`,e),e}},async renameWorkspace(e,t){let n=await fetch(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]={...this.workspaces[i],...r});let a=this.archivedWorkspaces.findIndex(t=>t.id===e);a>=0&&(this.archivedWorkspaces[a]={...this.archivedWorkspaces[a],...r})},async renameSession(e,t,n){let r=await fetch(`/api/workspaces/${e}/sessions/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:n})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}let i=await r.json().catch(()=>null),a=this.sessions.find(e=>e.id===t);a&&(a.name=i?.name??n)},async deleteSession(e,t){let n=await fetch(`/api/workspaces/${e}/sessions/${t}`,{method:`DELETE`}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);let i=this.selectedSessionId===t,a=r.workspace;if(a){let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]=a)}await this.fetchSessions(e),i&&this.selectedWorkspaceId===e&&this.selectSession(this.sessions[0]?.id??null)},addActivityItem(e,t){if(this.activityFeeds[e]||(this.activityFeeds[e]=[]),this.activityFeedIds[e]||(this.activityFeedIds[e]=new Set),this.activityCounts[e]||(this.activityCounts[e]={toolUses:0,agentMessages:0,userMessages:0,errors:0}),t.meta?.sender!==`user`&&t.meta?.sender!==`system-prompt`)for(let t of this.activityFeeds[e])t.meta?.pending&&(t.meta.pending=!1);if(!this.activityFeedIds[e].has(t.id)){this.activityFeedIds[e].add(t.id),this.activityFeeds[e].push(t);let n=this.activityCounts[e];t.type===`tool_use`?n.toolUses++:t.type===`error`&&n.errors++,t.meta?.sender===`user`?n.userMessages++:t.type===`text`&&t.meta?.sender!==`system-prompt`&&n.agentMessages++}let n=this.activityFeeds[e];if(n.length>da){let t=n.splice(0,n.length-da),r=this.activityFeedIds[e];for(let e of t)r.delete(e.id)}},removeActivityItem(e,t){let n=this.activityFeeds[e],r=this.activityFeedIds[e];if(!n||!r)return;let i=n.findIndex(e=>e.id===t);if(i<0)return;let[a]=n.splice(i,1);r.delete(t);let o=this.activityCounts[e];o&&a&&(a.type===`tool_use`?o.toolUses=Math.max(0,o.toolUses-1):a.type===`error`&&(o.errors=Math.max(0,o.errors-1)),a.meta?.sender===`user`?o.userMessages=Math.max(0,o.userMessages-1):a.type===`text`&&a.meta?.sender!==`system-prompt`&&(o.agentMessages=Math.max(0,o.agentMessages-1)))},clearActivityFeed(e){e?(delete this.activityFeeds[e],delete this.activityFeedIds[e],delete this.activityCounts[e]):(this.activityFeeds={},this.activityFeedIds={},this.activityCounts={})},applyUsageSnapshot(e){this.providerUsage[e.providerId]=e.snapshot},async requestUsageRefresh(e){try{await fetch(`/api/usage/${e}/refresh`,{method:`POST`})}catch(e){console.error(`[workspace store] requestUsageRefresh failed:`,e)}},triggerGitRefresh(){this.gitRefreshTrigger++,this.schedulePrSnapshotsRefresh()},schedulePrSnapshotsRefresh(){pa!==null&&clearTimeout(pa),pa=setTimeout(()=>{pa=null,this.fetchPrSnapshots()},fa)},async fetchPrSnapshots(){let e=++ha,t=new Map(_a);try{let n=await fetch(`/api/workspaces/pr-states`,{cache:`no-store`});if(!n.ok)return;let r=await n.json();if(e!==ha)return;this.prSnapshots=xa(r,this.prSnapshots,t)}catch(e){console.error(`[workspace-store] fetchPrSnapshots failed:`,e)}},async fetchWorkspacesInfo(){let e=++ma,t=new Map(ga),n=new Map(_a);try{let r=await fetch(`/api/workspaces/info`,{cache:`no-store`});if(!r.ok)return;let i=await r.json();if(e!==ma)return;let a=new Map(this.workspaces.map(e=>[e.id,e]));this.workspaces=i.workspaces.map(e=>{let n=a.get(e.id),r=(ga.get(e.id)??0)!==(t.get(e.id)??0);return n&&r?{...e,...n}:e});for(let e of this.workspaces)[`completed`,`idle`,`error`,`quota`].includes(e.status)&&this.finalizeRunningSubagents(e.id);this.prSnapshots=xa(i.prSnapshots,this.prSnapshots,n);let o={...this.gitStatsCache};for(let[e,t]of Object.entries(i.gitStats)){let n=o[e];(!n||(t.computedAt??0)>=(n.computedAt??0))&&(o[e]=t)}this.gitStatsCache=o}catch(e){console.error(`[workspace-store] fetchWorkspacesInfo failed:`,e)}},async refreshPrSnapshot(e){try{let t=await fetch(`/api/workspaces/pr-snapshot/refresh/${e}`,{method:`POST`});if(t.status===404){let t={...this.prSnapshots};return delete t[e],this.prSnapshots=t,ba(e),null}if(!t.ok)return console.error(`[workspace-store] refreshPrSnapshot non-OK:`,t.status),null;let n=await t.json();return this.prSnapshots={...this.prSnapshots,[e]:n.snapshot},ba(e),n.snapshot}catch(e){return console.error(`[workspace-store] refreshPrSnapshot failed:`,e),null}},async fetchAutoLoopStates(){try{let e=await fetch(`/api/workspaces/auto-loop-states`,{cache:`no-store`});if(!e.ok)return;let t=await e.json();this.autoLoopStates=t}catch(e){console.error(`[workspace-store] fetchAutoLoopStates failed:`,e)}},async enableAutoLoop(e){let t=this.workspaces.find(t=>t.id===e);if(t&&t.agentPermissionMode===`plan`)try{await this.updateAgentPermissionMode(e,`bypass`)}catch{}let n=await fetch(`/api/workspaces/${e}/auto-loop`,{method:`POST`});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}await this.fetchAutoLoopStates()},async disableAutoLoop(e){let t=await fetch(`/api/workspaces/${e}/auto-loop`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}await this.fetchAutoLoopStates()},async forceAutoLoopReady(e){let t=await fetch(`/api/workspaces/${e}/auto-loop-ready`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);await this.fetchAutoLoopStates()},setAutoLoopState(e,t){this.autoLoopStates[e]=t},clearAutoLoopState(e){delete this.autoLoopStates[e]},async fetchCrons(e){try{let t=await fetch(`/api/workspaces/${e}/crons`);if(!t.ok)return;let n=await t.json();this.crons[e]=n.crons}catch(e){console.error(`[workspace-store] fetchCrons failed:`,e)}},async cancelCron(e,t){let n=this.crons[e]??[];this.crons[e]=n.filter(e=>e.id!==t);try{let n=await fetch(`/api/workspaces/${e}/crons/${t}`,{method:`DELETE`});if(!n.ok)throw Error(`HTTP ${n.status}`)}catch(t){throw this.crons[e]=n,t}},async createCron(e,t){let n=await fetch(`/api/workspaces/${e}/crons`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}await this.fetchCrons(e)},async scheduleManualWakeup(e,t){let n=await fetch(`/api/workspaces/${e}/pending-wakeup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json();r.pending&&(this.pendingWakeups[e]=r.pending)},async fetchPendingWakeup(e){try{let t=await fetch(`/api/workspaces/${e}/pending-wakeup`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();n?this.pendingWakeups[e]=n:delete this.pendingWakeups[e]}catch(e){console.error(`[workspace-store] fetchPendingWakeup failed:`,e)}},setPendingWakeup(e,t){this.pendingWakeups[e]=t},clearPendingWakeup(e){delete this.pendingWakeups[e]},async cancelPendingWakeup(e){let t=this.pendingWakeups[e]!==void 0;delete this.pendingWakeups[e];try{let t=await fetch(`/api/workspaces/${e}/pending-wakeup`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`)}catch(n){console.error(`[workspace-store] cancelPendingWakeup failed:`,n),t&&await this.fetchPendingWakeup(e)}},async fetchPendingQuotaBackoff(e){try{let t=await fetch(`/api/workspaces/${e}/quota-backoff`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();n?this.pendingQuotaBackoffs[e]=n:delete this.pendingQuotaBackoffs[e]}catch(e){console.error(`[workspace-store] fetchPendingQuotaBackoff failed:`,e)}},setPendingQuotaBackoff(e,t){this.pendingQuotaBackoffs[e]=t},clearPendingQuotaBackoff(e){delete this.pendingQuotaBackoffs[e]},async cancelQuotaBackoff(e){let t=this.pendingQuotaBackoffs[e]!==void 0;delete this.pendingQuotaBackoffs[e];try{let t=await fetch(`/api/workspaces/${e}/quota-backoff`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`)}catch(n){console.error(`[workspace-store] cancelQuotaBackoff failed:`,n),t&&await this.fetchPendingQuotaBackoff(e)}},enqueuePending(e,t){let n=this.pendingQueue[e]??[];n.some(e=>e.toolCallId===t.toolCallId)||(n.push(t),this.pendingQueue[e]=n,t.kind===`question`&&(this.pendingDeferred[e]={toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,agentSessionId:t.agentSessionId}))},peekPending(e){return this.pendingQueue[e]?.[0]},dequeuePending(e){let t=this.pendingQueue[e];if(!t||t.length===0)return;let n=t.shift();t.length===0&&delete this.pendingQueue[e];let r=this.pendingQueue[e]?.[0];return r&&r.kind===`question`?this.pendingDeferred[e]={toolCallId:r.toolCallId,toolName:r.toolName,input:r.input,agentSessionId:r.agentSessionId}:delete this.pendingDeferred[e],n},clearPendingForSession(e,t){if(t===null)return;let n=this.pendingQueue[e];if(!n)return;let r=n.filter(e=>e.agentSessionId!==t);r.length===0?delete this.pendingQueue[e]:this.pendingQueue[e]=r;let i=this.pendingDeferred[e];i&&i.agentSessionId===t&&delete this.pendingDeferred[e]},clearAllPending(e){delete this.pendingQueue[e],delete this.pendingDeferred[e]},setPendingDeferred(e,t){this.enqueuePending(e,{kind:`question`,agentSessionId:t.agentSessionId,toolCallId:t.toolCallId,toolName:t.toolName,input:t.input})},clearPendingDeferred(e,t=null){if(t===null){this.clearAllPending(e);return}this.clearPendingForSession(e,t)},getPendingDeferred(e){let t=this.peekPending(e);if(t?.kind===`question`)return{toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,agentSessionId:t.agentSessionId}},async submitDeferredAnswer(e,t,n,r,i){let a=await fetch(`/api/workspaces/${e}/deferred-tool-use/answer`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answers:t,toolCallId:n,awaitingFreeForm:r,response:i})});if(!a.ok){let t=(await a.json().catch(()=>({}))).error??`HTTP ${a.status}`;if(/no deferred tool use pending|no agent running|no active engine process|no pending callback/i.test(t)){console.warn(`[workspace] submitDeferredAnswer: deferred callback expired — clearing zombie panel locally`),this.dequeuePending(e),this.fetchWorkspaces();return}throw Error(t)}this.dequeuePending(e),this.fetchWorkspaces()},async cancelDeferredAnswer(e,t,n){let r=await fetch(`/api/workspaces/${e}/deferred-tool-use/cancel`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reason:t,toolCallId:n})});if(!r.ok){let t=(await r.json().catch(()=>({}))).error??`HTTP ${r.status}`;if(/no deferred tool use pending/i.test(t)){console.warn(`[workspace] cancelDeferredAnswer: backend has no pending — clearing zombie panel locally`),this.dequeuePending(e),this.fetchWorkspaces();return}throw Error(t)}this.dequeuePending(e),this.fetchWorkspaces()},async submitDeferredPermission(e,t,n,r,i=`once`){let a=await fetch(`/api/workspaces/${e}/deferred-permission/decision`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({toolCallId:t,decision:n,reason:r,scope:i})});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error??`HTTP ${a.status}`)}this.dequeuePending(e),this.fetchWorkspaces()},updateAgentTodos(e,t){this.agentTodos[e]=t},agentTaskCreate(e,t,n){let r=this.agentTodos[e]?[...this.agentTodos[e]]:[];r.some(e=>e.id===t)||(r.push({id:t,content:n.subject||n.description||``,status:`pending`,activeForm:n.activeForm}),this.agentTodos[e]=r)},agentTaskSetNumber(e,t,n){let r=this.agentTodos[e];r&&(this.agentTodos[e]=r.map(e=>e.id===t?{...e,taskNumber:n}:e))},agentTaskUpdate(e,t,n){let r=this.agentTodos[e];if(r){if(n.status===`deleted`){this.agentTodos[e]=r.filter(e=>e.taskNumber!==t);return}this.agentTodos[e]=r.map(e=>e.taskNumber===t?{...e,status:n.status?ua(n.status):e.status,content:n.content??e.content,activeForm:n.activeForm??e.activeForm}:e)}},finalizeRunningSubagents(e){let t=this.subagents[e];if(!t)return;let n=new Date().toISOString();for(let e of Object.keys(t)){let r=t[e];r.status===`running`&&(t[e]={...r,status:`done`,updatedAt:n})}},upsertSubagent(e,t){this.subagents[e]||(this.subagents[e]={});let n=this.subagents[e][t.toolUseId],r=new Date().toISOString(),i=n?.status===`done`?`done`:t.status??n?.status??`running`;this.subagents[e][t.toolUseId]={toolUseId:t.toolUseId,description:t.description??n?.description??``,taskType:t.taskType??n?.taskType,status:i,lastToolName:t.lastToolName??n?.lastToolName,lastDescription:t.lastDescription??n?.lastDescription,totalTokens:t.totalTokens??n?.totalTokens,toolUses:t.toolUses??n?.toolUses,durationMs:t.durationMs??n?.durationMs,startedAt:n?.startedAt??r,updatedAt:r}},async markRead(e){try{let t=await fetch(`/api/workspaces/${e}/mark-read`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=this.workspaces.findIndex(t=>t.id===e);n>=0&&(this.workspaces[n]={...this.workspaces[n],hasUnread:!1})}catch(e){console.error(`[workspace store] markRead failed:`,e)}},async purgeWorktree(e){try{let t=await fetch(`/api/workspaces/${e}/purge-worktree`,{method:`POST`}),n=await t.json();if(!t.ok)return{ok:!1,error:n.error??`HTTP ${t.status}`};let r=n.workspace;return r&&(this.updateWorkspaceFromEvent(e,{archivedAt:r.archivedAt,worktreePurgedAt:r.worktreePurgedAt,worktreePurgeRestoreData:r.worktreePurgeRestoreData}),r.archivedAt&&this.archivedLoaded&&(this.archivedWorkspaces.some(t=>t.id===e)||this.archivedWorkspaces.unshift(r),this.workspaces=this.workspaces.filter(t=>t.id!==e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]))),{ok:!0,warnings:n.warnings??[]}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}},async dismissPrAttention(e,t){let n=this.prSnapshots[e];if(n)try{let r=await fetch(`/api/workspaces/${e}/dismiss-pr-attention`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t,prUpdatedAt:n.updatedAt})});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=t===`changes-requested`?{prChangesDismissedAt:n.updatedAt}:{prCiFailureDismissedAt:n.updatedAt};this.updateWorkspaceFromEvent(e,i)}catch(e){console.error(`[workspace store] dismissPrAttention failed:`,e)}},async restorePrAttention(e,t){try{let n=await fetch(`/api/workspaces/${e}/restore-pr-attention`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t})});if(!n.ok)throw Error(`HTTP ${n.status}`);let r=t===`changes-requested`?{prChangesDismissedAt:null}:{prCiFailureDismissedAt:null};this.updateWorkspaceFromEvent(e,r)}catch(e){console.error(`[workspace store] restorePrAttention failed:`,e)}},queuedMessageKey(e,t){return`${e}:${t}`},getQueuedMessage(e,t){return t?this.queuedMessages[this.queuedMessageKey(e,t)]:void 0},queueMessage(e,t,n){this.queuedMessages[this.queuedMessageKey(e,n)]={content:t,sessionId:n}},cancelQueuedMessage(e,t){t&&delete this.queuedMessages[this.queuedMessageKey(e,t)]},flushQueuedMessage(e,t){let n=this.getQueuedMessage(e,t);n&&(this.cancelQueuedMessage(e,t),Fa().sendChatMessage(e,n.content,t))},setActiveAgentSession(e,t){this.activeAgentSessionIds[e]=t},clearActiveAgentSession(e,t){this.activeAgentSessionIds[e]===t&&delete this.activeAgentSessionIds[e]},clearActiveAgentSessionOwner(e){delete this.activeAgentSessionIds[e]},updateWorkspaceFromEvent(e,t){ga.set(e,(ga.get(e)??0)+1);let n=this.workspaces.findIndex(t=>t.id===e);if(n>=0&&(this.workspaces[n]={...this.workspaces[n],...t}),t.status&&[`completed`,`idle`,`error`,`quota`].includes(t.status)){let t=this.activityFeeds[e];if(t)for(let e of t)e.meta?.pending&&(e.meta.pending=!1);let n=this.subagents[e];if(n)for(let[e,t]of Object.entries(n))t.status===`running`&&(n[e]={...t,status:`done`})}}}}),J=fi.global.t,Ca={"pr:ci-failed":{soundKey:`audioPrCiFailedSound`,enabledKey:`audioPrCiFailedEnabled`,volumeKey:`audioPrCiFailedVolume`},"pr:ci-recovered":{soundKey:`audioPrCiRecoveredSound`,enabledKey:`audioPrCiRecoveredEnabled`,volumeKey:`audioPrCiRecoveredVolume`},"pr:changes-requested":{soundKey:`audioPrChangesRequestedSound`,enabledKey:`audioPrChangesRequestedEnabled`,volumeKey:`audioPrChangesRequestedVolume`},"pr:approved":{soundKey:`audioPrApprovedSound`,enabledKey:`audioPrApprovedEnabled`,volumeKey:`audioPrApprovedVolume`},"pr:merge-conflict":{soundKey:`audioPrMergeConflictSound`,enabledKey:`audioPrMergeConflictEnabled`,volumeKey:`audioPrMergeConflictVolume`},"pr:ready-to-merge":{soundKey:`audioPrReadyToMergeSound`,enabledKey:`audioPrReadyToMergeEnabled`,volumeKey:`audioPrReadyToMergeVolume`},"pr:merged":{soundKey:`audioPrMergedSound`,enabledKey:`audioPrMergedEnabled`,volumeKey:`audioPrMergedVolume`}};function wa(e,t,n){let r=Wi().global,i=Ca[n];na(e,void 0,t,Ti(r[i.soundKey]),Number(r[i.volumeKey]),!!r[i.enabledKey])}function Ta(e,t){let n=[];return t&&n.push({label:J(`pr.openPr`),color:`white`,noDismiss:!0,handler:()=>window.open(t,`_blank`)}),n.push({label:J(`pr.openWorkspace`),color:`white`,noDismiss:!0,handler:()=>{window.location.hash=`#/workspace/${e}`}}),n.push({label:J(`pr.dismiss`),color:`white`}),n}var Y=null,Ea=null,Da=0,Oa=!1,ka=!1,Aa=!1;function ja(e){Aa=e}function Ma(e,t,n){if(t.kind!==`session:started`)return;let r=q();if(n){r.setActiveAgentSession(e,n);let t=r.peekPending(e);t&&t.agentSessionId===n&&r.dequeuePending(e)}let i=r.workspaces.find(t=>t.id===e);i&&(i.status===`completed`||i.status===`idle`||i.status===`error`||i.status===`quota`)&&r.updateWorkspaceFromEvent(e,{status:`executing`}),!Aa&&n&&r.selectedWorkspaceId===e&&r.selectedSessionId!==n&&r.fetchSessions(e,n).catch(e=>{console.error(`[websocket] fetchSessions on session:started failed:`,e)})}function Na(e,t){let n=q();if(t.kind===`tool:call`&&t.name===`TodoWrite`){let r=t.input?.todos;return Array.isArray(r)&&n.updateAgentTodos(e,r.map(e=>({content:typeof e.content==`string`?e.content:``,status:typeof e.status==`string`?e.status:`pending`,activeForm:typeof e.activeForm==`string`?e.activeForm:void 0}))),!0}if(t.kind===`tool:call`&&t.name===`TaskCreate`){let r=t.input??{};return n.agentTaskCreate(e,t.toolCallId,{subject:typeof r.subject==`string`?r.subject:void 0,description:typeof r.description==`string`?r.description:void 0,activeForm:typeof r.activeForm==`string`?r.activeForm:void 0}),!0}if(t.kind===`tool:result`&&typeof t.output==`string`){let r=t.output.match(/^Task #(\d+) created successfully/);if(r)return n.agentTaskSetNumber(e,t.toolCallId,Number(r[1])),!0}if(t.kind===`tool:call`&&t.name===`TaskUpdate`){let r=t.input??{},i=r.task_id??r.taskId??r.id,a=typeof i==`number`?i:typeof i==`string`?Number(i):NaN;return Number.isFinite(a)&&n.agentTaskUpdate(e,a,{status:typeof r.status==`string`?r.status:void 0,content:typeof r.subject==`string`?r.subject:void 0,activeForm:typeof r.activeForm==`string`?r.activeForm:void 0}),!0}return!1}function Pa(e,t,n,r,i){let a=mi();if(t.kind===`session:compacting`){a.setCompacting(e,t.active);return}a.append(e,t,n,r,i),(t.kind===`session:compacted`||t.kind===`message:text`||t.kind===`tool:call`)&&a.setCompacting(e,!1),Ma(e,t,i??void 0);let o=q();if(t.kind===`session:user-input-requested`){if(t.requestKind===`question`?o.enqueuePending(e,{kind:`question`,agentSessionId:i??null,toolCallId:t.toolCallId,toolName:t.toolName,input:t.payload}):o.enqueuePending(e,{kind:`permission`,agentSessionId:i??null,toolCallId:t.toolCallId,toolName:t.toolName,toolInput:t.payload}),o.updateWorkspaceFromEvent(e,{status:`awaiting-user`}),!Aa){let n=o.workspaces.find(t=>t.id===e)?.name??``,r=t.requestKind===`question`?J(`notification.agentQuestion`,{name:n}):J(`notification.agentPermissionRequest`,{name:n}),i=Wi().global;na(r,void 0,e,t.requestKind===`question`?i.audioQuestionSound:void 0,t.requestKind===`question`?i.audioQuestionVolume:void 0,i.audioQuestionNotifications)}return}if(t.kind===`subagent:progress`){o.upsertSubagent(e,{toolUseId:t.toolCallId,status:t.status,description:t.description,taskType:t.taskType,lastToolName:t.lastToolName,totalTokens:t.totalTokens,toolUses:t.toolUses,durationMs:t.durationMs});return}if(!Na(e,t)){if(t.kind===`tool:call`&&t.name===`Bash`){let n=t.input,r=`${n?.command??``} ${n?.description??``}`;/\bgit\b|commit|push|pull|merge|rebase|checkout|branch/i.test(r)&&o.triggerGitRefresh(),/\bgit\s+branch\s+-m\b/i.test(r)&&setTimeout(()=>{o.resyncWorkspaceBranch(e).catch(e=>{console.error(`[websocket] Branch resync failed:`,e)})},2500),/\bgh\s+pr\s+create\b/i.test(r)&&setTimeout(()=>o.triggerGitRefresh(),3e3)}if(t.kind===`tool:call`&&t.name===`ExitPlanMode`&&o.workspaces.find(t=>t.id===e)?.agentPermissionMode===`plan`&&(o.updateWorkspaceFromEvent(e,{agentPermissionMode:`bypass`}),o.updateAgentPermissionMode(e,`bypass`).catch(e=>{console.error(`[websocket] failed to persist ExitPlanMode flip:`,e)})),t.kind!==`session:started`){if(t.kind===`session:ended`){i&&o.clearPendingForSession(e,i);let n=o.activeAgentSessionIds[e];if(t.superseded===!0||typeof i==`string`&&i.length>0&&n!==void 0&&i!==n){o.cancelQueuedMessage(e,i),i&&o.clearActiveAgentSession(e,i);return}a.setCompacting(e,!1),i?o.clearActiveAgentSession(e,i):o.clearActiveAgentSessionOwner(e);let r=o.workspaces.find(t=>t.id===e)?.status===`quota`?`quota`:t.reason===`completed`?`completed`:t.reason===`error`?`error`:`idle`;o.updateWorkspaceFromEvent(e,{status:r}),i&&t.reason===`completed`&&o.flushQueuedMessage(e,i),o.finalizeRunningSubagents(e),o.fetchWorkspaces(),!Aa&&t.reason!==`killed`&&t.reason!==`error`&&o.autoLoopStates[e]?.auto_loop!==!0&&na(J(`notification.agentFinished`,{name:o.workspaces.find(t=>t.id===e)?.name??``}),void 0,e);return}if(t.kind===`error`&&(t.category===`quota`&&(o.updateWorkspaceFromEvent(e,{status:`quota`}),o.fetchWorkspaces()),!Aa)){let t=Wi().global;na(J(`notification.agentError`,{name:o.workspaces.find(t=>t.id===e)?.name??``}),void 0,e,t.audioAgentErrorSound,t.audioAgentErrorVolume,t.audioAgentErrorNotifications)}}}}var Fa=ye(`websocket`,{state:()=>({connected:!1,reconnecting:!1,reconnectAttempt:0,lastEventId:null,_replaying:!1}),actions:{connect(){if(Y)return;if(Oa=!0,ka||(ka=!0,window.addEventListener(`online`,()=>{Oa&&this.connect()}),window.addEventListener(`offline`,()=>{this.connected=!1,this.reconnecting=Oa,Ea&&=(clearTimeout(Ea),null)})),!navigator.onLine){this.connected=!1,this.reconnecting=!0;return}let e=Mr(`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}/ws`,kr()),t=new WebSocket(e);Y=t,t.addEventListener(`open`,()=>{this.connected=!0,this.reconnecting=!1,Da=0,this.reconnectAttempt=0;let e=q().workspaces.map(e=>e.id);for(let t of e)this._send({type:`subscribe`,payload:{workspaceId:t}});this.lastEventId&&this._send({type:`sync:request`,payload:{lastEventId:this.lastEventId,workspaceIds:e}})}),t.addEventListener(`message`,e=>{try{let t=JSON.parse(e.data);this._routeMessage(t)}catch{}}),t.addEventListener(`close`,()=>{this.connected=!1,Y=null,Oa&&this._scheduleReconnect()}),t.addEventListener(`error`,()=>{})},disconnect(){Oa=!1,Ea&&=(clearTimeout(Ea),null),Y&&=(Y.close(),null),this.connected=!1,this.reconnecting=!1,this.reconnectAttempt=0},subscribe(e){this._send({type:`subscribe`,payload:{workspaceId:e}}),this._send({type:`sync:request`,payload:{workspaceIds:[e]}})},unsubscribe(e){this._send({type:`unsubscribe`,payload:{workspaceId:e}})},sendChatMessage(e,t,n,r,i=!1){let a=this._send({type:`chat:message`,payload:{workspaceId:e,content:t,sessionId:n,agentPermissionModeOverride:r,force:i}});if(/^\/compact(\s|$)/.test(t.trim())&&mi().setCompacting(e,!0),!a)return!1;let o=q(),s=o.workspaces.find(t=>t.id===e);return s&&(s.status===`completed`||s.status===`idle`||s.status===`error`||s.status===`quota`)&&o.updateWorkspaceFromEvent(e,{status:`executing`}),!0},_send(e){return Y&&Y.readyState===WebSocket.OPEN?(Y.send(JSON.stringify(e)),!0):!1},isConnected(){return Y!==null&&Y.readyState===WebSocket.OPEN},_scheduleReconnect(){if(Ea)return;if(!Oa||!navigator.onLine){this.reconnecting=Oa;return}let e=Math.min(1e3*2**Da,3e4),t=Math.round(e*(.8+Math.random()*.4));Da++,this.reconnecting=!0,this.reconnectAttempt=Da,Da===4&&kr()&&Pr(),Ea=setTimeout(()=>{Ea=null,this.connect()},t)},_routeMessage(e){let t=q();e.replayable!==!1&&e.id?this.lastEventId=e.id:e.replayable!==!1&&e.eventId&&(this.lastEventId=e.eventId);let n=e.payload??{},r=e.workspaceId??n.workspaceId??``;switch(e.type){case`chat:accepted`:{let e=typeof n.sessionId==`string`?n.sessionId:void 0;r&&e&&t.cancelQueuedMessage(r,e);break}case`chat:rejected`:{let e=typeof n.sessionId==`string`?n.sessionId:void 0,i=typeof n.content==`string`?n.content:void 0,a=typeof n.message==`string`?n.message:J(`network.login.unreachable`);if(r&&i){let n=(t.activityFeeds[r]??[]).find(e=>e.meta?.sender===`user`&&e.meta?.pending&&e.content===i);n&&t.removeActivityItem(r,n.id),e&&t.queueMessage(r,i,e)}ni.create({type:`negative`,message:a,position:`top`,timeout:6e3});break}case`agent:event`:{if(!r)break;let t=e.createdAt;Pa(r,n,t,e.id??e.eventId,e.sessionId??null);break}case`agent:progress`:n.tasks&&Array.isArray(n.tasks)&&(t.tasks=n.tasks);break;case`user:message`:if(r&&n.content){let i=n.content,a=n.sender??`user`,o=e.sessionId,s=e.id??e.eventId??`user-${Date.now()}`,c=e.createdAt??new Date().toISOString(),l=t.activityFeeds[r]??[];if(a===`user`&&l.some(e=>e.meta?.sender===`user`&&e.content===i&&e.meta?.pending)){let e=l.findIndex(e=>e.meta?.sender===`user`&&e.content===i&&e.meta?.pending);e>=0&&(l[e]={...l[e],id:s,sessionId:o})}else t.addActivityItem(r,{id:s,type:`text`,content:i,timestamp:c,sessionId:o,meta:{sender:a}})}break;case`sync:response`:this._replaying=!0,ja(!0);try{let e=n.events??[],t=n.mode===`delta`?`delta`:`snapshot`,r=new Map;for(let t of e)if(t.type!==`sync:response`){if(t.type===`agent:event`&&t.workspaceId){let e=r.get(t.workspaceId)??{events:[],timestamps:[],sessionIds:[],eventIds:[],oldestId:void 0};e.events.push(t.payload),e.timestamps.push(t.createdAt),e.sessionIds.push(t.sessionId??null),e.eventIds.push(t.id??null),e.oldestId||=t.id,r.set(t.workspaceId,e);continue}this._routeMessage(t)}if(r.size>0){let e=mi();for(let[n,{events:i,timestamps:a,sessionIds:o,eventIds:s,oldestId:c}]of r){let r=t===`delta`?e.merge(n,i,a,{sessionIds:o,eventIds:s}):i.map((e,t)=>t);t===`snapshot`&&e.reset(n,i,a,{oldestId:c,hasMoreOlder:!0,sessionIds:o,eventIds:s}),t===`snapshot`&&q().updateAgentTodos(n,[]);for(let e of r){let t=i[e];if(!t)continue;let r=o[e]??null;if(t.kind===`session:user-input-requested`){t.requestKind===`question`?q().enqueuePending(n,{kind:`question`,agentSessionId:r,toolCallId:t.toolCallId,toolName:t.toolName,input:t.payload}):q().enqueuePending(n,{kind:`permission`,agentSessionId:r,toolCallId:t.toolCallId,toolName:t.toolName,toolInput:t.payload});continue}if(t.kind===`session:started`){if(r){let e=q();e.setActiveAgentSession(n,r);let t=e.peekPending(n);t&&t.agentSessionId===r&&e.dequeuePending(n)}continue}if(t.kind===`session:ended`){let e=q();r?(e.clearPendingForSession(n,r),e.cancelQueuedMessage(n,r),e.clearActiveAgentSession(n,r)):t.superseded!==!0&&e.clearActiveAgentSessionOwner(n);continue}if(t.kind===`subagent:progress`){q().upsertSubagent(n,{toolUseId:t.toolCallId,status:t.status,description:t.description,taskType:t.taskType,lastToolName:t.lastToolName,totalTokens:t.totalTokens,toolUses:t.toolUses,durationMs:t.durationMs});continue}Na(n,t)}}}let i=e.findLast(e=>e.replayable!==!1&&typeof e.id==`string`);i&&(this.lastEventId=i.id)}finally{this._replaying=!1,ja(!1)}break;case`usage:snapshot`:{let e=n;e.providerId&&e.snapshot&&t.applyUsageSnapshot({providerId:e.providerId,snapshot:e.snapshot});break}case`devserver:status`:{let e=ra();r&&e.updateFromWsEvent(r,n);break}case`task:updated`:r&&t.fetchWorkspaceDetails(r);break;case`setup:output`:t.addActivityItem(r,{id:e.id??`setup-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`setup:complete`:t.addActivityItem(r,{id:e.id??`setup-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?J(`chat.scriptDone`):J(`chat.scriptComplete`,{phase:`setup`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`setup:error`:t.addActivityItem(r,{id:e.id??`setup-error-${Date.now()}`,type:`text`,content:J(`chat.scriptError`,{phase:`setup`,message:e.payload?.message??J(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`cleanup:output`:t.addActivityItem(r,{id:e.id??`cleanup-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`cleanup:complete`:t.addActivityItem(r,{id:e.id??`cleanup-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?J(`chat.scriptDone`):J(`chat.scriptComplete`,{phase:`cleanup`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`cleanup:error`:t.addActivityItem(r,{id:e.id??`cleanup-error-${Date.now()}`,type:`text`,content:J(`chat.scriptError`,{phase:`cleanup`,message:e.payload?.message??J(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`archive:output`:t.addActivityItem(r,{id:e.id??`archive-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`archive:complete`:t.addActivityItem(r,{id:e.id??`archive-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?J(`chat.scriptDone`):J(`chat.scriptComplete`,{phase:`archive`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`archive:error`:t.addActivityItem(r,{id:e.id??`archive-error-${Date.now()}`,type:`text`,content:J(`chat.scriptError`,{phase:`archive`,message:e.payload?.message??J(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`workspace:unread`:if(r){let e=n.hasUnread??!1;t.updateWorkspaceFromEvent(r,{hasUnread:e})}break;case`workspace:pr-attention-dismissed`:if(r){let e=n.kind,i=n.prUpdatedAt;e&&i&&t.updateWorkspaceFromEvent(r,e===`changes-requested`?{prChangesDismissedAt:i}:{prCiFailureDismissedAt:i})}break;case`workspace:description-updated`:{if(!r)break;let e=n.description??null;t.updateWorkspaceFromEvent(r,{description:e});break}case`workspace:agent-description-updated`:{if(!r)break;let e=n.agentDescription??null;t.updateWorkspaceFromEvent(r,{agentDescription:e});break}case`cron:created`:{if(!r)break;let e=n.cron;if(!e)break;let i=t.crons[r]??[];i.some(t=>t.id===e.id)||(t.crons[r]=[...i,e]);let a=t.autoLoopStates[r];a&&(a.crons_count=t.crons[r].length);break}case`cron:fired`:{if(!r)break;let e=n,i=t.crons[r]??[];t.crons[r]=i.map(t=>t.id===e.id?{...t,nextFireAt:e.nextFireAt??t.nextFireAt,lastFiredAt:e.lastFiredAt??new Date().toISOString()}:t);break}case`cron:cancelled`:{if(!r)break;let e=n.id;if(!e)break;t.crons[r]=(t.crons[r]??[]).filter(t=>t.id!==e);let i=t.autoLoopStates[r];i&&(i.crons_count=t.crons[r].length);break}case`cron:updated`:{if(!r)break;let e=n.crons;if(Array.isArray(e)){t.crons[r]=e;let n=t.autoLoopStates[r];n&&(n.crons_count=e.length)}break}case`workspace:archived`:case`workspace:unarchived`:case`workspace:worktree-restored`:case`workspace:worktree-purged`:e.type===`workspace:archived`&&r&&t.selectedWorkspaceId===r&&(t.selectedWorkspaceId=null),t.fetchWorkspaces(),t.archivedLoaded&&t.fetchArchivedWorkspaces();break;case`pr:base-changed`:{if(!r)break;let e=n,i=e.oldBase??``,a=e.newBase??``;t.updateWorkspaceFromEvent(r,{sourceBranch:a}),ni.create({type:`info`,position:`top`,timeout:Gi,message:J(`pr.baseChanged`,{oldBase:i,newBase:a}),actions:Ta(r,e.prUrl)}),na(J(`pr.baseChanged`,{oldBase:i,newBase:a}),void 0,r);break}case`pr:ci-failed`:case`pr:ci-recovered`:case`pr:merge-conflict`:case`pr:merged`:{if(!r)break;let i=e.type,a=n,o=a.prNumber??0,s={"pr:ci-failed":{key:`toast.prCiFailed`,type:`negative`,timeout:4e3},"pr:ci-recovered":{key:`toast.prCiRecovered`,type:`positive`,timeout:5e3},"pr:merge-conflict":{key:`toast.prMergeConflict`,type:`warning`,timeout:Gi},"pr:merged":{key:`toast.prMerged`,type:`positive`,timeout:5e3}}[i],c=J(s.key,{n:o});ni.create({type:s.type,position:`top`,timeout:s.timeout,message:c,actions:Ta(r,a.prUrl)}),wa(c,r,i),i!==`pr:merged`&&t.refreshPrSnapshot(r);break}case`pr:changes-requested`:{if(!r)break;let e=n,i=J(`toast.prChangesRequested`,{n:e.prNumber??0});ni.create({type:`warning`,position:`top`,timeout:Gi,message:i,actions:Ta(r,e.prUrl)}),wa(i,r,`pr:changes-requested`),t.refreshPrSnapshot(r);break}case`pr:approved`:{if(!r)break;let e=n,i=J(`toast.prApproved`,{n:e.prNumber??0});ni.create({type:`positive`,position:`top`,timeout:5e3,message:i,actions:Ta(r,e.prUrl)}),wa(i,r,`pr:approved`),t.refreshPrSnapshot(r);break}case`pr:ready-to-merge`:{if(!r)break;let e=n,i=J(`toast.prReadyToMerge`,{n:e.prNumber??0});ni.create({type:`positive`,position:`top`,timeout:5e3,message:i,actions:Ta(r,e.prUrl)}),wa(i,r,`pr:ready-to-merge`),t.refreshPrSnapshot(r);break}case`wakeup:scheduled`:if(r){let e=n;typeof e.targetAt==`string`&&t.setPendingWakeup(r,{targetAt:e.targetAt,reason:e.reason})}break;case`wakeup:cancelled`:case`wakeup:fired`:case`wakeup:skipped`:r&&t.clearPendingWakeup(r);break;case`agent:quota-backoff`:{if(!r)break;let e=n;typeof e.targetAt==`string`&&typeof e.source==`string`&&t.setPendingQuotaBackoff(r,{targetAt:e.targetAt,resetsAt:e.resetsAt??null,source:e.source});break}case`agent:quota-backoff-cancelled`:r&&t.clearPendingQuotaBackoff(r);break;case`autoloop:enabled`:case`autoloop:iteration-started`:case`autoloop:ready-flipped`:t.fetchAutoLoopStates();break;case`autoloop:permission-overridden`:r&&na(J(`notification.autoLoopPermissionOverridden`,{name:t.workspaces.find(e=>e.id===r)?.name??``}),void 0,r);break;case`autoloop:disabled`:if(t.fetchAutoLoopStates(),r){let e=n?.reason,i=t.workspaces.find(e=>e.id===r)?.name??``,a=e===`error`?`notification.autoLoopError`:e===`stall`?`notification.autoLoopStalled`:e===`completed`?`notification.autoLoopCompleted`:e===`awaiting-clarification`?`notification.autoLoopAwaitingClarification`:null;a&&na(J(a,{name:i}),void 0,r)}break;case`migration:progress`:case`migration:error`:Vn().update(n)}}}}),Ia=u({__name:`App`,setup(e){let t=Fa(),n=zr();return y(()=>{t.connect(),n.fetchTemplates(),Zi()}),_(()=>{t.disconnect()}),(e,t)=>{let n=v(`router-view`);return S(),ee(d,null,[E(n),E(Jn),E(Rr)],64)}}}),La=e=>e,Ra=La,za=La,Ba=La(()=>xe());function Va(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function Ha(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&Va(e.default)}var X=Object.assign;function Ua(e,t){let n={};for(let r in t){let i=t[r];n[r]=Z(i)?i.map(e):e(i)}return n}var Wa=()=>{},Z=Array.isArray;function Ga(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var Ka=Symbol(``);function qa(e,t){return X(Error(),{type:e,[Ka]:!0},t)}function Q(e,t){return e instanceof Error&&Ka in e&&(t==null||!!(e.type&t))}var Ja=Symbol(``),Ya=Symbol(``),Xa=Symbol(``),Za=Symbol(``),Qa=Symbol(``);function $a(){return N(Xa)}function eo(e){return N(Za)}var to=typeof document<`u`,no=/#/g,ro=/&/g,io=/\//g,ao=/=/g,oo=/\?/g,so=/\+/g,co=/%5B/g,lo=/%5D/g,uo=/%5E/g,fo=/%60/g,po=/%7B/g,mo=/%7C/g,ho=/%7D/g,go=/%20/g;function _o(e){return e==null?``:encodeURI(``+e).replace(mo,`|`).replace(co,`[`).replace(lo,`]`)}function vo(e){return _o(e).replace(po,`{`).replace(ho,`}`).replace(uo,`^`)}function yo(e){return _o(e).replace(so,`%2B`).replace(go,`+`).replace(no,`%23`).replace(ro,`%26`).replace(fo,"`").replace(po,`{`).replace(ho,`}`).replace(uo,`^`)}function bo(e){return yo(e).replace(ao,`%3D`)}function xo(e){return _o(e).replace(no,`%23`).replace(oo,`%3F`)}function So(e){return xo(e).replace(io,`%2F`)}function Co(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var wo=/\/$/,To=e=>e.replace(wo,``);function Eo(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=Po(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:Co(o)}}function Do(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function Oo(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function ko(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&Ao(t.matched[r],n.matched[i])&&jo(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Ao(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function jo(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Mo(e[n],t[n]))return!1;return!0}function Mo(e,t){return Z(e)?No(e,t):Z(t)?No(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function No(e,t){return Z(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function Po(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`){if(s===`..`)a>1&&a--;else break}return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var Fo={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0};function Io(e){if(!e){if(to){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^/]+/,``)}else e=`/`}return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),To(e)}var Lo=/^[^#]+#/;function Ro(e,t){return e.replace(Lo,`#`)+t}function zo(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var Bo=()=>({left:window.scrollX,top:window.scrollY});function Vo(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=zo(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function Ho(e,t){return(history.state?history.state.position-t:-1)+e}var Uo=new Map;function Wo(e,t){Uo.set(e,t)}function Go(e){let t=Uo.get(e);return Uo.delete(e),t}function Ko(e){return typeof e==`string`||e&&typeof e==`object`}function qo(e){return typeof e==`string`||typeof e==`symbol`}function Jo(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(so,` `),i=r.indexOf(`=`),a=Co(i<0?r:r.slice(0,i)),o=i<0?null:Co(r.slice(i+1));if(a in t){let e=t[a];Z(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function Yo(e){let t=``;for(let n in e){let r=e[n];if(n=bo(n),r==null){r!==void 0&&(t+=(t.length?`&`:``)+n);continue}(Z(r)?r.map(e=>e&&yo(e)):[r&&yo(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function Xo(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=Z(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}function Zo(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Qo(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(qa(4,{from:n,to:t})):e instanceof Error?c(e):Ko(e)?c(qa(2,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function $o(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(!(t!==`beforeRouteEnter`&&!o.instances[e])){if(Va(s)){let c=(s.__vccOpts||s)[t];c&&a.push(Qo(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=Ha(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&Qo(c,n,r,o,e,i)()}))}}}return a}function es(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>Ao(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>Ao(e,s))||i.push(s))}return[n,r,i]}var ts=()=>location.protocol+`//`+location.host;function ns(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),Oo(n,``)}return Oo(n,e)+r+i}function rs(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=ns(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:`pop`,direction:u?u>0?`forward`:`back`:``})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(X({},e.state,{scroll:Bo()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function is(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?Bo():null}}function as(e){let{history:t,location:n}=window,r={value:ns(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:ts()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,X({},t.state,is(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=X({},i.value,t.state,{forward:e,scroll:Bo()});a(o.current,o,!0),a(e,X({},is(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function os(e){e=Io(e);let t=as(e),n=rs(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=X({location:``,base:e,go:r,createHref:Ro.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function ss(e){return e=location.host?e||location.pathname+location.search:``,e.includes(`#`)||(e+=`#`),os(e)}var cs={type:0,value:``},ls=/[a-zA-Z0-9_]/;function us(e){if(!e)return[[]];if(e===`/`)return[[cs]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=0,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===0?a.push({type:0,value:l}):n===1||n===2||n===3?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;)switch(c=e[s++],n){case 0:c===`\\`?(r=n,n=4):c===`/`?(l&&d(),o()):c===`:`?(d(),n=1):f();break;case 4:f(),n=r;break;case 1:c===`(`?n=2:ls.test(c)?f():(d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case 2:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=3:u+=c;break;case 3:d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`)}return n===2&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var ds=`[^/]+?`,fs={sensitive:!1,strict:!1,start:!0,end:!0},ps=/[.+*?^${}()[\]/\\]/g;function ms(e,t){let n=X({},fs,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[90];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=40+(n.sensitive?.25:0);if(o.type===0)r||(i+=`/`),i+=o.value.replace(ps,`\\$&`),s+=40;else if(o.type===1){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||ds;if(u!==ds){s+=10;try{RegExp(`(${u})`)}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=20,c&&(s+=-8),n&&(s+=-20),u===`.*`&&(s+=-50)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=.7000000000000001}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===0)n+=e.value;else if(e.type===1){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(Z(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=Z(c)?c.join(`/`):c;if(!l){if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`)}n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function hs(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function gs(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=hs(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(_s(r))return 1;if(_s(i))return-1}return i.length-r.length}function _s(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var vs={strict:!1,end:!0,sensitive:!1};function ys(e,t,n){let r=X(ms(us(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function bs(e,t){let n=[],r=new Map;t=Ga(vs,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=Ss(e);s.aliasOf=r&&r.record;let l=Ga(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(Ss(X({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=ys(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!ws(d)&&o(e.name)),Os(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:Wa}function o(e){if(qo(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=Es(e,n);n.splice(t,0,e),e.record.name&&!ws(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw qa(1,{location:e});s=i.record.name,a=X(xs(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&xs(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name,i.keys.forEach(e=>{e.optional&&!a[e.name]&&delete a[e.name]}));else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw qa(1,{location:e,currentLocation:t});s=i.record.name,a=X({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:Ts(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function xs(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function Ss(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Cs(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Cs(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function ws(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Ts(e){return e.reduce((e,t)=>X(e,t.meta),{})}function Es(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;gs(e,t[i])<0?r=i:n=i+1}let i=Ds(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function Ds(e){let t=e;for(;t=t.parent;)if(Os(t)&&gs(e,t)===0)return t}function Os({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function ks(e){let t=N(Xa),n=N(Za),i=p(()=>{let n=r(e.to);return t.resolve(n)}),a=p(()=>{let{matched:e}=i.value,{length:t}=e,r=e[t-1],a=n.matched;if(!r||!a.length)return-1;let o=a.findIndex(Ao.bind(null,r));if(o>-1)return o;let s=Ps(e[t-2]);return t>1&&Ps(r)===s&&a[a.length-1].path!==s?a.findIndex(Ao.bind(null,e[t-2])):o}),o=p(()=>a.value>-1&&Ns(n.params,i.value.params)),s=p(()=>a.value>-1&&a.value===n.matched.length-1&&jo(n.params,i.value.params));function c(n={}){if(Ms(n)){let n=t[r(e.replace)?`replace`:`push`](r(e.to)).catch(Wa);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:i,href:p(()=>i.value.href),isActive:o,isExactActive:s,navigate:c}}function As(e){return e.length===1?e[0]:e}var js=u({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:ks,setup(e,{slots:t}){let n=l(ks(e)),{options:r}=N(Xa),i=p(()=>({[Fs(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[Fs(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&As(t.default(n));return e.custom?r:M(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function Ms(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Ns(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!Z(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function Ps(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var Fs=(e,t,n)=>e??t??n,Is=u({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let a=N(Qa),o=p(()=>e.route||a.value),s=N(Ya,0),c=p(()=>{let e=r(s),{matched:t}=o.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),l=p(()=>o.value.matched[c.value]);m(Ya,p(()=>c.value+1)),m(Ja,l),m(Qa,o);let u=i();return O(()=>[u.value,l.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!Ao(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let r=o.value,i=e.name,a=l.value,s=a&&a.components[i];if(!s)return Ls(n.default,{Component:s,route:r});let c=a.props[i],d=c?c===!0?r.params:typeof c==`function`?c(r):c:null,f=M(s,X({},d,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(a.instances[i]=null)},ref:u}));return Ls(n.default,{Component:f,route:r})||f}}});function Ls(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var Rs=Is;function zs(e){let t=bs(e.routes,e),n=e.parseQuery||Jo,i=e.stringifyQuery||Yo,s=e.history,c=Zo(),l=Zo(),u=Zo(),d=a(Fo),f=Fo;to&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let p=Ua.bind(null,e=>``+e),m=Ua.bind(null,So),h=Ua.bind(null,Co);function g(e,n){let r,i;return qo(e)?(r=t.getRecordMatcher(e),i=n):i=e,t.addRoute(i,r)}function _(e){let n=t.getRecordMatcher(e);n&&t.removeRoute(n)}function v(){return t.getRoutes().map(e=>e.record)}function y(e){return!!t.getRecordMatcher(e)}function b(e,r){if(r=X({},r||d.value),typeof e==`string`){let i=Eo(n,e,r.path),a=t.resolve({path:i.path},r),o=s.createHref(i.fullPath);return X(i,a,{params:h(a.params),redirectedFrom:void 0,href:o})}let a;if(e.path!=null)a=X({},e,{path:Eo(n,e.path,r.path).path});else{let t=X({},e.params);for(let e in t)t[e]??delete t[e];a=X({},e,{params:m(t)}),r.params=m(r.params)}let o=t.resolve(a,r),c=e.hash||``;o.params=p(h(o.params));let l=Do(i,X({},e,{hash:vo(c),path:o.path})),u=s.createHref(l);return X({fullPath:l,hash:c,query:i===Yo?Xo(e.query):e.query||{}},o,{redirectedFrom:void 0,href:u})}function x(e){return typeof e==`string`?Eo(n,e,d.value.path):X({},e)}function S(e,t){if(f!==e)return qa(8,{from:t,to:e})}function w(e){return E(e)}function T(e){return w(X(x(e),{replace:!0}))}function ee(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=x(i):{path:i},i.params={}),X({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function E(e,t){let n=f=b(e),r=d.value,a=e.state,o=e.force,s=e.replace===!0,c=ee(n,r);if(c)return E(X(x(c),{state:typeof c==`object`?X({},a,c.state):a,force:o,replace:s}),t||n);let l=n;l.redirectedFrom=t;let u;return!o&&ko(i,r,n)&&(u=qa(16,{to:l,from:r}),I(r,r,!0,!1)),(u?Promise.resolve(u):te(l,r)).catch(e=>Q(e)?Q(e,2)?e:ie(e):P(e,l,r)).then(e=>{if(e){if(Q(e,2))return E(X({replace:s},x(e.to),{state:typeof e.to==`object`?X({},a,e.to.state):a,force:o}),t||l)}else e=A(l,r,!0,s,a);return k(l,r,e),e})}function D(e,t){let n=S(e,t);return n?Promise.reject(n):Promise.resolve()}function O(e){let t=ae.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function te(e,t){let n,[r,i,a]=es(e,t);n=$o(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(Qo(r,e,t))});let o=D.bind(null,e,t);return n.push(o),B(n).then(()=>{n=[];for(let r of c.list())n.push(Qo(r,e,t));return n.push(o),B(n)}).then(()=>{n=$o(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(Qo(r,e,t))});return n.push(o),B(n)}).then(()=>{n=[];for(let r of a)if(r.beforeEnter){if(Z(r.beforeEnter))for(let i of r.beforeEnter)n.push(Qo(i,e,t));else n.push(Qo(r.beforeEnter,e,t))}return n.push(o),B(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=$o(a,`beforeRouteEnter`,e,t,O),n.push(o),B(n))).then(()=>{n=[];for(let r of l.list())n.push(Qo(r,e,t));return n.push(o),B(n)}).catch(e=>Q(e,8)?e:Promise.reject(e))}function k(e,t,n){u.list().forEach(r=>O(()=>r(e,t,n)))}function A(e,t,n,r,i){let a=S(e,t);if(a)return a;let o=t===Fo,c=to?history.state:{};n&&(r||o?s.replace(e.fullPath,X({scroll:o&&c&&c.scroll},i)):s.push(e.fullPath,i)),d.value=e,I(e,t,n,o),ie()}let j;function M(){j||=s.listen((e,t,n)=>{if(!z.listening)return;let r=b(e),i=ee(r,z.currentRoute.value);if(i){E(X(i,{replace:!0,force:!0}),r).catch(Wa);return}f=r;let a=d.value;to&&Wo(Ho(a.fullPath,n.delta),Bo()),te(r,a).catch(e=>Q(e,12)?e:Q(e,2)?(E(X(x(e.to),{force:!0}),r).then(e=>{Q(e,20)&&!n.delta&&n.type===`pop`&&s.go(-1,!1)}).catch(Wa),Promise.reject()):(n.delta&&s.go(-n.delta,!1),P(e,r,a))).then(e=>{e||=A(r,a,!1),e&&(n.delta&&!Q(e,8)?s.go(-n.delta,!1):n.type===`pop`&&Q(e,20)&&s.go(-1,!1)),k(r,a,e)}).catch(Wa)})}let N=Zo(),ne=Zo(),re;function P(e,t,n){ie(e);let r=ne.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function F(){return re&&d.value!==Fo?Promise.resolve():new Promise((e,t)=>{N.add([e,t])})}function ie(e){return re||(re=!e,M(),N.list().forEach(([t,n])=>e?n(e):t()),N.reset()),e}function I(t,n,r,i){let{scrollBehavior:a}=e;if(!to||!a)return Promise.resolve();let o=!r&&Go(Ho(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return C().then(()=>a(t,n,o)).then(e=>t===d.value&&e&&Vo(e)).catch(e=>t===d.value&&P(e,t,n))}let L=e=>s.go(e),R,ae=new Set,z={currentRoute:d,listening:!0,addRoute:g,removeRoute:_,clearRoutes:t.clearRoutes,hasRoute:y,getRoutes:v,resolve:b,options:e,push:w,replace:T,go:L,back:()=>L(-1),forward:()=>L(1),beforeEach:c.add,beforeResolve:l.add,afterEach:u.add,onError:ne.add,isReady:F,install(e){e.component(`RouterLink`,js),e.component(`RouterView`,Rs),e.config.globalProperties.$router=z,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>r(d)}),to&&!R&&d.value===Fo&&(R=!0,w(s.location).catch(e=>{}));let t={};for(let e in Fo)Object.defineProperty(t,e,{get:()=>d.value[e],enumerable:!0});e.provide(Xa,z),e.provide(Za,o(t)),e.provide(Qa,d);let n=e.unmount;ae.add(e),e.unmount=function(){ae.delete(e),ae.size<1&&(f=Fo,j&&j(),j=null,d.value=Fo,R=!1,re=!1),n()}}};function B(e){return e.reduce((e,t)=>e.then(()=>O(t)),Promise.resolve())}return z}var Bs=`modulepreload`,Vs=function(e){return`/`+e},Hs={},$=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Vs(t,n),t=s(t),t in Hs)return;Hs[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Bs,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Us=[{path:`/`,component:()=>$(()=>import(`./MainLayout-DP9shoO1.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])),children:[{path:``,redirect:{name:`workspace`}},{path:`workspace/:id?`,name:`workspace`,component:()=>$(()=>import(`./WorkspacePage-CJKSrSEC.js`).then(e=>e.t),__vite__mapDeps([27,1,2,3,4,5,6,28,7,8,9,10,12,14,15,16,17,19,20,21,22,29,30,31,32,33,34]))},{path:`create`,name:`create`,component:()=>$(()=>import(`./CreatePage--4KDhiYt.js`),__vite__mapDeps([35,1,2,3,4,5,6,28,7,8,9,10,15,18,23,29,30,21,31,32,36]))},{path:`settings`,name:`settings`,component:()=>$(()=>import(`./SettingsPage-8AWL_4DM.js`),__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,12,13,15,17,19,23,24,25,29,32,33,38]))},{path:`search`,name:`search`,component:()=>$(()=>import(`./SearchPage-CggXs3dH.js`),__vite__mapDeps([39,1,2,3,4,5,6,15,16,17,22,29,40]))},{path:`health`,name:`health`,component:()=>$(()=>import(`./HealthPage-CaOdjuVx.js`),__vite__mapDeps([41,2,3,4,7,16,17,19,29]))},{path:`changelog`,name:`changelog`,component:()=>$(()=>import(`./ChangelogPage-Dw2LbIK2.js`),__vite__mapDeps([42,2,3,14,15,17,4,10,29,43]))}]},{path:`/:catchAll(.*)*`,redirect:`/`}],Ws=za(()=>zs({scrollBehavior:()=>({left:0,top:0}),routes:Us,history:ss()}));async function Gs(e,t){let n=e(Ia);n.use(ut,t);let r=typeof Ba==`function`?await Ba({}):Ba;n.use(r);let i=s(typeof Ws==`function`?await Ws({store:r}):Ws);return r.use(({store:e})=>{e.router=i}),{app:n,store:r,router:i}}var Ks=()=>M(`svg`,{key:`svg`,class:`q-radio__bg absolute non-selectable`,viewBox:`0 0 24 24`},[M(`path`,{d:`M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12`}),M(`path`,{class:`q-radio__check`,d:`M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6`})]);function qs(e){(e.keyCode===13||e.keyCode===32)&&L(e)}var Js=R({name:`QRadio`,props:{...me,...pe,...ke,modelValue:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},emits:[`update:modelValue`],setup(e,{slots:t,emit:r}){let{proxy:a}=A(),o=de(e,a.$q),s=se(e,Ae),c=i(null),{refocusTargetEl:l,refocusTarget:u}=Oe(e,c),d=p(()=>n(e.modelValue)===n(e.val)),f=p(()=>`q-radio cursor-pointer no-outline row inline no-wrap items-center`+(e.disable?` disabled`:``)+(o.value?` q-radio--dark`:``)+(e.dense?` q-radio--dense`:``)+(e.leftLabel?` reverse`:``)),m=p(()=>{let t=e.color!==void 0&&(e.keepColor||d.value)?` text-${e.color}`:``;return`q-radio__inner relative-position q-radio__inner--${d.value?`truthy`:`falsy`}${t}`}),h=p(()=>(d.value?e.checkedIcon:e.uncheckedIcon)||null),g=p(()=>e.disable?-1:e.tabindex||0),_=p(()=>{let t={type:`radio`};return e.name!==void 0&&Object.assign(t,{".checked":d.value,"^checked":d.value?`checked`:void 0,name:e.name,value:e.val}),t}),v=je(_);function y(t){t!==void 0&&(L(t),u(t)),!e.disable&&!d.value&&r(`update:modelValue`,e.val,t)}function b(e){(e.keyCode===13||e.keyCode===32)&&y(e)}Object.assign(a,{set:y});let x=Ks();return()=>{let n=h.value===null?[x]:[M(`div`,{key:`icon`,class:`q-radio__icon-container absolute-full flex flex-center no-wrap`},[M(ge,{class:`q-radio__icon`,name:h.value})])];e.disable||v(n,`unshift`,` q-radio__native q-ma-none q-pa-none`);let r=[M(`div`,{class:m.value,style:s.value,"aria-hidden":`true`},n)];l.value!==null&&r.push(l.value);let i=e.label===void 0?he(t.default):B(t.default,[e.label]);return i!==void 0&&r.push(M(`div`,{class:`q-radio__label q-anchor--skip`},i)),M(`div`,{ref:c,class:f.value,tabindex:g.value,role:`radio`,"aria-label":e.label,"aria-checked":d.value?`true`:`false`,"aria-disabled":e.disable?`true`:void 0,onClick:y,onKeydown:qs,onKeyup:b},r)}}}),Ys=()=>M(`div`,{key:`svg`,class:`q-checkbox__bg absolute`},[M(`svg`,{class:`q-checkbox__svg fit absolute-full`,viewBox:`0 0 24 24`},[M(`path`,{class:`q-checkbox__truthy`,fill:`none`,d:`M1.73,12.91 8.1,19.28 22.79,4.59`}),M(`path`,{class:`q-checkbox__indet`,d:`M4,14H20V10H4`})])]),Xs=R({name:`QCheckbox`,props:Pe,emits:Me,setup(e){let t=Ys();function n(n,r){let i=p(()=>(n.value?e.checkedIcon:r.value?e.indeterminateIcon:e.uncheckedIcon)||null);return()=>i.value===null?[t]:[M(`div`,{key:`icon`,class:`q-checkbox__icon-container absolute-full flex flex-center no-wrap`},[M(ge,{class:`q-checkbox__icon`,name:i.value})])]}return Fe(`checkbox`,n)}}),Zs=R({name:`QToggle`,props:{...Pe,icon:String,iconColor:String},emits:Me,setup(e){function t(t,n){let r=p(()=>(t.value?e.checkedIcon:n.value?e.indeterminateIcon:e.uncheckedIcon)||e.icon),i=p(()=>t.value?e.iconColor:null);return()=>[M(`div`,{class:`q-toggle__track`}),M(`div`,{class:`q-toggle__thumb absolute flex flex-center no-wrap`},r.value===void 0?void 0:[M(ge,{name:r.value,color:i.value})])]}return Fe(`toggle`,t)}}),Qs={radio:Js,checkbox:Xs,toggle:Zs},$s=Object.keys(Qs);function ec(e,t){if(typeof e==`function`)return e;let n=e===void 0?t:e;return e=>e[n]}var tc=R({name:`QOptionGroup`,props:{...me,modelValue:{required:!0},options:{type:Array,validator:e=>e.every(U),default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],name:String,type:{type:String,default:`radio`,validator:e=>$s.includes(e)},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean},emits:[`update:modelValue`],setup(e,{emit:t,slots:n}){let{proxy:{$q:r}}=A(),i=Array.isArray(e.modelValue);e.type===`radio`?i&&console.error(`q-option-group: model should not be array`):i||console.error(`q-option-group: model should be array in your case`);let a=de(e,r),o=p(()=>Qs[e.type]),s=p(()=>ec(e.optionValue,`value`)),c=p(()=>ec(e.optionLabel,`label`)),l=p(()=>ec(e.optionDisable,`disable`)),u=p(()=>e.options.map(t=>({val:s.value(t),name:t.name===void 0?e.name:t.name,disable:e.disable||l.value(t),leftLabel:t.leftLabel===void 0?e.leftLabel:t.leftLabel,color:t.color===void 0?e.color:t.color,checkedIcon:t.checkedIcon,uncheckedIcon:t.uncheckedIcon,dark:t.dark===void 0?a.value:t.dark,size:t.size===void 0?e.size:t.size,dense:e.dense,keepColor:t.keepColor===void 0?e.keepColor:t.keepColor}))),d=p(()=>`q-option-group q-gutter-x-sm`+(e.inline?` q-option-group--inline`:``)),f=p(()=>{let t={role:`group`};return e.type===`radio`&&(t.role=`radiogroup`,e.disable&&(t[`aria-disabled`]=`true`)),t});function m(e){t(`update:modelValue`,e)}return()=>M(`div`,{class:d.value,...f.value},e.options.map((t,r)=>{let i=n[`label-`+r]===void 0?n.label===void 0?void 0:()=>n.label(t):()=>n[`label-`+r](t);return M(`div`,[M(o.value,{label:i===void 0?c.value(t):null,modelValue:e.modelValue,"onUpdate:modelValue":m,...u.value[r]},i)])}))}}),nc=R({name:`DialogPluginComponent`,props:{...me,title:String,message:String,prompt:Object,options:Object,progress:[Boolean,Object],html:Boolean,ok:{type:[String,Object,Boolean],default:!0},cancel:[String,Object,Boolean],focus:{type:String,default:`ok`,validator:e=>[`ok`,`cancel`,`none`].includes(e)},stackButtons:Boolean,color:String,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},emits:[`ok`,`hide`],setup(e,{emit:t}){let{proxy:r}=A(),{$q:a}=r,o=de(e,a),s=i(null),c=i(e.prompt===void 0?e.options===void 0?void 0:e.options.model:e.prompt.model),l=p(()=>`q-dialog-plugin`+(o.value?` q-dialog-plugin--dark q-dark`:``)+(e.progress===!1?``:` q-dialog-plugin--progress`)),u=p(()=>e.color||(o.value?`amber`:`primary`)),d=p(()=>e.progress===!1?null:U(e.progress)?{component:e.progress.spinner||ue,props:{color:e.progress.color||u.value}}:{component:ue,props:{color:u.value}}),f=p(()=>e.prompt!==void 0||e.options!==void 0),m=p(()=>{if(!f.value)return{};let{model:t,isValid:n,items:r,...i}=e.prompt===void 0?e.options:e.prompt;return i}),h=p(()=>U(e.ok)||e.ok===!0?a.lang.label.ok:e.ok),g=p(()=>U(e.cancel)||e.cancel===!0?a.lang.label.cancel:e.cancel),_=p(()=>e.prompt===void 0?e.options!==void 0&&e.options.isValid!==void 0&&!e.options.isValid(c.value):e.prompt.isValid!==void 0&&!e.prompt.isValid(c.value)),v=p(()=>({color:u.value,label:h.value,ripple:!1,disable:_.value,...U(e.ok)?e.ok:{flat:!0},"data-autofocus":e.focus===`ok`&&!f.value||void 0,onClick:S})),y=p(()=>({color:u.value,label:g.value,ripple:!1,...U(e.cancel)?e.cancel:{flat:!0},"data-autofocus":e.focus===`cancel`&&!f.value||void 0,onClick:C}));O(()=>e.prompt&&e.prompt.model,T),O(()=>e.options&&e.options.model,T);function b(){s.value.show()}function x(){s.value.hide()}function S(){t(`ok`,n(c.value)),x()}function C(){x()}function w(){t(`hide`)}function T(e){c.value=e}function ee(t){!_.value&&e.prompt.type!==`textarea`&&oe(t,13)&&S()}function E(t,n){return e.html?M(W,{class:t,innerHTML:n}):M(W,{class:t},()=>n)}function D(){return[M(Ne,{color:u.value,dense:!0,autofocus:!0,dark:o.value,...m.value,modelValue:c.value,"onUpdate:modelValue":T,onKeyup:ee})]}function te(){return[M(tc,{color:u.value,options:e.options.items,dark:o.value,...m.value,modelValue:c.value,"onUpdate:modelValue":T})]}function k(){let t=[];return e.cancel&&t.push(M(Er,y.value)),e.ok&&t.push(M(Er,v.value)),M(Dr,{class:e.stackButtons?`items-end`:``,vertical:e.stackButtons,align:`right`},()=>t)}function j(){let t=[];return e.title&&t.push(E(`q-dialog__title`,e.title)),e.progress!==!1&&t.push(M(W,{class:`q-dialog__progress`},()=>M(d.value.component,d.value.props))),e.message&&t.push(E(`q-dialog__message`,e.message)),e.prompt===void 0?e.options!==void 0&&t.push(M(Ee,{dark:o.value}),M(W,{class:`scroll q-dialog-plugin__form`},te),M(Ee,{dark:o.value})):t.push(M(W,{class:`scroll q-dialog-plugin__form`},D)),(e.ok||e.cancel)&&t.push(k()),t}function N(){return[M(mt,{class:[l.value,e.cardClass],style:e.cardStyle,dark:o.value},j)]}return Object.assign(r,{show:b,hide:x}),()=>M(In,{ref:s,onHide:w},N)}});function rc(e,t){for(let n in t)n!==`spinner`&&Object(t[n])===t[n]&&!Array.isArray(t[n])?(e[n]=Object(e[n])===e[n]?{...e[n]}:{},rc(e[n],t[n])):e[n]=t[n]}function ic(e,t,n){return r=>{let a,o,s=t&&r.component!==void 0;if(s){let{component:e,componentProps:t}=r;a=typeof e==`string`?n.component(e):e,o=t||{}}else{let{class:t,style:n,...i}=r;a=e,o=i,t!==void 0&&(i.cardClass=t),n!==void 0&&(i.cardStyle=n)}let c,l=!1,u=i(null),d=It(!1,`dialog`),f=e=>{if(u.value?.[e]!==void 0){u.value[e]();return}let t=c.$.subTree;if(t?.component){if(t.component.proxy&&t.component.proxy[e]){t.component.proxy[e]();return}if(t.component.subTree&&t.component.subTree.component&&t.component.subTree.component.proxy&&t.component.subTree.component.proxy[e]){t.component.subTree.component.proxy[e]();return}}console.error(`[Quasar] Incorrectly defined Dialog component`)},p=[],m=[],h={onOk(e){return p.push(e),h},onCancel(e){return m.push(e),h},onDismiss(e){return p.push(e),m.push(e),h},hide(){return f(`hide`),h},update(e){if(c!==null){if(s)Object.assign(o,e);else{let{class:t,style:n,...r}=e;t!==void 0&&(r.cardClass=t),n!==void 0&&(r.cardStyle=n),rc(o,r)}c.$forceUpdate()}return h}},g=e=>{l=!0,p.forEach(t=>{t(e)})},_=()=>{v.unmount(d),Lt(d),v=null,c=null,l||m.forEach(e=>{e()})},v=st({name:`QGlobalDialog`,setup:()=>()=>M(a,{...o,ref:u,onOk:g,onHide:_,onVnodeMounted(...e){typeof o.onVnodeMounted==`function`&&o.onVnodeMounted(...e),C(()=>f(`show`))}})},n);return c=v.mount(d),h}}var ac={config:{dark:!0,brand:{primary:`#6c63ff`,secondary:`#26a69a`,accent:`#9c27b0`,dark:`#1a1a2e`,"dark-page":`#1a1a2e`,positive:`#21ba45`,negative:`#c10015`,info:`#31ccec`,warning:`#f2c037`}},plugins:{Notify:ni,Dialog:{install({$q:e,parentApp:t}){e.dialog=this.create=ic(nc,!0,t)}}}},oc=function(){return!!(window.location.hostname===`localhost`||window.location.hostname===`[::1]`||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))},sc;typeof window<`u`&&(sc=typeof Promise<`u`?new Promise(function(e){return window.addEventListener(`load`,e)}):{then:function(e){return window.addEventListener(`load`,e)}});function cc(e,t){t===void 0&&(t={});var n=t.registrationOptions;n===void 0&&(n={}),delete t.registrationOptions;var r=function(e){for(var n=[],r=arguments.length-1;r-->0;)n[r]=arguments[r+1];t&&t[e]&&t[e].apply(t,n)};`serviceWorker`in navigator&&sc.then(function(){oc()?(dc(e,r,n),navigator.serviceWorker.ready.then(function(e){r(`ready`,e)}).catch(function(e){return lc(r,e)})):(uc(e,r,n),navigator.serviceWorker.ready.then(function(e){r(`ready`,e)}).catch(function(e){return lc(r,e)}))})}function lc(e,t){navigator.onLine||e(`offline`),e(`error`,t)}function uc(e,t,n){navigator.serviceWorker.register(e,n).then(function(e){if(t(`registered`,e),e.waiting){t(`updated`,e);return}e.onupdatefound=function(){t(`updatefound`,e);var n=e.installing;n.onstatechange=function(){n.state===`installed`&&(navigator.serviceWorker.controller?t(`updated`,e):t(`cached`,e))}}}).catch(function(e){return lc(t,e)})}function dc(e,t,n){fetch(e).then(function(r){r.status===404?(t(`error`,Error(`Service worker not found at `+e)),fc()):r.headers.get(`content-type`).indexOf(`javascript`)===-1?(t(`error`,Error(`Expected `+e+` to have javascript content-type, but received `+r.headers.get(`content-type`))),fc()):uc(e,t,n)}).catch(function(e){return lc(t,e)})}function fc(){`serviceWorker`in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()}).catch(function(e){return lc(emit,e)})}cc(`/sw.js`);var pc=`/`;async function mc({app:e,router:t,store:n},r){let i=!1,a=e=>{try{return t.resolve(e).href}catch{}return Object(e)===e?null:e},o=e=>{if(i=!0,typeof e==`string`&&/^https?:\/\//.test(e)){window.location.href=e;return}let t=a(e);t!==null&&(window.location.href=t,window.location.reload())},s=window.location.href.replace(window.location.origin,``);for(let a=0;i===!1&&a<r.length;a++)try{await r[a]({app:e,router:t,store:n,ssrContext:null,redirect:o,urlPath:s,publicPath:pc})}catch(e){i||console.error(`[Quasar] boot error:`,e);return}i||(e.use(t),e.mount(`#q-app`))}Gs(te,ac).then(e=>{let[t,n]=Promise.allSettled===void 0?[`all`,e=>e.map(e=>e.default)]:[`allSettled`,e=>e.map(e=>{if(e.status===`rejected`){console.error(`[Quasar] boot error:`,e.reason);return}return e.value.default})];return Promise[t]([$(()=>import(`./i18n-DPDR4mQI.js`),[]),$(()=>import(`./network-auth-NMnCVoaZ.js`),[])]).then(t=>{mc(e,n(t).filter(e=>typeof e==`function`))})});export{Mn as $,bi as A,tt as At,Mr as B,zi as C,St as Ct,vi as D,mt as Dt,Si as E,ht as Et,fi as F,Er as G,Ar as H,ni as I,dr as J,vr as K,Br as L,Ti as M,U as Mt,wi as N,gi as O,pt as Ot,mi as P,In as Q,zr as R,Vi as S,Ct as St,_i as T,vt as Tt,jr as U,kr as V,Dr as W,Qn as X,ur as Y,Bn as Z,Gi as _,Ot as _t,$ as a,Jt as at,Ri as b,Tt as bt,Ra as c,qt as ct,q as d,$t as dt,On as et,ca as f,Ut as ft,ta as g,kt as gt,ra as h,jt as ht,Js as i,_n as it,Ei as j,nt as jt,xi as k,W as kt,Fa as l,Wt as lt,aa as m,At as mt,Zs as n,wn as nt,eo as o,Kt as ot,ia as p,Bt as pt,yr as q,Xs as r,Tn as rt,$a as s,nn as st,tc as t,kn as tt,la as u,en as ut,Wi as v,Dt as vt,Oi as w,xt as wt,Li as x,wt as xt,Hi as y,Et as yt,Pr as z};