@loicngr/kobo 2.1.0 → 2.1.1
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.
- package/CHANGELOG.md +4 -0
- package/dist/server/db/migrations.js +8 -0
- package/dist/server/db/schema.js +2 -0
- package/dist/server/routes/usage.js +28 -2
- package/dist/server/services/agent/engines/claude-code/engine.js +37 -4
- package/dist/server/services/usage/reliability.js +24 -0
- package/package.json +1 -1
- package/src/client/dist/pwa/assets/{ActivityFeed-DRgetl1M.js → ActivityFeed-DeJ0V6CW.js} +1 -1
- package/src/client/dist/pwa/assets/{ChangelogPage-BJdICFvz.js → ChangelogPage-OoOnn4q9.js} +1 -1
- package/src/client/dist/pwa/assets/{ComparisonPanel-2GLd8KIy.js → ComparisonPanel-BYpe6Nch.js} +1 -1
- package/src/client/dist/pwa/assets/{CreatePage-B9AdNJZj.js → CreatePage-COQwHyqL.js} +1 -1
- package/src/client/dist/pwa/assets/DashboardPage-CZ2036MC.js +1 -0
- package/src/client/dist/pwa/assets/DashboardPage-XiCj24i2.css +1 -0
- package/src/client/dist/pwa/assets/{DiffViewer-X25vuf83.js → DiffViewer-CXBmMV9R.js} +3 -3
- package/src/client/dist/pwa/assets/{DocumentsPanel-BastjrEm.js → DocumentsPanel-mLGU5aTb.js} +1 -1
- package/src/client/dist/pwa/assets/{DrawerToggleButton-DbipGmBL.js → DrawerToggleButton-C39pfWBD.js} +1 -1
- package/src/client/dist/pwa/assets/{GitPanel-CnW4iVao.js → GitPanel-BQk7kJO-.js} +3 -3
- package/src/client/dist/pwa/assets/{HealthPage-aieNQly-.js → HealthPage-CnJWXfa8.js} +1 -1
- package/src/client/dist/pwa/assets/{MainLayout-DqBbE8o4.js → MainLayout-D3zfT61Y.js} +2 -2
- package/src/client/dist/pwa/assets/{QBtnDropdown-BWy-rh45.js → QBtnDropdown-DGLLlBf3.js} +1 -1
- package/src/client/dist/pwa/assets/{QExpansionItem-DfmdBGuW.js → QExpansionItem-CQ2LzM8P.js} +1 -1
- package/src/client/dist/pwa/assets/{QSelect-BfqaWakg.js → QSelect-DoTWgQAO.js} +1 -1
- package/src/client/dist/pwa/assets/{QTooltip-Cy0T0vk2.js → QTooltip-DKvUeiR_.js} +1 -1
- package/src/client/dist/pwa/assets/{SchedulePanel-YQPObRR3.js → SchedulePanel-DIMzNIO3.js} +1 -1
- package/src/client/dist/pwa/assets/{SearchPage-BoBjmItc.js → SearchPage-COWnMxRZ.js} +1 -1
- package/src/client/dist/pwa/assets/{SettingsPage-0GtDcXRC.js → SettingsPage-B9cLhFnO.js} +1 -1
- package/src/client/dist/pwa/assets/{SplitWorkspacePage-4wFh65Lh.js → SplitWorkspacePage-BJKssJyI.js} +1 -1
- package/src/client/dist/pwa/assets/{TerminalPanel-b70x_jqH.js → TerminalPanel-C_HNpN1X.js} +1 -1
- package/src/client/dist/pwa/assets/{TouchPan-CcTVcxwd.js → TouchPan-CCllyaAF.js} +1 -1
- package/src/client/dist/pwa/assets/{TourReplayButton-CpEMnQS8.js → TourReplayButton-Cp2UnxWa.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspaceAttentionLabels-C5lTHTp2.js → WorkspaceAttentionLabels-B-SuQuS_.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspacePage-D_V9gNON.js → WorkspacePage-6lN4iF5W.js} +3 -3
- package/src/client/dist/pwa/assets/{browser-LBbxVwWf.js → browser-uy3hmwKo.js} +1 -1
- package/src/client/dist/pwa/assets/{build-path-tree-DyvtWxb0.js → build-path-tree-DZrp6Aji.js} +1 -1
- package/src/client/dist/pwa/assets/{custom-sounds-BpeLZUDW.js → custom-sounds-Du8ReMlU.js} +1 -1
- package/src/client/dist/pwa/assets/{de-v6i2HlE2.js → de-CTE3Xb7Z.js} +1 -1
- package/src/client/dist/pwa/assets/{documents-Bjx8lz-h.js → documents-BtNrB6d0.js} +1 -1
- package/src/client/dist/pwa/assets/{editor.api-BC3PbJkx.js → editor.api-P-eJRcVK.js} +1 -1
- package/src/client/dist/pwa/assets/{efforts-BDHAnNUs.js → efforts-ChUC4xtk.js} +1 -1
- package/src/client/dist/pwa/assets/{engineFeatures-hlEiwqt-.js → engineFeatures-D-0NPZBE.js} +1 -1
- package/src/client/dist/pwa/assets/{es-Bc1KgkAT.js → es-CZxg1xjh.js} +1 -1
- package/src/client/dist/pwa/assets/{expand-template-DLDl1qPx.js → expand-template-ByoC_kxX.js} +1 -1
- package/src/client/dist/pwa/assets/{format-Q94deO3I.js → format-CeidAPFn.js} +1 -1
- package/src/client/dist/pwa/assets/{formatters-CWxRHuUu.js → formatters-BtG6lb4d.js} +1 -1
- package/src/client/dist/pwa/assets/{fr-ByYPK5vr.js → fr-C7HCclxj.js} +1 -1
- package/src/client/dist/pwa/assets/{freemarker2-MPhk0eTh.js → freemarker2-CDYXi2tK.js} +1 -1
- package/src/client/dist/pwa/assets/{handlebars-C60ru5gR.js → handlebars-AVkJuN-_.js} +1 -1
- package/src/client/dist/pwa/assets/{html-ClzchR9j.js → html-CpvEZlmO.js} +1 -1
- package/src/client/dist/pwa/assets/i18n-KVkTJG-4.js +1 -0
- package/src/client/dist/pwa/assets/{index-CqZ7sDcM.js → index-DsaWUT_Z.js} +3 -3
- package/src/client/dist/pwa/assets/{it-BYF_88z6.js → it-DoOWwqZz.js} +1 -1
- package/src/client/dist/pwa/assets/{javascript-C43UJmMx.js → javascript-BYnnBLH9.js} +1 -1
- package/src/client/dist/pwa/assets/{liquid-CYTrvTKF.js → liquid-CzqlB3Um.js} +1 -1
- package/src/client/dist/pwa/assets/{mdx-CxsXOvkQ.js → mdx-hrYFnJVZ.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco-contributions-Cl4-iVpK.js → monaco-contributions-D2YXqNaH.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco.contribution-DkjLUmyA.js → monaco.contribution-Dl22KqTL.js} +2 -2
- package/src/client/dist/pwa/assets/{network-auth-CXQn2wO7.js → network-auth-Dq0I5kjv.js} +1 -1
- package/src/client/dist/pwa/assets/{notify-theme-BrueBr2j.js → notify-theme-vV3Rm4_v.js} +1 -1
- package/src/client/dist/pwa/assets/{pending-diff-open-B4POItbR.js → pending-diff-open-BJYqBOUG.js} +1 -1
- package/src/client/dist/pwa/assets/{project-color-CM3hflLH.js → project-color-W5mMgIKK.js} +1 -1
- package/src/client/dist/pwa/assets/{python-s2IMpsoV.js → python-DafgCozG.js} +1 -1
- package/src/client/dist/pwa/assets/{razor-DVNXiVBh.js → razor-CWYrTLCm.js} +1 -1
- package/src/client/dist/pwa/assets/{render-chat-markdown-TU6CDfD8.js → render-chat-markdown-CE5RIL0s.js} +1 -1
- package/src/client/dist/pwa/assets/{typescript-BYT_8ABE.js → typescript-DLSIuW9u.js} +1 -1
- package/src/client/dist/pwa/assets/{use-tours-CNe8qb1q.js → use-tours-CDdnvIaG.js} +1 -1
- package/src/client/dist/pwa/assets/{workspace-templates-tBxXE52A.js → workspace-templates-C88VmFdQ.js} +1 -1
- package/src/client/dist/pwa/assets/{xml-BIG-fmxk.js → xml-BAmdYarn.js} +1 -1
- package/src/client/dist/pwa/assets/{yaml-D7gu2CQh.js → yaml-RQqNMXWh.js} +1 -1
- package/src/client/dist/pwa/index.html +1 -1
- package/src/client/dist/pwa/sw.js +1 -1
- package/src/client/dist/pwa/assets/DashboardPage-CzVOvjSP.js +0 -1
- package/src/client/dist/pwa/assets/DashboardPage-D8g7_r4S.css +0 -1
- package/src/client/dist/pwa/assets/i18n-Sy42tm-V.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$a as e,$f as t,$i as n,$l as r,$m as i,$n as a,$o as o,$p as s,$t as c,Am as l,An as u,Ap as d,Ar as f,At as ee,B as te,Ba as p,Bc as m,Bd as h,Bi as g,Bl as _,Bp as ne,Bs as v,Bu as y,Cf as re,Ch as ie,Ci as ae,Cn as oe,Cp as se,Cr as ce,Cs as le,Cu as ue,D as de,Dc as fe,Dp as pe,Ec as me,Ef as he,Eh as ge,Ei as _e,El as ve,Em as ye,En as be,Ep as xe,Es as Se,Eu as Ce,Fc as b,Fd as we,Ff as Te,Fh as Ee,Fl as De,Fm as x,Fs as Oe,Fu as S,G as ke,Gd as Ae,Gf as je,Gh as Me,Gm as Ne,Gn as Pe,Gr as Fe,Gu as Ie,H as Le,Hd as Re,Hl as ze,Hm as C,Hn as Be,Hs as Ve,Hu as He,I as Ue,Ia as We,Ic as w,If as Ge,Ih as Ke,Il as qe,Im as T,Is as Je,Iu as Ye,J as Xe,Ja as Ze,Jd as Qe,Jf as $e,Jh as et,Jl as tt,Jm as nt,Jn as rt,Jr as it,K as at,Kd as ot,Kf as st,Kh as ct,Kl as lt,Kn as ut,Kp as dt,Kr as ft,Kt as pt,Ku as mt,La as ht,Lc as gt,Ld as _t,Lf as vt,Lh as yt,Li as bt,Lm as xt,Ln as St,Ls as Ct,Lt as wt,Lu as Tt,Mc as Et,Mi as Dt,Mn as Ot,Mo as kt,Mp as At,Mr as jt,Ms as Mt,Mu as E,N as Nt,Na as Pt,Nc as D,Nh as Ft,Nm as It,Nn as Lt,Np as Rt,Nr as zt,Ns as Bt,Oc as Vt,Oi as Ht,Ol as Ut,Op as Wt,Os as Gt,Ot as Kt,Pa as qt,Pc as Jt,Pd as Yt,Pm as Xt,Pn as Zt,Pp as Qt,Ps as $t,Pt as en,Qa as tn,Qc as nn,Qf as rn,Qh as an,Qi as on,Ql as sn,Qm as cn,Qr as ln,Qt as un,Qu as dn,Ra as fn,Rc as pn,Rd as O,Rf as mn,Rh as hn,Ri as gn,Rl as k,Rm as _n,Rn as vn,Rt as yn,Ru as bn,Sf as xn,Si as Sn,Sl as Cn,Sm as wn,Sn as Tn,So as En,Sp as Dn,Sr as On,Ss as kn,Su as An,Tc as jn,Th as Mn,Ti as Nn,Tl as Pn,Tn as Fn,Tp as In,Tt as Ln,Uc as Rn,Uf as zn,Ul as Bn,Um as A,Un as Vn,Va as Hn,Vf as Un,Vl as Wn,Vm as Gn,Vn as Kn,Vs as qn,Vu as Jn,W as Yn,Wa as Xn,Wc as Zn,Wd as Qn,Wf as $n,Wl as er,Wm as tr,Wt as nr,Wu as rr,Xa as ir,Xf as ar,Xi as or,Xm as j,Xo as sr,Xp as cr,Xr as lr,Xu as ur,Y as dr,Ya as fr,Yf as pr,Yh as mr,Yi as hr,Yl as gr,Ym as _r,Yr as vr,Za as yr,Zd as br,Zf as xr,Zh as Sr,Zl as Cr,Zm as wr,Zo as Tr,Zr as Er,_c as Dr,_d as M,_h as Or,_m as kr,_n as Ar,_o as jr,_p as Mr,_r as Nr,_t as Pr,_u as Fr,ac as Ir,af as Lr,al as Rr,am as zr,an as Br,ap as Vr,ar as Hr,bc as Ur,bd as Wr,bp as Gr,bu as Kr,cf as qr,ch as Jr,ci as Yr,cl as Xr,cm as Zr,cn as Qr,cp as $r,ct as ei,cu as ti,dd as ni,df as ri,dh as ii,di as ai,dl as oi,dn as si,dp as ci,dr as li,ds as ui,dt as di,ea as fi,ed as pi,eg as mi,eh as hi,ei as gi,em as N,en as _i,eo as vi,ep as yi,er as bi,eu as P,f as xi,fd as F,ff as Si,fh as I,fi as Ci,fm as wi,fn as Ti,fp as Ei,fr as Di,ft as Oi,fu as ki,g as Ai,gc as ji,gd as Mi,gh as Ni,gm as Pi,gn as Fi,gp as Ii,gs as Li,gt as Ri,hh as zi,hm as Bi,ho as Vi,hp as Hi,hr as Ui,hs as Wi,ht as Gi,hu as L,ia as Ki,if as qi,il as Ji,im as Yi,ip as Xi,ir as Zi,is as Qi,it as $i,iu as ea,jc as ta,ji as na,jl as ra,jm as ia,jp as aa,jr as oa,jt as sa,ju as R,kc as ca,ki as la,kl as ua,kp as da,kr as fa,kt as pa,ld as ma,lf as ha,lh as ga,lm as z,ln as _a,lp as va,lr as ya,lt as ba,lu as B,m as xa,md as Sa,mh as Ca,mm as wa,mn as Ta,mp as Ea,mr as Da,ms as Oa,mt as ka,mu as Aa,na as ja,nf as Ma,nn as Na,np as Pa,nr as Fa,nt as Ia,nu as La,of as Ra,oi as za,om as Ba,op as Va,or as Ha,ot as Ua,ou as V,pc as Wa,pf as Ga,pn as Ka,po as qa,pp as Ja,pr as Ya,pt as Xa,pu as Za,q as Qa,qc as $a,qd as eo,qf as to,ql as no,qm as ro,qt as io,qu as ao,rf as oo,rh as so,ri as co,rl as lo,rp as uo,rr as fo,ru as po,sd as mo,sf as ho,sl as go,sm as _o,sp as vo,sr as H,ss as yo,su as bo,t as xo,ta as So,td as Co,th as wo,ti as To,tm as Eo,tn as Do,to as Oo,tp as ko,tt as Ao,tu as jo,u as Mo,uc as No,uf as Po,uh as Fo,ul as Io,um as Lo,un as Ro,up as zo,ur as Bo,us as Vo,ut as Ho,uu as Uo,v as Wo,vc as Go,vl as Ko,vm as qo,vn as Jo,vp as Yo,vr as Xo,vs as Zo,vu as U,wc as Qo,wf as $o,wh as es,wi as ts,wl as ns,wm as rs,wn as is,wp as as,wr as os,ws as ss,wt as cs,xf as ls,xm as us,xn as ds,xp as fs,xs as ps,xu as ms,yd as hs,yi as gs,ym as _s,yn as vs,yp as ys,yt as bs,yu as xs,za as Ss,zc as Cs,zd as ws,zf as Ts,zl as W,zm as Es,zn as Ds,zp as Os,zs as G,zt as ks,zu as As}from"./format-Q94deO3I.js";import{n as js}from"./SettingsPage-0GtDcXRC.js";function Ms(e,t,n){return new Ns(e,t,n)}var Ns=class extends Ct{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 Ps(e){return Array.isArray(e)}function Fs(e){return!Ps(e)}function Is(e){return typeof e==`string`}function Ls(e){return!Is(e)}function Rs(e){return!e}function zs(e,t){return e.ignoreCase&&t?t.toLowerCase():t}function Bs(e){return e.replace(/[&<>'"_]/g,`-`)}function Vs(e,t){console.log(`${e.languageId}: ${t}`)}function K(e,t){return Error(`${e.languageId}: ${t}`)}function Hs(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,ee){return Rs(s)?Rs(c)?!Rs(l)&&l<r.length?zs(e,r[l]):!Rs(d)&&e&&typeof e[d]==`string`?e[d]:(o===null&&(o=i.split(`.`),o.unshift(i)),!Rs(u)&&u<o.length?zs(e,o[u]):``):zs(e,n):`$`})}function Us(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)),!Rs(r)&&r<i.length?$o(zs(e,i[r])):``})}function Ws(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 Gs(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 Ks,qs,Js=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},Ys=function(e,t){return function(n,r){t(n,r,e)}},Xs,Zs=5,Qs=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 $s(e,t);let n=$s.getStackElementId(e);n.length>0&&(n+=`|`),n+=t;let r=this._entries[n];return r||(r=new $s(e,t),this._entries[n]=r,r)}};Ks=Qs,Ks._INSTANCE=new Ks(Zs);var $s=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 Qs.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return Qs.create(this.parent,e)}},ec=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)}},tc=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 nc(e,t);let n=$s.getStackElementId(e),r=this._entries[n];return r||(r=new nc(e,null),this._entries[n]=r,r)}};qs=tc,qs._INSTANCE=new qs(Zs);var nc=class e{constructor(e,t){this.stack=e,this.embeddedLanguageData=t}clone(){return(this.embeddedLanguageData?this.embeddedLanguageData.clone():null)===this.embeddedLanguageData?this:tc.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)}},rc=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 s(e,t,this._languageId)))}nestedLanguageTokenize(e,t,n,r){let i=n.languageId,a=n.state,o=N.get(i);if(!o)return this.enterLanguage(i),this.emit(r,``),a;let c=o.tokenize(e,t,a);if(r!==0)for(let e of c.tokens)this._tokens.push(new s(e.offset+r,e.type,e.language));else this._tokens=this._tokens.concat(c.tokens);return this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,c.endState}finalize(e){return new Eo(this._tokens,e)}},ic=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=N.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 Os(e._merge(this._prependTokens,this._tokens,null),[],t)}},ac=Xs=class extends C{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(N.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,N.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=N.get(t);if(n){if(n instanceof Xs){let t=n.getLoadStatus();t.loaded===!1&&e.push(t.promise)}continue}N.isResolved(t)||e.push(N.getOrCreate(t))}return e.length===0?{loaded:!0}:{loaded:!1,promise:Promise.all(e).then(e=>void 0)}}getInitialState(){let e=Qs.create(null,this._lexer.start);return tc.create(e,null)}tokenize(e,t,n){if(e.length>=this._maxTokenizationLineLength)return $t(this._languageId,n);let r=new rc,i=this._tokenize(e,t,n,r);return r.finalize(i)}tokenizeEncoded(e,t,n){if(e.length>=this._maxTokenizationLineLength)return Oe(this._languageService.languageIdCodec.encodeLanguageId(this._languageId),n);let r=new ic(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=Ws(this._lexer,t.stack.state),!n))throw K(this._lexer,`tokenizer state is not defined: `+t.stack.state);let r=-1,i=!1;for(let a of n){if(!Ls(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 K(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 tc.create(n.stack,new ec(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,$f as t,$i as n,$l as r,$m as i,$n as a,$o as o,$p as s,$t as c,Am as l,An as u,Ap as d,Ar as f,At as ee,B as te,Ba as p,Bc as m,Bd as h,Bi as g,Bl as _,Bp as ne,Bs as v,Bu as y,Cf as re,Ch as ie,Ci as ae,Cn as oe,Cp as se,Cr as ce,Cs as le,Cu as ue,D as de,Dc as fe,Dp as pe,Ec as me,Ef as he,Eh as ge,Ei as _e,El as ve,Em as ye,En as be,Ep as xe,Es as Se,Eu as Ce,Fc as b,Fd as we,Ff as Te,Fh as Ee,Fl as De,Fm as x,Fs as Oe,Fu as S,G as ke,Gd as Ae,Gf as je,Gh as Me,Gm as Ne,Gn as Pe,Gr as Fe,Gu as Ie,H as Le,Hd as Re,Hl as ze,Hm as C,Hn as Be,Hs as Ve,Hu as He,I as Ue,Ia as We,Ic as w,If as Ge,Ih as Ke,Il as qe,Im as T,Is as Je,Iu as Ye,J as Xe,Ja as Ze,Jd as Qe,Jf as $e,Jh as et,Jl as tt,Jm as nt,Jn as rt,Jr as it,K as at,Kd as ot,Kf as st,Kh as ct,Kl as lt,Kn as ut,Kp as dt,Kr as ft,Kt as pt,Ku as mt,La as ht,Lc as gt,Ld as _t,Lf as vt,Lh as yt,Li as bt,Lm as xt,Ln as St,Ls as Ct,Lt as wt,Lu as Tt,Mc as Et,Mi as Dt,Mn as Ot,Mo as kt,Mp as At,Mr as jt,Ms as Mt,Mu as E,N as Nt,Na as Pt,Nc as D,Nh as Ft,Nm as It,Nn as Lt,Np as Rt,Nr as zt,Ns as Bt,Oc as Vt,Oi as Ht,Ol as Ut,Op as Wt,Os as Gt,Ot as Kt,Pa as qt,Pc as Jt,Pd as Yt,Pm as Xt,Pn as Zt,Pp as Qt,Ps as $t,Pt as en,Qa as tn,Qc as nn,Qf as rn,Qh as an,Qi as on,Ql as sn,Qm as cn,Qr as ln,Qt as un,Qu as dn,Ra as fn,Rc as pn,Rd as O,Rf as mn,Rh as hn,Ri as gn,Rl as k,Rm as _n,Rn as vn,Rt as yn,Ru as bn,Sf as xn,Si as Sn,Sl as Cn,Sm as wn,Sn as Tn,So as En,Sp as Dn,Sr as On,Ss as kn,Su as An,Tc as jn,Th as Mn,Ti as Nn,Tl as Pn,Tn as Fn,Tp as In,Tt as Ln,Uc as Rn,Uf as zn,Ul as Bn,Um as A,Un as Vn,Va as Hn,Vf as Un,Vl as Wn,Vm as Gn,Vn as Kn,Vs as qn,Vu as Jn,W as Yn,Wa as Xn,Wc as Zn,Wd as Qn,Wf as $n,Wl as er,Wm as tr,Wt as nr,Wu as rr,Xa as ir,Xf as ar,Xi as or,Xm as j,Xo as sr,Xp as cr,Xr as lr,Xu as ur,Y as dr,Ya as fr,Yf as pr,Yh as mr,Yi as hr,Yl as gr,Ym as _r,Yr as vr,Za as yr,Zd as br,Zf as xr,Zh as Sr,Zl as Cr,Zm as wr,Zo as Tr,Zr as Er,_c as Dr,_d as M,_h as Or,_m as kr,_n as Ar,_o as jr,_p as Mr,_r as Nr,_t as Pr,_u as Fr,ac as Ir,af as Lr,al as Rr,am as zr,an as Br,ap as Vr,ar as Hr,bc as Ur,bd as Wr,bp as Gr,bu as Kr,cf as qr,ch as Jr,ci as Yr,cl as Xr,cm as Zr,cn as Qr,cp as $r,ct as ei,cu as ti,dd as ni,df as ri,dh as ii,di as ai,dl as oi,dn as si,dp as ci,dr as li,ds as ui,dt as di,ea as fi,ed as pi,eg as mi,eh as hi,ei as gi,em as N,en as _i,eo as vi,ep as yi,er as bi,eu as P,f as xi,fd as F,ff as Si,fh as I,fi as Ci,fm as wi,fn as Ti,fp as Ei,fr as Di,ft as Oi,fu as ki,g as Ai,gc as ji,gd as Mi,gh as Ni,gm as Pi,gn as Fi,gp as Ii,gs as Li,gt as Ri,hh as zi,hm as Bi,ho as Vi,hp as Hi,hr as Ui,hs as Wi,ht as Gi,hu as L,ia as Ki,if as qi,il as Ji,im as Yi,ip as Xi,ir as Zi,is as Qi,it as $i,iu as ea,jc as ta,ji as na,jl as ra,jm as ia,jp as aa,jr as oa,jt as sa,ju as R,kc as ca,ki as la,kl as ua,kp as da,kr as fa,kt as pa,ld as ma,lf as ha,lh as ga,lm as z,ln as _a,lp as va,lr as ya,lt as ba,lu as B,m as xa,md as Sa,mh as Ca,mm as wa,mn as Ta,mp as Ea,mr as Da,ms as Oa,mt as ka,mu as Aa,na as ja,nf as Ma,nn as Na,np as Pa,nr as Fa,nt as Ia,nu as La,of as Ra,oi as za,om as Ba,op as Va,or as Ha,ot as Ua,ou as V,pc as Wa,pf as Ga,pn as Ka,po as qa,pp as Ja,pr as Ya,pt as Xa,pu as Za,q as Qa,qc as $a,qd as eo,qf as to,ql as no,qm as ro,qt as io,qu as ao,rf as oo,rh as so,ri as co,rl as lo,rp as uo,rr as fo,ru as po,sd as mo,sf as ho,sl as go,sm as _o,sp as vo,sr as H,ss as yo,su as bo,t as xo,ta as So,td as Co,th as wo,ti as To,tm as Eo,tn as Do,to as Oo,tp as ko,tt as Ao,tu as jo,u as Mo,uc as No,uf as Po,uh as Fo,ul as Io,um as Lo,un as Ro,up as zo,ur as Bo,us as Vo,ut as Ho,uu as Uo,v as Wo,vc as Go,vl as Ko,vm as qo,vn as Jo,vp as Yo,vr as Xo,vs as Zo,vu as U,wc as Qo,wf as $o,wh as es,wi as ts,wl as ns,wm as rs,wn as is,wp as as,wr as os,ws as ss,wt as cs,xf as ls,xm as us,xn as ds,xp as fs,xs as ps,xu as ms,yd as hs,yi as gs,ym as _s,yn as vs,yp as ys,yt as bs,yu as xs,za as Ss,zc as Cs,zd as ws,zf as Ts,zl as W,zm as Es,zn as Ds,zp as Os,zs as G,zt as ks,zu as As}from"./format-CeidAPFn.js";import{n as js}from"./SettingsPage-B9cLhFnO.js";function Ms(e,t,n){return new Ns(e,t,n)}var Ns=class extends Ct{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 Ps(e){return Array.isArray(e)}function Fs(e){return!Ps(e)}function Is(e){return typeof e==`string`}function Ls(e){return!Is(e)}function Rs(e){return!e}function zs(e,t){return e.ignoreCase&&t?t.toLowerCase():t}function Bs(e){return e.replace(/[&<>'"_]/g,`-`)}function Vs(e,t){console.log(`${e.languageId}: ${t}`)}function K(e,t){return Error(`${e.languageId}: ${t}`)}function Hs(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,ee){return Rs(s)?Rs(c)?!Rs(l)&&l<r.length?zs(e,r[l]):!Rs(d)&&e&&typeof e[d]==`string`?e[d]:(o===null&&(o=i.split(`.`),o.unshift(i)),!Rs(u)&&u<o.length?zs(e,o[u]):``):zs(e,n):`$`})}function Us(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)),!Rs(r)&&r<i.length?$o(zs(e,i[r])):``})}function Ws(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 Gs(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 Ks,qs,Js=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},Ys=function(e,t){return function(n,r){t(n,r,e)}},Xs,Zs=5,Qs=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 $s(e,t);let n=$s.getStackElementId(e);n.length>0&&(n+=`|`),n+=t;let r=this._entries[n];return r||(r=new $s(e,t),this._entries[n]=r,r)}};Ks=Qs,Ks._INSTANCE=new Ks(Zs);var $s=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 Qs.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return Qs.create(this.parent,e)}},ec=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)}},tc=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 nc(e,t);let n=$s.getStackElementId(e),r=this._entries[n];return r||(r=new nc(e,null),this._entries[n]=r,r)}};qs=tc,qs._INSTANCE=new qs(Zs);var nc=class e{constructor(e,t){this.stack=e,this.embeddedLanguageData=t}clone(){return(this.embeddedLanguageData?this.embeddedLanguageData.clone():null)===this.embeddedLanguageData?this:tc.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)}},rc=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 s(e,t,this._languageId)))}nestedLanguageTokenize(e,t,n,r){let i=n.languageId,a=n.state,o=N.get(i);if(!o)return this.enterLanguage(i),this.emit(r,``),a;let c=o.tokenize(e,t,a);if(r!==0)for(let e of c.tokens)this._tokens.push(new s(e.offset+r,e.type,e.language));else this._tokens=this._tokens.concat(c.tokens);return this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,c.endState}finalize(e){return new Eo(this._tokens,e)}},ic=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=N.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 Os(e._merge(this._prependTokens,this._tokens,null),[],t)}},ac=Xs=class extends C{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(N.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,N.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=N.get(t);if(n){if(n instanceof Xs){let t=n.getLoadStatus();t.loaded===!1&&e.push(t.promise)}continue}N.isResolved(t)||e.push(N.getOrCreate(t))}return e.length===0?{loaded:!0}:{loaded:!1,promise:Promise.all(e).then(e=>void 0)}}getInitialState(){let e=Qs.create(null,this._lexer.start);return tc.create(e,null)}tokenize(e,t,n){if(e.length>=this._maxTokenizationLineLength)return $t(this._languageId,n);let r=new rc,i=this._tokenize(e,t,n,r);return r.finalize(i)}tokenizeEncoded(e,t,n){if(e.length>=this._maxTokenizationLineLength)return Oe(this._languageService.languageIdCodec.encodeLanguageId(this._languageId),n);let r=new ic(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=Ws(this._lexer,t.stack.state),!n))throw K(this._lexer,`tokenizer state is not defined: `+t.stack.state);let r=-1,i=!1;for(let a of n){if(!Ls(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 K(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 tc.create(n.stack,new ec(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,ee=l.depth,te=d?d.groups.length:0,p=l.state,m=null,h=null,g=null,_=null,ne=null;if(d){m=d.matches;let e=d.groups.shift();h=e.matched,g=e.action,_=d.rule,d.groups.length===0&&(d=null)}else{if(!f&&u>=s)break;f=!1;let e=this._lexer.tokenizer[p];if(!e&&(e=Ws(this._lexer,p),!e))throw K(this._lexer,`tokenizer state is not defined: `+p);let t=o.substr(u);for(let n of e)if((u===0||!n.matchOnlyAtLineStart)&&(m=t.match(n.resolveRegex(p)),m)){h=m[0],g=n.action;break}}if(m||(m=[``],h=``),g||=(u<s&&(m=[o.charAt(u)],h=m[0]),this._lexer.defaultToken),h===null)break;for(u+=h.length;Fs(g)&&Ls(g)&&g.test;)g=g.test(h,m,p,u===s);let v=null;if(typeof g==`string`||Array.isArray(g))v=g;else if(g.group)v=g.group;else if(g.token!==null&&g.token!==void 0){if(v=g.tokenSubst?Hs(this._lexer,g.token,h,m,p):g.token,g.nextEmbedded){if(g.nextEmbedded===`@pop`){if(!c)throw K(this._lexer,`cannot pop embedded language if not inside one`);c=null}else if(c)throw K(this._lexer,`cannot enter embedded language from within an embedded language`);else ne=Hs(this._lexer,g.nextEmbedded,h,m,p)}if(g.goBack&&(u=Math.max(0,u-g.goBack)),g.switchTo&&typeof g.switchTo==`string`){let e=Hs(this._lexer,g.switchTo,h,m,p);if(e[0]===`@`&&(e=e.substr(1)),Ws(this._lexer,e))l=l.switchTo(e);else throw K(this._lexer,`trying to switch to a state '`+e+`' that is undefined in rule: `+this._safeRuleName(_))}else if(g.transform&&typeof g.transform==`function`)throw K(this._lexer,`action.transform not supported`);else if(g.next){if(g.next===`@push`){if(l.depth>=this._lexer.maxStack)throw K(this._lexer,`maximum tokenizer stack size reached: [`+l.state+`,`+l.parent.state+`,...]`);l=l.push(p)}else if(g.next===`@pop`){if(l.depth<=1)throw K(this._lexer,`trying to pop an empty stack in rule: `+this._safeRuleName(_));l=l.pop()}else if(g.next===`@popall`)l=l.popall();else{let e=Hs(this._lexer,g.next,h,m,p);if(e[0]===`@`&&(e=e.substr(1)),Ws(this._lexer,e))l=l.push(e);else throw K(this._lexer,`trying to set a next state '`+e+`' that is undefined in rule: `+this._safeRuleName(_))}}g.log&&typeof g.log==`string`&&Vs(this._lexer,this._lexer.languageId+`: `+Hs(this._lexer,g.log,h,m,p))}if(v===null)throw K(this._lexer,`lexer rule has no well-defined action in rule: `+this._safeRuleName(_));let y=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,tc.create(l,o),r+u,i)}return tc.create(l,o)};if(Array.isArray(v)){if(d&&d.groups.length>0)throw K(this._lexer,`groups cannot be nested: `+this._safeRuleName(_));if(m.length!==v.length+1)throw K(this._lexer,`matched number of groups does not match the number of actions in rule: `+this._safeRuleName(_));let e=0;for(let t=1;t<m.length;t++)e+=m[t].length;if(e!==h.length)throw K(this._lexer,`with groups, all characters should be matched in consecutive groups in rule: `+this._safeRuleName(_));d={rule:_,matches:m,groups:[]};for(let e=0;e<v.length;e++)d.groups[e]={action:v[e],matched:m[e+1]};u-=h.length;continue}{if(v===`@rematch`&&(u-=h.length,h=``,m=null,v=``,ne!==null))return y(ne);if(h.length===0){if(s===0||ee!==l.depth||p!==l.state||(d?d.groups.length:0)!==te)continue;throw K(this._lexer,`no progress in tokenizer in rule: `+this._safeRuleName(_))}let e=null;if(Is(v)&&v.indexOf(`@brackets`)===0){let t=v.substr(9),n=oc(this._lexer,h);if(!n)throw K(this._lexer,`@brackets token returned but no bracket defined as: `+h);e=Bs(n.token+t)}else e=Bs(v===``?``:v+this._lexer.tokenPostfix);n<a&&i.emit(n+r,e)}if(ne!==null)return y(ne)}return tc.create(l,c)}_getNestedEmbeddedLanguageData(e){if(!this._languageService.isRegisteredLanguageId(e))return new ec(e,Bt);e!==this._languageId&&(this._languageService.requestBasicLanguageFeatures(e),N.getOrCreate(e),this._embeddedLanguages[e]=!0);let t=N.get(e);return t?new ec(e,t.getInitialState()):new ec(e,Bt)}};ac=Xs=Js([Ys(4,w)],ac);function oc(e,t){if(!t)return null;t=zs(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 sc=Mt(`standaloneColorizer`,{createHTML:e=>e}),cc=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=sc?.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),Ts(t)&&(t=t.substr(1));let o=mn(t);if(!e.isRegisteredLanguageId(n))return uc(o,a,i);let s=await N.getOrCreate(n);return s?lc(o,a,s,i):uc(o,a,i)}static colorizeLine(e,t,n,r,i=4){let a=le.isBasicASCII(e,t),o=le.containsRTL(e,a,n);return Se(new ss(!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 lc(e,t,n,r){return new Promise((i,a)=>{let o=()=>{let s=dc(e,t,n,r);if(n instanceof ac){let e=n.getLoadStatus();if(e.loaded===!1){e.promise.then(o,a);return}}i(s)};o()})}function uc(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 Gt(i,o,n),c=le.isBasicASCII(o,!0),l=le.containsRTL(o,c,!0),u=Se(new ss(!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 dc(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);Gt.convertToEndOffset(c.tokens,s.length);let l=new Gt(c.tokens,s,r),u=le.isBasicASCII(s,!0),d=le.containsRTL(s,u,!0),f=Se(new ss(!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 fc=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},pc=function(e,t){return function(n,r){t(n,r,e)}},mc=V,hc=class extends fn{get _targetWindow(){return R(this._target.targetElements[0])}get _targetDocumentElement(){return R(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 x),this._onRequestLayout=this._register(new x),this._linkHandler=e.linkHandler,this._target=`targetElements`in e.target?e.target:new _c(e.target),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?mc(`div.workbench-hover-pointer`):void 0,this._hover=this._register(new ft(!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:es(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=mc(`div.hover-row.markdown-hover`),s=mc(`div.hover-contents`);if(typeof e.content==`string`)s.textContent=e.content,s.style.whiteSpace=`pre-wrap`;else if(y(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(j(()=>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=mc(`div.hover-row.status-bar`),n=mc(`div.actions`);e.actions.forEach(e=>{let t=this._keybindingService.lookupKeybinding(e.commandId),r=t?t.getLabel():null;this._register(Fe.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=mc(`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`||fa(e.content)&&!e.content.value.includes(`](`)&&!e.content.value.includes(`</a>`):e.persistence.hideOnHover,e.appearance?.showHoverHint){let e=mc(`div.hover-row.status-bar`),t=mc(`div.info`);t.textContent=I(1761,`Hold {0} key to mouse over`,so?`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 gc(l));if(this._register(u.onMouseOut(()=>{this._isLocked||this.dispose()})),c){let e=[...this._target.targetElements,this._hoverContainer];this._lockMouseTracker=this._register(new gc(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=mt(this._hoverContainer,mc(`div`)),r=U(this._hoverContainer,mc(`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)&&it(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=``;let e=e=>{let t=Ce(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;this._target.x===void 0?this._hoverPosition===1?this._x=e.right:this._hoverPosition===0?this._x=e.left-t:(this._x=this._hoverPointer?e.center.x-this._hover.containerDomNode.clientWidth/2:e.left,this._x+t>=this._targetDocumentElement.clientWidth&&(this._hover.containerDomNode.classList.add(`right-aligned`),this._x=Math.max(this._targetDocumentElement.clientWidth-t-2,this._targetDocumentElement.clientLeft))):this._x=this._target.x,this._x<this._targetDocumentElement.clientLeft&&(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;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))}if(this._hover.containerDomNode.style.maxHeight=`${t}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=`${Math.round(t/2)-3}px`;break}case 3:case 2:{this._hoverPointer.classList.add(this._hoverPosition===3?`bottom`:`top`);let t=this._hover.containerDomNode.clientWidth,n=Math.round(t/2)-3,r=this._x+n;(r<e.left||r>e.right)&&(n=e.center.x-this._x-3),this._hoverPointer.style.left=`${n}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}};hc=fc([pc(1,na),pc(2,w),pc(3,Ui),pc(4,Wi)],hc);var gc=class extends fn{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 Ne),this._onMouseOut=this._register(new x);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 Qe(()=>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 C.None;this._elements.push(e);let t=new A;return t.add(L(e,B.MOUSE_OVER,()=>this._onTargetMouseOver())),t.add(L(e,B.MOUSE_LEAVE,()=>this._onTargetMouseLeave())),t.add(j(()=>{let t=this._elements.indexOf(e);t>=0&&this._elements.splice(t,1)})),t}},_c=class{constructor(e){this._element=e,this.targetElements=[this._element]}dispose(){}};function vc(e){let t=e;return typeof t==`object`&&`markdown`in t&&`markdownNotSupportedFallback`in t}var yc=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;if(ge(e)||y(e)||e===void 0)r=e;else{this._cancellationTokenSource=new _s;let i=this._cancellationTokenSource.token,a;if(a=vc(e)?ie(e.markdown)?e.markdown(i).then(t=>t??e.markdownNotSupportedFallback):e.markdown??e.markdownNotSupportedFallback:e.element(i),a instanceof Promise?(this._hoverWidget||this.show(I(1762,`Loading...`),t,n),r=await a):r=a,this.isDisposed||i.isCancellationRequested)return}this.show(r,t,n)}show(e,t,n){let r=this._hoverWidget;if(this.hasContent(e)){let i={content:e,target:this.target,actions:n?.actions,linkHandler:n?.linkHandler,trapFocus:n?.trapFocus,appearance:{showPointer:this.hoverDelegate.placement===`element`,skipFadeInAnimation:!this.fadeInAnimation||!!r,showHoverHint:n?.appearance?.showHoverHint},position:{hoverPosition:2}};this._hoverWidget=this.hoverDelegate.showHover(i,t)}r?.dispose()}hasContent(e){return e?!fa(e)||!!e.value:!1}get isDisposed(){return this._hoverWidget?.isDisposed}dispose(){this._hoverWidget?.dispose(),this._cancellationTokenSource?.dispose(!0),this._cancellationTokenSource=void 0}},bc=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},xc=function(e,t){return function(n,r){t(n,r,e)}},Sc=3,Cc=class extends C{get _currentHover(){return this._hoverStack.at(-1)?.hover}get _currentHoverOptions(){return this._hoverStack.at(-1)?.options}_getContainingHoverIndex(e){let t=y(e)?[e]:e.targetElements;for(let e=this._hoverStack.length-1;e>=0;e--)for(let n of t)if(S(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(De.registerCommandAndKeybindingRule({id:`workbench.action.showHover`,weight:0,primary:Bi(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=Tc(e.content)),!this._currentDelayedHover||this._currentDelayedHoverWasShown){if(this._currentHover?.isLocked&&this._getContainingHoverIndex(e.target)<0)return;if(wc(this._currentHoverOptions)===wc(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&&wc(this._currentHoverOptions)===wc(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 Ma(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=jc(e,n)),r},n)}setupDelayedHoverAtMouse(e,t,n){return this._setupDelayedHover(e,n=>({...typeof t==`function`?t():t,target:n?jc(e,n):e}),n)}_setupDelayedHover(e,t,n){let r=new A;return r.add(L(e,B.MOUSE_OVER,e=>{this.showDelayedHover(t(e),{groupId:n?.groupId,reducedDelay:n?.reducedDelay})})),n?.setupKeyboardEvents&&r.add(L(e,B.KEY_DOWN,e=>{let n=new qi(e);(n.equals(10)||n.equals(3))&&this.showInstantHover(t(),!0)})),this._delayedHovers.set(e,{show:e=>{this.showInstantHover(t(),e)}}),r.add(j(()=>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=Tc(e.content)),this._getContainingHoverIndex(e.target)>=0){if(this._hoverStack.length>=Sc)return}else if(this._currentHover?.isLocked||wc(this._currentHoverOptions)===wc(e))return;this._lastHoverOptions=e;let n=e.trapFocus||this._accessibilityService.isScreenReaderOptimized(),r=ms(),i;t||n&&r&&(r.classList.contains(`monaco-hover`)||(i=r));let a=new A,o=this._instantiationService.createInstance(hc,e);if(e.persistence?.sticky&&(o.isLocked=!0),e.position?.hoverPosition&&!es(e.position.hoverPosition)&&(e.target={targetElements:y(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(Ye(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=y(e.target)?e.target:e.target.targetElements[0];e.container=this._layoutService.getContainer(R(t))}if(a.add(L(R(e.container).document,B.MOUSE_DOWN,e=>{S(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,B.CLICK,()=>this._hideHoverAndDescendants(o)));else a.add(L(e.target,B.CLICK,()=>this._hideHoverAndDescendants(o)));let t=ms();if(t){let n=R(t).document;a.add(L(t,B.KEY_DOWN,t=>this._keyDown(t,o,!!e.persistence?.hideOnKeyDown))),a.add(L(n,B.KEY_DOWN,t=>this._keyDown(t,o,!!e.persistence?.hideOnKeyDown))),a.add(L(t,B.KEY_UP,e=>this._keyUp(e,o))),a.add(L(n,B.KEY_UP,e=>this._keyUp(e,o)))}}if(`IntersectionObserver`in zn){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(j(()=>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(R(y(t.target)?t.target:t.target.targetElements[0])),l=new li(c,1),u={hover:r,options:t,contextView:l,lastFocusedElementBeforeOpen:i};this._hoverStack.push(u);let d=new Oc(r,n,this._hoverStack.length);if(l.show(d),a.add(r.onRequestLayout(()=>l.layout())),n||t.persistence?.sticky){let e=R(c);a.add(L(e,B.RESIZE,()=>l.layout()))}if(t.onDidHide){let e=t.onDidHide;a.add(j(()=>e()))}t.onDidShow?.()}_hideHoverAndDescendants(e){let t=this._hoverStack.findIndex(t=>t.hover===e);if(!(t<0)){for(let e=this._hoverStack.length-1;e>=t;e--)this._hoverStack[e].hover.dispose();this._hoverStack.length=t}}_hideAllHovers(){for(let e=this._hoverStack.length-1;e>=0;e--)this._hoverStack[e].hover.dispose();this._hoverStack.length=0}hideHover(e){this._hoverStack.length!==0&&(e||!this._currentHover?.isLocked)&&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=ms();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 qi(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 Dc(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 Qe(async()=>{(!a||a.isDisposed)&&(a=new yc(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,B.MOUSE_DOWN,()=>{l=!0,o(!0,!0)},!0)),c.add(L(t,B.MOUSE_UP,()=>{l=!1},!0)),c.add(L(t,B.MOUSE_LEAVE,e=>{l=!1,o(!1,e.fromElement===t)},!0)),c.add(L(t,B.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,B.MOUSE_MOVE,e=>{c.x=e.x+10,kc(e,t)||o(!0,!0)},!0)),i=a,kc(r,t)&&a.add(s(typeof e.delay==`function`?e.delay(n):e.delay,!1,c))},!0)),Tt(t)||c.add(L(t,B.FOCUS,r=>{if(l||i||(a?.isDisposed&&(a=void 0),y(r.relatedTarget)&&r.relatedTarget.closest(`.monaco-hover`)||!r.relatedTarget)||!kc(r,t))return;let c={targetElements:[t],dispose:()=>{}},u=new A;u.add(L(t,B.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,await a?.update(n,void 0,t)},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()}};Cc=bc([xc(0,P),xc(1,w),xc(2,vr),xc(3,na),xc(4,Bo),xc(5,Wi)],Cc);function wc(e){if(e!==void 0)return e?.id??e}function Tc(e){if(!y(e))return typeof e==`string`?e.toString():e.value}function Ec(e){let t=typeof e==`function`?e():e;if(ge(t))return zt(t);if(vc(t))return t.markdownNotSupportedFallback}function Dc(e,t){function n(t){t?e.setAttribute(`title`,t):e.removeAttribute(`title`)}return n(Ec(t)),{update:e=>n(Ec(e)),show:()=>{},hide:()=>{},dispose:()=>n(void 0)}}var Oc=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 kc(e,t){return y(e.target)&&Ac(e.target,t)===t}function Ac(e,t){for(t??=R(e).document.body;!e.hasAttribute(`custom-hover`)&&e!==t;)e=e.parentElement;return e}function jc(e,t){return{targetElements:[e],x:t.x+10}}D(Er,Cc,1),So((e,t)=>{let n=e.getColor(kt);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 Mc=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},Nc=function(e,t){return function(n,r){t(n,r,e)}};function Pc(e){return e.scheme===O.file?e.fsPath:e.path}var Fc=0,Ic=class{constructor(e,t,n,r,i,a,o){this.id=++Fc,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}`}},Lc=class{constructor(e,t){this.resourceLabel=e,this.reason=t}},Rc=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(I(2099,`The following files have been closed and modified on disk: {0}.`,e.join(`, `))),t.length>0&&n.push(I(2100,`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)}},zc=class{constructor(e,t,n,r,i,a,o){this.id=++Fc,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 Rc,this.removedResources.has(t)||this.removedResources.set(t,new Lc(e,n))}setValid(e,t,n){n?this.invalidatedResources&&(this.invalidatedResources.delete(t),this.invalidatedResources.size===0&&(this.invalidatedResources=null)):(this.invalidatedResources||=new Rc,this.invalidatedResources.has(t)||this.invalidatedResources.set(t,new Lc(e,0)))}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources?`INVALID`:` VALID`}] ${this.actual.constructor.name} - ${this.actual}`}},Bc=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 ae(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++}},Vc=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}},Hc=new Bc(``,``);Hc.locked=!0;var Uc=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-Bo9anJjg.js";import{C as t,J as n,b as r,i,l as a}from"./runtime-core.esm-bundler-CNFKm4ij.js";import{J as o,Q as s,S as c,X as l,Y as u,at as d,ct as f,et as p,h as m,nt as h,q as g,y as _}from"./QBtn-DEdx_Y1V.js";import{C as v}from"./use-id-wXd4c8FA.js";import{O as y}from"./index-
|
|
1
|
+
import{v as e}from"./reactivity.esm-bundler-Bo9anJjg.js";import{C as t,J as n,b as r,i,l as a}from"./runtime-core.esm-bundler-CNFKm4ij.js";import{J as o,Q as s,S as c,X as l,Y as u,at as d,ct as f,et as p,h as m,nt as h,q as g,y as _}from"./QBtn-DEdx_Y1V.js";import{C as v}from"./use-id-wXd4c8FA.js";import{O as y}from"./index-DsaWUT_Z.js";import{a as b,o as x}from"./QSelect-DoTWgQAO.js";import{p as S}from"./use-tours-CDdnvIaG.js";import{u as C}from"./permissionModes-B-ciuUbz.js";C(`superpowers`);function w(e,t){let n=["1. Call `kobo__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 `kobo__update_task` to rename unclear titles, add completion criteria, or flip `is_acceptance_criterion` when needed.\n - Use `kobo__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 `kobo__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 `kobo__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 \`kobo__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 touch any source file. No Edit, no Write, no Bash that changes the repo.\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:
|
package/src/client/dist/pwa/assets/{engineFeatures-hlEiwqt-.js → engineFeatures-D-0NPZBE.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e,ot as t,ut as n}from"./reactivity.esm-bundler-Bo9anJjg.js";import{L as r,Y as i,_ as a,d as o,f as s,g as c,l,y as u}from"./runtime-core.esm-bundler-CNFKm4ij.js";import{y as d}from"./QBtn-DEdx_Y1V.js";import{Rt as f,nt as p,tt as m}from"./index-
|
|
1
|
+
import{j as e,ot as t,ut as n}from"./reactivity.esm-bundler-Bo9anJjg.js";import{L as r,Y as i,_ as a,d as o,f as s,g as c,l,y as u}from"./runtime-core.esm-bundler-CNFKm4ij.js";import{y as d}from"./QBtn-DEdx_Y1V.js";import{Rt as f,nt as p,tt as m}from"./index-DsaWUT_Z.js";import{a as h}from"./use-tours-CDdnvIaG.js";import{t as g}from"./QTooltip-DKvUeiR_.js";import{t as _}from"./QChip-DCPUhqXX.js";function v(e){let t=e=>Math.max(Date.parse(e.startedAt),Date.parse(e.endedAt??e.startedAt));return e.reduce((e,n)=>(n.activationOrder??0)<0?e:e?n.status===`running`==(e.status===`running`)?(n.activationOrder??0)===(e.activationOrder??0)?t(n)>t(e)?n:e:(n.activationOrder??0)>(e.activationOrder??0)?n:e:n.status===`running`?n:e:n,void 0)}var y=h(u({__name:`AutoLoopChip`,props:{workspace:{default:null}},setup(u){let d=u,{t:m}=f(),h=p(),v=l(()=>d.workspace??h.selectedWorkspace),y=l(()=>v.value?.id??null),b=l(()=>y.value?h.autoLoopStates[y.value]??null:null),x=l(()=>!!b.value?.auto_loop),S=l(()=>!!b.value?.auto_loop_ready),C=l(()=>y.value!==null&&h.selectedWorkspaceId===y.value),w=l(()=>C.value?h.tasks.filter(e=>e.status===`done`).length:b.value?.tasks_done??0),T=l(()=>C.value?h.tasks.length:b.value?.tasks_total??0);return(l,u)=>x.value&&(b.value?.state===`blocked`||b.value?.state===`waiting`)?(r(),o(_,{key:0,dense:``,square:``,size:`sm`,class:t([`q-ml-sm auto-loop-chip`,{"auto-loop-chip--blocked":b.value.state===`blocked`}])},{default:i(()=>[c(n(e(m)(`autoLoop.toggle`))+` · `+n(e(m)(`autoLoop.status.${b.value.state}`)),1)]),_:1},8,[`class`])):x.value&&!S.value?(r(),o(_,{key:1,dense:``,square:``,size:`sm`,color:`primary`,"text-color":`white`,icon:`hourglass_top`,class:`q-ml-sm`},{default:i(()=>[c(n(e(m)(`autoLoop.preparing`))+` `,1),a(g,null,{default:i(()=>[c(n(e(m)(`autoLoop.preparingTooltip`)),1)]),_:1})]),_:1})):x.value?(r(),o(_,{key:2,dense:``,square:``,size:`sm`,color:`amber-9`,"text-color":`white`,icon:`autorenew`,class:`q-ml-sm`},{default:i(()=>[c(n(e(m)(`autoLoop.progress`,{done:w.value,total:T.value})),1)]),_:1})):s(``,!0)}}),[[`__scopeId`,`data-v-c60d5ae9`]]);function b(e,t){if(e===``)return 0;let n=e.toLowerCase(),r=t.toLowerCase(),i=0,a=0,o=-2;for(let e of n){let t=-1;for(let n=a;n<r.length;n++)if(r[n]===e){t=n;break}if(t===-1)return null;i+=t===o+1?5:1;let n=t>0?r[t-1]:``;(t===0||n===`/`||n===`-`||n===`_`||n===`.`)&&(i+=2),o=t,a=t+1}return i-t.length*.01}function x(e,t,n,r=b){if(n<=0)return[];let i=[];for(let a of t){let t=r(e,a);if(t===null||i.length===n&&t<=i[n-1].score)continue;let o=i.length;for(;o>0&&i[o-1].score<t;)o--;i.splice(o,0,{item:a,score:t}),i.length>n&&i.pop()}return i.map(e=>e.item)}var S=new Set([`not-found`,`not-purged`,`workspace-busy`,`worktree-not-owned`,`project-unavailable`,`path-conflict`,`branch-in-use`,`recovery-source-unavailable`,`git-failed`]),C=`https://github.com/loicngr/kobo/blob/develop/CONFIGURATION.md#restoring-a-purged-workspace`;function w(){let e=p(),t=d(),{t:n}=f();async function r(r){if(!e.restoringWorktreeIds.includes(r))try{await e.restoreWorktree(r),t.notify({type:`positive`,message:n(`workspacePage.worktreeRestoreSuccess`),position:`top`})}catch(e){let r=e instanceof m&&e.code&&S.has(e.code)?e.code:`git-failed`;t.notify({type:`negative`,message:n(`workspacePage.restoreError.${r}`),position:`top`,actions:[{label:n(`common.details`),handler:()=>window.open(C,`_blank`,`noopener,noreferrer`)}]})}}return{restoreWorktree:r}}var T={"claude-code":!0,codex:!0};function E(e){return e?T[e]??!0:!0}var D={"claude-code":!0,codex:!0};function O(e){return e?D[e]??!0:!0}var k={"claude-code":!0,codex:!0};function A(e){return e?k[e]??!1:!1}export{b as a,v as c,w as i,O as n,x as o,E as r,y as s,A as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e={"tours.settings.skills.title":`Elegir una suite de skills`,"tours.settings.skills.description":`Empieza con Standard: no requiere extensiones. Superpowers, gstack, ECC y sus combinaciones usan skills ya instalados y disponibles para el motor elegido. La selección cambia las instrucciones del agente; no instala skills ni concede permisos. Personalizado permite escribir tus propias instrucciones. Guarda tu elección para aplicarla.`,"tours.settings.git.description":`Elige cuándo los agentes pueden crear commits, hacer push o publicar. Define convenciones Git y prefijos de ramas.`,"tours.settings.git.title":`Flujo de trabajo Git`,"settings.reviewPromptHint":`Instrucciones enviadas al agente al iniciar una revisión de código.`,"settings.help.git":`Preferencias de commit, push y publicación, convenciones Git y prefijos de ramas.`,"settings.nav.promptTemplates":`Plantillas de prompts`,"settings.nav.git":`Git`,"integration.direct":`Conexión directa`,"integration.directHint":`Opcional: configure un comando MCP de confianza en este servidor sin configuración Claude. Ponga las credenciales en variables de entorno. Guardar reemplaza toda la conexión; active la integración por separado.`,"integration.agentScope":`Las conexiones activadas se transmiten a Claude Code y Codex al iniciar o reanudar el agente. Detén el agente en curso para aplicar los cambios. Las configuraciones MCP personales son independientes.`,"integration.directOverrides":`La conexión directa guardada tiene prioridad. Elimínala para usar una entrada MCP de Claude.`,"integration.stored":`Hay una conexión privada guardada. Sus valores nunca se devuelven al navegador.`,"integration.example":`Ejemplo: {example}`,"integration.tokenExample":`TU_TOKEN_NOTION`,"integration.packageExample":`tu-paquete-mcp`,"integration.variableExample":`TU_VARIABLE`,"integration.valueExample":`tu-valor`,"integration.command":`Ejecutable`,"integration.args":`Argumentos (array JSON)`,"integration.environment":`Entorno y credenciales (objeto JSON)`,"integration.failed":`No se pudo cargar o guardar la conexión. Revise el JSON y el almacenamiento local.`,"integration.saved":`Conexión guardada. Active la integración y pruebe la conexión.`,"integration.save":`Reemplazar conexión`,"integration.clear":`Eliminar conexión directa`,"settings.notificationSoundReady":`Tono de finalización`,"settings.customSounds":`Sonidos importados`,"settings.customSoundsHint":`Importa tus propios sonidos de notificación ({count} como máximo, {size} MB cada uno, .wav .mp3 .ogg .webm). Se guardan en el directorio de datos de Kōbō y aparecen en todos los selectores de abajo.`,"settings.customSoundsImport":`Importar un sonido`,"settings.customSoundsFull":`Límite alcanzado ({count} sonidos). Elimina uno antes de importar otro.`,"settings.customSoundsError.type":`Formato no compatible. Usa un archivo .wav, .mp3, .ogg o .webm.`,"settings.customSoundsError.size":`Archivo demasiado grande. El límite es {size} MB.`,"settings.customSoundsError.count":`Límite alcanzado ({count} sonidos). Elimina uno antes de importar otro.`,"settings.customSoundsError.failed":`No se pudo completar la acción. Comprueba la conexión e inténtalo de nuevo.`,"setup.check.worktrees":`Directorio de worktrees`,"setup.fix.worktrees":`Revise el destino de worktrees en los ajustes y sus permisos de escritura.`,"setup.title":`Configurar la primera tarea`,"setup.intro":`Elija un motor y un proyecto Git local. No necesita skills ni integraciones.`,"setup.project":`Directorio local del proyecto`,"setup.credentials":`Inicie sesión en este servidor con claude /login o codex login, o configure su clave API. Estas comprobaciones no envían prompts de pago.`,"setup.permissions":`Empiece con un plan. Elija explícitamente los permisos en el formulario; un worktree no aísla su equipo.`,"setup.check":`Comprobar entorno`,"setup.failed":`No se pudo completar la acción. Revise la conexión y vuelva a intentarlo.`,"setup.start":`Describir mi primera tarea`,"setup.settings":`Abrir ajustes`,"setup.skip":`Omitir por ahora`,"setup.status.ok":`Disponible`,"setup.status.missing":`Falta`,"setup.status.error":`Requiere atención`,"setup.status.unknown":`Sin verificar`,"setup.check.node":`Node.js`,"setup.check.platform":`Plataforma`,"setup.check.git":`Git`,"setup.check.shell":`Bash`,"setup.check.storage":`Directorio de datos`,"setup.check.runtime":`Paquete del motor`,"setup.check.authentication":`Autenticación`,"setup.check.model":`Acceso al modelo`,"setup.check.repository":`Repositorio Git`,"setup.check.firstCommit":`Primer commit`,"setup.check.projectWritable":`Escritura en el proyecto`,"setup.fix.node":`Instale Node.js 24.15 o posterior.`,"setup.fix.platform":`Use Linux, macOS o WSL2; Windows nativo no está soportado.`,"setup.fix.git":`Instale Git en este servidor.`,"setup.fix.shell":`Instale Bash en este servidor.`,"setup.fix.storage":`Revise KOBO_HOME y los permisos del directorio.`,"setup.fix.runtime":`Reinstale Kōbō con las dependencias opcionales del motor.`,"setup.fix.authentication":`Inicie sesión con el proveedor elegido. La primera tarea verificará el acceso.`,"setup.fix.model":`Elija Auto o un modelo disponible para su cuenta.`,"setup.fix.repository":`Elija un directorio de trabajo Git existente.`,"setup.fix.firstCommit":`Cree el primer commit antes de crear un worktree.`,"setup.fix.projectWritable":`Elija un directorio de proyecto con permiso de escritura.`,"handoff.freshTitle":`Continuar en una sesión nueva`,"handoff.switchTitle":`Cambiar de LLM`,"handoff.warning":`El trabajo actual se interrumpe de inmediato. Una sesión nueva continúa automáticamente en el mismo workspace, conservando las tareas y el historial.`,"handoff.generate":`Generar un traspaso con el agente actual`,"handoff.generateHint":`Desactiva esta opción si se ha agotado su cuota. Kōbō transmitirá el objetivo, las tareas, el estado de Git y el historial sin llamar al LLM actual.`,"handoff.start":`Iniciar sesión nueva`,"handoff.stopping":`Deteniendo el agente actual`,"handoff.generating":`Preparando el traspaso`,"handoff.starting":`Iniciando la sesión nueva`,"handoff.completed":`Sesión nueva iniciada`,"handoff.failed":`Error en el traspaso`,"handoff.interrupted":`Traspaso interrumpido`,"handoff.cancelled":`Traspaso cancelado`,"handoff.skip":`Continuar sin resumen del LLM`,"handoff.cancel":`Cancelar traspaso`,"handoff.report":`Leer traspaso`,"handoff.source":`Sesión anterior`,"handoff.progress":`Traspaso de sesión en curso`,"handoff.blocked":`Resuelve o cancela el traspaso para continuar.`,"handoff.error":`No se pudo preparar el traspaso de sesión.`,"handoff.loadFailed":`No se pudo cargar el estado del traspaso.`,"handoff.status":`Traspaso de sesión`,"chat.externalLlm":`LLM externo · {name}`,"search.indexing":`Indexando el historial: {processed}/{total}. Resultados parciales.`,"search.indexUnavailable":`Índice de búsqueda no disponible. Inténtalo más tarde.`,"blockers.setupConfiguration":`No hay script de preparación configurado. Añade uno en la sección Scripts de los ajustes.`,"blockers.noWorkspace":`Selecciona un workspace para usar esta acción.`,"blockers.purged":`Restaura el worktree desde el aviso del workspace antes de esta acción.`,"blockers.archived":`Desarchiva el workspace desde su menú para usar esta acción.`,"blockers.operation":`Espera a que termine la operación actual.`,"blockers.agentBusy":`Espera a que termine el turno o detén el agente desde la conversación.`,"blockers.configuration":`Configura esta función en los ajustes del proyecto.`,"blockers.settings":`Abrir ajustes`,"workspaceSort.label":`Ordenar workspaces`,"workspaceSort.activity":`Última actividad`,"workspaceSort.created":`Fecha de creación`,"workspaceSort.name":`Nombre`,"workspaceSort.attention":`Prioridad de atención`,"workspaceSort.asc":`Ascendente`,"workspaceSort.desc":`Descendente`,"workspaceSort.hint":`Orden dentro de cada grupo, incluidos los archivados. Consultar un workspace no cambia su última actividad.`,"model.tooltip":`Modelo usado por el agente en este workspace`,"reasoning.tooltip":`Nivel de razonamiento usado por el agente en este workspace`,"thinking.label":`Razonamiento`,"thinking.noDetails":`El agente está razonando…`,"common.save":`Guardar`,"common.duplicate":`Duplicar`,"common.confirm":`Confirmar`,"common.cancel":`Cancelar`,"common.open":`Abrir`,"common.retry":`Reintentar`,"common.delete":`Eliminar`,"common.close":`Cerrar`,"workspace.deleteTitle":`Eliminar workspace`,"workspace.deleteTypeBranch":`Vuelva a escribir el nombre de la rama para confirmar`,"workspace.deleteConsequences":`Esto elimina el worktree y todo el historial.`,"workspace.deleteFailed":`No se pudo eliminar el workspace.`,"workspace.archiveFailed":`No se pudo archivar el workspace.`,"tasks.updateFailed":`No se pudo actualizar la tarea.`,"dashboard.tooltip":`Panel`,"dashboard.title":`Panel`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`Ningún workspace activo.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Estado`,"dashboard.attention":`Atención`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Actividad`,"dashboard.prOpen":`abierta`,"reliability.title":`Fiabilidad de los modelos`,"reliability.subtitle":`Cómo terminó realmente cada motor y modelo en este equipo.`,"reliability.empty":`Todavía no hay ninguna sesión finalizada.`,"reliability.loadFailed":`No se pudieron cargar las cifras de fiabilidad.`,"reliability.engine":`Motor`,"reliability.model":`Modelo`,"reliability.sessions":`Sesiones`,"reliability.completed":`Completadas`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Detenidas`,"reliability.errors":`Errores`,"reliability.unknown":`Desconocido`,"reliability.median":`Mediana`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}min {s}s`,"reliability.durationHours":`{h}h {m}min`,"update.available":`Hay una versión más reciente de Kōbō: {version}`,"update.how":`Cómo actualizar`,"common.dismiss":`Descartar`,"common.details":`Detalles`,"common.ok":`OK`,"whatsNew.title":`Novedades`,"common.loading":`Cargando...`,"common.search":`Buscar...`,"common.refresh":`Actualizar`,"common.copy":`Copiar`,"common.copied":`Copiado al portapapeles`,"common.copyFailed":`Error al copiar`,"common.add":`Añadir`,"folderPicker.title":`Elegir una carpeta`,"folderPicker.parent":`Carpeta superior`,"folderPicker.empty":`Sin subcarpetas`,"folderPicker.select":`Elegir esta carpeta`,"common.start":`Iniciar`,"common.stop":`Detener`,"common.archive":`Archivar`,"common.unarchive":`Desarchivar`,"common.selectWorkspace":`Selecciona un workspace`,"common.noResults":`Sin resultados para "{query}"`,"common.send":`enviar`,"common.newLine":`nueva línea`,"common.history":`historial`,"common.justNow":`ahora mismo`,"common.minutesAgo":`hace {count}m`,"common.hoursAgo":`hace {count}h`,"common.daysAgo":`hace {count}d`,"model.auto":`Auto`,"model.fable51":`Fable 5.1`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`El modelo más capaz - reemplaza a Fable 5, contexto 1M, adaptive thinking`,"model.mythos5Description":`Fable 5.1 sin clasificadores de seguridad — acceso limitado (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude elige el modelo óptimo`,"model.opus5Description":`Para código agéntico complejo y trabajo empresarial, contexto 1M`,"model.opus48Description":`Opus más capaz — coding agéntico long-horizon, contexto 1M por defecto, esfuerzo high por defecto`,"model.opus47ClassicDescription":`Último Opus, el más capaz`,"model.opus471mDescription":`Último Opus, contexto 1M`,"model.opusClassicDescription":`El más potente`,"model.opus1mDescription":`El más potente, contexto 1M`,"model.sonnet5Description":`La mejor combinación de velocidad e inteligencia, contexto 1M`,"model.sonnetClassicDescription":`Equilibrado`,"model.sonnet1mDescription":`Equilibrado, contexto 1M`,"model.haikuDescription":`El más rápido`,"model.gpt6astra":`GPT-6 Astra`,"model.gpt6astraDescription":`El modelo frontera más capaz, contexto 1M (requiere autenticación ChatGPT)`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`El modelo de codificación agéntica más avanzado (requiere autenticación ChatGPT)`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Modelo de codificación agéntica equilibrado para el día a día (requiere autenticación ChatGPT)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Modelo de codificación agéntica rápido y económico (requiere autenticación ChatGPT)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Recomendado para código complejo (requiere autenticación ChatGPT)`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Alternativa por defecto — razonamiento sólido, compatible con clave API`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Rápido y eficiente — ideal para tareas reactivas y subagentes`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimizado para trabajo profesional y agentes de larga duración`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Modelo especializado en código para ingeniería de software compleja`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`ninguno`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Deja que el motor decida`,"reasoning.minimalDescription":`Razonamiento más rápido y superficial`,"reasoning.noneDescription":`Sin razonamiento adicional`,"reasoning.lowDescription":`Más rápido, menos profundidad`,"reasoning.mediumDescription":`Equilibrado`,"reasoning.highDescription":`Más profundidad`,"reasoning.xhighDescription":`Profundidad extendida, tareas largas`,"reasoning.maxDescription":`Profundidad máxima`,"agentPermissionMode.label":`Modo de permisos`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Aceptar ediciones`,"agentPermissionMode.interactive":`Interactivo`,"agentPermissionMode.tooltip":`Cómo gestiona el agente los permisos de las herramientas. Plan: solo lectura, sin escrituras. Bypass: omitir todas las preguntas. Estricto: auto-aceptar ediciones de archivos, respetar allow/deny para el resto. Interactivo: preguntar al usuario antes de cada herramienta mediante el panel de permisos.`,"agentPermissionMode.autoLoopOverride":`El auto-loop fuerza un modo distinto a Plan — Plan bloquea las herramientas MCP y las ediciones que el bucle necesita. Elige Bypass, Estricto o Interactivo.`,"agentPermissionMode.autoLoopLocked":`Bloqueado en Bypass mientras el auto-loop está activo — cualquier otro modo detendría el bucle en las preguntas de permiso. AskUserQuestion sigue funcionando.`,"workspaceList.title":`Workspaces`,"workspaceList.a11y.groupToggle":`Grupo {group}, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Requiere atención`,"workspaceList.running":`En ejecución`,"workspaceList.idle":`Inactivo`,"workspaceList.archived":`Archivados`,"workspaceList.archivedToast":`«{name}» archivado`,"workspaceList.archivedUndo":`Deshacer`,"workspaceList.unarchiveFailed":`No se pudo desarchivar este workspace`,"workspaceList.noWorkspaces":`Aún no hay workspaces`,"workspaceList.loadFailed":`No se pudieron cargar tus workspaces`,"workspaceList.loadFailedHint":`Es un fallo de conexión, no una cuenta vacía.`,"workspaceList.footer":`{count} workspace | {count} workspaces`,"workspaceList.footerRunning":`{count} en ejecución`,"workspaceList.deleteDialog.title":`¿Eliminar workspace?`,"workspaceList.deleteDialog.deleteLocal":`Eliminar rama local`,"workspaceList.deleteDialog.deleteRemote":`Eliminar rama remota`,"workspaceList.deleteDialog.warning":`Advertencia: esta acción es irreversible en el remoto.`,"workspaceList.deleteArchivedDialog.tooltip":`Eliminar todos los workspaces archivados`,"workspaceList.deleteArchivedDialog.title":`¿Eliminar todos los workspaces archivados?`,"workspaceList.deleteArchivedDialog.message":`Esto eliminará permanentemente los {count} workspaces archivados. Esta acción no se puede deshacer.`,"workspaceList.deleteArchivedDialog.typeCount":`Escribe {count} para confirmar`,"workspacePage.configure":`Configurar`,"workspacePage.permissions":`Permisos`,"workspacePage.selectWorkspace":`Selecciona un workspace para comenzar`,"workspacePage.commandPalettePlaceholder":`Buscar comandos…`,"workspacePage.commandPaletteEmpty":`No hay comandos coincidentes`,"workspacePage.commandFocusChat":`Enfocar la entrada del chat`,"workspacePage.commandSearchHistory":`Buscar en el historial del workspace`,"workspacePage.commandTogglePanel":`Mostrar u ocultar el panel lateral`,"workspacePage.commandStartAgent":`Iniciar agente`,"workspacePage.commandStopAgent":`Detener agente`,"workspacePage.commandOpenSettings":`Abrir los ajustes`,"workspacePage.commandOpenCreate":`Crear un workspace`,"workspacePage.commandOpenSearch":`Búsqueda global`,"workspacePage.commandOpenHealth":`Página de salud`,"workspacePage.commandOpenChangelog":`Registro de cambios`,"workspacePage.commandGroupWorkspaces":`Ir a un workspace`,"workspacePage.commandPaletteHint":`Paleta de comandos`,"workspacePage.session":`Sesión #{n}`,"workspacePage.newSession":`+ Nueva sesión`,"workspacePage.renameSession":`Renombrar`,"workspacePage.renameSessionTitle":`Renombrar sesión`,"workspacePage.sessionNameLabel":`Nombre de sesión`,"workspacePage.sessionEndedNotice":`Esta sesión ha terminado. Crea una nueva sesión para continuar.`,"workspacePage.renameFailed":`Error al renombrar`,"workspacePage.copySessionId":`Copiar ID de sesión`,"workspacePage.deleteSession":`Eliminar sesión`,"workspacePage.deleteSessionTitle":`¿Eliminar sesión?`,"workspacePage.deleteSessionConfirm":`Esto elimina permanentemente esta sesión y su historial de conversación.`,"workspacePage.deleteSessionFailed":`No se pudo eliminar la sesión`,"workspacePage.noEngineSessionId":`Todavía no hay ID de sesión — el agente aún no ha iniciado esta sesión`,"workspacePage.createSessionFailed":`Error al crear la sesión`,"workspacePage.startFailed":`Error al iniciar`,"workspacePage.stopFailed":`Error al detener`,"workspacePage.interrupt":`Interrumpir`,"workspacePage.interrupted":`Agente interrumpido — esperando tu próximo mensaje`,"workspacePage.lastAgentEvent":`Último evento {when}`,"workspacePage.agentStopping":`Deteniendo…`,"workspacePage.agentNotRunning":`Ningún agente en ejecución — el estado está obsoleto`,"contextMenu.restoreWorktree":`Restaurar worktree`,"workspacePage.restoringWorktree":`Restaurando…`,"workspacePage.worktreeRestoreSuccess":`Worktree restaurado`,"workspacePage.worktreeRestoreLimitations":`Recrea los archivos de Git incluidos en commits. No restaura las dependencias ni los archivos locales descartados anteriormente.`,"workspacePage.restoreError.not-found":`Este workspace ya no existe. Actualiza la lista de workspaces.`,"workspacePage.restoreError.not-purged":`Este workspace no está marcado como purgado. Actualízalo y comprueba su directorio de trabajo.`,"workspacePage.restoreError.workspace-busy":`Hay otra operación en curso en este workspace. Espera a que termine e inténtalo de nuevo.`,"workspacePage.restoreError.worktree-not-owned":`Kōbō no gestiona este worktree. Restáuralo manualmente en su proyecto original.`,"workspacePage.restoreError.project-unavailable":`El proyecto original no está disponible. Vuelve a conectar su disco o restaura el proyecto en su ruta original e inténtalo de nuevo.`,"workspacePage.restoreError.path-conflict":`Otro directorio o checkout ocupa la ruta del worktree. Mueve el directorio en conflicto o sigue las instrucciones de recuperación manual en Detalles.`,"workspacePage.restoreError.branch-in-use":`La rama de trabajo ya está en uso en otro checkout. Utiliza ese checkout o libera la rama antes de volver a intentarlo.`,"workspacePage.restoreError.recovery-source-unavailable":`No se encuentran la rama de trabajo ni el commit guardado. Comprueba el acceso remoto o consulta la recuperación manual en Detalles.`,"workspacePage.restoreError.git-failed":`La restauración ha fallado. Comprueba el acceso a Git y los permisos del disco e inténtalo de nuevo. Detalles abre la guía de recuperación manual.`,"workspacePage.archivedBanner":`Workspace archivado — solo lectura`,"workspacePage.worktreePurgedBanner":`Worktree eliminado — historial conservado`,"workspacePage.worktreePurgedTooltip":`Restaurar worktree recrea el directorio de trabajo y desarchiva este workspace. Se conservan la conversación, las tareas y las sesiones. No se inicia ningún agente ni servidor de desarrollo.`,"workspacePage.pendingInitialPromptBanner":`Hay un prompt inicial pendiente — el agente nunca lo recibió (el script de setup falló o el workspace nunca se inició). Haz clic en Iniciar para enviarlo ahora.`,"workspacePage.unarchived":`Workspace desarchivado`,"workspacePage.unarchiveFailed":`Error al desarchivar`,"workspacePage.interruptFailed":`Error al interrumpir`,"workspacePage.interruptHint":`Interrumpir el turno actual sin terminar la sesión.`,"workspacePage.interruptTooltip":`Interrupción suave (como Escape) — detiene la herramienta actual pero mantiene la sesión activa`,"workspacePage.pendingNextRun":`Se aplicará en el próximo inicio`,"workspacePage.activeSessionModel":`En uso: {model}`,"workspacePage.activeSessionModelTooltip":`Modelo utilizado actualmente por la sesión seleccionada`,"workspacePage.switchEngine":`Cambiar motor`,"workspacePage.switchEngineHint":`Continuar este workspace con otro motor de agente`,"workspacePage.moreActions":`Más acciones`,"workspacePage.switchEngineTitle":`Cambiar motor de agente`,"workspacePage.switchEngineWarning":`El agente actual se detendrá y se iniciará una sesión nueva en el mismo worktree.`,"workspacePage.engineLabel":`Motor`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Traspaso para el nuevo motor`,"workspacePage.engineHandoffHint":`Revisa o edita el contexto que se enviará al nuevo agente.`,"workspacePage.confirmSwitchEngine":`Cambiar motor`,"workspacePage.switchEngineFailed":`No se pudo cambiar el motor`,"whip.dispatchFailed":`No se pudo enviar el mensaje del látigo`,"whip.phrase1":`Continúa, por favor.`,"whip.phrase2":`Sigue con las tareas previstas.`,"whip.phrase3":`Pasa al siguiente paso.`,"whip.phrase4":`Comprueba el progreso y continúa.`,"whip.phrase5":`Continúa dentro del alcance acordado.`,"search.title":`Búsqueda`,"search.tooltip":`Buscar en el historial de agentes`,"search.placeholder":`Buscar en todos los mensajes de agentes…`,"search.includeArchived":`Incluir workspaces archivados`,"search.loading":`Buscando…`,"search.noResults":`Sin resultados`,"search.error":`Búsqueda fallida: {message}`,"search.resultCount":`{n} resultado(s)`,"search.eventType.userMessage":`Tú`,"search.eventType.agentOutput":`Agente`,"activityFeed.empty":`Aún no hay actividad`,"activityFeed.emptyHint":`Inicia un workspace para ver la salida del agente aquí`,"activityFeed.initialPrompt":`Prompt inicial`,"activityFeed.you":`Tú`,"activityFeed.agent":`Agente`,"activityFeed.question":`Pregunta`,"activityFeed.goToPrevious":`Ir al mensaje anterior`,"activityFeed.scrollToBottom":`Ir al final`,"activityFeed.sendAnswers":`Enviar respuestas`,"agentBusy.banner":`El agente está ocupado`,"agentBusy.subagentsRunning":`1 sub-agente en ejecución | {n} sub-agentes en ejecución`,"agentBusy.viewSubagents":`Ver sub-agentes`,"agentBusy.pendingMessage":`Esperando — el agente está ocupado`,"terminal.title":`Terminal`,"terminal.open":`Abrir terminal`,"terminal.close":`Cerrar terminal`,"terminal.noWorkspace":`Seleccione un espacio de trabajo`,"terminal.noWorktree":`Worktree aún no creado`,"terminal.error":`Error del terminal`,"terminal.exited":`Terminal cerrado`,"terminal.disconnected":`Conexión perdida`,"terminal.reconnecting":`Reconectando… (intento {attempt} de {max})`,"terminal.reconnect":`Reconectar`,"chatInput.placeholder":`Mensaje... (/ para skills)`,"chatInput.fileSearchHint":`buscar un archivo`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Adjuntar imagen`,"chatInput.queueBanner":`Mensaje en cola — se enviará cuando el agente termine`,"chatInput.forceQueue":`Forzar envío`,"chatInput.searchHistory":`buscar`,"chatInput.commandPalette":`comandos`,"chatInput.shortcuts":`Atajos de teclado`,"chatInput.cancelQueue":`Cancelar cola`,"chatInput.autoLoopBanner":`Auto-loop activo — deténlo para enviar un mensaje`,"chatInput.awaitingUserBanner":`El agente espera tu respuesta arriba — responde mediante el panel de la pregunta`,"chatInput.autoLoopStop":`Detener`,"koboCommand.checkProgressDesc":`Verificar el progreso de las tareas y criterios de aceptación`,"chatInput.uploading":`Subiendo...`,"voice.title":`Transcripción de voz`,"voice.enabled":`Activar transcripción de voz local`,"voice.pttKey":`Tecla push-to-talk`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Espacio`,"voice.language":`Idioma (auto o código)`,"voice.model":`Modelo activo`,"voice.commandPath":`Ruta del binario Whisper (opcional)`,"voice.ffmpegPath":`Ruta del binario ffmpeg (opcional)`,"voice.temperature":`Temperatura`,"voice.temperatureHint":`Más bajo = más determinista; más alto = más flexible pero potencialmente menos estable.`,"voice.initialPrompt":`Prompt inicial (opcional)`,"voice.initialPromptHint":`Contexto opcional para ayudar a Whisper con nombres, siglas o vocabulario técnico.`,"voice.translateToEnglish":`Traducir al inglés`,"voice.translateToEnglishHint":`Si se activa, el audio no inglés se traduce al inglés en lugar de transcribirse tal cual.`,"voice.suppressNst":`Suprimir tokens no vocales`,"voice.suppressNstHint":`Intenta reducir artefactos no vocales en la transcripción.`,"voice.installLink":`Instalar whisper.cpp`,"voice.installGuideTitle":`Guía de instalación`,"voice.installGuideIntro":`Instala whisper.cpp y ffmpeg, luego configura las rutas de binarios abajo si hace falta.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Después del build con CMake, el binario de Whisper suele estar en: whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Después, configura “Ruta del binario Whisper” y “Ruta del binario ffmpeg” en esta sección (o déjalo vacío si están en PATH).`,"voice.noneModel":`Sin modelo activo`,"voice.notInstalled":`no instalado`,"voice.download":`Descargar`,"voice.delete":`Eliminar`,"voice.holdToTalk":`Mantén pulsado para hablar`,"voice.recording":`Grabando...`,"voice.transcribing":`Transcribiendo...`,"voice.notSupported":`La grabación de voz no es compatible con este navegador`,"voice.errorMicPermission":`Permiso de micrófono denegado`,"voice.errorTranscription":`Falló la transcripción de voz`,"voice.downloadFailed":`Falló la descarga del modelo`,"voice.deleteFailed":`Falló la eliminación del modelo`,"voice.errorDisabled":`La transcripción de voz está desactivada en ajustes`,"voice.errorModelMissing":`No hay un modelo de voz activo configurado`,"voice.errorModelNotInstalled":`El modelo de voz activo no está instalado`,"voice.errorAudioInvalid":`La captura de audio es inválida o vacía`,"voice.errorLanguageInvalid":`La configuración del idioma de voz es inválida`,"voice.errorRuntimeMissing":`El runtime de Whisper no está instalado o no está en el PATH`,"voice.maxDurationReached":`Se alcanzó la duración máxima de grabación`,"voice.runtimeReady":`Runtime listo: {command}`,"voice.runtimeMissing":`Falta runtime: {command}`,"voice.ffmpegReady":`ffmpeg listo`,"voice.ffmpegMissing":`falta ffmpeg`,"voice.sectionRuntime":`Estado del runtime`,"voice.sectionActivation":`Activación`,"voice.sectionModels":`Modelos Whisper`,"voice.sectionAdvanced":`Opciones avanzadas`,"voice.sectionBehavior":`Comportamiento de la transcripción`,"voice.sectionBinaries":`Rutas de los binarios`,"voice.downloadModels":`Descargar un modelo`,"voice.cancelFailed":`No se pudo cancelar la descarga`,"attachments.error.upload":`Error al subir el archivo. Quita el adjunto e inténtalo de nuevo.`,"attachments.add":`Adjuntar archivos`,"attachments.remove":`Quitar adjunto`,"attachments.hint":`Pega o arrastra archivos aquí · máximo {count} · {size} MB cada uno · {total} MB en total`,"attachments.error.type":`Usa imágenes PNG, JPEG, GIF o WebP, PDF, Markdown o documentos de texto (TXT, CSV, JSON, YAML, XML, LOG, RST, TOML).`,"attachments.error.size":`Cada archivo debe tener contenido y no superar los 50 MB.`,"attachments.error.count":`Puedes adjuntar hasta 10 archivos.`,"attachments.error.total":`Los adjuntos no deben superar los 50 MB en total.`,"attachments.descriptionRequired":`Escribe una descripción o adjunta un archivo.`,"createPage.title":`Crear un workspace`,"createPage.fromTemplate":`Desde una plantilla`,"createPage.fromTemplateNone":`Ninguna`,"createPage.saveAsTemplate":`Guardar como plantilla`,"createPage.saveTemplateTitle":`Guardar este formulario como plantilla`,"createPage.saveTemplateName":`Nombre de la plantilla`,"createPage.saveTemplateOverwrite":`Ya existe una plantilla llamada «{name}». ¿Sobrescribirla?`,"createPage.templateSaved":`Plantilla «{name}» guardada`,"createPage.templateApplied":`Plantilla «{name}» aplicada`,"createPage.duplicatedFrom":`Duplicado desde «{name}»`,"createPage.duplicateLoadFailed":`No se pudo cargar el workspace a duplicar.`,"createPage.templateSaveFailed":`No se pudo guardar la plantilla.`,"createPage.presetProjectUnknown":`Esta plantilla apunta a un proyecto que ya no está configurado; se mantuvo el proyecto actual.`,"createPage.copySuffix":`(copia)`,"createPage.subtitle":`Describe la misión, elige un proyecto y configura el agente.`,"createPage.sectionMission":`Misión`,"createPage.sectionMissionHint":`Proporciona al agente un objetivo claro y el contexto necesario.`,"createPage.workspaceNameLabel":`Nombre del workspace`,"createPage.descriptionLabel":`Descripción de la misión`,"createPage.sources":`Fuentes opcionales`,"createPage.sectionGit":`Proyecto Git`,"createPage.sectionGitHint":`Elige el repositorio, la rama de origen y el modo de worktree.`,"createPage.worktreeMode":`Modo de worktree`,"createPage.worktreeNew":`Nuevo worktree aislado`,"createPage.worktreeExisting":`Reutilizar un worktree existente`,"createPage.projectLabel":`Proyecto`,"createPage.sourceBranch":`Rama de origen`,"createPage.workingBranchPreview":`Vista previa de la rama de trabajo`,"createPage.branchNamePending":`nombre-del-workspace`,"createPage.sectionAgent":`Agente`,"createPage.sectionAgentHint":`Revisa los ajustes de ejecución o activa la automatización.`,"createPage.configureAgent":`Configurar el agente`,"createPage.advancedOptions":`Opciones avanzadas`,"createPage.keyboardHint":`Pulsa Ctrl/Cmd + Enter para crear el workspace.`,"createPage.createWorkspace":`Crear workspace`,"createPage.compareEngines":`Comparar dos motores`,"createPage.engineA":`Motor A`,"createPage.engineB":`Motor B`,"createPage.compareBrainstormLocked":`Modo comparación: cada motor hace el brainstorming con el modelo y el esfuerzo definidos en su bloque de arriba.`,"createPage.compareEnginesHint":`Crea dos workspaces a partir de esta tarea, uno por motor, en worktrees hermanos. Luego se pueden comparar sus diffs en paralelo.`,"createPage.compareNeedsNewWorktree":`Comparar dos motores requiere dos worktrees nuevos. Desactiva primero «usar un worktree existente».`,"createPage.compareNeedsSecondEngine":`Elige un segundo motor, distinto del primero, para la comparación.`,"comparison.title":`Comparación de motores`,"comparison.hint":`La misma tarea, ejecutada por cada motor en su propio worktree.`,"comparison.engine":`Motor`,"comparison.status":`Estado`,"comparison.tasks":`Tareas`,"comparison.commits":`Commits`,"comparison.files":`Archivos`,"comparison.diff":`Diff`,"comparison.messages":`Mensajes`,"comparison.messagesTitle":`Mensajes del agente / tus mensajes`,"comparison.questions":`Preguntas`,"comparison.tools":`Herramientas`,"comparison.errors":`Errores`,"comparison.tokens":`Tokens`,"comparison.tokensTitle":`Tokens de entrada / salida`,"comparison.sessions":`Sesiones`,"comparison.duration":`Duración`,"comparison.exportCsv":`Exportar en CSV`,"comparison.open":`Abrir`,"comparison.current":`Este`,"comparison.archived":`archivado`,"comparison.incomplete":`Solo existe un workspace de esta comparación. El otro nunca se creó, o se ha eliminado.`,"createPage.comparisonPartial":`Solo se crearon {count} de {total} workspaces. El que existe se puede usar por sí solo; elimínalo si prefieres empezar de nuevo.`,"createPage.notionEnabled":`Notion activado`,"createPage.importNotion":`Importar desde Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`La URL debe empezar por https://www.notion.so/ o https://app.notion.com/`,"createPage.notionAutoExtract":`Las subtareas y criterios de aceptación se extraerán automáticamente.`,"createPage.notionPanelChoiceLabel":`Esta URL apunta a una subpágina (?p=). ¿Sobre cuál quieres trabajar?`,"createPage.notionPanelOption":`Subpágina (panel)`,"createPage.notionPanelOptionDesc":`La página que estabas viendo — recomendado`,"createPage.notionParentOption":`Página principal`,"createPage.notionParentOptionDesc":`La épica / base de datos a la que pertenece`,"createPage.importSentry":`Importar Sentry`,"createPage.sentryEnabled":`Sentry activado`,"createPage.sentryPlaceholder":`https://tu-org.sentry.io/issues/123456`,"createPage.sentryValidation":`La URL debe apuntar a una issue de Sentry (/issues/<id>)`,"createPage.sentryAutoExtract":`La issue de Sentry se importará automáticamente`,"createPage.sentryExtractHint":`Kobo extraerá la issue y la escribirá en .ai/thoughts/`,"createPage.importPr":`Importar desde una PR`,"createPage.importPrRequiresProject":`Elige primero un proyecto`,"createPage.importPrNotSupported":`El forge de este proyecto no admite listar pull requests`,"createPage.lockedToPr":`Bloqueado a la PR #{number}`,"createPage.prReadyToCreate":`PR #{number} importada — el workspace puede crearse.`,"createPage.prResumeIntro":`Continuación del trabajo en la pull request existente #{number} "{title}" ({url}).`,"createPage.unlockPrCheckout":`Desbloquear`,"createPage.workspaceName":`Nombre del workspace (por defecto el título de la página Notion)`,"createPage.workspaceNamePlaceholder":`Nombre del workspace...`,"createPage.instructions":`Instrucciones adicionales (opcional)...`,"createPage.instructionsPlaceholder":`Describe la tarea...`,"createPage.tasks":`Tareas ({count})`,"createPage.addTask":`Añadir una tarea...`,"createPage.acceptanceCriteria":`Criterios de aceptación ({count})`,"createPage.addCriterion":`Añadir un criterio...`,"createPage.projectPath":`Introduce la ruta del proyecto`,"createPage.branchType":`Tipo de rama`,"createPage.branch":`Rama`,"createPage.noBranches":`No se encontraron ramas`,"createPage.enterPath":`Introduce la ruta del proyecto`,"createPage.skipSetupScript":`Omitir script de setup`,"createPage.worktreePickerLabel":`Worktree existente`,"createPage.noOrphanWorktrees":`No hay worktrees huérfanos en este proyecto`,"createPage.pickWorktreeRequired":`Selecciona un worktree para adjuntar`,"createPage.notionExtractHint":`Las subtareas y criterios de aceptación se extraerán de la página Notion.`,"createPage.errorCreating":`Error al crear el workspace.`,"createPage.branchAdjusted":"La rama ya existía — se creó `{branch}` en su lugar. La carpeta worktree correspondiente usa el mismo sufijo.","createPage.localSourceFallback":`Workspace creado desde la rama local (origin inalcanzable) — la base puede estar desactualizada.`,"createPage.validationNotionUrl":`Introduce una URL de Notion válida (https://www.notion.so/... o https://app.notion.com/...).`,"createPage.validationDescription":`Describe la tarea.`,"createPage.validationName":`Indica un nombre para el workspace.`,"createPage.validationPath":`Introduce la ruta del proyecto.`,"createPage.validationBranch":`Selecciona una rama.`,"createPage.validationFocusHint":`El campo a corregir está resaltado abajo.`,"createPage.progress.validate":`Validando la solicitud…`,"createPage.progress.fetch-source-branch":`Obteniendo la rama de origen desde origin…`,"createPage.progress.inspect-worktree":`Inspeccionando el worktree existente…`,"createPage.progress.extract-notion":`Extrayendo la página de Notion…`,"createPage.progress.extract-sentry":`Extrayendo la incidencia de Sentry…`,"createPage.progress.create-record":`Creando el workspace…`,"createPage.progress.create-tasks":`Creando tareas y criterios de aceptación…`,"createPage.progress.create-worktree":`Creando el worktree de git…`,"createPage.progress.write-conventions":`Escribiendo las convenciones de git…`,"createPage.progress.write-context-files":`Escribiendo los archivos de contexto…`,"createPage.progress.build-prompt":`Construyendo el prompt inicial…`,"createPage.progress.setup-script":`Ejecutando tu script de instalación…`,"createPage.progress.start-agent":`Iniciando el agente…`,"createPage.progress.rollback":`Deshaciendo la creación fallida…`,"createPage.progress.done":`Listo`,"createPage.progress.step":`Paso {index} de {total}`,"createPage.errorAtStep":`La creación falló en el paso «{step}»: {message}`,"createPage.override.title":`Dos de tus opciones fueron sustituidas`,"createPage.override.setup-script-forced":`Script de instalación omitido: volver a ejecutarlo en un worktree que ya preparaste podría destruir su contenido.`,"createPage.override.permission-mode-downgraded":`Modo de permisos cambiado de Plan a Bypass: un bucle autónomo no puede ejecutarse en Plan, que bloquea herramientas y ediciones.`,"settings.title":`Ajustes`,"settings.language":`Idioma`,"settings.projectColor":`Color`,"settings.projectColorClear":`Borrar`,"settings.projectColorDefault":`Por defecto (gris)`,"settings.workspaceListSection":`Lista de workspaces`,"settings.flattenWorkspaceList":`Lista plana de workspaces`,"settings.flattenWorkspaceListHint":`Muestra todos los workspaces en una lista plana con una etiqueta de proyecto, en lugar de agruparlos por proyecto.`,"workflow.title":`Flujo de Git`,"workflow.hint":`Estas preferencias guían a los agentes; no sustituyen los permisos del sistema. Prevalecen las instrucciones más restrictivas. Publicar nunca autoriza fusionar. Los nuevos espacios conservan una copia de estas opciones.`,"workflow.commit":`Crear commits`,"workflow.push":`Enviar la rama`,"workflow.publish":`Publicar PR/MR o comentarios`,"workflow.manual":`Manual — solicitud explícita`,"workflow.automatic":`Automático — cuando sea necesario`,"workflow.inherit":`Heredar`,"workflow.locked":`Detén el agente para cambiar estas preferencias. La sesión en curso ya las recibió.`,"workflow.updateFailed":`No se pudo guardar la preferencia. Comprueba la conexión e inténtalo de nuevo.`,"workflow.save":`Guardar preferencias de Git`,"workflow.saved":`Preferencias de Git guardadas.`,"workflow.planExecution":`Plan permite preparar la misión. Para ejecutar, elige explícitamente un modo de permisos compatible y reanuda el bucle.`,"settings.skillSuite.standard":`Estándar (sin extensiones)`,"settings.skillSuite.standardHint":`Flujo integrado sin una suite externa de habilidades.`,"settings.skillSuite.section":`Suite de skills`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Personalizado`,"settings.skillSuite.superpowersHint":`Workflow opinado TDD / brainstorm / plan (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Suite de Garry Tan — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Ambas suites se combinan — superpowers para la metodología (brainstorm / TDD / planes / revisión a nivel de principios), gstack para flujos concretos (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Framework de agentes de affaan-m — agents, skills, rules y hooks para planificar, probar, implementar, revisar y memorizar (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Las tres suites se combinan — superpowers para la metodología, gstack para flujos concretos, ECC para pases de revisión/implementación multiagente estructurados.`,"settings.skillSuite.customHint":`Compón los cinco prompts a continuación con los templates que elijas y edítalos libremente.`,"settings.skillSuite.reloadDefaults":`Restaurar predeterminados`,"settings.skillSuite.reloadDefaultsConfirm":`¿Reemplazar los cinco prompts personalizados con los valores agnósticos predeterminados?`,"settings.skillSuite.customPrompts":`Prompts personalizados`,"settings.skillSuite.agnostic":`Base agnóstica`,"settings.skillSuite.importPrompt":`Importar un template`,"settings.skillSuite.imported":`Template importado. Ahora puedes editarlo.`,"settings.skillSuite.importFailed":`No se pudo importar el template`,"settings.skillSuite.reviewTemplate":`Template de revisión`,"settings.skillSuite.autoLoopReviewGate":`Compuerta de revisión auto-loop`,"settings.skillSuite.autoLoopGroomingIntro":`Intro de grooming auto-loop`,"settings.skillSuite.qaTemplate":`Template QA`,"settings.skillSuite.brainstormingInstruction":`Instrucción de la fase de brainstorming`,"settings.global":`Global`,"settings.projects":`Proyectos`,"settings.globalSettings":`Ajustes globales`,"settings.defaultModel":`Modelo por defecto`,"settings.defaultModelClaude":`Modelo por defecto (Claude Code)`,"settings.defaultModelCodex":`Modelo por defecto (OpenAI Codex)`,"settings.agentPermissions":`Permisos del agente`,"settings.skipPermissions":`Omitir solicitudes de permisos (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Advertencia: desactivar esto hará que todos los permisos de herramientas (Write, Edit, Bash...) se denieguen automáticamente en modo headless. El agente solo podrá leer.`,"settings.notifications":`Notificaciones`,"settings.browserNotifications":`Notificación del navegador cuando el agente termina`,"settings.audioNotifications":`Notificación sonora cuando el agente termina`,"settings.enableBrowserNotifications":`Activar las notificaciones del navegador`,"settings.testBrowserNotification":`Probar la notificación`,"settings.browserNotificationGranted":`Notificaciones del navegador permitidas`,"settings.browserNotificationDenied":`Notificaciones del navegador bloqueadas`,"settings.browserNotificationAsk":`Se requiere permiso del navegador`,"settings.browserNotificationUnsupported":`Notificaciones del navegador no disponibles`,"settings.browserNotificationPermissionNeeded":`Permite las notificaciones del navegador para enviar una prueba.`,"settings.browserNotificationTestTitle":`Prueba de notificación de Kōbō`,"settings.browserNotificationTestBody":`Las notificaciones del navegador funcionan.`,"settings.enableAudio":`Activar el audio`,"settings.notificationSound":`Sonido de notificación`,"settings.notificationSoundHint":`Se reproduce cuando el agente termina o solicita permiso.`,"settings.questionSound":`Sonido de preguntas`,"settings.questionSoundHint":`Se reproduce solo cuando el agente te hace una pregunta.`,"settings.workspaceCreatedSound":`Sonido de creación del espacio de trabajo`,"settings.workspaceCreatedSoundHint":`Se reproduce después de crear un espacio de trabajo.`,"settings.notificationSoundPreview":`Escuchar`,"settings.notificationVolume":`Volumen`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Errores del agente`,"settings.agentErrorSoundHint":`Se reproduce para cuotas, límites de tasa y errores del agente.`,"settings.notificationSoundBasic":`Notificación básica`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Trabajo`,"settings.notificationSoundTravailTermine":`Trabajo terminado`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Va a explotar`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR y CI`,"settings.soundGeneral":`Sonido general`,"settings.soundNone":`Sin sonido`,"settings.prCiFailedSound":`CI fallida`,"settings.prCiRecoveredSound":`CI recuperada`,"settings.prChangesRequestedSound":`Cambios solicitados`,"settings.prApprovedSound":`PR aprobada`,"settings.prMergeConflictSound":`Conflicto de merge`,"settings.prReadyToMergeSound":`Lista para merge`,"settings.prMergedSound":`PR fusionada`,"settings.prCiFailedSoundHint":`Se reproduce cuando la CI pasa a estado fallido.`,"settings.prCiRecoveredSoundHint":`Se reproduce cuando la CI se recupera de un fallo.`,"settings.prChangesRequestedSoundHint":`Se reproduce cuando una revisión solicita cambios.`,"settings.prApprovedSoundHint":`Se reproduce cuando se aprueba la pull request.`,"settings.prMergeConflictSoundHint":`Se reproduce cuando se detecta un conflicto de merge.`,"settings.prReadyToMergeSoundHint":`Se reproduce cuando la pull request está lista para merge.`,"settings.prMergedSoundHint":`Se reproduce cuando se fusiona la pull request.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Modo de permisos por defecto`,"settings.defaultPermissionModeClaude":`Modo de permisos por defecto (Claude Code)`,"settings.defaultPermissionModeCodex":`Modo de permisos por defecto (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Modo aplicado al crear un workspace. Plan = solo lectura, Bypass = sin avisos, Estricto = auto-aceptar ediciones con allow-list, Interactivo = preguntar antes de cada herramienta.`,"settings.activityFeed":`Feed de actividad`,"settings.showThinkingBlocks":`Mostrar bloques de razonamiento de los agentes`,"settings.whipSettings":`Látigo`,"settings.whipSettingsHint":`Configura el atajo y el volumen opcionales del látigo.`,"settings.whipEnabled":`Activar el látigo`,"settings.whipEnabledHint":`Muestra el látigo interactivo en los workspaces activos compatibles.`,"settings.whipVolume":`Volumen del látigo`,"settings.whipVolumeMasterAudioDisabled":`El audio principal está desactivado. Activa las notificaciones de audio para ajustar el volumen del látigo; el valor guardado se conserva.`,"whip.overlayLabel":`Látigo interactivo`,"whip.overlayInstructions":`Mueve el puntero para controlar el látigo. Pulsa Intro o Espacio para hacerlo chasquear. Pulsa Escape para cerrar.`,"settings.whipShortcut":`Atajo del látigo`,"settings.whipShortcutHint":`Haz clic y luego pulsa el atajo que quieras usar.`,"settings.whipShortcutRecording":`Pulsa un atajo…`,"settings.whipShortcutButtonLabel":`Atajo del látigo: {shortcut}`,"settings.whipShortcutRecordingLabel":`Grabando el atajo del látigo. Pulsa un atajo…`,"settings.whipShortcutReset":`Restablecer atajo`,"settings.whipShortcutReserved":`Este atajo está reservado por el navegador.`,"settings.testIntegration":`Probar conexión`,"pwa.offline":`No tienes conexión. El chat y los agentes necesitan el servidor Kōbō.`,"pwa.reconnecting":`Reconectando al servidor Kōbō…`,"pwa.installReady":`Instala Kōbō como aplicación.`,"pwa.install":`Instalar`,"pwa.ignore":`Ignorar`,"pwa.updateReady":`Hay una actualización de Kōbō disponible.`,"pwa.reload":`Recargar`,"chat.searchWorkspaceHistory":`Buscar en el historial del workspace`,"chat.historySearch.user":`Tú`,"chat.historySearch.agent":`Agente`,"chat.openInGitDiff":`Abrir en el diff de Git`,"timeline.title":`Cronología de sesiones`,"timeline.export":`Exportar diagnóstico`,"timeline.unnamed":`Sesión de agente`,"timeline.tools":`{count} herramientas`,"timeline.errors":`{count} errores`,"settings.verboseMessages":`Mostrar mensajes detallados del sistema (task_progress, task_started)`,"settings.availableVariables":`Variables disponibles en las plantillas de prompt`,"settings.prPromptTemplate":`Plantilla de prompt PR`,"settings.prPromptPlaceholder":`Instrucciones para el agente al crear PRs en GitHub...`,"settings.prPromptHint":`Usa las variables listadas arriba (sintaxis de dobles llaves).`,"settings.reviewPromptTemplate":`Plantilla de prompt de revisión`,"settings.reviewPromptPlaceholder":`Instrucciones para el agente al revisar los cambios de la rama...`,"settings.ciFixPromptTemplate":`Plantilla de prompt «Reparar CI»`,"settings.ciFixPromptHint":`Se envía al agente cuando un workspace tiene la CI fallando. Variables (sintaxis con dobles llaves): pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Pedir al agente que diagnostique y arregle los jobs de CI que fallan...`,"settings.finalizationPromptTemplate":`Prompt de finalización del auto-loop`,"settings.finalizationPromptHint":`Prompt por defecto para la última iteración del auto-loop (controles de calidad finales). Se usa cuando un proyecto deja vacío su propio prompt de finalización.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Prompt inicial de Notion`,"settings.notionInitialPrompt.help":`Se añade al prompt de creación del workspace cuando el workspace tiene un ticket de Notion. Variables: {variables}.`,"settings.notionInitialPrompt.project":`Prompt inicial de Notion (anulación)`,"settings.sentryInitialPrompt":`Prompt inicial de Sentry`,"settings.sentryInitialPrompt.help":`Se añade al prompt de creación del workspace cuando el workspace tiene una issue de Sentry. Variables: {variables}.`,"settings.sentryInitialPrompt.project":`Prompt inicial de Sentry (anulación)`,"settings.initialPrompt.inheritHint":`Dejar en blanco para heredar. Escribe un carácter en blanco para desactivar la inyección a este nivel.`,"settings.resetToDefault":`Restablecer`,"settings.resetFailed":`No se pudo cargar el valor por defecto`,"settings.sentryIntegration":`Integración Sentry`,"settings.var.prNumber":`Número de PR (ej: 42)`,"settings.var.prUrl":`URL completa de la PR creada`,"settings.var.branchName":`Nombre de la rama de trabajo`,"settings.var.sourceBranch":`Rama fuente a la que apunta la PR`,"settings.var.workspaceName":`Nombre del workspace`,"settings.var.projectName":`Último segmento de la ruta del proyecto`,"settings.var.notionUrl":`URL de Notion si está definida, vacía en caso contrario`,"settings.var.commits":`Lista de commits entre source y head`,"settings.var.diffStats":`Resumen shortstat de Git (archivos, inserciones, eliminaciones)`,"settings.var.tasks":`Tareas regulares como lista de verificación`,"settings.var.acceptanceCriteria":`Criterios de aceptación como lista de verificación`,"settings.gitConventions":`Convenciones Git (global)`,"settings.gitConventionsPlaceholder":`# Convenciones Git...`,"settings.gitConventionsHint":`Estas convenciones se escriben en .ai/.git-conventions.md en cada nuevo workspace y deben ser seguidas por el agente antes de cualquier operación Git. Se anulan con convenciones por proyecto si están definidas.`,"settings.setupScript":`Script de setup`,"settings.cleanupScript":`Script de limpieza`,"settings.archiveScript":`Script de archivado`,"settings.archiveScriptHint":`Script de shell ejecutado en el servidor en el worktree cuando se archiva un workspace. Dejar vacío para desactivar.`,"settings.archiveScriptPlaceholder":`p. ej. limpiar contenedores, liberar espacio en disco…`,"settings.hook.sessionEndedTitle":`Hook: sesión finalizada`,"settings.hook.sessionEndedHint":`Se ejecuta cuando termina una sesión del agente, sea cual sea el motivo. Lee KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID y KOBO_SESSION_EXIT_CODE. Vacío = desactivado.`,"settings.hook.sessionEndedPlaceholder":`p. ej. npm test, o avisar a un canal de chat…`,"settings.hook.prMergedTitle":`Hook: PR fusionada`,"settings.hook.prMergedHint":`Se ejecuta cuando se detecta una PR fusionada, antes de archivar o purgar el workspace: el worktree sigue en disco. Lee KOBO_PR_NUMBER y KOBO_PR_URL. Vacío = desactivado.`,"settings.hook.prMergedPlaceholder":`p. ej. lanzar un despliegue, etiquetar una release…`,"settings.hook.autoLoopDisabledTitle":`Hook: auto-loop detenido`,"settings.hook.autoLoopDisabledHint":`Se ejecuta cada vez que se desactiva el auto-loop, por Kōbō o por ti. Lee KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) y KOBO_TASKS_PENDING. Vacío = desactivado.`,"settings.hook.autoLoopDisabledPlaceholder":`p. ej. enviar un aviso cuando el bucle se atasca…`,"settings.changeSourceBranchScript":`Script para cambiar la rama de origen`,"settings.changeSourceBranchScript.help":`Reemplaza el cherry-pick integrado cuando no está vacío. El script gestiona git, base de la PR, force-push y conflictos; Kōbō solo rechaza si el agente está corriendo y actualiza los metadatos de la rama de origen en exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — nueva rama de origen elegida en el diálogo
|
|
1
|
+
var e={"tours.settings.skills.title":`Elegir una suite de skills`,"tours.settings.skills.description":`Empieza con Standard: no requiere extensiones. Superpowers, gstack, ECC y sus combinaciones usan skills ya instalados y disponibles para el motor elegido. La selección cambia las instrucciones del agente; no instala skills ni concede permisos. Personalizado permite escribir tus propias instrucciones. Guarda tu elección para aplicarla.`,"tours.settings.git.description":`Elige cuándo los agentes pueden crear commits, hacer push o publicar. Define convenciones Git y prefijos de ramas.`,"tours.settings.git.title":`Flujo de trabajo Git`,"settings.reviewPromptHint":`Instrucciones enviadas al agente al iniciar una revisión de código.`,"settings.help.git":`Preferencias de commit, push y publicación, convenciones Git y prefijos de ramas.`,"settings.nav.promptTemplates":`Plantillas de prompts`,"settings.nav.git":`Git`,"integration.direct":`Conexión directa`,"integration.directHint":`Opcional: configure un comando MCP de confianza en este servidor sin configuración Claude. Ponga las credenciales en variables de entorno. Guardar reemplaza toda la conexión; active la integración por separado.`,"integration.agentScope":`Las conexiones activadas se transmiten a Claude Code y Codex al iniciar o reanudar el agente. Detén el agente en curso para aplicar los cambios. Las configuraciones MCP personales son independientes.`,"integration.directOverrides":`La conexión directa guardada tiene prioridad. Elimínala para usar una entrada MCP de Claude.`,"integration.stored":`Hay una conexión privada guardada. Sus valores nunca se devuelven al navegador.`,"integration.example":`Ejemplo: {example}`,"integration.tokenExample":`TU_TOKEN_NOTION`,"integration.packageExample":`tu-paquete-mcp`,"integration.variableExample":`TU_VARIABLE`,"integration.valueExample":`tu-valor`,"integration.command":`Ejecutable`,"integration.args":`Argumentos (array JSON)`,"integration.environment":`Entorno y credenciales (objeto JSON)`,"integration.failed":`No se pudo cargar o guardar la conexión. Revise el JSON y el almacenamiento local.`,"integration.saved":`Conexión guardada. Active la integración y pruebe la conexión.`,"integration.save":`Reemplazar conexión`,"integration.clear":`Eliminar conexión directa`,"settings.notificationSoundReady":`Tono de finalización`,"settings.customSounds":`Sonidos importados`,"settings.customSoundsHint":`Importa tus propios sonidos de notificación ({count} como máximo, {size} MB cada uno, .wav .mp3 .ogg .webm). Se guardan en el directorio de datos de Kōbō y aparecen en todos los selectores de abajo.`,"settings.customSoundsImport":`Importar un sonido`,"settings.customSoundsFull":`Límite alcanzado ({count} sonidos). Elimina uno antes de importar otro.`,"settings.customSoundsError.type":`Formato no compatible. Usa un archivo .wav, .mp3, .ogg o .webm.`,"settings.customSoundsError.size":`Archivo demasiado grande. El límite es {size} MB.`,"settings.customSoundsError.count":`Límite alcanzado ({count} sonidos). Elimina uno antes de importar otro.`,"settings.customSoundsError.failed":`No se pudo completar la acción. Comprueba la conexión e inténtalo de nuevo.`,"setup.check.worktrees":`Directorio de worktrees`,"setup.fix.worktrees":`Revise el destino de worktrees en los ajustes y sus permisos de escritura.`,"setup.title":`Configurar la primera tarea`,"setup.intro":`Elija un motor y un proyecto Git local. No necesita skills ni integraciones.`,"setup.project":`Directorio local del proyecto`,"setup.credentials":`Inicie sesión en este servidor con claude /login o codex login, o configure su clave API. Estas comprobaciones no envían prompts de pago.`,"setup.permissions":`Empiece con un plan. Elija explícitamente los permisos en el formulario; un worktree no aísla su equipo.`,"setup.check":`Comprobar entorno`,"setup.failed":`No se pudo completar la acción. Revise la conexión y vuelva a intentarlo.`,"setup.start":`Describir mi primera tarea`,"setup.settings":`Abrir ajustes`,"setup.skip":`Omitir por ahora`,"setup.status.ok":`Disponible`,"setup.status.missing":`Falta`,"setup.status.error":`Requiere atención`,"setup.status.unknown":`Sin verificar`,"setup.check.node":`Node.js`,"setup.check.platform":`Plataforma`,"setup.check.git":`Git`,"setup.check.shell":`Bash`,"setup.check.storage":`Directorio de datos`,"setup.check.runtime":`Paquete del motor`,"setup.check.authentication":`Autenticación`,"setup.check.model":`Acceso al modelo`,"setup.check.repository":`Repositorio Git`,"setup.check.firstCommit":`Primer commit`,"setup.check.projectWritable":`Escritura en el proyecto`,"setup.fix.node":`Instale Node.js 24.15 o posterior.`,"setup.fix.platform":`Use Linux, macOS o WSL2; Windows nativo no está soportado.`,"setup.fix.git":`Instale Git en este servidor.`,"setup.fix.shell":`Instale Bash en este servidor.`,"setup.fix.storage":`Revise KOBO_HOME y los permisos del directorio.`,"setup.fix.runtime":`Reinstale Kōbō con las dependencias opcionales del motor.`,"setup.fix.authentication":`Inicie sesión con el proveedor elegido. La primera tarea verificará el acceso.`,"setup.fix.model":`Elija Auto o un modelo disponible para su cuenta.`,"setup.fix.repository":`Elija un directorio de trabajo Git existente.`,"setup.fix.firstCommit":`Cree el primer commit antes de crear un worktree.`,"setup.fix.projectWritable":`Elija un directorio de proyecto con permiso de escritura.`,"handoff.freshTitle":`Continuar en una sesión nueva`,"handoff.switchTitle":`Cambiar de LLM`,"handoff.warning":`El trabajo actual se interrumpe de inmediato. Una sesión nueva continúa automáticamente en el mismo workspace, conservando las tareas y el historial.`,"handoff.generate":`Generar un traspaso con el agente actual`,"handoff.generateHint":`Desactiva esta opción si se ha agotado su cuota. Kōbō transmitirá el objetivo, las tareas, el estado de Git y el historial sin llamar al LLM actual.`,"handoff.start":`Iniciar sesión nueva`,"handoff.stopping":`Deteniendo el agente actual`,"handoff.generating":`Preparando el traspaso`,"handoff.starting":`Iniciando la sesión nueva`,"handoff.completed":`Sesión nueva iniciada`,"handoff.failed":`Error en el traspaso`,"handoff.interrupted":`Traspaso interrumpido`,"handoff.cancelled":`Traspaso cancelado`,"handoff.skip":`Continuar sin resumen del LLM`,"handoff.cancel":`Cancelar traspaso`,"handoff.report":`Leer traspaso`,"handoff.source":`Sesión anterior`,"handoff.progress":`Traspaso de sesión en curso`,"handoff.blocked":`Resuelve o cancela el traspaso para continuar.`,"handoff.error":`No se pudo preparar el traspaso de sesión.`,"handoff.loadFailed":`No se pudo cargar el estado del traspaso.`,"handoff.status":`Traspaso de sesión`,"chat.externalLlm":`LLM externo · {name}`,"search.indexing":`Indexando el historial: {processed}/{total}. Resultados parciales.`,"search.indexUnavailable":`Índice de búsqueda no disponible. Inténtalo más tarde.`,"blockers.setupConfiguration":`No hay script de preparación configurado. Añade uno en la sección Scripts de los ajustes.`,"blockers.noWorkspace":`Selecciona un workspace para usar esta acción.`,"blockers.purged":`Restaura el worktree desde el aviso del workspace antes de esta acción.`,"blockers.archived":`Desarchiva el workspace desde su menú para usar esta acción.`,"blockers.operation":`Espera a que termine la operación actual.`,"blockers.agentBusy":`Espera a que termine el turno o detén el agente desde la conversación.`,"blockers.configuration":`Configura esta función en los ajustes del proyecto.`,"blockers.settings":`Abrir ajustes`,"workspaceSort.label":`Ordenar workspaces`,"workspaceSort.activity":`Última actividad`,"workspaceSort.created":`Fecha de creación`,"workspaceSort.name":`Nombre`,"workspaceSort.attention":`Prioridad de atención`,"workspaceSort.asc":`Ascendente`,"workspaceSort.desc":`Descendente`,"workspaceSort.hint":`Orden dentro de cada grupo, incluidos los archivados. Consultar un workspace no cambia su última actividad.`,"model.tooltip":`Modelo usado por el agente en este workspace`,"reasoning.tooltip":`Nivel de razonamiento usado por el agente en este workspace`,"thinking.label":`Razonamiento`,"thinking.noDetails":`El agente está razonando…`,"common.save":`Guardar`,"common.duplicate":`Duplicar`,"common.confirm":`Confirmar`,"common.cancel":`Cancelar`,"common.open":`Abrir`,"common.retry":`Reintentar`,"common.delete":`Eliminar`,"common.close":`Cerrar`,"workspace.deleteTitle":`Eliminar workspace`,"workspace.deleteTypeBranch":`Vuelva a escribir el nombre de la rama para confirmar`,"workspace.deleteConsequences":`Esto elimina el worktree y todo el historial.`,"workspace.deleteFailed":`No se pudo eliminar el workspace.`,"workspace.archiveFailed":`No se pudo archivar el workspace.`,"tasks.updateFailed":`No se pudo actualizar la tarea.`,"dashboard.tooltip":`Panel`,"dashboard.title":`Panel`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`Ningún workspace activo.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Estado`,"dashboard.attention":`Atención`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Actividad`,"dashboard.prOpen":`abierta`,"reliability.title":`Fiabilidad de los modelos`,"reliability.subtitle":`Cómo terminó realmente cada motor y modelo en este equipo.`,"reliability.empty":`Todavía no hay ninguna sesión finalizada.`,"reliability.loadFailed":`No se pudieron cargar las cifras de fiabilidad.`,"reliability.engine":`Motor`,"reliability.model":`Modelo`,"reliability.sessions":`Sesiones`,"reliability.completed":`Completadas`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Detenidas`,"reliability.errors":`Errores`,"reliability.unknown":`Desconocido`,"reliability.median":`Mediana`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}min {s}s`,"reliability.durationHours":`{h}h {m}min`,"reliability.reset":`Restablecer: contar solo las sesiones finalizadas a partir de ahora`,"reliability.since":`Desde el {date}`,"reliability.showAll":`Mostrar todo`,"update.available":`Hay una versión más reciente de Kōbō: {version}`,"update.how":`Cómo actualizar`,"common.dismiss":`Descartar`,"common.details":`Detalles`,"common.ok":`OK`,"whatsNew.title":`Novedades`,"common.loading":`Cargando...`,"common.search":`Buscar...`,"common.refresh":`Actualizar`,"common.copy":`Copiar`,"common.copied":`Copiado al portapapeles`,"common.copyFailed":`Error al copiar`,"common.add":`Añadir`,"folderPicker.title":`Elegir una carpeta`,"folderPicker.parent":`Carpeta superior`,"folderPicker.empty":`Sin subcarpetas`,"folderPicker.select":`Elegir esta carpeta`,"common.start":`Iniciar`,"common.stop":`Detener`,"common.archive":`Archivar`,"common.unarchive":`Desarchivar`,"common.selectWorkspace":`Selecciona un workspace`,"common.noResults":`Sin resultados para "{query}"`,"common.send":`enviar`,"common.newLine":`nueva línea`,"common.history":`historial`,"common.justNow":`ahora mismo`,"common.minutesAgo":`hace {count}m`,"common.hoursAgo":`hace {count}h`,"common.daysAgo":`hace {count}d`,"model.auto":`Auto`,"model.fable51":`Fable 5.1`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`El modelo más capaz - reemplaza a Fable 5, contexto 1M, adaptive thinking`,"model.mythos5Description":`Fable 5.1 sin clasificadores de seguridad — acceso limitado (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude elige el modelo óptimo`,"model.opus5Description":`Para código agéntico complejo y trabajo empresarial, contexto 1M`,"model.opus48Description":`Opus más capaz — coding agéntico long-horizon, contexto 1M por defecto, esfuerzo high por defecto`,"model.opus47ClassicDescription":`Último Opus, el más capaz`,"model.opus471mDescription":`Último Opus, contexto 1M`,"model.opusClassicDescription":`El más potente`,"model.opus1mDescription":`El más potente, contexto 1M`,"model.sonnet5Description":`La mejor combinación de velocidad e inteligencia, contexto 1M`,"model.sonnetClassicDescription":`Equilibrado`,"model.sonnet1mDescription":`Equilibrado, contexto 1M`,"model.haikuDescription":`El más rápido`,"model.gpt6astra":`GPT-6 Astra`,"model.gpt6astraDescription":`El modelo frontera más capaz, contexto 1M (requiere autenticación ChatGPT)`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`El modelo de codificación agéntica más avanzado (requiere autenticación ChatGPT)`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Modelo de codificación agéntica equilibrado para el día a día (requiere autenticación ChatGPT)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Modelo de codificación agéntica rápido y económico (requiere autenticación ChatGPT)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Recomendado para código complejo (requiere autenticación ChatGPT)`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Alternativa por defecto — razonamiento sólido, compatible con clave API`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Rápido y eficiente — ideal para tareas reactivas y subagentes`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimizado para trabajo profesional y agentes de larga duración`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Modelo especializado en código para ingeniería de software compleja`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`ninguno`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Deja que el motor decida`,"reasoning.minimalDescription":`Razonamiento más rápido y superficial`,"reasoning.noneDescription":`Sin razonamiento adicional`,"reasoning.lowDescription":`Más rápido, menos profundidad`,"reasoning.mediumDescription":`Equilibrado`,"reasoning.highDescription":`Más profundidad`,"reasoning.xhighDescription":`Profundidad extendida, tareas largas`,"reasoning.maxDescription":`Profundidad máxima`,"agentPermissionMode.label":`Modo de permisos`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Aceptar ediciones`,"agentPermissionMode.interactive":`Interactivo`,"agentPermissionMode.tooltip":`Cómo gestiona el agente los permisos de las herramientas. Plan: solo lectura, sin escrituras. Bypass: omitir todas las preguntas. Estricto: auto-aceptar ediciones de archivos, respetar allow/deny para el resto. Interactivo: preguntar al usuario antes de cada herramienta mediante el panel de permisos.`,"agentPermissionMode.autoLoopOverride":`El auto-loop fuerza un modo distinto a Plan — Plan bloquea las herramientas MCP y las ediciones que el bucle necesita. Elige Bypass, Estricto o Interactivo.`,"agentPermissionMode.autoLoopLocked":`Bloqueado en Bypass mientras el auto-loop está activo — cualquier otro modo detendría el bucle en las preguntas de permiso. AskUserQuestion sigue funcionando.`,"workspaceList.title":`Workspaces`,"workspaceList.a11y.groupToggle":`Grupo {group}, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Requiere atención`,"workspaceList.running":`En ejecución`,"workspaceList.idle":`Inactivo`,"workspaceList.archived":`Archivados`,"workspaceList.archivedToast":`«{name}» archivado`,"workspaceList.archivedUndo":`Deshacer`,"workspaceList.unarchiveFailed":`No se pudo desarchivar este workspace`,"workspaceList.noWorkspaces":`Aún no hay workspaces`,"workspaceList.loadFailed":`No se pudieron cargar tus workspaces`,"workspaceList.loadFailedHint":`Es un fallo de conexión, no una cuenta vacía.`,"workspaceList.footer":`{count} workspace | {count} workspaces`,"workspaceList.footerRunning":`{count} en ejecución`,"workspaceList.deleteDialog.title":`¿Eliminar workspace?`,"workspaceList.deleteDialog.deleteLocal":`Eliminar rama local`,"workspaceList.deleteDialog.deleteRemote":`Eliminar rama remota`,"workspaceList.deleteDialog.warning":`Advertencia: esta acción es irreversible en el remoto.`,"workspaceList.deleteArchivedDialog.tooltip":`Eliminar todos los workspaces archivados`,"workspaceList.deleteArchivedDialog.title":`¿Eliminar todos los workspaces archivados?`,"workspaceList.deleteArchivedDialog.message":`Esto eliminará permanentemente los {count} workspaces archivados. Esta acción no se puede deshacer.`,"workspaceList.deleteArchivedDialog.typeCount":`Escribe {count} para confirmar`,"workspacePage.configure":`Configurar`,"workspacePage.permissions":`Permisos`,"workspacePage.selectWorkspace":`Selecciona un workspace para comenzar`,"workspacePage.commandPalettePlaceholder":`Buscar comandos…`,"workspacePage.commandPaletteEmpty":`No hay comandos coincidentes`,"workspacePage.commandFocusChat":`Enfocar la entrada del chat`,"workspacePage.commandSearchHistory":`Buscar en el historial del workspace`,"workspacePage.commandTogglePanel":`Mostrar u ocultar el panel lateral`,"workspacePage.commandStartAgent":`Iniciar agente`,"workspacePage.commandStopAgent":`Detener agente`,"workspacePage.commandOpenSettings":`Abrir los ajustes`,"workspacePage.commandOpenCreate":`Crear un workspace`,"workspacePage.commandOpenSearch":`Búsqueda global`,"workspacePage.commandOpenHealth":`Página de salud`,"workspacePage.commandOpenChangelog":`Registro de cambios`,"workspacePage.commandGroupWorkspaces":`Ir a un workspace`,"workspacePage.commandPaletteHint":`Paleta de comandos`,"workspacePage.session":`Sesión #{n}`,"workspacePage.newSession":`+ Nueva sesión`,"workspacePage.renameSession":`Renombrar`,"workspacePage.renameSessionTitle":`Renombrar sesión`,"workspacePage.sessionNameLabel":`Nombre de sesión`,"workspacePage.sessionEndedNotice":`Esta sesión ha terminado. Crea una nueva sesión para continuar.`,"workspacePage.renameFailed":`Error al renombrar`,"workspacePage.copySessionId":`Copiar ID de sesión`,"workspacePage.deleteSession":`Eliminar sesión`,"workspacePage.deleteSessionTitle":`¿Eliminar sesión?`,"workspacePage.deleteSessionConfirm":`Esto elimina permanentemente esta sesión y su historial de conversación.`,"workspacePage.deleteSessionFailed":`No se pudo eliminar la sesión`,"workspacePage.noEngineSessionId":`Todavía no hay ID de sesión — el agente aún no ha iniciado esta sesión`,"workspacePage.createSessionFailed":`Error al crear la sesión`,"workspacePage.startFailed":`Error al iniciar`,"workspacePage.stopFailed":`Error al detener`,"workspacePage.interrupt":`Interrumpir`,"workspacePage.interrupted":`Agente interrumpido — esperando tu próximo mensaje`,"workspacePage.lastAgentEvent":`Último evento {when}`,"workspacePage.agentStopping":`Deteniendo…`,"workspacePage.agentNotRunning":`Ningún agente en ejecución — el estado está obsoleto`,"contextMenu.restoreWorktree":`Restaurar worktree`,"workspacePage.restoringWorktree":`Restaurando…`,"workspacePage.worktreeRestoreSuccess":`Worktree restaurado`,"workspacePage.worktreeRestoreLimitations":`Recrea los archivos de Git incluidos en commits. No restaura las dependencias ni los archivos locales descartados anteriormente.`,"workspacePage.restoreError.not-found":`Este workspace ya no existe. Actualiza la lista de workspaces.`,"workspacePage.restoreError.not-purged":`Este workspace no está marcado como purgado. Actualízalo y comprueba su directorio de trabajo.`,"workspacePage.restoreError.workspace-busy":`Hay otra operación en curso en este workspace. Espera a que termine e inténtalo de nuevo.`,"workspacePage.restoreError.worktree-not-owned":`Kōbō no gestiona este worktree. Restáuralo manualmente en su proyecto original.`,"workspacePage.restoreError.project-unavailable":`El proyecto original no está disponible. Vuelve a conectar su disco o restaura el proyecto en su ruta original e inténtalo de nuevo.`,"workspacePage.restoreError.path-conflict":`Otro directorio o checkout ocupa la ruta del worktree. Mueve el directorio en conflicto o sigue las instrucciones de recuperación manual en Detalles.`,"workspacePage.restoreError.branch-in-use":`La rama de trabajo ya está en uso en otro checkout. Utiliza ese checkout o libera la rama antes de volver a intentarlo.`,"workspacePage.restoreError.recovery-source-unavailable":`No se encuentran la rama de trabajo ni el commit guardado. Comprueba el acceso remoto o consulta la recuperación manual en Detalles.`,"workspacePage.restoreError.git-failed":`La restauración ha fallado. Comprueba el acceso a Git y los permisos del disco e inténtalo de nuevo. Detalles abre la guía de recuperación manual.`,"workspacePage.archivedBanner":`Workspace archivado — solo lectura`,"workspacePage.worktreePurgedBanner":`Worktree eliminado — historial conservado`,"workspacePage.worktreePurgedTooltip":`Restaurar worktree recrea el directorio de trabajo y desarchiva este workspace. Se conservan la conversación, las tareas y las sesiones. No se inicia ningún agente ni servidor de desarrollo.`,"workspacePage.pendingInitialPromptBanner":`Hay un prompt inicial pendiente — el agente nunca lo recibió (el script de setup falló o el workspace nunca se inició). Haz clic en Iniciar para enviarlo ahora.`,"workspacePage.unarchived":`Workspace desarchivado`,"workspacePage.unarchiveFailed":`Error al desarchivar`,"workspacePage.interruptFailed":`Error al interrumpir`,"workspacePage.interruptHint":`Interrumpir el turno actual sin terminar la sesión.`,"workspacePage.interruptTooltip":`Interrupción suave (como Escape) — detiene la herramienta actual pero mantiene la sesión activa`,"workspacePage.pendingNextRun":`Se aplicará en el próximo inicio`,"workspacePage.activeSessionModel":`En uso: {model}`,"workspacePage.activeSessionModelTooltip":`Modelo utilizado actualmente por la sesión seleccionada`,"workspacePage.switchEngine":`Cambiar motor`,"workspacePage.switchEngineHint":`Continuar este workspace con otro motor de agente`,"workspacePage.moreActions":`Más acciones`,"workspacePage.switchEngineTitle":`Cambiar motor de agente`,"workspacePage.switchEngineWarning":`El agente actual se detendrá y se iniciará una sesión nueva en el mismo worktree.`,"workspacePage.engineLabel":`Motor`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Traspaso para el nuevo motor`,"workspacePage.engineHandoffHint":`Revisa o edita el contexto que se enviará al nuevo agente.`,"workspacePage.confirmSwitchEngine":`Cambiar motor`,"workspacePage.switchEngineFailed":`No se pudo cambiar el motor`,"whip.dispatchFailed":`No se pudo enviar el mensaje del látigo`,"whip.phrase1":`Continúa, por favor.`,"whip.phrase2":`Sigue con las tareas previstas.`,"whip.phrase3":`Pasa al siguiente paso.`,"whip.phrase4":`Comprueba el progreso y continúa.`,"whip.phrase5":`Continúa dentro del alcance acordado.`,"search.title":`Búsqueda`,"search.tooltip":`Buscar en el historial de agentes`,"search.placeholder":`Buscar en todos los mensajes de agentes…`,"search.includeArchived":`Incluir workspaces archivados`,"search.loading":`Buscando…`,"search.noResults":`Sin resultados`,"search.error":`Búsqueda fallida: {message}`,"search.resultCount":`{n} resultado(s)`,"search.eventType.userMessage":`Tú`,"search.eventType.agentOutput":`Agente`,"activityFeed.empty":`Aún no hay actividad`,"activityFeed.emptyHint":`Inicia un workspace para ver la salida del agente aquí`,"activityFeed.initialPrompt":`Prompt inicial`,"activityFeed.you":`Tú`,"activityFeed.agent":`Agente`,"activityFeed.question":`Pregunta`,"activityFeed.goToPrevious":`Ir al mensaje anterior`,"activityFeed.scrollToBottom":`Ir al final`,"activityFeed.sendAnswers":`Enviar respuestas`,"agentBusy.banner":`El agente está ocupado`,"agentBusy.subagentsRunning":`1 sub-agente en ejecución | {n} sub-agentes en ejecución`,"agentBusy.viewSubagents":`Ver sub-agentes`,"agentBusy.pendingMessage":`Esperando — el agente está ocupado`,"terminal.title":`Terminal`,"terminal.open":`Abrir terminal`,"terminal.close":`Cerrar terminal`,"terminal.noWorkspace":`Seleccione un espacio de trabajo`,"terminal.noWorktree":`Worktree aún no creado`,"terminal.error":`Error del terminal`,"terminal.exited":`Terminal cerrado`,"terminal.disconnected":`Conexión perdida`,"terminal.reconnecting":`Reconectando… (intento {attempt} de {max})`,"terminal.reconnect":`Reconectar`,"chatInput.placeholder":`Mensaje... (/ para skills)`,"chatInput.fileSearchHint":`buscar un archivo`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Adjuntar imagen`,"chatInput.queueBanner":`Mensaje en cola — se enviará cuando el agente termine`,"chatInput.forceQueue":`Forzar envío`,"chatInput.searchHistory":`buscar`,"chatInput.commandPalette":`comandos`,"chatInput.shortcuts":`Atajos de teclado`,"chatInput.cancelQueue":`Cancelar cola`,"chatInput.autoLoopBanner":`Auto-loop activo — deténlo para enviar un mensaje`,"chatInput.awaitingUserBanner":`El agente espera tu respuesta arriba — responde mediante el panel de la pregunta`,"chatInput.autoLoopStop":`Detener`,"koboCommand.checkProgressDesc":`Verificar el progreso de las tareas y criterios de aceptación`,"chatInput.uploading":`Subiendo...`,"voice.title":`Transcripción de voz`,"voice.enabled":`Activar transcripción de voz local`,"voice.pttKey":`Tecla push-to-talk`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Espacio`,"voice.language":`Idioma (auto o código)`,"voice.model":`Modelo activo`,"voice.commandPath":`Ruta del binario Whisper (opcional)`,"voice.ffmpegPath":`Ruta del binario ffmpeg (opcional)`,"voice.temperature":`Temperatura`,"voice.temperatureHint":`Más bajo = más determinista; más alto = más flexible pero potencialmente menos estable.`,"voice.initialPrompt":`Prompt inicial (opcional)`,"voice.initialPromptHint":`Contexto opcional para ayudar a Whisper con nombres, siglas o vocabulario técnico.`,"voice.translateToEnglish":`Traducir al inglés`,"voice.translateToEnglishHint":`Si se activa, el audio no inglés se traduce al inglés en lugar de transcribirse tal cual.`,"voice.suppressNst":`Suprimir tokens no vocales`,"voice.suppressNstHint":`Intenta reducir artefactos no vocales en la transcripción.`,"voice.installLink":`Instalar whisper.cpp`,"voice.installGuideTitle":`Guía de instalación`,"voice.installGuideIntro":`Instala whisper.cpp y ffmpeg, luego configura las rutas de binarios abajo si hace falta.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Después del build con CMake, el binario de Whisper suele estar en: whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Después, configura “Ruta del binario Whisper” y “Ruta del binario ffmpeg” en esta sección (o déjalo vacío si están en PATH).`,"voice.noneModel":`Sin modelo activo`,"voice.notInstalled":`no instalado`,"voice.download":`Descargar`,"voice.delete":`Eliminar`,"voice.holdToTalk":`Mantén pulsado para hablar`,"voice.recording":`Grabando...`,"voice.transcribing":`Transcribiendo...`,"voice.notSupported":`La grabación de voz no es compatible con este navegador`,"voice.errorMicPermission":`Permiso de micrófono denegado`,"voice.errorTranscription":`Falló la transcripción de voz`,"voice.downloadFailed":`Falló la descarga del modelo`,"voice.deleteFailed":`Falló la eliminación del modelo`,"voice.errorDisabled":`La transcripción de voz está desactivada en ajustes`,"voice.errorModelMissing":`No hay un modelo de voz activo configurado`,"voice.errorModelNotInstalled":`El modelo de voz activo no está instalado`,"voice.errorAudioInvalid":`La captura de audio es inválida o vacía`,"voice.errorLanguageInvalid":`La configuración del idioma de voz es inválida`,"voice.errorRuntimeMissing":`El runtime de Whisper no está instalado o no está en el PATH`,"voice.maxDurationReached":`Se alcanzó la duración máxima de grabación`,"voice.runtimeReady":`Runtime listo: {command}`,"voice.runtimeMissing":`Falta runtime: {command}`,"voice.ffmpegReady":`ffmpeg listo`,"voice.ffmpegMissing":`falta ffmpeg`,"voice.sectionRuntime":`Estado del runtime`,"voice.sectionActivation":`Activación`,"voice.sectionModels":`Modelos Whisper`,"voice.sectionAdvanced":`Opciones avanzadas`,"voice.sectionBehavior":`Comportamiento de la transcripción`,"voice.sectionBinaries":`Rutas de los binarios`,"voice.downloadModels":`Descargar un modelo`,"voice.cancelFailed":`No se pudo cancelar la descarga`,"attachments.error.upload":`Error al subir el archivo. Quita el adjunto e inténtalo de nuevo.`,"attachments.add":`Adjuntar archivos`,"attachments.remove":`Quitar adjunto`,"attachments.hint":`Pega o arrastra archivos aquí · máximo {count} · {size} MB cada uno · {total} MB en total`,"attachments.error.type":`Usa imágenes PNG, JPEG, GIF o WebP, PDF, Markdown o documentos de texto (TXT, CSV, JSON, YAML, XML, LOG, RST, TOML).`,"attachments.error.size":`Cada archivo debe tener contenido y no superar los 50 MB.`,"attachments.error.count":`Puedes adjuntar hasta 10 archivos.`,"attachments.error.total":`Los adjuntos no deben superar los 50 MB en total.`,"attachments.descriptionRequired":`Escribe una descripción o adjunta un archivo.`,"createPage.title":`Crear un workspace`,"createPage.fromTemplate":`Desde una plantilla`,"createPage.fromTemplateNone":`Ninguna`,"createPage.saveAsTemplate":`Guardar como plantilla`,"createPage.saveTemplateTitle":`Guardar este formulario como plantilla`,"createPage.saveTemplateName":`Nombre de la plantilla`,"createPage.saveTemplateOverwrite":`Ya existe una plantilla llamada «{name}». ¿Sobrescribirla?`,"createPage.templateSaved":`Plantilla «{name}» guardada`,"createPage.templateApplied":`Plantilla «{name}» aplicada`,"createPage.duplicatedFrom":`Duplicado desde «{name}»`,"createPage.duplicateLoadFailed":`No se pudo cargar el workspace a duplicar.`,"createPage.templateSaveFailed":`No se pudo guardar la plantilla.`,"createPage.presetProjectUnknown":`Esta plantilla apunta a un proyecto que ya no está configurado; se mantuvo el proyecto actual.`,"createPage.copySuffix":`(copia)`,"createPage.subtitle":`Describe la misión, elige un proyecto y configura el agente.`,"createPage.sectionMission":`Misión`,"createPage.sectionMissionHint":`Proporciona al agente un objetivo claro y el contexto necesario.`,"createPage.workspaceNameLabel":`Nombre del workspace`,"createPage.descriptionLabel":`Descripción de la misión`,"createPage.sources":`Fuentes opcionales`,"createPage.sectionGit":`Proyecto Git`,"createPage.sectionGitHint":`Elige el repositorio, la rama de origen y el modo de worktree.`,"createPage.worktreeMode":`Modo de worktree`,"createPage.worktreeNew":`Nuevo worktree aislado`,"createPage.worktreeExisting":`Reutilizar un worktree existente`,"createPage.projectLabel":`Proyecto`,"createPage.sourceBranch":`Rama de origen`,"createPage.workingBranchPreview":`Vista previa de la rama de trabajo`,"createPage.branchNamePending":`nombre-del-workspace`,"createPage.sectionAgent":`Agente`,"createPage.sectionAgentHint":`Revisa los ajustes de ejecución o activa la automatización.`,"createPage.configureAgent":`Configurar el agente`,"createPage.advancedOptions":`Opciones avanzadas`,"createPage.keyboardHint":`Pulsa Ctrl/Cmd + Enter para crear el workspace.`,"createPage.createWorkspace":`Crear workspace`,"createPage.compareEngines":`Comparar dos motores`,"createPage.engineA":`Motor A`,"createPage.engineB":`Motor B`,"createPage.compareBrainstormLocked":`Modo comparación: cada motor hace el brainstorming con el modelo y el esfuerzo definidos en su bloque de arriba.`,"createPage.compareEnginesHint":`Crea dos workspaces a partir de esta tarea, uno por motor, en worktrees hermanos. Luego se pueden comparar sus diffs en paralelo.`,"createPage.compareNeedsNewWorktree":`Comparar dos motores requiere dos worktrees nuevos. Desactiva primero «usar un worktree existente».`,"createPage.compareNeedsSecondEngine":`Elige un segundo motor, distinto del primero, para la comparación.`,"comparison.title":`Comparación de motores`,"comparison.hint":`La misma tarea, ejecutada por cada motor en su propio worktree.`,"comparison.engine":`Motor`,"comparison.status":`Estado`,"comparison.tasks":`Tareas`,"comparison.commits":`Commits`,"comparison.files":`Archivos`,"comparison.diff":`Diff`,"comparison.messages":`Mensajes`,"comparison.messagesTitle":`Mensajes del agente / tus mensajes`,"comparison.questions":`Preguntas`,"comparison.tools":`Herramientas`,"comparison.errors":`Errores`,"comparison.tokens":`Tokens`,"comparison.tokensTitle":`Tokens de entrada / salida`,"comparison.sessions":`Sesiones`,"comparison.duration":`Duración`,"comparison.exportCsv":`Exportar en CSV`,"comparison.open":`Abrir`,"comparison.current":`Este`,"comparison.archived":`archivado`,"comparison.incomplete":`Solo existe un workspace de esta comparación. El otro nunca se creó, o se ha eliminado.`,"createPage.comparisonPartial":`Solo se crearon {count} de {total} workspaces. El que existe se puede usar por sí solo; elimínalo si prefieres empezar de nuevo.`,"createPage.notionEnabled":`Notion activado`,"createPage.importNotion":`Importar desde Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`La URL debe empezar por https://www.notion.so/ o https://app.notion.com/`,"createPage.notionAutoExtract":`Las subtareas y criterios de aceptación se extraerán automáticamente.`,"createPage.notionPanelChoiceLabel":`Esta URL apunta a una subpágina (?p=). ¿Sobre cuál quieres trabajar?`,"createPage.notionPanelOption":`Subpágina (panel)`,"createPage.notionPanelOptionDesc":`La página que estabas viendo — recomendado`,"createPage.notionParentOption":`Página principal`,"createPage.notionParentOptionDesc":`La épica / base de datos a la que pertenece`,"createPage.importSentry":`Importar Sentry`,"createPage.sentryEnabled":`Sentry activado`,"createPage.sentryPlaceholder":`https://tu-org.sentry.io/issues/123456`,"createPage.sentryValidation":`La URL debe apuntar a una issue de Sentry (/issues/<id>)`,"createPage.sentryAutoExtract":`La issue de Sentry se importará automáticamente`,"createPage.sentryExtractHint":`Kobo extraerá la issue y la escribirá en .ai/thoughts/`,"createPage.importPr":`Importar desde una PR`,"createPage.importPrRequiresProject":`Elige primero un proyecto`,"createPage.importPrNotSupported":`El forge de este proyecto no admite listar pull requests`,"createPage.lockedToPr":`Bloqueado a la PR #{number}`,"createPage.prReadyToCreate":`PR #{number} importada — el workspace puede crearse.`,"createPage.prResumeIntro":`Continuación del trabajo en la pull request existente #{number} "{title}" ({url}).`,"createPage.unlockPrCheckout":`Desbloquear`,"createPage.workspaceName":`Nombre del workspace (por defecto el título de la página Notion)`,"createPage.workspaceNamePlaceholder":`Nombre del workspace...`,"createPage.instructions":`Instrucciones adicionales (opcional)...`,"createPage.instructionsPlaceholder":`Describe la tarea...`,"createPage.tasks":`Tareas ({count})`,"createPage.addTask":`Añadir una tarea...`,"createPage.acceptanceCriteria":`Criterios de aceptación ({count})`,"createPage.addCriterion":`Añadir un criterio...`,"createPage.projectPath":`Introduce la ruta del proyecto`,"createPage.branchType":`Tipo de rama`,"createPage.branch":`Rama`,"createPage.noBranches":`No se encontraron ramas`,"createPage.enterPath":`Introduce la ruta del proyecto`,"createPage.skipSetupScript":`Omitir script de setup`,"createPage.worktreePickerLabel":`Worktree existente`,"createPage.noOrphanWorktrees":`No hay worktrees huérfanos en este proyecto`,"createPage.pickWorktreeRequired":`Selecciona un worktree para adjuntar`,"createPage.notionExtractHint":`Las subtareas y criterios de aceptación se extraerán de la página Notion.`,"createPage.errorCreating":`Error al crear el workspace.`,"createPage.branchAdjusted":"La rama ya existía — se creó `{branch}` en su lugar. La carpeta worktree correspondiente usa el mismo sufijo.","createPage.localSourceFallback":`Workspace creado desde la rama local (origin inalcanzable) — la base puede estar desactualizada.`,"createPage.validationNotionUrl":`Introduce una URL de Notion válida (https://www.notion.so/... o https://app.notion.com/...).`,"createPage.validationDescription":`Describe la tarea.`,"createPage.validationName":`Indica un nombre para el workspace.`,"createPage.validationPath":`Introduce la ruta del proyecto.`,"createPage.validationBranch":`Selecciona una rama.`,"createPage.validationFocusHint":`El campo a corregir está resaltado abajo.`,"createPage.progress.validate":`Validando la solicitud…`,"createPage.progress.fetch-source-branch":`Obteniendo la rama de origen desde origin…`,"createPage.progress.inspect-worktree":`Inspeccionando el worktree existente…`,"createPage.progress.extract-notion":`Extrayendo la página de Notion…`,"createPage.progress.extract-sentry":`Extrayendo la incidencia de Sentry…`,"createPage.progress.create-record":`Creando el workspace…`,"createPage.progress.create-tasks":`Creando tareas y criterios de aceptación…`,"createPage.progress.create-worktree":`Creando el worktree de git…`,"createPage.progress.write-conventions":`Escribiendo las convenciones de git…`,"createPage.progress.write-context-files":`Escribiendo los archivos de contexto…`,"createPage.progress.build-prompt":`Construyendo el prompt inicial…`,"createPage.progress.setup-script":`Ejecutando tu script de instalación…`,"createPage.progress.start-agent":`Iniciando el agente…`,"createPage.progress.rollback":`Deshaciendo la creación fallida…`,"createPage.progress.done":`Listo`,"createPage.progress.step":`Paso {index} de {total}`,"createPage.errorAtStep":`La creación falló en el paso «{step}»: {message}`,"createPage.override.title":`Dos de tus opciones fueron sustituidas`,"createPage.override.setup-script-forced":`Script de instalación omitido: volver a ejecutarlo en un worktree que ya preparaste podría destruir su contenido.`,"createPage.override.permission-mode-downgraded":`Modo de permisos cambiado de Plan a Bypass: un bucle autónomo no puede ejecutarse en Plan, que bloquea herramientas y ediciones.`,"settings.title":`Ajustes`,"settings.language":`Idioma`,"settings.projectColor":`Color`,"settings.projectColorClear":`Borrar`,"settings.projectColorDefault":`Por defecto (gris)`,"settings.workspaceListSection":`Lista de workspaces`,"settings.flattenWorkspaceList":`Lista plana de workspaces`,"settings.flattenWorkspaceListHint":`Muestra todos los workspaces en una lista plana con una etiqueta de proyecto, en lugar de agruparlos por proyecto.`,"workflow.title":`Flujo de Git`,"workflow.hint":`Estas preferencias guían a los agentes; no sustituyen los permisos del sistema. Prevalecen las instrucciones más restrictivas. Publicar nunca autoriza fusionar. Los nuevos espacios conservan una copia de estas opciones.`,"workflow.commit":`Crear commits`,"workflow.push":`Enviar la rama`,"workflow.publish":`Publicar PR/MR o comentarios`,"workflow.manual":`Manual — solicitud explícita`,"workflow.automatic":`Automático — cuando sea necesario`,"workflow.inherit":`Heredar`,"workflow.locked":`Detén el agente para cambiar estas preferencias. La sesión en curso ya las recibió.`,"workflow.updateFailed":`No se pudo guardar la preferencia. Comprueba la conexión e inténtalo de nuevo.`,"workflow.save":`Guardar preferencias de Git`,"workflow.saved":`Preferencias de Git guardadas.`,"workflow.planExecution":`Plan permite preparar la misión. Para ejecutar, elige explícitamente un modo de permisos compatible y reanuda el bucle.`,"settings.skillSuite.standard":`Estándar (sin extensiones)`,"settings.skillSuite.standardHint":`Flujo integrado sin una suite externa de habilidades.`,"settings.skillSuite.section":`Suite de skills`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Personalizado`,"settings.skillSuite.superpowersHint":`Workflow opinado TDD / brainstorm / plan (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Suite de Garry Tan — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Ambas suites se combinan — superpowers para la metodología (brainstorm / TDD / planes / revisión a nivel de principios), gstack para flujos concretos (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Framework de agentes de affaan-m — agents, skills, rules y hooks para planificar, probar, implementar, revisar y memorizar (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Las tres suites se combinan — superpowers para la metodología, gstack para flujos concretos, ECC para pases de revisión/implementación multiagente estructurados.`,"settings.skillSuite.customHint":`Compón los cinco prompts a continuación con los templates que elijas y edítalos libremente.`,"settings.skillSuite.reloadDefaults":`Restaurar predeterminados`,"settings.skillSuite.reloadDefaultsConfirm":`¿Reemplazar los cinco prompts personalizados con los valores agnósticos predeterminados?`,"settings.skillSuite.customPrompts":`Prompts personalizados`,"settings.skillSuite.agnostic":`Base agnóstica`,"settings.skillSuite.importPrompt":`Importar un template`,"settings.skillSuite.imported":`Template importado. Ahora puedes editarlo.`,"settings.skillSuite.importFailed":`No se pudo importar el template`,"settings.skillSuite.reviewTemplate":`Template de revisión`,"settings.skillSuite.autoLoopReviewGate":`Compuerta de revisión auto-loop`,"settings.skillSuite.autoLoopGroomingIntro":`Intro de grooming auto-loop`,"settings.skillSuite.qaTemplate":`Template QA`,"settings.skillSuite.brainstormingInstruction":`Instrucción de la fase de brainstorming`,"settings.global":`Global`,"settings.projects":`Proyectos`,"settings.globalSettings":`Ajustes globales`,"settings.defaultModel":`Modelo por defecto`,"settings.defaultModelClaude":`Modelo por defecto (Claude Code)`,"settings.defaultModelCodex":`Modelo por defecto (OpenAI Codex)`,"settings.agentPermissions":`Permisos del agente`,"settings.skipPermissions":`Omitir solicitudes de permisos (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Advertencia: desactivar esto hará que todos los permisos de herramientas (Write, Edit, Bash...) se denieguen automáticamente en modo headless. El agente solo podrá leer.`,"settings.notifications":`Notificaciones`,"settings.browserNotifications":`Notificación del navegador cuando el agente termina`,"settings.audioNotifications":`Notificación sonora cuando el agente termina`,"settings.enableBrowserNotifications":`Activar las notificaciones del navegador`,"settings.testBrowserNotification":`Probar la notificación`,"settings.browserNotificationGranted":`Notificaciones del navegador permitidas`,"settings.browserNotificationDenied":`Notificaciones del navegador bloqueadas`,"settings.browserNotificationAsk":`Se requiere permiso del navegador`,"settings.browserNotificationUnsupported":`Notificaciones del navegador no disponibles`,"settings.browserNotificationPermissionNeeded":`Permite las notificaciones del navegador para enviar una prueba.`,"settings.browserNotificationTestTitle":`Prueba de notificación de Kōbō`,"settings.browserNotificationTestBody":`Las notificaciones del navegador funcionan.`,"settings.enableAudio":`Activar el audio`,"settings.notificationSound":`Sonido de notificación`,"settings.notificationSoundHint":`Se reproduce cuando el agente termina o solicita permiso.`,"settings.questionSound":`Sonido de preguntas`,"settings.questionSoundHint":`Se reproduce solo cuando el agente te hace una pregunta.`,"settings.workspaceCreatedSound":`Sonido de creación del espacio de trabajo`,"settings.workspaceCreatedSoundHint":`Se reproduce después de crear un espacio de trabajo.`,"settings.notificationSoundPreview":`Escuchar`,"settings.notificationVolume":`Volumen`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Errores del agente`,"settings.agentErrorSoundHint":`Se reproduce para cuotas, límites de tasa y errores del agente.`,"settings.notificationSoundBasic":`Notificación básica`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Trabajo`,"settings.notificationSoundTravailTermine":`Trabajo terminado`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Va a explotar`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR y CI`,"settings.soundGeneral":`Sonido general`,"settings.soundNone":`Sin sonido`,"settings.prCiFailedSound":`CI fallida`,"settings.prCiRecoveredSound":`CI recuperada`,"settings.prChangesRequestedSound":`Cambios solicitados`,"settings.prApprovedSound":`PR aprobada`,"settings.prMergeConflictSound":`Conflicto de merge`,"settings.prReadyToMergeSound":`Lista para merge`,"settings.prMergedSound":`PR fusionada`,"settings.prCiFailedSoundHint":`Se reproduce cuando la CI pasa a estado fallido.`,"settings.prCiRecoveredSoundHint":`Se reproduce cuando la CI se recupera de un fallo.`,"settings.prChangesRequestedSoundHint":`Se reproduce cuando una revisión solicita cambios.`,"settings.prApprovedSoundHint":`Se reproduce cuando se aprueba la pull request.`,"settings.prMergeConflictSoundHint":`Se reproduce cuando se detecta un conflicto de merge.`,"settings.prReadyToMergeSoundHint":`Se reproduce cuando la pull request está lista para merge.`,"settings.prMergedSoundHint":`Se reproduce cuando se fusiona la pull request.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Modo de permisos por defecto`,"settings.defaultPermissionModeClaude":`Modo de permisos por defecto (Claude Code)`,"settings.defaultPermissionModeCodex":`Modo de permisos por defecto (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Modo aplicado al crear un workspace. Plan = solo lectura, Bypass = sin avisos, Estricto = auto-aceptar ediciones con allow-list, Interactivo = preguntar antes de cada herramienta.`,"settings.activityFeed":`Feed de actividad`,"settings.showThinkingBlocks":`Mostrar bloques de razonamiento de los agentes`,"settings.whipSettings":`Látigo`,"settings.whipSettingsHint":`Configura el atajo y el volumen opcionales del látigo.`,"settings.whipEnabled":`Activar el látigo`,"settings.whipEnabledHint":`Muestra el látigo interactivo en los workspaces activos compatibles.`,"settings.whipVolume":`Volumen del látigo`,"settings.whipVolumeMasterAudioDisabled":`El audio principal está desactivado. Activa las notificaciones de audio para ajustar el volumen del látigo; el valor guardado se conserva.`,"whip.overlayLabel":`Látigo interactivo`,"whip.overlayInstructions":`Mueve el puntero para controlar el látigo. Pulsa Intro o Espacio para hacerlo chasquear. Pulsa Escape para cerrar.`,"settings.whipShortcut":`Atajo del látigo`,"settings.whipShortcutHint":`Haz clic y luego pulsa el atajo que quieras usar.`,"settings.whipShortcutRecording":`Pulsa un atajo…`,"settings.whipShortcutButtonLabel":`Atajo del látigo: {shortcut}`,"settings.whipShortcutRecordingLabel":`Grabando el atajo del látigo. Pulsa un atajo…`,"settings.whipShortcutReset":`Restablecer atajo`,"settings.whipShortcutReserved":`Este atajo está reservado por el navegador.`,"settings.testIntegration":`Probar conexión`,"pwa.offline":`No tienes conexión. El chat y los agentes necesitan el servidor Kōbō.`,"pwa.reconnecting":`Reconectando al servidor Kōbō…`,"pwa.installReady":`Instala Kōbō como aplicación.`,"pwa.install":`Instalar`,"pwa.ignore":`Ignorar`,"pwa.updateReady":`Hay una actualización de Kōbō disponible.`,"pwa.reload":`Recargar`,"chat.searchWorkspaceHistory":`Buscar en el historial del workspace`,"chat.historySearch.user":`Tú`,"chat.historySearch.agent":`Agente`,"chat.openInGitDiff":`Abrir en el diff de Git`,"timeline.title":`Cronología de sesiones`,"timeline.export":`Exportar diagnóstico`,"timeline.unnamed":`Sesión de agente`,"timeline.tools":`{count} herramientas`,"timeline.errors":`{count} errores`,"settings.verboseMessages":`Mostrar mensajes detallados del sistema (task_progress, task_started)`,"settings.availableVariables":`Variables disponibles en las plantillas de prompt`,"settings.prPromptTemplate":`Plantilla de prompt PR`,"settings.prPromptPlaceholder":`Instrucciones para el agente al crear PRs en GitHub...`,"settings.prPromptHint":`Usa las variables listadas arriba (sintaxis de dobles llaves).`,"settings.reviewPromptTemplate":`Plantilla de prompt de revisión`,"settings.reviewPromptPlaceholder":`Instrucciones para el agente al revisar los cambios de la rama...`,"settings.ciFixPromptTemplate":`Plantilla de prompt «Reparar CI»`,"settings.ciFixPromptHint":`Se envía al agente cuando un workspace tiene la CI fallando. Variables (sintaxis con dobles llaves): pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Pedir al agente que diagnostique y arregle los jobs de CI que fallan...`,"settings.finalizationPromptTemplate":`Prompt de finalización del auto-loop`,"settings.finalizationPromptHint":`Prompt por defecto para la última iteración del auto-loop (controles de calidad finales). Se usa cuando un proyecto deja vacío su propio prompt de finalización.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Prompt inicial de Notion`,"settings.notionInitialPrompt.help":`Se añade al prompt de creación del workspace cuando el workspace tiene un ticket de Notion. Variables: {variables}.`,"settings.notionInitialPrompt.project":`Prompt inicial de Notion (anulación)`,"settings.sentryInitialPrompt":`Prompt inicial de Sentry`,"settings.sentryInitialPrompt.help":`Se añade al prompt de creación del workspace cuando el workspace tiene una issue de Sentry. Variables: {variables}.`,"settings.sentryInitialPrompt.project":`Prompt inicial de Sentry (anulación)`,"settings.initialPrompt.inheritHint":`Dejar en blanco para heredar. Escribe un carácter en blanco para desactivar la inyección a este nivel.`,"settings.resetToDefault":`Restablecer`,"settings.resetFailed":`No se pudo cargar el valor por defecto`,"settings.sentryIntegration":`Integración Sentry`,"settings.var.prNumber":`Número de PR (ej: 42)`,"settings.var.prUrl":`URL completa de la PR creada`,"settings.var.branchName":`Nombre de la rama de trabajo`,"settings.var.sourceBranch":`Rama fuente a la que apunta la PR`,"settings.var.workspaceName":`Nombre del workspace`,"settings.var.projectName":`Último segmento de la ruta del proyecto`,"settings.var.notionUrl":`URL de Notion si está definida, vacía en caso contrario`,"settings.var.commits":`Lista de commits entre source y head`,"settings.var.diffStats":`Resumen shortstat de Git (archivos, inserciones, eliminaciones)`,"settings.var.tasks":`Tareas regulares como lista de verificación`,"settings.var.acceptanceCriteria":`Criterios de aceptación como lista de verificación`,"settings.gitConventions":`Convenciones Git (global)`,"settings.gitConventionsPlaceholder":`# Convenciones Git...`,"settings.gitConventionsHint":`Estas convenciones se escriben en .ai/.git-conventions.md en cada nuevo workspace y deben ser seguidas por el agente antes de cualquier operación Git. Se anulan con convenciones por proyecto si están definidas.`,"settings.setupScript":`Script de setup`,"settings.cleanupScript":`Script de limpieza`,"settings.archiveScript":`Script de archivado`,"settings.archiveScriptHint":`Script de shell ejecutado en el servidor en el worktree cuando se archiva un workspace. Dejar vacío para desactivar.`,"settings.archiveScriptPlaceholder":`p. ej. limpiar contenedores, liberar espacio en disco…`,"settings.hook.sessionEndedTitle":`Hook: sesión finalizada`,"settings.hook.sessionEndedHint":`Se ejecuta cuando termina una sesión del agente, sea cual sea el motivo. Lee KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID y KOBO_SESSION_EXIT_CODE. Vacío = desactivado.`,"settings.hook.sessionEndedPlaceholder":`p. ej. npm test, o avisar a un canal de chat…`,"settings.hook.prMergedTitle":`Hook: PR fusionada`,"settings.hook.prMergedHint":`Se ejecuta cuando se detecta una PR fusionada, antes de archivar o purgar el workspace: el worktree sigue en disco. Lee KOBO_PR_NUMBER y KOBO_PR_URL. Vacío = desactivado.`,"settings.hook.prMergedPlaceholder":`p. ej. lanzar un despliegue, etiquetar una release…`,"settings.hook.autoLoopDisabledTitle":`Hook: auto-loop detenido`,"settings.hook.autoLoopDisabledHint":`Se ejecuta cada vez que se desactiva el auto-loop, por Kōbō o por ti. Lee KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) y KOBO_TASKS_PENDING. Vacío = desactivado.`,"settings.hook.autoLoopDisabledPlaceholder":`p. ej. enviar un aviso cuando el bucle se atasca…`,"settings.changeSourceBranchScript":`Script para cambiar la rama de origen`,"settings.changeSourceBranchScript.help":`Reemplaza el cherry-pick integrado cuando no está vacío. El script gestiona git, base de la PR, force-push y conflictos; Kōbō solo rechaza si el agente está corriendo y actualiza los metadatos de la rama de origen en exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — nueva rama de origen elegida en el diálogo
|
|
2
2
|
KOBO_OLD_BASE — rama de origen anterior del workspace
|
|
3
3
|
KOBO_WORKING_BRANCH — rama de trabajo del workspace
|
|
4
4
|
KOBO_WORKTREE_PATH — ruta absoluta del worktree (también cwd)
|
package/src/client/dist/pwa/assets/{expand-template-DLDl1qPx.js → expand-template-ByoC_kxX.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as e,j as t,ot as n,ut as r,v as i}from"./reactivity.esm-bundler-Bo9anJjg.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-CNFKm4ij.js";import{P as x,S,b as C,c as w,ct as T,et as E,l as D,pt as O,tt as k,y as A,z as j}from"./QBtn-DEdx_Y1V.js";import{a as M,i as N}from"./pinia-CTJ3OfP3.js";import{Ct as P,Rt as F}from"./index-CqZ7sDcM.js";import{t as I}from"./use-slide-transition-CiaDm-tR.js";import{a as L}from"./use-tours-CNe8qb1q.js";import{a as R,i as ee,n as te,o as ne,r as z,s as B}from"./efforts-BDHAnNUs.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&&E(e)}var Y=k({name:`StepHeader`,props:{stepper:{},step:{},goToPanel:Function},setup(t,{attrs:n}){let r=A(),i=e(null),o=h(()=>t.stepper.modelValue===t.step.name),s=h(()=>{let e=t.step.disable;return e===!0||e===``}),c=h(()=>{let e=t.step.error;return e===!0||e===``}),l=h(()=>{let e=t.step.done;return!s.value&&(e===!0||e===``)}),u=h(()=>{let e=t.step.headerNav;return t.stepper.headerNav===!0&&(e===!0||e===``||e===void 0)}),f=h(()=>!s.value&&u.value),p=h(()=>{if(o.value)return t.step.activeIcon||t.stepper.activeIcon||r.iconSet.stepper.active;if(c.value)return t.step.errorIcon||t.stepper.errorIcon||r.iconSet.stepper.error;if(l.value)return t.step.doneIcon||t.stepper.doneIcon||r.iconSet.stepper.done}),m=h(()=>!!t.step.prefix&&(p.value===void 0||p.value===`none`)),g=h(()=>p.value!==void 0&&p.value!==`none`?p.value:t.step.icon||t.stepper.inactiveIcon),_=h(()=>{let e=c.value?t.step.errorColor||t.stepper.errorColor:void 0;if(o.value){let n=t.step.activeColor||t.stepper.activeColor||t.step.color;return n===void 0?e:n}return e===void 0?!s.value&&l.value?t.step.doneColor||t.stepper.doneColor||t.step.color||t.stepper.inactiveColor:t.step.color||t.stepper.inactiveColor:e}),v=h(()=>`q-stepper__tab col-grow flex items-center no-wrap relative-position q-stepper__tab--${t.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(()=>t.stepper.headerNav&&f.value);function b(){i.value?.focus({preventScroll:!0}),o.value||t.goToPanel(t.step.name)}function x(e){[13,32].includes(e.keyCode)&&(o.value||t.goToPanel(t.step.name),E(e))}return()=>{let e={class:v.value,"aria-current":o.value?`step`:void 0};u.value&&(e.role=`button`,s.value?(e.tabindex=-1,e[`aria-disabled`]=`true`):(e.onClick=b,e.onKeydown=J,e.onKeyup=x,e.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?t.step.prefix:a(D,{name:g.value})])])];if(t.step.title!==void 0&&t.step.title!==null){let e=[a(`div`,{class:`q-stepper__title`},t.step.title)];t.step.caption!==void 0&&t.step.caption!==null&&e.push(a(`div`,{class:`q-stepper__caption`},t.step.caption)),r.push(a(`div`,{class:`q-stepper__label q-stepper__line relative-position`},e))}return d(a(`div`,e,r),[[w,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`}`},S(e.default))])}var Z={props:{vertical:Boolean},setup(e,{slots:t}){return()=>X(t,e.vertical)}},re=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(t,{slots:n,emit:r}){let i=A(),s=u(j,x);if(s===x)return console.error(`QStep needs to be a child of QStepper`),x;let{getCache:l}=ne(),{onEnter:d,onLeave:f}=I(()=>Number(s.value.transitionDuration)),p=e(null),g=h(()=>s.value.modelValue===t.name),_=h(()=>!i.platform.is.ios&&i.platform.is.chrome||!g.value||!s.value.vertical?{}:{onScroll(e){let{target:n}=e;n.scrollTop>0&&(n.scrollTop=0),t.onScroll!==void 0&&r(`scroll`,e)}}),v=h(()=>typeof t.name==`string`||typeof t.name==`number`?t.name:String(t.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=e(!1);o(g,e=>{if(e||s.value.vertical||!s.value.animated){b.value=!1;return}b.value=!0,c(()=>{b.value=!1})});function S(){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=S();return s.value.keepAlive?a(m,s.value.keepAliveProps.value,e===void 0?void 0:[e]):e}let w=h(()=>`q-stepper__step q-stepper__step--${s.value.vertical?`vertical`:`horizontal`}`);return()=>{let{vertical:e,animated:n}=s.value,r=e||g.value,i=[n?a(T,{key:`content`,...y.value},C):C()];return e&&i.unshift(a(Y,{key:`header`,stepper:s.value,step:t,goToPanel:s.value.goToPanel})),a(`div`,{ref:p,class:w.value,role:r?`group`:void 0,"aria-label":r?t.title:void 0,..._.value},i)}}}),ie=/(-\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 ae(e){let t={};for(let n in e){let r=n.replace(ie,e=>e[1].toUpperCase());t[r]=e[n]}return t}var oe=k({name:`QStepper`,props:{...M,...R,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:ee,setup(t,{slots:n}){let r=A(),i=N(t,r),{updatePanelsList:s,isValidPanelName:c,updatePanelIndex:u,getPanels:f,panelTransition:p,panelDirectives:m,goToPanel:g,keepAliveProps:_,needsUniqueKeepAliveWrapper:v}=te(),y=e([]);o(()=>t.modelValue,e=>{if(t.keepAliveMax===void 0||!c(e))return;let n=String(e),r=y.value.filter(e=>e!==n);r.push(n),r.length>t.keepAliveMax&&r.splice(0,r.length-t.keepAliveMax),y.value=r},{immediate:!0});let b=h(()=>t.keepAliveMax===void 0?_.value:{include:t.keepAliveInclude===void 0?y.value:y.value.filter(e=>Q(t.keepAliveInclude,e)),exclude:t.keepAliveExclude}),x=h(()=>t.keepAliveMax!==void 0||v.value);l(j,h(()=>({goToPanel:g,keepAliveProps:b,needsUniqueKeepAliveWrapper:x,panelTransition:p,...t})));let w=h(()=>`q-stepper q-stepper--${t.vertical?`vertical`:`horizontal`}`+(t.flat?` q-stepper--flat`:``)+(t.bordered?` q-stepper--bordered`:``)+(i()?` q-stepper--dark q-dark`:``)),T=h(()=>`q-stepper__header row items-stretch justify-between q-stepper__header--${t.alternativeLabels?`alternative`:`standard`}-labels`+(t.bordered||!t.flat?` q-stepper__header--border`:``)+(t.contracted?` q-stepper__header--contracted`:``)+(t.headerClass===void 0?``:` ${t.headerClass}`)),E=h(()=>`q-stepper__content`+(t.vertical?``:` q-panel-parent`)),D=h(()=>{if(!t.vertical)return m.value;let[e,,n,r]=m.value[0];return[[e,void 0,n,r]]});function O(){let e=S(n.message,[]);c(t.modelValue)&&u();let r=d(a(`div`,{key:`content`,class:E.value},S(n.default)),D.value);return t.vertical?e===void 0?[r]:e.concat(r):[a(`div`,{key:`header`,class:T.value},f().map(e=>{let n=ae(e.props);return a(Y,{key:n.name,stepper:t,step:n,goToPanel:g})})),e,r]}return()=>(s(n),a(`div`,{class:w.value},C(n.navigation,O())))}}),se={class:`slash-suggestions rounded-borders`},ce={class:`slash-section-header`},le=[`onMousedown`],ue={class:`slash-name text-caption`},de={class:`slash-section-header`},fe=[`onMousedown`],pe={class:`slash-name text-caption`},$={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},me={class:`slash-section-header`},he=[`onMousedown`],ge={class:`slash-name text-caption`},_e={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},ve=L(y({__name:`SlashSuggestionsPopup`,props:{groupedDropdown:{},flatDropdown:{},selectedIndex:{}},emits:[`select`],setup(e,{emit:i}){let{t:a}=F(),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`,se,[e.groupedDropdown.skills.length>0?(s(),g(_,{key:0},[v(`div`,ce,r(t(a)(`chatInput.dropdownSkills`)),1),(s(!0),g(_,null,b(e.groupedDropdown.skills,t=>(s(),g(`div`,{key:`skill-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:O(e=>o(`select`,t),[`prevent`])},[f(D,{name:`bolt`,size:`12px`,color:`primary`,class:`q-mr-xs`}),v(`span`,ue,r(t.name),1)],42,le))),128))],64)):p(``,!0),e.groupedDropdown.kobo.length>0?(s(),g(_,{key:1},[v(`div`,de,r(t(a)(`chatInput.dropdownKobo`)),1),(s(!0),g(_,null,b(e.groupedDropdown.kobo,t=>(s(),g(`div`,{key:`kobo-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:O(e=>o(`select`,t),[`prevent`])},[f(D,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),v(`span`,pe,`/`+r(t.name),1),c(t.name)?(s(),g(`span`,$,`— `+r(c(t.name)),1)):p(``,!0)],42,fe))),128))],64)):p(``,!0),e.groupedDropdown.templates.length>0?(s(),g(_,{key:2},[v(`div`,me,r(t(a)(`chatInput.dropdownTemplates`)),1),(s(!0),g(_,null,b(e.groupedDropdown.templates,t=>(s(),g(`div`,{key:`tpl-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:O(e=>o(`select`,t),[`prevent`])},[f(D,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),v(`span`,ge,`/`+r(t.name),1),t.description?(s(),g(`span`,_e,`— `+r(t.description),1)):p(``,!0)],42,he))),128))],64)):p(``,!0)]))}}),[[`__scopeId`,`data-v-931c9d69`]]);function ye(e,t,n={}){let r=P(),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 fetch(`/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 be(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)})}function xe(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{oe as a,G as c,q as d,ve as i,W as l,be as n,re as o,ye as r,U as s,xe as t,K as u};
|
|
1
|
+
import{S as e,j as t,ot as n,ut as r,v as i}from"./reactivity.esm-bundler-Bo9anJjg.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-CNFKm4ij.js";import{P as x,S,b as C,c as w,ct as T,et as E,l as D,pt as O,tt as k,y as A,z as j}from"./QBtn-DEdx_Y1V.js";import{a as M,i as N}from"./pinia-CTJ3OfP3.js";import{Ct as P,Rt as F}from"./index-DsaWUT_Z.js";import{t as I}from"./use-slide-transition-CiaDm-tR.js";import{a as L}from"./use-tours-CDdnvIaG.js";import{a as R,i as ee,n as te,o as ne,r as z,s as B}from"./efforts-ChUC4xtk.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&&E(e)}var Y=k({name:`StepHeader`,props:{stepper:{},step:{},goToPanel:Function},setup(t,{attrs:n}){let r=A(),i=e(null),o=h(()=>t.stepper.modelValue===t.step.name),s=h(()=>{let e=t.step.disable;return e===!0||e===``}),c=h(()=>{let e=t.step.error;return e===!0||e===``}),l=h(()=>{let e=t.step.done;return!s.value&&(e===!0||e===``)}),u=h(()=>{let e=t.step.headerNav;return t.stepper.headerNav===!0&&(e===!0||e===``||e===void 0)}),f=h(()=>!s.value&&u.value),p=h(()=>{if(o.value)return t.step.activeIcon||t.stepper.activeIcon||r.iconSet.stepper.active;if(c.value)return t.step.errorIcon||t.stepper.errorIcon||r.iconSet.stepper.error;if(l.value)return t.step.doneIcon||t.stepper.doneIcon||r.iconSet.stepper.done}),m=h(()=>!!t.step.prefix&&(p.value===void 0||p.value===`none`)),g=h(()=>p.value!==void 0&&p.value!==`none`?p.value:t.step.icon||t.stepper.inactiveIcon),_=h(()=>{let e=c.value?t.step.errorColor||t.stepper.errorColor:void 0;if(o.value){let n=t.step.activeColor||t.stepper.activeColor||t.step.color;return n===void 0?e:n}return e===void 0?!s.value&&l.value?t.step.doneColor||t.stepper.doneColor||t.step.color||t.stepper.inactiveColor:t.step.color||t.stepper.inactiveColor:e}),v=h(()=>`q-stepper__tab col-grow flex items-center no-wrap relative-position q-stepper__tab--${t.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(()=>t.stepper.headerNav&&f.value);function b(){i.value?.focus({preventScroll:!0}),o.value||t.goToPanel(t.step.name)}function x(e){[13,32].includes(e.keyCode)&&(o.value||t.goToPanel(t.step.name),E(e))}return()=>{let e={class:v.value,"aria-current":o.value?`step`:void 0};u.value&&(e.role=`button`,s.value?(e.tabindex=-1,e[`aria-disabled`]=`true`):(e.onClick=b,e.onKeydown=J,e.onKeyup=x,e.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?t.step.prefix:a(D,{name:g.value})])])];if(t.step.title!==void 0&&t.step.title!==null){let e=[a(`div`,{class:`q-stepper__title`},t.step.title)];t.step.caption!==void 0&&t.step.caption!==null&&e.push(a(`div`,{class:`q-stepper__caption`},t.step.caption)),r.push(a(`div`,{class:`q-stepper__label q-stepper__line relative-position`},e))}return d(a(`div`,e,r),[[w,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`}`},S(e.default))])}var Z={props:{vertical:Boolean},setup(e,{slots:t}){return()=>X(t,e.vertical)}},re=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(t,{slots:n,emit:r}){let i=A(),s=u(j,x);if(s===x)return console.error(`QStep needs to be a child of QStepper`),x;let{getCache:l}=ne(),{onEnter:d,onLeave:f}=I(()=>Number(s.value.transitionDuration)),p=e(null),g=h(()=>s.value.modelValue===t.name),_=h(()=>!i.platform.is.ios&&i.platform.is.chrome||!g.value||!s.value.vertical?{}:{onScroll(e){let{target:n}=e;n.scrollTop>0&&(n.scrollTop=0),t.onScroll!==void 0&&r(`scroll`,e)}}),v=h(()=>typeof t.name==`string`||typeof t.name==`number`?t.name:String(t.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=e(!1);o(g,e=>{if(e||s.value.vertical||!s.value.animated){b.value=!1;return}b.value=!0,c(()=>{b.value=!1})});function S(){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=S();return s.value.keepAlive?a(m,s.value.keepAliveProps.value,e===void 0?void 0:[e]):e}let w=h(()=>`q-stepper__step q-stepper__step--${s.value.vertical?`vertical`:`horizontal`}`);return()=>{let{vertical:e,animated:n}=s.value,r=e||g.value,i=[n?a(T,{key:`content`,...y.value},C):C()];return e&&i.unshift(a(Y,{key:`header`,stepper:s.value,step:t,goToPanel:s.value.goToPanel})),a(`div`,{ref:p,class:w.value,role:r?`group`:void 0,"aria-label":r?t.title:void 0,..._.value},i)}}}),ie=/(-\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 ae(e){let t={};for(let n in e){let r=n.replace(ie,e=>e[1].toUpperCase());t[r]=e[n]}return t}var oe=k({name:`QStepper`,props:{...M,...R,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:ee,setup(t,{slots:n}){let r=A(),i=N(t,r),{updatePanelsList:s,isValidPanelName:c,updatePanelIndex:u,getPanels:f,panelTransition:p,panelDirectives:m,goToPanel:g,keepAliveProps:_,needsUniqueKeepAliveWrapper:v}=te(),y=e([]);o(()=>t.modelValue,e=>{if(t.keepAliveMax===void 0||!c(e))return;let n=String(e),r=y.value.filter(e=>e!==n);r.push(n),r.length>t.keepAliveMax&&r.splice(0,r.length-t.keepAliveMax),y.value=r},{immediate:!0});let b=h(()=>t.keepAliveMax===void 0?_.value:{include:t.keepAliveInclude===void 0?y.value:y.value.filter(e=>Q(t.keepAliveInclude,e)),exclude:t.keepAliveExclude}),x=h(()=>t.keepAliveMax!==void 0||v.value);l(j,h(()=>({goToPanel:g,keepAliveProps:b,needsUniqueKeepAliveWrapper:x,panelTransition:p,...t})));let w=h(()=>`q-stepper q-stepper--${t.vertical?`vertical`:`horizontal`}`+(t.flat?` q-stepper--flat`:``)+(t.bordered?` q-stepper--bordered`:``)+(i()?` q-stepper--dark q-dark`:``)),T=h(()=>`q-stepper__header row items-stretch justify-between q-stepper__header--${t.alternativeLabels?`alternative`:`standard`}-labels`+(t.bordered||!t.flat?` q-stepper__header--border`:``)+(t.contracted?` q-stepper__header--contracted`:``)+(t.headerClass===void 0?``:` ${t.headerClass}`)),E=h(()=>`q-stepper__content`+(t.vertical?``:` q-panel-parent`)),D=h(()=>{if(!t.vertical)return m.value;let[e,,n,r]=m.value[0];return[[e,void 0,n,r]]});function O(){let e=S(n.message,[]);c(t.modelValue)&&u();let r=d(a(`div`,{key:`content`,class:E.value},S(n.default)),D.value);return t.vertical?e===void 0?[r]:e.concat(r):[a(`div`,{key:`header`,class:T.value},f().map(e=>{let n=ae(e.props);return a(Y,{key:n.name,stepper:t,step:n,goToPanel:g})})),e,r]}return()=>(s(n),a(`div`,{class:w.value},C(n.navigation,O())))}}),se={class:`slash-suggestions rounded-borders`},ce={class:`slash-section-header`},le=[`onMousedown`],ue={class:`slash-name text-caption`},de={class:`slash-section-header`},fe=[`onMousedown`],pe={class:`slash-name text-caption`},$={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},me={class:`slash-section-header`},he=[`onMousedown`],ge={class:`slash-name text-caption`},_e={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},ve=L(y({__name:`SlashSuggestionsPopup`,props:{groupedDropdown:{},flatDropdown:{},selectedIndex:{}},emits:[`select`],setup(e,{emit:i}){let{t:a}=F(),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`,se,[e.groupedDropdown.skills.length>0?(s(),g(_,{key:0},[v(`div`,ce,r(t(a)(`chatInput.dropdownSkills`)),1),(s(!0),g(_,null,b(e.groupedDropdown.skills,t=>(s(),g(`div`,{key:`skill-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:O(e=>o(`select`,t),[`prevent`])},[f(D,{name:`bolt`,size:`12px`,color:`primary`,class:`q-mr-xs`}),v(`span`,ue,r(t.name),1)],42,le))),128))],64)):p(``,!0),e.groupedDropdown.kobo.length>0?(s(),g(_,{key:1},[v(`div`,de,r(t(a)(`chatInput.dropdownKobo`)),1),(s(!0),g(_,null,b(e.groupedDropdown.kobo,t=>(s(),g(`div`,{key:`kobo-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:O(e=>o(`select`,t),[`prevent`])},[f(D,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),v(`span`,pe,`/`+r(t.name),1),c(t.name)?(s(),g(`span`,$,`— `+r(c(t.name)),1)):p(``,!0)],42,fe))),128))],64)):p(``,!0),e.groupedDropdown.templates.length>0?(s(),g(_,{key:2},[v(`div`,me,r(t(a)(`chatInput.dropdownTemplates`)),1),(s(!0),g(_,null,b(e.groupedDropdown.templates,t=>(s(),g(`div`,{key:`tpl-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:O(e=>o(`select`,t),[`prevent`])},[f(D,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),v(`span`,ge,`/`+r(t.name),1),t.description?(s(),g(`span`,_e,`— `+r(t.description),1)):p(``,!0)],42,he))),128))],64)):p(``,!0)]))}}),[[`__scopeId`,`data-v-931c9d69`]]);function ye(e,t,n={}){let r=P(),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 fetch(`/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 be(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)})}function xe(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{oe as a,G as c,q as d,ve as i,W as l,be as n,re as o,ye as r,U as s,xe as t,K as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{bt as e,zt as t}from"./index-
|
|
1
|
+
import{bt as e,zt as t}from"./index-DsaWUT_Z.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 ee(e,t,n){let r=ne(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 te(e,t,n,r){let i=ne(e,t),a=e.splice(i,n);return a===void 0&&(a=[]),ee(e,i,r),a}function ne(e,t){return t<0?Math.max(t+e.length,0):Math.min(t,e.length)}var re;(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})(re||={});function ie(e,t){return(n,r)=>t(e(n),e(r))}function ae(...e){return(t,n)=>{for(let r of e){let e=r(t,n);if(!re.isNeitherLessOrGreaterThan(e))return e}return re.neitherLessOrGreaterThan}}var oe=(e,t)=>e-t,se=(e,t)=>oe(+!!e,+!!t);function ce(e){return(t,n)=>-e(t,n)}function le(e){return(t,n)=>t===void 0?n===void 0?re.neitherLessOrGreaterThan:re.lessThan:n===void 0?re.greaterThan:e(t,n)}var ue=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.items.length&&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}},de=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||re.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0)),t}};n=de,n.empty=new n(e=>{});var fe=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 pe(e){return e.reduce((e,t)=>e+t,0)}var me=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Ee.isErrorNoTelemetry(e)?new Ee(e.message+`
|
|
2
2
|
|
|
3
3
|
`+e.stack):Error(e.message+`
|
|
4
4
|
|