@loicngr/kobo 2.1.21 → 2.1.22

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 (81) hide show
  1. package/AGENTS.md +22 -4
  2. package/CHANGELOG.md +5 -0
  3. package/CONFIGURATION.md +23 -2
  4. package/dist/server/services/agent/engines/claude-code/engine.js +5 -2
  5. package/dist/server/services/agent/engines/codex/engine.js +3 -0
  6. package/dist/server/services/agent/orchestrator.js +1 -0
  7. package/dist/server/services/agent/turn-liveness.js +1 -1
  8. package/dist/server/services/settings-service.js +30 -0
  9. package/docs/deployment-vps.md +25 -10
  10. package/docs/getting-started.md +11 -0
  11. package/package.json +1 -1
  12. package/scripts/kobo-update +19 -11
  13. package/src/client/dist/pwa/assets/{ActivityFeed-DiUxnmGJ.js → ActivityFeed-2wu6qXx1.js} +1 -1
  14. package/src/client/dist/pwa/assets/{AutoLoopFinalReviewSettings-f4VDR5dd.js → AutoLoopFinalReviewSettings-CwnNUWCh.js} +1 -1
  15. package/src/client/dist/pwa/assets/{ChangelogPage-dEWpjTlp.js → ChangelogPage-D9ke0TYz.js} +1 -1
  16. package/src/client/dist/pwa/assets/{ComparisonPanel-Bwbqgvr4.js → ComparisonPanel-ytDu1L7a.js} +1 -1
  17. package/src/client/dist/pwa/assets/{CreatePage-CCCCAhrx.js → CreatePage-YQ_jGilf.js} +1 -1
  18. package/src/client/dist/pwa/assets/{DashboardPage-3byhBITf.js → DashboardPage-C-PyArla.js} +1 -1
  19. package/src/client/dist/pwa/assets/{DiffViewer-Bj_NTfCF.js → DiffViewer-CPobwSwm.js} +3 -3
  20. package/src/client/dist/pwa/assets/{DocumentsPanel-xyLDV3T1.js → DocumentsPanel-BjZGNI-p.js} +1 -1
  21. package/src/client/dist/pwa/assets/{DrawerToggleButton-pwBSstQP.js → DrawerToggleButton-Dtd6fhYu.js} +1 -1
  22. package/src/client/dist/pwa/assets/{GitPanel-DvIdrkVw.js → GitPanel-BHJ3lpJZ.js} +3 -3
  23. package/src/client/dist/pwa/assets/{HealthPage-BSwhZQRo.js → HealthPage-Lv_IdF1l.js} +1 -1
  24. package/src/client/dist/pwa/assets/{MainLayout-DZJ9BvZw.js → MainLayout-DYumlWcP.js} +2 -2
  25. package/src/client/dist/pwa/assets/{MemoryPanel-ChR032zP.js → MemoryPanel-DS2F3x-S.js} +1 -1
  26. package/src/client/dist/pwa/assets/{MemoryProposalList-BRKSoS4K.js → MemoryProposalList-D_KDS3uX.js} +1 -1
  27. package/src/client/dist/pwa/assets/{QBtnDropdown-o3QH0Bb8.js → QBtnDropdown-XkBxmJO9.js} +1 -1
  28. package/src/client/dist/pwa/assets/{QExpansionItem-BhFHiyq9.js → QExpansionItem-B5vbHxJ2.js} +1 -1
  29. package/src/client/dist/pwa/assets/{QScrollArea-BsNY6slB.js → QScrollArea-BE_fAg20.js} +1 -1
  30. package/src/client/dist/pwa/assets/{QSelect-bEq3g_io.js → QSelect-BjZk4-r8.js} +1 -1
  31. package/src/client/dist/pwa/assets/{QTooltip-xYZ6KNu2.js → QTooltip-Dhn6VXWR.js} +1 -1
  32. package/src/client/dist/pwa/assets/{SchedulePanel-DIFv_FTY.js → SchedulePanel-BDhIt9pX.js} +1 -1
  33. package/src/client/dist/pwa/assets/{SearchPage-BqTBIt5E.js → SearchPage-CJrtIenZ.js} +1 -1
  34. package/src/client/dist/pwa/assets/SettingsPage-BSwN45zt.js +9 -0
  35. package/src/client/dist/pwa/assets/{SettingsPage-BRvUAZ5r.css → SettingsPage-CNIpxG-U.css} +1 -1
  36. package/src/client/dist/pwa/assets/{SplitWorkspacePage-D6r2pl5g.js → SplitWorkspacePage-BV62otQw.js} +1 -1
  37. package/src/client/dist/pwa/assets/{TerminalPanel-CladK9Vv.js → TerminalPanel-TQUHtZ-q.js} +1 -1
  38. package/src/client/dist/pwa/assets/{ToolCallItem-CdzEME4w.js → ToolCallItem-DxdYefuz.js} +1 -1
  39. package/src/client/dist/pwa/assets/{TouchPan-B4gQPwGN.js → TouchPan-CtwfZgkX.js} +1 -1
  40. package/src/client/dist/pwa/assets/{TourReplayButton-B0j6AZwU.js → TourReplayButton-DEC_Yt6E.js} +1 -1
  41. package/src/client/dist/pwa/assets/{WorkspaceAttentionLabels-CeVhoidC.js → WorkspaceAttentionLabels-BehGsWhI.js} +1 -1
  42. package/src/client/dist/pwa/assets/{WorkspacePage-w2bF8wTd.css → WorkspacePage-Bk-WWOYM.css} +1 -1
  43. package/src/client/dist/pwa/assets/{WorkspacePage-CK5XCuG_.js → WorkspacePage-CQz6QL5L.js} +3 -3
  44. package/src/client/dist/pwa/assets/{browser-B8tNScg1.js → browser-B3bGJv7H.js} +1 -1
  45. package/src/client/dist/pwa/assets/{build-path-tree-kmVAcvs_.js → build-path-tree-Bwwe_8vU.js} +1 -1
  46. package/src/client/dist/pwa/assets/{custom-sounds-CJwd-8TL.js → custom-sounds-1Rb1a5LA.js} +1 -1
  47. package/src/client/dist/pwa/assets/{de-BaO6kbdO.js → de-bfOiFUu1.js} +1 -1
  48. package/src/client/dist/pwa/assets/{editor.api-CgbPVW9s.js → editor.api-D2PTZoSF.js} +1 -1
  49. package/src/client/dist/pwa/assets/{efforts-y7Wf_Rgd.js → efforts-JkWc_mU5.js} +1 -1
  50. package/src/client/dist/pwa/assets/{es-DTvSsbD0.js → es-C5Sk8pec.js} +1 -1
  51. package/src/client/dist/pwa/assets/{expand-template-BFbbjj7X.js → expand-template-C-aGZz7k.js} +1 -1
  52. package/src/client/dist/pwa/assets/{format-BETfc4z9.js → format-BbXB3nKS.js} +1 -1
  53. package/src/client/dist/pwa/assets/{formatters-C22K9vlC.js → formatters-Bu3lC0Jk.js} +1 -1
  54. package/src/client/dist/pwa/assets/{fr-BH7V66Yz.js → fr-BNVJp67K.js} +1 -1
  55. package/src/client/dist/pwa/assets/{freemarker2-DiRVvp9O.js → freemarker2-qq6O820q.js} +1 -1
  56. package/src/client/dist/pwa/assets/{handlebars-BLYRroSQ.js → handlebars-nXATCa7t.js} +1 -1
  57. package/src/client/dist/pwa/assets/{html-DAW2vteY.js → html-ZSNyTQeY.js} +1 -1
  58. package/src/client/dist/pwa/assets/i18n-B_b02gtS.js +1 -0
  59. package/src/client/dist/pwa/assets/{index-CbyHfF8I.js → index-BZKHE14f.js} +3 -3
  60. package/src/client/dist/pwa/assets/{it-DZGbkkoy.js → it-B9g24VRZ.js} +1 -1
  61. package/src/client/dist/pwa/assets/{javascript-Bb5J8n0k.js → javascript-B3Elzrc0.js} +1 -1
  62. package/src/client/dist/pwa/assets/{liquid-Dqx3adnJ.js → liquid-CrMGh9mA.js} +1 -1
  63. package/src/client/dist/pwa/assets/{mdx-D_7igLV3.js → mdx-C6nxSGQ5.js} +1 -1
  64. package/src/client/dist/pwa/assets/{monaco-contributions-C-0CbrAy.js → monaco-contributions-WtuTHJJ8.js} +1 -1
  65. package/src/client/dist/pwa/assets/{monaco.contribution-c6JPBEZI.js → monaco.contribution--KeSH1BU.js} +2 -2
  66. package/src/client/dist/pwa/assets/{network-auth-BE4qbvWm.js → network-auth-DknPaiQS.js} +1 -1
  67. package/src/client/dist/pwa/assets/{notify-theme-BVFBBGrJ.js → notify-theme-DTaB0RsK.js} +1 -1
  68. package/src/client/dist/pwa/assets/{project-color-CHOR2jB5.js → project-color-bm_jpHka.js} +1 -1
  69. package/src/client/dist/pwa/assets/{python-Dqubw1F5.js → python-CQI_FwfK.js} +1 -1
  70. package/src/client/dist/pwa/assets/{razor-BQphc9Kt.js → razor-BT2wh4_7.js} +1 -1
  71. package/src/client/dist/pwa/assets/{typescript-Dep00l0X.js → typescript-D3ibItMf.js} +1 -1
  72. package/src/client/dist/pwa/assets/{use-search-index-status-CQHHvHwM.js → use-search-index-status-BnFR-_2l.js} +1 -1
  73. package/src/client/dist/pwa/assets/{use-tours-IVbXTmz2.js → use-tours-CsPhvrxf.js} +2 -2
  74. package/src/client/dist/pwa/assets/{use-worktree-restore-B3s5xDGR.js → use-worktree-restore-B5s0BuHk.js} +1 -1
  75. package/src/client/dist/pwa/assets/{workspace-templates-CyuTpztP.js → workspace-templates-GLO1mBlj.js} +1 -1
  76. package/src/client/dist/pwa/assets/{xml-BMS2dvaF.js → xml-EIEQlO3Y.js} +1 -1
  77. package/src/client/dist/pwa/assets/{yaml-CYw92aic.js → yaml-CJdHLr6G.js} +1 -1
  78. package/src/client/dist/pwa/index.html +1 -1
  79. package/src/client/dist/pwa/sw.js +1 -1
  80. package/src/client/dist/pwa/assets/SettingsPage-BLD0xWFB.js +0 -9
  81. package/src/client/dist/pwa/assets/i18n-DnuTmw3O.js +0 -1
@@ -1,4 +1,4 @@
1
- import{$a as e,$d as t,$f as n,$i as r,$m as i,$n as a,$o as o,$r as s,$t as c,$u as l,A as u,Ac as d,Af as f,Am as p,Ap as ee,At as m,B as h,Ba as g,Bc as _,Bi as v,Bm as te,Bn as y,Bp as ne,Bs as re,Cc as ie,Cd as b,Ch as ae,Cm as oe,Cn as se,Cp as ce,Cu as x,D as le,Dc as ue,Dd as S,Di as de,Dl as fe,Dm as pe,Dn as me,Dp as he,Dr as ge,Ds as _e,Du as ve,Eh as ye,Ei as be,Em as xe,En as Se,Ep as Ce,Er as we,Es as Te,Eu as Ee,Fc as De,Ff as Oe,Fh as ke,Fi as Ae,Fm as je,Fn as Me,Fo as Ne,Fp as Pe,Fr as Fe,Fs as Ie,G as Le,Gf as Re,Gh as ze,Gl as Be,Gm as C,Gs as Ve,Gt as He,Gu as Ue,H as We,Ha as Ge,Hc as Ke,Hh as w,Hl as T,Hm as qe,Hn as Je,Hp as Ye,Hs as E,Hu as Xe,I as Ze,Ia as Qe,Ic as D,Ip as $e,Ir as et,Is as tt,Iu as O,J as nt,Jd as rt,Jf as it,Jm as at,Jp as ot,Jr as st,Jt as ct,Ju as lt,K as ut,Kc as dt,Kd as ft,Kf as pt,Kh as mt,Kl as ht,Km as gt,Kn as _t,Ku as vt,La as yt,Lc as bt,Lp as xt,Ls as St,Lt as Ct,Lu as k,Mc as wt,Mf as Tt,Mh as Et,Mi as Dt,Ml as Ot,Mp as kt,Mr as At,N as jt,Nf as Mt,Nh as Nt,Nm as Pt,Nn as Ft,Np as It,Nr as Lt,Oc as Rt,Oi as zt,Ol as Bt,Om as Vt,Op as Ht,Ot as Ut,Ou as Wt,Pa as Gt,Pc as Kt,Ph as qt,Pi as Jt,Pl as Yt,Pn as Xt,Pp as Zt,Pr as Qt,Pt as $t,Qa as en,Qf as tn,Qi as nn,Ql as rn,Qm as A,Qr as an,Qu as on,Rc as j,Rl as sn,Rn as cn,Rp as ln,Rs as un,Rt as dn,Ru as fn,Sd as pn,Sf as mn,Si as hn,Sn as gn,Sp as _n,Sr as vn,Su as yn,Td as bn,Th as xn,Ti as Sn,Tl as Cn,Tm as wn,Tn,To as En,Tp as Dn,Tr as On,Ts as kn,Tt as An,Tu as jn,Ua as Mn,Uc as Nn,Ud as Pn,Ui as M,Ul as Fn,Um as In,Un as Ln,Up as Rn,Us as zn,Uu as Bn,Va as Vn,Vc as Hn,Vi as Un,Vl as N,Vp as Wn,Vu as Gn,W as Kn,Wa as qn,Wd as Jn,Wf as Yn,Wh as Xn,Wl as Zn,Wm as P,Wn as Qn,Ws as $n,Wu as er,Xc as tr,Xf as nr,Xl as rr,Xm as ir,Xu as ar,Y as or,Yd as sr,Yl as cr,Yn as lr,Yp as ur,Yr as dr,Za as fr,Zd as pr,Zl as mr,Zm as F,Zr as hr,Zu as gr,_f as _r,_h as vr,_m as yr,_n as br,_p as xr,_s as Sr,_t as Cr,_u as wr,aa as Tr,ah as I,am as Er,ap as Dr,ar as Or,au as kr,bc as Ar,bd as jr,bf as Mr,bh as Nr,bn as Pr,bo as Fr,bp as Ir,br as Lr,bu as L,cc as Rr,ch as zr,cl as Br,cm as Vr,cp as Hr,ct as Ur,dd as Wr,df as Gr,di as Kr,dl as qr,dn as Jr,dp as Yr,dr as Xr,dt as Zr,ef as Qr,eg as $r,ei,en as ti,eo as ni,ep as ri,er as ii,es as ai,eu as oi,f as si,ff as ci,fh as li,fn as ui,fp as di,fr as fi,ft as pi,fu as mi,g as hi,gc as gi,gf as _i,gm as vi,go as yi,gp as bi,gr as xi,gt as Si,hd as Ci,hf as wi,hi as Ti,hm as Ei,hn as Di,hp as Oi,hr as ki,ht as Ai,ia as ji,id as Mi,ig as Ni,ih as Pi,ii as Fi,io as Ii,ip as Li,ir as Ri,it as zi,iu as Bi,jc as Vi,jf as Hi,ji as Ui,jl as Wi,jm as Gi,jn as Ki,jp as qi,js as Ji,jt as Yi,ju as Xi,kc as Zi,ki as Qi,kl as $i,kn as ea,kp as ta,ks as na,kt as ra,lg as ia,lh as aa,li as oa,ll as sa,lm as ca,ln as la,lp as ua,lr as da,lt as fa,lu as pa,m as ma,md as ha,mf as ga,mi as _a,ml as va,mm as ya,mn as ba,mp as xa,mr as Sa,ms as Ca,mt as wa,mu as Ta,na as Ea,nd as Da,nf as Oa,nh as ka,nn as Aa,no as ja,np as Ma,nr as Na,ns as Pa,nt as Fa,nu as R,od as Ia,of as La,og as Ra,oh as za,oi as Ba,ol as Va,on as Ha,op as Ua,or as Wa,ot as Ga,ou as Ka,pc as qa,pf as Ja,pl as Ya,pm as Xa,pn as Za,pp as Qa,pr as $a,ps as eo,pt as to,pu as z,q as no,qa as ro,qc as io,qd as B,qf as ao,qh as oo,ql as so,qm as co,qn as lo,qt as uo,qu as fo,ra as po,rf as mo,rg as ho,rh as go,ri as _o,rn as vo,ro as yo,rp as bo,rr as xo,ru as V,sa as So,sd as Co,sg as wo,sh as To,sl as Eo,sp as Do,sr as H,ss as Oo,su as ko,t as Ao,ta as jo,tf as Mo,tg as No,th as Po,ti as Fo,tl as Io,tm as Lo,tn as Ro,to as zo,tp as Bo,tt as Vo,tu as Ho,u as Uo,uh as Wo,ul as Go,um as Ko,un as qo,up as Jo,ur as Yo,us as Xo,ut as Zo,uu as Qo,v as $o,vd as U,vf as es,vh as ts,vm as W,vn as ns,vo as rs,vp as is,vr as as,vs as os,vu as ss,wh as cs,wm as ls,wn as us,wp as ds,ws as fs,wt as ps,wu as ms,xc as hs,xf as gs,xh as G,xl as _s,xm as vs,xp as ys,xs as bs,yc as xs,yf as Ss,yh as Cs,ym as ws,yn as Ts,yp as Es,ys as Ds,yt as Os,yu as ks,za as As,zc as K,zl as js,zm as Ms,zn as Ns,zp as Ps,zs as Fs,zt as Is}from"./format-BETfc4z9.js";import{n as Ls}from"./SettingsPage-BLD0xWFB.js";function Rs(e,t,n){return new zs(e,t,n)}var zs=class extends re{constructor(e,t,n){super(n.worker,n.keepIdleModels||!1,e,t),this._foreignModuleHost=n.host||null,this._foreignProxy=this._getProxy().then(e=>new Proxy({},{get(t,n,r){if(n!==`then`){if(typeof n!=`string`)throw Error(`Not supported`);return(...t)=>e.$fmr(n,t)}}}))}fhr(e,t){if(!this._foreignModuleHost||typeof this._foreignModuleHost[e]!=`function`)return Promise.reject(Error(`Missing method `+e+` or missing main thread foreign host.`));try{return Promise.resolve(this._foreignModuleHost[e].apply(this._foreignModuleHost,t))}catch(e){return Promise.reject(e)}}getProxy(){return this._foreignProxy}withSyncedResources(e){return this.workerWithSyncedResources(e).then(e=>this.getProxy())}};function Bs(e){return Array.isArray(e)}function Vs(e){return!Bs(e)}function Hs(e){return typeof e==`string`}function Us(e){return!Hs(e)}function Ws(e){return!e}function Gs(e,t){return e.ignoreCase&&t?t.toLowerCase():t}function Ks(e){return e.replace(/[&<>'"_]/g,`-`)}function qs(e,t){console.log(`${e.languageId}: ${t}`)}function q(e,t){return Error(`${e.languageId}: ${t}`)}function Js(e,t,n,r,i){let a=/\$((\$)|(#)|(\d\d?)|[sS](\d\d?)|@(\w+))/g,o=null;return t.replace(a,function(t,a,s,c,l,u,d,f,p){return Ws(s)?Ws(c)?!Ws(l)&&l<r.length?Gs(e,r[l]):!Ws(d)&&e&&typeof e[d]==`string`?e[d]:(o===null&&(o=i.split(`.`),o.unshift(i)),!Ws(u)&&u<o.length?Gs(e,o[u]):``):Gs(e,n):`$`})}function Ys(e,t,n){let r=/\$[sS](\d\d?)/g,i=null;return t.replace(r,function(t,r){return i===null&&(i=n.split(`.`),i.unshift(n)),!Ws(r)&&r<i.length?Mt(Gs(e,i[r])):``})}function Xs(e,t){let n=t;for(;n&&n.length>0;){let t=e.tokenizer[n];if(t)return t;let r=n.lastIndexOf(`.`);n=r<0?null:n.substr(0,r)}return null}function Zs(e,t){let n=t;for(;n&&n.length>0;){if(e.stateNames[n])return!0;let t=n.lastIndexOf(`.`);n=t<0?null:n.substr(0,t)}return!1}var Qs,$s,ec=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},tc=function(e,t){return function(n,r){t(n,r,e)}},nc,rc=5,ic=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(e!==null&&e.depth>=this._maxCacheDepth)return new ac(e,t);let n=ac.getStackElementId(e);n.length>0&&(n+=`|`),n+=t;let r=this._entries[n];return r||(r=new ac(e,t),this._entries[n]=r,r)}};Qs=ic,Qs._INSTANCE=new Qs(rc);var ac=class e{constructor(e,t){this.parent=e,this.state=t,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(e){let t=``;for(;e!==null;)t.length>0&&(t+=`|`),t+=e.state,e=e.parent;return t}static _equals(e,t){for(;e!==null&&t!==null;){if(e===t)return!0;if(e.state!==t.state)return!1;e=e.parent,t=t.parent}return e===null&&t===null}equals(t){return e._equals(this,t)}push(e){return ic.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return ic.create(this.parent,e)}},oc=class e{constructor(e,t){this.languageId=e,this.state=t}equals(e){return this.languageId===e.languageId&&this.state.equals(e.state)}clone(){return this.state.clone()===this.state?this:new e(this.languageId,this.state)}},sc=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(t!==null||e!==null&&e.depth>=this._maxCacheDepth)return new cc(e,t);let n=ac.getStackElementId(e),r=this._entries[n];return r||(r=new cc(e,null),this._entries[n]=r,r)}};$s=sc,$s._INSTANCE=new $s(rc);var cc=class e{constructor(e,t){this.stack=e,this.embeddedLanguageData=t}clone(){return(this.embeddedLanguageData?this.embeddedLanguageData.clone():null)===this.embeddedLanguageData?this:sc.create(this.stack,this.embeddedLanguageData)}equals(t){return!(t instanceof e)||!this.stack.equals(t.stack)?!1:this.embeddedLanguageData===null&&t.embeddedLanguageData===null?!0:this.embeddedLanguageData===null||t.embeddedLanguageData===null?!1:this.embeddedLanguageData.equals(t.embeddedLanguageData)}},lc=class{constructor(){this._tokens=[],this._languageId=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterLanguage(e){this._languageId=e}emit(e,t){(this._lastTokenType!==t||this._lastTokenLanguage!==this._languageId)&&(this._lastTokenType=t,this._lastTokenLanguage=this._languageId,this._tokens.push(new Vr(e,t,this._languageId)))}nestedLanguageTokenize(e,t,n,r){let i=n.languageId,a=n.state,o=ca.get(i);if(!o)return this.enterLanguage(i),this.emit(r,``),a;let s=o.tokenize(e,t,a);if(r!==0)for(let e of s.tokens)this._tokens.push(new Vr(e.offset+r,e.type,e.language));else this._tokens=this._tokens.concat(s.tokens);return this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,s.endState}finalize(e){return new Ko(this._tokens,e)}},uc=class e{constructor(e,t){this._languageService=e,this._theme=t,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterLanguage(e){this._currentLanguageId=this._languageService.languageIdCodec.encodeLanguageId(e)}emit(e,t){let n=this._theme.match(this._currentLanguageId,t)|1024;this._lastTokenMetadata!==n&&(this._lastTokenMetadata=n,this._tokens.push(e),this._tokens.push(n))}static _merge(e,t,n){let r=e===null?0:e.length,i=t.length,a=n===null?0:n.length;if(r===0&&i===0&&a===0)return new Uint32Array;if(r===0&&i===0)return n;if(i===0&&a===0)return e;let o=new Uint32Array(r+i+a);e!==null&&o.set(e);for(let e=0;e<i;e++)o[r+e]=t[e];return n!==null&&o.set(n,r+i),o}nestedLanguageTokenize(t,n,r,i){let a=r.languageId,o=r.state,s=ca.get(a);if(!s)return this.enterLanguage(a),this.emit(i,``),o;let c=s.tokenizeEncoded(t,n,o);if(i!==0)for(let e=0,t=c.tokens.length;e<t;e+=2)c.tokens[e]+=i;return this._prependTokens=e._merge(this._prependTokens,this._tokens,c.tokens),this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0,c.endState}finalize(t){return new ot(e._merge(this._prependTokens,this._tokens,null),[],t)}},dc=nc=class extends F{constructor(e,t,n,r,i){super(),this._configurationService=i,this._languageService=e,this._standaloneThemeService=t,this._languageId=n,this._lexer=r,this._embeddedLanguages=Object.create(null),this.embeddedLoaded=Promise.resolve(void 0);let a=!1;this._register(ca.onDidChange(e=>{if(a)return;let t=!1;for(let n=0,r=e.changedLanguages.length;n<r;n++){let r=e.changedLanguages[n];if(this._embeddedLanguages[r]){t=!0;break}}t&&(a=!0,ca.handleChange([this._languageId]),a=!1)})),this._maxTokenizationLineLength=this._configurationService.getValue(`editor.maxTokenizationLineLength`,{overrideIdentifier:this._languageId}),this._register(this._configurationService.onDidChangeConfiguration(e=>{e.affectsConfiguration(`editor.maxTokenizationLineLength`)&&(this._maxTokenizationLineLength=this._configurationService.getValue(`editor.maxTokenizationLineLength`,{overrideIdentifier:this._languageId}))}))}getLoadStatus(){let e=[];for(let t in this._embeddedLanguages){let n=ca.get(t);if(n){if(n instanceof nc){let t=n.getLoadStatus();t.loaded===!1&&e.push(t.promise)}continue}ca.isResolved(t)||e.push(ca.getOrCreate(t))}return e.length===0?{loaded:!0}:{loaded:!1,promise:Promise.all(e).then(e=>void 0)}}getInitialState(){let e=ic.create(null,this._lexer.start);return sc.create(e,null)}tokenize(e,t,n){if(e.length>=this._maxTokenizationLineLength)return St(this._languageId,n);let r=new lc,i=this._tokenize(e,t,n,r);return r.finalize(i)}tokenizeEncoded(e,t,n){if(e.length>=this._maxTokenizationLineLength)return un(this._languageService.languageIdCodec.encodeLanguageId(this._languageId),n);let r=new uc(this._languageService,this._standaloneThemeService.getColorTheme().tokenTheme),i=this._tokenize(e,t,n,r);return r.finalize(i)}_tokenize(e,t,n,r){return n.embeddedLanguageData?this._nestedTokenize(e,t,n,0,r):this._myTokenize(e,t,n,0,r)}_findLeavingNestedLanguageOffset(e,t){let n=this._lexer.tokenizer[t.stack.state];if(!n&&(n=Xs(this._lexer,t.stack.state),!n))throw q(this._lexer,`tokenizer state is not defined: `+t.stack.state);let r=-1,i=!1;for(let a of n){if(!Us(a.action)||!(a.action.nextEmbedded===`@pop`||a.action.hasEmbeddedEndInCases))continue;i=!0;let n=a.resolveRegex(t.stack.state),o=n.source;if(o.substr(0,4)===`^(?:`&&o.substr(o.length-1,1)===`)`){let e=(n.ignoreCase?`i`:``)+(n.unicode?`u`:``);n=new RegExp(o.substr(4,o.length-5),e)}let s=e.search(n);s===-1||s!==0&&a.matchOnlyAtLineStart||(r===-1||s<r)&&(r=s)}if(!i)throw q(this._lexer,`no rule containing nextEmbedded: "@pop" in tokenizer embedded state: `+t.stack.state);return r}_nestedTokenize(e,t,n,r,i){let a=this._findLeavingNestedLanguageOffset(e,n);if(a===-1){let a=i.nestedLanguageTokenize(e,t,n.embeddedLanguageData,r);return sc.create(n.stack,new oc(n.embeddedLanguageData.languageId,a))}let o=e.substring(0,a);o.length>0&&i.nestedLanguageTokenize(o,!1,n.embeddedLanguageData,r);let s=e.substring(a);return this._myTokenize(s,t,n,r+a,i)}_safeRuleName(e){return e?e.name:`(unknown)`}_myTokenize(e,t,n,r,i){i.enterLanguage(this._languageId);let a=e.length,o=t&&this._lexer.includeLF?e+`
1
+ import{$a as e,$d as t,$f as n,$i as r,$m as i,$n as a,$o as o,$r as s,$t as c,$u as l,A as u,Ac as d,Af as f,Am as p,Ap as ee,At as m,B as h,Ba as g,Bc as _,Bi as v,Bm as te,Bn as y,Bp as ne,Bs as re,Cc as ie,Cd as b,Ch as ae,Cm as oe,Cn as se,Cp as ce,Cu as x,D as le,Dc as ue,Dd as S,Di as de,Dl as fe,Dm as pe,Dn as me,Dp as he,Dr as ge,Ds as _e,Du as ve,Eh as ye,Ei as be,Em as xe,En as Se,Ep as Ce,Er as we,Es as Te,Eu as Ee,Fc as De,Ff as Oe,Fh as ke,Fi as Ae,Fm as je,Fn as Me,Fo as Ne,Fp as Pe,Fr as Fe,Fs as Ie,G as Le,Gf as Re,Gh as ze,Gl as Be,Gm as C,Gs as Ve,Gt as He,Gu as Ue,H as We,Ha as Ge,Hc as Ke,Hh as w,Hl as T,Hm as qe,Hn as Je,Hp as Ye,Hs as E,Hu as Xe,I as Ze,Ia as Qe,Ic as D,Ip as $e,Ir as et,Is as tt,Iu as O,J as nt,Jd as rt,Jf as it,Jm as at,Jp as ot,Jr as st,Jt as ct,Ju as lt,K as ut,Kc as dt,Kd as ft,Kf as pt,Kh as mt,Kl as ht,Km as gt,Kn as _t,Ku as vt,La as yt,Lc as bt,Lp as xt,Ls as St,Lt as Ct,Lu as k,Mc as wt,Mf as Tt,Mh as Et,Mi as Dt,Ml as Ot,Mp as kt,Mr as At,N as jt,Nf as Mt,Nh as Nt,Nm as Pt,Nn as Ft,Np as It,Nr as Lt,Oc as Rt,Oi as zt,Ol as Bt,Om as Vt,Op as Ht,Ot as Ut,Ou as Wt,Pa as Gt,Pc as Kt,Ph as qt,Pi as Jt,Pl as Yt,Pn as Xt,Pp as Zt,Pr as Qt,Pt as $t,Qa as en,Qf as tn,Qi as nn,Ql as rn,Qm as A,Qr as an,Qu as on,Rc as j,Rl as sn,Rn as cn,Rp as ln,Rs as un,Rt as dn,Ru as fn,Sd as pn,Sf as mn,Si as hn,Sn as gn,Sp as _n,Sr as vn,Su as yn,Td as bn,Th as xn,Ti as Sn,Tl as Cn,Tm as wn,Tn,To as En,Tp as Dn,Tr as On,Ts as kn,Tt as An,Tu as jn,Ua as Mn,Uc as Nn,Ud as Pn,Ui as M,Ul as Fn,Um as In,Un as Ln,Up as Rn,Us as zn,Uu as Bn,Va as Vn,Vc as Hn,Vi as Un,Vl as N,Vp as Wn,Vu as Gn,W as Kn,Wa as qn,Wd as Jn,Wf as Yn,Wh as Xn,Wl as Zn,Wm as P,Wn as Qn,Ws as $n,Wu as er,Xc as tr,Xf as nr,Xl as rr,Xm as ir,Xu as ar,Y as or,Yd as sr,Yl as cr,Yn as lr,Yp as ur,Yr as dr,Za as fr,Zd as pr,Zl as mr,Zm as F,Zr as hr,Zu as gr,_f as _r,_h as vr,_m as yr,_n as br,_p as xr,_s as Sr,_t as Cr,_u as wr,aa as Tr,ah as I,am as Er,ap as Dr,ar as Or,au as kr,bc as Ar,bd as jr,bf as Mr,bh as Nr,bn as Pr,bo as Fr,bp as Ir,br as Lr,bu as L,cc as Rr,ch as zr,cl as Br,cm as Vr,cp as Hr,ct as Ur,dd as Wr,df as Gr,di as Kr,dl as qr,dn as Jr,dp as Yr,dr as Xr,dt as Zr,ef as Qr,eg as $r,ei,en as ti,eo as ni,ep as ri,er as ii,es as ai,eu as oi,f as si,ff as ci,fh as li,fn as ui,fp as di,fr as fi,ft as pi,fu as mi,g as hi,gc as gi,gf as _i,gm as vi,go as yi,gp as bi,gr as xi,gt as Si,hd as Ci,hf as wi,hi as Ti,hm as Ei,hn as Di,hp as Oi,hr as ki,ht as Ai,ia as ji,id as Mi,ig as Ni,ih as Pi,ii as Fi,io as Ii,ip as Li,ir as Ri,it as zi,iu as Bi,jc as Vi,jf as Hi,ji as Ui,jl as Wi,jm as Gi,jn as Ki,jp as qi,js as Ji,jt as Yi,ju as Xi,kc as Zi,ki as Qi,kl as $i,kn as ea,kp as ta,ks as na,kt as ra,lg as ia,lh as aa,li as oa,ll as sa,lm as ca,ln as la,lp as ua,lr as da,lt as fa,lu as pa,m as ma,md as ha,mf as ga,mi as _a,ml as va,mm as ya,mn as ba,mp as xa,mr as Sa,ms as Ca,mt as wa,mu as Ta,na as Ea,nd as Da,nf as Oa,nh as ka,nn as Aa,no as ja,np as Ma,nr as Na,ns as Pa,nt as Fa,nu as R,od as Ia,of as La,og as Ra,oh as za,oi as Ba,ol as Va,on as Ha,op as Ua,or as Wa,ot as Ga,ou as Ka,pc as qa,pf as Ja,pl as Ya,pm as Xa,pn as Za,pp as Qa,pr as $a,ps as eo,pt as to,pu as z,q as no,qa as ro,qc as io,qd as B,qf as ao,qh as oo,ql as so,qm as co,qn as lo,qt as uo,qu as fo,ra as po,rf as mo,rg as ho,rh as go,ri as _o,rn as vo,ro as yo,rp as bo,rr as xo,ru as V,sa as So,sd as Co,sg as wo,sh as To,sl as Eo,sp as Do,sr as H,ss as Oo,su as ko,t as Ao,ta as jo,tf as Mo,tg as No,th as Po,ti as Fo,tl as Io,tm as Lo,tn as Ro,to as zo,tp as Bo,tt as Vo,tu as Ho,u as Uo,uh as Wo,ul as Go,um as Ko,un as qo,up as Jo,ur as Yo,us as Xo,ut as Zo,uu as Qo,v as $o,vd as U,vf as es,vh as ts,vm as W,vn as ns,vo as rs,vp as is,vr as as,vs as os,vu as ss,wh as cs,wm as ls,wn as us,wp as ds,ws as fs,wt as ps,wu as ms,xc as hs,xf as gs,xh as G,xl as _s,xm as vs,xp as ys,xs as bs,yc as xs,yf as Ss,yh as Cs,ym as ws,yn as Ts,yp as Es,ys as Ds,yt as Os,yu as ks,za as As,zc as K,zl as js,zm as Ms,zn as Ns,zp as Ps,zs as Fs,zt as Is}from"./format-BbXB3nKS.js";import{n as Ls}from"./SettingsPage-BSwN45zt.js";function Rs(e,t,n){return new zs(e,t,n)}var zs=class extends re{constructor(e,t,n){super(n.worker,n.keepIdleModels||!1,e,t),this._foreignModuleHost=n.host||null,this._foreignProxy=this._getProxy().then(e=>new Proxy({},{get(t,n,r){if(n!==`then`){if(typeof n!=`string`)throw Error(`Not supported`);return(...t)=>e.$fmr(n,t)}}}))}fhr(e,t){if(!this._foreignModuleHost||typeof this._foreignModuleHost[e]!=`function`)return Promise.reject(Error(`Missing method `+e+` or missing main thread foreign host.`));try{return Promise.resolve(this._foreignModuleHost[e].apply(this._foreignModuleHost,t))}catch(e){return Promise.reject(e)}}getProxy(){return this._foreignProxy}withSyncedResources(e){return this.workerWithSyncedResources(e).then(e=>this.getProxy())}};function Bs(e){return Array.isArray(e)}function Vs(e){return!Bs(e)}function Hs(e){return typeof e==`string`}function Us(e){return!Hs(e)}function Ws(e){return!e}function Gs(e,t){return e.ignoreCase&&t?t.toLowerCase():t}function Ks(e){return e.replace(/[&<>'"_]/g,`-`)}function qs(e,t){console.log(`${e.languageId}: ${t}`)}function q(e,t){return Error(`${e.languageId}: ${t}`)}function Js(e,t,n,r,i){let a=/\$((\$)|(#)|(\d\d?)|[sS](\d\d?)|@(\w+))/g,o=null;return t.replace(a,function(t,a,s,c,l,u,d,f,p){return Ws(s)?Ws(c)?!Ws(l)&&l<r.length?Gs(e,r[l]):!Ws(d)&&e&&typeof e[d]==`string`?e[d]:(o===null&&(o=i.split(`.`),o.unshift(i)),!Ws(u)&&u<o.length?Gs(e,o[u]):``):Gs(e,n):`$`})}function Ys(e,t,n){let r=/\$[sS](\d\d?)/g,i=null;return t.replace(r,function(t,r){return i===null&&(i=n.split(`.`),i.unshift(n)),!Ws(r)&&r<i.length?Mt(Gs(e,i[r])):``})}function Xs(e,t){let n=t;for(;n&&n.length>0;){let t=e.tokenizer[n];if(t)return t;let r=n.lastIndexOf(`.`);n=r<0?null:n.substr(0,r)}return null}function Zs(e,t){let n=t;for(;n&&n.length>0;){if(e.stateNames[n])return!0;let t=n.lastIndexOf(`.`);n=t<0?null:n.substr(0,t)}return!1}var Qs,$s,ec=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},tc=function(e,t){return function(n,r){t(n,r,e)}},nc,rc=5,ic=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(e!==null&&e.depth>=this._maxCacheDepth)return new ac(e,t);let n=ac.getStackElementId(e);n.length>0&&(n+=`|`),n+=t;let r=this._entries[n];return r||(r=new ac(e,t),this._entries[n]=r,r)}};Qs=ic,Qs._INSTANCE=new Qs(rc);var ac=class e{constructor(e,t){this.parent=e,this.state=t,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(e){let t=``;for(;e!==null;)t.length>0&&(t+=`|`),t+=e.state,e=e.parent;return t}static _equals(e,t){for(;e!==null&&t!==null;){if(e===t)return!0;if(e.state!==t.state)return!1;e=e.parent,t=t.parent}return e===null&&t===null}equals(t){return e._equals(this,t)}push(e){return ic.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return ic.create(this.parent,e)}},oc=class e{constructor(e,t){this.languageId=e,this.state=t}equals(e){return this.languageId===e.languageId&&this.state.equals(e.state)}clone(){return this.state.clone()===this.state?this:new e(this.languageId,this.state)}},sc=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(t!==null||e!==null&&e.depth>=this._maxCacheDepth)return new cc(e,t);let n=ac.getStackElementId(e),r=this._entries[n];return r||(r=new cc(e,null),this._entries[n]=r,r)}};$s=sc,$s._INSTANCE=new $s(rc);var cc=class e{constructor(e,t){this.stack=e,this.embeddedLanguageData=t}clone(){return(this.embeddedLanguageData?this.embeddedLanguageData.clone():null)===this.embeddedLanguageData?this:sc.create(this.stack,this.embeddedLanguageData)}equals(t){return!(t instanceof e)||!this.stack.equals(t.stack)?!1:this.embeddedLanguageData===null&&t.embeddedLanguageData===null?!0:this.embeddedLanguageData===null||t.embeddedLanguageData===null?!1:this.embeddedLanguageData.equals(t.embeddedLanguageData)}},lc=class{constructor(){this._tokens=[],this._languageId=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterLanguage(e){this._languageId=e}emit(e,t){(this._lastTokenType!==t||this._lastTokenLanguage!==this._languageId)&&(this._lastTokenType=t,this._lastTokenLanguage=this._languageId,this._tokens.push(new Vr(e,t,this._languageId)))}nestedLanguageTokenize(e,t,n,r){let i=n.languageId,a=n.state,o=ca.get(i);if(!o)return this.enterLanguage(i),this.emit(r,``),a;let s=o.tokenize(e,t,a);if(r!==0)for(let e of s.tokens)this._tokens.push(new Vr(e.offset+r,e.type,e.language));else this._tokens=this._tokens.concat(s.tokens);return this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,s.endState}finalize(e){return new Ko(this._tokens,e)}},uc=class e{constructor(e,t){this._languageService=e,this._theme=t,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterLanguage(e){this._currentLanguageId=this._languageService.languageIdCodec.encodeLanguageId(e)}emit(e,t){let n=this._theme.match(this._currentLanguageId,t)|1024;this._lastTokenMetadata!==n&&(this._lastTokenMetadata=n,this._tokens.push(e),this._tokens.push(n))}static _merge(e,t,n){let r=e===null?0:e.length,i=t.length,a=n===null?0:n.length;if(r===0&&i===0&&a===0)return new Uint32Array;if(r===0&&i===0)return n;if(i===0&&a===0)return e;let o=new Uint32Array(r+i+a);e!==null&&o.set(e);for(let e=0;e<i;e++)o[r+e]=t[e];return n!==null&&o.set(n,r+i),o}nestedLanguageTokenize(t,n,r,i){let a=r.languageId,o=r.state,s=ca.get(a);if(!s)return this.enterLanguage(a),this.emit(i,``),o;let c=s.tokenizeEncoded(t,n,o);if(i!==0)for(let e=0,t=c.tokens.length;e<t;e+=2)c.tokens[e]+=i;return this._prependTokens=e._merge(this._prependTokens,this._tokens,c.tokens),this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0,c.endState}finalize(t){return new ot(e._merge(this._prependTokens,this._tokens,null),[],t)}},dc=nc=class extends F{constructor(e,t,n,r,i){super(),this._configurationService=i,this._languageService=e,this._standaloneThemeService=t,this._languageId=n,this._lexer=r,this._embeddedLanguages=Object.create(null),this.embeddedLoaded=Promise.resolve(void 0);let a=!1;this._register(ca.onDidChange(e=>{if(a)return;let t=!1;for(let n=0,r=e.changedLanguages.length;n<r;n++){let r=e.changedLanguages[n];if(this._embeddedLanguages[r]){t=!0;break}}t&&(a=!0,ca.handleChange([this._languageId]),a=!1)})),this._maxTokenizationLineLength=this._configurationService.getValue(`editor.maxTokenizationLineLength`,{overrideIdentifier:this._languageId}),this._register(this._configurationService.onDidChangeConfiguration(e=>{e.affectsConfiguration(`editor.maxTokenizationLineLength`)&&(this._maxTokenizationLineLength=this._configurationService.getValue(`editor.maxTokenizationLineLength`,{overrideIdentifier:this._languageId}))}))}getLoadStatus(){let e=[];for(let t in this._embeddedLanguages){let n=ca.get(t);if(n){if(n instanceof nc){let t=n.getLoadStatus();t.loaded===!1&&e.push(t.promise)}continue}ca.isResolved(t)||e.push(ca.getOrCreate(t))}return e.length===0?{loaded:!0}:{loaded:!1,promise:Promise.all(e).then(e=>void 0)}}getInitialState(){let e=ic.create(null,this._lexer.start);return sc.create(e,null)}tokenize(e,t,n){if(e.length>=this._maxTokenizationLineLength)return St(this._languageId,n);let r=new lc,i=this._tokenize(e,t,n,r);return r.finalize(i)}tokenizeEncoded(e,t,n){if(e.length>=this._maxTokenizationLineLength)return un(this._languageService.languageIdCodec.encodeLanguageId(this._languageId),n);let r=new uc(this._languageService,this._standaloneThemeService.getColorTheme().tokenTheme),i=this._tokenize(e,t,n,r);return r.finalize(i)}_tokenize(e,t,n,r){return n.embeddedLanguageData?this._nestedTokenize(e,t,n,0,r):this._myTokenize(e,t,n,0,r)}_findLeavingNestedLanguageOffset(e,t){let n=this._lexer.tokenizer[t.stack.state];if(!n&&(n=Xs(this._lexer,t.stack.state),!n))throw q(this._lexer,`tokenizer state is not defined: `+t.stack.state);let r=-1,i=!1;for(let a of n){if(!Us(a.action)||!(a.action.nextEmbedded===`@pop`||a.action.hasEmbeddedEndInCases))continue;i=!0;let n=a.resolveRegex(t.stack.state),o=n.source;if(o.substr(0,4)===`^(?:`&&o.substr(o.length-1,1)===`)`){let e=(n.ignoreCase?`i`:``)+(n.unicode?`u`:``);n=new RegExp(o.substr(4,o.length-5),e)}let s=e.search(n);s===-1||s!==0&&a.matchOnlyAtLineStart||(r===-1||s<r)&&(r=s)}if(!i)throw q(this._lexer,`no rule containing nextEmbedded: "@pop" in tokenizer embedded state: `+t.stack.state);return r}_nestedTokenize(e,t,n,r,i){let a=this._findLeavingNestedLanguageOffset(e,n);if(a===-1){let a=i.nestedLanguageTokenize(e,t,n.embeddedLanguageData,r);return sc.create(n.stack,new oc(n.embeddedLanguageData.languageId,a))}let o=e.substring(0,a);o.length>0&&i.nestedLanguageTokenize(o,!1,n.embeddedLanguageData,r);let s=e.substring(a);return this._myTokenize(s,t,n,r+a,i)}_safeRuleName(e){return e?e.name:`(unknown)`}_myTokenize(e,t,n,r,i){i.enterLanguage(this._languageId);let a=e.length,o=t&&this._lexer.includeLF?e+`
2
2
  `:e,s=o.length,c=n.embeddedLanguageData,l=n.stack,u=0,d=null,f=!0;for(;f||u<s;){let n=u,p=l.depth,ee=d?d.groups.length:0,m=l.state,h=null,g=null,_=null,v=null,te=null;if(d){h=d.matches;let e=d.groups.shift();g=e.matched,_=e.action,v=d.rule,d.groups.length===0&&(d=null)}else{if(!f&&u>=s)break;f=!1;let e=this._lexer.tokenizer[m];if(!e&&(e=Xs(this._lexer,m),!e))throw q(this._lexer,`tokenizer state is not defined: `+m);let t=o.substr(u);for(let n of e)if((u===0||!n.matchOnlyAtLineStart)&&(h=t.match(n.resolveRegex(m)),h)){g=h[0],_=n.action;break}}if(h||(h=[``],g=``),_||=(u<s&&(h=[o.charAt(u)],g=h[0]),this._lexer.defaultToken),g===null)break;for(u+=g.length;Vs(_)&&Us(_)&&_.test;)_=_.test(g,h,m,u===s);let y=null;if(typeof _==`string`||Array.isArray(_))y=_;else if(_.group)y=_.group;else if(_.token!==null&&_.token!==void 0){if(y=_.tokenSubst?Js(this._lexer,_.token,g,h,m):_.token,_.nextEmbedded){if(_.nextEmbedded===`@pop`){if(!c)throw q(this._lexer,`cannot pop embedded language if not inside one`);c=null}else if(c)throw q(this._lexer,`cannot enter embedded language from within an embedded language`);else te=Js(this._lexer,_.nextEmbedded,g,h,m)}if(_.goBack&&(u=Math.max(0,u-_.goBack)),_.switchTo&&typeof _.switchTo==`string`){let e=Js(this._lexer,_.switchTo,g,h,m);if(e[0]===`@`&&(e=e.substr(1)),Xs(this._lexer,e))l=l.switchTo(e);else throw q(this._lexer,`trying to switch to a state '`+e+`' that is undefined in rule: `+this._safeRuleName(v))}else if(_.transform&&typeof _.transform==`function`)throw q(this._lexer,`action.transform not supported`);else if(_.next){if(_.next===`@push`){if(l.depth>=this._lexer.maxStack)throw q(this._lexer,`maximum tokenizer stack size reached: [`+l.state+`,`+l.parent.state+`,...]`);l=l.push(m)}else if(_.next===`@pop`){if(l.depth<=1)throw q(this._lexer,`trying to pop an empty stack in rule: `+this._safeRuleName(v));l=l.pop()}else if(_.next===`@popall`)l=l.popall();else{let e=Js(this._lexer,_.next,g,h,m);if(e[0]===`@`&&(e=e.substr(1)),Xs(this._lexer,e))l=l.push(e);else throw q(this._lexer,`trying to set a next state '`+e+`' that is undefined in rule: `+this._safeRuleName(v))}}_.log&&typeof _.log==`string`&&qs(this._lexer,this._lexer.languageId+`: `+Js(this._lexer,_.log,g,h,m))}if(y===null)throw q(this._lexer,`lexer rule has no well-defined action in rule: `+this._safeRuleName(v));let ne=n=>{let a=this._languageService.getLanguageIdByLanguageName(n)||this._languageService.getLanguageIdByMimeType(n)||n,o=this._getNestedEmbeddedLanguageData(a);if(u<s){let n=e.substr(u);return this._nestedTokenize(n,t,sc.create(l,o),r+u,i)}return sc.create(l,o)};if(Array.isArray(y)){if(d&&d.groups.length>0)throw q(this._lexer,`groups cannot be nested: `+this._safeRuleName(v));if(h.length!==y.length+1)throw q(this._lexer,`matched number of groups does not match the number of actions in rule: `+this._safeRuleName(v));let e=0;for(let t=1;t<h.length;t++)e+=h[t].length;if(e!==g.length)throw q(this._lexer,`with groups, all characters should be matched in consecutive groups in rule: `+this._safeRuleName(v));d={rule:v,matches:h,groups:[]};for(let e=0;e<y.length;e++)d.groups[e]={action:y[e],matched:h[e+1]};u-=g.length;continue}{if(y===`@rematch`&&(u-=g.length,g=``,h=null,y=``,te!==null))return ne(te);if(g.length===0){if(s===0||p!==l.depth||m!==l.state||(d?d.groups.length:0)!==ee)continue;throw q(this._lexer,`no progress in tokenizer in rule: `+this._safeRuleName(v))}let e=null;if(Hs(y)&&y.indexOf(`@brackets`)===0){let t=y.substr(9),n=fc(this._lexer,g);if(!n)throw q(this._lexer,`@brackets token returned but no bracket defined as: `+g);e=Ks(n.token+t)}else e=Ks(y===``?``:y+this._lexer.tokenPostfix);n<a&&i.emit(n+r,e)}if(te!==null)return ne(te)}return sc.create(l,c)}_getNestedEmbeddedLanguageData(e){if(!this._languageService.isRegisteredLanguageId(e))return new oc(e,tt);e!==this._languageId&&(this._languageService.requestBasicLanguageFeatures(e),ca.getOrCreate(e),this._embeddedLanguages[e]=!0);let t=ca.get(e);return t?new oc(e,t.getInitialState()):new oc(e,tt)}};dc=nc=ec([tc(4,K)],dc);function fc(e,t){if(!t)return null;t=Gs(e,t);let n=e.brackets;for(let e of n)if(e.open===t)return{token:e.token,bracketType:1};else if(e.close===t)return{token:e.token,bracketType:-1};return null}var pc=Ie(`standaloneColorizer`,{createHTML:e=>e}),mc=class{static colorizeElement(e,t,n,r){r||={};let i=r.theme||`vs`,a=r.mimeType||n.getAttribute(`lang`)||n.getAttribute(`data-lang`);if(!a)return console.error(`Mode not detected`),Promise.resolve();let o=t.getLanguageIdByMimeType(a)||a;e.setTheme(i);let s=n.firstChild?n.firstChild.nodeValue:``;return n.className+=` `+i,this.colorize(t,s||``,o,r).then(e=>{n.innerHTML=pc?.createHTML(e)??e},e=>console.error(e))}static async colorize(e,t,n,r){let i=e.languageIdCodec,a=4;r&&typeof r.tabSize==`number`&&(a=r.tabSize),it(t)&&(t=t.substr(1));let o=ao(t);if(!e.isRegisteredLanguageId(n))return gc(o,a,i);let s=await ca.getOrCreate(n);return s?hc(o,a,s,i):gc(o,a,i)}static colorizeLine(e,t,n,r,i=4){let a=Te.isBasicASCII(e,t),o=Te.containsRTL(e,a,n);return na(new _e(!1,!0,e,!1,a,o,0,r,[],i,0,0,0,0,-1,`none`,!1,!1,null,null,0)).html}static colorizeModelLine(e,t,n=4){let r=e.getLineContent(t);e.tokenization.forceTokenization(t);let i=e.tokenization.getLineTokens(t).inflate();return this.colorizeLine(r,e.mightContainNonBasicASCII(),e.mightContainRTL(),i,n)}};function hc(e,t,n,r){return new Promise((i,a)=>{let o=()=>{let s=_c(e,t,n,r);if(n instanceof dc){let e=n.getLoadStatus();if(e.loaded===!1){e.promise.then(o,a);return}}i(s)};o()})}function gc(e,t,n){let r=[],i=new Uint32Array(2);i[0]=0,i[1]=33587200;for(let a=0,o=e.length;a<o;a++){let o=e[a];i[0]=o.length;let s=new Ji(i,o,n),c=Te.isBasicASCII(o,!0),l=Te.containsRTL(o,c,!0),u=na(new _e(!1,!0,o,!1,c,l,0,s,[],t,0,0,0,0,-1,`none`,!1,!1,null,null,0));r=r.concat(u.html),r.push(`<br/>`)}return r.join(``)}function _c(e,t,n,r){let i=[],a=n.getInitialState();for(let o=0,s=e.length;o<s;o++){let s=e[o],c=n.tokenizeEncoded(s,!0,a);Ji.convertToEndOffset(c.tokens,s.length);let l=new Ji(c.tokens,s,r),u=Te.isBasicASCII(s,!0),d=Te.containsRTL(s,u,!0),f=na(new _e(!1,!0,s,!1,u,d,0,l.inflate(),[],t,0,0,0,0,-1,`none`,!1,!1,null,null,0));i=i.concat(f.html),i.push(`<br/>`),a=c.endState}return i.join(``)}var vc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},yc=function(e,t){return function(n,r){t(n,r,e)}},bc=pa,xc=class extends Vn{get _targetWindow(){return O(this._target.targetElements[0])}get _targetDocumentElement(){return O(this._target.targetElements[0]).document.documentElement}get isDisposed(){return this._isDisposed}get isMouseIn(){return this._lockMouseTracker.isMouseIn}get domNode(){return this._hover.containerDomNode}get onDispose(){return this._onDispose.event}get onRequestLayout(){return this._onRequestLayout.event}get anchor(){return this._hoverPosition===2?0:1}get x(){return this._x}get y(){return this._y}get isLocked(){return this._isLocked}set isLocked(e){this._isLocked!==e&&(this._isLocked=e,this._hoverContainer.classList.toggle(`locked`,this._isLocked))}addMouseTrackingElement(e){return this._lockMouseTracker.addElement(e)}constructor(e,t,n,r,i){if(super(),this._keybindingService=t,this._configurationService=n,this._markdownRenderer=r,this._accessibilityService=i,this._messageListeners=new A,this._isDisposed=!1,this._forcePosition=!1,this._x=0,this._y=0,this._isLocked=!1,this._enableFocusTraps=!1,this._addedFocusTrap=!1,this._maxHeightRatioRelativeToWindow=.5,this._onDispose=this._register(new P),this._onRequestLayout=this._register(new P),this._linkHandler=e.linkHandler,this._target=`targetElements`in e.target?e.target:new Cc(e.target),this._anchorAlignment=e.position?.anchorAlignment??0,e.style)switch(e.style){case 1:e.appearance??={},e.appearance.compact??=!0,e.appearance.showPointer??=!0;break;case 2:e.appearance??={},e.appearance.compact??=!0}this._hoverPointer=e.appearance?.showPointer?bc(`div.workbench-hover-pointer`):void 0,this._hover=this._register(new dr(!e.appearance?.skipFadeInAnimation)),this._hover.containerDomNode.classList.add(`workbench-hover`),e.appearance?.compact&&this._hover.containerDomNode.classList.add(`workbench-hover`,`compact`),this._hoverPointer&&this._hover.containerDomNode.classList.add(`with-pointer`),e.additionalClasses&&this._hover.containerDomNode.classList.add(...e.additionalClasses),e.position?.forcePosition&&(this._forcePosition=!0),e.trapFocus&&(this._enableFocusTraps=!0);let a=e.appearance?.maxHeightRatio;a!==void 0&&a>0&&a<=1&&(this._maxHeightRatioRelativeToWindow=a),this._hoverPosition=e.position?.hoverPosition===void 0?3:Nt(e.position.hoverPosition)?e.position.hoverPosition:2,this.onmousedown(this._hover.containerDomNode,e=>e.stopPropagation()),this.onkeydown(this._hover.containerDomNode,e=>{e.equals(9)&&this.dispose()}),this._register(L(this._targetWindow,`blur`,()=>this.dispose()));let o=bc(`div.hover-row.markdown-hover`),s=bc(`div.hover-contents`);if(typeof e.content==`string`)s.textContent=e.content,s.style.whiteSpace=`pre-wrap`;else if(vt(e.content)){s.appendChild(e.content),s.classList.add(`html-hover-contents`);let t=new ResizeObserver(()=>{this.layout(),this._onRequestLayout.fire()});t.observe(s),this._register(I(()=>t.disconnect()))}else{let t=e.content,{element:n}=this._register(this._markdownRenderer.render(t,{actionHandler:this._linkHandler,asyncRenderCallback:()=>{s.classList.add(`code-hover-contents`),this.layout(),this._onRequestLayout.fire()}}));s.appendChild(n)}if(o.appendChild(s),this._hover.contentsDomNode.appendChild(o),e.actions&&e.actions.length>0){let t=bc(`div.hover-row.status-bar`),n=bc(`div.actions`);e.actions.forEach(e=>{let t=this._keybindingService.lookupKeybinding(e.commandId),r=t?t.getLabel():null;this._register(st.render(n,{label:e.label,commandId:e.commandId,run:t=>{e.run(t),this.dispose()},iconClass:e.iconClass},r))}),t.appendChild(n),this._hover.containerDomNode.appendChild(t)}this._hoverContainer=bc(`div.workbench-hover-container`),this._hoverPointer&&this._hoverContainer.appendChild(this._hoverPointer),this._hoverContainer.appendChild(this._hover.containerDomNode);let c;if(c=e.actions&&e.actions.length>0?!1:e.persistence?.hideOnHover===void 0?typeof e.content==`string`||At(e.content)&&!e.content.value.includes(`](`)&&!e.content.value.includes(`</a>`):e.persistence.hideOnHover,e.appearance?.showHoverHint){let e=bc(`div.hover-row.status-bar`),t=bc(`div.info`);t.textContent=G(1794,`Hold {0} key to mouse over`,li?`Option`:`Alt`),e.appendChild(t),this._hover.containerDomNode.appendChild(e)}let l=[...this._target.targetElements];c||l.push(this._hoverContainer);let u=this._mouseTracker=this._register(new Sc(l));if(this._register(u.onMouseOut(()=>{this._isLocked||this.dispose()})),c){let e=[...this._target.targetElements,this._hoverContainer];this._lockMouseTracker=this._register(new Sc(e)),this._register(this._lockMouseTracker.onMouseOut(()=>{this._isLocked||this.dispose()}))}else this._lockMouseTracker=u}addFocusTrap(){if(!this._enableFocusTraps||this._addedFocusTrap)return;this._addedFocusTrap=!0;let e=this._hover.containerDomNode,t=this.findLastFocusableChild(this._hover.containerDomNode);if(t){let n=on(this._hoverContainer,bc(`div`)),r=x(this._hoverContainer,bc(`div`));n.tabIndex=0,r.tabIndex=0,this._register(L(r,`focus`,t=>{e.focus(),t.preventDefault()})),this._register(L(n,`focus`,e=>{t.focus(),e.preventDefault()}))}}findLastFocusableChild(e){if(e.hasChildNodes())for(let t=0;t<e.childNodes.length;t++){let n=e.childNodes.item(e.childNodes.length-t-1);if(n.nodeType===n.ELEMENT_NODE){let e=n;if(typeof e.tabIndex==`number`&&e.tabIndex>=0)return e}let r=this.findLastFocusableChild(n);if(r)return r}}render(e){e.appendChild(this._hoverContainer);let t=this._hoverContainer.contains(this._hoverContainer.ownerDocument.activeElement)&&hr(this._configurationService.getValue(`accessibility.verbosity.hover`)===!0&&this._accessibilityService.isScreenReaderOptimized(),this._keybindingService.lookupKeybinding(`editor.action.accessibleView`)?.getAriaLabel());t&&kn(t),this.layout(),this.addFocusTrap()}layout(){this._mouseTracker?.suppressPendingMouseOut(),this._lockMouseTracker!==this._mouseTracker&&this._lockMouseTracker?.suppressPendingMouseOut(),this._hover.containerDomNode.classList.remove(`right-aligned`),this._hover.contentsDomNode.style.maxHeight=``,this._hover.containerDomNode.style.maxWidth=``;let e=e=>{let t=Xi(e),n=e.getBoundingClientRect();return{top:n.top*t,bottom:n.bottom*t,right:n.right*t,left:n.left*t}},{top:t,right:n,bottom:r,left:i}=this._target.targetElements.map(t=>e(t))[0],a=n-i,o=r-t,s={top:t,right:n,bottom:r,left:i,width:a,height:o,center:{x:i+a/2,y:t+o/2}};if(this.adjustHorizontalHoverPosition(s),this.adjustVerticalHoverPosition(s),this.adjustHoverMaxHeight(s),this._hoverContainer.style.padding=``,this._hoverContainer.style.margin=``,this._hoverPointer){switch(this._hoverPosition){case 1:s.left+=3,s.right+=3,this._hoverContainer.style.paddingLeft=`3px`,this._hoverContainer.style.marginLeft=`-3px`;break;case 0:s.left-=3,s.right-=3,this._hoverContainer.style.paddingRight=`3px`,this._hoverContainer.style.marginRight=`-3px`;break;case 2:s.top+=3,s.bottom+=3,this._hoverContainer.style.paddingTop=`3px`,this._hoverContainer.style.marginTop=`-3px`;break;case 3:s.top-=3,s.bottom-=3,this._hoverContainer.style.paddingBottom=`3px`,this._hoverContainer.style.marginBottom=`-3px`}s.center.x=s.left+a/2,s.center.y=s.top+o/2}this.computeXCordinate(s),this.computeYCordinate(s),this._hoverPointer&&(this._hoverPointer.classList.remove(`top`),this._hoverPointer.classList.remove(`left`),this._hoverPointer.classList.remove(`right`),this._hoverPointer.classList.remove(`bottom`),this.setHoverPointerPosition(s)),this._hover.onContentsChanged()}computeXCordinate(e){let t=this._hover.containerDomNode.clientWidth+2,n=this._targetDocumentElement.clientLeft;if(this._target.x!==void 0)this._x=this._target.x;else if(this._hoverPosition===1)this._x=e.right;else if(this._hoverPosition===0)this._x=e.left-t;else{this._x=this._anchorAlignment===1?e.right-t:this._hoverPointer?e.center.x-this._hover.containerDomNode.clientWidth/2:e.left;let r=this._targetDocumentElement.clientWidth;this._x+t>=r&&(this._hover.containerDomNode.classList.add(`right-aligned`),this._x=Math.max(r-t-2,n))}this._x<n&&(this._x=e.left+2)}computeYCordinate(e){this._y=this._target.y===void 0?this._hoverPosition===3?e.top:this._hoverPosition===2?e.bottom-2:this._hoverPointer?e.center.y+this._hover.containerDomNode.clientHeight/2:e.bottom:this._target.y,this._y>this._targetWindow.innerHeight&&(this._y=e.bottom)}adjustHorizontalHoverPosition(e){if(this._target.x!==void 0)return;if(this._anchorAlignment===1&&(this._hoverPosition===3||this._hoverPosition===2)){let t=e.right-this._targetDocumentElement.clientLeft-2-2;this._hover.containerDomNode.clientWidth>t&&(this._hover.containerDomNode.style.maxWidth=`${Math.max(t,0)}px`);return}let t=this._hoverPointer?3:0;if(this._forcePosition){let n=t+2;this._hoverPosition===1?this._hover.containerDomNode.style.maxWidth=`${this._targetDocumentElement.clientWidth-e.right-n}px`:this._hoverPosition===0&&(this._hover.containerDomNode.style.maxWidth=`${e.left-n}px`);return}this._hoverPosition===1?this._targetDocumentElement.clientWidth-e.right<this._hover.containerDomNode.clientWidth+t&&(this._hoverPosition=e.left>=this._hover.containerDomNode.clientWidth+t?0:2):this._hoverPosition===0&&(e.left<this._hover.containerDomNode.clientWidth+t&&(this._hoverPosition=this._targetDocumentElement.clientWidth-e.right>=this._hover.containerDomNode.clientWidth+t?1:2),e.left-this._hover.containerDomNode.clientWidth-t<=this._targetDocumentElement.clientLeft&&(this._hoverPosition=1))}adjustVerticalHoverPosition(e){if(this._target.y!==void 0||this._forcePosition)return;let t=this._hoverPointer?3:0;this._hoverPosition===3?e.top-this._hover.containerDomNode.clientHeight-t<0&&(this._hoverPosition=2):this._hoverPosition===2&&e.bottom+this._hover.containerDomNode.offsetHeight+t>this._targetWindow.innerHeight&&(this._hoverPosition=3)}adjustHoverMaxHeight(e){let t=this._targetWindow.innerHeight*this._maxHeightRatioRelativeToWindow;if(this._forcePosition){let n=(this._hoverPointer?3:0)+2;this._hoverPosition===3?t=Math.min(t,e.top-n):this._hoverPosition===2&&(t=Math.min(t,this._targetWindow.innerHeight-e.bottom-n))}this._hover.containerDomNode.style.maxHeight=``;let n=this._hover.containerDomNode.offsetHeight-this._hover.contentsDomNode.offsetHeight,r=Math.max(0,t-n);if(this._hover.containerDomNode.style.maxHeight=`${t}px`,this._hover.contentsDomNode.style.maxHeight=`${r}px`,this._hover.contentsDomNode.clientHeight<this._hover.contentsDomNode.scrollHeight){let e=`${this._hover.scrollbar.options.verticalScrollbarSize}px`;this._hover.contentsDomNode.style.paddingRight!==e&&(this._hover.contentsDomNode.style.paddingRight=e)}}setHoverPointerPosition(e){if(this._hoverPointer)switch(this._hoverPosition){case 0:case 1:{this._hoverPointer.classList.add(this._hoverPosition===0?`right`:`left`);let t=this._hover.containerDomNode.clientHeight;t>e.height?this._hoverPointer.style.top=`${e.center.y-(this._y-t)-3}px`:this._hoverPointer.style.top=`${t/2-3}px`;break}case 3:case 2:{this._hoverPointer.classList.add(this._hoverPosition===3?`bottom`:`top`);let t=this._hover.containerDomNode.clientWidth/2-3,n=this._x+t;(n<e.left||n>e.right)&&(t=e.center.x-this._x-3),this._hoverPointer.style.left=`${t}px`;break}}}focus(){this._hover.containerDomNode.focus()}dispose(){this._isDisposed||(this._onDispose.fire(),this._target.dispose?.(),this._hoverContainer.remove(),this._messageListeners.dispose(),super.dispose()),this._isDisposed=!0}};xc=vc([yc(1,Jt),yc(2,K),yc(3,xi),yc(4,os)],xc);var Sc=class extends Vn{get onMouseOut(){return this._onMouseOut.event}get isMouseIn(){return this._isMouseIn}constructor(e,t=200){super(),this._elements=e,this._eventDebounceDelay=t,this._isMouseIn=!0,this._suppressNextMouseOut=!1,this._mouseTimer=this._register(new i),this._onMouseOut=this._register(new P);for(let e of this._elements)this.onmouseover(e,()=>this._onTargetMouseOver()),this.onmouseleave(e,()=>this._onTargetMouseLeave())}_onTargetMouseOver(){this._isMouseIn=!0,this._suppressNextMouseOut=!1,this._mouseTimer.clear()}_onTargetMouseLeave(){this._isMouseIn=!1,this._mouseTimer.value=new mo(()=>this._fireIfMouseOutside(),this._eventDebounceDelay)}_fireIfMouseOutside(){!this._isMouseIn&&!this._suppressNextMouseOut&&this._onMouseOut.fire()}suppressPendingMouseOut(){this._isMouseIn||(this._suppressNextMouseOut=!0)}addElement(e){if(this._elements.includes(e))return F.None;this._elements.push(e);let t=new A;return t.add(L(e,z.MOUSE_OVER,()=>this._onTargetMouseOver())),t.add(L(e,z.MOUSE_LEAVE,()=>this._onTargetMouseLeave())),t.add(I(()=>{let t=this._elements.indexOf(e);t>=0&&this._elements.splice(t,1)})),t}},Cc=class{constructor(e){this._element=e,this.targetElements=[this._element]}dispose(){}};function wc(e){let t=e;return typeof t==`object`&&`markdown`in t&&`markdownNotSupportedFallback`in t}function Tc(e){let t=e;return typeof t==`object`&&`element`in t}var Ec=class{constructor(e,t,n){this.hoverDelegate=e,this.target=t,this.fadeInAnimation=n}async update(e,t,n){if(this._cancellationTokenSource&&=(this._cancellationTokenSource.dispose(!0),void 0),this.isDisposed)return;let r=Tc(e)&&e.contentOwnsPadding===!0,i;if(ke(e)||vt(e)||e===void 0)i=e;else{this._cancellationTokenSource=new Vt;let r=this._cancellationTokenSource.token,a;if(a=wc(e)?Et(e.markdown)?e.markdown(r).then(t=>t??e.markdownNotSupportedFallback):e.markdown??e.markdownNotSupportedFallback:e.element(r),a instanceof Promise?(this._hoverWidget||this.show(G(1795,`Loading...`),t,n,!1),i=await a):i=a,this.isDisposed||r.isCancellationRequested)return}this.show(i,t,n,r)}show(e,t,n,r){let i=this._hoverWidget;if(this.hasContent(e)){let a={content:e,target:this.target,actions:n?.actions,linkHandler:n?.linkHandler,trapFocus:n?.trapFocus,additionalClasses:[...n?.additionalClasses??[],...r?[`managed-hover-content-owns-padding`]:[]],appearance:{showPointer:this.hoverDelegate.placement===`element`,skipFadeInAnimation:!this.fadeInAnimation||!!i,showHoverHint:n?.appearance?.showHoverHint},position:{hoverPosition:2,anchorAlignment:n?.position?.anchorAlignment}};this._hoverWidget=this.hoverDelegate.showHover(a,t)}i?.dispose()}hasContent(e){return e?!At(e)||!!e.value:!1}get isDisposed(){return this._hoverWidget?.isDisposed}dispose(){this._hoverWidget?.dispose(),this._cancellationTokenSource?.dispose(!0),this._cancellationTokenSource=void 0}},Dc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Oc=function(e,t){return function(n,r){t(n,r,e)}},kc=3,Ac=class extends F{get _currentHover(){return this._hoverStack.at(-1)?.hover}get _currentHoverOptions(){return this._hoverStack.at(-1)?.options}_getContainingHoverIndex(e){let t=vt(e)?[e]:e.targetElements;for(let e=this._hoverStack.length-1;e>=0;e--)for(let n of t)if(Gn(n,this._hoverStack[e].hover.domNode))return e;return-1}constructor(e,t,n,r,i,a){super(),this._instantiationService=e,this._configurationService=t,this._keybindingService=r,this._layoutService=i,this._accessibilityService=a,this._hoverStack=[],this._currentDelayedHoverWasShown=!1,this._delayedHovers=new Map,this._managedHovers=new Map,this._register(n.onDidShowContextMenu(()=>this.hideHover())),this._register(sn.registerCommandAndKeybindingRule({id:`workbench.action.showHover`,weight:0,primary:ls(2089,2087),handler:()=>{this._showAndFocusHoverForActiveElement()}}))}showInstantHover(e,t,n,r){let i=this._createHover(e,n);if(i)return this._showHover(i,e,t),i.hover}showDelayedHover(e,t){if(e.id===void 0&&(e.id=Mc(e.content)),!this._currentDelayedHover||this._currentDelayedHoverWasShown){if(this._currentHover?.isLocked&&this._getContainingHoverIndex(e.target)<0)return;if(jc(this._currentHoverOptions)===jc(e))return this._currentHover;if(this._currentHover&&!this._currentHover.isDisposed&&this._currentDelayedHoverGroupId!==void 0&&this._currentDelayedHoverGroupId===t?.groupId)return this.showInstantHover({...e,appearance:{...e.appearance,skipFadeInAnimation:!0}})}else if(this._currentDelayedHover&&jc(this._currentHoverOptions)===jc(e))return this._currentDelayedHover;let n=this._createHover(e,void 0);if(!n){this._currentDelayedHover=void 0,this._currentDelayedHoverWasShown=!1,this._currentDelayedHoverGroupId=void 0;return}this._currentDelayedHover=n.hover,this._currentDelayedHoverWasShown=!1,this._currentDelayedHoverGroupId=t?.groupId;let r=t?.reducedDelay?this._configurationService.getValue(`workbench.hover.reducedDelay`):this._configurationService.getValue(`workbench.hover.delay`);return Gr(r).then(()=>{n.hover&&!n.hover.isDisposed&&(this._currentDelayedHoverWasShown=!0,this._showHover(n,e))}),n.hover}setupDelayedHover(e,t,n){return this._setupDelayedHover(e,n=>{let r={...typeof t==`function`?t():t,target:e};return r.style===2&&n&&(r.target=Rc(e,n)),r},n)}setupDelayedHoverAtMouse(e,t,n){return this._setupDelayedHover(e,n=>({...typeof t==`function`?t():t,target:n?Rc(e,n):e}),n)}_setupDelayedHover(e,t,n){let r=new A;return r.add(L(e,z.MOUSE_OVER,e=>{this.showDelayedHover(t(e),{groupId:n?.groupId,reducedDelay:n?.reducedDelay})})),n?.setupKeyboardEvents&&r.add(L(e,z.KEY_DOWN,e=>{let n=new Ja(e);(n.equals(10)||n.equals(3))&&this.showInstantHover(t(),!0)})),this._delayedHovers.set(e,{show:e=>{this.showInstantHover(t(),e)}}),r.add(I(()=>this._delayedHovers.delete(e))),r}_createHover(e,t){if(this._currentDelayedHover?.dispose(),this._currentDelayedHover=void 0,e.content===``)return;if(e.id===void 0&&(e.id=Mc(e.content)),this._getContainingHoverIndex(e.target)>=0){if(this._hoverStack.length>=kc)return}else if(this._currentHover?.isLocked||jc(this._currentHoverOptions)===jc(e))return;this._lastHoverOptions=e;let n=e.trapFocus||this._accessibilityService.isScreenReaderOptimized(),r=Ee(),i;t||n&&r&&(r.classList.contains(`monaco-hover`)||(i=r));let a=new A,o=this._instantiationService.createInstance(xc,e);if(e.persistence?.sticky&&(o.isLocked=!0),e.position?.hoverPosition&&!Nt(e.position.hoverPosition)&&(e.target={targetElements:vt(e.target)?[e.target]:e.target.targetElements,x:e.position.hoverPosition.x+10}),o.onDispose(()=>{let e=this._hoverStack.findIndex(e=>e.hover===o);if(e>=0){let t=this._hoverStack[e];for(Xe(o.domNode)&&t.lastFocusedElementBeforeOpen&&t.lastFocusedElementBeforeOpen.focus();this._hoverStack.length>e+1;){let e=this._hoverStack.pop();e.contextView.dispose(),e.hover.dispose()}this._hoverStack.splice(e,1),t.contextView.dispose()}a.dispose()},void 0,a),!e.container){let t=vt(e.target)?e.target:e.target.targetElements[0];e.container=this._layoutService.getContainer(O(t))}if(a.add(L(O(e.container).document,z.MOUSE_DOWN,e=>{Gn(e.target,o.domNode)||this._hideHoverAndDescendants(o)})),!e.persistence?.sticky){if(`targetElements`in e.target)for(let t of e.target.targetElements)a.add(L(t,z.CLICK,()=>this._hideHoverAndDescendants(o)));else a.add(L(e.target,z.CLICK,()=>this._hideHoverAndDescendants(o)));let t=Ee();if(t){let n=O(t).document;a.add(L(t,z.KEY_DOWN,t=>this._keyDown(t,o,!!e.persistence?.hideOnKeyDown))),a.add(L(n,z.KEY_DOWN,t=>this._keyDown(t,o,!!e.persistence?.hideOnKeyDown))),a.add(L(t,z.KEY_UP,e=>this._keyUp(e,o))),a.add(L(n,z.KEY_UP,e=>this._keyUp(e,o)))}}if(`IntersectionObserver`in tn){let t=new IntersectionObserver(e=>this._intersectionChange(e,o),{threshold:0}),n=`targetElements`in e.target?e.target.targetElements[0]:e.target;t.observe(n),a.add(I(()=>t.disconnect()))}return{hover:o,lastFocusedElementBeforeOpen:i,store:a}}_showHover(e,t,n){let{hover:r,lastFocusedElementBeforeOpen:i,store:a}=e,o=this._getContainingHoverIndex(t.target),s=o>=0;if(!s)this._hideAllHovers();else{for(let e=this._hoverStack.length-1;e>o;e--)this._hoverStack[e].hover.dispose();this._hoverStack.length=o+1}if(s)for(let e=0;e<=o;e++)a.add(this._hoverStack[e].hover.addMouseTrackingElement(r.domNode));let c=t.container??this._layoutService.getContainer(O(vt(t.target)?t.target:t.target.targetElements[0])),l=new fi(c,1),u={hover:r,options:t,contextView:l,lastFocusedElementBeforeOpen:i};this._hoverStack.push(u);let d=new Fc(r,n,this._hoverStack.length);if(l.show(d),a.add(r.onRequestLayout(()=>l.layout())),n||t.persistence?.sticky){let e=O(c);a.add(L(e,z.RESIZE,()=>l.layout()))}if(t.onDidHide){let e=t.onDidHide;a.add(I(()=>e()))}t.onDidShow?.()}_hideHoverAndDescendants(e){let t=this._hoverStack.findIndex(t=>t.hover===e);if(t<0){e===this._currentDelayedHover&&this._cancelPendingDelayedHover();return}for(let e=this._hoverStack.length-1;e>=t;e--)this._hoverStack[e].hover.dispose();this._hoverStack.length=t}_cancelPendingDelayedHover(){this._currentDelayedHover&&!this._currentDelayedHoverWasShown&&(this._currentDelayedHover.dispose(),this._currentDelayedHover=void 0,this._currentDelayedHoverGroupId=void 0)}_hideAllHovers(){for(let e=this._hoverStack.length-1;e>=0;e--)this._hoverStack[e].hover.dispose();this._hoverStack.length=0}hideHover(e){(e||!this._currentHover?.isLocked)&&(this._cancelPendingDelayedHover(),this._hoverStack.length!==0&&this.doHideHover())}doHideHover(){let e=this._hoverStack.length;this._hoverStack[e-1]?.hover.dispose(),this._hoverStack.length=e-1}_intersectionChange(e,t){e[e.length-1].isIntersecting||t.dispose()}showAndFocusLastHover(){this._lastHoverOptions&&this.showInstantHover(this._lastHoverOptions,!0,!0)}_showAndFocusHoverForActiveElement(){let e=Ee();for(;e;){let t=this._delayedHovers.get(e)??this._managedHovers.get(e);if(t){t.show(!0);return}e=e.parentElement}}_keyDown(e,t,n){if(e.key===`Alt`){for(let e of this._hoverStack)e.hover.isLocked=!0;return}let r=new Ja(e);if(!(this._keybindingService.resolveKeyboardEvent(r).getSingleModifierDispatchChords().some(e=>!!e)||this._keybindingService.softDispatch(r,r.target).kind!==0)&&n&&(!this._currentHoverOptions?.trapFocus||e.key!==`Tab`)){let e=this._hoverStack.find(e=>e.hover===t);this._hideHoverAndDescendants(t),e?.lastFocusedElementBeforeOpen?.focus()}}_keyUp(e,t){if(e.key===`Alt`){for(let e of this._hoverStack)e.options.persistence?.sticky||(e.hover.isLocked=!1);if(!this._hoverStack.some(e=>e.hover.isMouseIn)){let e=this._hoverStack[this._hoverStack.length-1];this._hideAllHovers(),e?.lastFocusedElementBeforeOpen?.focus()}}}setupManagedHover(e,t,n,r){if(e.showNativeHover)return Pc(t,n);t.setAttribute(`custom-hover`,`true`),t.title!==``&&(console.warn(`HTML element already has a title attribute, which will conflict with the custom hover. Please remove the title attribute.`),t.title=``);let i,a,o=(t,n)=>{let r=a!==void 0;t&&(a?.dispose(),a=void 0),n&&(i?.dispose(),i=void 0),r&&(e.onDidHideHover?.(),a=void 0)},s=(i,o,s,c)=>new mo(async()=>{(!a||a.isDisposed)&&(a=new Ec(e,s||t,i>0),await a.update(typeof n==`function`?n():n,o,{...r,trapFocus:c}))},i),c=new A,l=!1;c.add(L(t,z.MOUSE_DOWN,()=>{l=!0,o(!0,!0)},!0)),c.add(L(t,z.MOUSE_UP,()=>{l=!1},!0)),c.add(L(t,z.MOUSE_LEAVE,e=>{l=!1,o(!1,e.fromElement===t)},!0)),c.add(L(t,z.MOUSE_OVER,r=>{if(i)return;let a=new A,c={targetElements:[t],dispose:()=>{}};(e.placement===void 0||e.placement===`mouse`)&&a.add(L(t,z.MOUSE_MOVE,e=>{c.x=e.x+10,Ic(e,t)||o(!0,!0)},!0)),i=a,Ic(r,t)&&a.add(s(typeof e.delay==`function`?e.delay(n):e.delay,!1,c))},!0)),Bn(t)||c.add(L(t,z.FOCUS,r=>{if(l||i||(a?.isDisposed&&(a=void 0),vt(r.relatedTarget)&&r.relatedTarget.closest(`.monaco-hover`)||!r.relatedTarget)||!Ic(r,t))return;let c={targetElements:[t],dispose:()=>{}},u=new A;u.add(L(t,z.BLUR,()=>o(!0,!0),!0)),u.add(s(typeof e.delay==`function`?e.delay(n):e.delay,!1,c)),i=u},!0));let u={show:e=>{o(!1,!0),s(0,e,void 0,e)},hide:()=>{o(!0,!0)},update:async(e,t)=>{n=e,r=t,await a?.update(n,void 0,r)},dispose:()=>{this._managedHovers.delete(t),c.dispose(),o(!0,!0)}};return this._managedHovers.set(t,u),u}showManagedHover(e){let t=this._managedHovers.get(e);t&&t.show(!0)}dispose(){this._managedHovers.forEach(e=>e.dispose()),super.dispose()}};Ac=Dc([Oc(0,V),Oc(1,K),Oc(2,an),Oc(3,Jt),Oc(4,Yo),Oc(5,os)],Ac);function jc(e){if(e!==void 0)return e?.id??e}function Mc(e){if(!vt(e))return typeof e==`string`?e.toString():e.value}function Nc(e){let t=typeof e==`function`?e():e;if(ke(t))return et(t);if(wc(t))return t.markdownNotSupportedFallback}function Pc(e,t){function n(t){t?e.setAttribute(`title`,t):e.removeAttribute(`title`)}return n(Nc(t)),{update:e=>n(Nc(e)),show:()=>{},hide:()=>{},dispose:()=>n(void 0)}}var Fc=class{get anchorPosition(){return this._hover.anchor}constructor(e,t=!1,n=1){this._hover=e,this._focus=t,this.layer=n}render(e){return this._hover.render(e),this._focus&&this._hover.focus(),this._hover}getAnchor(){return{x:this._hover.x,y:this._hover.y}}layout(){this._hover.layout()}};function Ic(e,t){return vt(e.target)&&Lc(e.target,t)===t}function Lc(e,t){for(t??=O(e).document.body;!e.hasAttribute(`custom-hover`)&&e!==t;)e=e.parentElement;return e}function Rc(e,t){return{targetElements:[e],x:t.x+10}}D(ei,Ac,1),ji((e,t)=>{let n=e.getColor(Ne);n&&(t.addRule(`.monaco-hover.workbench-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${n.transparent(.5)}; }`),t.addRule(`.monaco-hover.workbench-hover hr { border-top: 1px solid ${n.transparent(.5)}; }`))});var zc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Bc=function(e,t){return function(n,r){t(n,r,e)}};function Vc(e){return e.scheme===B.file?e.fsPath:e.path}var Hc=0,Uc=class{constructor(e,t,n,r,i,a,o){this.id=++Hc,this.type=0,this.actual=e,this.label=e.label,this.confirmBeforeUndo=e.confirmBeforeUndo||!1,this.resourceLabel=t,this.strResource=n,this.resourceLabels=[this.resourceLabel],this.strResources=[this.strResource],this.groupId=r,this.groupOrder=i,this.sourceId=a,this.sourceOrder=o,this.isValid=!0}setValid(e){this.isValid=e}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.isValid?` VALID`:`INVALID`}] ${this.actual.constructor.name} - ${this.actual}`}},Wc=class{constructor(e,t){this.resourceLabel=e,this.reason=t}},Gc=class{constructor(){this.elements=new Map}createMessage(){let e=[],t=[];for(let[,n]of this.elements)(n.reason===0?e:t).push(n.resourceLabel);let n=[];return e.length>0&&n.push(G(2132,`The following files have been closed and modified on disk: {0}.`,e.join(`, `))),t.length>0&&n.push(G(2133,`The following files have been modified in an incompatible way: {0}.`,t.join(`, `))),n.join(`
3
3
  `)}get size(){return this.elements.size}has(e){return this.elements.has(e)}set(e,t){this.elements.set(e,t)}delete(e){return this.elements.delete(e)}},Kc=class{constructor(e,t,n,r,i,a,o){this.id=++Hc,this.type=1,this.actual=e,this.label=e.label,this.confirmBeforeUndo=e.confirmBeforeUndo||!1,this.resourceLabels=t,this.strResources=n,this.groupId=r,this.groupOrder=i,this.sourceId=a,this.sourceOrder=o,this.removedResources=null,this.invalidatedResources=null}canSplit(){return typeof this.actual.split==`function`}removeResource(e,t,n){this.removedResources||=new Gc,this.removedResources.has(t)||this.removedResources.set(t,new Wc(e,n))}setValid(e,t,n){n?this.invalidatedResources&&(this.invalidatedResources.delete(t),this.invalidatedResources.size===0&&(this.invalidatedResources=null)):(this.invalidatedResources||=new Gc,this.invalidatedResources.has(t)||this.invalidatedResources.set(t,new Wc(e,0)))}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources?`INVALID`:` VALID`}] ${this.actual.constructor.name} - ${this.actual}`}},qc=class{constructor(e,t){this.resourceLabel=e,this.strResource=t,this._past=[],this._future=[],this.locked=!1,this.versionId=1}dispose(){for(let e of this._past)e.type===1&&e.removeResource(this.resourceLabel,this.strResource,0);for(let e of this._future)e.type===1&&e.removeResource(this.resourceLabel,this.strResource,0);this.versionId++}toString(){let e=[];e.push(`* ${this.strResource}:`);for(let t=0;t<this._past.length;t++)e.push(` * [UNDO] ${this._past[t]}`);for(let t=this._future.length-1;t>=0;t--)e.push(` * [REDO] ${this._future[t]}`);return e.join(`
4
4
  `)}flushAllElements(){this._past=[],this._future=[],this.versionId++}_setElementValidFlag(e,t){e.type===1?e.setValid(this.resourceLabel,this.strResource,t):e.setValid(t)}setElementsValidFlag(e,t){for(let n of this._past)t(n.actual)&&this._setElementValidFlag(n,e);for(let n of this._future)t(n.actual)&&this._setElementValidFlag(n,e)}pushElement(e){for(let e of this._future)e.type===1&&e.removeResource(this.resourceLabel,this.strResource,1);this._future=[],this._past.push(e),this.versionId++}createSnapshot(e){let t=[];for(let e=0,n=this._past.length;e<n;e++)t.push(this._past[e].id);for(let e=this._future.length-1;e>=0;e--)t.push(this._future[e].id);return new be(e,t)}restoreSnapshot(e){let t=e.elements.length,n=!0,r=0,i=-1;for(let a=0,o=this._past.length;a<o;a++,r++){let o=this._past[a];n&&(r>=t||o.id!==e.elements[r])&&(n=!1,i=a),!n&&o.type===1&&o.removeResource(this.resourceLabel,this.strResource,0)}let a=-1;for(let i=this._future.length-1;i>=0;i--,r++){let o=this._future[i];n&&(r>=t||o.id!==e.elements[r])&&(n=!1,a=i),!n&&o.type===1&&o.removeResource(this.resourceLabel,this.strResource,0)}i!==-1&&(this._past=this._past.slice(0,i)),a!==-1&&(this._future=this._future.slice(a+1)),this.versionId++}getElements(){let e=[],t=[];for(let t of this._past)e.push(t.actual);for(let e of this._future)t.push(e.actual);return{past:e,future:t}}getClosestPastElement(){return this._past.length===0?null:this._past[this._past.length-1]}getSecondClosestPastElement(){return this._past.length<2?null:this._past[this._past.length-2]}getClosestFutureElement(){return this._future.length===0?null:this._future[this._future.length-1]}hasPastElements(){return this._past.length>0}hasFutureElements(){return this._future.length>0}splitPastWorkspaceElement(e,t){for(let n=this._past.length-1;n>=0;n--)if(this._past[n]===e){t.has(this.strResource)?this._past[n]=t.get(this.strResource):this._past.splice(n,1);break}this.versionId++}splitFutureWorkspaceElement(e,t){for(let n=this._future.length-1;n>=0;n--)if(this._future[n]===e){t.has(this.strResource)?this._future[n]=t.get(this.strResource):this._future.splice(n,1);break}this.versionId++}moveBackward(e){this._past.pop(),this._future.push(e),this.versionId++}moveForward(e){this._future.pop(),this._past.push(e),this.versionId++}},Jc=class{constructor(e){this.editStacks=e,this._versionIds=[];for(let e=0,t=this.editStacks.length;e<t;e++)this._versionIds[e]=this.editStacks[e].versionId}isValid(){for(let e=0,t=this.editStacks.length;e<t;e++)if(this._versionIds[e]!==this.editStacks[e].versionId)return!1;return!0}},Yc=new qc(``,``);Yc.locked=!0;var Xc=class{constructor(e,t){this._dialogService=e,this._notificationService=t,this._editStacks=new Map,this._uriComparisonKeyComputers=[]}getUriComparisonKey(e){for(let t of this._uriComparisonKeyComputers)if(t[0]===e.scheme)return t[1].getComparisonKey(e);return e.toString()}_print(e){console.log(`------------------------------------`),console.log(`AFTER ${e}: `);let t=[];for(let e of this._editStacks)t.push(e[1].toString());console.log(t.join(`
@@ -1,4 +1,4 @@
1
- import{v as e}from"./reactivity.esm-bundler-DY1JkAEA.js";import{C as t,J as n,b as r,i,l as a}from"./runtime-core.esm-bundler-Bqg71Vll.js";import{B as o,I as s,K as c,M as l,N as u,P as d,R as f,U as p,d as m,j as h,m as g,o as ee}from"./dom-BtYTvLeN.js";import{C as _}from"./detached-fullscreen-Du3TcYdX.js";import{Ut as v,j as y}from"./index-CbyHfF8I.js";import{a as b,o as x}from"./QSelect-bEq3g_io.js";import{p as S}from"./use-tours-IVbXTmz2.js";import{u as C}from"./permissionModes-DLWiBfdb.js";C(`superpowers`);function w(e,t){let n=["1. Call `list_tasks` FIRST to inspect any pre-existing tasks (they may have been seeded from Notion, a template, or the CreatePage form).","2. If tasks already exist: DO NOT delete or recreate them from scratch. Read each one, judge whether it is atomic and implementable in one session with clear completion criteria. Improve them in place:\n - Use `update_task` to rename unclear titles, add completion criteria, or flip `is_acceptance_criterion` when needed.\n - Use `create_task` to SPLIT a task that is too large into smaller atomic pieces (keep the original only if it still makes sense, otherwise update it to one of the split pieces and create the rest).\n - Use `create_task` to ADD missing acceptance criteria or missing implementation steps the plan requires.","3. If no tasks exist:\n - If a plan file exists in `docs/superpowers/plans/` or similar, read it and derive the task list from it.\n - If no plan exists, ask the user what the workspace goal is and propose tasks accordingly.\n - Create the tasks via `create_task`. For each task, decide `is_acceptance_criterion` appropriately."],r=4;if(e.framework){let t=e.skill?`Use the \`${e.skill}\` skill for this task if available; otherwise use the existing project test tools directly. `:``,i=e.prompt?`Additional guidance: ${e.prompt}`:``;n.push(`${r}. **E2E review**: walk the task list and identify which tasks produce user-visible behavior (UI flows, form submissions, page renders, etc.). For each one that warrants regression coverage, INSERT a follow-up sub-task with title prefixed \`[E2E] \` describing the test to write. Use \`after_task_id\` to insert it directly after the parent task; \`list_tasks\` exposes \`sort_order\` so you can verify ordering. Skip tasks that don't produce user-visible behavior (refactors, infra, internal services) and briefly justify your choices in chat. The project uses \`${e.framework}\`. ${t}${i}`.trim()),r++}return t.prompt&&(n.push(`${r}. **Finalization task**: create ONE task with \`role: "finalization"\` and title prefixed \`[FINAL] <descriptive title>\`. Reuse an existing finalization task instead of duplicating it. Place it at the END of the task list (sort_order = max + 1, AFTER any [E2E] tasks). The agent will execute this task using the project's finalization prompt — do NOT inline the prompt content into the task title or description.`),r++),n.push(`${r}. Call \`mark_auto_loop_ready\`. This marks preparation complete. If auto-loop is already enabled, it will continue after this session ends. Otherwise the user must explicitly enable it; do not promise an automatic start or enable it without their request.`),n.join(`
1
+ import{v as e}from"./reactivity.esm-bundler-DY1JkAEA.js";import{C as t,J as n,b as r,i,l as a}from"./runtime-core.esm-bundler-Bqg71Vll.js";import{B as o,I as s,K as c,M as l,N as u,P as d,R as f,U as p,d as m,j as h,m as g,o as ee}from"./dom-BtYTvLeN.js";import{C as _}from"./detached-fullscreen-Du3TcYdX.js";import{Ut as v,j as y}from"./index-BZKHE14f.js";import{a as b,o as x}from"./QSelect-BjZk4-r8.js";import{p as S}from"./use-tours-CsPhvrxf.js";import{u as C}from"./permissionModes-DLWiBfdb.js";C(`superpowers`);function w(e,t){let n=["1. Call `list_tasks` FIRST to inspect any pre-existing tasks (they may have been seeded from Notion, a template, or the CreatePage form).","2. If tasks already exist: DO NOT delete or recreate them from scratch. Read each one, judge whether it is atomic and implementable in one session with clear completion criteria. Improve them in place:\n - Use `update_task` to rename unclear titles, add completion criteria, or flip `is_acceptance_criterion` when needed.\n - Use `create_task` to SPLIT a task that is too large into smaller atomic pieces (keep the original only if it still makes sense, otherwise update it to one of the split pieces and create the rest).\n - Use `create_task` to ADD missing acceptance criteria or missing implementation steps the plan requires.","3. If no tasks exist:\n - If a plan file exists in `docs/superpowers/plans/` or similar, read it and derive the task list from it.\n - If no plan exists, ask the user what the workspace goal is and propose tasks accordingly.\n - Create the tasks via `create_task`. For each task, decide `is_acceptance_criterion` appropriately."],r=4;if(e.framework){let t=e.skill?`Use the \`${e.skill}\` skill for this task if available; otherwise use the existing project test tools directly. `:``,i=e.prompt?`Additional guidance: ${e.prompt}`:``;n.push(`${r}. **E2E review**: walk the task list and identify which tasks produce user-visible behavior (UI flows, form submissions, page renders, etc.). For each one that warrants regression coverage, INSERT a follow-up sub-task with title prefixed \`[E2E] \` describing the test to write. Use \`after_task_id\` to insert it directly after the parent task; \`list_tasks\` exposes \`sort_order\` so you can verify ordering. Skip tasks that don't produce user-visible behavior (refactors, infra, internal services) and briefly justify your choices in chat. The project uses \`${e.framework}\`. ${t}${i}`.trim()),r++}return t.prompt&&(n.push(`${r}. **Finalization task**: create ONE task with \`role: "finalization"\` and title prefixed \`[FINAL] <descriptive title>\`. Reuse an existing finalization task instead of duplicating it. Place it at the END of the task list (sort_order = max + 1, AFTER any [E2E] tasks). The agent will execute this task using the project's finalization prompt — do NOT inline the prompt content into the task title or description.`),r++),n.push(`${r}. Call \`mark_auto_loop_ready\`. This marks preparation complete. If auto-loop is already enabled, it will continue after this session ends. Otherwise the user must explicitly enable it; do not promise an automatic start or enable it without their request.`),n.join(`
2
2
  `)}var T=w({framework:``,skill:``,prompt:``},{prompt:``}),E="Hard rules:\n- Do NOT change source code. Write planning documents only if the current phase and launch permissions allow it.\n- Do NOT run `kill`, `pkill`, `killall`, `pgrep -k`, or any process-killing command — you may tear down the Kōbō server itself or sibling dev servers.\n- Do NOT start implementation even if a plan is ready — auto-loop will drive that afterwards, one task per iteration.\n- If the user asks for changes, re-apply via MCP and re-check. Do NOT mark ready until they approve.",D=`Review your progress on the tasks and acceptance criteria. Use the kobo-tasks MCP server: call list_tasks() to check the current status, then update any tasks you have completed using mark_task_done(). Report what is done and what remains.
3
3
 
4
4
  Then suggest concrete next actions. Format them exactly like this so I can click on them:
@@ -8,7 +8,7 @@ KOBO_WORKSPACE_ID — id Kōbō del workspace (estable tras renombrar)
8
8
  KOBO_WORKSPACE_NAME — nombre visible del workspace
9
9
  KOBO_FORGE — forge resuelta: github / gitlab / none
10
10
  KOBO_PR_NUMBER — número de PR/MR en la forge resuelta (vacío si no hay ninguna abierta)`,"settings.changeSourceBranchScript.placeholder":`#!/usr/bin/env bash
11
- # tu script — usa $KOBO_NEW_BASE / $KOBO_OLD_BASE / $KOBO_WORKING_BRANCH …`,"settings.changeSourceBranchScript.resetDefault":`Restablecer al predeterminado de Kōbō`,"settings.changeSourceBranchScript.replaceConfirmTitle":`¿Restablecer el script?`,"settings.changeSourceBranchScript.replaceConfirm":`Tus modificaciones se reemplazarán por el script predeterminado de Kōbō. ¿Continuar?`,"settings.cleanupScriptHint":`Script de shell ejecutado en el worktree después de cada sesión del agente. En modo auto-loop solo se ejecuta cuando todas las tareas están terminadas. Dejar vacío para desactivar.`,"settings.cleanupScriptPlaceholder":`p. ej. eliminar archivos temporales, detener contenedores…`,"settings.cleanupScriptMode":`Cuándo ejecutar`,"settings.cleanupScriptMode.idle":`Después de cada sesión — aunque queden tareas`,"settings.cleanupScriptMode.noTasks":`Solo cuando no queda ninguna tarea de Kōbō`,"settings.cleanupScriptOnlyOnChanges":`Ejecutar solo si se modificaron, añadieron o eliminaron archivos`,"settings.cleanupScriptMode.inherit":`Heredar la configuración global`,"settings.taskPromptTemplate":`Prompt de tarea`,"settings.taskPromptTemplatePlaceholder":`Prompt insertado automáticamente en la descripción de la tarea…`,"settings.taskPromptTemplateHint":`Se inyecta automáticamente en la descripción de la tarea en la página de creación cuando este proyecto está seleccionado. Si no se modifica, se reemplaza al cambiar de proyecto; en cuanto lo editas, se conserva tu texto.`,"settings.setupScriptPlaceholder":`npm install`,"settings.setupScriptHint":`Se ejecuta con bash en el worktree después de su creación, antes de que el agente inicie. No necesita shebang. Si falla, el workspace se establece en error. Timeout: 5 minutos.`,"settings.e2e.title":`Tests E2E`,"settings.e2e.framework":`Framework`,"settings.e2e.frameworkNone":`Ninguno`,"settings.e2e.frameworkOther":`Otro`,"settings.e2e.skill":`Skill (opcional)`,"settings.e2e.skillPlaceholder":`p. ej. cypress-tester`,"settings.e2e.prompt":`Guía personalizada (opcional)`,"settings.e2e.promptPlaceholder":`p. ej. usar el patrón page-object, apuntar a data-testid`,"settings.e2e.helpText":`Cuando está configurado, el agente de grooming auto-loop inserta subtareas E2E para funciones UI.`,"settings.finalization.title":`Finalización del auto-loop`,"settings.finalization.helpText":`Opcional: un prompt que el agente ejecuta como la última iteración del auto-loop. Típicamente usado para controles de calidad finales (lint, typecheck, tests). La fase de grooming creará una tarea con prefijo [FINAL] que usará este prompt.`,"settings.finalization.prompt":`Prompt de finalización`,"settings.finalization.promptPlaceholder":`p. ej. Ejecuta npm run lint y npm test, luego marca esta tarea como hecha.`,"settings.editorCommand":`Comando del editor`,"settings.editorCommandPlaceholder":`code, phpstorm, subl, vim...`,"settings.editorCommandHint":`Comando para abrir el worktree en su editor. La ruta del worktree se pasa como argumento.`,"settings.fileManagerCommand":`Comando del explorador de archivos`,"settings.fileManagerCommandPlaceholder":`xdg-open, open, nautilus, dolphin, explorer...`,"settings.fileManagerCommandHint":`Comando para abrir el worktree en su explorador de archivos. La ruta del worktree se pasa como argumento. Déjalo vacío para ocultar el botón.`,"settings.terminalCommand":`Comando de terminal`,"settings.terminalCommandHint":`Comando para abrir tu terminal en el worktree. Marcador {path} opcional para el directorio.`,"settings.terminalCommandPlaceholder":`kitty · alacritty · gnome-terminal --working-directory={path}`,"settings.mcpSelection":`Selección MCP de Claude`,"settings.mcpAutoSelect":`Auto (primer MCP activo que coincide)`,"settings.notionMcp":`Clave MCP de Notion`,"settings.sentryMcp":`Clave MCP de Sentry`,"settings.mcpSelectionHint":`Las entradas activas se leen desde ~/.claude.json. Deja Auto para usar el comportamiento por defecto.`,"settings.configuredProjects":`Proyectos configurados`,"settings.noProjects":`No hay proyectos configurados`,"settings.addProject":`Añadir proyecto`,"settings.copyFrom":`Copiar ajustes desde`,"settings.copyFromPlaceholder":`(ninguno — partir de los valores por defecto)`,"settings.copyFromHint":`Copia todos los ajustes excepto path, nombre y rama fuente.`,"settings.copyFromConfirmTitle":`¿Sobrescribir los valores actuales?`,"settings.copyFromConfirm":`Se sobrescribirán los valores del formulario con los ajustes de «{project}». ¿Continuar?`,"settings.newProject":`Nuevo proyecto`,"settings.editProject":`Editar proyecto`,"help.title":`Ayuda`,"help.tours":`Visitas guiadas`,"help.steps":`{n} paso | {n} pasos`,"help.markAllSeen":`Marcar todas como vistas`,"help.markAllSeenHint":`Marca las visitas actuales como vistas sin iniciarlas.`,"help.resetAll":`Restablecer todas las visitas`,"help.resetAllHint":`Inicia ahora la visita de inicio; cada pantalla repetirá la suya al abrirla de nuevo.`,"help.status.unseen":`no vista`,"help.status.partial":`en parte`,"help.status.seen":`vista`,"help.replayThis":`Repetir la visita de esta pantalla`,"tours.next":`Siguiente`,"tours.prev":`Atrás`,"tours.done":`Terminar`,"tours.exitConfirm":`¿Salir de la visita guiada? No volverá a iniciarse sola; puedes repetirla cuando quieras desde el menú Ayuda.`,"tours.home.title":`Orientarse`,"tours.home.list.title":`Workspaces`,"tours.home.list.description":`Cada misión vive aquí con su estado. Los badges señalan una CI fallida, una review que pide cambios o una PR lista para merge. Arrastra el borde interior de un panel lateral con el ratón o el dedo para cambiar su tamaño. Los botones superiores se distribuyen en varias líneas si falta espacio.`,"tours.home.create.title":`Crear un workspace`,"tours.home.create.description":`Un workspace es un worktree de Git, una rama y una sesión de agente para una tarea.`,"tours.home.search.title":`Búsqueda`,"tours.home.search.description":`Filtra la lista por nombre. El icono de búsqueda de arriba abre la búsqueda de texto completo en las conversaciones de los agentes.`,"tours.home.dashboard.title":`Panel`,"tours.home.dashboard.description":`Una tabla con todos los workspaces activos: estado, atención, PR, diff, actividad y la fiabilidad de los motores.`,"tours.home.health.title":`Salud y changelog`,"tours.home.health.description":`Comprueba la base de datos, los runtimes y los agentes activos. El botón de al lado lista lo que cambió en cada versión.`,"tours.home.settings.title":`Ajustes`,"tours.home.settings.description":`Motores, integraciones, automatización, worktrees y proyectos. Ahora crea tu primer workspace.`,"tours.create.title":`Crear un workspace`,"tours.create.project.title":`Proyecto y rama`,"tours.create.project.description":`Elige el proyecto y la rama de la que parte el worktree.`,"tours.create.mission.title":`Misión`,"tours.create.mission.description":`Describe la tarea, o impórtala desde una página de Notion o una issue de Sentry.`,"tours.create.template.title":`Templates`,"tours.create.template.description":`Aplica un preset guardado, o guarda este formulario como preset. «Duplicar» en una tarjeta de workspace abre este formulario ya rellenado.`,"tours.create.engine.title":`Motor y modelo`,"tours.create.engine.description":`Claude Code o Codex, el modelo, el esfuerzo de razonamiento y lo que el agente puede hacer sin preguntar.`,"tours.create.brainstorm.title":`Brainstorm en otro modelo`,"tours.create.brainstorm.description":`Ejecuta la primera sesión de brainstorming en otro modelo y vuelve al principal para las iteraciones.`,"tours.create.autoloop.title":`Auto-loop`,"tours.create.autoloop.description":`El agente completa las tareas y las verificaciones finales. Una review final independiente opcional se repite tras las correcciones hasta que no queden hallazgos; si no hay progreso, el bucle se pausa.`,"tours.create.finalReview.title":`Configurar la review final`,"tours.create.finalReview.description":`Elige de antemano el motor, el modelo, el esfuerzo y las instrucciones del reviewer. La review se ejecuta en una sesión separada de solo lectura; el agente original corrige los hallazgos y la review se repite hasta que no quede ninguno.`,"tours.workspace.finalReview.title":`Review final y correcciones`,"tours.workspace.finalReview.description":`Configura aquí el reviewer final opcional antes de iniciarlo. Tras las tareas y las verificaciones finales, una sesión separada revisa el trabajo. Los hallazgos vuelven a la sesión original para corregirlos automáticamente y repetir la review. Cerrar Kōbō conserva el ciclo.`,"tours.workspace.reviewReturn.title":`Volver de una review`,"tours.workspace.reviewReturn.description":`El resumen vuelve a la sesión original incluso tras reiniciar Kōbō. Si la entrega es incierta, consulta esa conversación antes de Reintentar; Cancelar abandona el retorno. Las reviews manuales esperan tus instrucciones antes de corregir; auto-loop corrige automáticamente.`,"tours.create.comparison.title":`Comparar dos motores`,"tours.create.comparison.description":`Crea dos workspaces gemelos sobre la misma tarea y compara sus commits, tareas y actividad.`,"tours.workspace.sessions.title":`Sesiones del workspace`,"tours.workspace.sessions.description":`Pulsa el título para elegir, crear o renombrar una sesión, o copiar su identificador.`,"tours.workspace.actions.title":`Acciones del workspace`,"tours.workspace.actions.description":`El menú ⋯ reúne la vista en paralelo, la paleta de comandos, el panel lateral y la visita guiada.`,"tours.workspace.title":`Dentro de un workspace`,"tours.workspace.chat.title":`Conversación`,"tours.workspace.chat.description":`La salida del agente, en directo: mensajes, llamadas a herramientas, preguntas y errores.`,"tours.workspace.input.title":`Hablar con el agente`,"tours.workspace.input.description":`Envía un mensaje, usa slash commands, dicta por voz o adjunta archivos.`,"tours.workspace.selectors.title":`Ajustes de sesión`,"tours.workspace.selectors.description":`Abre Configurar para ajustar modelo, esfuerzo, permisos y auto-loop. También muestra el motor actual.`,"tours.workspace.status.title":`Estado`,"tours.workspace.status.description":`El estado de la sesión actual; detenla aquí cuando haga falta.`,"tours.workspace.git.title":`Git`,"tours.workspace.git.description":`Commits, diff, push, rebase y la PR de esta rama.`,"tours.workspace.tasks.title":`Tareas`,"tours.workspace.tasks.description":`Lo que el agente planea hacer, y los criterios de aceptación que debe cumplir.`,"tours.workspace.timeline.title":`Cronología`,"tours.workspace.timeline.description":`Todas las sesiones de este workspace; abre una anterior para releerla.`,"tours.workspace.subagents.title":`Subagentes`,"tours.workspace.subagents.description":`Sigue los subagentes que lanzó el agente, con su progreso en directo.`,"tours.workspace.documents.title":`Documentos`,"tours.workspace.documents.description":`Planes y archivos que escribió el agente, consultables sin salir del chat.`,"tours.workspace.schedule.title":`Programación`,"tours.workspace.schedule.description":`Wake-ups y crons que relanzan el agente más tarde.`,"tours.workspace.memory.title":`Memoria del workspace`,"tours.workspace.memory.description":`Consulta la memoria entregada a la conversación seleccionada, las propuestas pendientes y las operaciones del workspace. Borrarla no modifica el historial del proveedor.`,"tours.workspace.handoff.title":`Continuar con un contexto nuevo`,"tours.workspace.handoff.description":`¿Una conversación larga? Inicia aquí una sesión nueva o usa «Cambiar de LLM». El trabajo actual se interrumpe de inmediato y la nueva sesión continúa automáticamente en el mismo workspace. El resumen de traspaso es opcional: desactívalo si el LLM actual ha agotado su cuota. El progreso, el informe y el enlace a la sesión anterior aparecen debajo de este botón.`,"tours.workspace.terminal.title":`Terminal`,"tours.workspace.terminal.description":`Una shell dentro del worktree, sin salir de Kōbō.`,"tours.gitPr.title":`Pull request`,"tours.gitPr.panel.title":`Estado de la PR`,"tours.gitPr.panel.description":`Resultado de la CI, decisión de la review y reviewers, actualizados cada 30 segundos.`,"tours.gitPr.actions.title":`Acciones Git`,"tours.gitPr.actions.description":`Push, pull, rebase o cambiar la rama base. Durante un conflicto, un botón deja que el agente lo resuelva.`,"tours.gitPr.attention.title":`Badges de atención`,"tours.gitPr.attention.description":`La tarjeta muestra una CI fallida, cambios solicitados o una PR lista para merge.`,"tours.settings.title":`Ajustes`,"tours.settings.engines.title":`Motores y modelos`,"tours.settings.engines.description":`Modelos, permisos predeterminados y límites de reintentos automáticos.`,"tours.settings.integrations.title":`Integraciones`,"tours.settings.integrations.description":`Conexiones de Notion y Sentry, y credenciales de Bitbucket. GitHub y GitLab usan tu sesión CLI local.`,"tours.settings.automation.title":`Automatización`,"tours.settings.automation.description":`Scripts de setup y cleanup, lifecycle hooks, templates de prompts, templates de workspace y skills.`,"tours.settings.worktrees.title":`Worktrees`,"tours.settings.memory.title":`Memoria`,"tours.settings.memory.description":`Elige el comportamiento manual, automático o híbrido y explora, revisa o borra los datos exactos de cada ámbito. Las operaciones de memoria son inmediatas; el modo se aplica al guardar los ajustes.`,"tours.settings.worktrees.description":`Dónde viven los worktrees, cuánto tiempo se conservan los ya fusionados, y la purga automática.`,"tours.settings.projects.title":`Proyectos`,"tours.settings.projects.description":`Los proyectos registrados y sus ajustes específicos por proyecto.`,"tours.settings.misc.title":`General, voz, notificaciones, exportación`,"tours.settings.misc.description":`Idioma, acceso a la red, dictado, sonidos y notificaciones del navegador, y una exportación completa de tus ajustes.`,"tours.dashboard.title":`Panel`,"tours.dashboard.overview.title":`Visión general`,"tours.dashboard.overview.description":`Todos los workspaces activos en una tabla; haz clic en una fila para abrirla.`,"tours.dashboard.reliability.title":`Fiabilidad de los motores`,"tours.dashboard.reliability.description":`Sesiones, errores y duraciones por motor y modelo.`,"tours.health.title":`Salud`,"tours.health.checks.title":`Comprobaciones`,"tours.health.checks.description":`Entorno, base de datos, runtimes, workspaces y sesiones.`,"tours.health.active.title":`Estado activo`,"tours.health.active.description":`Los back-offs de cuota, los wake-ups pendientes y los auto-loops en curso en este momento.`,"tours.search.title":`Búsqueda`,"tours.search.input.title":`Consulta`,"tours.search.input.description":`Coincide con nombres de workspaces y conversaciones de agentes.`,"tours.search.archived.title":`Archivados`,"tours.search.archived.description":`Incluir los workspaces archivados en los resultados.`,"tours.changelog.title":`Novedades`,"tours.changelog.list.title":`Versiones`,"tours.changelog.list.description":`Lo que cambió en cada versión, la más reciente primero.`,"settings.projectGroup.identity":`Identidad`,"settings.projectGroup.defaults":`Valores predeterminados`,"settings.projectGroup.prompts":`Prompts`,"settings.projectGroup.scripts":`Scripts`,"settings.projectPath":`Ruta del proyecto`,"settings.projectPathPlaceholder":`/ruta/al/proyecto`,"settings.displayName":`Nombre para mostrar`,"settings.displayNamePlaceholder":`Mi proyecto`,"settings.defaultSourceBranch":`Rama fuente por defecto`,"settings.defaultModel.project":`Modelo por defecto`,"settings.skipPermissions.project":`Omitir solicitudes de permisos`,"settings.prPromptTemplate.project":`Plantilla de prompt PR`,"settings.prPromptPlaceholder.project":`Instrucciones específicas del proyecto para la creación de PRs...`,"settings.reviewPromptTemplate.project":`Plantilla de prompt de revisión`,"settings.ciFixPromptTemplate.project":`Plantilla de prompt «Reparar CI»`,"settings.gitConventions.project":`Convenciones Git (por proyecto)`,"settings.gitConventionsEmpty":`Dejar vacío para usar las convenciones globales.`,"settings.notionStatus":`Estado ticket Notion`,"settings.notionStatusProperty":`Nombre de la propiedad`,"settings.notionStatusPropertyPlaceholder":`État, Status...`,"settings.notionInProgressStatus":`Valor a establecer`,"settings.notionInProgressStatusPlaceholder":`En progreso, In progress...`,"settings.notionStatusHint":`Cuando se crea un workspace con un ticket Notion, la propiedad especificada se establece a este valor. Ambos campos son obligatorios. Dejar vacío para desactivar.`,"settings.notionAssignee":`Asignación Notion`,"settings.notionAssigneeHint":`Cuando se crea un workspace con un ticket Notion, el usuario autenticado en el MCP de Notion se añade a esta propiedad People — solo si aún no tiene un asignado. Dejar vacío para desactivar.`,"settings.notionAssigneeProperty":`Nombre de la propiedad`,"settings.notionAssigneePropertyPlaceholder":`Desarrolladores, Assignees...`,"settings.notionUserId":`Tu UUID de Notion`,"settings.notionUserIdPlaceholder":`135d872b-594c-8126-9604-00024ad6e5b5`,"settings.notionUserIdHint":`Selecciona tu cuenta en la lista. Notion rechaza la asignación de bots en propiedades People — este campo es obligatorio para activar la auto-asignación.`,"settings.notionUsersRefresh":`Refrescar`,"settings.notionUsersLoading":`Cargando usuarios de Notion…`,"settings.notionUsersLoadFailed":`Error al cargar la lista: {error}`,"settings.notionUsersManualFallback":`Lista no disponible — pega tu UUID de Notion manualmente.`,"settings.devServer":`Servidor de desarrollo`,"settings.devServerStart":`Script de inicio`,"settings.devServerStartPlaceholder":`npm run dev`,"settings.devServerStop":`Script de parada`,"settings.devServerStopPlaceholder":`Opcional — el proceso se cerrará automáticamente si está vacío`,"settings.selectProject":`Selecciona un proyecto o añade uno nuevo`,"settings.projectPathRequired":`La ruta del proyecto es obligatoria.`,"settings.useGlobal":`Usar global`,"settings.saved":`Ajustes globales guardados.`,"settings.unsavedChanges":`Cambios sin guardar`,"settings.nav.general":`General`,"settings.nav.agents":`Agentes`,"settings.nav.skills":`Skills`,"settings.nav.prompts":`Prompts`,"settings.nav.scripts":`Scripts`,"settings.nav.workspaceTemplates":`Plantillas de workspace`,"workspaceTemplates.title":`Plantillas de workspace`,"workspaceTemplates.hint":`Preajustes guardados del formulario de creación. Elige uno en la página de creación; para modificarlo, cárgalo allí, ajústalo y guárdalo de nuevo con el mismo nombre.`,"workspaceTemplates.empty":`Todavía no hay plantillas. Rellena el formulario de creación y usa «Guardar como plantilla».`,"workspaceTemplates.anyProject":`Cualquier proyecto`,"workspaceTemplates.rename":`Renombrar`,"workspaceTemplates.renameTitle":`Renombrar la plantilla`,"workspaceTemplates.deleteConfirm":`¿Eliminar la plantilla «{name}»?`,"workspaceTemplates.deleted":`Plantilla «{name}» eliminada`,"settings.nav.notion":`Notion`,"settings.nav.forge":`Forge`,"settings.bitbucketCommunity":`Bitbucket Community`,"settings.bitbucketCommunityHint":`Las credenciales se guardan localmente y solo las usa bkt.`,"settings.bitbucketUsername":`Correo de Atlassian`,"settings.bitbucketToken":`Token API de Bitbucket`,"settings.nav.sentry":`Sentry`,"settings.nav.voice":`Voz`,"settings.nav.notifications":`Notificaciones`,"settings.nav.worktrees":`Worktrees`,"settings.nav.export":`Exportar`,"settings.help.general":`Idioma, acceso a la red y los valores por defecto que hereda cada proyecto.`,"settings.help.agents":`Modelos y permisos predeterminados, y límites de reintentos automáticos.`,"settings.help.skills":`Qué suites de skills se le indica usar al agente.`,"settings.help.prompts":`Instrucciones del agente tras abrir una PR/MR, para revisiones de código, correcciones CI y finalización.`,"settings.help.scripts":`Scripts de setup, limpieza y cambio de rama origen, además de los hooks de ciclo de vida.`,"settings.help.notion":`Importar una página de Notion como fuente de verdad de un workspace.`,"settings.help.sentry":`Crear un workspace a partir de una issue de Sentry.`,"settings.help.forge":`Credenciales de Bitbucket. GitHub y GitLab usan tu CLI gh/glab autenticada; elige la forja por proyecto.`,"settings.help.voice":`Dictado y push-to-talk.`,"settings.help.notifications":`Sonidos, notificaciones del navegador y recordatorio de preguntas sin responder.`,"settings.help.worktrees":`Dónde se crean los worktrees, retención y borrado automático.`,"settings.help.projects":`Proyectos registrados y sus ajustes específicos por proyecto.`,"settings.help.templates":`Plantillas de prompt expandidas en la entrada del chat.`,"settings.help.workspaceTemplates":`Presets guardados del formulario de creación.`,"settings.help.export":`Exportar e importar todos los ajustes como JSON.`,"settings.openNav":`Abrir la navegación`,"settings.saveError":`Error al guardar los ajustes.`,"settings.projectSaved":`Proyecto guardado.`,"settings.projectSaveError":`Error al guardar el proyecto.`,"settings.projectDeleted":`Proyecto eliminado.`,"settings.deleteProjectConfirmTitle":`¿Eliminar proyecto?`,"settings.deleteProjectConfirmMessage":`¿Quitar «{name}» de tus proyectos? Esto solo elimina sus ajustes de Kōbō — tu código y tus worktrees no se modifican.`,"settings.projectDeleteError":`Error al eliminar el proyecto.`,"templates.title":`Plantillas`,"templates.newTemplate":`Nueva plantilla`,"templates.editTemplate":`Editar plantilla`,"templates.deleteTemplate":`Eliminar plantilla`,"templates.deleteConfirm":`¿Eliminar la plantilla '/{slug}'?`,"templates.deleteConfirmMessage":`Esta acción no se puede deshacer.`,"templates.slug":`Slug`,"templates.slugHint":`Minúsculas, dígitos, guiones. Máx. 64 caracteres.`,"templates.slugInvalid":`El slug solo puede contener minúsculas, dígitos y guiones`,"templates.slugDuplicate":`Ya existe una plantilla con este slug`,"templates.description":`Descripción`,"templates.descriptionHint":`Etiqueta corta mostrada en el dropdown.`,"templates.descriptionRequired":`La descripción es obligatoria`,"templates.contentRequired":`El contenido es obligatorio`,"templates.content":`Contenido`,"templates.contentHint":`Contenido de la plantilla. Usa {variable_name} para las sustituciones.`,"templates.availableVars":`Variables disponibles`,"templates.filePath":`Archivo: {path}`,"templates.empty":`Aún no hay plantillas.`,"templates.createFailed":`Error al crear la plantilla`,"templates.updateFailed":`Error al actualizar la plantilla`,"templates.deleteFailed":`Error al eliminar la plantilla`,"templates.save":`Guardar`,"templates.create":`Crear`,"templates.reloadDefaults":`Recargar plantillas predeterminadas`,"templates.reloadDefaultsHint":`Solo añade las plantillas predeterminadas que faltan. Las plantillas existentes (modificadas o no) nunca se sobrescriben.`,"templates.reloadDefaultsConfirmMessage":`Esta acción añadirá a la lista las plantillas predeterminadas que falten. Las plantillas existentes — incluidas las que hayas personalizado — no se tocarán. Si quieres restaurar una plantilla predeterminada que has modificado, elimínala primero y vuelve a ejecutar esta acción.`,"templates.reloadDefaultsSuccess":`{added} añadida(s), {kept} conservada(s)`,"templates.reloadDefaultsFailed":`Error al recargar las plantillas predeterminadas`,"templates.resetToDefault":`Restablecer al valor predeterminado`,"templates.resetConfirmTitle":`¿Restablecer la plantilla al valor predeterminado?`,"templates.resetConfirmMessage":`Esto sobrescribe tus cambios locales en /{slug} con el predeterminado. No se puede deshacer.`,"templates.resetSuccess":`Plantilla /{slug} restablecida al predeterminado`,"templates.resetFailed":`Error al restablecer la plantilla`,"chatInput.dropdownSkills":`Skills de Claude`,"chatInput.dropdownKobo":`Comandos Kōbō`,"chatInput.dropdownTemplates":`Plantillas`,"documents.title":`Documentos`,"documents.empty":`No se encontraron documentos`,"documents.refresh":`Actualizar`,"documents.back":`Volver`,"documents.loadFailed":`Error al cargar el documento`,"git.title":`Git`,"git.outputDialogTitle":`Git informó de un error`,"git.statsFailed":`No se pudo leer el estado de git`,"git.section.repository":`Repositorio`,"git.section.changes":`Cambios`,"git.section.pullRequest":`Pull request`,"git.section.actions":`Acciones`,"git.actions.more":`Más`,"git.localOnly":`solo local`,"git.pushed":`pushed`,"git.unpushed":`{count} sin push`,"git.commits":`{count} commit | {count} commits`,"git.commits.loading":`Cargando commits…`,"git.commits.empty":`Sin commits en esta rama`,"git.commits.pushed":`Pusheado`,"git.commits.unpushed":`Sin pushear`,"git.commits.clickToAppend":`click para agregar SHA al chat`,"git.commits.diffThisCommit":`Diff de este commit (vs padre)`,"git.compareCommits":`Comparar commits…`,"git.files":`{count} archivo | {count} archivos`,"git.staged":`{count} staged`,"git.modified":`{count} modificados`,"git.untracked":`{count} sin seguimiento`,"git.workingTreeEmpty":`Sin cambios sin confirmar`,"git.fileStaged":`Preparado`,"git.fileModified":`Modificado`,"git.fileUntracked":`Sin seguimiento`,"git.push":`Push`,"git.forcePush":`Force push`,"git.forcePushToggle":`Force push (--force-with-lease)`,"git.pushRejectedHistory":`Push rechazado: las ramas local y remota tienen historiales distintos. Después de un rebase de commits publicados, use Force push con confirmación. En otro caso, obtenga e integre los cambios remotos antes de reintentarlo.`,"git.pushRejectedLease":`Force push rechazado: la rama remota cambió desde la última descarga. Obtenga y revise esos cambios antes de reintentarlo.`,"git.pushFailed":`No se pudo enviar la rama. Abra los detalles para ver la causa.`,"git.pushBlockedByOperation":`Primero termina o aborta la operación {operation} en curso`,"git.pushUpToDate":`Nada que enviar: la rama ya está actualizada en origin`,"git.forcePushHint":`Más seguro que --force: el push se rechaza si el remoto tiene commits que no has visto. Úsalo tras un rebase o amend de commits ya pusheados.`,"git.branchForcePushed":`Rama force-pushed`,"git.pull":`Pull`,"git.pullNoUpstream":`No hay upstream para esta rama — hazle push primero para habilitar Pull.`,"git.sync":`Sync`,"git.createPrNoRemote":`Push la rama primero`,"git.viewRequest":`Ver {request}`,"git.createRequest":`Crear {request}`,"git.changeRequestBase":`Cambiar la rama base de la {request}`,"git.forgeCliMissing":`{cli} no está instalado — instálalo para usar las funciones de {request}`,"git.forgeNotAuthenticated":`No autenticado — ejecuta {cli} auth login`,"settings.forge":`Forge`,"settings.forge.auto":`Detección automática`,"settings.forge.github":`GitHub`,"settings.forge.gitlab":`GitLab`,"settings.forge.bitbucketCommunity":`Bitbucket Community (bkt)`,"settings.forge.none":`Ninguna`,"git.pullConfirmTitle":`¿Pull la rama?`,"git.pullConfirmMessage":`Pull {branch} desde el remoto (solo fast-forward).`,"git.branchPulled":`Rama actualizada`,"git.pullFailed":`Error al hacer pull`,"git.renameBranch":`Renombrar rama`,"git.renameBranchPrompt":"Renombrar `{branch}` a:","git.renameBranchSuccess":"Rama renombrada a `{branch}`","git.renameBranchFailed":`Error al renombrar la rama`,"git.renameBranchExists":"La rama `{branch}` ya existe localmente o en origin","git.diff":`Diff`,"git.diffReview":`Diff`,"git.diffReviewTooltip":`Abre el visor de diff en modo Review — comentarios en línea + envío por lotes al agente`,"pr.baseChanged":`Base de la PR cambiada: {oldBase} → {newBase}`,"pr.openPr":`Abrir PR`,"pr.openWorkspace":`Abrir el workspace`,"pr.dismiss":`Cerrar`,"git.rebase":`Rebase`,"git.rebaseConfirmTitle":`¿Rebase de la rama?`,"git.rebaseConfirmMessage":`Rebase sobre {branch}. Pueden surgir conflictos.`,"git.rebaseSuccess":`Rebase completado`,"git.rebaseFailed":`Rebase fallido`,"git.merge":`Merge`,"git.fetch":`Fetch`,"git.fetchSuccess":`Repositorio actualizado`,"git.fetchFailed":`Fallo al hacer fetch: {error}`,"git.mergeConfirmTitle":`¿Fusionar la rama?`,"git.mergeConfirmMessage":`Fusionar {branch} en esta rama. Puede haber conflictos.`,"git.mergeSuccess":`Merge completado`,"git.mergeFailed":`Merge fallido`,"git.commitFailed":`Commit fallido`,"git.commitChanges":`Confirmar cambios`,"git.commitDialogTitle":`Confirmar cambios sin confirmar`,"git.commitDialogDescription":`Escribe tu mensaje o pide al agente que revise y cree el commit.`,"git.commitMessage":`Mensaje de commit`,"git.commitManual":`Confirmar`,"git.commitWithAgent":`Pedir al agente`,"git.commitAgentSuccess":`Solicitud de commit enviada al agente`,"git.discardFailed":`Descarte fallido`,"git.conflictTitleMerge":`Conflictos de merge detectados`,"git.conflictTitleRebase":`Conflictos de rebase detectados`,"git.operationPausedTitle":`Operación Git para continuar`,"git.operationPausedSubtitle":`No hay archivos en conflicto. Git solo espera que continúes la operación.`,"git.conflictSubtitle":`{count} archivo(s) con conflictos. Elige cómo continuar.`,"git.conflictAbortConfirmTitle":`¿Descartar la resolución del conflicto?`,"git.conflictAbortConfirmMessage":`Todo lo que has resuelto en este {op} se descarta y el worktree vuelve a su estado anterior. Es irreversible.`,"git.conflictAbort":`Abortar`,"git.conflictContinue":`Continuar`,"git.conflictContinued":`Operación Git continuada`,"git.conflictResolveWithAgent":`Pedir al agente que resuelva`,"git.conflictAborted":`Operación abortada`,"git.conflictHandoffSuccess":`El agente está resolviendo los conflictos`,"git.dirtyTitleRebase":`Cambios sin confirmar bloquean el rebase`,"git.dirtyTitleMerge":`Cambios sin confirmar bloquean el merge`,"git.dirtyTitlePull":`Cambios sin confirmar bloquean el pull`,"git.dirtySubtitle":`{modified} modificado(s), {staged} preparado(s), {untracked} sin seguimiento. Elige cómo continuar.`,"git.dirtyStash":`Stash y reintentar`,"git.dirtyCommit":`Commit primero`,"git.dirtyCommitPlaceholder":`Mensaje del commit`,"git.dirtyCommitConfirm":`Commit y reintentar`,"git.dirtyDiscard":`Descartar cambios`,"git.dirtyDiscardConfirmTitle":`¿Descartar todos los cambios sin confirmar?`,"git.dirtyDiscardConfirmMessage":`Los cambios con seguimiento se perderán (git reset --hard). Los archivos sin seguimiento se conservan. Acción irreversible.`,"git.pushConfirmTitle":`¿Pushar la rama?`,"git.pushConfirmMessage":`Pushar {branch} al remoto.`,"git.pushConfirmMessagePrefix":`Pushar la rama`,"git.pushConfirmMessageSuffix":`al remoto.`,"git.changePrBaseTitle":`Cambiar rama base`,"git.changePrBaseMessage":`Ingrese la nueva rama destino para el {request}.`,"git.changePrBaseSuccess":`Rama base de la {request} actualizada`,"git.changePrBaseFailed":`No se pudo cambiar la rama base de la {request}`,"git.mergeRequest":`Fusionar {request}`,"git.mergeRequestConfirmTitle":`¿Fusionar {request}?`,"git.mergeRequestConfirmMessage":`Esto fusionará la {request} abierta en su rama de destino.`,"git.mergeRequestSuccess":`{request} fusionada`,"git.mergeRequestFailed":`No se pudo fusionar {request}`,"git.deleteRemoteBranch":`Eliminar rama remota`,"git.deleteRemoteBranchTitle":`¿Eliminar rama remota?`,"git.deleteRemoteBranchMessage":`La solicitud se fusionó. ¿Eliminar la rama remota {branch}?`,"git.deleteRemoteBranchSuccess":`Rama remota {branch} eliminada`,"git.deleteRemoteBranchFailed":`No se pudo eliminar la rama remota`,"git.changeSourceBranch":`Cambiar la rama de origen`,"git.changeSourceBranchTitle":`Cambiar la rama de origen`,"git.changeSourceBranchMessage":`Elige la nueva rama de origen. La rama de trabajo se reconstruirá encima.`,"git.changeSourceBranchDone":`Rama de origen cambiada a {branch}`,"git.changeSourceBranchAligned":`Rama de origen cambiada a {branch} (la rama no tenía commits propios)`,"git.changeSourceBranchTooMany":`La rama tiene demasiados commits propios ({n}) — rebásala manualmente`,"git.changeSourceBranchDirty":`Haz commit o stash de tus cambios antes de cambiar la rama de origen`,"git.changeSourceBranchAgentRunning":`Detén el agente antes de cambiar la rama de origen`,"git.changeSourceBranchErrorTitle":`Error al cambiar la rama de origen`,"git.changeSourceBranchErrorOngoing":`Una operación {op} sigue en curso en el worktree. Cancélala para volver a un estado limpio.`,"git.changeSourceBranchErrorAbort":`Cancelar la operación`,"git.changeSourceBranchLoading":`Cambiando la rama de origen…`,"git.changeSourceForcePushTitle":`¿Forzar el push de la rama reescrita?`,"git.changeSourceForcePushMessage":`El historial de la rama se reescribió. ¿Hacer force-push al remoto con --force-with-lease?`,"git.changeSourceForcePushDone":`Rama enviada con force-push`,"git.openEditor":`Abrir en editor`,"git.openEditorFailed":`No se pudo abrir el editor`,"git.branchPushed":`Rama enviada`,"git.pushFirst":`La rama no está en el remoto. Haz Push primero.`,"git.unpushedCommits":`Los commits locales no están enviados. Haz Push primero.`,"git.from":`desde`,"git.aheadBehindTooltip":`{ahead} commits por delante, {behind} por detrás de {source}`,"git.divergence.title":`Divergencia de rama`,"git.divergence.subtitle":`vs {source}`,"git.divergence.ahead":`↑ {count} por delante`,"git.divergence.behind":`↓ {count} por detrás`,"git.divergence.empty.ahead":`Sin commits por delante.`,"git.divergence.empty.behind":`Sin commits por detrás.`,"git.divergence.close":`Cerrar`,"git.divergence.loading":`Cargando commits…`,"git.divergence.failed":`No se pudo cargar la divergencia`,"git.divergence.retry":`Reintentar`,"git.prCreated":`{request} #{n} creada`,"git.pr.author":`Autor`,"git.pr.reviewers":`Revisores`,"git.pr.assignees":`Asignados`,"git.pr.labels":`Etiquetas`,"git.pr.changesRequestedBadge":`Cambios solicitados`,"git.pr.approvedBadge":`Aprobada`,"git.pr.ci.passed":`CI OK`,"git.pr.ci.failed":`CI fallida`,"git.pr.ci.pending":`CI en curso`,"git.pr.ci.failedCount":`{n} fallido(s)`,"git.pr.ci.pendingCount":`{n} en curso`,"git.pr.ci.passedCount":`{n} OK`,"git.pr.ci.skippedCount":`{n} omitido(s)`,"git.pr.ci.showPassed":`Mostrar {n} jobs OK`,"git.pr.ci.hidePassed":`Ocultar los jobs OK`,"toast.prChangesRequested":`Se solicitaron cambios en la PR #{n}`,"toast.prApproved":`La PR #{n} ha sido aprobada`,"toast.prReadyToMerge":`La PR #{n} está lista para merge`,"toast.prCiFailed":`La CI de la PR #{n} ha fallado`,"toast.prCiRecovered":`La CI de la PR #{n} se ha recuperado`,"toast.prMergeConflict":`La PR #{n} tiene conflictos de merge`,"toast.prMerged":`La PR #{n} se ha fusionado`,"devServer.title":`Servidor de desarrollo`,"devServer.noWorkspace":`Ningún workspace seleccionado`,"devServer.notConfigured":`No configurado —`,"devServer.goToSettings":`Ajustes`,"devServer.logs":`Logs`,"devServer.running":`En ejecución`,"devServer.starting":`Iniciando`,"devServer.stopping":`Deteniendo`,"devServer.error":`Error`,"devServer.stopped":`Detenido`,"devServer.unknown":`Desconocido`,"devServer.containers":`{count} contenedor | {count} contenedores`,"devServer.logDialog.title":`Logs del servidor de desarrollo`,"devServer.logDialog.empty":`No hay logs disponibles`,"notion.title":`Notion`,"tasks.title":`Tareas`,"notion.addTask":`Añadir tarea`,"notion.noUrl":`Sin URL de Notion`,"notion.subtasks":`{done}/{total} subtareas`,"notion.noTasks":`Sin tareas`,"notion.newTask":`Nueva tarea... (Enter para añadir, Esc para cancelar)`,"acceptance.title":`Criterios de aceptación`,"acceptance.addCriterion":`Añadir criterio`,"acceptance.newCriterion":`Nuevo criterio... (Enter para añadir, Esc para cancelar)`,"acceptance.empty":`Sin criterios de aceptación`,"tasks.askProgress":`Pedir al agente que revise el progreso`,"agentTodos.title":`Tareas del agente`,"agentTodos.empty":`Sin tareas del agente`,"subagents.title":`Sub-agentes`,"subagents.empty":`Aún no hay actividad de sub-agentes`,"subagents.tools":`{count} herramientas`,"subagents.running":`En ejecución: `,"subagents.status.running":`En ejecución`,"subagents.status.done":`Completado`,"subagents.status.failed":`Fallido`,"subagents.status.stopped":`Detenido`,"subagents.ambient":`Vigilancia en segundo plano`,"subagents.ambientTooltip":`Vigilancia en segundo plano (p. ej. Monitor): no cuenta como actividad del agente`,"subagents.stop":`Detener este sub-agente`,"subagents.stopAll":`Detener todos`,"subagents.stopFailed":`No se pudo detener el sub-agente: {error}`,"subagents.activity":`Actividad del subagente`,"subagents.noActivity":`Aún no hay actividad visible del proveedor`,"chat.subagentActivity":`Actividad del subagente`,"chat.openSubagentActivity":`Abrir este subagente en el panel lateral`,"stats.resetsAt":`Reset {value}`,"stats.usageBucket":`Bucket de uso {n}`,"quotaFooter.lastUpdated":`Última actualización: {time}`,"quotaFooter.empty":`Cargando…`,"quotaFooter.popover.title":`Uso de Claude Code`,"quotaFooter.popover.refreshNow":`Actualizar`,"quotaFooter.popover.resetsIn":`Se reinicia a las {value}`,"quotaFooter.popover.unauthenticated":`Auth requerida`,"quotaFooter.popover.unauthenticatedHint":`Ejecuta "claude" una vez para autenticarte.`,"quotaFooter.popover.error":`Error`,"quotaFooter.bucket.fiveHour":`5 horas`,"quotaFooter.bucket.sevenDay":`7 días`,"agent.error.spawn_failed":`No se pudo iniciar el agente`,"agent.error.parse_error":`No se pudo analizar un mensaje del agente`,"agent.error.rate_limit":`Límite de tasa alcanzado`,"agent.error.resume_failed":`Sesión no encontrada — iniciando sesión nueva`,"agent.error.other":`Error del agente`,"quotaBackoff.banner.title":`Reanudación automática a las {time}`,"quotaBackoff.banner.transientTitle":`Reanudación automática tras interrupción a las {time}`,"quotaBackoff.resumeNow":`Reanudar ahora`,"quotaBackoff.banner.tooltip":`Cuota de Claude agotada. El auto-loop se reanudará automáticamente cuando la cuota se restablezca a las {resets_at}.`,"quotaBackoff.banner.cancel":`Cancelar reanudación`,"quotaBackoff.cancelled":`Reanudación automática cancelada — puedes reanudar manualmente cuando quieras`,"rateLimitType.fiveHour":`Sesión 5h`,"rateLimitType.sevenDay":`Semanal`,"tooltip.addTask":`Añadir tarea`,"tooltip.removeTask":`Eliminar tarea`,"tooltip.addCriterion":`Añadir criterio`,"tooltip.removeCriterion":`Eliminar criterio`,"tooltip.startDevServer":`Iniciar servidor de desarrollo`,"tooltip.stopDevServer":`Detener servidor de desarrollo`,"tooltip.closeDiffViewer":`Cerrar visor de diff`,"tooltip.refreshLogs":`Actualizar logs`,"tooltip.closeDialog":`Cerrar`,"tooltip.refreshGitStats":`Actualizar estadísticas Git`,"tooltip.removeImage":`Eliminar imagen`,"tooltip.sendMessage":`Enviar mensaje`,"tools.title":`Herramientas`,"tools.runSetupScript":`Volver a ejecutar script de setup`,"tools.runSetupScriptTooltip":`Ejecutar el script de setup del proyecto en el worktree`,"tools.runSetupScriptConfirm":`¿Volver a ejecutar el script de setup en este workspace? Los artefactos existentes pueden ser sobrescritos.`,"tools.runSetupScriptBusy":`No se puede volver a ejecutar el setup mientras el agente está trabajando.`,"tools.noSetupScript":`Ningún script de setup configurado —`,"tools.setupScriptSuccess":`Script de setup completado con éxito.`,"tools.setupScriptFailed":`Falló el script de setup.`,"tools.openNotion":`Abrir en Notion`,"tools.openSentry":`Abrir en Sentry`,"tools.review":`Revisar cambios`,"tools.reviewTooltip":`Pedir al agente que revise los cambios de esta rama`,"tools.reviewBusy":`Agente ocupado — espera a que esté libre`,"tools.fixCi":`Reparar CI`,"tools.fixCiTooltip":`Pedir al agente que diagnostique y arregle los jobs de CI que fallan`,"tools.fixCiLaunched":`Acción «Reparar CI» enviada al agente`,"tools.fixCiFailed":`No se pudo lanzar la acción «Reparar CI»`,"tools.openFileManager":`Abrir en el explorador de archivos`,"tools.openFileManagerTooltip":`Abrir la carpeta del worktree en tu explorador de archivos configurado`,"tools.openFileManagerFailed":`No se pudo abrir el explorador de archivos`,"tools.openTerminal":`Abrir en terminal`,"tools.openTerminalTooltip":`Abrir el worktree en tu terminal configurada`,"tools.openTerminalFailed":`No se pudo abrir la terminal`,"review.title":`Iniciar revisión`,"review.subtitle":`Pide al agente que revise tus cambios y dé feedback.`,"review.additionalInstructions":`Instrucciones adicionales (opcional)`,"review.additionalInstructionsPlaceholder":`Añade instrucciones específicas para la revisión…`,"review.newSession":`Nueva sesión`,"review.newSessionHint":`Inicia una sesión nueva en vez de continuar la actual.`,"review.newSessionRequired":`Cambiar los ajustes del agente o volver automáticamente requiere una nueva sesión.`,"review.returnToSession":`Volver a la sesión actual después de la revisión`,"review.returnToSessionHint":`Reanuda esta sesión con el resumen final del revisor. Si se desactiva, la conversación continúa en la sesión de revisión.`,"review.readOnlyForced":`Una review que vuelve a esta sesión se ejecuta en solo lectura (Plan): no puede modificar archivos ni hacer preguntas.`,"review.returnUnavailable":`La sesión actual debe haberse iniciado para poder reanudarla.`,"review.start":`Iniciar revisión`,"review.cancel":`Cancelar`,"review.launched":`Revisión iniciada`,"review.failed":`No se pudo iniciar la revisión`,"diff.title":`Diff`,"diff.side":`Lado a lado`,"diff.inline":`En línea`,"diff.hideUnchanged":`Ocultar código sin cambios`,"diff.showUnchanged":`Mostrar código sin cambios`,"diff.showUntracked":`Mostrar archivos no rastreados`,"diff.hideUntracked":`Ocultar archivos no rastreados`,"diff.rollbackToRemote":`Restaurar a la versión remota`,"diff.rollbackConfirm":`¿Restaurar {path} a su versión remota (origin)? Los cambios locales en este archivo se perderán.`,"diff.rollbackConfirmOk":`Restaurar`,"diff.rollbackDone":`Archivo restaurado a la versión remota`,"diff.rollbackDoneRemote":`Archivo restaurado a la versión remota`,"diff.rollbackDoneHead":`Cambios locales descartados (archivo restaurado al último commit)`,"diff.rollbackDoneDeleted":`Archivo no rastreado eliminado`,"diff.deleteUntracked":`Eliminar archivo no rastreado`,"diff.deleteUntrackedConfirm":`¿Eliminar definitivamente {path}? Este archivo no está rastreado por git — su contenido se perderá.`,"diff.deleteUntrackedConfirmOk":`Eliminar`,"diff.rollbackFailed":`Falló el rollback`,"diff.rollbackFailedDetail":`Rollback fallido: {error}`,"diff.modeInspect":`Editar`,"diff.modeReview":`Review`,"diff.addComment":`Añadir comentario`,"diff.replyComment":`Responder`,"diff.editComment":`Editar`,"diff.deleteComment":`Eliminar`,"diff.deleteCommentConfirm":`¿Eliminar este comentario?`,"diff.commentPlaceholder":`Escribe un comentario de revisión… (Markdown soportado)`,"diff.reviewDraft":`Borrador de revisión`,"diff.reviewEmpty":`Aún no hay comentarios — pasa el cursor sobre una línea del diff y haz clic en + para añadir uno.`,"diff.reviewGlobalPlaceholder":`Mensaje general de revisión (opcional)`,"diff.submitReview":`Enviar revisión ({n})`,"diff.reviewPending":`Ya se está enviando una revisión.`,"diff.reviewEmptySubmission":`La revisión está vacía.`,"diff.reviewNotAccepted":`El mensaje no fue aceptado. Tu revisión se ha conservado.`,"diff.reviewSubmitted":`Revisión enviada al agente`,"diff.reviewSubmitFailed":`No se pudo enviar la revisión: {error}`,"diff.scopeBranch":`Branch`,"diff.scopeUnpushed":`Sin pushear`,"diff.noChanges":`Sin cambios`,"diff.searchFiles":`Buscar archivos…`,"diff.noFileMatch":`Ningún archivo coincide`,"diff.selectFile":`Selecciona un archivo para ver el diff`,"diff.fileLoadFailed":`No se pudo cargar este diff`,"diff.fileLoadFailedHint":`El archivo en disco está intacto — solo falló la carga del diff.`,"diff.fileListLoadFailed":`No se pudo cargar la lista de archivos`,"diff.fileListLoadFailedHint":`Es un fallo de la petición, no una rama sin cambios.`,"diff.addToChat":`Añadir al chat`,"diff.compareTitle":`Comparar commits`,"diff.compareFrom":`Desde`,"diff.compareTo":`Hasta`,"diff.compareSubmit":`Comparar`,"diff.compareSourceBase":`{branch} (base de la rama)`,"diff.commitsReadOnly":`solo lectura`,"diffViewer.save":`Guardar`,"diffViewer.savedAt":`Guardado`,"diffViewer.saveFailed":`Error al guardar`,"diffViewer.saveFailedDetail":`Error al guardar: {error}`,"diffViewer.unsavedChanges.title":`Cambios sin guardar`,"diffViewer.unsavedChanges.message":`Tienes cambios sin guardar. ¿Qué quieres hacer?`,"diffViewer.unsavedChanges.save":`Guardar`,"diffViewer.unsavedChanges.cancel":`Cancelar`,"diffViewer.conflict.title":`Archivo modificado en disco`,"diffViewer.conflict.message":`El archivo fue modificado fuera de Kōbō desde que lo abriste.`,"diffViewer.conflict.reload":`Recargar (descartar cambios locales)`,"diffViewer.conflict.keep":`Mantener los míos`,"diffViewer.conflict.overwrite":`Sobrescribir de todos modos`,"diffViewer.conflict.overwriteHint":`Reemplaza el archivo del disco por tu versión. El otro cambio se pierde.`,"diffViewer.conflict.keepHint":`Mantiene tus cambios en el editor y adopta la nueva firma del disco, para que el próximo guardado funcione.`,"diffViewer.saveBlocked":`El agente está en marcha — detenlo para guardar tus cambios.`,"diffViewer.unsavedBanner":`Cambios sin guardar. Detén el agente para guardarlos.`,"diffViewer.closeConfirm.title":`Cambios sin guardar`,"diffViewer.closeConfirm.message":`Este archivo tiene cambios que nunca se guardaron. Cerrar el visor de diferencias los descarta.`,"diffViewer.closeConfirm.discard":`Cerrar sin guardar`,"diffViewer.criteriaRail":`Checklist de revisión`,"diffViewer.criteriaRailShow":`Mostrar la checklist de revisión`,"diffViewer.criteriaRailHide":`Ocultar la checklist de revisión`,"diffViewer.fileTreeShow":`Mostrar el árbol de archivos`,"diffViewer.fileTreeHide":`Ocultar el árbol de archivos`,"diffViewer.closeConfirm.saveAndClose":`Guardar y cerrar`,"diffViewer.agentRunning":`El agente está activo — detenlo para editar`,"diffViewer.fileDeleted":`Archivo eliminado`,"notification.agentFinished":`{name} — Agente terminado`,"notification.agentQuestion":`{name} — El agente hace una pregunta`,"notification.awaitingReminder":`{name} - sigue esperándote ({minutes} min)`,"notification.agentPermissionRequest":`{name} — El agente solicita un permiso`,"notification.autoLoopCompleted":`{name} — Auto-loop completado`,"notification.autoLoopWaitingForSlot":`{name} - El auto-loop espera un slot de agente libre ({running}/{limit} en curso)`,"notification.autoLoopStalled":`{name} — Auto-loop bloqueado (sin progreso)`,"notification.autoLoopError":`{name} — Auto-loop detenido por error`,"notification.autoLoopAwaitingClarification":`{name} — Auto-loop en pausa, esperando tu aclaración`,"notification.autoLoopPermissionOverridden":`{name} — Auto-loop forzó el modo plan a bypass`,"notification.agentError":`{name} — Error del agente`,"contextMenu.rename":`Renombrar`,"contextMenu.editDescription":`Editar la descripción`,"contextMenu.copyPath":`Copiar ruta del worktree`,"contextMenu.copyWorkspaceId":`Copiar ID del workspace`,"contextMenu.openEditor":`Abrir en editor`,"contextMenu.openFileManager":`Abrir en el explorador de archivos`,"contextMenu.unarchiveDisabledPurged":`Restaura primero el worktree con Restaurar worktree o recréalo manualmente. Kōbō detecta automáticamente los worktrees correspondientes.`,"workspaceList.unarchiveBlockedPurged":`Restaura primero el worktree con Restaurar worktree o recréalo manualmente. Kōbō detecta automáticamente los worktrees correspondientes.`,"contextMenu.purgeWorktree":`Liberar espacio en disco (borrar worktree)`,"contextMenu.purgeWorktreeTooltip":`Borra el worktree del disco para recuperar espacio — el historial de mensajes y sesiones se conserva. Archiva automáticamente el workspace.`,"contextMenu.purgeWorktreeDialogTitle":`¿Liberar espacio en disco?`,"contextMenu.purgeWorktreeDialogMessage":`La carpeta del worktree de «{name}» será eliminada del disco. El historial de mensajes y sesiones se conserva. El workspace se archivará automáticamente. Esta acción no se puede deshacer en la versión actual.`,"contextMenu.purgeWorktreeDialogConfirm":`Borrar el worktree`,"contextMenu.purgeWorktreeSuccess":`Worktree borrado — espacio en disco recuperado.`,"settings.autoPurgeOnPrMerged":`Borrar worktree al mergear la PR`,"settings.autoPurgeOnPrMergedHint":`Cuando está activado, el worktree se borra del disco en cuanto se mergea la PR (además del archivado automático). El historial de mensajes se conserva.`,"settings.autoLoopMaxRetries":`Máximo de reintentos automáticos`,"settings.awaitingUserReminder":`Recordatorio de pregunta sin responder`,"settings.awaitingUserReminderHint":`Minutos que un workspace puede esperar tu respuesta antes de que Kōbō te avise, y luego en cada intervalo siguiente. 0 lo desactiva.`,"settings.localeLoadFailed":`No se pudo cargar ese idioma; se mantiene el actual.`,"settings.autoLoopMaxRetriesHint":`Pausa la misión tras este número de fallos temporales del motor o del servidor. Las cuotas esperan su restablecimiento y no consumen este límite.`,"settings.retentionTitle":`Retención del historial de conversación (desactivada por defecto)`,"settings.retentionWarning":`Activar esta opción elimina definitivamente de la base de datos el historial de conversación de los agentes, empezando por todo lo que ya sea más antiguo que la ventana. Los eventos eliminados no se pueden recuperar.`,"settings.retentionHint":`Se ejecuta una vez al arrancar el servidor. Los workspaces, tareas, sesiones, branches y worktrees nunca se tocan — solo la salida registrada de los agentes.`,"settings.retentionDaysLabel":`Eliminar eventos más antiguos de (días)`,"settings.retentionDaysHint":`0 — el valor por defecto — conserva todos los eventos indefinidamente. Indica un valor para activar la retención.`,"settings.retentionKeepLabel":`Eventos siempre conservados por workspace`,"settings.retentionKeepHint":`Los eventos más recientes de cada workspace sobreviven sea cual sea su antigüedad, para que un workspace antiguo pero aún abierto conserve un historial legible. Sugerido: 5000.`,"settings.retentionDisabledHint":`Retención desactivada: nunca se eliminará nada.`,"settings.retentionConfirmTitle":`¿Eliminar definitivamente el historial de conversación?`,"settings.retentionConfirmMessage":`Conservar solo {days} día(s) de historial eliminará definitivamente, en el próximo arranque del servidor, {count} de los {total} eventos de agente registrados — incluido todo lo que ya sea más antiguo. Es irreversible. ¿Continuar?`,"settings.retentionConfirmMessageUnknown":`Conservar solo {days} día(s) de historial eliminará definitivamente, en el próximo arranque del servidor, todos los eventos de agente más antiguos — incluido todo lo ya acumulado. No se ha podido calcular el volumen exacto. Es irreversible. ¿Continuar?`,"settings.purgeDocsTitle":`Cómo funciona el borrado — restauración y permisos`,"settings.purgeDocsRestoreTitle":`Restaurar un worktree borrado (detección automática)`,"settings.purgeDocsRestoreIntro":`Un workspace borrado conserva su historial de chat y los metadatos de la PR, pero la carpeta worktree ya no existe. Recréala manualmente con uno de estos comandos — Kōbō detecta la reaparición de la carpeta en menos de 30 segundos y reactiva automáticamente el workspace (desarchivar + limpiar flag de borrado):`,"settings.purgeDocsRestoreCommands":`# GitHub (con CLI gh):
11
+ # tu script — usa $KOBO_NEW_BASE / $KOBO_OLD_BASE / $KOBO_WORKING_BRANCH …`,"settings.changeSourceBranchScript.resetDefault":`Restablecer al predeterminado de Kōbō`,"settings.changeSourceBranchScript.replaceConfirmTitle":`¿Restablecer el script?`,"settings.changeSourceBranchScript.replaceConfirm":`Tus modificaciones se reemplazarán por el script predeterminado de Kōbō. ¿Continuar?`,"settings.cleanupScriptHint":`Script de shell ejecutado en el worktree después de cada sesión del agente. En modo auto-loop solo se ejecuta cuando todas las tareas están terminadas. Dejar vacío para desactivar.`,"settings.cleanupScriptPlaceholder":`p. ej. eliminar archivos temporales, detener contenedores…`,"settings.cleanupScriptMode":`Cuándo ejecutar`,"settings.cleanupScriptMode.idle":`Después de cada sesión — aunque queden tareas`,"settings.cleanupScriptMode.noTasks":`Solo cuando no queda ninguna tarea de Kōbō`,"settings.cleanupScriptOnlyOnChanges":`Ejecutar solo si se modificaron, añadieron o eliminaron archivos`,"settings.cleanupScriptMode.inherit":`Heredar la configuración global`,"settings.taskPromptTemplate":`Prompt de tarea`,"settings.taskPromptTemplatePlaceholder":`Prompt insertado automáticamente en la descripción de la tarea…`,"settings.taskPromptTemplateHint":`Se inyecta automáticamente en la descripción de la tarea en la página de creación cuando este proyecto está seleccionado. Si no se modifica, se reemplaza al cambiar de proyecto; en cuanto lo editas, se conserva tu texto.`,"settings.setupScriptPlaceholder":`npm install`,"settings.setupScriptHint":`Se ejecuta con bash en el worktree después de su creación, antes de que el agente inicie. No necesita shebang. Si falla, el workspace se establece en error. Timeout: 5 minutos.`,"settings.e2e.title":`Tests E2E`,"settings.e2e.framework":`Framework`,"settings.e2e.frameworkNone":`Ninguno`,"settings.e2e.frameworkOther":`Otro`,"settings.e2e.skill":`Skill (opcional)`,"settings.e2e.skillPlaceholder":`p. ej. cypress-tester`,"settings.e2e.prompt":`Guía personalizada (opcional)`,"settings.e2e.promptPlaceholder":`p. ej. usar el patrón page-object, apuntar a data-testid`,"settings.e2e.helpText":`Cuando está configurado, el agente de grooming auto-loop inserta subtareas E2E para funciones UI.`,"settings.finalization.title":`Finalización del auto-loop`,"settings.finalization.helpText":`Opcional: un prompt que el agente ejecuta como la última iteración del auto-loop. Típicamente usado para controles de calidad finales (lint, typecheck, tests). La fase de grooming creará una tarea con prefijo [FINAL] que usará este prompt.`,"settings.finalization.prompt":`Prompt de finalización`,"settings.finalization.promptPlaceholder":`p. ej. Ejecuta npm run lint y npm test, luego marca esta tarea como hecha.`,"settings.editorCommand":`Comando del editor`,"settings.editorCommandPlaceholder":`code, phpstorm, subl, vim...`,"settings.editorCommandHint":`Comando para abrir el worktree en su editor. La ruta del worktree se pasa como argumento.`,"settings.fileManagerCommand":`Comando del explorador de archivos`,"settings.fileManagerCommandPlaceholder":`xdg-open, open, nautilus, dolphin, explorer...`,"settings.fileManagerCommandHint":`Comando para abrir el worktree en su explorador de archivos. La ruta del worktree se pasa como argumento. Déjalo vacío para ocultar el botón.`,"settings.terminalCommand":`Comando de terminal`,"settings.terminalCommandHint":`Comando para abrir tu terminal en el worktree. Marcador {path} opcional para el directorio.`,"settings.terminalCommandPlaceholder":`kitty · alacritty · gnome-terminal --working-directory={path}`,"settings.mcpSelection":`Selección MCP de Claude`,"settings.mcpAutoSelect":`Auto (primer MCP activo que coincide)`,"settings.notionMcp":`Clave MCP de Notion`,"settings.sentryMcp":`Clave MCP de Sentry`,"settings.mcpSelectionHint":`Las entradas activas se leen desde ~/.claude.json. Deja Auto para usar el comportamiento por defecto.`,"settings.configuredProjects":`Proyectos configurados`,"settings.noProjects":`No hay proyectos configurados`,"settings.addProject":`Añadir proyecto`,"settings.copyFrom":`Copiar ajustes desde`,"settings.copyFromPlaceholder":`(ninguno — partir de los valores por defecto)`,"settings.copyFromHint":`Copia todos los ajustes excepto path, nombre y rama fuente.`,"settings.copyFromConfirmTitle":`¿Sobrescribir los valores actuales?`,"settings.copyFromConfirm":`Se sobrescribirán los valores del formulario con los ajustes de «{project}». ¿Continuar?`,"settings.newProject":`Nuevo proyecto`,"settings.editProject":`Editar proyecto`,"help.title":`Ayuda`,"help.tours":`Visitas guiadas`,"help.steps":`{n} paso | {n} pasos`,"help.markAllSeen":`Marcar todas como vistas`,"help.markAllSeenHint":`Marca las visitas actuales como vistas sin iniciarlas.`,"help.resetAll":`Restablecer todas las visitas`,"help.resetAllHint":`Inicia ahora la visita de inicio; cada pantalla repetirá la suya al abrirla de nuevo.`,"help.status.unseen":`no vista`,"help.status.partial":`en parte`,"help.status.seen":`vista`,"help.replayThis":`Repetir la visita de esta pantalla`,"tours.next":`Siguiente`,"tours.prev":`Atrás`,"tours.done":`Terminar`,"tours.exitConfirm":`¿Salir de la visita guiada? No volverá a iniciarse sola; puedes repetirla cuando quieras desde el menú Ayuda.`,"tours.home.title":`Orientarse`,"tours.home.list.title":`Workspaces`,"tours.home.list.description":`Cada misión vive aquí con su estado. Los badges señalan una CI fallida, una review que pide cambios o una PR lista para merge. Arrastra el borde interior de un panel lateral con el ratón o el dedo para cambiar su tamaño. Los botones superiores se distribuyen en varias líneas si falta espacio.`,"tours.home.create.title":`Crear un workspace`,"tours.home.create.description":`Un workspace es un worktree de Git, una rama y una sesión de agente para una tarea.`,"tours.home.search.title":`Búsqueda`,"tours.home.search.description":`Filtra la lista por nombre. El icono de búsqueda de arriba abre la búsqueda de texto completo en las conversaciones de los agentes.`,"tours.home.dashboard.title":`Panel`,"tours.home.dashboard.description":`Una tabla con todos los workspaces activos: estado, atención, PR, diff, actividad y la fiabilidad de los motores.`,"tours.home.health.title":`Salud y changelog`,"tours.home.health.description":`Comprueba la base de datos, los runtimes y los agentes activos. El botón de al lado lista lo que cambió en cada versión.`,"tours.home.settings.title":`Ajustes`,"tours.home.settings.description":`Motores, integraciones, automatización, worktrees y proyectos. Ahora crea tu primer workspace.`,"tours.create.title":`Crear un workspace`,"tours.create.project.title":`Proyecto y rama`,"tours.create.project.description":`Elige el proyecto y la rama de la que parte el worktree.`,"tours.create.mission.title":`Misión`,"tours.create.mission.description":`Describe la tarea, o impórtala desde una página de Notion o una issue de Sentry.`,"tours.create.template.title":`Templates`,"tours.create.template.description":`Aplica un preset guardado, o guarda este formulario como preset. «Duplicar» en una tarjeta de workspace abre este formulario ya rellenado.`,"tours.create.engine.title":`Motor y modelo`,"tours.create.engine.description":`Claude Code o Codex, el modelo, el esfuerzo de razonamiento y lo que el agente puede hacer sin preguntar.`,"tours.create.brainstorm.title":`Brainstorm en otro modelo`,"tours.create.brainstorm.description":`Ejecuta la primera sesión de brainstorming en otro modelo y vuelve al principal para las iteraciones.`,"tours.create.autoloop.title":`Auto-loop`,"tours.create.autoloop.description":`El agente completa las tareas y las verificaciones finales. Una review final independiente opcional se repite tras las correcciones hasta que no queden hallazgos; si no hay progreso, el bucle se pausa.`,"tours.create.finalReview.title":`Configurar la review final`,"tours.create.finalReview.description":`Elige de antemano el motor, el modelo, el esfuerzo y las instrucciones del reviewer. La review se ejecuta en una sesión separada de solo lectura; el agente original corrige los hallazgos y la review se repite hasta que no quede ninguno.`,"tours.workspace.finalReview.title":`Review final y correcciones`,"tours.workspace.finalReview.description":`Configura aquí el reviewer final opcional antes de iniciarlo. Tras las tareas y las verificaciones finales, una sesión separada revisa el trabajo. Los hallazgos vuelven a la sesión original para corregirlos automáticamente y repetir la review. Cerrar Kōbō conserva el ciclo.`,"tours.workspace.reviewReturn.title":`Volver de una review`,"tours.workspace.reviewReturn.description":`El resumen vuelve a la sesión original incluso tras reiniciar Kōbō. Si la entrega es incierta, consulta esa conversación antes de Reintentar; Cancelar abandona el retorno. Las reviews manuales esperan tus instrucciones antes de corregir; auto-loop corrige automáticamente.`,"tours.create.comparison.title":`Comparar dos motores`,"tours.create.comparison.description":`Crea dos workspaces gemelos sobre la misma tarea y compara sus commits, tareas y actividad.`,"tours.workspace.sessions.title":`Sesiones del workspace`,"tours.workspace.sessions.description":`Pulsa el título para elegir, crear o renombrar una sesión, o copiar su identificador.`,"tours.workspace.actions.title":`Acciones del workspace`,"tours.workspace.actions.description":`El menú ⋯ reúne la vista en paralelo, la paleta de comandos, el panel lateral y la visita guiada.`,"tours.workspace.title":`Dentro de un workspace`,"tours.workspace.chat.title":`Conversación`,"tours.workspace.chat.description":`La salida del agente, en directo: mensajes, llamadas a herramientas, preguntas y errores.`,"tours.workspace.input.title":`Hablar con el agente`,"tours.workspace.input.description":`Envía un mensaje, usa slash commands, dicta por voz o adjunta archivos.`,"tours.workspace.selectors.title":`Ajustes de sesión`,"tours.workspace.selectors.description":`Abre Configurar para ajustar modelo, esfuerzo, permisos y auto-loop. También muestra el motor actual.`,"tours.workspace.status.title":`Estado`,"tours.workspace.status.description":`El estado de la sesión actual; detenla aquí cuando haga falta.`,"tours.workspace.git.title":`Git`,"tours.workspace.git.description":`Commits, diff, push, rebase y la PR de esta rama.`,"tours.workspace.tasks.title":`Tareas`,"tours.workspace.tasks.description":`Lo que el agente planea hacer, y los criterios de aceptación que debe cumplir.`,"tours.workspace.timeline.title":`Cronología`,"tours.workspace.timeline.description":`Todas las sesiones de este workspace; abre una anterior para releerla.`,"tours.workspace.subagents.title":`Subagentes`,"tours.workspace.subagents.description":`Sigue los subagentes que lanzó el agente, con su progreso en directo.`,"tours.workspace.documents.title":`Documentos`,"tours.workspace.documents.description":`Planes y archivos que escribió el agente, consultables sin salir del chat.`,"tours.workspace.schedule.title":`Programación`,"tours.workspace.schedule.description":`Wake-ups y crons que relanzan el agente más tarde.`,"tours.workspace.memory.title":`Memoria del workspace`,"tours.workspace.memory.description":`Consulta la memoria entregada a la conversación seleccionada, las propuestas pendientes y las operaciones del workspace. Borrarla no modifica el historial del proveedor.`,"tours.workspace.handoff.title":`Continuar con un contexto nuevo`,"tours.workspace.handoff.description":`¿Una conversación larga? Inicia aquí una sesión nueva o usa «Cambiar de LLM». El trabajo actual se interrumpe de inmediato y la nueva sesión continúa automáticamente en el mismo workspace. El resumen de traspaso es opcional: desactívalo si el LLM actual ha agotado su cuota. El progreso, el informe y el enlace a la sesión anterior aparecen debajo de este botón.`,"tours.workspace.terminal.title":`Terminal`,"tours.workspace.terminal.description":`Una shell dentro del worktree, sin salir de Kōbō.`,"tours.gitPr.title":`Pull request`,"tours.gitPr.panel.title":`Estado de la PR`,"tours.gitPr.panel.description":`Resultado de la CI, decisión de la review y reviewers, actualizados cada 30 segundos.`,"tours.gitPr.actions.title":`Acciones Git`,"tours.gitPr.actions.description":`Push, pull, rebase o cambiar la rama base. Durante un conflicto, un botón deja que el agente lo resuelva.`,"tours.gitPr.attention.title":`Badges de atención`,"tours.gitPr.attention.description":`La tarjeta muestra una CI fallida, cambios solicitados o una PR lista para merge.`,"tours.settings.title":`Ajustes`,"tours.settings.engines.title":`Motores y modelos`,"tours.settings.engines.description":`Modelos, permisos predeterminados y límites de reintentos automáticos.`,"tours.settings.integrations.title":`Integraciones`,"tours.settings.integrations.description":`Conexiones de Notion y Sentry, y credenciales de Bitbucket. GitHub y GitLab usan tu sesión CLI local.`,"tours.settings.automation.title":`Automatización`,"tours.settings.automation.description":`Scripts de setup y cleanup, lifecycle hooks, templates de prompts, templates de workspace y skills.`,"tours.settings.worktrees.title":`Worktrees`,"tours.settings.memory.title":`Memoria`,"tours.settings.memory.description":`Elige el comportamiento manual, automático o híbrido y explora, revisa o borra los datos exactos de cada ámbito. Las operaciones de memoria son inmediatas; el modo se aplica al guardar los ajustes.`,"tours.settings.worktrees.description":`Dónde viven los worktrees, cuánto tiempo se conservan los ya fusionados, y la purga automática.`,"tours.settings.projects.title":`Proyectos`,"tours.settings.projects.description":`Los proyectos registrados y sus ajustes específicos por proyecto.`,"tours.settings.misc.title":`General, voz, notificaciones, exportación`,"tours.settings.misc.description":`Idioma, acceso a la red, dictado, sonidos y notificaciones del navegador, y una exportación completa de tus ajustes.`,"tours.dashboard.title":`Panel`,"tours.dashboard.overview.title":`Visión general`,"tours.dashboard.overview.description":`Todos los workspaces activos en una tabla; haz clic en una fila para abrirla.`,"tours.dashboard.reliability.title":`Fiabilidad de los motores`,"tours.dashboard.reliability.description":`Sesiones, errores y duraciones por motor y modelo.`,"tours.health.title":`Salud`,"tours.health.checks.title":`Comprobaciones`,"tours.health.checks.description":`Entorno, base de datos, runtimes, workspaces y sesiones.`,"tours.health.active.title":`Estado activo`,"tours.health.active.description":`Los back-offs de cuota, los wake-ups pendientes y los auto-loops en curso en este momento.`,"tours.search.title":`Búsqueda`,"tours.search.input.title":`Consulta`,"tours.search.input.description":`Coincide con nombres de workspaces y conversaciones de agentes.`,"tours.search.archived.title":`Archivados`,"tours.search.archived.description":`Incluir los workspaces archivados en los resultados.`,"tours.changelog.title":`Novedades`,"tours.changelog.list.title":`Versiones`,"tours.changelog.list.description":`Lo que cambió en cada versión, la más reciente primero.`,"settings.projectGroup.identity":`Identidad`,"settings.projectGroup.defaults":`Valores predeterminados`,"settings.projectGroup.prompts":`Prompts`,"settings.projectGroup.scripts":`Scripts`,"settings.projectPath":`Ruta del proyecto`,"settings.projectPathPlaceholder":`/ruta/al/proyecto`,"settings.displayName":`Nombre para mostrar`,"settings.displayNamePlaceholder":`Mi proyecto`,"settings.defaultSourceBranch":`Rama fuente por defecto`,"settings.defaultModel.project":`Modelo por defecto`,"settings.skipPermissions.project":`Omitir solicitudes de permisos`,"settings.prPromptTemplate.project":`Plantilla de prompt PR`,"settings.prPromptPlaceholder.project":`Instrucciones específicas del proyecto para la creación de PRs...`,"settings.reviewPromptTemplate.project":`Plantilla de prompt de revisión`,"settings.ciFixPromptTemplate.project":`Plantilla de prompt «Reparar CI»`,"settings.gitConventions.project":`Convenciones Git (por proyecto)`,"settings.gitConventionsEmpty":`Dejar vacío para usar las convenciones globales.`,"settings.notionStatus":`Estado ticket Notion`,"settings.notionStatusProperty":`Nombre de la propiedad`,"settings.notionStatusPropertyPlaceholder":`État, Status...`,"settings.notionInProgressStatus":`Valor a establecer`,"settings.notionInProgressStatusPlaceholder":`En progreso, In progress...`,"settings.notionStatusHint":`Cuando se crea un workspace con un ticket Notion, la propiedad especificada se establece a este valor. Ambos campos son obligatorios. Dejar vacío para desactivar.`,"settings.notionAssignee":`Asignación Notion`,"settings.notionAssigneeHint":`Cuando se crea un workspace con un ticket Notion, el usuario autenticado en el MCP de Notion se añade a esta propiedad People — solo si aún no tiene un asignado. Dejar vacío para desactivar.`,"settings.notionAssigneeProperty":`Nombre de la propiedad`,"settings.notionAssigneePropertyPlaceholder":`Desarrolladores, Assignees...`,"settings.notionUserId":`Tu UUID de Notion`,"settings.notionUserIdPlaceholder":`135d872b-594c-8126-9604-00024ad6e5b5`,"settings.notionUserIdHint":`Selecciona tu cuenta en la lista. Notion rechaza la asignación de bots en propiedades People — este campo es obligatorio para activar la auto-asignación.`,"settings.notionUsersRefresh":`Refrescar`,"settings.notionUsersLoading":`Cargando usuarios de Notion…`,"settings.notionUsersLoadFailed":`Error al cargar la lista: {error}`,"settings.notionUsersManualFallback":`Lista no disponible — pega tu UUID de Notion manualmente.`,"settings.devServer":`Servidor de desarrollo`,"settings.devServerStart":`Script de inicio`,"settings.devServerStartPlaceholder":`npm run dev`,"settings.devServerStop":`Script de parada`,"settings.devServerStopPlaceholder":`Opcional — el proceso se cerrará automáticamente si está vacío`,"settings.selectProject":`Selecciona un proyecto o añade uno nuevo`,"settings.projectPathRequired":`La ruta del proyecto es obligatoria.`,"settings.useGlobal":`Usar global`,"settings.saved":`Ajustes globales guardados.`,"settings.unsavedChanges":`Cambios sin guardar`,"settings.nav.general":`General`,"settings.nav.agents":`Agentes`,"settings.nav.skills":`Skills`,"settings.nav.prompts":`Prompts`,"settings.nav.scripts":`Scripts`,"settings.nav.workspaceTemplates":`Plantillas de workspace`,"workspaceTemplates.title":`Plantillas de workspace`,"workspaceTemplates.hint":`Preajustes guardados del formulario de creación. Elige uno en la página de creación; para modificarlo, cárgalo allí, ajústalo y guárdalo de nuevo con el mismo nombre.`,"workspaceTemplates.empty":`Todavía no hay plantillas. Rellena el formulario de creación y usa «Guardar como plantilla».`,"workspaceTemplates.anyProject":`Cualquier proyecto`,"workspaceTemplates.rename":`Renombrar`,"workspaceTemplates.renameTitle":`Renombrar la plantilla`,"workspaceTemplates.deleteConfirm":`¿Eliminar la plantilla «{name}»?`,"workspaceTemplates.deleted":`Plantilla «{name}» eliminada`,"settings.nav.notion":`Notion`,"settings.nav.forge":`Forge`,"settings.bitbucketCommunity":`Bitbucket Community`,"settings.bitbucketCommunityHint":`Las credenciales se guardan localmente y solo las usa bkt.`,"settings.bitbucketUsername":`Correo de Atlassian`,"settings.bitbucketToken":`Token API de Bitbucket`,"settings.nav.sentry":`Sentry`,"settings.nav.voice":`Voz`,"settings.nav.notifications":`Notificaciones`,"settings.nav.worktrees":`Worktrees`,"settings.nav.export":`Exportar`,"settings.help.general":`Idioma, acceso a la red y los valores por defecto que hereda cada proyecto.`,"settings.help.agents":`Modelos y permisos predeterminados, y límites de reintentos automáticos.`,"settings.help.skills":`Qué suites de skills se le indica usar al agente.`,"settings.help.prompts":`Instrucciones del agente tras abrir una PR/MR, para revisiones de código, correcciones CI y finalización.`,"settings.help.scripts":`Scripts de setup, limpieza y cambio de rama origen, además de los hooks de ciclo de vida.`,"settings.help.notion":`Importar una página de Notion como fuente de verdad de un workspace.`,"settings.help.sentry":`Crear un workspace a partir de una issue de Sentry.`,"settings.help.forge":`Credenciales de Bitbucket. GitHub y GitLab usan tu CLI gh/glab autenticada; elige la forja por proyecto.`,"settings.help.voice":`Dictado y push-to-talk.`,"settings.help.notifications":`Sonidos, notificaciones del navegador y recordatorio de preguntas sin responder.`,"settings.help.worktrees":`Dónde se crean los worktrees, retención y borrado automático.`,"settings.help.projects":`Proyectos registrados y sus ajustes específicos por proyecto.`,"settings.help.templates":`Plantillas de prompt expandidas en la entrada del chat.`,"settings.help.workspaceTemplates":`Presets guardados del formulario de creación.`,"settings.help.export":`Exportar e importar todos los ajustes como JSON.`,"settings.openNav":`Abrir la navegación`,"settings.saveError":`Error al guardar los ajustes.`,"settings.projectSaved":`Proyecto guardado.`,"settings.projectSaveError":`Error al guardar el proyecto.`,"settings.projectDeleted":`Proyecto eliminado.`,"settings.deleteProjectConfirmTitle":`¿Eliminar proyecto?`,"settings.deleteProjectConfirmMessage":`¿Quitar «{name}» de tus proyectos? Esto solo elimina sus ajustes de Kōbō — tu código y tus worktrees no se modifican.`,"settings.projectDeleteError":`Error al eliminar el proyecto.`,"templates.title":`Plantillas`,"templates.newTemplate":`Nueva plantilla`,"templates.editTemplate":`Editar plantilla`,"templates.deleteTemplate":`Eliminar plantilla`,"templates.deleteConfirm":`¿Eliminar la plantilla '/{slug}'?`,"templates.deleteConfirmMessage":`Esta acción no se puede deshacer.`,"templates.slug":`Slug`,"templates.slugHint":`Minúsculas, dígitos, guiones. Máx. 64 caracteres.`,"templates.slugInvalid":`El slug solo puede contener minúsculas, dígitos y guiones`,"templates.slugDuplicate":`Ya existe una plantilla con este slug`,"templates.description":`Descripción`,"templates.descriptionHint":`Etiqueta corta mostrada en el dropdown.`,"templates.descriptionRequired":`La descripción es obligatoria`,"templates.contentRequired":`El contenido es obligatorio`,"templates.content":`Contenido`,"templates.contentHint":`Contenido de la plantilla. Usa {variable_name} para las sustituciones.`,"templates.availableVars":`Variables disponibles`,"templates.filePath":`Archivo: {path}`,"templates.empty":`Aún no hay plantillas.`,"templates.createFailed":`Error al crear la plantilla`,"templates.updateFailed":`Error al actualizar la plantilla`,"templates.deleteFailed":`Error al eliminar la plantilla`,"templates.save":`Guardar`,"templates.create":`Crear`,"templates.reloadDefaults":`Recargar plantillas predeterminadas`,"templates.reloadDefaultsHint":`Solo añade las plantillas predeterminadas que faltan. Las plantillas existentes (modificadas o no) nunca se sobrescriben.`,"templates.reloadDefaultsConfirmMessage":`Esta acción añadirá a la lista las plantillas predeterminadas que falten. Las plantillas existentes — incluidas las que hayas personalizado — no se tocarán. Si quieres restaurar una plantilla predeterminada que has modificado, elimínala primero y vuelve a ejecutar esta acción.`,"templates.reloadDefaultsSuccess":`{added} añadida(s), {kept} conservada(s)`,"templates.reloadDefaultsFailed":`Error al recargar las plantillas predeterminadas`,"templates.resetToDefault":`Restablecer al valor predeterminado`,"templates.resetConfirmTitle":`¿Restablecer la plantilla al valor predeterminado?`,"templates.resetConfirmMessage":`Esto sobrescribe tus cambios locales en /{slug} con el predeterminado. No se puede deshacer.`,"templates.resetSuccess":`Plantilla /{slug} restablecida al predeterminado`,"templates.resetFailed":`Error al restablecer la plantilla`,"chatInput.dropdownSkills":`Skills de Claude`,"chatInput.dropdownKobo":`Comandos Kōbō`,"chatInput.dropdownTemplates":`Plantillas`,"documents.title":`Documentos`,"documents.empty":`No se encontraron documentos`,"documents.refresh":`Actualizar`,"documents.back":`Volver`,"documents.loadFailed":`Error al cargar el documento`,"git.title":`Git`,"git.outputDialogTitle":`Git informó de un error`,"git.statsFailed":`No se pudo leer el estado de git`,"git.section.repository":`Repositorio`,"git.section.changes":`Cambios`,"git.section.pullRequest":`Pull request`,"git.section.actions":`Acciones`,"git.actions.more":`Más`,"git.localOnly":`solo local`,"git.pushed":`pushed`,"git.unpushed":`{count} sin push`,"git.commits":`{count} commit | {count} commits`,"git.commits.loading":`Cargando commits…`,"git.commits.empty":`Sin commits en esta rama`,"git.commits.pushed":`Pusheado`,"git.commits.unpushed":`Sin pushear`,"git.commits.clickToAppend":`click para agregar SHA al chat`,"git.commits.diffThisCommit":`Diff de este commit (vs padre)`,"git.compareCommits":`Comparar commits…`,"git.files":`{count} archivo | {count} archivos`,"git.staged":`{count} staged`,"git.modified":`{count} modificados`,"git.untracked":`{count} sin seguimiento`,"git.workingTreeEmpty":`Sin cambios sin confirmar`,"git.fileStaged":`Preparado`,"git.fileModified":`Modificado`,"git.fileUntracked":`Sin seguimiento`,"git.push":`Push`,"git.forcePush":`Force push`,"git.forcePushToggle":`Force push (--force-with-lease)`,"git.pushRejectedHistory":`Push rechazado: las ramas local y remota tienen historiales distintos. Después de un rebase de commits publicados, use Force push con confirmación. En otro caso, obtenga e integre los cambios remotos antes de reintentarlo.`,"git.pushRejectedLease":`Force push rechazado: la rama remota cambió desde la última descarga. Obtenga y revise esos cambios antes de reintentarlo.`,"git.pushFailed":`No se pudo enviar la rama. Abra los detalles para ver la causa.`,"git.pushBlockedByOperation":`Primero termina o aborta la operación {operation} en curso`,"git.pushUpToDate":`Nada que enviar: la rama ya está actualizada en origin`,"git.forcePushHint":`Más seguro que --force: el push se rechaza si el remoto tiene commits que no has visto. Úsalo tras un rebase o amend de commits ya pusheados.`,"git.branchForcePushed":`Rama force-pushed`,"git.pull":`Pull`,"git.pullNoUpstream":`No hay upstream para esta rama — hazle push primero para habilitar Pull.`,"git.sync":`Sync`,"git.createPrNoRemote":`Push la rama primero`,"git.viewRequest":`Ver {request}`,"git.createRequest":`Crear {request}`,"git.changeRequestBase":`Cambiar la rama base de la {request}`,"git.forgeCliMissing":`{cli} no está instalado — instálalo para usar las funciones de {request}`,"git.forgeNotAuthenticated":`No autenticado — ejecuta {cli} auth login`,"settings.forge":`Forge`,"settings.forge.auto":`Detección automática`,"settings.forge.github":`GitHub`,"settings.forge.gitlab":`GitLab`,"settings.forge.bitbucketCommunity":`Bitbucket Community (bkt)`,"settings.forge.none":`Ninguna`,"git.pullConfirmTitle":`¿Pull la rama?`,"git.pullConfirmMessage":`Pull {branch} desde el remoto (solo fast-forward).`,"git.branchPulled":`Rama actualizada`,"git.pullFailed":`Error al hacer pull`,"git.renameBranch":`Renombrar rama`,"git.renameBranchPrompt":"Renombrar `{branch}` a:","git.renameBranchSuccess":"Rama renombrada a `{branch}`","git.renameBranchFailed":`Error al renombrar la rama`,"git.renameBranchExists":"La rama `{branch}` ya existe localmente o en origin","git.diff":`Diff`,"git.diffReview":`Diff`,"git.diffReviewTooltip":`Abre el visor de diff en modo Review — comentarios en línea + envío por lotes al agente`,"pr.baseChanged":`Base de la PR cambiada: {oldBase} → {newBase}`,"pr.openPr":`Abrir PR`,"pr.openWorkspace":`Abrir el workspace`,"pr.dismiss":`Cerrar`,"git.rebase":`Rebase`,"git.rebaseConfirmTitle":`¿Rebase de la rama?`,"git.rebaseConfirmMessage":`Rebase sobre {branch}. Pueden surgir conflictos.`,"git.rebaseSuccess":`Rebase completado`,"git.rebaseFailed":`Rebase fallido`,"git.merge":`Merge`,"git.fetch":`Fetch`,"git.fetchSuccess":`Repositorio actualizado`,"git.fetchFailed":`Fallo al hacer fetch: {error}`,"git.mergeConfirmTitle":`¿Fusionar la rama?`,"git.mergeConfirmMessage":`Fusionar {branch} en esta rama. Puede haber conflictos.`,"git.mergeSuccess":`Merge completado`,"git.mergeFailed":`Merge fallido`,"git.commitFailed":`Commit fallido`,"git.commitChanges":`Confirmar cambios`,"git.commitDialogTitle":`Confirmar cambios sin confirmar`,"git.commitDialogDescription":`Escribe tu mensaje o pide al agente que revise y cree el commit.`,"git.commitMessage":`Mensaje de commit`,"git.commitManual":`Confirmar`,"git.commitWithAgent":`Pedir al agente`,"git.commitAgentSuccess":`Solicitud de commit enviada al agente`,"git.discardFailed":`Descarte fallido`,"git.conflictTitleMerge":`Conflictos de merge detectados`,"git.conflictTitleRebase":`Conflictos de rebase detectados`,"git.operationPausedTitle":`Operación Git para continuar`,"git.operationPausedSubtitle":`No hay archivos en conflicto. Git solo espera que continúes la operación.`,"git.conflictSubtitle":`{count} archivo(s) con conflictos. Elige cómo continuar.`,"git.conflictAbortConfirmTitle":`¿Descartar la resolución del conflicto?`,"git.conflictAbortConfirmMessage":`Todo lo que has resuelto en este {op} se descarta y el worktree vuelve a su estado anterior. Es irreversible.`,"git.conflictAbort":`Abortar`,"git.conflictContinue":`Continuar`,"git.conflictContinued":`Operación Git continuada`,"git.conflictResolveWithAgent":`Pedir al agente que resuelva`,"git.conflictAborted":`Operación abortada`,"git.conflictHandoffSuccess":`El agente está resolviendo los conflictos`,"git.dirtyTitleRebase":`Cambios sin confirmar bloquean el rebase`,"git.dirtyTitleMerge":`Cambios sin confirmar bloquean el merge`,"git.dirtyTitlePull":`Cambios sin confirmar bloquean el pull`,"git.dirtySubtitle":`{modified} modificado(s), {staged} preparado(s), {untracked} sin seguimiento. Elige cómo continuar.`,"git.dirtyStash":`Stash y reintentar`,"git.dirtyCommit":`Commit primero`,"git.dirtyCommitPlaceholder":`Mensaje del commit`,"git.dirtyCommitConfirm":`Commit y reintentar`,"git.dirtyDiscard":`Descartar cambios`,"git.dirtyDiscardConfirmTitle":`¿Descartar todos los cambios sin confirmar?`,"git.dirtyDiscardConfirmMessage":`Los cambios con seguimiento se perderán (git reset --hard). Los archivos sin seguimiento se conservan. Acción irreversible.`,"git.pushConfirmTitle":`¿Pushar la rama?`,"git.pushConfirmMessage":`Pushar {branch} al remoto.`,"git.pushConfirmMessagePrefix":`Pushar la rama`,"git.pushConfirmMessageSuffix":`al remoto.`,"git.changePrBaseTitle":`Cambiar rama base`,"git.changePrBaseMessage":`Ingrese la nueva rama destino para el {request}.`,"git.changePrBaseSuccess":`Rama base de la {request} actualizada`,"git.changePrBaseFailed":`No se pudo cambiar la rama base de la {request}`,"git.mergeRequest":`Fusionar {request}`,"git.mergeRequestConfirmTitle":`¿Fusionar {request}?`,"git.mergeRequestConfirmMessage":`Esto fusionará la {request} abierta en su rama de destino.`,"git.mergeRequestSuccess":`{request} fusionada`,"git.mergeRequestFailed":`No se pudo fusionar {request}`,"git.deleteRemoteBranch":`Eliminar rama remota`,"git.deleteRemoteBranchTitle":`¿Eliminar rama remota?`,"git.deleteRemoteBranchMessage":`La solicitud se fusionó. ¿Eliminar la rama remota {branch}?`,"git.deleteRemoteBranchSuccess":`Rama remota {branch} eliminada`,"git.deleteRemoteBranchFailed":`No se pudo eliminar la rama remota`,"git.changeSourceBranch":`Cambiar la rama de origen`,"git.changeSourceBranchTitle":`Cambiar la rama de origen`,"git.changeSourceBranchMessage":`Elige la nueva rama de origen. La rama de trabajo se reconstruirá encima.`,"git.changeSourceBranchDone":`Rama de origen cambiada a {branch}`,"git.changeSourceBranchAligned":`Rama de origen cambiada a {branch} (la rama no tenía commits propios)`,"git.changeSourceBranchTooMany":`La rama tiene demasiados commits propios ({n}) — rebásala manualmente`,"git.changeSourceBranchDirty":`Haz commit o stash de tus cambios antes de cambiar la rama de origen`,"git.changeSourceBranchAgentRunning":`Detén el agente antes de cambiar la rama de origen`,"git.changeSourceBranchErrorTitle":`Error al cambiar la rama de origen`,"git.changeSourceBranchErrorOngoing":`Una operación {op} sigue en curso en el worktree. Cancélala para volver a un estado limpio.`,"git.changeSourceBranchErrorAbort":`Cancelar la operación`,"git.changeSourceBranchLoading":`Cambiando la rama de origen…`,"git.changeSourceForcePushTitle":`¿Forzar el push de la rama reescrita?`,"git.changeSourceForcePushMessage":`El historial de la rama se reescribió. ¿Hacer force-push al remoto con --force-with-lease?`,"git.changeSourceForcePushDone":`Rama enviada con force-push`,"git.openEditor":`Abrir en editor`,"git.openEditorFailed":`No se pudo abrir el editor`,"git.branchPushed":`Rama enviada`,"git.pushFirst":`La rama no está en el remoto. Haz Push primero.`,"git.unpushedCommits":`Los commits locales no están enviados. Haz Push primero.`,"git.from":`desde`,"git.aheadBehindTooltip":`{ahead} commits por delante, {behind} por detrás de {source}`,"git.divergence.title":`Divergencia de rama`,"git.divergence.subtitle":`vs {source}`,"git.divergence.ahead":`↑ {count} por delante`,"git.divergence.behind":`↓ {count} por detrás`,"git.divergence.empty.ahead":`Sin commits por delante.`,"git.divergence.empty.behind":`Sin commits por detrás.`,"git.divergence.close":`Cerrar`,"git.divergence.loading":`Cargando commits…`,"git.divergence.failed":`No se pudo cargar la divergencia`,"git.divergence.retry":`Reintentar`,"git.prCreated":`{request} #{n} creada`,"git.pr.author":`Autor`,"git.pr.reviewers":`Revisores`,"git.pr.assignees":`Asignados`,"git.pr.labels":`Etiquetas`,"git.pr.changesRequestedBadge":`Cambios solicitados`,"git.pr.approvedBadge":`Aprobada`,"git.pr.ci.passed":`CI OK`,"git.pr.ci.failed":`CI fallida`,"git.pr.ci.pending":`CI en curso`,"git.pr.ci.failedCount":`{n} fallido(s)`,"git.pr.ci.pendingCount":`{n} en curso`,"git.pr.ci.passedCount":`{n} OK`,"git.pr.ci.skippedCount":`{n} omitido(s)`,"git.pr.ci.showPassed":`Mostrar {n} jobs OK`,"git.pr.ci.hidePassed":`Ocultar los jobs OK`,"toast.prChangesRequested":`Se solicitaron cambios en la PR #{n}`,"toast.prApproved":`La PR #{n} ha sido aprobada`,"toast.prReadyToMerge":`La PR #{n} está lista para merge`,"toast.prCiFailed":`La CI de la PR #{n} ha fallado`,"toast.prCiRecovered":`La CI de la PR #{n} se ha recuperado`,"toast.prMergeConflict":`La PR #{n} tiene conflictos de merge`,"toast.prMerged":`La PR #{n} se ha fusionado`,"devServer.title":`Servidor de desarrollo`,"devServer.noWorkspace":`Ningún workspace seleccionado`,"devServer.notConfigured":`No configurado —`,"devServer.goToSettings":`Ajustes`,"devServer.logs":`Logs`,"devServer.running":`En ejecución`,"devServer.starting":`Iniciando`,"devServer.stopping":`Deteniendo`,"devServer.error":`Error`,"devServer.stopped":`Detenido`,"devServer.unknown":`Desconocido`,"devServer.containers":`{count} contenedor | {count} contenedores`,"devServer.logDialog.title":`Logs del servidor de desarrollo`,"devServer.logDialog.empty":`No hay logs disponibles`,"notion.title":`Notion`,"tasks.title":`Tareas`,"notion.addTask":`Añadir tarea`,"notion.noUrl":`Sin URL de Notion`,"notion.subtasks":`{done}/{total} subtareas`,"notion.noTasks":`Sin tareas`,"notion.newTask":`Nueva tarea... (Enter para añadir, Esc para cancelar)`,"acceptance.title":`Criterios de aceptación`,"acceptance.addCriterion":`Añadir criterio`,"acceptance.newCriterion":`Nuevo criterio... (Enter para añadir, Esc para cancelar)`,"acceptance.empty":`Sin criterios de aceptación`,"tasks.askProgress":`Pedir al agente que revise el progreso`,"agentTodos.title":`Tareas del agente`,"agentTodos.empty":`Sin tareas del agente`,"subagents.title":`Sub-agentes`,"subagents.empty":`Aún no hay actividad de sub-agentes`,"subagents.tools":`{count} herramientas`,"subagents.running":`En ejecución: `,"subagents.status.running":`En ejecución`,"subagents.status.done":`Completado`,"subagents.status.failed":`Fallido`,"subagents.status.stopped":`Detenido`,"subagents.ambient":`Vigilancia en segundo plano`,"subagents.ambientTooltip":`Vigilancia en segundo plano (p. ej. Monitor): no cuenta como actividad del agente`,"subagents.stop":`Detener este sub-agente`,"subagents.stopAll":`Detener todos`,"subagents.stopFailed":`No se pudo detener el sub-agente: {error}`,"subagents.activity":`Actividad del subagente`,"subagents.noActivity":`Aún no hay actividad visible del proveedor`,"chat.subagentActivity":`Actividad del subagente`,"chat.openSubagentActivity":`Abrir este subagente en el panel lateral`,"stats.resetsAt":`Reset {value}`,"stats.usageBucket":`Bucket de uso {n}`,"quotaFooter.lastUpdated":`Última actualización: {time}`,"quotaFooter.empty":`Cargando…`,"quotaFooter.popover.title":`Uso de Claude Code`,"quotaFooter.popover.refreshNow":`Actualizar`,"quotaFooter.popover.resetsIn":`Se reinicia a las {value}`,"quotaFooter.popover.unauthenticated":`Auth requerida`,"quotaFooter.popover.unauthenticatedHint":`Ejecuta "claude" una vez para autenticarte.`,"quotaFooter.popover.error":`Error`,"quotaFooter.bucket.fiveHour":`5 horas`,"quotaFooter.bucket.sevenDay":`7 días`,"agent.error.spawn_failed":`No se pudo iniciar el agente`,"agent.error.parse_error":`No se pudo analizar un mensaje del agente`,"agent.error.rate_limit":`Límite de tasa alcanzado`,"agent.error.resume_failed":`Sesión no encontrada — iniciando sesión nueva`,"agent.error.other":`Error del agente`,"quotaBackoff.banner.title":`Reanudación automática a las {time}`,"quotaBackoff.banner.transientTitle":`Reanudación automática tras interrupción a las {time}`,"quotaBackoff.resumeNow":`Reanudar ahora`,"quotaBackoff.banner.tooltip":`Cuota de Claude agotada. El auto-loop se reanudará automáticamente cuando la cuota se restablezca a las {resets_at}.`,"quotaBackoff.banner.cancel":`Cancelar reanudación`,"quotaBackoff.cancelled":`Reanudación automática cancelada — puedes reanudar manualmente cuando quieras`,"rateLimitType.fiveHour":`Sesión 5h`,"rateLimitType.sevenDay":`Semanal`,"tooltip.addTask":`Añadir tarea`,"tooltip.removeTask":`Eliminar tarea`,"tooltip.addCriterion":`Añadir criterio`,"tooltip.removeCriterion":`Eliminar criterio`,"tooltip.startDevServer":`Iniciar servidor de desarrollo`,"tooltip.stopDevServer":`Detener servidor de desarrollo`,"tooltip.closeDiffViewer":`Cerrar visor de diff`,"tooltip.refreshLogs":`Actualizar logs`,"tooltip.closeDialog":`Cerrar`,"tooltip.refreshGitStats":`Actualizar estadísticas Git`,"tooltip.removeImage":`Eliminar imagen`,"tooltip.sendMessage":`Enviar mensaje`,"tools.title":`Herramientas`,"tools.runSetupScript":`Volver a ejecutar script de setup`,"tools.runSetupScriptTooltip":`Ejecutar el script de setup del proyecto en el worktree`,"tools.runSetupScriptConfirm":`¿Volver a ejecutar el script de setup en este workspace? Los artefactos existentes pueden ser sobrescritos.`,"tools.runSetupScriptBusy":`No se puede volver a ejecutar el setup mientras el agente está trabajando.`,"tools.noSetupScript":`Ningún script de setup configurado —`,"tools.setupScriptSuccess":`Script de setup completado con éxito.`,"tools.setupScriptFailed":`Falló el script de setup.`,"tools.openNotion":`Abrir en Notion`,"tools.openSentry":`Abrir en Sentry`,"tools.review":`Revisar cambios`,"tools.reviewTooltip":`Pedir al agente que revise los cambios de esta rama`,"tools.reviewBusy":`Agente ocupado — espera a que esté libre`,"tools.fixCi":`Reparar CI`,"tools.fixCiTooltip":`Pedir al agente que diagnostique y arregle los jobs de CI que fallan`,"tools.fixCiLaunched":`Acción «Reparar CI» enviada al agente`,"tools.fixCiFailed":`No se pudo lanzar la acción «Reparar CI»`,"tools.openFileManager":`Abrir en el explorador de archivos`,"tools.openFileManagerTooltip":`Abrir la carpeta del worktree en tu explorador de archivos configurado`,"tools.openFileManagerFailed":`No se pudo abrir el explorador de archivos`,"tools.openTerminal":`Abrir en terminal`,"tools.openTerminalTooltip":`Abrir el worktree en tu terminal configurada`,"tools.openTerminalFailed":`No se pudo abrir la terminal`,"review.title":`Iniciar revisión`,"review.subtitle":`Pide al agente que revise tus cambios y dé feedback.`,"review.additionalInstructions":`Instrucciones adicionales (opcional)`,"review.additionalInstructionsPlaceholder":`Añade instrucciones específicas para la revisión…`,"review.newSession":`Nueva sesión`,"review.newSessionHint":`Inicia una sesión nueva en vez de continuar la actual.`,"review.newSessionRequired":`Cambiar los ajustes del agente o volver automáticamente requiere una nueva sesión.`,"review.returnToSession":`Volver a la sesión actual después de la revisión`,"review.returnToSessionHint":`Reanuda esta sesión con el resumen final del revisor. Si se desactiva, la conversación continúa en la sesión de revisión.`,"review.readOnlyForced":`Una review que vuelve a esta sesión se ejecuta en solo lectura (Plan): no puede modificar archivos ni hacer preguntas.`,"review.returnUnavailable":`La sesión actual debe haberse iniciado para poder reanudarla.`,"review.start":`Iniciar revisión`,"review.cancel":`Cancelar`,"review.launched":`Revisión iniciada`,"review.failed":`No se pudo iniciar la revisión`,"diff.title":`Diff`,"diff.side":`Lado a lado`,"diff.inline":`En línea`,"diff.hideUnchanged":`Ocultar código sin cambios`,"diff.showUnchanged":`Mostrar código sin cambios`,"diff.showUntracked":`Mostrar archivos no rastreados`,"diff.hideUntracked":`Ocultar archivos no rastreados`,"diff.rollbackToRemote":`Restaurar a la versión remota`,"diff.rollbackConfirm":`¿Restaurar {path} a su versión remota (origin)? Los cambios locales en este archivo se perderán.`,"diff.rollbackConfirmOk":`Restaurar`,"diff.rollbackDone":`Archivo restaurado a la versión remota`,"diff.rollbackDoneRemote":`Archivo restaurado a la versión remota`,"diff.rollbackDoneHead":`Cambios locales descartados (archivo restaurado al último commit)`,"diff.rollbackDoneDeleted":`Archivo no rastreado eliminado`,"diff.deleteUntracked":`Eliminar archivo no rastreado`,"diff.deleteUntrackedConfirm":`¿Eliminar definitivamente {path}? Este archivo no está rastreado por git — su contenido se perderá.`,"diff.deleteUntrackedConfirmOk":`Eliminar`,"diff.rollbackFailed":`Falló el rollback`,"diff.rollbackFailedDetail":`Rollback fallido: {error}`,"diff.modeInspect":`Editar`,"diff.modeReview":`Review`,"diff.addComment":`Añadir comentario`,"diff.replyComment":`Responder`,"diff.editComment":`Editar`,"diff.deleteComment":`Eliminar`,"diff.deleteCommentConfirm":`¿Eliminar este comentario?`,"diff.commentPlaceholder":`Escribe un comentario de revisión… (Markdown soportado)`,"diff.reviewDraft":`Borrador de revisión`,"diff.reviewEmpty":`Aún no hay comentarios — pasa el cursor sobre una línea del diff y haz clic en + para añadir uno.`,"diff.reviewGlobalPlaceholder":`Mensaje general de revisión (opcional)`,"diff.submitReview":`Enviar revisión ({n})`,"diff.reviewPending":`Ya se está enviando una revisión.`,"diff.reviewEmptySubmission":`La revisión está vacía.`,"diff.reviewNotAccepted":`El mensaje no fue aceptado. Tu revisión se ha conservado.`,"diff.reviewSubmitted":`Revisión enviada al agente`,"diff.reviewSubmitFailed":`No se pudo enviar la revisión: {error}`,"diff.scopeBranch":`Branch`,"diff.scopeUnpushed":`Sin pushear`,"diff.noChanges":`Sin cambios`,"diff.searchFiles":`Buscar archivos…`,"diff.noFileMatch":`Ningún archivo coincide`,"diff.selectFile":`Selecciona un archivo para ver el diff`,"diff.fileLoadFailed":`No se pudo cargar este diff`,"diff.fileLoadFailedHint":`El archivo en disco está intacto — solo falló la carga del diff.`,"diff.fileListLoadFailed":`No se pudo cargar la lista de archivos`,"diff.fileListLoadFailedHint":`Es un fallo de la petición, no una rama sin cambios.`,"diff.addToChat":`Añadir al chat`,"diff.compareTitle":`Comparar commits`,"diff.compareFrom":`Desde`,"diff.compareTo":`Hasta`,"diff.compareSubmit":`Comparar`,"diff.compareSourceBase":`{branch} (base de la rama)`,"diff.commitsReadOnly":`solo lectura`,"diffViewer.save":`Guardar`,"diffViewer.savedAt":`Guardado`,"diffViewer.saveFailed":`Error al guardar`,"diffViewer.saveFailedDetail":`Error al guardar: {error}`,"diffViewer.unsavedChanges.title":`Cambios sin guardar`,"diffViewer.unsavedChanges.message":`Tienes cambios sin guardar. ¿Qué quieres hacer?`,"diffViewer.unsavedChanges.save":`Guardar`,"diffViewer.unsavedChanges.cancel":`Cancelar`,"diffViewer.conflict.title":`Archivo modificado en disco`,"diffViewer.conflict.message":`El archivo fue modificado fuera de Kōbō desde que lo abriste.`,"diffViewer.conflict.reload":`Recargar (descartar cambios locales)`,"diffViewer.conflict.keep":`Mantener los míos`,"diffViewer.conflict.overwrite":`Sobrescribir de todos modos`,"diffViewer.conflict.overwriteHint":`Reemplaza el archivo del disco por tu versión. El otro cambio se pierde.`,"diffViewer.conflict.keepHint":`Mantiene tus cambios en el editor y adopta la nueva firma del disco, para que el próximo guardado funcione.`,"diffViewer.saveBlocked":`El agente está en marcha — detenlo para guardar tus cambios.`,"diffViewer.unsavedBanner":`Cambios sin guardar. Detén el agente para guardarlos.`,"diffViewer.closeConfirm.title":`Cambios sin guardar`,"diffViewer.closeConfirm.message":`Este archivo tiene cambios que nunca se guardaron. Cerrar el visor de diferencias los descarta.`,"diffViewer.closeConfirm.discard":`Cerrar sin guardar`,"diffViewer.criteriaRail":`Checklist de revisión`,"diffViewer.criteriaRailShow":`Mostrar la checklist de revisión`,"diffViewer.criteriaRailHide":`Ocultar la checklist de revisión`,"diffViewer.fileTreeShow":`Mostrar el árbol de archivos`,"diffViewer.fileTreeHide":`Ocultar el árbol de archivos`,"diffViewer.closeConfirm.saveAndClose":`Guardar y cerrar`,"diffViewer.agentRunning":`El agente está activo — detenlo para editar`,"diffViewer.fileDeleted":`Archivo eliminado`,"notification.agentFinished":`{name} — Agente terminado`,"notification.agentQuestion":`{name} — El agente hace una pregunta`,"notification.awaitingReminder":`{name} - sigue esperándote ({minutes} min)`,"notification.agentPermissionRequest":`{name} — El agente solicita un permiso`,"notification.autoLoopCompleted":`{name} — Auto-loop completado`,"notification.autoLoopWaitingForSlot":`{name} - El auto-loop espera un slot de agente libre ({running}/{limit} en curso)`,"notification.autoLoopStalled":`{name} — Auto-loop bloqueado (sin progreso)`,"notification.autoLoopError":`{name} — Auto-loop detenido por error`,"notification.autoLoopAwaitingClarification":`{name} — Auto-loop en pausa, esperando tu aclaración`,"notification.autoLoopPermissionOverridden":`{name} — Auto-loop forzó el modo plan a bypass`,"notification.agentError":`{name} — Error del agente`,"contextMenu.rename":`Renombrar`,"contextMenu.editDescription":`Editar la descripción`,"contextMenu.copyPath":`Copiar ruta del worktree`,"contextMenu.copyWorkspaceId":`Copiar ID del workspace`,"contextMenu.openEditor":`Abrir en editor`,"contextMenu.openFileManager":`Abrir en el explorador de archivos`,"contextMenu.unarchiveDisabledPurged":`Restaura primero el worktree con Restaurar worktree o recréalo manualmente. Kōbō detecta automáticamente los worktrees correspondientes.`,"workspaceList.unarchiveBlockedPurged":`Restaura primero el worktree con Restaurar worktree o recréalo manualmente. Kōbō detecta automáticamente los worktrees correspondientes.`,"contextMenu.purgeWorktree":`Liberar espacio en disco (borrar worktree)`,"contextMenu.purgeWorktreeTooltip":`Borra el worktree del disco para recuperar espacio — el historial de mensajes y sesiones se conserva. Archiva automáticamente el workspace.`,"contextMenu.purgeWorktreeDialogTitle":`¿Liberar espacio en disco?`,"contextMenu.purgeWorktreeDialogMessage":`La carpeta del worktree de «{name}» será eliminada del disco. El historial de mensajes y sesiones se conserva. El workspace se archivará automáticamente. Esta acción no se puede deshacer en la versión actual.`,"contextMenu.purgeWorktreeDialogConfirm":`Borrar el worktree`,"contextMenu.purgeWorktreeSuccess":`Worktree borrado — espacio en disco recuperado.`,"settings.autoPurgeOnPrMerged":`Borrar worktree al mergear la PR`,"settings.autoPurgeOnPrMergedHint":`Cuando está activado, el worktree se borra del disco en cuanto se mergea la PR (además del archivado automático). El historial de mensajes se conserva.`,"settings.showProgressBars":`Mostrar barras de progreso`,"settings.showProgressBarsHint":`Activado de forma predeterminada. Ocultar las barras no cierra las actividades ni detiene su seguimiento. Los cambios se aplican al guardar.`,"tours.settings.progressBars.title":`Barras de progreso`,"tours.settings.progressBars.description":`Muestra u oculta las barras sobre el campo de mensaje. El seguimiento continúa mientras están ocultas.`,"settings.agentWatchdogEnabled":`Activar los watchdogs de inactividad de los agentes`,"settings.agentWatchdogHint":`Desactivados por defecto. Si se activan, Kōbō puede detener Claude o Codex tras un silencio prolongado, incluidas herramientas, subagentes y compactación. Se aplica al iniciar o reanudar el agente.`,"tours.settings.agentWatchdog.title":`Watchdogs de inactividad`,"tours.settings.agentWatchdog.description":`Deja esta opción desactivada para permitir esperas largas sin actividad visible. Actívala para cerrar automáticamente sesiones bloqueadas. Se aplica al iniciar o reanudar el agente.`,"settings.autoLoopMaxRetries":`Máximo de reintentos automáticos`,"settings.awaitingUserReminder":`Recordatorio de pregunta sin responder`,"settings.awaitingUserReminderHint":`Minutos que un workspace puede esperar tu respuesta antes de que Kōbō te avise, y luego en cada intervalo siguiente. 0 lo desactiva.`,"settings.localeLoadFailed":`No se pudo cargar ese idioma; se mantiene el actual.`,"settings.autoLoopMaxRetriesHint":`Pausa la misión tras este número de fallos temporales del motor o del servidor. Las cuotas esperan su restablecimiento y no consumen este límite.`,"settings.retentionTitle":`Retención del historial de conversación (desactivada por defecto)`,"settings.retentionWarning":`Activar esta opción elimina definitivamente de la base de datos el historial de conversación de los agentes, empezando por todo lo que ya sea más antiguo que la ventana. Los eventos eliminados no se pueden recuperar.`,"settings.retentionHint":`Se ejecuta una vez al arrancar el servidor. Los workspaces, tareas, sesiones, branches y worktrees nunca se tocan — solo la salida registrada de los agentes.`,"settings.retentionDaysLabel":`Eliminar eventos más antiguos de (días)`,"settings.retentionDaysHint":`0 — el valor por defecto — conserva todos los eventos indefinidamente. Indica un valor para activar la retención.`,"settings.retentionKeepLabel":`Eventos siempre conservados por workspace`,"settings.retentionKeepHint":`Los eventos más recientes de cada workspace sobreviven sea cual sea su antigüedad, para que un workspace antiguo pero aún abierto conserve un historial legible. Sugerido: 5000.`,"settings.retentionDisabledHint":`Retención desactivada: nunca se eliminará nada.`,"settings.retentionConfirmTitle":`¿Eliminar definitivamente el historial de conversación?`,"settings.retentionConfirmMessage":`Conservar solo {days} día(s) de historial eliminará definitivamente, en el próximo arranque del servidor, {count} de los {total} eventos de agente registrados — incluido todo lo que ya sea más antiguo. Es irreversible. ¿Continuar?`,"settings.retentionConfirmMessageUnknown":`Conservar solo {days} día(s) de historial eliminará definitivamente, en el próximo arranque del servidor, todos los eventos de agente más antiguos — incluido todo lo ya acumulado. No se ha podido calcular el volumen exacto. Es irreversible. ¿Continuar?`,"settings.purgeDocsTitle":`Cómo funciona el borrado — restauración y permisos`,"settings.purgeDocsRestoreTitle":`Restaurar un worktree borrado (detección automática)`,"settings.purgeDocsRestoreIntro":`Un workspace borrado conserva su historial de chat y los metadatos de la PR, pero la carpeta worktree ya no existe. Recréala manualmente con uno de estos comandos — Kōbō detecta la reaparición de la carpeta en menos de 30 segundos y reactiva automáticamente el workspace (desarchivar + limpiar flag de borrado):`,"settings.purgeDocsRestoreCommands":`# GitHub (con CLI gh):
12
12
  gh pr checkout [número-pr] --recurse-submodules
13
13
 
14
14
  # O directamente con git (funciona en GitHub aunque la rama se haya borrado):
@@ -1 +1 @@
1
- import{M as e,S as t,lt as n,pt as r,v as i}from"./reactivity.esm-bundler-DY1JkAEA.js";import{C as a,J as o,L as s,O as c,R as l,T as u,X as d,_ as f,f as p,i as m,l as h,p as g,r as _,u as v,y,z as b}from"./runtime-core.esm-bundler-Bqg71Vll.js";import{$ as x,K as S,R as C,d as w,f as T,m as E,w as D,y as O,z as k}from"./dom-BtYTvLeN.js";import{c as A,l as j}from"./QBtn-BUSdPaf4.js";import{n as M,t as N}from"./use-dark-BHObfh0O.js";import{Qt as P,Tt as F,Ut as I}from"./index-CbyHfF8I.js";import{t as L}from"./use-slide-transition-B_Nu6u-t.js";import{a as ee}from"./use-tours-IVbXTmz2.js";import{a as te,i as ne,n as re,o as R,r as z,s as B}from"./efforts-y7Wf_Rgd.js";var V={"image/png":[`.png`],"image/jpeg":[`.jpg`,`.jpeg`],"image/gif":[`.gif`],"image/webp":[`.webp`]},H=[`.md`,`.markdown`,`.txt`,`.text`,`.pdf`,`.csv`,`.tsv`,`.json`,`.jsonl`,`.yaml`,`.yml`,`.xml`,`.log`,`.rst`,`.toml`],U=[...Object.keys(V),...Object.values(V).flat(),...H].join(`,`),W=52428800,G=52428800;function K(e){let t=/\.[^.\\/]+$/.exec(e.name??``)?.[0]?.toLowerCase()??``,n=V[e.type];return n?{kind:`image`,extension:n.includes(t)?t:n[0]}:H.includes(t)?{kind:`file`,extension:t}:(!e.type||e.type===`application/octet-stream`)&&Object.values(V).some(e=>e.includes(t))?{kind:`image`,extension:t}:null}function q(e){return e.length>10?`count`:e.some(e=>!K(e))?`type`:e.some(e=>e.size===0||e.size>52428800)?`size`:e.reduce((e,t)=>e+t.size,0)>52428800?`total`:null}function J(e){e.keyCode===32&&C(e)}var Y=k({name:`StepHeader`,props:{stepper:{},step:{},goToPanel:Function},setup(e,{attrs:n}){let r=w(),i=t(null),o=h(()=>e.stepper.modelValue===e.step.name),s=h(()=>{let t=e.step.disable;return t===!0||t===``}),c=h(()=>{let t=e.step.error;return t===!0||t===``}),l=h(()=>{let t=e.step.done;return!s.value&&(t===!0||t===``)}),u=h(()=>{let t=e.step.headerNav;return e.stepper.headerNav===!0&&(t===!0||t===``||t===void 0)}),f=h(()=>!s.value&&u.value),p=h(()=>{if(o.value)return e.step.activeIcon||e.stepper.activeIcon||r.iconSet.stepper.active;if(c.value)return e.step.errorIcon||e.stepper.errorIcon||r.iconSet.stepper.error;if(l.value)return e.step.doneIcon||e.stepper.doneIcon||r.iconSet.stepper.done}),m=h(()=>!!e.step.prefix&&(p.value===void 0||p.value===`none`)),g=h(()=>p.value!==void 0&&p.value!==`none`?p.value:e.step.icon||e.stepper.inactiveIcon),_=h(()=>{let t=c.value?e.step.errorColor||e.stepper.errorColor:void 0;if(o.value){let n=e.step.activeColor||e.stepper.activeColor||e.step.color;return n===void 0?t:n}return t===void 0?!s.value&&l.value?e.step.doneColor||e.stepper.doneColor||e.step.color||e.stepper.inactiveColor:e.step.color||e.stepper.inactiveColor:t}),v=h(()=>`q-stepper__tab col-grow flex items-center no-wrap relative-position q-stepper__tab--${e.stepper.vertical?`vertical`:`horizontal`}`+(_.value===void 0?``:` text-${_.value}`)+(c.value?` q-stepper__tab--error q-stepper__tab--error-with-`+(m.value?`prefix`:`icon`):``)+(o.value?` q-stepper__tab--active`:``)+(l.value?` q-stepper__tab--done`:``)+(f.value?` q-stepper__tab--navigation q-focusable q-hoverable`:``)+(s.value?` q-stepper__tab--disabled`:``)),y=h(()=>e.stepper.headerNav&&f.value);function b(){i.value?.focus({preventScroll:!0}),o.value||e.goToPanel(e.step.name)}function x(t){[13,32].includes(t.keyCode)&&(o.value||e.goToPanel(e.step.name),C(t))}return()=>{let t={class:v.value,"aria-current":o.value?`step`:void 0};u.value&&(t.role=`button`,s.value?(t.tabindex=-1,t[`aria-disabled`]=`true`):(t.onClick=b,t.onKeydown=J,t.onKeyup=x,t.tabindex=n.tabindex||0));let r=[a(`div`,{class:`q-focus-helper`,tabindex:-1,ref:i}),a(`div`,{class:`q-stepper__dot row flex-center q-stepper__line relative-position`},[a(`span`,{class:`row flex-center`},[m.value?e.step.prefix:a(j,{name:g.value})])])];if(e.step.title!==void 0&&e.step.title!==null){let t=[a(`div`,{class:`q-stepper__title`},e.step.title)];e.step.caption!==void 0&&e.step.caption!==null&&t.push(a(`div`,{class:`q-stepper__caption`},e.step.caption)),r.push(a(`div`,{class:`q-stepper__label q-stepper__line relative-position`},t))}return d(a(`div`,t,r),[[A,y.value]])}}});function X(e,t,n){return a(`div`,{class:`q-stepper__step-content`+(t?``:` q-panel scroll`),style:n},[a(`div`,{class:`q-stepper__step-inner q-stepper__step-inner--${t?`vertical`:`horizontal`}`},E(e.default))])}var Z={props:{vertical:Boolean},setup(e,{slots:t}){return()=>X(t,e.vertical)}},ie=k({name:`QStep`,props:{...z,icon:String,color:String,title:{type:String,required:!0},caption:String,prefix:[String,Number],doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String,headerNav:{type:Boolean,default:!0},done:Boolean,error:Boolean,onScroll:[Function,Array]},setup(e,{slots:n,emit:r}){let i=w(),s=u(D,O);if(s===O)return console.error(`QStep needs to be a child of QStepper`),O;let{getCache:l}=R(),{onEnter:d,onLeave:f}=L(()=>Number(s.value.transitionDuration)),p=t(null),g=h(()=>s.value.modelValue===e.name),_=h(()=>!i.platform.is.ios&&i.platform.is.chrome||!g.value||!s.value.vertical?{}:{onScroll(t){let{target:n}=t;n.scrollTop>0&&(n.scrollTop=0),e.onScroll!==void 0&&r(`scroll`,t)}}),v=h(()=>typeof e.name==`string`||typeof e.name==`number`?e.name:String(e.name)),y=h(()=>{if(s.value.vertical)return{css:!1,onEnter:d,onLeave:f};let e=s.value.panelTransition.value;return e===null?{}:{name:e,leaveActiveClass:`${e}-leave-active q-stepper__step-content--leaving`}}),b=t(!1);o(g,e=>{if(e||s.value.vertical||!s.value.animated){b.value=!1;return}b.value=!0,c(()=>{b.value=!1})});function x(){if(!g.value&&!b.value)return;let{vertical:e}=s.value,t=e?void 0:`--q-transition-duration: ${s.value.transitionDuration}ms`;return s.value.keepAlive?a(s.value.needsUniqueKeepAliveWrapper.value?l(v.value,()=>({...Z,name:String(v.value)})):Z,{key:v.value,vertical:e,style:t},n.default):X(n,e,t)}function C(){let e=x();return s.value.keepAlive?a(m,s.value.keepAliveProps.value,e===void 0?void 0:[e]):e}let T=h(()=>`q-stepper__step q-stepper__step--${s.value.vertical?`vertical`:`horizontal`}`);return()=>{let{vertical:t,animated:n}=s.value,r=t||g.value,i=[n?a(S,{key:`content`,...y.value},C):C()];return t&&i.unshift(a(Y,{key:`header`,stepper:s.value,step:e,goToPanel:s.value.goToPanel})),a(`div`,{ref:p,class:T.value,role:r?`group`:void 0,"aria-label":r?e.title:void 0,..._.value},i)}}}),ae=/(-\w)/g;function Q(e,t){return Array.isArray(e)?e.some(e=>Q(e,t)):typeof e==`string`?e.split(`,`).includes(t):e instanceof RegExp&&(e.lastIndex=0,e.test(t))}function oe(e){let t={};for(let n in e){let r=n.replace(ae,e=>e[1].toUpperCase());t[r]=e[n]}return t}var se=k({name:`QStepper`,props:{...M,...te,flat:Boolean,bordered:Boolean,alternativeLabels:Boolean,headerNav:Boolean,contracted:Boolean,headerClass:String,inactiveColor:String,inactiveIcon:String,doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String},emits:ne,setup(e,{slots:n}){let r=w(),i=N(e,r),{updatePanelsList:s,isValidPanelName:c,updatePanelIndex:u,getPanels:f,panelTransition:p,panelDirectives:m,goToPanel:g,keepAliveProps:_,needsUniqueKeepAliveWrapper:v}=re(),y=t([]);o(()=>e.modelValue,t=>{if(e.keepAliveMax===void 0||!c(t))return;let n=String(t),r=y.value.filter(e=>e!==n);r.push(n),r.length>e.keepAliveMax&&r.splice(0,r.length-e.keepAliveMax),y.value=r},{immediate:!0});let b=h(()=>e.keepAliveMax===void 0?_.value:{include:e.keepAliveInclude===void 0?y.value:y.value.filter(t=>Q(e.keepAliveInclude,t)),exclude:e.keepAliveExclude}),x=h(()=>e.keepAliveMax!==void 0||v.value);l(D,h(()=>({goToPanel:g,keepAliveProps:b,needsUniqueKeepAliveWrapper:x,panelTransition:p,...e})));let S=h(()=>`q-stepper q-stepper--${e.vertical?`vertical`:`horizontal`}`+(e.flat?` q-stepper--flat`:``)+(e.bordered?` q-stepper--bordered`:``)+(i()?` q-stepper--dark q-dark`:``)),C=h(()=>`q-stepper__header row items-stretch justify-between q-stepper__header--${e.alternativeLabels?`alternative`:`standard`}-labels`+(e.bordered||!e.flat?` q-stepper__header--border`:``)+(e.contracted?` q-stepper__header--contracted`:``)+(e.headerClass===void 0?``:` ${e.headerClass}`)),O=h(()=>`q-stepper__content`+(e.vertical?``:` q-panel-parent`)),k=h(()=>{if(!e.vertical)return m.value;let[t,,n,r]=m.value[0];return[[t,void 0,n,r]]});function A(){let t=E(n.message,[]);c(e.modelValue)&&u();let r=d(a(`div`,{key:`content`,class:O.value},E(n.default)),k.value);return e.vertical?t===void 0?[r]:t.concat(r):[a(`div`,{key:`header`,class:C.value},f().map(t=>{let n=oe(t.props);return a(Y,{key:n.name,stepper:e,step:n,goToPanel:g})})),t,r]}return()=>(s(n),a(`div`,{class:S.value},T(n.navigation,A())))}}),ce={class:`slash-suggestions rounded-borders`},le={class:`slash-section-header`},ue=[`onMousedown`],de={class:`slash-name text-caption`},fe={class:`slash-section-header`},pe=[`onMousedown`],$={class:`slash-name text-caption`},me={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},he={class:`slash-section-header`},ge=[`onMousedown`],_e={class:`slash-name text-caption`},ve={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},ye=ee(y({__name:`SlashSuggestionsPopup`,props:{groupedDropdown:{},flatDropdown:{},selectedIndex:{}},emits:[`select`],setup(t,{emit:i}){let{t:a}=P(),o=i;function c(e){let t=B[`/${e}`];if(!t)return``;let n=t.descriptionKey,r=a(n);return r===n?``:r}return(i,l)=>(s(),g(`div`,ce,[t.groupedDropdown.skills.length>0?(s(),g(_,{key:0},[v(`div`,le,r(e(a)(`chatInput.dropdownSkills`)),1),(s(!0),g(_,null,b(t.groupedDropdown.skills,e=>(s(),g(`div`,{key:`skill-${e.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:x(t=>o(`select`,e),[`prevent`])},[f(j,{name:`bolt`,size:`12px`,color:`primary`,class:`q-mr-xs`}),v(`span`,de,r(e.name),1)],42,ue))),128))],64)):p(``,!0),t.groupedDropdown.kobo.length>0?(s(),g(_,{key:1},[v(`div`,fe,r(e(a)(`chatInput.dropdownKobo`)),1),(s(!0),g(_,null,b(t.groupedDropdown.kobo,e=>(s(),g(`div`,{key:`kobo-${e.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:x(t=>o(`select`,e),[`prevent`])},[f(j,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),v(`span`,$,`/`+r(e.name),1),c(e.name)?(s(),g(`span`,me,`— `+r(c(e.name)),1)):p(``,!0)],42,pe))),128))],64)):p(``,!0),t.groupedDropdown.templates.length>0?(s(),g(_,{key:2},[v(`div`,he,r(e(a)(`chatInput.dropdownTemplates`)),1),(s(!0),g(_,null,b(t.groupedDropdown.templates,e=>(s(),g(`div`,{key:`tpl-${e.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:x(t=>o(`select`,e),[`prevent`])},[f(j,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),v(`span`,_e,`/`+r(e.name),1),e.description?(s(),g(`span`,ve,`— `+r(e.description),1)):p(``,!0)],42,ge))),128))],64)):p(``,!0)]))}}),[[`__scopeId`,`data-v-931c9d69`]]);function be(e,t,n={}){let r=F(),a=i([]),s=i(!1),c=i(``),l=i(0),u=0;async function d(){let e=Date.now();if(!(e-u<5e3&&a.value.length>0)){u=e;try{let e=await I(`/api/skills`);e.ok&&(a.value=await e.json())}catch{}}}function f(){let n=t();if(!n)return null;let r=n.selectionStart??e.value.length,i=e.value.slice(0,r).match(/\/([\w:.-]*)$/);return i?i[1]:null}async function p(){let e=f();e===null?s.value=!1:(await d(),c.value=e,s.value=!0,l.value=0)}function m(){s.value=!1}function g(n){let r=t();if(!r){e.value=n;return}let i=r.selectionStart??e.value.length,a=e.value.slice(0,i),o=e.value.slice(i),s=a.match(/\/[\w:.-]*$/);if(!s){e.value=n;return}let c=s.index??i;e.value=e.value.slice(0,c)+n+o}let _=h(()=>{let e=c.value.toLowerCase(),t=t=>e===``||t.toLowerCase().includes(e);return{skills:a.value.filter(e=>t(e)).map(e=>({type:`skill`,name:e})),kobo:n.excludeKoboCommands?[]:Object.keys(B).map(e=>e.replace(/^\//,``)).filter(e=>t(e)).map(e=>({type:`kobo`,name:e})),templates:r.templates.filter(e=>t(e.slug)).map(e=>({type:`template`,name:e.slug,description:e.description}))}}),v=h(()=>[..._.value.skills,..._.value.kobo,..._.value.templates]);return o(()=>v.value.length,e=>{if(e===0){l.value=0;return}l.value>=e&&(l.value=e-1)}),{skills:a,showSkills:s,skillFilter:c,selectedSkillIndex:l,groupedDropdown:_,flatDropdown:v,fetchSkills:d,detectSlashFragment:p,replaceFragmentWith:g,closeDropdown:m}}function xe(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)})}function Se(e){let t={};return e.workspace&&(t.workspace_name=e.workspace.name,t.working_branch=e.workspace.workingBranch,t.source_branch=e.workspace.sourceBranch,t.project_path=e.workspace.projectPath,t.worktree_path=e.workspace.worktreePath??`${e.workspace.projectPath}/.worktrees/${e.workspace.workingBranch}`),e.gitStats&&(t.commit_count=e.gitStats.commitCount,t.unpushed_count=e.gitStats.unpushedCount,t.files_changed=e.gitStats.filesChanged,t.insertions=e.gitStats.insertions,t.deletions=e.gitStats.deletions,e.gitStats.prNumber!=null&&(t.pr_number=e.gitStats.prNumber),e.gitStats.prUrl&&(t.pr_url=e.gitStats.prUrl),e.gitStats.prState&&(t.pr_state=e.gitStats.prState)),e.sessionName&&(t.session_name=e.sessionName),t}export{se as a,G as c,q as d,ye as i,W as l,xe as n,ie as o,be as r,U as s,Se as t,K as u};
1
+ import{M as e,S as t,lt as n,pt as r,v as i}from"./reactivity.esm-bundler-DY1JkAEA.js";import{C as a,J as o,L as s,O as c,R as l,T as u,X as d,_ as f,f as p,i as m,l as h,p as g,r as _,u as v,y,z as b}from"./runtime-core.esm-bundler-Bqg71Vll.js";import{$ as x,K as S,R as C,d as w,f as T,m as E,w as D,y as O,z as k}from"./dom-BtYTvLeN.js";import{c as A,l as j}from"./QBtn-BUSdPaf4.js";import{n as M,t as N}from"./use-dark-BHObfh0O.js";import{Qt as P,Tt as F,Ut as I}from"./index-BZKHE14f.js";import{t as L}from"./use-slide-transition-B_Nu6u-t.js";import{a as ee}from"./use-tours-CsPhvrxf.js";import{a as te,i as ne,n as re,o as R,r as z,s as B}from"./efforts-JkWc_mU5.js";var V={"image/png":[`.png`],"image/jpeg":[`.jpg`,`.jpeg`],"image/gif":[`.gif`],"image/webp":[`.webp`]},H=[`.md`,`.markdown`,`.txt`,`.text`,`.pdf`,`.csv`,`.tsv`,`.json`,`.jsonl`,`.yaml`,`.yml`,`.xml`,`.log`,`.rst`,`.toml`],U=[...Object.keys(V),...Object.values(V).flat(),...H].join(`,`),W=52428800,G=52428800;function K(e){let t=/\.[^.\\/]+$/.exec(e.name??``)?.[0]?.toLowerCase()??``,n=V[e.type];return n?{kind:`image`,extension:n.includes(t)?t:n[0]}:H.includes(t)?{kind:`file`,extension:t}:(!e.type||e.type===`application/octet-stream`)&&Object.values(V).some(e=>e.includes(t))?{kind:`image`,extension:t}:null}function q(e){return e.length>10?`count`:e.some(e=>!K(e))?`type`:e.some(e=>e.size===0||e.size>52428800)?`size`:e.reduce((e,t)=>e+t.size,0)>52428800?`total`:null}function J(e){e.keyCode===32&&C(e)}var Y=k({name:`StepHeader`,props:{stepper:{},step:{},goToPanel:Function},setup(e,{attrs:n}){let r=w(),i=t(null),o=h(()=>e.stepper.modelValue===e.step.name),s=h(()=>{let t=e.step.disable;return t===!0||t===``}),c=h(()=>{let t=e.step.error;return t===!0||t===``}),l=h(()=>{let t=e.step.done;return!s.value&&(t===!0||t===``)}),u=h(()=>{let t=e.step.headerNav;return e.stepper.headerNav===!0&&(t===!0||t===``||t===void 0)}),f=h(()=>!s.value&&u.value),p=h(()=>{if(o.value)return e.step.activeIcon||e.stepper.activeIcon||r.iconSet.stepper.active;if(c.value)return e.step.errorIcon||e.stepper.errorIcon||r.iconSet.stepper.error;if(l.value)return e.step.doneIcon||e.stepper.doneIcon||r.iconSet.stepper.done}),m=h(()=>!!e.step.prefix&&(p.value===void 0||p.value===`none`)),g=h(()=>p.value!==void 0&&p.value!==`none`?p.value:e.step.icon||e.stepper.inactiveIcon),_=h(()=>{let t=c.value?e.step.errorColor||e.stepper.errorColor:void 0;if(o.value){let n=e.step.activeColor||e.stepper.activeColor||e.step.color;return n===void 0?t:n}return t===void 0?!s.value&&l.value?e.step.doneColor||e.stepper.doneColor||e.step.color||e.stepper.inactiveColor:e.step.color||e.stepper.inactiveColor:t}),v=h(()=>`q-stepper__tab col-grow flex items-center no-wrap relative-position q-stepper__tab--${e.stepper.vertical?`vertical`:`horizontal`}`+(_.value===void 0?``:` text-${_.value}`)+(c.value?` q-stepper__tab--error q-stepper__tab--error-with-`+(m.value?`prefix`:`icon`):``)+(o.value?` q-stepper__tab--active`:``)+(l.value?` q-stepper__tab--done`:``)+(f.value?` q-stepper__tab--navigation q-focusable q-hoverable`:``)+(s.value?` q-stepper__tab--disabled`:``)),y=h(()=>e.stepper.headerNav&&f.value);function b(){i.value?.focus({preventScroll:!0}),o.value||e.goToPanel(e.step.name)}function x(t){[13,32].includes(t.keyCode)&&(o.value||e.goToPanel(e.step.name),C(t))}return()=>{let t={class:v.value,"aria-current":o.value?`step`:void 0};u.value&&(t.role=`button`,s.value?(t.tabindex=-1,t[`aria-disabled`]=`true`):(t.onClick=b,t.onKeydown=J,t.onKeyup=x,t.tabindex=n.tabindex||0));let r=[a(`div`,{class:`q-focus-helper`,tabindex:-1,ref:i}),a(`div`,{class:`q-stepper__dot row flex-center q-stepper__line relative-position`},[a(`span`,{class:`row flex-center`},[m.value?e.step.prefix:a(j,{name:g.value})])])];if(e.step.title!==void 0&&e.step.title!==null){let t=[a(`div`,{class:`q-stepper__title`},e.step.title)];e.step.caption!==void 0&&e.step.caption!==null&&t.push(a(`div`,{class:`q-stepper__caption`},e.step.caption)),r.push(a(`div`,{class:`q-stepper__label q-stepper__line relative-position`},t))}return d(a(`div`,t,r),[[A,y.value]])}}});function X(e,t,n){return a(`div`,{class:`q-stepper__step-content`+(t?``:` q-panel scroll`),style:n},[a(`div`,{class:`q-stepper__step-inner q-stepper__step-inner--${t?`vertical`:`horizontal`}`},E(e.default))])}var Z={props:{vertical:Boolean},setup(e,{slots:t}){return()=>X(t,e.vertical)}},ie=k({name:`QStep`,props:{...z,icon:String,color:String,title:{type:String,required:!0},caption:String,prefix:[String,Number],doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String,headerNav:{type:Boolean,default:!0},done:Boolean,error:Boolean,onScroll:[Function,Array]},setup(e,{slots:n,emit:r}){let i=w(),s=u(D,O);if(s===O)return console.error(`QStep needs to be a child of QStepper`),O;let{getCache:l}=R(),{onEnter:d,onLeave:f}=L(()=>Number(s.value.transitionDuration)),p=t(null),g=h(()=>s.value.modelValue===e.name),_=h(()=>!i.platform.is.ios&&i.platform.is.chrome||!g.value||!s.value.vertical?{}:{onScroll(t){let{target:n}=t;n.scrollTop>0&&(n.scrollTop=0),e.onScroll!==void 0&&r(`scroll`,t)}}),v=h(()=>typeof e.name==`string`||typeof e.name==`number`?e.name:String(e.name)),y=h(()=>{if(s.value.vertical)return{css:!1,onEnter:d,onLeave:f};let e=s.value.panelTransition.value;return e===null?{}:{name:e,leaveActiveClass:`${e}-leave-active q-stepper__step-content--leaving`}}),b=t(!1);o(g,e=>{if(e||s.value.vertical||!s.value.animated){b.value=!1;return}b.value=!0,c(()=>{b.value=!1})});function x(){if(!g.value&&!b.value)return;let{vertical:e}=s.value,t=e?void 0:`--q-transition-duration: ${s.value.transitionDuration}ms`;return s.value.keepAlive?a(s.value.needsUniqueKeepAliveWrapper.value?l(v.value,()=>({...Z,name:String(v.value)})):Z,{key:v.value,vertical:e,style:t},n.default):X(n,e,t)}function C(){let e=x();return s.value.keepAlive?a(m,s.value.keepAliveProps.value,e===void 0?void 0:[e]):e}let T=h(()=>`q-stepper__step q-stepper__step--${s.value.vertical?`vertical`:`horizontal`}`);return()=>{let{vertical:t,animated:n}=s.value,r=t||g.value,i=[n?a(S,{key:`content`,...y.value},C):C()];return t&&i.unshift(a(Y,{key:`header`,stepper:s.value,step:e,goToPanel:s.value.goToPanel})),a(`div`,{ref:p,class:T.value,role:r?`group`:void 0,"aria-label":r?e.title:void 0,..._.value},i)}}}),ae=/(-\w)/g;function Q(e,t){return Array.isArray(e)?e.some(e=>Q(e,t)):typeof e==`string`?e.split(`,`).includes(t):e instanceof RegExp&&(e.lastIndex=0,e.test(t))}function oe(e){let t={};for(let n in e){let r=n.replace(ae,e=>e[1].toUpperCase());t[r]=e[n]}return t}var se=k({name:`QStepper`,props:{...M,...te,flat:Boolean,bordered:Boolean,alternativeLabels:Boolean,headerNav:Boolean,contracted:Boolean,headerClass:String,inactiveColor:String,inactiveIcon:String,doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String},emits:ne,setup(e,{slots:n}){let r=w(),i=N(e,r),{updatePanelsList:s,isValidPanelName:c,updatePanelIndex:u,getPanels:f,panelTransition:p,panelDirectives:m,goToPanel:g,keepAliveProps:_,needsUniqueKeepAliveWrapper:v}=re(),y=t([]);o(()=>e.modelValue,t=>{if(e.keepAliveMax===void 0||!c(t))return;let n=String(t),r=y.value.filter(e=>e!==n);r.push(n),r.length>e.keepAliveMax&&r.splice(0,r.length-e.keepAliveMax),y.value=r},{immediate:!0});let b=h(()=>e.keepAliveMax===void 0?_.value:{include:e.keepAliveInclude===void 0?y.value:y.value.filter(t=>Q(e.keepAliveInclude,t)),exclude:e.keepAliveExclude}),x=h(()=>e.keepAliveMax!==void 0||v.value);l(D,h(()=>({goToPanel:g,keepAliveProps:b,needsUniqueKeepAliveWrapper:x,panelTransition:p,...e})));let S=h(()=>`q-stepper q-stepper--${e.vertical?`vertical`:`horizontal`}`+(e.flat?` q-stepper--flat`:``)+(e.bordered?` q-stepper--bordered`:``)+(i()?` q-stepper--dark q-dark`:``)),C=h(()=>`q-stepper__header row items-stretch justify-between q-stepper__header--${e.alternativeLabels?`alternative`:`standard`}-labels`+(e.bordered||!e.flat?` q-stepper__header--border`:``)+(e.contracted?` q-stepper__header--contracted`:``)+(e.headerClass===void 0?``:` ${e.headerClass}`)),O=h(()=>`q-stepper__content`+(e.vertical?``:` q-panel-parent`)),k=h(()=>{if(!e.vertical)return m.value;let[t,,n,r]=m.value[0];return[[t,void 0,n,r]]});function A(){let t=E(n.message,[]);c(e.modelValue)&&u();let r=d(a(`div`,{key:`content`,class:O.value},E(n.default)),k.value);return e.vertical?t===void 0?[r]:t.concat(r):[a(`div`,{key:`header`,class:C.value},f().map(t=>{let n=oe(t.props);return a(Y,{key:n.name,stepper:e,step:n,goToPanel:g})})),t,r]}return()=>(s(n),a(`div`,{class:S.value},T(n.navigation,A())))}}),ce={class:`slash-suggestions rounded-borders`},le={class:`slash-section-header`},ue=[`onMousedown`],de={class:`slash-name text-caption`},fe={class:`slash-section-header`},pe=[`onMousedown`],$={class:`slash-name text-caption`},me={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},he={class:`slash-section-header`},ge=[`onMousedown`],_e={class:`slash-name text-caption`},ve={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},ye=ee(y({__name:`SlashSuggestionsPopup`,props:{groupedDropdown:{},flatDropdown:{},selectedIndex:{}},emits:[`select`],setup(t,{emit:i}){let{t:a}=P(),o=i;function c(e){let t=B[`/${e}`];if(!t)return``;let n=t.descriptionKey,r=a(n);return r===n?``:r}return(i,l)=>(s(),g(`div`,ce,[t.groupedDropdown.skills.length>0?(s(),g(_,{key:0},[v(`div`,le,r(e(a)(`chatInput.dropdownSkills`)),1),(s(!0),g(_,null,b(t.groupedDropdown.skills,e=>(s(),g(`div`,{key:`skill-${e.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:x(t=>o(`select`,e),[`prevent`])},[f(j,{name:`bolt`,size:`12px`,color:`primary`,class:`q-mr-xs`}),v(`span`,de,r(e.name),1)],42,ue))),128))],64)):p(``,!0),t.groupedDropdown.kobo.length>0?(s(),g(_,{key:1},[v(`div`,fe,r(e(a)(`chatInput.dropdownKobo`)),1),(s(!0),g(_,null,b(t.groupedDropdown.kobo,e=>(s(),g(`div`,{key:`kobo-${e.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:x(t=>o(`select`,e),[`prevent`])},[f(j,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),v(`span`,$,`/`+r(e.name),1),c(e.name)?(s(),g(`span`,me,`— `+r(c(e.name)),1)):p(``,!0)],42,pe))),128))],64)):p(``,!0),t.groupedDropdown.templates.length>0?(s(),g(_,{key:2},[v(`div`,he,r(e(a)(`chatInput.dropdownTemplates`)),1),(s(!0),g(_,null,b(t.groupedDropdown.templates,e=>(s(),g(`div`,{key:`tpl-${e.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:x(t=>o(`select`,e),[`prevent`])},[f(j,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),v(`span`,_e,`/`+r(e.name),1),e.description?(s(),g(`span`,ve,`— `+r(e.description),1)):p(``,!0)],42,ge))),128))],64)):p(``,!0)]))}}),[[`__scopeId`,`data-v-931c9d69`]]);function be(e,t,n={}){let r=F(),a=i([]),s=i(!1),c=i(``),l=i(0),u=0;async function d(){let e=Date.now();if(!(e-u<5e3&&a.value.length>0)){u=e;try{let e=await I(`/api/skills`);e.ok&&(a.value=await e.json())}catch{}}}function f(){let n=t();if(!n)return null;let r=n.selectionStart??e.value.length,i=e.value.slice(0,r).match(/\/([\w:.-]*)$/);return i?i[1]:null}async function p(){let e=f();e===null?s.value=!1:(await d(),c.value=e,s.value=!0,l.value=0)}function m(){s.value=!1}function g(n){let r=t();if(!r){e.value=n;return}let i=r.selectionStart??e.value.length,a=e.value.slice(0,i),o=e.value.slice(i),s=a.match(/\/[\w:.-]*$/);if(!s){e.value=n;return}let c=s.index??i;e.value=e.value.slice(0,c)+n+o}let _=h(()=>{let e=c.value.toLowerCase(),t=t=>e===``||t.toLowerCase().includes(e);return{skills:a.value.filter(e=>t(e)).map(e=>({type:`skill`,name:e})),kobo:n.excludeKoboCommands?[]:Object.keys(B).map(e=>e.replace(/^\//,``)).filter(e=>t(e)).map(e=>({type:`kobo`,name:e})),templates:r.templates.filter(e=>t(e.slug)).map(e=>({type:`template`,name:e.slug,description:e.description}))}}),v=h(()=>[..._.value.skills,..._.value.kobo,..._.value.templates]);return o(()=>v.value.length,e=>{if(e===0){l.value=0;return}l.value>=e&&(l.value=e-1)}),{skills:a,showSkills:s,skillFilter:c,selectedSkillIndex:l,groupedDropdown:_,flatDropdown:v,fetchSkills:d,detectSlashFragment:p,replaceFragmentWith:g,closeDropdown:m}}function xe(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)})}function Se(e){let t={};return e.workspace&&(t.workspace_name=e.workspace.name,t.working_branch=e.workspace.workingBranch,t.source_branch=e.workspace.sourceBranch,t.project_path=e.workspace.projectPath,t.worktree_path=e.workspace.worktreePath??`${e.workspace.projectPath}/.worktrees/${e.workspace.workingBranch}`),e.gitStats&&(t.commit_count=e.gitStats.commitCount,t.unpushed_count=e.gitStats.unpushedCount,t.files_changed=e.gitStats.filesChanged,t.insertions=e.gitStats.insertions,t.deletions=e.gitStats.deletions,e.gitStats.prNumber!=null&&(t.pr_number=e.gitStats.prNumber),e.gitStats.prUrl&&(t.pr_url=e.gitStats.prUrl),e.gitStats.prState&&(t.pr_state=e.gitStats.prState)),e.sessionName&&(t.session_name=e.sessionName),t}export{se as a,G as c,q as d,ye as i,W as l,xe as n,ie as o,be as r,U as s,Se as t,K as u};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./defineProperty-BbfpZ9Tg.js";import{Zt as t}from"./index-CbyHfF8I.js";var n;function r(e){if(e.length===0)throw Error(`Invalid tail call`);return[e.slice(0,e.length-1),e[e.length-1]]}function i(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t||e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!n(e[r],t[r]))return!1;return!0}function a(e,t){let n=e.length-1;t<n&&(e[t]=e[n]),e.pop()}function o(e,t,n){return s(e.length,r=>n(e[r],t))}function s(e,t){let n=0,r=e-1;for(;n<=r;){let e=(n+r)/2|0,i=t(e);if(i<0)n=e+1;else if(i>0)r=e-1;else return e}return-(n+1)}function c(e,t,n){if(e|=0,e>=t.length)throw TypeError(`invalid index`);let r=t[Math.floor(t.length*Math.random())],i=[],a=[],o=[];for(let e of t){let t=n(e,r);t<0?i.push(e):t>0?a.push(e):o.push(e)}return e<i.length?c(e,i,n):e<i.length+o.length?o[0]:c(e-(i.length+o.length),a,n)}function l(e,t){let n=[],r;for(let i of e.slice(0).sort(t))!r||t(r[0],i)!==0?(r=[i],n.push(r)):r.push(i);return n}function*u(e,t){let n,r;for(let i of e)r!==void 0&&t(r,i)?n.push(i):(n&&(yield n),n=[i]),r=i;n&&(yield n)}function d(e,t){for(let n=0;n<=e.length;n++)t(n===0?void 0:e[n-1],n===e.length?void 0:e[n])}function f(e,t){for(let n=0;n<e.length;n++)t(n===0?void 0:e[n-1],e[n],n+1===e.length?void 0:e[n+1])}function p(e){return e.filter(e=>!!e)}function m(e){let t=0;for(let n=0;n<e.length;n++)e[n]&&(e[t]=e[n],t+=1);e.length=t}function h(e){return!Array.isArray(e)||e.length===0}function g(e){return Array.isArray(e)&&e.length>0}function _(e,t=e=>e){let n=new Set;return e.filter(e=>{let r=t(e);return!n.has(r)&&(n.add(r),!0)})}function v(e,t){let n=typeof t==`number`?e:0;typeof t==`number`?n=e:(n=0,t=e);let r=[];if(n<=t)for(let e=n;e<t;e++)r.push(e);else for(let e=n;e>t;e--)r.push(e);return r}function y(e,t,n){let r=e.slice(0,t),i=e.slice(t);return r.concat(n,i)}function b(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.unshift(t))}function x(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.push(t))}function S(e,t){for(let n of t)e.push(n)}function C(e,t){let n=[];for(let r of e){let e=t(r);e!==void 0&&n.push(e)}return n}function w(e){return Array.isArray(e)?e:[e]}function T(e,t,n){let r=te(e,t),i=e.length,a=n.length;e.length=i+a;for(let t=i-1;t>=r;t--)e[t+a]=e[t];for(let t=0;t<a;t++)e[t+r]=n[t]}function ee(e,t,n,r){let i=te(e,t),a=e.splice(i,n);return a===void 0&&(a=[]),T(e,i,r),a}function te(e,t){return t<0?Math.max(t+e.length,0):Math.min(t,e.length)}var ne;(function(e){function t(e){return e<0}e.isLessThan=t;function n(e){return e<=0}e.isLessThanOrEqual=n;function r(e){return e>0}e.isGreaterThan=r;function i(e){return e===0}e.isNeitherLessOrGreaterThan=i,e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0})(ne||={});function re(e,t){return(n,r)=>t(e(n),e(r))}function ie(...e){return(t,n)=>{for(let r of e){let e=r(t,n);if(!ne.isNeitherLessOrGreaterThan(e))return e}return ne.neitherLessOrGreaterThan}}var ae=(e,t)=>e-t,oe=(e,t)=>ae(+!!e,+!!t);function se(e){return(t,n)=>-e(t,n)}function ce(e){return(t,n)=>t===void 0?n===void 0?ne.neitherLessOrGreaterThan:ne.lessThan:n===void 0?ne.greaterThan:e(t,n)}var le=class{constructor(e){this.firstIdx=0,this.items=e,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(e){let t=this.firstIdx;for(;t<=this.lastIdx&&e(this.items[t]);)t++;let n=t===this.firstIdx?null:this.items.slice(this.firstIdx,t);return this.firstIdx=t,n}peek(){if(this.length!==0)return this.items[this.firstIdx]}dequeue(){let e=this.items[this.firstIdx];return this.firstIdx++,e}takeCount(e){let t=this.items.slice(this.firstIdx,this.firstIdx+e);return this.firstIdx+=e,t}},ue=class e{constructor(e){this.iterate=e}toArray(){let e=[];return this.iterate(t=>(e.push(t),!0)),e}filter(t){return new e(e=>this.iterate(n=>!t(n)||e(n)))}map(t){return new e(e=>this.iterate(n=>e(t(n))))}findLast(e){let t;return this.iterate(n=>(e(n)&&(t=n),!0)),t}findLastMaxBy(e){let t,n=!0;return this.iterate(r=>((n||ne.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0)),t}};n=ue,n.empty=new n(e=>{});var de=class e{constructor(e){this._indexMap=e}static createSortPermutation(t,n){let r=Array.from(t.keys()).sort((e,r)=>n(t[e],t[r]));return new e(r)}apply(e){return e.map((t,n)=>e[this._indexMap[n]])}inverse(){let t=this._indexMap.slice();for(let e=0;e<this._indexMap.length;e++)t[this._indexMap[e]]=e;return new e(t)}};function fe(e){return e.reduce((e,t)=>e+t,0)}var pe=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Te.isErrorNoTelemetry(e)?new Te(e.message+`
1
+ import{t as e}from"./defineProperty-BbfpZ9Tg.js";import{Zt as t}from"./index-BZKHE14f.js";var n;function r(e){if(e.length===0)throw Error(`Invalid tail call`);return[e.slice(0,e.length-1),e[e.length-1]]}function i(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t||e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!n(e[r],t[r]))return!1;return!0}function a(e,t){let n=e.length-1;t<n&&(e[t]=e[n]),e.pop()}function o(e,t,n){return s(e.length,r=>n(e[r],t))}function s(e,t){let n=0,r=e-1;for(;n<=r;){let e=(n+r)/2|0,i=t(e);if(i<0)n=e+1;else if(i>0)r=e-1;else return e}return-(n+1)}function c(e,t,n){if(e|=0,e>=t.length)throw TypeError(`invalid index`);let r=t[Math.floor(t.length*Math.random())],i=[],a=[],o=[];for(let e of t){let t=n(e,r);t<0?i.push(e):t>0?a.push(e):o.push(e)}return e<i.length?c(e,i,n):e<i.length+o.length?o[0]:c(e-(i.length+o.length),a,n)}function l(e,t){let n=[],r;for(let i of e.slice(0).sort(t))!r||t(r[0],i)!==0?(r=[i],n.push(r)):r.push(i);return n}function*u(e,t){let n,r;for(let i of e)r!==void 0&&t(r,i)?n.push(i):(n&&(yield n),n=[i]),r=i;n&&(yield n)}function d(e,t){for(let n=0;n<=e.length;n++)t(n===0?void 0:e[n-1],n===e.length?void 0:e[n])}function f(e,t){for(let n=0;n<e.length;n++)t(n===0?void 0:e[n-1],e[n],n+1===e.length?void 0:e[n+1])}function p(e){return e.filter(e=>!!e)}function m(e){let t=0;for(let n=0;n<e.length;n++)e[n]&&(e[t]=e[n],t+=1);e.length=t}function h(e){return!Array.isArray(e)||e.length===0}function g(e){return Array.isArray(e)&&e.length>0}function _(e,t=e=>e){let n=new Set;return e.filter(e=>{let r=t(e);return!n.has(r)&&(n.add(r),!0)})}function v(e,t){let n=typeof t==`number`?e:0;typeof t==`number`?n=e:(n=0,t=e);let r=[];if(n<=t)for(let e=n;e<t;e++)r.push(e);else for(let e=n;e>t;e--)r.push(e);return r}function y(e,t,n){let r=e.slice(0,t),i=e.slice(t);return r.concat(n,i)}function b(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.unshift(t))}function x(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.push(t))}function S(e,t){for(let n of t)e.push(n)}function C(e,t){let n=[];for(let r of e){let e=t(r);e!==void 0&&n.push(e)}return n}function w(e){return Array.isArray(e)?e:[e]}function T(e,t,n){let r=te(e,t),i=e.length,a=n.length;e.length=i+a;for(let t=i-1;t>=r;t--)e[t+a]=e[t];for(let t=0;t<a;t++)e[t+r]=n[t]}function ee(e,t,n,r){let i=te(e,t),a=e.splice(i,n);return a===void 0&&(a=[]),T(e,i,r),a}function te(e,t){return t<0?Math.max(t+e.length,0):Math.min(t,e.length)}var ne;(function(e){function t(e){return e<0}e.isLessThan=t;function n(e){return e<=0}e.isLessThanOrEqual=n;function r(e){return e>0}e.isGreaterThan=r;function i(e){return e===0}e.isNeitherLessOrGreaterThan=i,e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0})(ne||={});function re(e,t){return(n,r)=>t(e(n),e(r))}function ie(...e){return(t,n)=>{for(let r of e){let e=r(t,n);if(!ne.isNeitherLessOrGreaterThan(e))return e}return ne.neitherLessOrGreaterThan}}var ae=(e,t)=>e-t,oe=(e,t)=>ae(+!!e,+!!t);function se(e){return(t,n)=>-e(t,n)}function ce(e){return(t,n)=>t===void 0?n===void 0?ne.neitherLessOrGreaterThan:ne.lessThan:n===void 0?ne.greaterThan:e(t,n)}var le=class{constructor(e){this.firstIdx=0,this.items=e,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(e){let t=this.firstIdx;for(;t<=this.lastIdx&&e(this.items[t]);)t++;let n=t===this.firstIdx?null:this.items.slice(this.firstIdx,t);return this.firstIdx=t,n}peek(){if(this.length!==0)return this.items[this.firstIdx]}dequeue(){let e=this.items[this.firstIdx];return this.firstIdx++,e}takeCount(e){let t=this.items.slice(this.firstIdx,this.firstIdx+e);return this.firstIdx+=e,t}},ue=class e{constructor(e){this.iterate=e}toArray(){let e=[];return this.iterate(t=>(e.push(t),!0)),e}filter(t){return new e(e=>this.iterate(n=>!t(n)||e(n)))}map(t){return new e(e=>this.iterate(n=>e(t(n))))}findLast(e){let t;return this.iterate(n=>(e(n)&&(t=n),!0)),t}findLastMaxBy(e){let t,n=!0;return this.iterate(r=>((n||ne.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0)),t}};n=ue,n.empty=new n(e=>{});var de=class e{constructor(e){this._indexMap=e}static createSortPermutation(t,n){let r=Array.from(t.keys()).sort((e,r)=>n(t[e],t[r]));return new e(r)}apply(e){return e.map((t,n)=>e[this._indexMap[n]])}inverse(){let t=this._indexMap.slice();for(let e=0;e<this._indexMap.length;e++)t[this._indexMap[e]]=e;return new e(t)}};function fe(e){return e.reduce((e,t)=>e+t,0)}var pe=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Te.isErrorNoTelemetry(e)?new Te(e.message+`
2
2
 
3
3
  `+e.stack):Error(e.message+`
4
4
 
@@ -1 +1 @@
1
- import{Qt as e}from"./index-CbyHfF8I.js";function t(){let{t}=e();function n(e){let n=typeof e==`string`?new Date(e).getTime():e.getTime(),r=Date.now()-n,i=Math.floor(r/6e4);if(i<1)return t(`common.justNow`);if(i<60)return t(`common.minutesAgo`,{count:i});let a=Math.floor(i/60);if(a<24)return t(`common.hoursAgo`,{count:a});let o=Math.floor(a/24);return t(`common.daysAgo`,{count:o})}return{timeAgo:n}}export{t};
1
+ import{Qt as e}from"./index-BZKHE14f.js";function t(){let{t}=e();function n(e){let n=typeof e==`string`?new Date(e).getTime():e.getTime(),r=Date.now()-n,i=Math.floor(r/6e4);if(i<1)return t(`common.justNow`);if(i<60)return t(`common.minutesAgo`,{count:i});let a=Math.floor(i/60);if(a<24)return t(`common.hoursAgo`,{count:a});let o=Math.floor(a/24);return t(`common.daysAgo`,{count:o})}return{timeAgo:n}}export{t};