@alisio/server 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/web/assets/AgentPicker-DdNTLaD8.js +1 -0
  2. package/dist/web/assets/{AgentsModal-DO_a_maB.js → AgentsModal-B3-kqVtB.js} +2 -2
  3. package/dist/web/assets/{ArtifactPanel-BXGglcMT.js → ArtifactPanel-9ceOZZ3C.js} +3 -3
  4. package/dist/web/assets/{BtwPanel-CpM2CMAa.js → BtwPanel-BE5fR9pE.js} +1 -1
  5. package/dist/web/assets/{ChangelogDialog-CbWWHURR.js → ChangelogDialog-DtES28W8.js} +1 -1
  6. package/dist/web/assets/{CopyButton-CjhnJP_Q.js → CopyButton-Dk4uAAds.js} +1 -1
  7. package/dist/web/assets/{GoalBar-BHasvsUN.js → GoalBar-CyVF8K-Z.js} +1 -1
  8. package/dist/web/assets/{MemoryTab-CBdxeiu2.js → MemoryTab-BhnTyjfN.js} +1 -1
  9. package/dist/web/assets/{PermissionsMenu-DfjOQXiP.js → PermissionsMenu-B7VCM171.js} +1 -1
  10. package/dist/web/assets/{PlanReviewPanel-Cj6euQ8c.js → PlanReviewPanel-I9k0n1PI.js} +1 -1
  11. package/dist/web/assets/{PlanViewer-Bdsnxn17.js → PlanViewer-DA9CWaqD.js} +1 -1
  12. package/dist/web/assets/{SettingsModal-DJZV4R-N.js → SettingsModal-uDdcd0QF.js} +1 -1
  13. package/dist/web/assets/{SpreadsheetPanel-Dh_9t4Dl.js → SpreadsheetPanel-B6iIU-Tm.js} +1 -1
  14. package/dist/web/assets/{TasksTab-CXFELPxa.js → TasksTab-D1XtfjR2.js} +1 -1
  15. package/dist/web/assets/{TrajectoryTab-C4FdQeIo.js → TrajectoryTab-Cp-heO1L.js} +1 -1
  16. package/dist/web/assets/{agents.module-CTsUhLaM.js → agents.module-Dkf3qqQJ.js} +1 -1
  17. package/dist/web/assets/app-CRws2ENG.js +3 -0
  18. package/dist/web/assets/es-B4DBw6dD.js +3 -0
  19. package/dist/web/assets/{goal-_G1_dV7L.js → goal-COSa6hht.js} +1 -1
  20. package/dist/web/assets/{i18n-5hLM22OW.js → i18n-cdcw61GT.js} +2 -2
  21. package/dist/web/assets/{icons-B73SLmpL.js → icons-CxEvdUqL.js} +1 -1
  22. package/dist/web/assets/index-CbAVm5R6.js +74 -0
  23. package/dist/web/assets/{jsxRuntime-CEDop1qk.js → jsxRuntime-B0JBTZJT.js} +1 -1
  24. package/dist/web/assets/{panel-C7vXnPl1.js → panel-SiMYWT2U.js} +1 -1
  25. package/dist/web/assets/{shared-C6mBoZE7.js → shared-b2mgJ52f.js} +1 -1
  26. package/dist/web/assets/{strings-o_JybVIm.js → strings-DL3oOguC.js} +1 -1
  27. package/dist/web/assets/{tasks-CUxuvxyE.js → tasks-BqS9CisZ.js} +1 -1
  28. package/dist/web/assets/{view-DcRXUGgH.js → view-652PG12c.js} +1 -1
  29. package/dist/web/assets/{view-C3k7-6aB.js → view-BTj63-sN.js} +1 -1
  30. package/dist/web/assets/{view-BtV7SOYo.js → view-BoJ1ze3A.js} +1 -1
  31. package/dist/web/assets/{view--Zq4y8kt.js → view-CGY_yTYh.js} +1 -1
  32. package/dist/web/assets/view-CWduqpMG.js +1 -0
  33. package/dist/web/assets/{view-DPXOgMnm.js → view-CmFzehxZ.js} +1 -1
  34. package/dist/web/assets/{view-CQlMfaga.js → view-D2Osnx-w.js} +1 -1
  35. package/dist/web/assets/{view-4_MkskJL.js → view-WSYIqDWi.js} +1 -1
  36. package/dist/web/assets/{view-DPGKsznA.js → view-k1GHIbUp.js} +1 -1
  37. package/dist/web/index.html +7 -7
  38. package/package.json +4 -4
  39. package/dist/web/assets/AgentPicker-DvEgGKX2.js +0 -1
  40. package/dist/web/assets/app-Bz5woy3j.js +0 -3
  41. package/dist/web/assets/es-CfMAOJMB.js +0 -3
  42. package/dist/web/assets/index-DAjk4UP-.js +0 -74
  43. package/dist/web/assets/view-BHJyH4B2.js +0 -1
@@ -1,4 +1,4 @@
1
- import{_ as e,a as t}from"./i18n-5hLM22OW.js";import{t as n}from"./jsxRuntime-CEDop1qk.js";import{t as r}from"./CopyButton-CjhnJP_Q.js";import{t as i}from"./purify.es--06brOip.js";var a=class e extends Error{constructor(t,n){var r=`KaTeX parse error: `+t,i,a,o=n&&n.loc;if(o&&o.start<=o.end){var s=o.lexer.input;i=o.start,a=o.end,i===s.length?r+=` at end of input: `:r+=` at position `+(i+1)+`: `;var c=s.slice(i,a).replace(/[^]/g,`$&̲`),l=i>15?`…`+s.slice(i-15,i):s.slice(0,i),u=a+15<s.length?s.slice(a,a+15)+`…`:s.slice(a);r+=l+c+u}super(r),this.name=`ParseError`,this.position=void 0,this.length=void 0,this.rawMessage=void 0,Object.setPrototypeOf(this,e.prototype),this.position=i,i!=null&&a!=null&&(this.length=a-i),this.rawMessage=t}},o=/([A-Z])/g,s=e=>e.replace(o,`-$1`).toLowerCase(),c={"&":`&amp;`,">":`&gt;`,"<":`&lt;`,'"':`&quot;`,"'":`&#x27;`},l=/[&><"']/g,u=e=>String(e).replace(l,e=>c[e]),d=e=>e.type===`ordgroup`||e.type===`color`?e.body.length===1?d(e.body[0]):e:e.type===`font`?d(e.body):e,f=new Set([`mathord`,`textord`,`atom`]),p=e=>f.has(d(e).type),m=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return t?t[2]!==`:`||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():`_relative`},h={displayMode:{type:`boolean`,description:`Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.`,cli:`-d, --display-mode`},output:{type:{enum:[`htmlAndMathml`,`html`,`mathml`]},description:`Determines the markup language of the output.`,cli:`-F, --format <type>`},leqno:{type:`boolean`,description:`Render display math in leqno style (left-justified tags).`},fleqn:{type:`boolean`,description:`Render display math flush left.`},throwOnError:{type:`boolean`,default:!0,cli:`-t, --no-throw-on-error`,cliDescription:`Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error.`},errorColor:{type:`string`,default:`#cc0000`,cli:`-c, --error-color <color>`,cliDescription:`A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.`,cliProcessor:e=>`#`+e},macros:{type:`object`,cli:`-m, --macro <def>`,cliDescription:`Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).`,cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:`number`,description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:`--min-rule-thickness <size>`,cliProcessor:parseFloat},colorIsTextColor:{type:`boolean`,description:`Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.`,cli:`-b, --color-is-text-color`},strict:{type:[{enum:[`warn`,`ignore`,`error`]},`boolean`,`function`],description:`Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.`,cli:`-S, --strict`,cliDefault:!1},trust:{type:[`boolean`,`function`],description:`Trust the input, enabling all HTML features such as \\url.`,cli:`-T, --trust`},maxSize:{type:`number`,default:1/0,description:`If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large`,processor:e=>Math.max(0,e),cli:`-s, --max-size <n>`,cliProcessor:parseInt},maxExpand:{type:`number`,default:1e3,description:`Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.`,processor:e=>Math.max(0,e),cli:`-e, --max-expand <n>`,cliProcessor:e=>e===`Infinity`?1/0:parseInt(e)},globalGroup:{type:`boolean`,cli:!1}};function g(e){if(typeof e!=`string`)return e.enum[0];switch(e){case`boolean`:return!1;case`string`:return``;case`number`:return 0;case`object`:return{};default:throw Error(`Unexpected schema type; settings must declare an explicit default.`)}}function _(e){return Object.prototype.hasOwnProperty.call(e,`default`)&&e.default!==void 0?e.default:g(Array.isArray(e.type)?e.type[0]:e.type)}function v(e,t,n,r){var i=Object.prototype.hasOwnProperty.call(n,t)?n[t]:void 0,a=Object.prototype.hasOwnProperty.call(r,`processor`)?r.processor:void 0;e[t]=i===void 0?_(r):a?a(i):i}var y=class{constructor(e){e===void 0&&(e={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e||={};for(var t of Object.keys(h)){var n=h[t];n&&v(this,t,e,n)}}reportNonstrict(e,t,n){var r=this.strict;if(typeof r==`function`&&(r=r(e,t,n)),r&&r!==`ignore`){if(r===!0||r===`error`)throw new a(`LaTeX-incompatible input and strict mode is set to 'error': `+(t+` [`+e+`]`),n);r===`warn`?typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to 'warn': `+(t+` [`+e+`]`)):typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to `+(`unrecognized '`+r+`': `+t+` [`+e+`]`))}}useStrictBehavior(e,t,n){var r=this.strict;if(typeof r==`function`)try{r=r(e,t,n)}catch{r=`error`}return!r||r===`ignore`?!1:r===!0||r===`error`?!0:r===`warn`?(typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to 'warn': `+(t+` [`+e+`]`)),!1):(typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to `+(`unrecognized '`+r+`': `+t+` [`+e+`]`)),!1)}isTrusted(e){if(`url`in e&&e.url&&!e.protocol){var t=m(e.url);if(t==null)return!1;e.protocol=t}return!!(typeof this.trust==`function`?this.trust(e):this.trust)}},b=class{constructor(e,t,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=n}sup(){return ne[re[this.id]]}sub(){return ne[ie[this.id]]}fracNum(){return ne[ae[this.id]]}fracDen(){return ne[oe[this.id]]}cramp(){return ne[se[this.id]]}text(){return ne[ce[this.id]]}isTight(){return this.size>=2}},x=0,S=1,C=2,w=3,ee=4,T=5,te=6,E=7,ne=[new b(x,0,!1),new b(S,0,!0),new b(C,1,!1),new b(w,1,!0),new b(ee,2,!1),new b(T,2,!0),new b(te,3,!1),new b(E,3,!0)],re=[ee,T,ee,T,te,E,te,E],ie=[T,T,T,T,E,E,E,E],ae=[C,w,ee,T,te,E,te,E],oe=[w,w,T,T,E,E,E,E],se=[S,S,w,w,T,T,E,E],ce=[x,S,C,w,C,w,C,w],D={DISPLAY:ne[x],TEXT:ne[C],SCRIPT:ne[ee],SCRIPTSCRIPT:ne[te]},le=[{name:`latin`,blocks:[[256,591],[768,879]]},{name:`cyrillic`,blocks:[[1024,1279]]},{name:`armenian`,blocks:[[1328,1423]]},{name:`brahmic`,blocks:[[2304,4255]]},{name:`georgian`,blocks:[[4256,4351]]},{name:`cjk`,blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:`hangul`,blocks:[[44032,55215]]}];function ue(e){for(var t=0;t<le.length;t++)for(var n=le[t],r=0;r<n.blocks.length;r++){var i=n.blocks[r];if(e>=i[0]&&e<=i[1])return n.name}return null}var de=[];le.forEach(e=>e.blocks.forEach(e=>de.push(...e)));function fe(e){for(var t=0;t<de.length;t+=2)if(e>=de[t]&&e<=de[t+1])return!0;return!1}var pe=e=>e+` `+e,me=80,he=function(e,t){return`M95,`+(622+e+t)+`
1
+ import{_ as e,a as t}from"./i18n-cdcw61GT.js";import{t as n}from"./jsxRuntime-B0JBTZJT.js";import{t as r}from"./CopyButton-Dk4uAAds.js";import{t as i}from"./purify.es--06brOip.js";var a=class e extends Error{constructor(t,n){var r=`KaTeX parse error: `+t,i,a,o=n&&n.loc;if(o&&o.start<=o.end){var s=o.lexer.input;i=o.start,a=o.end,i===s.length?r+=` at end of input: `:r+=` at position `+(i+1)+`: `;var c=s.slice(i,a).replace(/[^]/g,`$&̲`),l=i>15?`…`+s.slice(i-15,i):s.slice(0,i),u=a+15<s.length?s.slice(a,a+15)+`…`:s.slice(a);r+=l+c+u}super(r),this.name=`ParseError`,this.position=void 0,this.length=void 0,this.rawMessage=void 0,Object.setPrototypeOf(this,e.prototype),this.position=i,i!=null&&a!=null&&(this.length=a-i),this.rawMessage=t}},o=/([A-Z])/g,s=e=>e.replace(o,`-$1`).toLowerCase(),c={"&":`&amp;`,">":`&gt;`,"<":`&lt;`,'"':`&quot;`,"'":`&#x27;`},l=/[&><"']/g,u=e=>String(e).replace(l,e=>c[e]),d=e=>e.type===`ordgroup`||e.type===`color`?e.body.length===1?d(e.body[0]):e:e.type===`font`?d(e.body):e,f=new Set([`mathord`,`textord`,`atom`]),p=e=>f.has(d(e).type),m=e=>{var t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(e);return t?t[2]!==`:`||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():`_relative`},h={displayMode:{type:`boolean`,description:`Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.`,cli:`-d, --display-mode`},output:{type:{enum:[`htmlAndMathml`,`html`,`mathml`]},description:`Determines the markup language of the output.`,cli:`-F, --format <type>`},leqno:{type:`boolean`,description:`Render display math in leqno style (left-justified tags).`},fleqn:{type:`boolean`,description:`Render display math flush left.`},throwOnError:{type:`boolean`,default:!0,cli:`-t, --no-throw-on-error`,cliDescription:`Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error.`},errorColor:{type:`string`,default:`#cc0000`,cli:`-c, --error-color <color>`,cliDescription:`A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.`,cliProcessor:e=>`#`+e},macros:{type:`object`,cli:`-m, --macro <def>`,cliDescription:`Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).`,cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:`number`,description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:`--min-rule-thickness <size>`,cliProcessor:parseFloat},colorIsTextColor:{type:`boolean`,description:`Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.`,cli:`-b, --color-is-text-color`},strict:{type:[{enum:[`warn`,`ignore`,`error`]},`boolean`,`function`],description:`Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.`,cli:`-S, --strict`,cliDefault:!1},trust:{type:[`boolean`,`function`],description:`Trust the input, enabling all HTML features such as \\url.`,cli:`-T, --trust`},maxSize:{type:`number`,default:1/0,description:`If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large`,processor:e=>Math.max(0,e),cli:`-s, --max-size <n>`,cliProcessor:parseInt},maxExpand:{type:`number`,default:1e3,description:`Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.`,processor:e=>Math.max(0,e),cli:`-e, --max-expand <n>`,cliProcessor:e=>e===`Infinity`?1/0:parseInt(e)},globalGroup:{type:`boolean`,cli:!1}};function g(e){if(typeof e!=`string`)return e.enum[0];switch(e){case`boolean`:return!1;case`string`:return``;case`number`:return 0;case`object`:return{};default:throw Error(`Unexpected schema type; settings must declare an explicit default.`)}}function _(e){return Object.prototype.hasOwnProperty.call(e,`default`)&&e.default!==void 0?e.default:g(Array.isArray(e.type)?e.type[0]:e.type)}function v(e,t,n,r){var i=Object.prototype.hasOwnProperty.call(n,t)?n[t]:void 0,a=Object.prototype.hasOwnProperty.call(r,`processor`)?r.processor:void 0;e[t]=i===void 0?_(r):a?a(i):i}var y=class{constructor(e){e===void 0&&(e={}),this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e||={};for(var t of Object.keys(h)){var n=h[t];n&&v(this,t,e,n)}}reportNonstrict(e,t,n){var r=this.strict;if(typeof r==`function`&&(r=r(e,t,n)),r&&r!==`ignore`){if(r===!0||r===`error`)throw new a(`LaTeX-incompatible input and strict mode is set to 'error': `+(t+` [`+e+`]`),n);r===`warn`?typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to 'warn': `+(t+` [`+e+`]`)):typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to `+(`unrecognized '`+r+`': `+t+` [`+e+`]`))}}useStrictBehavior(e,t,n){var r=this.strict;if(typeof r==`function`)try{r=r(e,t,n)}catch{r=`error`}return!r||r===`ignore`?!1:r===!0||r===`error`?!0:r===`warn`?(typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to 'warn': `+(t+` [`+e+`]`)),!1):(typeof console<`u`&&console.warn(`LaTeX-incompatible input and strict mode is set to `+(`unrecognized '`+r+`': `+t+` [`+e+`]`)),!1)}isTrusted(e){if(`url`in e&&e.url&&!e.protocol){var t=m(e.url);if(t==null)return!1;e.protocol=t}return!!(typeof this.trust==`function`?this.trust(e):this.trust)}},b=class{constructor(e,t,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=n}sup(){return ne[re[this.id]]}sub(){return ne[ie[this.id]]}fracNum(){return ne[ae[this.id]]}fracDen(){return ne[oe[this.id]]}cramp(){return ne[se[this.id]]}text(){return ne[ce[this.id]]}isTight(){return this.size>=2}},x=0,S=1,C=2,w=3,ee=4,T=5,te=6,E=7,ne=[new b(x,0,!1),new b(S,0,!0),new b(C,1,!1),new b(w,1,!0),new b(ee,2,!1),new b(T,2,!0),new b(te,3,!1),new b(E,3,!0)],re=[ee,T,ee,T,te,E,te,E],ie=[T,T,T,T,E,E,E,E],ae=[C,w,ee,T,te,E,te,E],oe=[w,w,T,T,E,E,E,E],se=[S,S,w,w,T,T,E,E],ce=[x,S,C,w,C,w,C,w],D={DISPLAY:ne[x],TEXT:ne[C],SCRIPT:ne[ee],SCRIPTSCRIPT:ne[te]},le=[{name:`latin`,blocks:[[256,591],[768,879]]},{name:`cyrillic`,blocks:[[1024,1279]]},{name:`armenian`,blocks:[[1328,1423]]},{name:`brahmic`,blocks:[[2304,4255]]},{name:`georgian`,blocks:[[4256,4351]]},{name:`cjk`,blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:`hangul`,blocks:[[44032,55215]]}];function ue(e){for(var t=0;t<le.length;t++)for(var n=le[t],r=0;r<n.blocks.length;r++){var i=n.blocks[r];if(e>=i[0]&&e<=i[1])return n.name}return null}var de=[];le.forEach(e=>e.blocks.forEach(e=>de.push(...e)));function fe(e){for(var t=0;t<de.length;t+=2)if(e>=de[t]&&e<=de[t+1])return!0;return!1}var pe=e=>e+` `+e,me=80,he=function(e,t){return`M95,`+(622+e+t)+`
2
2
  c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
3
3
  c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
4
4
  c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
@@ -8,15 +8,15 @@
8
8
  <link rel="icon" type="image/png" href="/favicon.png" />
9
9
  <link rel="apple-touch-icon" href="/favicon.png" />
10
10
  <script>(function(){var p="dark";try{p=localStorage.getItem("alisio.theme")||"dark"}catch(e){}var d=p==="system"?(matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"):p==="light"?"light":"dark";document.documentElement.setAttribute("data-theme",d)})()</script>
11
- <script type="module" crossorigin src="/assets/index-DAjk4UP-.js"></script>
11
+ <script type="module" crossorigin src="/assets/index-CbAVm5R6.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-B3nfOi5I.js">
13
- <link rel="modulepreload" crossorigin href="/assets/i18n-5hLM22OW.js">
14
- <link rel="modulepreload" crossorigin href="/assets/app-Bz5woy3j.js">
15
- <link rel="modulepreload" crossorigin href="/assets/jsxRuntime-CEDop1qk.js">
16
- <link rel="modulepreload" crossorigin href="/assets/icons-B73SLmpL.js">
17
- <link rel="modulepreload" crossorigin href="/assets/panel-C7vXnPl1.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/i18n-cdcw61GT.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/app-CRws2ENG.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/jsxRuntime-B0JBTZJT.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/icons-CxEvdUqL.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/panel-SiMYWT2U.js">
18
18
  <link rel="modulepreload" crossorigin href="/assets/clipboard-hOiC7lD8.js">
19
- <link rel="modulepreload" crossorigin href="/assets/CopyButton-CjhnJP_Q.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/CopyButton-Dk4uAAds.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/visible-DLChI0F-.js">
21
21
  <link rel="stylesheet" crossorigin href="/assets/index-BztkMOHM.css">
22
22
  </head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alisio/server",
3
- "version": "0.4.3",
3
+ "version": "0.4.4",
4
4
  "description": "Local HTTP + SSE server behind `alisio serve`: multi-workspace, multi-session web access to the Alisio agent core with a launch-token cookie, strict Host/Origin checks and fail-closed approvals. node:http only; runs on Node >=22.16 and Bun.",
5
5
  "author": "Gustavo Gutiérrez",
6
6
  "license": "MIT",
@@ -39,11 +39,11 @@
39
39
  "node": ">=22.16"
40
40
  },
41
41
  "dependencies": {
42
- "@alisio/core": "0.4.3",
43
- "@alisio/sdk": "0.4.3"
42
+ "@alisio/core": "0.4.4",
43
+ "@alisio/sdk": "0.4.4"
44
44
  },
45
45
  "devDependencies": {
46
- "@alisio/web": "0.4.3"
46
+ "@alisio/web": "0.4.4"
47
47
  },
48
48
  "publishConfig": {
49
49
  "access": "public",
@@ -1 +0,0 @@
1
- import{a as e,b as t,g as n,y as r}from"./i18n-5hLM22OW.js";import{O as i,a,d as o,o as s,t as c}from"./app-Bz5woy3j.js";import{t as l}from"./jsxRuntime-CEDop1qk.js";import{t as u}from"./icons-B73SLmpL.js";import{b as d,t as f,u as p}from"./agents.module-CTsUhLaM.js";import{t as m}from"./settings.module-DoTtRfeo.js";import{a as h,c as g,i as _,l as v,r as y}from"./shared-C6mBoZE7.js";function b(){let b=g(),x=v(b?()=>o.agents(b.id):void 0,[b?.id],[`agents`]),S=v(()=>o.agentDefinitions(b?.id),[b?.id],[`agents`]),[C,w]=r(``),[T,E]=r(0),D=n(null);t(()=>{let e=document.activeElement;return D.current?.querySelector(`input`)?.focus(),()=>e?.focus()},[]);let O=()=>{a.value=!1},k=i.value?.agent??x.data?.find(e=>e.default)?.id,A=p(x.data??[],C),j=e=>{O(),c(e.id)},M=t=>{let n=d(t,S.data?.agents??[]);return n?l(y,{tone:n===`project`?`ok`:`off`,children:e(`agentsWin.scope.${n}`)}):l(y,{tone:`off`,children:t.source===`builtin`?e(`agentsWin.builtin`):e(`agentsWin.plugin`)})};return l(`div`,{class:m.backdrop,onMouseDown:e=>{e.target===e.currentTarget&&O()},children:l(`div`,{ref:D,class:`${m.dialog} ${f.picker}`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`agent-picker-title`,onKeyDown:e=>{if(e.key===`Escape`)e.preventDefault(),O();else if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=e.key===`ArrowDown`?1:-1;E(e=>A.length?(e+t+A.length)%A.length:0)}else if(e.key===`Enter`&&e.target.tagName===`INPUT`){e.preventDefault();let t=A[Math.min(T,A.length-1)];t&&j(t)}},children:[l(`div`,{class:f.pickerHead,children:[l(`div`,{class:f.listHead,children:[l(`div`,{children:[l(`h3`,{class:m.pageTitle,id:`agent-picker-title`,children:e(`agentsWin.picker`)}),l(`p`,{class:m.note,children:e(`agentsWin.pickerLead`)})]}),l(`button`,{type:`button`,class:`icon-btn`,"aria-label":e(`common.close`),onClick:O,children:l(u,{name:`x`,size:18})})]}),l(_,{value:C,label:e(`agentsWin.pickerSearch`),onInput:e=>{w(e),E(0)}})]}),l(`div`,{style:{padding:`0 18px`},children:l(h,{loading:x.loading&&!x.data,error:x.error,empty:b?void 0:`settings.noWorkspace`})}),l(`ul`,{class:f.pickerList,"aria-label":e(`agentsWin.picker`),children:[x.data&&!A.length?l(`li`,{class:m.note,children:e(`agentsWin.pickerEmpty`,{query:C})}):null,A.map((t,n)=>l(`li`,{children:l(`button`,{type:`button`,class:f.pickerItem,"data-selected":n===T,"aria-current":t.id===k?`true`:void 0,onMouseEnter:()=>E(n),onClick:()=>j(t),children:[l(`span`,{class:f.pickerTitle,children:[t.name,M(t),t.id===k?l(y,{tone:`ok`,children:e(`agentsWin.current`)}):null,t.id===`build`?l(y,{tone:`off`,children:e(`agentsWin.defaultAgent`)}):null,t.readOnly?l(y,{tone:`warn`,children:e(`agents.readOnly`)}):null]}),l(`span`,{class:m.cardText,children:t.description})]})},t.id)),l(`li`,{children:l(`button`,{type:`button`,class:f.pickerItem,onClick:()=>{O(),s.value=!0},children:l(`span`,{class:f.pickerTitle,children:[l(u,{name:`users`,size:15}),e(`agentsWin.manage`)]})})})]})]})})}export{b as AgentPicker};
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/tasks-CUxuvxyE.js","assets/i18n-5hLM22OW.js","assets/preload-helper-B3nfOi5I.js","assets/goal-_G1_dV7L.js"])))=>i.map(i=>d[i]);
2
- import{a as e,c as t,d as n,h as r,l as i,p as a,s as o}from"./i18n-5hLM22OW.js";import{t as s}from"./preload-helper-B3nfOi5I.js";var c=class extends Error{status;code;details;constructor(e,t,n,r){super(n),this.status=e,this.code=t,this.details=r}},l=()=>typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`,u=class{options;fetcher;constructor(e={}){this.options=e,this.fetcher=e.fetch??((e,t)=>fetch(e,t))}async request(e,t,n,r={}){let i={"X-Request-Id":(this.options.requestId??l)().replace(/[^A-Za-z0-9_-]/g,``),Accept:`application/json`};e!==`GET`&&(i[`Content-Type`]=`application/json`);let a;try{a=await this.fetcher(t,{method:e,headers:i,credentials:`same-origin`,...e===`GET`?{}:{body:JSON.stringify(n??{})},...r.signal?{signal:r.signal}:{}})}catch(e){throw new c(0,`network`,e instanceof Error?e.message:`Network error`)}a.status===401&&this.options.onUnauthorized?.();let o=await a.text();if(!a.ok){let e;try{e=JSON.parse(o)}catch{}throw new c(a.status,e?.error?.code??`internal`,e?.error?.message??`HTTP ${a.status}`,e?.error?.details)}return o?JSON.parse(o):void 0}health=()=>this.request(`GET`,`/api/health`);workspaces=(e=`false`)=>this.request(`GET`,`/api/workspaces?archived=${e}`);addWorkspace=e=>this.request(`POST`,`/api/workspaces`,{path:e});patchWorkspace=(e,t)=>this.request(`PATCH`,`/api/workspaces/${d(e)}`,t);trustWorkspace=(e,t)=>this.request(`POST`,`/api/workspaces/${d(e)}/trust`,{trusted:t,confirmed:!0});pickFolder=e=>this.request(`POST`,`/api/workspaces/pick`,e?{start:e}:{});listDirs=(e,t=!1)=>this.request(`GET`,`/api/fs/dirs?${e===void 0?``:`path=${encodeURIComponent(e)}&`}hidden=${t}`);sessions=(e={})=>this.request(`GET`,`/api/sessions?archived=${e.archived??`false`}&limit=${e.limit??200}`);createSession=e=>this.request(`POST`,`/api/sessions`,e);session=e=>this.request(`GET`,`/api/sessions/${d(e)}`);patchSession=(e,t)=>this.request(`PATCH`,`/api/sessions/${d(e)}`,t);messages=(e,t,n=50)=>this.request(`GET`,`/api/sessions/${d(e)}/messages?before=${t}&limit=${n}`);prompt=(e,t)=>this.request(`POST`,`/api/sessions/${d(e)}/prompts`,t);cancel=e=>this.request(`POST`,`/api/sessions/${d(e)}/cancel`,{});commands=e=>this.request(`GET`,`/api/commands${e?`?session=${d(e)}`:``}`);command=(e,t)=>this.request(`POST`,`/api/sessions/${d(e)}/commands`,t);sideQuestions=e=>this.request(`GET`,`/api/sessions/${d(e)}/btw`);askSideQuestion=(e,t,n)=>this.request(`POST`,`/api/sessions/${d(e)}/btw`,{question:t},n?{signal:n}:{});cancelSideQuestions=e=>this.request(`POST`,`/api/sessions/${d(e)}/btw/cancel`,{});models=e=>this.request(`GET`,`/api/sessions/${d(e)}/models`);context=e=>this.request(`GET`,`/api/sessions/${d(e)}/context`);approvals=e=>this.request(`GET`,`/api/approvals?session=${d(e)}`);decide=(e,t)=>this.request(`POST`,`/api/approvals/${d(e)}`,{decision:t});answer=(e,t)=>this.request(`POST`,`/api/interactions/${d(e)}`,{answer:t});tasks=e=>this.request(`GET`,`/api/sessions/${d(e)}/tasks`);taskOutput=(e,t,n)=>this.request(`GET`,`/api/sessions/${d(e)}/tasks/${d(t)}/output?offset=${n}`);stopTask=(e,t)=>this.request(`POST`,`/api/sessions/${d(e)}/tasks/${d(t)}/stop`,{});exportUrl=e=>`/api/sessions/${d(e)}/export`;artifacts=e=>this.request(`GET`,`/api/sessions/${d(e)}/artifacts?limit=200`);artifact=e=>this.request(`GET`,`/api/artifacts/${d(e)}`);artifactView=e=>this.request(`POST`,`/api/artifacts/${d(e)}/view`,{});exportArtifact=(e,t,n=!1)=>this.request(`POST`,`/api/artifacts/${d(e)}/export`,{target:t,...n?{overwrite:!0}:{}});rerunArtifact=e=>this.request(`POST`,`/api/artifacts/${d(e)}/rerun`,{});deleteArtifact=e=>this.request(`DELETE`,`/api/artifacts/${d(e)}`);artifactFileUrl=(e,t)=>`/api/artifacts/${d(e)}/files/${t.split(`/`).map(d).join(`/`)}`;artifactSourcesUrl=e=>`/api/artifacts/${d(e)}/sources`;async artifactText(e,t){return(await this.raw(this.artifactFileUrl(e,t))).text()}datasets=e=>this.request(`GET`,`/api/sessions/${d(e)}/datasets`);dataset=e=>this.request(`GET`,`/api/datasets/${d(e)}`);datasetRows=(e,t,n)=>{let r=new URLSearchParams;for(let[e,n]of Object.entries(t))n!==void 0&&n!==``&&r.set(e,String(n));return this.request(`GET`,`/api/datasets/${d(e)}/rows?${r}`,void 0,n?{signal:n}:{})};datasetDownloadUrl=e=>`/api/datasets/${d(e)}/download`;artifactDataset=e=>this.request(`POST`,`/api/artifacts/${d(e)}/dataset`,{});async uploadDataset(e,t){return await(await this.raw(`/api/sessions/${d(e)}/datasets`,{method:`POST`,body:t,contentType:`application/octet-stream`,headers:{"X-File-Name":encodeURIComponent(t.name)}})).json()}capabilities=e=>this.request(`GET`,`/api/sessions/${d(e)}/capabilities`);revokeCapability=(e,t)=>this.request(`DELETE`,`/api/sessions/${d(e)}/capabilities/${d(t)}`);events=(e,t,n=1e3,r)=>this.request(`GET`,`/api/sessions/${d(e)}/events?after=${t}&limit=${n}${r?.length?`&types=${d(r.join(`,`))}`:``}`);tree=(e,t,n)=>this.request(`GET`,`/api/workspaces/${d(e)}/tree?path=${d(t)}${n?`&cursor=${d(n)}`:``}`);diff=(e,t)=>this.request(`GET`,`/api/workspaces/${d(e)}/diff?path=${d(t)}`);changes=e=>this.request(`GET`,`/api/sessions/${d(e)}/changes`);plugins=e=>this.request(`GET`,`/api/plugins?workspace=${d(e)}`);setPlugin=(e,t,n)=>this.request(`PATCH`,`/api/plugins/${d(t)}`,{workspace:e,enabled:n});skills=e=>this.request(`GET`,`/api/skills?workspace=${d(e)}`);setSkill=(e,t,n)=>this.request(`PATCH`,`/api/skills/${d(t)}`,{workspace:e,enabled:n});mcp=e=>this.request(`GET`,`/api/mcp?workspace=${d(e)}`);setMcp=(e,t,n,r=!1)=>this.request(`PATCH`,`/api/mcp/${d(t)}`,{workspace:e,enabled:n,...r?{connect:r}:{}});mcpConsent=(e,t)=>this.request(`POST`,`/api/mcp/consent`,{workspace:e,confirmed:!0,...t?{remember:t}:{}});agents=e=>this.request(`GET`,`/api/agents?workspace=${d(e)}`);changelog=(e={})=>{let t=new URLSearchParams;e.version&&t.set(`version`,e.version),e.lastSeen&&t.set(`lastSeen`,e.lastSeen);let n=t.toString();return this.request(`GET`,`/api/changelog${n?`?${n}`:``}`)};reloadWorkspace=e=>this.request(`POST`,`/api/workspaces/${d(e)}/reload`,{});agentDefinitions=e=>this.request(`GET`,`/api/agents/definitions${e?`?workspace=${d(e)}`:``}`);agentTemplates=()=>this.request(`GET`,`/api/agents/templates`);agentModels=e=>this.request(`GET`,`/api/agents/models?workspace=${d(e)}`);createAgent=e=>this.request(`POST`,`/api/agents`,e);updateAgent=(e,t)=>this.request(`PUT`,`/api/agents/${d(e)}`,t);deleteAgent=(e,t,n)=>this.request(`DELETE`,`/api/agents/${d(e)}?scope=${t}${n?`&workspace=${d(n)}`:``}`);agentDefinition=(e,t,n)=>this.request(`GET`,`/api/agents/${d(e)}?scope=${t}${n?`&workspace=${d(n)}`:``}`);draftAgent=(e,t)=>this.request(`POST`,`/api/agents/draft`,e,t?{signal:t}:{});agentSessions=e=>this.request(`GET`,`/api/sessions?agent=${d(e)}&archived=all&limit=50`);settings=e=>this.request(`GET`,`/api/settings?workspace=${d(e)}`);analysis=e=>this.request(`GET`,`/api/analysis?workspace=${d(e)}`);setSetting=(e,t,n)=>this.request(`PATCH`,`/api/settings`,{workspace:e,key:t,value:n});providers=e=>this.request(`GET`,`/api/providers${e?`?workspace=${d(e)}`:``}`);providerModels=e=>this.request(`GET`,`/api/models?workspace=${d(e)}`);saveProfile=(e,t,n)=>this.request(`PUT`,`/api/providers/${d(t)}`,{workspace:e,...n});setCredentials=(e,t)=>this.request(`PUT`,`/api/providers/${d(e)}/credentials`,t);deleteCredentials=e=>this.request(`DELETE`,`/api/providers/${d(e)}/credentials`);activateProvider=(e,t,n)=>this.request(`POST`,`/api/providers/${d(t)}/activate`,{workspace:e,model:n});fileUrl=(e,t,n=!1)=>`/api/workspaces/${d(e)}/file?path=${d(t)}${n?`&download=1`:``}`;async file(e,t){let n=await this.raw(this.fileUrl(e,t));return{contentType:n.headers.get(`Content-Type`)??`application/octet-stream`,truncated:n.headers.get(`X-Truncated`)===`true`,size:Number(n.headers.get(`X-File-Size`)??0),blob:await n.blob()}}async upload(e){return await(await this.raw(`/api/blobs`,{method:`POST`,body:e,contentType:e.type||`application/octet-stream`})).json()}async raw(e,t={}){let n={"X-Request-Id":(this.options.requestId??l)().replace(/[^A-Za-z0-9_-]/g,``),...t.headers??{}};t.contentType&&(n[`Content-Type`]=t.contentType);let r;try{r=await this.fetcher(e,{method:t.method??`GET`,headers:n,credentials:`same-origin`,...t.body?{body:t.body}:{}})}catch(e){throw new c(0,`network`,e instanceof Error?e.message:`Network error`)}if(r.status===401&&this.options.onUnauthorized?.(),!r.ok){let e;try{e=JSON.parse(await r.text())}catch{}throw new c(r.status,e?.error?.code??`internal`,e?.error?.message??`HTTP ${r.status}`,e?.error?.details)}return r}},d=encodeURIComponent,f=2,ee=e=>e.length?`/api/events?${e.map(e=>`session=${encodeURIComponent(e)}`).join(`&`)}`:`/api/events`,te=(e,t=Math.random)=>Math.round(Math.min(1e4,500*2**Math.min(e,10)*(.5+t()))),ne=class{options;source;sessions=[];key;queue=[];scheduled=!1;attempt=0;cancelRetry;stopped=!1;requestFrame;setTimer;constructor(e){this.options=e,this.requestFrame=e.requestFrame??(e=>typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>e()):e()),this.setTimer=e.setTimer??((e,t)=>{let n=setTimeout(e,t);return()=>clearTimeout(n)})}subscribe(e){let t=[...new Set(e)].sort(),n=t.join(`
3
- `);(n!==this.key||!this.source||this.stopped)&&(this.key=n,this.sessions=t,this.stopped=!1,this.attempt=0,this.connect())}nudge(){this.stopped||this.key===void 0||this.source&&this.source.readyState!==f||this.connect()}refresh(){this.stopped||this.key===void 0||(this.attempt=0,this.connect())}close(){this.stopped=!0,this.cancelRetry?.(),this.source?.close(),this.options.onStatus?.(`closed`)}connect(){this.cancelRetry?.(),this.cancelRetry=void 0,this.source?.close(),this.options.onStatus?.(this.attempt?`reconnecting`:`connecting`);let e=this.options.create(ee(this.sessions));this.source=e,e.onopen=()=>{this.source===e&&(this.attempt=0,this.options.onStatus?.(`open`))},e.onmessage=t=>{if(this.source!==e)return;let n;try{n=JSON.parse(t.data)}catch{return}if(n&&typeof n==`object`&&typeof n.t==`string`){if(n.t===`hello`&&n.protocolVersion!==1){this.stopped=!0,e.close(),this.options.onStatus?.(`closed`),this.options.onProtocolMismatch?.();return}this.enqueue(n),n.t===`resync`&&this.connect()}},e.onerror=()=>{if(this.source!==e||this.stopped||(this.options.onStatus?.(`reconnecting`),e.readyState!==f))return;this.options.onClosed?.();let t=te(this.attempt++,this.options.random);this.cancelRetry=this.setTimer(()=>{this.cancelRetry=void 0,this.stopped||this.connect()},t)}}enqueue(e){this.queue.push(e),!this.scheduled&&(this.scheduled=!0,this.requestFrame(()=>{this.scheduled=!1;let e=this.queue;this.queue=[],e.length&&this.options.onFrames(e)}))}};function re(e){if(typeof e==`string`)return e.trim()||void 0}function ie(e){let t=/^\s*\/([^\s/][^\s]*)(?:\s+([\s\S]*))?$/.exec(e);if(t?.[1])return{name:t[1],args:(t[2]??``).trim()}}var ae=(e,t)=>{let n=0;for(let r of t)r===e[n]&&n++;return n===e.length};function oe(e,t){let n=t.trim().toLowerCase();if(!n)return e;let r=[[],[],[],[]];for(let t of e){let e=t.name.toLowerCase(),i=e.startsWith(n)?0:t.aliases?.some(e=>e.toLowerCase().startsWith(n))?1:e.includes(n)?2:ae(n,e)?3:-1;i>=0&&r[i]?.push(t)}return r.flat()}var se={pause:`Pause the goal's automatic continuation`,resume:`Resume the paused or blocked goal`,edit:`Edit the goal's objective`,clear:`Remove the goal from this session`};function ce(e,t){let n=t.trim().toLowerCase();return!e||n.length<3||!`goal`.startsWith(n)?[]:e.actions.filter(e=>e in se).map(e=>({name:`goal ${e}`,description:se[e],source:`builtin`,surfaces:[`web`],execution:`surface`}))}function le(e,t,n){let r=oe(e,t),i=ce(n,t);if(!i.length)return r;let a=r.findIndex(e=>e.name===`goal`);return a<0?[...r,...i]:[...r.slice(0,a+1),...i,...r.slice(a+1)]}function ue(e,t,n=12){if(t.trim()||e.length<=n)return e.slice(0,n);let r=e.filter(e=>e.source!==`builtin`).slice(0,4);return[...e.filter(e=>e.source===`builtin`).slice(0,n-r.length),...r]}function de(e,t,n=100){return!t.trim()||e.at(-1)===t?e:[...e,t].slice(-n)}function fe(e,t,n,r){if(!e.length)return{index:void 0,text:r};if(t===void 0){if(n===1)return{index:void 0,text:r};let t=e.length-1;return{index:t,text:e[t]}}let i=t+n;return i<0?{index:0,text:e[0]}:i>=e.length?{index:void 0,text:r}:{index:i,text:e[i]}}var pe=`Usage: /btw <question>`;function me(e,t){let n=ie(e);if(!n)return;let r=n.name.toLowerCase();return t.find(e=>e.source===`builtin`&&(e.name===r||e.aliases?.includes(r)))?.name===`btw`?{question:n.args}:void 0}function he(e,t){return t.length?{sessionId:e,entries:t,index:t.length-1}:{sessionId:e,entries:t,index:0,usage:!0}}function ge(e,t,n,r=Date.now()){return{sessionId:e,entries:t,index:Math.max(0,t.length-1),pending:{question:n,startedAt:r}}}function _e(e,t){return{sessionId:e.sessionId,entries:t,index:Math.max(0,t.length-1)}}function ve(e,t){let{pending:n,...r}=e;return{...r,error:{question:e.pending?.question??``,message:t}}}function ye(e,t){if(e.pending||!e.entries.length)return e;let n=e.error?e.entries.length:e.index,r=Math.min(e.entries.length-1,Math.max(0,n+t));return r===e.index&&!e.error?e:{sessionId:e.sessionId,entries:e.entries,index:r}}function be(e){return e.pending||e.error||e.usage?void 0:e.entries[e.index]}function xe(e){return e.pending||!e.entries.length?{earlier:!1,later:!1}:e.error?{earlier:!0,later:!1}:{earlier:e.index>0,later:e.index<e.entries.length-1}}var Se=`alisio.lastSeenVersion`;function Ce(e,t){return t.current===`dev`||t.current===e?{}:{...t.news?{toast:t.news.latest}:{},record:t.current}}var we=r([]),Te=0;function Ee(e){let t;e.t===`dataset_ready`?t={n:++Te,sessionId:e.sessionId,ready:e.dataset}:e.t===`dataset_failed`&&(t={n:++Te,sessionId:e.sessionId,failed:{name:e.name,error:e.error}}),t&&(we.value=[...we.value,t].slice(-50))}function De(e,t){let n=t.trim().replace(/\\/g,`/`).replace(/#.*$/,``);if(!n||/^[a-z][a-z0-9+.-]*:/i.test(n)||n.startsWith(`//`))return;if(n=n.replace(/:\d+(:\d+)?$/,``),n.startsWith(`/`)){let t=e?.replace(/\\/g,`/`).replace(/\/+$/,``);if(!t)return;if(n===t)return``;if(!n.startsWith(`${t}/`))return;n=n.slice(t.length+1)}let r=[];for(let e of n.split(`/`))if(e&&e!==`.`){if(e===`..`){if(!r.length)return;r.pop()}else r.push(e)}return r.join(`/`)}var Oe=e=>e.split(`/`).slice(0,-1).map((e,t,n)=>n.slice(0,t+1).join(`/`)),ke=e=>{let t=e.split(`/`).pop()??``,n=t.lastIndexOf(`.`);return n>0?t.slice(n+1).toLowerCase():``};function Ae(e,t){if(t.startsWith(`image/`))return`image`;if(!t.startsWith(`text/`))return`binary`;let n=ke(e);return n===`md`||n===`markdown`||n===`mdx`?`markdown`:n===`json`?`json`:`code`}var p=r(t(`alisio.dock`)===`open`),je=r(`files`),Me=r(0),m=r({}),h=r(new Set([``])),g=r(void 0),_=r({files:[],loading:!1}),Ne,v,Pe=e=>e instanceof Error?e.message:String(e);function Fe(){a(()=>{p.value=!0,je.value=`tasks`}),i(`alisio.dock`,`open`),y()}function Ie(e){p.value=e,i(`alisio.dock`,e?`open`:void 0),e&&y()}function y(){let e=j.value?.workspaceId;return e!==Ne&&(Ne=e,a(()=>{m.value={},h.value=new Set([``]),_.value={files:[],loading:!1}}),e&&b(``)),e}async function b(e,t=!1){let n=y();if(!n)return;let r=m.value[e];if(!(r?.loading||r&&!t&&!r.error)){m.value={...m.value,[e]:{entries:r?.entries??[],loading:!0,...r?.next?{next:r.next}:{}}};try{let i=await W.tree(n,e,t?r?.next:void 0);if(Ne!==n)return;m.value={...m.value,[e]:{entries:[...t?r?.entries??[]:[],...i.entries],loading:!1,...i.next?{next:i.next}:{}}}}catch(t){m.value={...m.value,[e]:{entries:[],loading:!1,error:Pe(t)}}}}}function Le(e){let t=new Set(h.value);t.has(e)?t.delete(e):(t.add(e),b(e)),h.value=t}function Re(){m.value={};for(let e of h.value)b(e)}async function ze(){let e=A.value;if(e){_.value={..._.value,loading:!0};try{let{files:t}=await W.changes(e);A.value===e&&(_.value={files:t,loading:!1})}catch(e){_.value={files:[],loading:!1,error:Pe(e)}}}}async function Be(e,t={}){let n=De(j.value?.workspace,e),r=y();if(n===void 0||!r)return;a(()=>{p.value=!0,je.value=`preview`,g.value={path:n,status:`loading`};let e=new Set(h.value);for(let t of Oe(n))e.add(t);h.value=e}),i(`alisio.dock`,`open`);for(let e of Oe(n))b(e);v&&URL.revokeObjectURL(v),v=void 0;let o;if(t.diff)try{o=await W.diff(r,n)}catch{}try{let e=await W.file(r,n);if(g.value?.path!==n)return;let t=Ae(n,e.contentType);t===`image`&&(v=URL.createObjectURL(e.blob)),g.value={path:n,status:`ready`,kind:t,truncated:e.truncated,size:e.size,...t===`image`?{url:v}:t===`binary`?{}:{text:await e.blob.text()},...o?{diff:o}:{}}}catch(e){if(g.value?.path!==n)return;g.value=o?{path:n,status:`ready`,kind:`binary`,truncated:!1,size:0,diff:o}:{path:n,status:`error`,error:Pe(e)}}}var Ve=e=>j.value?.workspaceId?W.fileUrl(j.value.workspaceId,e,!0):void 0;function x(t){if(t instanceof c){let n=t.details?.path,r={path:typeof n==`string`?n:``};if(t.code===`workspace_missing`)return e(`error.workspaceMissing`,r);if(t.code===`workspace_archived`)return e(`error.workspaceArchived`,r);if(t.code===`picker_busy`)return e(`error.pickerBusy`)}return t instanceof Error?t.message:String(t)}function He(e,t){if((e.t===`snapshot`||e.t===`goal_changed`)&&e.sessionId===t)return e.goal??null}function Ue(e,t){return e.key===`Tab`&&e.shiftKey&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&!e.isComposing&&!t.composing&&!t.paletteOpen&&!t.disabled}function We(e,t,n=1){if(!e.length)return;let r=e.findIndex(e=>e.id===t);return r<0?e[0]?.id:e[(r+n+e.length)%e.length]?.id}function Ge(e,t){return e??t.find(e=>e.default)?.id??`build`}var Ke=(e,t)=>e===`full-access`&&t!==`full-access`,qe=()=>({approvals:[],interactions:[]});function Je(e,t){switch(t.t){case`snapshot`:{let n=t.sessionId,r=new Set(t.pending.interactions.map(e=>e.interactionId));return{approvals:[...e.approvals.filter(e=>e.rootSessionId!==n),...t.pending.approvals],interactions:[...e.interactions.filter(e=>!r.has(e.interactionId)),...t.pending.interactions]}}case`approval`:return{...e,approvals:[...e.approvals.filter(e=>e.approvalId!==t.approval.approvalId),t.approval]};case`approval_withdrawn`:return{...e,approvals:e.approvals.filter(e=>e.approvalId!==t.approvalId)};case`interaction`:return{...e,interactions:[...e.interactions.filter(e=>e.interactionId!==t.interaction.interactionId),t.interaction]};case`interaction_withdrawn`:return{...e,interactions:e.interactions.filter(e=>e.interactionId!==t.interactionId)};default:return e}}function Ye(e,t){return t?{approvals:e.approvals.filter(e=>e.rootSessionId===t.id),interactions:e.interactions.filter(e=>e.workspaceId===t.workspaceId&&(!e.sessionId||e.sessionId===t.id))}:qe()}var Xe=(e,t)=>({approvals:e.approvals.filter(e=>e.approvalId!==t),interactions:e.interactions.filter(e=>e.interactionId!==t)}),Ze=`memory`,Qe={workspace:``},$e=(e,t)=>e.workspace===t&&e.list?e:{workspace:t,failed:!0};function et(e,t,n){if(!t||e.workspace!==t)return`loading`;if(!e.list)return e.failed?`error`:`loading`;let r=e.list.find(e=>e.id===n);return r?.enabled&&r.status===`active`?`enabled`:`disabled`}var tt=e=>e===`enabled`?[`conversation`,`trajectory`,`memory`]:[`conversation`,`trajectory`],nt=(e,t)=>tt(t).includes(e)?e:`conversation`,rt=15e3,it=6e4,at=e=>e.kind===`approval`||e.kind===`tool`&&(e.category===`question`||e.category===`agent`),ot=e=>{let t=e.replace(/^p_[0-9a-f]{10}_/,``);return t===`python_run`?`python`:t===`data_inspect`||t===`data_query`?`data`:t===`artifact_create`?`artifact`:t===`ask_user_question`||t===`exit_plan`?`question`:t===`task`||t===`task_wait`?`agent`:`other`},st=[`title`,`fileName`,`path`,`file_path`,`file`,`name`,`description`];function ct(e,t=48){let n;try{n=JSON.parse(e)}catch{return``}if(!n||typeof n!=`object`)return``;let r=n,i;for(let e of st){let t=r[e];if(typeof t==`string`&&t.trim()){i=t;break}}if(i===void 0){let e=r.inputs,t=Array.isArray(e)?e[0]:void 0;t&&typeof t.path==`string`&&(i=t.path)}if(!i)return``;let a=(i.replace(/\\/g,`/`).split(`/`).filter(Boolean).pop()??i).replace(/\s+/g,` `).trim();return a.length>t?`${a.slice(0,t-1)}…`:a}function lt(e){let t=Object.values(e.approvals)[0];if(t!==void 0)return{kind:`approval`,name:t};let n=e.tools.at(-1);return n?{kind:`tool`,name:n.name,category:ot(n.name),summary:ct(n.arguments)}:e.compacting?{kind:`compacting`}:e.retry?{kind:`retrying`,...e.retry}:e.recovery?{kind:`recovering`,...e.recovery}:{kind:e.stream}}var ut=e=>{let t=Object.keys(e.approvals)[0];if(t!==void 0)return`approval:${t}`;let n=e.tools.at(-1);return n?`tool:${n.id}`:e.compacting?`compacting`:e.recovery?`recovery:${e.recovery.attempt}`:e.retry?`retry:${e.retry.attempt}`:e.stream},S=e=>{let{retry:t,recovery:n,...r}=e;return r},C=(e,t,n)=>{let r=ut(e);return{...e,phaseKey:r,phaseSince:t&&t.phaseKey===r?t.phaseSince:n}},dt=(e,t,n=t)=>C({runId:e,startedAt:n,lastActivityAt:t,stream:`waiting`,tools:[],approvals:{},compacting:!1},void 0,t),w=e=>e==null?``:String(e);function ft(e,t,n){if(t.t===`snapshot`){let r=t.inflight;if(!r)return;let i={};for(let e of t.pending?.approvals??[])e.rootSessionId===t.sessionId&&(i[e.callId??e.approvalId]=e.name??e.approvalId);return C({runId:r.runId,startedAt:r.startedAt??e?.startedAt??n,lastActivityAt:n,stream:r.text?`writing`:r.reasoning?`thinking`:`waiting`,tools:r.tools.map(e=>({id:e.id,name:e.name,arguments:e.arguments,startedAt:e.startedAt})),approvals:i,compacting:!1},e?.runId===r.runId?e:void 0,n)}if(t.t===`delta`){let r=e?.runId===t.runId?e:dt(t.runId,n),i=t.text?`writing`:t.reasoning?`thinking`:r.stream;return C({...S(r),stream:i,lastActivityAt:n,compacting:!1},r,n)}if(t.t!==`event`)return e;let r=t.event,i=r.data??{};switch(r.type){case`run_started`:return dt(r.runId,n);case`run_completed`:case`run_failed`:case`run_cancelled`:case`run_turns_exceeded`:return e&&e.runId!==r.runId?e:void 0}let a=e?.runId===r.runId?e:dt(r.runId,n),o={...a,lastActivityAt:n};switch(r.type){case`tool_started`:{let e=w(i.id),t=a.tools.some(t=>t.id===e)?a.tools:[...a.tools,{id:e,name:w(i.name),arguments:w(i.arguments),startedAt:n}];return C({...S(o),tools:t,compacting:!1},a,n)}case`tool_completed`:{let e=w(i.id),{[e]:t,...r}=a.approvals;return C({...S(o),tools:a.tools.filter(t=>t.id!==e),approvals:r,stream:`waiting`},a,n)}case`tool_progress`:return{...o};case`approval_requested`:return C({...o,approvals:{...a.approvals,[w(i.id)]:w(i.name)}},a,n);case`approval_resolved`:{let{[w(i.id)]:e,...t}=a.approvals;return C({...o,approvals:t},a,n)}case`compaction_started`:return C({...S(o),compacting:!0},a,n);case`compaction_completed`:case`compaction_failed`:case`compaction_skipped`:return C({...S(o),compacting:!1,stream:`waiting`},a,n);case`turn_completed`:return C({...S(o),stream:`waiting`},a,n);case`request_retry`:return C({...o,stream:`waiting`,retry:{attempt:Number(i.attempt)||1,of:Number(i.of)||1}},a,n);case`truncation_recovery`:return C({...S(o),stream:`waiting`,recovery:{attempt:Number(i.attempt)||1,of:Number(i.of)||1}},a,n);case`artifact_published`:case`plugin_hook_failed`:case`context_reduced`:case`session_context_injected`:case`response_truncated`:return o;default:return e}}function pt(e,t,n={quietMs:rt,stalledMs:it}){let r=Math.max(0,t-e.lastActivityAt);return at(lt(e))?{level:`none`,idleMs:r}:r>=n.stalledMs?{level:`stalled`,idleMs:r}:r>=n.quietMs?{level:`quiet`,idleMs:r}:{level:`none`,idleMs:r}}function mt(e){let t=Math.max(0,Math.floor(e/1e3)),n=t%60,r=Math.floor(t/60)%60,i=Math.floor(t/3600),a=e=>String(e).padStart(2,`0`);return i?`${i}:${a(r)}:${a(n)}`:`${r}:${a(n)}`}var ht=()=>({workspaces:[],sessions:{},stale:!1,loaded:!1});function gt(e,t,n){return{workspaces:t,sessions:Object.fromEntries(n.filter(e=>!e.parentId).map(e=>[e.id,e])),stale:!1,loaded:!0}}var T=(e,t)=>({...e,sessions:{...e.sessions,[t.id]:{...e.sessions[t.id],...t}}}),_t=(e,t)=>({...e,workspaces:[...e.workspaces.filter(e=>e.id!==t.id),t].sort((e,t)=>e.path.localeCompare(t.path))});function vt(e,t){let n=e.sessions[t.sessionId];return n?T(e,{...n,status:t.status,...t.title===void 0?{}:{title:t.title},...t.updatedAt===void 0?{}:{updatedAt:t.updatedAt}}):{...e,stale:!0}}var yt=e=>e.label??e.path.split(/[\\/]/).filter(Boolean).at(-1)??e.path,bt=e=>e.split(/[\\/]/).filter(Boolean).slice(0,-1);function xt(e){let t=new Map;for(let n of e){if(n.label)continue;let e=yt(n).toLowerCase();t.set(e,[...t.get(e)??[],n])}let n=new Map;for(let e of t.values()){if(e.length<2)continue;let t=e.map(e=>bt(e.path)),r=Math.max(...t.map(e=>e.length)),i=e=>t.map(t=>t.length?t.slice(-e).join(`/`):`/`),a=Math.min(2,Math.max(1,r));for(;a<r&&new Set(i(a)).size<e.length;)a++;i(a).forEach((t,r)=>{let i=e[r]?.id;i&&n.set(i,t)})}return n}function St(e,t){let n=e=>e?.exists!==!1&&!e?.archived;if(t&&(t=>n(e.workspaces.find(e=>e.id===t)))(t))return t;let r=new Map;for(let t of Object.values(e.sessions))r.set(t.workspaceId,Math.max(r.get(t.workspaceId)??0,t.updatedAt??0));let i=e=>Math.max(e.lastOpenedAt??0,r.get(e.id)??0);return e.workspaces.filter(n).sort((e,t)=>i(t)-i(e))[0]?.id}var Ct=(e,t)=>e.pinned===t.pinned?(t.updatedAt??-1)-(e.updatedAt??-1):e.pinned?-1:1;function wt(e,t,n=!1){let r=t.trim().toLowerCase(),i=Object.values(e.sessions).filter(e=>n||!e.archived),a=new Map(e.workspaces.map(e=>[e.id,e]));for(let e of i)a.has(e.workspaceId)||a.set(e.workspaceId,{id:e.workspaceId,path:e.workspace,pinned:!1,open:!1,exists:!0,trusted:!1,untrustedResources:!1,archived:!1});let o=[],s=[...a.values()].filter(e=>n||!e.archived),c=xt(s);for(let e of s){let t=yt(e),n=c.get(e.id),a=i.filter(t=>t.workspaceId===e.id).filter(e=>!r||(e.title??``).toLowerCase().includes(r)||e.id.toLowerCase().startsWith(r)||t.toLowerCase().includes(r)).sort(Ct);(!r||a.length||t.toLowerCase().includes(r))&&o.push({workspace:e,name:t,...n?{hint:n}:{},sessions:a})}return o.sort((e,t)=>Number(e.workspace.archived)-Number(t.workspace.archived)||Number(t.workspace.pinned)-Number(e.workspace.pinned)||e.workspace.path.localeCompare(t.workspace.path))}function Tt(e){return e?.nativePicker?`native`:e?.folderBrowser?`browser`:`manual`}function Et(e){let t=[];for(let n of e?.content??[])n.type===`ui`&&n.block.kind===`artifact`&&n.block.artifact?.id&&t.push(n.block.artifact);return t}function Dt(e,t){let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>t.createdAt-e.createdAt||(e.id<t.id?1:-1))}function Ot(e,t){if(!t)return{artifact:e,state:`loading`};let n=t.find(t=>t.id===e.id)??e;return{artifact:n,state:n.status}}var kt=e=>e.previewable&&e.status===`ready`?`open`:`download`,At=e=>`/api/artifacts/${encodeURIComponent(e)}/download`,jt={dashboard:`fileChart`,document:`fileText`,spreadsheet:`fileTable`,image:`fileImage`,data:`fileCode`,code:`fileCode`,archive:`fileArchive`,file:`file`};function Mt(e){return e<1024?`${e} B`:e<1048576?`${Math.max(1,Math.round(e/1024))} KB`:`${(e/1048576).toFixed(1)} MB`}function Nt(e){if(e.generator!==`dashboard_generate`)return;let t=e.planner;if(t!==`rules`&&t!==`rules+decisions`)return;let n=e.decisionProvider;return{planner:t,...typeof n==`string`&&n?{decisionProvider:n}:{}}}var Pt=e=>({sessionId:e,cursor:0,entries:[],tools:{},echoes:[],hasMore:!1,maxSeq:-1,ready:!1,version:0,counter:0}),E=(e,t)=>({...e,...t,version:e.version+1}),D=e=>({id:e.id,name:e.name,arguments:e.arguments,status:`pending`,tail:``}),Ft=e=>e.isError?`failed`:`completed`;function It(e,t){let n=[];for(let{seq:r,message:i}of e)if(i.role===`user`)i.summary?n.push({kind:`notice`,key:`m${r}`,seq:r,code:`summary`,tone:`info`,params:{}}):n.push({kind:`user`,key:`m${r}`,seq:r,text:i.display??i.text,attachments:i.attachments?.length??0,...i.attachments?.length?{images:i.attachments.map(e=>({mimeType:e.mimeType,data:e.data}))}:{},...i.datasets?.length?{datasets:i.datasets}:{}});else if(i.role===`assistant`){for(let e of i.calls)t[e.id]={...D(e),...t[e.id]};n.push({kind:`assistant`,key:`m${r}`,seq:r,text:i.text,calls:i.calls.map(e=>e.id),...i.truncated?{truncated:!0}:{}})}else{let e=t[i.callId];t[i.callId]={...e??D({id:i.callId,name:`tool`,arguments:``}),result:i.result,status:Ft(i.result)}}return n}function Lt(e,t){if(!t.length)return e;let n=[],r=[...t];for(let t of e){let e=`seq`in t&&t.seq!==void 0?t.seq:void 0;if(e!==void 0){let t=r.filter(t=>Rt(t)<e);r=r.filter(t=>Rt(t)>=e),n.push(...t)}n.push(t)}return[...n,...r]}var Rt=e=>`anchor`in e&&e.anchor!==void 0?e.anchor:1/0,zt=e=>`anchor`in e&&e.anchor!==void 0;function Bt(e,t){let n={},r=t.messages.items,i=It(r,n),a=r[0]?.seq,o=e.entries.filter(e=>zt(e)&&(a===void 0||Rt(e)>=a)),s;if(t.inflight){s={runId:t.inflight.runId,text:t.inflight.text,reasoning:t.inflight.reasoning,toolIds:t.inflight.tools.map(e=>e.id)};for(let e of t.inflight.tools)n[e.id]={...D(e),...n[e.id],effect:e.effect,status:`running`,tail:e.tail}}let c=r.map(e=>e.message).filter(e=>e.role===`user`),l=e.echoes.filter(e=>e.state===`failed`||!c.some(t=>Vt(t,e)));return E(e,{session:t.session,cursor:t.cursor,entries:Lt(i,o),tools:n,echoes:l,live:s,hasMore:t.messages.hasMore,oldestSeq:a,maxSeq:r.at(-1)?.seq??-1,ready:!0})}var Vt=(e,t)=>t.datasets?.length?e.display===(t.display??t.text)&&e.text.startsWith(t.text):t.display===void 0?e.text===t.text&&e.display===void 0:e.display===t.display&&e.text===t.text;function Ht(e,t){if(t.seq<=e.maxSeq)return e;let n={...e.tools},[r]=It([t],n),{echoes:i,live:a}=e,{message:o}=t;if(o.role===`user`){let e=i.findIndex(e=>e.state!==`failed`&&Vt(o,e));e>=0&&(i=i.filter((t,n)=>n!==e))}let s=r;if(o.role===`assistant`&&r?.kind===`assistant`&&a&&(a.reasoning&&(s={...r,think:a.reasoning}),a={...a,text:``,reasoning:``}),o.role===`tool`){let t=n[o.callId];t&&e.tools[o.callId]?.durationMs!==void 0&&(n[o.callId]={...t,durationMs:e.tools[o.callId]?.durationMs})}return E(e,{entries:s?[...e.entries,s]:e.entries,tools:n,echoes:i,live:a,maxSeq:t.seq,oldestSeq:e.oldestSeq??t.seq})}var Ut=(e,t,n,r={})=>({kind:`notice`,key:`n${e.counter}`,anchor:e.maxSeq,code:t,tone:n,params:r}),Wt=e=>e===`user`||e===`model`||e==="default"?e:`unknown`;function Gt(e){if(e.code!==`output_truncated`)return;let t=e.truncation;if(t&&typeof t.maxOutputTokens==`number`&&t.model)return{code:`run_output_truncated`,params:{who:t.model,attempts:String(t.attempts??1),maxOutputTokens:String(t.maxOutputTokens),source:Wt(t.source)}}}function Kt(e){if(e.code!==`timeout`)return;let t=e.timeout;if(!t||typeof t.ms!=`number`)return;let n=t.model?t.provider?`${t.model} (${t.provider})`:t.model:``,r={who:n,seconds:String(Math.round(t.ms/1e3)),tool:t.tool??``,attempts:String(t.attempts??1)};return t.kind===`first_token`&&n?{code:t.attempts&&t.attempts>1?`run_timeout_first_token_retried`:`run_timeout_first_token`,params:r}:t.stage===`waiting_model`&&n?{code:t.firstRequest?`run_timeout_waiting`:`run_timeout_waiting_later`,params:r}:t.stage===`streaming`&&n?{code:`run_timeout_streaming`,params:r}:t.stage===`tool`&&t.tool?{code:`run_timeout_tool`,params:r}:{code:`run_timeout_other`,params:r}}function qt(e,t){let n=Math.max(e.cursor,Number(t.eventId??0)||0),r={...e,cursor:n,counter:e.counter+1},i=t.data??{},a=e=>e===void 0?``:String(e),o=(t,n,i={})=>E(r,{entries:[...e.entries,Ut(e,t,n,i)]});switch(t.type){case`run_started`:return E(r,{live:{runId:t.runId,text:``,reasoning:``,toolIds:[]}});case`tool_started`:{let n=a(i.id),o=r.live??{runId:t.runId,text:``,reasoning:``,toolIds:[]};return E(r,{tools:{...e.tools,[n]:{...D({id:n,name:a(i.name),arguments:a(i.arguments)}),...e.tools[n],effect:i.effect,status:`running`}},live:o.toolIds.includes(n)?o:{...o,toolIds:[...o.toolIds,n]}})}case`tool_completed`:{let t=a(i.id),n=e.tools[t]??D({id:t,name:a(i.name),arguments:``});return E(r,{tools:{...e.tools,[t]:{...n,status:i.isError?`failed`:`completed`,durationMs:Number(i.durationMs)||0,preview:a(i.preview)}}})}case`run_completed`:return E(r,{live:void 0});case`run_failed`:{let e=Kt(i)??Gt(i);return{...e?o(e.code,`error`,e.params):o(`run_failed`,`error`,{error:a(i.error)}),live:void 0}}case`run_cancelled`:return{...o(`run_cancelled`,`warning`),live:void 0};case`run_turns_exceeded`:return o(`run_turns_exceeded`,`warning`,{turns:a(i.turns)});case`response_truncated`:return o(`response_truncated`,`warning`,{maxOutputTokens:a(i.maxOutputTokens),source:Wt(i.source)});case`model_changed`:return o(`model_changed`,`info`,{model:a(i.model),previous:a(i.previous)});case`compaction_completed`:return o(`compaction_completed`,`info`,{before:a(i.before),after:a(i.after)});case`compaction_failed`:return o(`compaction_failed`,`error`,{error:a(i.error)});case`context_reduced`:return o(`context_reduced`,`info`,{messages:a(i.messages)});case`plugin_hook_failed`:return o(`plugin_hook_failed`,`warning`,{source:a(i.source),hook:a(i.hook),error:a(i.error)});case`session_context_injected`:return E(r,{entries:[...e.entries,{kind:`context`,key:`n${e.counter}`,anchor:e.maxSeq,sources:Array.isArray(i.sources)?i.sources.map(String):[],tokens:Number(i.tokens)||0}]});default:return n===e.cursor?e:{...e,cursor:n}}}function Jt(e,t){let n=e.live?.runId===t.runId?e.live:{runId:t.runId,text:``,reasoning:``,toolIds:[]},r={...n,text:n.text+(t.text??``),reasoning:n.reasoning+(t.reasoning??``)},i=e.tools;if(t.progress?.length){i={...i};for(let{toolId:e,chunk:n}of t.progress){let t=i[e]??D({id:e,name:`tool`,arguments:``});i[e]={...t,tail:(t.tail+n).slice(-8192)}}}return E(e,{live:r,tools:i})}function Yt(e,t){if(`sessionId`in t&&t.sessionId!==void 0&&t.sessionId!==e.sessionId)return e;switch(t.t){case`snapshot`:return Bt(e,t);case`message`:return Ht(e,t);case`event`:return qt(e,t.event);case`delta`:return Jt(e,t);case`tool_result`:{let n=e.tools[t.callId]??D({id:t.callId,name:`tool`,arguments:``});return E(e,{tools:{...e.tools,[t.callId]:{...n,result:t.result,...t.truncated?{truncated:!0}:{},...n.status===`running`||n.status===`pending`?{status:Ft(t.result)}:{}}}})}case`session_status`:return e.session?E(e,{session:{...e.session,status:t.status,...t.title===void 0?{}:{title:t.title},...t.updatedAt===void 0?{}:{updatedAt:t.updatedAt}}}):e;default:return e}}var Xt=(e,t)=>t.reduce(Yt,e),Zt=(e,t)=>E(e,{echoes:[...e.echoes,{...t,state:`sending`}]}),Qt=(e,t,n)=>E(e,{echoes:e.echoes.map(e=>e.localId===t?{...e,state:`failed`,error:n}:e)}),$t=(e,t)=>E(e,{echoes:e.echoes.filter(e=>e.localId!==t)}),O=(e,t)=>E(e,{counter:e.counter+1,entries:[...e.entries,{kind:`note`,key:`n${e.counter}`,anchor:e.maxSeq,text:t}]});function en(e,t){let n=e.oldestSeq??1/0,r=t.items.filter(e=>e.seq<n),i={...e.tools};return E(e,{entries:[...It(r,i),...e.entries],tools:i,hasMore:t.hasMore,oldestSeq:r[0]?.seq??e.oldestSeq,maxSeq:Math.max(e.maxSeq,r.at(-1)?.seq??-1)})}function tn(e){let t=[],n=new Set,r=(n,r)=>{let i=n.flatMap(t=>Et(e.tools[t]?.result));i.length&&t.push({kind:`artifacts`,key:r,artifacts:i})};for(let i of e.entries)if(i.kind===`assistant`){let{calls:a,...o}=i;(i.text||i.think)&&t.push(o);for(let r of a){let i=e.tools[r];i&&(n.add(r),t.push({kind:`tool`,key:`t${r}`,tool:i}))}r(a,`a${i.key}`)}else t.push(i);for(let n of e.echoes)t.push({kind:`echo`,key:`e${n.localId}`,echo:n});let i=e.live;if(i){i.reasoning&&t.push({kind:`think`,key:`think-${i.runId}`,text:i.reasoning});let a=i.toolIds.filter(t=>e.tools[t]&&!n.has(t));for(let n of a){let r=e.tools[n];r&&t.push({kind:`tool`,key:`t${n}`,tool:r})}r(a,`live-a${i.runId}`),i.text&&t.push({kind:`streaming`,key:`live-${i.runId}`,text:i.text})}return t}var nn=r(`ok`),rn=r(!1),an=r(`connecting`),k=r(ht()),A=r(void 0),j=r(void 0),M=r(Pt(``)),N=r(void 0),P=r(qe()),F=r([]),I=r(void 0),on=r(void 0),L=r(o(`alisio.history`,[])),sn=r(``),cn=r(``),ln=r(Date.now()),un=r(!1),dn=r(!1),fn=r(!1),R=r([]),pn=r(``),mn=r(void 0),hn=r(!1),z=r(0),B=r(void 0),gn=r(void 0),_n=r(0),vn=r(0),yn=r({}),V=r(void 0),H=r(`conversation`),U=r(Qe),bn=n(()=>Object.fromEntries((U.value.list??[]).map(e=>[e.toolPrefix,e.name]))),xn=()=>et(U.value,j.value?.workspaceId,Ze),Sn=()=>nt(H.value,xn());function Cn(e,t){U.value={workspace:e,list:t},xn()===`disabled`&&(H.value=nt(H.value,`disabled`))}function wn(e){U.value=$e(U.value,e)}var Tn=r(!1),En=r(null),Dn=r(0),On=r(void 0),kn=r(void 0),An=n(()=>Ye(P.value,M.value.session)),jn=n(()=>M.value.session?.status??j.value?.status??`idle`),Mn=n(()=>{let e=jn.value;return!!M.value.live||e===`running`||e===`queued`||e===`awaiting_input`}),W=new u({onUnauthorized:()=>{nn.value=`unauthorized`}}),G,Nn,Pn=r(0),K=r(void 0),Fn=n(()=>re(K.value?.version)),In=n(()=>Tt(K.value?.capabilities)),Ln=r(!1);function Rn(e){gn.value={text:e,n:(gn.value?.n??0)+1},z.value++}function q(e){B.value=e,setTimeout(()=>{B.value===e&&(B.value=void 0)},5e3)}async function J(){return Nn??=(async()=>{try{let[e,t]=await Promise.all([W.workspaces(`all`),W.sessions({archived:`all`})]);k.value=gt(k.value,e,t.items)}catch(e){e instanceof c&&e.status===401||q(x(e))}finally{Nn=void 0}})(),Nn}async function Y(){let e=A.value;if(e)try{let t=await W.context(e);A.value===e&&(on.value=t)}catch{}}async function X(){let e=A.value;if(e)try{let t=await W.models(e);A.value===e&&(I.value=t)}catch{I.value=void 0}}async function zn(){let e=A.value;try{let t=await W.commands(e);A.value===e&&(F.value=t)}catch{}}async function Bn(){let e=j.value?.workspaceId;if(!e){R.value=[];return}try{let t=await W.agents(e);j.value?.workspaceId===e&&(R.value=t)}catch{}}async function Vn(){let e=j.value?.workspaceId;if(e)try{let t=await W.plugins(e);if(j.value?.workspaceId!==e)return;Cn(e,t)}catch{wn(e)}}async function Hn(){let e=A.value;if(e)try{let t=await W.session(e);A.value===e&&(j.value=t,k.value=T(k.value,t))}catch{}}var Un=!1;function Wn(e){let t=!1,n=!1,r=!1,i=!1,o=!1,c=[],l=new Set;a(()=>{M.value=Xt(M.value,e);let a=Date.now(),u=N.value;for(let t of e)(!(`sessionId`in t)||t.sessionId===M.value.sessionId)&&(u=ft(u,t,a));N.value=u;let d=P.value,f=k.value;for(let a of e){d=Je(d,a),a.t===`session_status`&&(f=vt(f,a)),a.t===`approval`&&a.approval.rootSessionId===A.value&&(cn.value=a.approval.name??a.approval.approvalId),a.t===`capabilities_changed`&&a.sessionId===A.value&&Dn.value++,(a.t===`dataset_ready`||a.t===`dataset_failed`)&&Ee(a),a.t===`tasks_changed`&&s(()=>import(`./tasks-CUxuvxyE.js`).then(e=>e.receiveTask(a.sessionId,a.task)),__vite__mapDeps([0,1,2]));let e=He(a,A.value);if(e!==void 0&&(En.value=e),a.t===`catalog_changed`&&(l.add(a.scope),a.scope===`commands`&&(i=!0)),a.t===`event`&&a.sessionId===A.value){o=!0;let e=a.event.type;if(e===`run_completed`&&(sn.value=`${Date.now()}`),(e===`run_completed`||e===`run_failed`||e===`run_cancelled`)&&(t=!0),e===`compaction_completed`&&(r=!0),e===`artifact_published`){let e=a.event.data;e.artifact&&c.push(e.artifact)}e===`model_changed`&&(t=!0),e===`plan_decided`&&(Un=a.event.data.decision===`approve`),e===`run_started`&&Un&&(Un=!1,n=!0)}}P.value=d,k.value=f}),o&&vn.value++,n&&Hn();let u=A.value;if(c.length&&u&&(kn.value={sessionId:u,artifacts:c}),k.value.stale&&J(),t&&(_n.value++,Y()),i&&zn(),l.size){let e={...yn.value};for(let t of l)e[t]=(e[t]??0)+1;yn.value=e,l.has(`models`)&&X(),l.has(`plugins`)&&Vn(),l.has(`agents`)&&Bn()}r&&(G?.refresh(),Y())}async function Z(e){if(e===A.value&&e)return;a(()=>{A.value=e,j.value=void 0,M.value=Pt(e??``),N.value=void 0,I.value=void 0,on.value=void 0,hn.value=!1,V.value=void 0,En.value=null});let t=e?`#/s/${encodeURIComponent(e)}`:`#/`;if(location.hash!==t&&Gn(t),G?.subscribe(e?[e]:[]),e&&i(`alisio.lastSession`,e),zn(),Me.value=0,e){s(()=>import(`./tasks-CUxuvxyE.js`).then(t=>t.loadTasks(e)),__vite__mapDeps([0,1,2]));try{let t=await W.session(e);A.value===e&&(j.value=t)}catch(e){if(e instanceof c&&e.code===`not_found`){q(x(e)),Z(void 0);return}}X(),Y(),Vn(),Bn()}}function Gn(e){try{window.history.replaceState(null,``,e)}catch{location.hash=e}}var Kn=()=>{let e=/^#\/s\/(.+)$/.exec(location.hash);return e?.[1]?decodeURIComponent(e[1]):void 0};async function qn(){let n=t(Se);try{let t=await W.changelog(n?{lastSeen:n}:{}),r=Ce(n,t);return r.toast&&q(e(`changelog.news`,{version:r.toast})),r.record&&i(Se,r.record),t}catch{return}}async function Jn(){if(G=new ne({create:e=>new EventSource(e),onFrames:Wn,onStatus:e=>{an.value=e},onProtocolMismatch:()=>{rn.value=!0},onClosed:()=>{W.workspaces().catch(()=>{})}}),window.addEventListener(`online`,()=>G?.nudge()),document.addEventListener(`visibilitychange`,()=>{document.visibilityState===`visible`&&G?.nudge()}),window.addEventListener(`hashchange`,()=>{let e=Kn();e!==A.value&&Z(e)}),setInterval(()=>{ln.value=Date.now()},3e4),W.health().then(e=>{K.value=e}).catch(()=>{}),await J(),nn.value!==`ok`)return;qn();let e=Kn(),n=t(`alisio.lastSession`),r=k.value.sessions,i=e??(n&&r[n]&&!r[n]?.archived?n:Object.values(r).filter(e=>!e.archived).sort((e,t)=>(t.updatedAt??-1)-(e.updatedAt??-1))[0]?.id);i?await Z(i):(G.subscribe([]),zn())}async function Yn(t){let n=t??St(k.value,j.value?.workspaceId);if(!n){q(e(`sidebar.openWorkspaceFirst`)),Pn.value++;return}try{let e=await W.createSession({workspace:n});k.value=T(k.value,e),await Z(e.id),z.value++}catch(e){q(x(e)),e instanceof c&&e.code===`workspace_missing`&&J()}}async function Xn(t){try{let n=await W.addWorkspace(t.trim());return k.value=_t(k.value,n),n.untrustedResources&&q(e(`sidebar.untrustedHint`)),!0}catch(e){return q(x(e)),!1}}async function Zn(){if(Ln.value)return`cancelled`;Ln.value=!0;try{let e=await W.pickFolder();return`cancelled`in e?`cancelled`:await Xn(e.path)?`added`:`cancelled`}catch(e){return e instanceof c&&e.code===`picker_unavailable`?(K.value&&={...K.value,capabilities:{...K.value.capabilities,nativePicker:!1}},`unavailable`):(q(x(e)),`cancelled`)}finally{Ln.value=!1}}async function Qn(e,t){try{let n=await W.patchWorkspace(e,t);k.value=_t(k.value,n)}catch(e){q(x(e))}}async function $n(e,t=A.value){if(t)try{let n=await W.patchSession(t,e);k.value=T(k.value,n),t===A.value&&(j.value=n,(e.model!==void 0||e.effort!==void 0)&&(X(),Y()))}catch(e){q(x(e))}}async function er(e){let t=A.value;if(t)try{let n=await W.command(t,{requestId:l(),name:`agent:${e}`});n.output&&(M.value=O(M.value,n.output)),Hn(),n.effects?.includes(`model`)&&(X(),Y())}catch(e){q(x(e))}}async function tr(t=1){let n=j.value;if(!n||Ye(P.value,n).interactions.length)return;let r=R.value,i=n.agent??r.find(e=>e.default)?.id,a=We(r,i,t);if(!a||a===i)return;await er(a);let o=r.find(e=>e.id===a)?.name??a;pn.value=e(`composer.agentApplied`,{agent:o})}async function nr(t,n,r){try{let i;try{i=await W.createSession({workspace:t,agent:n,...r?{model:r}:{}})}catch(a){if(!r||!(a instanceof c)||a.code!==`validation_failed`)throw a;i=await W.createSession({workspace:t,agent:n}),q(e(`agentsWin.modelFallback`,{model:r}))}return k.value=T(k.value,i),await Z(i.id),z.value++,!0}catch(e){return q(x(e)),!1}}async function rr(t,n){let r=e(n?`trust.confirm`:`trust.confirmRevoke`,{path:t.path});if(!window.confirm(r))return!1;try{let r=await W.trustWorkspace(t.id,n);return k.value=_t(k.value,r),q(e(r.trusted?`trust.granted`:`trust.revoked`)),j.value?.workspaceId===t.id&&zn(),!0}catch(e){return q(x(e)),!1}}var ir=e=>$n({preset:e}),ar=e=>$n({model:e}),or=e=>$n({effort:e});function sr(e){L.value=de(L.value,e),i(`alisio.history`,JSON.stringify(L.value))}async function Q(e,t,n=l(),r,i){let a=A.value;if(!a)return;let o=l(),s=r?.refs.length?r.refs:void 0;M.value=Zt(M.value,{localId:o,requestId:n,text:e,...t?{display:t}:{},...s?{attachments:s,thumbs:r?.thumbs??[]}:{},...i?.length?{datasets:i}:{}});try{await W.prompt(a,{requestId:n,text:e,...t?{display:t}:{},...s?{attachments:s}:{},...i?.length?{datasets:i.map(e=>e.id)}:{}})}catch(e){A.value===a&&(M.value=Qt(M.value,o,x(e)))}}function cr(e){let t=M.value.echoes.find(t=>t.localId===e);t&&(M.value=$t(M.value,e),Q(t.text,t.display,t.requestId,t.attachments?{refs:t.attachments,thumbs:t.thumbs??[]}:void 0,t.datasets))}async function lr(t,n,r){let i=A.value;if(!i||!t.trim()&&!n?.refs.length&&!r?.length)return;if(t.trim()&&sr(t),n?.refs.length||r?.length)return Q(t.trim()||!r?.length?t:e(`dataset.defaultPrompt`),void 0,l(),n,r);let a=ie(t);if((a?.name===`permission`||a?.name===`permissions`)&&!a.args){Tn.value=!0;return}if(a?.name===`changelog`){mn.value={version:a.args??``,at:Date.now()};return}if(a?.name===`tasks`){Fe();return}if(a?.name===`goal`&&F.value.some(e=>e.name===`goal`)){s(()=>import(`./goal-_G1_dV7L.js`).then(e=>e.runGoalCommand(i,a.args??``)),__vite__mapDeps([3,1,2]));return}if(a?.name===`artifacts`){On.value={filter:a.args??``,at:Date.now()};return}if(a?.name===`agents`&&!a.args){fn.value=!0;return}let o=a?F.value.find(e=>e.name===a.name||e.aliases?.includes(a.name.toLowerCase())):void 0;if(!a||!o)return Q(t);let c=me(t,F.value);if(c)return ur(i,c.question);try{let t=await W.command(i,{requestId:l(),name:o.name,...a.args?{args:a.args}:{}});t.output&&(M.value=O(M.value,t.output)),o.name===`reload`&&q(e(`reloadCmd.done`)),t.prompt&&await Q(t.prompt.text,t.prompt.display),t.effects?.length&&(Hn(),X(),Y()),t.sessionId&&(await J(),await Z(t.sessionId))}catch(e){M.value=O(M.value,`**/${o.name}**: ${x(e)}`)}}var $;async function ur(e,t){let n=V.value?.sessionId===e?V.value.entries:[];if(!t){V.value=he(e,n);try{n=await W.sideQuestions(e)}catch(e){q(x(e));return}V.value?.sessionId===e&&!V.value.pending&&(V.value=he(e,n));return}$?.abort();let r=new AbortController;$=r,V.value=ge(e,n,t);try{await W.askSideQuestion(e,t,r.signal);let n=await W.sideQuestions(e);V.value?.sessionId===e&&V.value.pending?.question===t&&(V.value=_e(V.value,n))}catch(t){if(r.signal.aborted)return;V.value?.sessionId===e&&V.value.pending&&(V.value=ve(V.value,x(t)))}finally{$===r&&($=void 0)}}function dr(){let e=V.value;e?.pending&&($?.abort(),$=void 0,W.cancelSideQuestions(e.sessionId).catch(()=>{})),V.value=void 0,z.value++}async function fr(){let e=A.value;if(e)try{await W.cancel(e)}catch(e){q(x(e))}}async function pr(){let e=M.value;if(e.hasMore&&e.oldestSeq!==void 0)try{let t=await W.messages(e.sessionId,e.oldestSeq);M.value.sessionId===e.sessionId&&(M.value=en(M.value,t))}catch(e){q(x(e))}}async function mr(e,t){try{await W.decide(e,t)}catch(e){e instanceof c&&(e.status===409||e.status===404)||q(x(e))}P.value=Xe(P.value,e),z.value++}async function hr(e,t){try{await W.answer(e,t)}catch(e){e instanceof c&&(e.status===409||e.status===404)||q(x(e))}P.value=Xe(P.value,e),z.value++}function gr(e,t){i(`alisio.draft.${e}`,t||void 0)}var _r=e=>t(`alisio.draft.${e}`)??``;export{J as $,De as $t,z as A,lt as At,Yn as B,p as Bt,gn as C,Mt as Ct,mr as D,wt as Dt,tr as E,Ot as Et,_r as F,Ke as Ft,$n as G,ze as Gt,In as H,Ve as Ht,pr as I,Ue as It,Zn as J,g as Jt,Qn as K,b as Kt,xn as L,x as Lt,L as M,pt as Mt,Jn as N,tt as Nt,j as O,rt as Ot,Rn as P,Ge as Pt,rn as Q,ke as Qt,hn as R,_ as Rt,F as S,At as St,A as T,kt as Tt,Z as U,h as Ut,ln as V,je as Vt,Pn as W,Me as Wt,bn as X,Ie as Xt,Ln as Y,Re as Yt,kn as Z,Le as Zt,fr as _,An as _t,fn as a,fe as an,or as at,mn as b,jt as bt,cn as c,c as cn,rr as ct,W as d,k as dt,we as en,cr as et,Fn as f,nr as ft,Mn as g,M as gt,V as h,B as ht,R as i,ye as in,H as it,En as j,mt as jt,vn as k,it as kt,sn as l,l as ln,un as lt,nn as m,lr as mt,Sn as n,be as nn,N as nt,dn as o,le as on,ar as ot,On as p,an as pt,Tn as q,Be as qt,Xn as r,xe as rn,gr as rt,pn as s,ue as sn,ir as st,er as t,pe as tn,_n as tt,hr as u,q as ut,Dn as v,O as vt,on as w,Dt as wt,dr as x,Nt as xt,yn as y,tn as yt,I as z,m as zt};
@@ -1,3 +0,0 @@
1
- var e={"app.name":`Alisio`,"app.skip":`Saltar a la conversación`,"auth.title":`Abre el enlace de inicio`,"auth.body":`Este navegador no tiene sesión en este servidor. Abre la URL que alisio serve imprimió en la terminal; termina en ?token=….`,"reloadCmd.done":`Configuración recargada`,"changelog.title":`Novedades`,"changelog.notFound":`No hay entrada para la versión {version}.`,"changelog.unreleased":`Aún sin publicar`,"changelog.loadFailed":`No se pudo cargar el changelog.`,"changelog.news":`Alisio se actualizó a {version}. Escribe /changelog para ver las novedades.`,"reload.title":`Hay que recargar`,"reload.body":`El servidor se actualizó mientras esta pestaña estaba abierta. Recarga para seguir.`,"reload.action":`Recargar`,"stream.reconnecting":`Reconectando…`,"common.copy":`Copiar`,"common.copied":`Copiado`,"common.close":`Cerrar`,"common.cancel":`Cancelar`,"common.retry":`Reintentar`,"common.loading":`Cargando…`,"sidebar.label":`Sesiones`,"sidebar.newSession":`Nueva sesión`,"sidebar.workspaces":`Workspaces`,"sidebar.search":`Buscar sesiones`,"sidebar.showArchived":`Mostrar archivados`,"sidebar.hideArchived":`Ocultar archivados`,"sidebar.addWorkspace":`Abrir un workspace`,"sidebar.addWorkspacePrompt":`Ruta absoluta del directorio`,"sidebar.addWorkspaceAction":`Abrir`,"sidebar.noSessions":`Aún no hay sesiones`,"sidebar.noMatches":`Ninguna sesión coincide con «{query}»`,"sidebar.settings":`Ajustes`,"sidebar.collapse":`Contraer la barra lateral`,"sidebar.expand":`Expandir la barra lateral`,"sidebar.untrusted":`no confiable`,"sidebar.untrustedHint":`Los recursos del proyecto no se cargan. Confía en esta carpeta desde su menú ⋯ (o ejecutando alisio en ella desde la terminal).`,"sidebar.newIn":`Nueva sesión en {name}`,"sidebar.missing":`carpeta no encontrada`,"sidebar.missingHint":`Esta carpeta se eliminó o se movió. Sus sesiones siguen visibles; no se pueden crear sesiones nuevas.`,"sidebar.openWorkspaceFirst":`Abre una carpeta de workspace para empezar una sesión.`,"error.workspaceMissing":`La carpeta {path} ya no existe. Sus sesiones siguen visibles, pero las sesiones nuevas necesitan una carpeta existente.`,"sidebar.pickWaiting":`Elige una carpeta en el diálogo que se abrió en tu escritorio…`,"sidebar.typePath":`Escribir una ruta`,"sidebar.browseFolders":`Explorar carpetas`,"sidebar.archived":`archivado`,"workspace.actions":`Acciones de {name}`,"workspace.pin":`Fijar`,"workspace.unpin":`Desfijar`,"workspace.archive":`Archivar`,"workspace.unarchive":`Desarchivar`,"workspace.archivedHint":`Workspace archivado: sus sesiones siguen visibles. Desarchívalo para crear sesiones nuevas.`,"browser.title":`Abrir un workspace`,"browser.up":`Carpeta superior`,"browser.home":`Inicio`,"browser.drives":`Este equipo`,"browser.hidden":`Mostrar carpetas ocultas`,"browser.open":`Abrir esta carpeta`,"browser.empty":`No hay subcarpetas aquí`,"browser.truncated":`Solo se muestran las primeras {count} carpetas.`,"browser.path":`Ruta de la carpeta`,"browser.breadcrumbs":`Ubicación de la carpeta`,"error.workspaceArchived":`El workspace {path} está archivado. Desarchívalo para crear sesiones nuevas.`,"error.pickerBusy":`Ya hay un diálogo de carpetas abierto en el escritorio del servidor.`,"sidebar.toggleFolder":`Mostrar u ocultar las sesiones de {name}`,"session.untitled":`Sesión sin título`,"session.actions":`Acciones de {title}`,"session.pin":`Fijar`,"session.unpin":`Desfijar`,"session.archive":`Archivar`,"session.unarchive":`Restaurar`,"status.idle":`Inactiva`,"status.queued":`En cola`,"status.running":`En ejecución`,"status.awaiting_input":`Esperando tu respuesta`,"status.locked":`En uso por otro proceso`,"status.error":`La última ejecución falló`,"header.conversation":`Conversación`,"header.trajectory":`Trayectoria`,"header.memory":`Memoria`,"trajectory.time":`Hora`,"trajectory.turn":`Turno`,"trajectory.type":`Evento`,"trajectory.summary":`Resumen`,"trajectory.duration":`Duración`,"trajectory.empty":`Aún no hay eventos. Envía un mensaje para iniciar un run.`,"trajectory.earlier":`Mostrar {count} runs anteriores`,"trajectory.status.running":`en curso`,"trajectory.status.completed":`completado`,"trajectory.status.failed":`fallido`,"trajectory.status.cancelled":`cancelado`,"stats.turn":`{count} turno`,"stats.turns":`{count} turnos`,"stats.step":`{count} paso`,"stats.steps":`{count} pasos`,"stats.llm":`LLM {time}`,"stats.tools":`tools {time}`,"stats.ttft":`TTFT {time}`,"stats.throughput":`{value} tok/s`,"stats.cache":`caché {value}`,"stats.input":`entrada {value}`,"stats.label":`Último run: {stats}`,"stats.session":`Sesión ({runs} runs): {stats}`,"stats.decisions":`Decisiones {requests} ({completed} ok, {fallbacks} con respaldo)`,"stats.decisionsLatency":`media {avg} ms · p95 {p95} ms`,"stats.decisionsFallback":`último respaldo: {reason}`,"header.sessionLog":`Log de sesión`,"header.sessionLogHint":`Descarga todos los eventos y mensajes como JSON Lines`,"header.rename":`Renombrar la sesión`,"header.titleLabel":`Título de la sesión`,"header.agent":`Agente {agent}`,"header.openSidebar":`Abrir la lista de sesiones`,"preset.read-only":`Solo lectura`,"preset.ask":`Preguntar`,"preset.workspace-write":`Escritura en workspace`,"preset.full-access":`Acceso total`,"presetHint.read-only":`Solo lee; nada pide aprobación.`,"presetHint.ask":`Cada escritura, proceso y llamada de red pregunta antes.`,"presetHint.workspace-write":`Escribe en el workspace; procesos y red preguntan antes.`,"presetHint.full-access":`Escribe, ejecuta procesos y accede a la red sin preguntar.`,"transcript.label":`Conversación`,"transcript.emptyTitle":`¿En qué trabajamos?`,"transcript.emptyBody":`Describe un cambio, un error o una pregunta sobre este workspace. Escribe / para ver los comandos.`,"transcript.noSessionTitle":`No hay ninguna sesión abierta`,"transcript.noSessionBody":`Elige una sesión en la barra lateral o empieza una nueva.`,"transcript.loadOlder":`Cargar mensajes anteriores`,"transcript.showEarlier":`Mostrar {count} turnos anteriores`,"transcript.scrollToBottom":`Ir al último mensaje`,"transcript.copyMessage":`Copiar el mensaje`,"transcript.think":`Razonamiento`,"transcript.context":`Inyección de contexto`,"run.phase.waiting":`Esperando al modelo…`,"run.phase.thinking":`Pensando…`,"run.phase.writing":`Redactando la respuesta…`,"run.phase.compacting":`Compactando el contexto…`,"run.phase.retrying":`El modelo no respondió; reintentando ({attempt}/{of})…`,"run.phase.recovering":`La respuesta se cortó; reintentando en pasos más pequeños ({attempt}/{of})…`,"run.phase.approval":`Esperando tu aprobación: {name}`,"run.phase.python":`Ejecutando Python…`,"run.phase.pythonWith":`Ejecutando Python ({detail})…`,"run.phase.data":`Leyendo tus datos…`,"run.phase.dataWith":`Leyendo tus datos ({detail})…`,"run.phase.artifact":`Publicando el artefacto…`,"run.phase.artifactWith":`Publicando el artefacto ({detail})…`,"run.phase.question":`Esperando tu respuesta…`,"run.phase.agent":`Un subagente está trabajando…`,"run.phase.tool":`Ejecutando {name}…`,"run.phase.toolWith":`Ejecutando {name} ({detail})…`,"run.elapsed":`Ejecución {time}`,"run.stepElapsed":`este paso {time}`,"run.lastUpdateNow":`actualizado ahora mismo`,"run.lastUpdate":`última actualización hace {seconds} s`,"run.quiet.model":`Sin respuesta del modelo desde hace {seconds} s.`,"run.stalled.model":`Sin respuesta del modelo desde hace {seconds} s. El proveedor puede estar ocupado o la conexión atascada: sigue esperando o detén la ejecución.`,"run.quiet.tool":`{name} no ha producido salida desde hace {seconds} s.`,"run.stalled.tool":`{name} no ha producido salida desde hace {seconds} s. Puede seguir trabajando; detén la ejecución si no quieres esperar.`,"run.announce.quiet":`Sin novedades desde hace más de {seconds} segundos.`,"run.announce.stalled":`Sin respuesta desde hace más de {seconds} segundos. Puedes detener la ejecución.`,"run.stop":`Detener`,"notice.run_timeout_waiting":`{who} no respondió en {seconds} s: no llegó ningún token. Reintenta, cambia de modelo o aumenta limits.timeoutMs.`,"notice.run_timeout_waiting_later":`La ejecución alcanzó su límite de {seconds} s de tiempo activo (el tiempo de espera a tu respuesta no cuenta) mientras esperaba a {who}. Lo producido hasta ahora se conserva: escribe de nuevo para continuar, cambia de modelo o aumenta limits.timeoutMs.`,"notice.run_timeout_streaming":`La ejecución alcanzó su límite de {seconds} s de tiempo activo (el tiempo de espera a tu respuesta no cuenta) mientras {who} respondía. Lo producido hasta ahora se conserva: escribe de nuevo para continuar o aumenta limits.timeoutMs.`,"notice.run_timeout_tool":`La ejecución alcanzó su límite de {seconds} s de tiempo activo (el tiempo de espera a tu respuesta no cuenta) mientras ejecutaba {tool}. Lo producido hasta ahora se conserva: escribe de nuevo para continuar o aumenta limits.timeoutMs.`,"notice.run_timeout_other":`La ejecución alcanzó su límite de {seconds} s de tiempo activo (el tiempo de espera a tu respuesta no cuenta). Lo producido hasta ahora se conserva: escribe de nuevo para continuar o aumenta limits.timeoutMs.`,"notice.run_timeout_first_token":`{who} no envió nada en {seconds} s desde la petición, por lo que se detuvo la ejecución. Reintenta, cambia de modelo o aumenta o desactiva limits.firstTokenTimeoutMs.`,"notice.run_timeout_first_token_retried":`{who} no respondió tras {attempts} intentos de {seconds} s cada uno, por lo que se detuvo la ejecución. Reintenta, cambia de modelo o aumenta o desactiva limits.firstTokenTimeoutMs; limits.firstTokenRetries indica cuántas veces se reenvía una petición silenciosa.`,"notice.run_output_truncated":`La respuesta de {who} se cortó {attempts} vez/veces por el límite de tokens de salida ({maxOutputTokens} tokens, {source}) antes de producir una respuesta útil, por lo que se detuvo la ejecución. Aumenta limits.maxOutputTokens (/settings o el archivo de configuración), baja el esfuerzo de razonamiento (/effort) o pide el resultado en partes más pequeñas.`,"transcript.sending":`Enviando…`,"transcript.notSent":`No se envió: {error}`,"transcript.images":`{count} imagen(es)`,"transcript.turnDone":`Respuesta completa`,"tool.input":`Entrada`,"tool.output":`Salida`,"tool.running":`En ejecución`,"tool.failed":`Falló`,"tool.pending":`Sin resultado registrado`,"tool.noOutput":`Aún no hay salida`,"tool.truncated":`El resultado se recortó para el streaming; recarga la sesión para verlo completo.`,"tool.rawOutput":`Salida en bruto`,"tool.expand":`Mostrar los detalles de {name}`,"tool.duration":`{ms} ms`,"notice.summary":`Los mensajes anteriores se compactaron en un resumen`,"notice.run_failed":`La ejecución falló: {error}`,"notice.run_cancelled":`La ejecución se detuvo`,"notice.run_turns_exceeded":`Se detuvo tras {turns} turnos (límite de turnos)`,"notice.response_truncated":`La respuesta llegó al límite de salida ({maxOutputTokens} tokens, {source})`,"limitSource.user":`fijado por ti`,"limitSource.model":`del catálogo del modelo`,"limitSource.default":`por defecto`,"limitSource.unknown":`límite actual`,"notice.model_changed":`El modelo cambió de {previous} a {model}`,"notice.compaction_completed":`Historial compactado: ~{before} → ~{after} tokens`,"notice.compaction_failed":`La compactación falló: {error}`,"notice.context_reduced":`Se acortaron {messages} resultados de tools para caber en el contexto`,"notice.plugin_hook_failed":`El plugin {source} falló en {hook}: {error}`,"block.unsupported":`Bloque no soportado: {kind}`,"block.showJson":`Mostrar el bloque en bruto`,"diff.title":`Cambios`,"diff.files":`{count} archivos`,"diff.untitled":`(archivo sin nombre)`,"diff.unified":`Unificado`,"diff.split":`Lado a lado`,"diff.binary":`Archivo binario modificado`,"diff.noChanges":`Sin cambios`,"diff.status.modified":`modificado`,"diff.status.added":`nuevo`,"diff.status.deleted":`eliminado`,"diff.status.renamed":`renombrado`,"terminal.output":`Salida`,"terminal.copyCommand":`Copiar comando`,"terminal.copyOutput":`Copiar salida`,"terminal.showAll":`Mostrar {count} líneas anteriores`,"terminal.empty":`Sin salida`,"terminal.waiting":`Esperando salida…`,"terminal.running":`En ejecución…`,"terminal.exit":`salida {code}`,"terminal.truncated":`salida truncada`,"json.copyValue":`Copiar valor`,"json.copyPath":`Copiar ruta`,"json.more":`… {count} más`,"json.source":`Ver como código`,"json.tree":`Ver como árbol`,"tests.passed":`{count} correctas`,"tests.failed":`{count} fallidas`,"tests.skipped":`{count} omitidas`,"tests.onlyFailed":`Solo fallos`,"tests.error":`Error`,"tests.status.passed":`correcta`,"tests.status.failed":`fallida`,"tests.status.skipped":`omitida`,"tests.status.todo":`pendiente`,"progress.title":`Progreso`,"progress.status.pending":`pendiente`,"progress.status.running":`en curso`,"progress.status.completed":`completado`,"progress.status.failed":`fallido`,"progress.status.cancelled":`cancelado`,"dock.label":`Archivos del workspace`,"dock.files":`Archivos`,"dock.changes":`Cambios`,"dock.preview":`Vista previa`,"dock.tasks":`Tareas`,"dock.tasksLive":`{count} en curso`,"dock.close":`Cerrar el panel`,"dock.more":`Mostrar más`,"dock.symlink":`Enlace simbólico (no se sigue)`,"dock.noChanges":`Esta sesión aún no ha cambiado ningún archivo.`,"dock.gitStatus":`Estado en git`,"dock.noPreview":`Elige un archivo en Archivos o Cambios, o una ruta de la conversación.`,"dock.truncated":`Se muestran los primeros 2 MB de {size} KB.`,"dock.download":`Descargar`,"dock.binary":`Archivo binario.`,"dock.copyPath":`Copiar ruta`,"dock.mention":`Mencionar en el mensaje`,"dock.noSession":`Abre una sesión para explorar su workspace.`,"header.toggleDock":`Mostrar u ocultar archivos y cambios`,"tool.openFile":`Abrir {path} en el panel lateral`,"diff.open":`Abrir el archivo`,"mermaid.source":`Fuente`,"mermaid.diagram":`Diagrama`,"mermaid.export":`Exportar SVG`,"mermaid.fullscreen":`Pantalla completa`,"mermaid.zoomIn":`Acercar`,"mermaid.zoomOut":`Alejar`,"mermaid.zoomReset":`Restablecer zoom`,"mermaid.error":`No se pudo dibujar el diagrama: {message}`,"math.error":`No se pudo mostrar la fórmula: {message}`,"math.copy":`Copiar la fuente TeX`,"code.wrap":`Ajustar líneas`,"composer.label":`Mensaje para el agente`,"composer.placeholder":`Describe lo que quieres construir. / para comandos`,"composer.attach":`Adjuntar imágenes o archivos de datos (PNG, JPEG, GIF, WebP, CSV, TSV, JSON, JSONL, XLSX; también puedes pegarlas o soltarlas)`,"composer.attachments":`Archivos para enviar`,"composer.uploadFailed":`Falló`,"composer.removeAttachment":`Quitar {name}`,"composer.reject.too-large":`Las imágenes están limitadas a 10 MB cada una.`,"composer.reject.unsupported":`Adjunta imágenes PNG, JPEG, GIF o WebP, o archivos de datos CSV, TSV, JSON, JSONL o XLSX.`,"composer.reject.too-many":`Hasta 8 archivos por mensaje.`,"composer.reject.empty":`El archivo está vacío.`,"composer.send":`Enviar`,"composer.stop":`Detener la ejecución`,"composer.preset":`Permisos: {preset}`,"composer.agent":`Agente: {agent}`,"composer.agentHint":`Cambiar de agente (Mayús+Tab alterna)`,"composer.agentApplied":`Agente: {agent}. Se aplica desde el siguiente mensaje.`,"composer.model":`Modelo y esfuerzo`,"composer.effort":`Esfuerzo de razonamiento`,"composer.effortDefault":`Predeterminado`,"composer.models":`Modelos`,"composer.modelsUnavailable":`El proveedor no listó sus modelos`,"composer.context":`Contexto: {used} de {total} tokens ({percent}%)`,"composer.contextUnknown":`Contexto: unos {used} tokens (ventana desconocida)`,"composer.locked":`Otro proceso de Alisio está usando esta sesión; aquí es de solo lectura.`,"composer.child":`Es una sesión hija; la conduce su sesión padre.`,"btw.title":`Pregunta lateral`,"btw.subtitle":`No se añade a la conversación`,"btw.history":`Historial de preguntas laterales`,"btw.earlier":`Respuesta anterior (←)`,"btw.later":`Respuesta siguiente (→)`,"btw.position":`{n}/{total}`,"btw.copy":`Copiar respuesta`,"btw.thinking":`Pensando…`,"btw.usage":`Haz una pregunta lateral sobre la sesión actual sin añadirla a la conversación.`,"btw.tokens":`{model} · {input} de entrada · {output} de salida (tokens)`,"btw.truncated":`truncada`,"palette.label":`Comandos`,"palette.empty":`Ningún comando coincide`,"palette.source.builtin":`integrado`,"palette.source.plugin":`plugin`,"palette.source.prompt":`prompt`,"palette.source.skill":`skill`,"palette.source.agent":`agente`,"approval.title":`Se necesita aprobación`,"approval.effect.write":`escribir archivos`,"approval.effect.process":`ejecutar un proceso`,"approval.effect.external":`acceder fuera del workspace`,"approval.wants":`{tool} quiere {effect}`,"approval.directory":`¿Permitir acceso a un directorio fuera del workspace?`,"approval.from":`Lo pide {label}`,"approval.child":`Desde una sesión hija`,"approval.more":`{count} más en espera`,"approval.deny":`Denegar`,"approval.once":`Permitir una vez`,"approval.session":`Permitir en la sesión`,"approval.keys":`Teclas: D denegar · O permitir una vez · S permitir en la sesión`,"approval.announce":`Se necesita aprobación: {tool}`,"artifact.kind.dashboard":`Dashboard`,"artifact.kind.document":`Documento`,"artifact.kind.spreadsheet":`Hoja de cálculo`,"artifact.kind.image":`Imagen`,"artifact.kind.data":`Datos`,"artifact.kind.code":`Texto`,"artifact.kind.archive":`Archivo comprimido`,"artifact.kind.file":`Archivo`,"artifact.open":`Abrir archivo`,"artifact.openNamed":`Abrir {name}, {kind}`,"artifact.download":`Descargar`,"artifact.downloadNamed":`Descargar {name}`,"artifact.downloadNamedKind":`Descargar {name}, {kind}`,"artifact.meta":`{size} · {date}`,"artifact.partial":`Parcial`,"artifact.expired":`Caducado`,"artifact.deleted":`Eliminado`,"artifact.unavailable":`No disponible`,"artifact.retry":`Reintentar`,"artifact.noPreview":`Este tipo de archivo no se puede previsualizar.`,"artifact.loading":`Cargando…`,"artifact.tooLarge":`Demasiado grande para previsualizar ({size}).`,"artifact.downloadInstead":`Descarga el archivo para abrirlo.`,"artifactPanel.label":`Visor de artefactos`,"artifactPanel.switch":`Cambiar de artefacto`,"artifactPanel.filter":`Filtrar artefactos`,"artifactPanel.new":`Nuevo`,"artifactPanel.empty":`Aún no hay artefactos en esta sesión.`,"artifactPanel.noMatch":`Ningún artefacto coincide.`,"artifactPanel.fullscreen":`Pantalla completa`,"artifactPanel.exitFullscreen":`Salir de pantalla completa`,"artifactPanel.close":`Cerrar`,"artifactPanel.expand":`Expandir panel`,"artifactPanel.restore":`Restaurar panel`,"artifactPanel.resize":`Redimensionar panel`,"artifactPanel.openNewTab":`Abrir en una pestaña nueva`,"artifactPanel.sources":`Descargar fuentes del análisis`,"artifactPanel.export":`Copiar al workspace…`,"artifactPanel.details":`Detalles`,"artifactPanel.delete":`Eliminar`,"artifactPanel.deleteConfirm":`¿Eliminar {name}? No se puede deshacer.`,"artifactPanel.loadFailed":`No se pudo cargar la vista previa.`,"artifactPanel.reload":`Recargar`,"artifactPanel.gone":`Este artefacto ya no está disponible. Elige otro de la lista.`,"artifactPanel.fit":`Ajustar`,"artifactPanel.actualSize":`100 %`,"artifactPanel.exportTitle":`Copiar al workspace`,"artifactPanel.exportTarget":`Carpeta del workspace`,"artifactPanel.exportHint":`Relativa al workspace; «.» es su raíz. Alisio pregunta antes de escribir salvo que la escritura esté permitida.`,"artifactPanel.overwrite":`Reemplazar archivos existentes`,"artifactPanel.exportSubmit":`Copiar`,"artifactPanel.exportStarted":`Copiando {name} al workspace…`,"artifactPanel.detailsTitle":`Detalles`,"artifactPanel.created":`Creado`,"artifactPanel.size":`Tamaño`,"artifactPanel.files":`Archivos`,"artifactPanel.model":`Modelo`,"artifactPanel.provider":`Proveedor`,"artifactPanel.dashboard":`Dashboard`,"artifactPanel.plannerRules":`Reglas`,"artifactPanel.plannerDecisions":`Reglas y decisiones`,"artifactPanel.runtime":`Runtime`,"artifactPanel.inputs":`Entradas`,"artifactPanel.execution":`Ejecución`,"artifactPanel.script":`SHA-256 del script`,"artifactPanel.none":`—`,"dataset.uploading":`Leyendo {name}…`,"dataset.failed":`No se pudo leer {name}: {error}`,"dataset.shape":`{rows} filas × {columns} columnas`,"dataset.sheets":`{count} hojas`,"dataset.open":`Abrir {name} como tabla`,"dataset.defaultPrompt":`Revisa los datos adjuntos y cuéntame qué contienen.`,"dataset.attached":`Datos adjuntos`,"sheet.label":`Visor de tablas`,"sheet.sheet":`Hoja`,"sheet.filterColumn":`Columna del filtro`,"sheet.allColumns":`Todas las columnas`,"sheet.filter":`Filtrar filas`,"sheet.rows":`{total} filas`,"sheet.matches":`{matched} de {total} filas coinciden`,"sheet.loading":`Cargando filas…`,"sheet.preparing":`Preparando la tabla…`,"sheet.empty":`Esta hoja no tiene filas.`,"sheet.noMatches":`Ninguna fila coincide.`,"sheet.error":`No se pudo cargar la tabla.`,"sheet.notInteractive":`El orden y el filtro se desactivan por encima de {limit} filas: el archivo no tiene índices.`,"sheet.needColumn":`Elige una columna para filtrar una hoja tan grande.`,"sheet.jumpLimited":`Con orden o filtro activo solo se llega por salto a las primeras {limit} filas; sigue desplazándote.`,"sheet.sortBy":`Ordenar por {column}`,"sheet.resizeColumn":`Redimensionar la columna {column}`,"sheet.copyRow":`Copiar fila`,"sheet.copied":`Copiado`,"sheet.downloadOriginal":`Descargar el original`,"sheet.rowNumber":`Fila`,"artifactPanel.frameTitle":`{name} (vista previa aislada)`,"approval.analysisRun.title":`¿Ejecutar análisis en Python?`,"approval.analysisRun.notSandboxed":`Python administrado no es un sandbox: el script se ejecuta con tus permisos y puede leer tus archivos y usar la red.`,"approval.analysisRun.container":`Se ejecuta en un contenedor sin acceso a la red.`,"approval.analysisRun.repo":`Este paso no modifica archivos del repositorio.`,"approval.analysisRun.repoManaged":`Alisio no modifica archivos del repositorio en este paso, pero el script podría hacerlo.`,"approval.analysisRun.script":`Script (primeras 40 líneas)`,"approval.allowForSession":`Permitir en esta sesión`,"mode.auto":`Auto`,"modes.title":`Modo de permisos`,"modes.status":`Estado: {mode}`,"modes.statusReadOnly":`Solo lectura: nada puede escribir ni ejecutar.`,"modes.fullConfirm":`¿Activar el acceso total? Las escrituras, los comandos y la red se ejecutan sin preguntar. No es un sandbox: el agente tiene los permisos de tu usuario.`,"modes.manage":`Gestionar permisos guardados…`,"permissions.title":`Permisos de la sesión`,"permissions.analysisRun":`Análisis en Python`,"permissions.allowedSession":`Permitido en esta sesión · desde {time}`,"permissions.revoke":`Revocar`,"permissions.none":`No hay permisos guardados en esta sesión.`,"permissions.loadFailed":`No se pudieron cargar los permisos.`,"interaction.title":`Un plugin pregunta`,"interaction.from":`Pregunta de {label}`,"interaction.questionOf":`Pregunta {n} de {total}`,"interaction.recommended":`Recomendada`,"interaction.skip":`Omitir`,"interaction.next":`Siguiente`,"interaction.submit":`Enviar`,"plan.review.eyebrow":`Revisión del plan`,"plan.review.revision":`Revisión {n}`,"plan.review.title":`Plan completo. ¿Qué quieres hacer?`,"plan.option.approve":`Aceptar y empezar la implementación`,"plan.option.approve.hint":`El agente build implementa exactamente este plan.`,"plan.option.skip":`Omitir por ahora`,"plan.option.skip.hint":`Sigues en modo plan; no cambia nada.`,"plan.option.context":`Añadir contexto`,"plan.option.context.hint":`Dile al agente de plan qué cambiar; vuelve a planificar.`,"plan.review.contextLabel":`Contexto para el plan`,"plan.review.contextPlaceholder":`Añade contexto para el plan`,"plan.review.send":`Enviar contexto`,"plan.review.back":`Volver`,"settings.title":`Ajustes`,"settings.general":`General`,"settings.appearance":`Apariencia`,"settings.language":`Idioma`,"settings.theme":`Tema`,"settings.density":`Filas de proceso`,"settings.plugins":`Plugins`,"settings.skills":`Skills`,"settings.mcp":`Servidores MCP`,"settings.agents":`Presets de agente`,"settings.about":`Acerca de`,"settings.workspace":`Workspace: {path}`,"settings.noWorkspace":`Abre o añade primero un workspace; estos ajustes pertenecen a un workspace.`,"settings.default":`Predeterminado`,"settings.agentSettings":`Ajustes del agente`,"settings.agentSettingsLead":`Se guardan para este usuario en`,"settings.readOnly":`alisio serve se ejecuta con --read-only: no se pueden cambiar los ajustes.`,"plugins.lead":`Configura e inspecciona los plugins cargados en este workspace.`,"plugins.tab.configuration":`Configuración de plugins`,"plugins.tab.list":`Lista de plugins`,"plugins.search":`Buscar plugins`,"plugins.none":`Ningún plugin coincide.`,"plugins.status.enabled":`Habilitado`,"plugins.status.disabled":`Deshabilitado`,"plugins.status.failed":`Con fallo`,"plugins.status.restart":`Requiere reinicio`,"plugins.id":`Id`,"plugins.version":`Versión`,"plugins.source":`Origen`,"plugins.builtin":`integrado`,"plugins.categories":`Categorías`,"plugins.tools":`Tools`,"plugins.commands":`Comandos`,"plugins.enable":`Habilitado en este workspace`,"plugins.enableNamed":`Habilitar {name}`,"plugins.deferred":`Guardado. Se aplica cuando terminen los runs del workspace.`,"plugins.notSandboxed":`Los plugins no están aislados: se ejecutan dentro del proceso de alisio serve con los permisos de tu usuario. Habilita solo plugins de confianza.`,"plugins.howToInstall":`Los plugins se instalan desde la terminal (alisio plugins o el archivo de configuración); la web solo habilita o deshabilita los ya configurados.`,"plugins.applyNote":`Habilitar o deshabilitar un plugin guarda un ajuste del proyecto y recarga el workspace en cuanto no tiene runs; las sesiones abiertas conservan su historial.`,"plugins.projectFile":`Archivo de configuración del proyecto:`,"skills.lead":`Skills que el agente puede cargar en este workspace. Las deshabilitadas salen de la paleta de comandos y del catálogo del modelo.`,"skills.search":`Buscar skills`,"skills.none":`No se encontró ninguna skill.`,"skills.shadowed":`Ocultada`,"skills.meta":`{scope} · unos {tokens} tokens`,"skills.shadowedBy":`ocultada por {id}`,"skills.locked":`bloqueada por su plugin`,"mcp.lead":`Servidores Model Context Protocol configurados para este workspace.`,"mcp.notGranted":`El acceso MCP no está concedido para este workspace: los servidores siguen desconectados.`,"mcp.granted":`Acceso MCP concedido hasta que se detenga alisio serve.`,"mcp.grantedPersisted":`Acceso MCP concedido para este usuario (mcp.allow).`,"mcp.readOnly":`alisio serve se ejecuta con --read-only: MCP no está disponible.`,"mcp.grant":`Conceder acceso MCP`,"mcp.consentTitle":`¿Permitir que se ejecuten servidores MCP?`,"mcp.consentBody":`Los servidores MCP son procesos locales o servicios remotos que se ejecutan con los privilegios de tu usuario y pueden leer archivos y acceder a la red. Concede acceso solo si confías en los servidores configurados.`,"mcp.remember":`Recordar para este usuario (escribe mcp.allow en tu configuración)`,"mcp.none":`No hay servidores MCP configurados.`,"mcp.status":`{status}`,"mcp.meta":`{transport} · {source} · {tools} tools · {resources} recursos · {prompts} prompts`,"mcp.needsGrant":`Concede primero el acceso MCP`,"mcp.connect":`Conectar`,"agents.lead":`Agentes que pueden conducir una sesión. Elige uno para la sesión abierta; las definiciones se editan fuera de la web.`,"agents.source.builtin":`integrado`,"agents.source.user":`usuario`,"agents.source.plugin":`plugin`,"agents.readOnly":`solo lectura`,"agents.default":`predeterminado del workspace`,"agents.model":`Modelo sugerido: {model}`,"agents.instructions":`Instrucciones`,"agents.inUse":`En uso`,"agents.use":`Usar en esta sesión`,"appearance.lead":`Cómo se ve la interfaz en este navegador.`,"about.description":`Alisio es un entorno para agentes de programación que se conecta a endpoints compatibles con OpenAI y se ejecuta en la terminal o el navegador, con núcleo propio en TypeScript y herramientas, plugins y skills extensibles.`,"about.version":`Alisio {version}`,"about.versionUnknown":`Versión no disponible`,"about.versionTitle":`Versión de Alisio {version}`,"about.repository":`Ver el repositorio en GitHub`,"about.repositoryLabel":`Ver el repositorio de Alisio en GitHub (se abre en una pestaña nueva)`,"config.open":`Abrir archivo de configuración`,"config.lead":`alisio serve no abre editores; copia una ruta y ábrela tú.`,"config.effective":`Archivo de configuración efectivo`,"config.settings":`Ajustes de usuario (los escribe esta página)`,"config.providers":`Perfiles de proveedor`,"config.copy":`Copiar ruta`,"config.untrusted":`Este workspace no es de confianza, así que su .alisio/config.json se ignora. Confía en él desde su menú ⋯ de la barra lateral (o desde la terminal).`,"settings.models":`Modelos`,"models.lead":`Perfiles de proveedor, sus credenciales y el proveedor que usa este workspace.`,"models.running":`Este workspace usa {provider} · {model} (perfil: {profile}).`,"models.none":`Aún no hay perfiles de proveedor. Añade uno abajo o ejecuta alisio connect en una terminal.`,"models.activeGlobal":`Perfil predeterminado`,"models.current":`Este workspace`,"models.edit":`Editar`,"models.activate":`Activar en este workspace`,"models.activated":`{name} ya está activo en este workspace.`,"models.unchanged":`Ese perfil y modelo ya están activos.`,"models.add":`Añadir un perfil`,"models.form.name":`Nombre del perfil`,"models.form.type":`Proveedor`,"models.form.model":`Modelo`,"models.form.save":`Guardar perfil`,"models.form.secretsNote":`Los secretos no forman parte del perfil: configúralos debajo tras guardarlo; se guardan aparte y no se vuelven a mostrar.`,"models.credential.missing":`Sin configurar`,"models.credential.env":`Tomada de una variable de entorno`,"models.credential.stored":`Guardada`,"models.credential.storedTail":`Guardada · termina en {tail}`,"models.credential.enter":`Pega un valor nuevo`,"models.credential.replace":`Reemplazar el valor guardado`,"models.credential.save":`Guardar`,"models.credential.remove":`Eliminar`,"models.credential.saved":`Credencial guardada. Activa el perfil para usarla ya.`,"theme.dark":`Oscuro`,"theme.light":`Claro`,"theme.system":`Sistema`,"density.compact":`Compactas`,"density.detailed":`Detalladas`,"language.en":`English`,"language.es":`Español`,"error.generic":`{message}`,"sidebar.agents":`Agentes`,"agentsWin.title":`Agentes`,"agentsWin.maximize":`Maximizar`,"agentsWin.restore":`Restaurar tamaño`,"agentsWin.lead":`Los agentes son archivos Markdown que otras herramientas también pueden leer: los de proyecto viven en .agents/agents del workspace y los globales en ~/.agents/agents.`,"agentsWin.create":`Crear`,"agentsWin.yours":`Tus agentes`,"agentsWin.none":`Aún no hay agentes. Crea uno o parte de una plantilla de abajo.`,"agentsWin.templates":`Plantillas`,"agentsWin.scope.project":`Proyecto`,"agentsWin.scope.global":`Global`,"agentsWin.overrides":`Reemplaza al global`,"agentsWin.overridden":`Reemplazado por el de proyecto`,"agentsWin.delete":`Eliminar`,"agentsWin.deleteConfirm":`¿Eliminar {path}? Las demás herramientas que leen este archivo también pierden el agente.`,"agentsWin.deleted":`Agente eliminado.`,"agentsWin.deletedRestart":`Archivo del agente eliminado. Reinicia Alisio para quitarlo de los agentes en ejecución.`,"agentsWin.newAgent":`Nuevo agente`,"agentsWin.setup":`Configuración`,"agentsWin.sessions":`Sesiones`,"agentsWin.definition":`Definición del agente`,"agentsWin.name":`Nombre`,"agentsWin.description":`Descripción`,"agentsWin.descriptionPlaceholder":`Una frase: qué hace este agente (se deriva de las instrucciones si está vacía)`,"agentsWin.instructions":`Instrucciones`,"agentsWin.instructionsPlaceholder":`Describe el comportamiento deseado del modelo (tono, uso de herramientas, estilo de respuesta)`,"agentsWin.scope":`Ámbito`,"agentsWin.scopeHint":`Dónde se guarda el archivo. Un agente de proyecto reemplaza a uno global con el mismo nombre.`,"agentsWin.scopeUntrusted":`Este workspace no es de confianza: sus agentes de proyecto se guardan pero no se cargan hasta que confíes en él desde la terminal.`,"agentsWin.model":`Modelo`,"agentsWin.modelSection":`Modelo`,"agentsWin.chooseModel":`Elige un modelo`,"agentsWin.modelActive":`{name} (activo)`,"agentsWin.capsUnknown":`El proveedor no declara capacidades; se ofrecen todas las opciones.`,"agentsWin.textFormat":`Formato de texto`,"agentsWin.format.text":`Texto`,"agentsWin.format.json_object":`JSON`,"agentsWin.format.json_schema":`JSON Schema`,"agentsWin.effort":`Esfuerzo de razonamiento`,"agentsWin.verbosity":`Verbosidad`,"agentsWin.summary":`Resumen`,"agentsWin.modelDefault":`Predeterminado del modelo`,"agentsWin.unsupported":`No compatible con este modelo`,"agentsWin.level.minimal":`Mínimo`,"agentsWin.level.low":`Bajo`,"agentsWin.level.medium":`Medio`,"agentsWin.level.high":`Alto`,"agentsWin.level.xhigh":`Muy alto`,"agentsWin.summary.auto":`Automático`,"agentsWin.summary.none":`Ninguno`,"agentsWin.summary.concise":`Conciso`,"agentsWin.summary.detailed":`Detallado`,"agentsWin.save":`Guardar definición del agente`,"agentsWin.saved":`Agente guardado y disponible ya.`,"agentsWin.savedRestart":`Agente guardado. Reinicia Alisio para usarlo.`,"agentsWin.saveFailed":`No se pudo guardar el agente: {message}`,"agentsWin.assistTitle":`Crear con Alisio`,"agentsWin.assistLead":`Describe el agente; el modelo activo escribe sus instrucciones siguiendo estándares de autoría de agentes y luego lo revisas.`,"agentsWin.assistRefineLead":`Opcional: ¿qué debe cambiar? El modelo activo refina estas instrucciones según los estándares de autoría.`,"agentsWin.assistPlaceholder":`p. ej. revisa pull requests en busca de problemas de seguridad y explica cómo corregirlos`,"agentsWin.assistCreate":`Crear con Alisio`,"agentsWin.assistRefine":`Refinar con Alisio`,"agentsWin.building":`Construyendo con Alisio`,"agentsWin.buildingBody":`{model} está escribiendo el rol, objetivo, alcance, reglas de herramientas, restricciones y formato de salida del agente…`,"agentsWin.buildingElapsed":`{seconds} s`,"agentsWin.buildFailed":`Alisio no pudo construir el agente: {message}`,"agentsWin.buildDone":`Borrador de {model} ({guidance}). Revísalo antes de guardar.`,"agentsWin.createdTitle":`{name} está listo`,"agentsWin.createdBody":`Pruébalo en un chat nuevo con el agente activo, o sigue editando.`,"agentsWin.createdRestart":`Se guardó, pero este Alisio no lo ha cargado; reinicia Alisio para probarlo.`,"agentsWin.tryIt":`Probarlo en un chat nuevo`,"agentsWin.stay":`Seguir en el editor`,"agentsWin.config":`Configuración del agente`,"agentsWin.configCopy":`Copiar petición`,"agentsWin.configLead":`La misma definición mediante la API propia de Alisio (alisio serve).`,"agentsWin.gettingStarted":`Primeros pasos para crear un agente`,"agentsWin.dismiss":`Descartar`,"agentsWin.step.define":`Define un agente`,"agentsWin.step.defineBody":`Elige un modelo, instrucciones y herramientas opcionales.`,"agentsWin.step.runtime":`Elige un entorno`,"agentsWin.step.runtimeBody":`Los agentes se ejecutan en local, en un workspace que abres en Alisio, con sus permisos.`,"agentsWin.step.session":`Crea una sesión`,"agentsWin.step.sessionBody":`Inicia un espacio de trabajo duradero del agente con una entrada inicial opcional.`,"agentsWin.step.events":`Intercambia eventos`,"agentsWin.step.eventsBody":`Los mensajes, llamadas a herramientas y resultados llegan al chat.`,"agentsWin.sessionsEmpty":`Ninguna sesión usa este agente todavía.`,"agentsWin.sessionsUnsaved":`Guarda el agente para iniciar sesiones con él.`,"agentsWin.startSession":`Iniciar una sesión con este agente`,"agentsWin.untitled":`Sesión sin título`,"agentsWin.noWorkspace":`Abre un workspace para usar agentes de proyecto e iniciar sesiones; los agentes globales siguen funcionando.`,"agentsWin.modelFallback":`{model} no está en los perfiles configurados; el chat usa el modelo actual.`,"agentsWin.unsavedLeave":`¿Descartar los cambios sin guardar?`,"agentsWin.picker":`Cambiar de agente`,"agentsWin.pickerSearch":`Buscar agentes`,"agentsWin.pickerLead":`Se aplica desde el siguiente mensaje de este chat.`,"agentsWin.current":`Actual`,"agentsWin.defaultAgent":`Predeterminado`,"agentsWin.builtin":`Integrado`,"agentsWin.plugin":`Plugin`,"agentsWin.pickerEmpty":`Ningún agente coincide con «{query}».`,"agentsWin.manage":`Gestionar agentes…`,"agentsWin.activeBadge":`Agente activo: {name}. Cámbialo con /agents.`,"agentsWin.back":`Agentes`,"agentsWin.nameError.required":`El nombre es obligatorio.`,"agentsWin.nameError.tooLong":`Usa como máximo 80 caracteres.`,"agentsWin.nameError.noLetters":`Incluye al menos una letra o un dígito.`,"trust.grant":`Confiar en este workspace…`,"trust.revoke":`Dejar de confiar en este workspace…`,"trust.menuHint":`Configuración, plugins, agentes, skills y prompts del proyecto`,"trust.confirm":`¿Confiar en {path}?
2
-
3
- Alisio cargará la configuración de proyecto de esta carpeta (que puede cambiar el endpoint y la clave del proveedor), sus plugins (código que se ejecuta con tus privilegios de usuario), agentes, skills y prompts. Confía solo en carpetas cuyo contenido conozcas. Si .alisio/config.json cambia más adelante, se te volverá a preguntar.`,"trust.confirmRevoke":`¿Dejar de confiar en {path}? Su configuración de proyecto, plugins, agentes, skills y prompts dejan de cargarse.`,"trust.granted":`Workspace de confianza: sus recursos de proyecto están cargados.`,"trust.revoked":`El workspace ya no es de confianza: sus recursos de proyecto se descargaron.`,"settings.analysis":`Análisis de datos`,"settings.analysis.title":`Análisis de datos`,"settings.analysis.lead":`Los scripts de Python que escribe el agente se ejecutan aquí y sus resultados se convierten en archivos descargables. Nada de esta página es obligatorio: Python se detecta automáticamente.`,"settings.analysis.status":`Runtime`,"settings.analysis.mode":`Modo`,"settings.analysis.mode.managed":`Administrado: tu propio Python`,"settings.analysis.mode.oci":`Contenedor: Docker o Podman`,"settings.analysis.managedNote":`Python administrado no es un sandbox: el script se ejecuta con tus permisos y puede leer tus archivos y usar la red.`,"settings.analysis.containerNote":`Se ejecuta en un contenedor sin acceso a la red, con raíz de solo lectura y solo las carpetas del trabajo. Limita el daño; no es un sandbox reforzado.`,"settings.analysis.runtime":`Runtime de Python`,"settings.analysis.detected":`Python {version} · {path} (detectado automáticamente)`,"settings.analysis.notFound":`No se encontró Python 3.10+ en esta máquina.`,"settings.analysis.installHint.title":`Cómo instalar Python en este sistema`,"settings.analysis.installHint.afterInstall":`Tras instalarlo no hace falta reiniciar.`,"settings.analysis.runtimeVersion":`Versión del entorno`,"settings.analysis.extras":`Paquetes opcionales`,"settings.analysis.extras.none":`Ninguno instalado. La biblioteca estándar basta para la mayoría de los análisis.`,"settings.analysis.extras.installed":`Instalados: {extras}`,"settings.analysis.extras.hint":`Cuando un análisis necesita pandas, numpy o similares, Alisio pregunta una vez antes de descargarlos. También puedes ejecutar alisio analysis setup --extras analysis.`,"settings.analysis.oci":`Runtime de contenedor`,"settings.analysis.oci.engine":`Motor`,"settings.analysis.oci.image":`Imagen`,"settings.analysis.oci.noImage":`Sin imagen. Define analysis.oci.image (fijada por digest) en tu configuración de usuario.`,"settings.analysis.oci.available":`Disponible ({version})`,"settings.analysis.oci.unavailable":`No disponible: {reason}`,"settings.analysis.oci.unused":`No se usa en modo administrado.`,"settings.analysis.oci.limits":`{memory} MB de memoria · {cpus} CPU`,"settings.analysis.enabled":`Activar el análisis de datos`,"settings.analysis.enabledHint":`Activa o desactiva python_run, los artefactos y las herramientas de datos. El workspace recarga sus herramientas cuando terminan sus ejecuciones.`,"settings.analysis.smartDashboard":`Smart Dashboard`,"settings.analysis.smartDashboardHint":`Ofrece dashboard_generate, que construye un dashboard a partir de un dataset sin código. Desactivado, la herramienta no se ofrece. Se aplica cuando el workspace recarga sus herramientas.`,"settings.analysis.timeout":`Tiempo máximo de ejecución (segundos)`,"settings.analysis.retention":`Retención`,"settings.analysis.retention.lead":`Los archivos antiguos se limpian automáticamente, como máximo una vez al día. 0 no borra nunca ese tipo de archivo.`,"settings.analysis.retention.jobs":`Conservar registros de trabajos y datasets sin uso (días)`,"settings.analysis.retention.intermediate":`Conservar archivos temporales (días)`,"settings.analysis.retention.artifacts":`Caducar artefactos tras (días)`,"settings.analysis.retention.lastSweep":`Última limpieza: {time}`,"settings.analysis.retention.never":`Todavía no se ha hecho ninguna limpieza.`,"settings.analysis.disabled":`El análisis de datos está desactivado: python_run y las herramientas de datos no están disponibles.`,"settings.analysis.readOnlyRuntime":`alisio serve se ejecuta con --read-only: python_run no está disponible.`,"approval.analysisInstall.title":`¿Instalar paquetes de Python?`,"approval.analysisInstall.packages":`Paquetes: {packages}`,"approval.analysisInstall.dependencies":`Más sus dependencias ({count} wheels fijadas en total).`,"approval.analysisInstall.size":`Descarga: unos {size}.`,"approval.analysisInstall.network":`Necesita acceso a la red.`,"approval.analysisInstall.safety":`Solo wheels, verificadas por hash, en un entorno privado; no se compila nada.`,"approval.analysisInstall.once":`Este permiso nunca se recuerda: se pregunta cada vez.`,"approval.keysInstall":`Teclas: D denegar · O permitir una vez`,"artifactPanel.rerun":`Ejecutar de nuevo`,"artifactPanel.rerunStarted":`Ejecutando de nuevo el análisis de {name}…`,"artifactPanel.rerunOf":`Repetición de`,"artifactPanel.status":`Estado`,"artifactPanel.expiredHint":`La política de retención eliminó los archivos. Ejecuta el análisis de nuevo para recrearlos.`};export{e as es};