my-durable 0.0.11 → 0.0.12

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.
@@ -170,6 +170,10 @@ server.listen(config.port, config.host, () => {
170
170
  if (a.family === "IPv4" && !a.internal)
171
171
  console.log(`LAN: http://${a.address}:${config.port}`);
172
172
  console.log(`background: dpi device start | stop | status | install (service)`);
173
+ if (store.keyless)
174
+ console.log(
175
+ `no provider key: the model list is the built-in catalog; set OPENROUTER_API_KEY in ${config.envFile} to chat`,
176
+ );
173
177
 
174
178
  // Enrollment guidance: an unpaired machine must be told exactly what to do,
175
179
  // and — when a hub is configured — it asks for a code ITSELF so the operator
@@ -277,6 +277,7 @@ export class Store {
277
277
  models: this.modelList,
278
278
  defaultModel: this.defaultModel(),
279
279
  provider: this.options.provider,
280
+ ...(this.modelsKeyless ? { providerKeyMissing: true } : {}),
280
281
  storage: { dataDir: this.options.dataDir, catalogPath: this.catalogPath, appStatePath: this.sharedStatePath },
281
282
  codeDir: CODE_DIR,
282
283
  capabilities: ["events", "docs", "demo", "jobs"],
@@ -284,10 +285,20 @@ export class Store {
284
285
  };
285
286
  }
286
287
 
288
+ /** The device has no provider key: its catalog is the built-in list. */
289
+ get keyless(): boolean {
290
+ return this.modelsKeyless;
291
+ }
292
+
287
293
  private defaultModel() {
288
294
  return this.options.provider === "faux" ? fauxModels[0].id : defaultModelId;
289
295
  }
290
296
 
297
+ /** True when the device has no provider key: the catalog shown is the built-in
298
+ * list, and chat requests will fail until a key is set (deviceInfo carries it
299
+ * so every client can say so instead of showing a mystery empty picker). */
300
+ private modelsKeyless = false;
301
+
291
302
  private async loadModels(): Promise<ModelInfo[]> {
292
303
  if (this.options.provider === "faux")
293
304
  return fauxModels.map((m) => ({
@@ -300,7 +311,25 @@ export class Store {
300
311
  reasoning: false,
301
312
  cost: { input: 0, output: 0 },
302
313
  }));
303
- const available = await this.models.getAvailable("openrouter", { signal: AbortSignal.timeout(10000) });
314
+ // getAvailable only lists AUTHENTICATED providers — no OPENROUTER_API_KEY
315
+ // means an empty list even though the built-in catalog needs no key. Fall
316
+ // back to it (static metadata) so picking a model is never blocked; the
317
+ // keyless flag tells the client chat will need the key.
318
+ const hasChatFields = (
319
+ m: unknown,
320
+ ): m is { id: string; contextWindow: number; reasoning: boolean; cost: { input: number; output: number } } =>
321
+ typeof m === "object" && m !== null && "contextWindow" in m && "reasoning" in m;
322
+ let available: ReadonlyArray<{ id: string; contextWindow: number; reasoning: boolean; cost: { input: number; output: number } }> =
323
+ await this.models.getAvailable("openrouter", { signal: AbortSignal.timeout(10000) }).catch(() => []);
324
+ if (!available.length) {
325
+ this.modelsKeyless = true;
326
+ // The provider's static catalog (no key, no network): chat models only —
327
+ // image/classifier entries carry no context window.
328
+ available = this.models
329
+ .getAllModels("openrouter")
330
+ .filter((m) => hasChatFields(m))
331
+ .map((m) => ({ id: m.id, contextWindow: m.contextWindow, reasoning: m.reasoning, cost: { input: m.cost.input, output: m.cost.output } }));
332
+ }
304
333
  return curatedModels.flatMap((c) => {
305
334
  const m = available.find((m) => m.id === c.id);
306
335
  return m
@@ -74,4 +74,4 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
74
74
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _p(e,t){return mp(e)||hp(e,t)||vp(e,t)||gp()}function vp(e,t){if(e){if(typeof e==`string`)return pp(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?pp(e,t):void 0}}function yp(e){var t,n;function r(t,n){try{var a=e[t](n),o=a.value,s=o instanceof fp;Promise.resolve(s?o.v:o).then(function(n){if(s){var c=t===`return`&&o.k?t:`next`;if(!o.k||n.done)return r(c,n);n=e[c](n).value}i(!!a.done,n)},function(e){r(`throw`,e)})}catch(e){i(2,e)}}function i(e,i){e===2?t.reject(i):t.resolve({value:i,done:e}),(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,i){return new Promise(function(a,o){var s={key:e,arg:i,resolve:a,reject:o,next:null};n?n=n.next=s:(t=n=s,r(e,i))})},typeof e.return!=`function`&&(this.return=void 0)}yp.prototype[typeof Symbol==`function`&&Symbol.asyncIterator||`@@asyncIterator`]=function(){return this},yp.prototype.next=function(e){return this._invoke(`next`,e)},yp.prototype.throw=function(e){return this._invoke(`throw`,e)},yp.prototype.return=function(e){return this._invoke(`return`,e)};var bp=Object.entries,xp=Object.setPrototypeOf,Sp=Object.isFrozen,Cp=Object.getPrototypeOf,wp=Object.getOwnPropertyDescriptor,Tp=Object.freeze,Ep=Object.seal,Dp=Object.create,Op=typeof Reflect<`u`&&Reflect,kp=Op.apply,Ap=Op.construct;Tp||=function(e){return e},Ep||=function(e){return e},kp||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},Ap||=function(e){return new e(...[...arguments].slice(1))};var jp=Zp(Array.prototype.forEach);Array.prototype.indexOf;var Mp=Zp(Array.prototype.lastIndexOf),Np=Zp(Array.prototype.pop),Pp=Zp(Array.prototype.push);Array.prototype.slice;var Fp=Zp(Array.prototype.splice),Ip=Array.isArray,Lp=Zp(String.prototype.toLowerCase),Rp=Zp(String.prototype.toString),zp=Zp(String.prototype.match),Bp=Zp(String.prototype.replace),Vp=Zp(String.prototype.indexOf),Hp=Zp(String.prototype.trim),Up=Zp(Number.prototype.toString),Wp=Zp(Boolean.prototype.toString),Gp=typeof BigInt>`u`?null:Zp(BigInt.prototype.toString),Kp=typeof Symbol>`u`?null:Zp(Symbol.prototype.toString),qp=Zp(Object.prototype.hasOwnProperty),Jp=Zp(Object.prototype.toString),Yp=Zp(RegExp.prototype.test),Xp=Qp(TypeError);function Zp(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return kp(e,t,n)}}function Qp(e){return function(){return Ap(e,[...arguments])}}function K(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Lp;if(xp&&xp(e,null),!Ip(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(Sp(t)||(t[r]=e),i=e)}e[i]=!0}return e}function $p(e){for(let t=0;t<e.length;t++)qp(e,t)||(e[t]=null);return e}function em(e){let t=Dp(null);for(let r of bp(e)){var n=_p(r,2);let i=n[0],a=n[1];qp(e,i)&&(t[i]=Ip(a)?$p(a):a&&typeof a==`object`&&a.constructor===Object?em(a):a)}return t}function tm(e){switch(typeof e){case`string`:return e;case`number`:return Up(e);case`boolean`:return Wp(e);case`bigint`:return Gp?Gp(e):`0`;case`symbol`:return Kp?Kp(e):`Symbol()`;case`undefined`:return Jp(e);case`function`:case`object`:{if(e===null)return Jp(e);let t=e,n=nm(t,`toString`);if(typeof n==`function`){let e=n(t);return typeof e==`string`?e:Jp(e)}return Jp(e)}default:return Jp(e)}}function nm(e,t){for(;e!==null;){let n=wp(e,t);if(n){if(n.get)return Zp(n.get);if(typeof n.value==`function`)return Zp(n.value)}e=Cp(e)}function n(){return null}return n}function rm(e){try{return Yp(e,``),!0}catch{return!1}}var im=Tp(`a.abbr.acronym.address.area.article.aside.audio.b.bdi.bdo.big.blink.blockquote.body.br.button.canvas.caption.center.cite.code.col.colgroup.content.data.datalist.dd.decorator.del.details.dfn.dialog.dir.div.dl.dt.element.em.fieldset.figcaption.figure.font.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.img.input.ins.kbd.label.legend.li.main.map.mark.marquee.menu.menuitem.meter.nav.nobr.ol.optgroup.option.output.p.picture.pre.progress.q.rp.rt.ruby.s.samp.search.section.select.shadow.slot.small.source.spacer.span.strike.strong.style.sub.summary.sup.table.tbody.td.template.textarea.tfoot.th.thead.time.tr.track.tt.u.ul.var.video.wbr`.split(`.`)),am=Tp(`svg.a.altglyph.altglyphdef.altglyphitem.animatecolor.animatemotion.animatetransform.circle.clippath.defs.desc.ellipse.enterkeyhint.exportparts.filter.font.g.glyph.glyphref.hkern.image.inputmode.line.lineargradient.marker.mask.metadata.mpath.part.path.pattern.polygon.polyline.radialgradient.rect.stop.style.switch.symbol.text.textpath.title.tref.tspan.view.vkern`.split(`.`)),om=Tp([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]),sm=Tp([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]),cm=Tp(`math.menclose.merror.mfenced.mfrac.mglyph.mi.mlabeledtr.mmultiscripts.mn.mo.mover.mpadded.mphantom.mroot.mrow.ms.mspace.msqrt.mstyle.msub.msup.msubsup.mtable.mtd.mtext.mtr.munder.munderover.mprescripts`.split(`.`)),lm=Tp([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),um=Tp([`#text`]),dm=Tp(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.command.commandfor.controls.controlslist.coords.crossorigin.datetime.decoding.default.dir.disabled.disablepictureinpicture.disableremoteplayback.download.draggable.enctype.enterkeyhint.exportparts.face.for.headers.height.hidden.high.href.hreflang.id.inert.inputmode.integrity.ismap.kind.label.lang.list.loading.loop.low.max.maxlength.media.method.min.minlength.multiple.muted.name.nonce.noshade.novalidate.nowrap.open.optimum.part.pattern.placeholder.playsinline.popover.popovertarget.popovertargetaction.poster.preload.pubdate.radiogroup.readonly.rel.required.rev.reversed.role.rows.rowspan.spellcheck.scope.selected.shape.size.sizes.slot.span.srclang.start.src.srcset.step.style.summary.tabindex.title.translate.type.usemap.valign.value.width.wrap.xmlns`.split(`.`)),fm=Tp(`accent-height.accumulate.additive.alignment-baseline.amplitude.ascent.attributename.attributetype.azimuth.basefrequency.baseline-shift.begin.bias.by.class.clip.clippathunits.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-profile.color-rendering.cx.cy.d.dx.dy.diffuseconstant.direction.display.divisor.dominant-baseline.dur.edgemode.elevation.end.exponent.fill.fill-opacity.fill-rule.filter.filterunits.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.fx.fy.g1.g2.glyph-name.glyphref.gradientunits.gradienttransform.height.href.id.image-rendering.in.in2.intercept.k.k1.k2.k3.k4.kerning.keypoints.keysplines.keytimes.lang.lengthadjust.letter-spacing.kernelmatrix.kernelunitlength.lighting-color.local.marker-end.marker-mid.marker-start.markerheight.markerunits.markerwidth.maskcontentunits.maskunits.max.mask.mask-type.media.method.mode.min.name.numoctaves.offset.operator.opacity.order.orient.orientation.origin.overflow.paint-order.path.pathlength.patterncontentunits.patterntransform.patternunits.pointer-events.points.preservealpha.preserveaspectratio.primitiveunits.r.rx.ry.radius.refx.refy.repeatcount.repeatdur.restart.result.rotate.scale.seed.shape-rendering.slope.specularconstant.specularexponent.spreadmethod.startoffset.stddeviation.stitchtiles.stop-color.stop-opacity.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke.stroke-width.style.surfacescale.systemlanguage.tabindex.tablevalues.targetx.targety.transform.transform-origin.text-anchor.text-decoration.text-orientation.text-rendering.textlength.type.u1.u2.unicode.values.vector-effect.viewbox.visibility.version.vert-adv-y.vert-origin-x.vert-origin-y.width.word-spacing.wrap.writing-mode.xchannelselector.ychannelselector.x.x1.x2.xmlns.y.y1.y2.z.zoomandpan`.split(`.`)),pm=Tp(`accent.accentunder.align.bevelled.close.columnalign.columnlines.columnspacing.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lquote.lspace.mathbackground.mathcolor.mathsize.mathvariant.maxsize.minsize.movablelimits.notation.numalign.open.rowalign.rowlines.rowspacing.rowspan.rspace.rquote.scriptlevel.scriptminsize.scriptsizemultiplier.selection.separator.separators.stretchy.subscriptshift.supscriptshift.symmetric.voffset.width.xmlns`.split(`.`)),mm=Tp([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),hm=Ep(/{{[\w\W]*|^[\w\W]*}}/g),gm=Ep(/<%[\w\W]*|^[\w\W]*%>/g),_m=Ep(/\${[\w\W]*/g),vm=Ep(/^data-[\-\w.\u00B7-\uFFFF]+$/),ym=Ep(/^aria-[\-\w]+$/),bm=Ep(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),xm=Ep(/^(?:\w+script|data):/i),Sm=Ep(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Cm=Ep(/^html$/i),wm=Ep(/^[a-z][.\w]*(-[.\w]+)+$/i),Tm=Ep(/<[/\w!]/g),Em=Ep(/<[/\w]/g),Dm=Ep(/<\/no(script|embed|frames)/i),Om=Ep(/\/>/i),km={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Am=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`],jm=Tp(K({},Am)),Mm=function(){let e={};return jp(Am,t=>{e[t]=Ep(RegExp(`</`+t+`(?=[\\t\\n\\f\\r />])`,`i`))}),Tp(e)}(),Nm=function(){return typeof window>`u`?null:window},Pm=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},Fm=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},Im=function(e,t,n,r){return qp(e,t)&&Ip(e[t])?K(r.base?em(r.base):{},e[t],r.transform):n},Lm=function(e,t,n){let r=qp(e,t)?e[t]:void 0;return r&&typeof r==`object`?em(r):n()};function Rm(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Nm(),t=e=>Rm(e);if(t.version=`3.4.16`,t.removed=[],!e||!e.document||e.document.nodeType!==km.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,o=e.Node,s=e.Element,c=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let l=e.DOMParser,u=e.trustedTypes,d=s.prototype,f=nm(d,`cloneNode`),p=nm(d,`remove`),m=nm(d,`removeAttributeNode`),h=nm(d,`nextSibling`),g=nm(d,`childNodes`),_=nm(d,`parentNode`),v=nm(d,`shadowRoot`),y=nm(d,`attributes`),b=o&&o.prototype?nm(o.prototype,`nodeType`):null,ee=o&&o.prototype?nm(o.prototype,`nodeName`):null,te=o&&o.prototype?nm(o.prototype,`ownerDocument`):null,x=function(e){return b?b(e):e.nodeType},ne=function(e){return ee?ee(e):e.nodeName};if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let re,ie=``,ae,oe=!1,se=0,ce=function(){if(se>0)throw Xp(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},le=function(e){ce(),se++;try{return re.createHTML(e)}finally{se--}},ue=function(e){ce(),se++;try{return re.createScriptURL(e)}finally{se--}},de=function(){return oe||=(ae=Pm(u,i),!0),ae},fe=n,S=fe.implementation,pe=fe.createNodeIterator,me=fe.createDocumentFragment,he=fe.getElementsByTagName,ge=r.importNode,_e=Fm();t.isSupported=typeof bp==`function`&&typeof _==`function`&&S&&S.createHTMLDocument!==void 0;let ve=hm,ye=gm,be=_m,xe=vm,Se=ym,Ce=xm,C=Sm,we=wm,Te=bm,Ee=null,De=K({},[...im,...am,...om,...cm,...um]),w=null,Oe=K({},[...dm,...fm,...pm,...mm]),ke=Object.seal(Dp(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ae=null,je=null,Me=Object.seal(Dp(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),T=!0,Ne=!0,Pe=!1,Fe=!0,Ie=!1,Le=!0,E=!1,Re=!1,ze=null,Be=null,Ve=!1,He=!1,Ue=!1,We=!1,Ge=!0,Ke=!1,qe=`user-content-`,Je=!0,Ye=!1,Xe={},Ze=null,Qe=K({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),$e=null,et=K({},[`audio`,`video`,`img`,`source`,`image`,`track`]),tt=null,nt=K({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),rt=`http://www.w3.org/1998/Math/MathML`,it=`http://www.w3.org/2000/svg`,at=`http://www.w3.org/1999/xhtml`,ot=at,st=!1,ct=null,lt=K({},[rt,it,at],Rp),ut=Tp([`mi`,`mo`,`mn`,`ms`,`mtext`]),dt=K({},ut),ft=Tp([`annotation-xml`]),pt=K({},ft),mt=K({},[`title`,`style`,`font`,`a`,`script`]),ht=null,gt=[`application/xhtml+xml`,`text/html`],_t=null,vt=null,yt=n.createElement(`form`),bt=function(e){return e instanceof RegExp||e instanceof Function},xt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(vt&&vt===e)return;(!e||typeof e!=`object`)&&(e={}),e=em(e),ht=gt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,_t=ht===`application/xhtml+xml`?Rp:Lp,Ee=Im(e,`ALLOWED_TAGS`,De,{transform:_t}),w=Im(e,`ALLOWED_ATTR`,Oe,{transform:_t}),ct=Im(e,`ALLOWED_NAMESPACES`,lt,{transform:Rp}),tt=Im(e,`ADD_URI_SAFE_ATTR`,nt,{transform:_t,base:nt}),$e=Im(e,`ADD_DATA_URI_TAGS`,et,{transform:_t,base:et}),Ze=Im(e,`FORBID_CONTENTS`,Qe,{transform:_t}),Ae=Im(e,`FORBID_TAGS`,em({}),{transform:_t}),je=Im(e,`FORBID_ATTR`,em({}),{transform:_t}),Xe=qp(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?em(e.USE_PROFILES):e.USE_PROFILES:!1,T=e.ALLOW_ARIA_ATTR!==!1,Ne=e.ALLOW_DATA_ATTR!==!1,Pe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Fe=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ie=e.SAFE_FOR_TEMPLATES||!1,Le=e.SAFE_FOR_XML!==!1,E=e.WHOLE_DOCUMENT||!1,He=e.RETURN_DOM||!1,Ue=e.RETURN_DOM_FRAGMENT||!1,We=e.RETURN_TRUSTED_TYPE||!1,Ve=e.FORCE_BODY||!1,Ge=e.SANITIZE_DOM!==!1,Ke=e.SANITIZE_NAMED_PROPS||!1,Je=e.KEEP_CONTENT!==!1,Ye=e.IN_PLACE||!1,Te=rm(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:bm,ot=typeof e.NAMESPACE==`string`?e.NAMESPACE:at,dt=Lm(e,`MATHML_TEXT_INTEGRATION_POINTS`,()=>K({},ut)),pt=Lm(e,`HTML_INTEGRATION_POINTS`,()=>K({},ft));let t=Lm(e,`CUSTOM_ELEMENT_HANDLING`,()=>Dp(null));if(ke=Dp(null),qp(t,`tagNameCheck`)&&bt(t.tagNameCheck)&&(ke.tagNameCheck=t.tagNameCheck),qp(t,`attributeNameCheck`)&&bt(t.attributeNameCheck)&&(ke.attributeNameCheck=t.attributeNameCheck),qp(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(ke.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),Ep(ke),Ie&&(Ne=!1),Ue&&(He=!0),Xe&&(Ee=K({},um),w=Dp(null),Xe.html===!0&&(K(Ee,im),K(w,dm)),Xe.svg===!0&&(K(Ee,am),K(w,fm),K(w,mm)),Xe.svgFilters===!0&&(K(Ee,om),K(w,fm),K(w,mm)),Xe.mathMl===!0&&(K(Ee,cm),K(w,pm),K(w,mm))),Me.tagCheck=null,Me.attributeCheck=null,qp(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?Me.tagCheck=e.ADD_TAGS:Ip(e.ADD_TAGS)&&(Ee===De&&(Ee=em(Ee)),K(Ee,e.ADD_TAGS,_t))),qp(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?Me.attributeCheck=e.ADD_ATTR:Ip(e.ADD_ATTR)&&(w===Oe&&(w=em(w)),K(w,e.ADD_ATTR,_t))),qp(e,`ADD_FORBID_CONTENTS`)&&Ip(e.ADD_FORBID_CONTENTS)&&(Ze===Qe&&(Ze=em(Ze)),K(Ze,e.ADD_FORBID_CONTENTS,_t)),Je&&(Ee[`#text`]=!0),E&&K(Ee,[`html`,`head`,`body`]),Ee.table&&(K(Ee,[`tbody`]),delete Ae.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw Xp(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw Xp(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=re;re=e.TRUSTED_TYPES_POLICY;try{ie=le(``)}catch(e){throw re=t,e}}else e.TRUSTED_TYPES_POLICY===null?(re=void 0,ie=``):(re===void 0&&(re=de()),re&&typeof ie==`string`&&(ie=le(``)));Tp&&Tp(e),vt=e},St=K({},[...am,...om,...sm]),Ct=K({},[...cm,...lm]),wt=function(e,t,n){return t.namespaceURI===at?e===`svg`:t.namespaceURI===rt?e===`svg`&&(n===`annotation-xml`||dt[n]):!!St[e]},Tt=function(e,t,n){return t.namespaceURI===at?e===`math`:t.namespaceURI===it?e===`math`&&pt[n]:!!Ct[e]},Et=function(e,t,n){return t.namespaceURI===it&&!pt[n]||t.namespaceURI===rt&&!dt[n]?!1:!Ct[e]&&(mt[e]||!St[e])},Dt=function(e){let t=_(e);(!t||!t.tagName)&&(t={namespaceURI:ot,tagName:`template`});let n=Lp(e.tagName),r=Lp(t.tagName);return ct[e.namespaceURI]?e.namespaceURI===it?wt(n,t,r):e.namespaceURI===rt?Tt(n,t,r):e.namespaceURI===at?Et(n,t,r):!!(ht===`application/xhtml+xml`&&ct[e.namespaceURI]):!1},Ot=function(e){Pp(t.removed,{element:e});try{_(e).removeChild(e)}catch{if(p(e),!_(e))throw Xp(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},kt=function(e,t,n){try{m(e,t)}catch{try{e.removeAttribute(n)}catch{}}},At=function(e){Nt(e);let t=g(e);if(t){let e=[];jp(t,t=>{Pp(e,t)}),jp(e,e=>{try{p(e)}catch{}})}let n=y(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;typeof i==`string`&&kt(e,r,i)}},jt=function(e,n,r){if(!r)try{r=n.getAttributeNode(e)}catch{r=null}Pp(t.removed,{attribute:r||null,from:n});try{r?m(n,r):n.removeAttribute(e)}catch{try{n.removeAttribute(e)}catch{}}if(e===`is`){if(He||Ue)try{Ot(n)}catch{}else try{n.setAttribute(e,``)}catch{}}},Mt=function(e){let t=y(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;typeof i!=`string`||w[_t(i)]||kt(e,r,i)}},Nt=function(e){let t=[e];for(;t.length>0;){let e=t.pop();x(e)===km.element&&Mt(e);let n=g(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},Pt=function(e,t){return Le?e===`patchsrc`||e===`for`&&t!==`label`&&t!==`output`:!1},Ft=function(e){if(!Le)return;let t=[e];for(;t.length>0;){let e=t.pop(),n=x(e);if(n===km.processingInstruction||n===km.comment&&Yp(Em,e.data)){try{p(e)}catch{}continue}if(n===km.element){let t=e,n=_t(ne(e));try{t.hasAttribute&&t.hasAttribute(`patchsrc`)&&t.removeAttribute(`patchsrc`),t.hasAttribute&&t.hasAttribute(`for`)&&Pt(`for`,n)&&t.removeAttribute(`for`)}catch{}}let r=g(e);if(r)for(let e=r.length-1;e>=0;--e)t.push(r[e])}},It=function(e){let t=null,r=null;if(Ve)e=`<remove></remove>`+e;else{let t=zp(e,/^[\r\n\t ]+/);r=t&&t[0]}ht===`application/xhtml+xml`&&ot===at&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=re?le(e):e;if(ot===at)try{t=new l().parseFromString(i,ht)}catch{}if(!t||!t.documentElement){t=S.createDocument(ot,`template`,null);try{t.documentElement.innerHTML=st?ie:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),ot===at?he.call(t,E?`html`:`body`)[0]:E?t.documentElement:a},Lt=function(e){let t=te?te(e):e.ownerDocument;return pe.call(t||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Rt=function(e){return e=Bp(e,ve,` `),e=Bp(e,ye,` `),e=Bp(e,be,` `),e},zt=function(e){e.normalize();let t=te?te(e):e.ownerDocument,n=pe.call(t||e,e,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null),r=n.nextNode();for(;r;)r.data=Rt(r.data),r=n.nextNode();let i=e.querySelectorAll?.call(e,`template`);i&&jp(i,e=>{Vt(e.content)&&zt(e.content)})},Bt=function(e){let t=ee?ee(e):null;return typeof t!=`string`||_t(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==y(e)||typeof e.removeAttribute!=`function`||typeof e.removeAttributeNode!=`function`||typeof e.getAttributeNode!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==b(e)||e.childNodes!==g(e)},Vt=function(e){if(!b||typeof e!=`object`||!e)return!1;try{return b(e)===km.documentFragment}catch{return!1}},Ht=function(e){if(!b||typeof e!=`object`||!e)return!1;try{return typeof b(e)==`number`}catch{return!1}};function Ut(e,n,r){e.length!==0&&jp(e,e=>{e.call(t,n,r,vt)})}let Wt=function(e,t){return!!(Le&&e.hasChildNodes()&&!Ht(e.firstElementChild)&&Yp(Tm,e.textContent)&&Yp(Tm,e.innerHTML)||Le&&e.namespaceURI===at&&jm[t]&&(Ht(e.firstElementChild)||typeof e.textContent==`string`&&Yp(Mm[t],e.textContent))||e.nodeType===km.processingInstruction||Le&&e.nodeType===km.comment&&Yp(Em,e.data))},Gt=function(e,t){return e instanceof RegExp?Yp(e,t):e instanceof Function&&!!e(t,...[...arguments].slice(2))},Kt=function(e,t,n){if(!Ae[t]&&Qt(t)&&Gt(ke.tagNameCheck,t))return!1;if(Je&&!Ze[t]){let t=_(e),r=g(e);if(r&&t){let i=r.length;for(let a=i-1;a>=0;--a){let i=e===n?f(r[a],!0):r[a];t.insertBefore(i,h(e))}}}return Ot(e),!0},qt=function(e,t,n,r){return e.length===0?t:t===n||t===r?em(t):t},Jt=function(e,t){return e===t||_(e)!==null?!1:(Ye&&Nt(e),!0)},Yt=function(e,n){if(Ut(_e.beforeSanitizeElements,e,null),Jt(e,n))return!0;if(Bt(e))return Ot(e),!0;let r=_t(ne(e));if(Ee=qt(_e.uponSanitizeElement,Ee,De,ze),Ut(_e.uponSanitizeElement,e,{tagName:r,allowedTags:Ee}),Jt(e,n))return!0;if(Wt(e,r))return Ot(e),!0;if(Ae[r]||!(Me.tagCheck instanceof Function&&Me.tagCheck(r))&&!Ee[r]){let t=Kt(e,r,n);return t===!1&&(Ut(_e.afterSanitizeElements,e,null),Jt(e,n))?!0:t}if(x(e)===km.element&&!Dt(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&Yp(Dm,e.innerHTML))return Ot(e),!0;if(Ie&&e.nodeType===km.text){let n=Rt(e.textContent);e.textContent!==n&&(Pp(t.removed,{element:e.cloneNode()}),e.textContent=n)}return Ut(_e.afterSanitizeElements,e,null),Jt(e,n)},Xt=function(e,t,r){if(je[t]||Pt(t,e)||Ge&&(t===`id`||t===`name`)&&(r in n||r in yt))return!1;let i=w[t]||Me.attributeCheck instanceof Function&&Me.attributeCheck(t,e);return Ne&&Yp(xe,t)||T&&Yp(Se,t)?!0:i?tt[t]||Yp(Te,Bp(r,C,``))||(t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&Vp(r,`data:`)===0&&$e[e]||Pe&&!Yp(Ce,Bp(r,C,``))?!0:!r:Qt(e)&&Gt(ke.tagNameCheck,e)&&Gt(ke.attributeNameCheck,t,e)||t===`is`&&ke.allowCustomizedBuiltInElements&&Gt(ke.tagNameCheck,r)},Zt=K({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),Qt=function(e){return!Zt[Lp(e)]&&Yp(we,e)},$t=function(e,t,n,r){if(re&&typeof u==`object`&&typeof u.getAttributeType==`function`&&!n)switch(u.getAttributeType(e,t)){case`TrustedHTML`:return le(r);case`TrustedScriptURL`:return ue(r)}return r},D=function(e,t,n,r){try{return n?e.setAttributeNS(n,t,r):e.setAttribute(t,r),!Bt(e)||(Ot(e),!1)}catch{return jt(t,e),!1}},en=function(e,n){if(Ut(_e.beforeSanitizeAttributes,e,null),Jt(e,n))return;let r=e.attributes;if(!r||Bt(e))return;w=qt(_e.uponSanitizeAttribute,w,Oe,Be);let i={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:w,forceKeepAttr:void 0},a=r.length,o=_t(e.nodeName);for(;a--;){let n=r[a],s=n.name,c=n.namespaceURI,l=n.value,u=_t(s),d=l,f=s===`value`?d:Hp(d),p=!1;if(i.attrName=u,i.attrValue=f,i.keepAttr=!0,i.forceKeepAttr=void 0,Ut(_e.uponSanitizeAttribute,e,i),f=i.attrValue,Ke&&(u===`id`||u===`name`)&&Vp(f,qe)!==0&&(jt(s,e,n),f=qe+f,p=!0),Le&&Yp(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,f)){jt(s,e,n);continue}if(u===`attributename`&&zp(f,`href`)){jt(s,e,n);continue}if(!i.forceKeepAttr){if(!i.keepAttr){jt(s,e,n);continue}if(!Fe&&Yp(Om,f)){jt(s,e,n);continue}if(Ie&&(f=Rt(f)),!Xt(o,u,f)){jt(s,e,n);continue}f=$t(o,u,c,f),f!==d&&D(e,s,c,f)&&p&&Np(t.removed)}}Ut(_e.afterSanitizeAttributes,e,null),Jt(e,n)},tn=function(e){let t=null,n=Lt(e);for(Ut(_e.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if(Ut(_e.uponSanitizeShadowNode,t,null),Yt(t,e),en(t,e),Vt(t.content)&&tn(t.content),x(t)===km.element){let e=v(t);Vt(e)&&(nn(e),tn(e))}Ut(_e.afterSanitizeShadowDOM,e,null)},nn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){tn(e.shadow);continue}let n=e.node,r=x(n)===km.element,i=g(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=ee?ee(n):null;if(typeof e==`string`&&_t(e)===`template`){let e=n.content;Vt(e)&&t.push({node:e,shadow:null})}}if(r){let e=v(n);Vt(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(st=!e,st&&(e=`<!-->`),typeof e!=`string`&&!Ht(e)&&(e=tm(e),typeof e!=`string`))throw Xp(`dirty is not a string, aborting`);if(!t.isSupported)return e;Re?(Ee=ze,w=Be):xt(n),(_e.uponSanitizeElement.length>0||_e.uponSanitizeAttribute.length>0)&&(Ee=em(Ee)),_e.uponSanitizeAttribute.length>0&&(w=em(w)),t.removed=[];let c=Ye&&typeof e!=`string`&&Ht(e);if(c){Ft(e);let t=ne(e);if(typeof t==`string`){let n=_t(t);if(!Ee[n]||Ae[n])throw At(e),Xp(`root node is forbidden and cannot be sanitized in-place`)}if(Bt(e))throw At(e),Xp(`root node is clobbered and cannot be sanitized in-place`);try{nn(e)}catch(t){throw At(e),t}}else if(Ht(e))i=It(`<!---->`),a=i.ownerDocument.importNode(e,!0),a.nodeType===km.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),nn(i);else{if(!He&&!Ie&&!E&&e.indexOf(`<`)===-1)return re&&We?le(e):e;if(i=It(e),!i)return He?null:We?ie:``}i&&Ve&&Ot(i.firstChild);let l=c?e:i;try{let e=Lt(l);for(;o=e.nextNode();)Yt(o,l),en(o,l),Vt(o.content)&&tn(o.content)}catch(n){throw c&&(At(e),jp(t.removed,e=>{e.element&&Nt(e.element)})),n}if(c){let n=!1;if(jp(t.removed,t=>{t.element&&(t.element===e&&(n=!0),Nt(t.element))}),n)throw Xp(`a node selected for removal could not be safely returned; refusing to sanitize in place`);return Ie&&zt(e),e}if(He){if(Ie&&zt(i),Ue)for(s=me.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(w.shadowroot||w.shadowrootmode)&&(s=ge.call(r,s,!0)),s}let u=E?i.outerHTML:i.innerHTML;return E&&Ee[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&Yp(Cm,i.ownerDocument.doctype.name)&&(u=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
75
75
  `+u),Ie&&(u=Rt(u)),re&&We?le(u):u},t.setConfig=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};xt(e),Re=!0,ze=Ee,Be=w},t.clearConfig=function(){vt=null,Re=!1,ze=null,Be=null,re=ae,ie=``},t.isValidAttribute=function(e,t,n){vt||xt({});let r=_t(e),i=_t(t);return Xt(r,i,n)},t.addHook=function(e,t){typeof t==`function`&&qp(_e,e)&&Pp(_e[e],t)},t.removeHook=function(e,t){if(qp(_e,e)){if(t!==void 0){let n=Mp(_e[e],t);return n===-1?void 0:Fp(_e[e],n,1)[0]}return Np(_e[e])}},t.removeHooks=function(e){qp(_e,e)&&(_e[e]=[])},t.removeAllHooks=function(){_e=Fm()},t}var zm=Rm();function Bm(e,t){let n;try{n=new URL(e.trim())}catch{return null}return n.protocol!==`https:`&&n.protocol!==`http:`||n.origin===t?null:n.href}var Vm=`p.br.hr.strong.b.em.i.del.s.code.pre.blockquote.ul.ol.li.a.h1.h2.h3.h4.h5.h6.small.sub.sup.table.thead.tbody.tr.th.td.img.input`.split(`.`),Hm=[`form`,`style`,`script`,`button`,`select`,`textarea`,`iframe`,`object`,`embed`,`svg`,`math`],Um={a:[`href`,`title`],img:[`src`,`alt`,`title`],th:[`colspan`,`rowspan`,`align`],td:[`colspan`,`rowspan`,`align`],ol:[`start`],code:[`class`],input:[`type`,`checked`,`disabled`]},Wm=[...new Set(Object.values(Um).flat())],Gm=/^language-[\w-]+$/,Km=/^\d{1,4}$/,qm=/^(left|right|center)$/i;function Jm(e,t,n){if(!Object.hasOwn(Um,e)||!Um[e].includes(t))return!1;switch(t){case`class`:return Gm.test(n);case`type`:return n.toLowerCase()===`checkbox`;case`colspan`:case`rowspan`:case`start`:return Km.test(n);case`align`:return qm.test(n);default:return!0}}var Ym=/^data:image\/(png|jpeg|gif|webp);base64,[A-Za-z0-9+/]+={0,2}$/i,Xm=/^\/api(\/|$)/i;function Zm(e,t){if(Ym.test(e))return!0;if(!e.trim())return!1;let n;try{n=new URL(e,t)}catch{return!1}return(n.protocol===`https:`||n.protocol===`http:`)&&n.origin===t&&!Xm.test(n.pathname)}zm.isSupported&&zm.addHook(`afterSanitizeAttributes`,e=>{let t=e.nodeName.toLowerCase();for(let{name:n,value:r}of Array.from(e.attributes))Jm(t,n,r)||e.removeAttribute(n);if(t===`img`&&!Zm(e.getAttribute(`src`)??``,location.origin)){e.replaceWith(document.createTextNode(e.getAttribute(`alt`)??``));return}if(t===`input`){e.getAttribute(`type`)===null?e.remove():e.setAttribute(`disabled`,``);return}if(t!==`a`)return;let n=e.getAttribute(`href`),r=n===null?null:Bm(n,location.origin);r?(e.setAttribute(`href`,r),e.setAttribute(`target`,`_blank`),e.setAttribute(`rel`,`noopener noreferrer`)):(e.removeAttribute(`href`),e.removeAttribute(`target`))});var Qm={ALLOWED_TAGS:Vm,ALLOWED_ATTR:Wm,FORBID_TAGS:Hm,ALLOW_DATA_ATTR:!1,ALLOW_ARIA_ATTR:!1},$m=new Map;function eh(e){let t=$m.get(e);return t===void 0&&(t=zm.sanitize(G.parse(e,{async:!1}),Qm),$m.size>400&&$m.delete($m.keys().next().value),$m.set(e,t)),t}var th=`demo.job-runs`,nh=e=>e.status!==`running`&&e.status!==`waiting`,rh=B(()=>nu.value?.info?.jobs??[]),ih=e=>rh.value.find(t=>t.id===e),ah=B(()=>{let e=yu.value.docs[th];return Object.values(e?.items??{}).sort((e,t)=>t.id-e.id)}),oh=e=>ah.value.find(t=>t.id===e),sh=e=>ah.value.find(t=>t.toolCallId===e),ch=O(Date.now());setInterval(()=>ch.value=Date.now(),1e3);var lh=e=>e<1e3?`${Math.max(0,Math.round(e))}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.round(e%6e4/1e3)}s`,uh=O();async function dh(e,t){if(!uh.value){uh.value=e;try{return await ju(t)}finally{uh.value=void 0}}}function fh(e){Bu.value&&Uu(),setTimeout(()=>document.querySelector(`[data-job-run="${e}"]`)?.scrollIntoView({behavior:`smooth`,block:`center`}))}async function ph(e){let t=await dh(`start:${e.id}`,()=>lu.value.demo(`jobs`,{job:e.id}));t&&(Au(`${e.title} started. It runs in the chat.`),fh(t.taskId))}var mh=(e,t)=>dh(`decide:${e.id}`,()=>lu.value.demo(`jobs/${e.id}/approval`,{approved:t})),hh=e=>dh(`stop:${e.id}`,()=>uu.value.abortTask(e.id));function gh(e){H.value&&du({...H.value,agentId:e})}var _h=[`data-job-run`,`aria-label`],vh={class:`job-run-head`},yh={class:`job-run-icon`},bh={class:`job-run-titles`},xh={class:`job-run-eyebrow`},Sh={class:`job-run-repeat`},Ch={key:0,class:`job-run-about`},wh={class:`job-run-meta`},Th={key:0,class:`job-run-resumed`},Eh={class:`job-stepper`,"aria-label":`Phases`},Dh=[`aria-current`],Oh={class:`job-chip`},kh={class:`job-step-dot`},Ah={class:`job-step-label`},jh={key:0,class:`job-step-progress`},Mh={class:`job-phases`},Nh=[`open`],Ph={class:`job-phase-n`},Fh={class:`job-phase-summary`},Ih={class:`job-phase-time`},Lh={key:0,class:`job-phase-about`},Rh={key:1,class:`job-steps`},zh=[`open`],Bh={key:1,class:`job-step-line`},Vh=[`onClick`],Hh={key:2,class:`job-phase-empty`},Uh={key:1,class:`job-approval`,role:`group`,"aria-label":`Approval`},Wh={class:`job-approval-buttons`},Gh=[`disabled`],Kh=[`disabled`],qh={key:2,class:`message-error`},Jh={class:`job-run-foot`},Yh=[`disabled`],Xh=A({__name:`JobCard`,props:{run:{}},setup(e){let t=e,n=B(()=>ih(t.run.job)),r=B(()=>nh(t.run)),i=B(()=>lh((t.run.endedAt??ch.value)-t.run.startedAt)),a={running:`Running`,waiting:`Waiting for you`,completed:`Completed`,failed:`Failed`,aborted:`Stopped`,declined:`Declined`},o={command:zc,tool:Gc,agent:Ks,state:qs,approval:Lc,checkpoint:oc,note:_c},s=e=>e.kind===`tool`?`${e.label}: a subagent tool call, its own durable task`:e.label,c=e=>{let t=e.step,n=[`command`,`tool`,`state`].includes(t.kind)?so(`code`,{title:s(t)},t.label):so(`span`,{class:`job-step-text`},t.label),r=t.status===`running`?so(vc,{size:15,class:`spin`}):t.status===`done`?so(Ys,{size:15}):t.status===`waiting`?so(uc,{size:15}):so(Kc,{size:15});return[so(o[t.kind],{size:16,class:`job-step-kind`}),n,t.kind===`tool`&&t.detail?so(`span`,{class:`job-step-args`,title:t.detail},t.detail):null,so(`span`,{class:`job-step-state`},[r,t.ms!==void 0&&t.kind!==`note`?so(`span`,lh(t.ms)):null])]};c.props=[`step`];let l=e=>n.value?.phases.find(t=>t.id===e),u=e=>e.startedAt?lh((e.endedAt??(e.status===`running`||e.status===`waiting`?ch.value:e.startedAt))-e.startedAt):``,d=e=>e.status!==`pending`&&e.status!==`skipped`,f=B(()=>Object.entries(t.run.input)),p=B(()=>t.run.phases.find(e=>e.status===`waiting`));return(t,o)=>(N(),P(`article`,{class:C([`job-run`,`is-${e.run.status}`]),"data-job-run":e.run.id,"aria-label":`${e.run.title} run ${e.run.run}: ${a[e.run.status]}`},[I(`header`,vh,[I(`span`,yh,[L(k(Wc),{size:22})]),I(`div`,bh,[I(`div`,xh,[o[3]||=I(`span`,null,`DURABLE JOB`,-1),I(`span`,Sh,[L(k(Pc),{size:15}),R(`Repeatable workflow, run #`+T(e.run.run),1)])]),I(`h3`,null,T(e.run.title),1)]),I(`span`,{class:C([`job-run-status`,e.run.status])},[o[4]||=I(`i`,null,null,-1),R(T(a[e.run.status]),1)],2)]),n.value?(N(),P(`p`,Ch,T(n.value.summary),1)):z(``,!0),I(`div`,wh,[I(`span`,null,`task #`+T(e.run.id),1),I(`span`,null,T(e.run.startedBy===`agent`?`started by the agent`:`started by you`),1),I(`span`,null,T(i.value),1),(N(!0),P(M,null,j(f.value,([e,t])=>(N(),P(`span`,{key:e,class:`job-run-input`},T(e)+`=`+T(t),1))),128)),e.run.resumed?(N(),P(`span`,Th,`resumed `+T(e.run.resumed)+`× after restart`,1)):z(``,!0)]),I(`ol`,Eh,[(N(!0),P(M,null,j(e.run.phases,(t,n)=>(N(),P(`li`,{key:t.id,class:C(`ph-${t.status}`),"aria-current":e.run.phase===t.id&&!r.value?`step`:void 0},[I(`span`,Oh,[I(`span`,kh,[t.status===`done`?(N(),F(k(Ys),{key:0,size:15})):t.status===`running`?(N(),F(k(vc),{key:1,size:15,class:`spin`})):t.status===`waiting`?(N(),F(k(uc),{key:2,size:15})):[`failed`,`aborted`].includes(t.status)?(N(),F(k(Kc),{key:3,size:15})):(N(),P(M,{key:4},[R(T(n+1),1)],64))]),I(`span`,Ah,T(t.label),1),t.progress?(N(),P(`span`,jh,T(t.progress.done)+`/`+T(t.progress.total),1)):z(``,!0)])],10,Dh))),128))]),I(`div`,Mh,[(N(!0),P(M,null,j(e.run.phases,(e,t)=>(N(),P(`details`,{key:e.id,class:C([`job-phase`,`ph-${e.status}`]),open:d(e)},[I(`summary`,null,[I(`span`,Ph,T(t+1),1),I(`strong`,null,T(e.label),1),I(`span`,Fh,T(e.summary??(e.status===`pending`?l(e.id)?.summary:e.status===`skipped`?`Skipped`:``)),1),I(`span`,Ih,T(u(e)),1)]),e.status===`done`?z(``,!0):(N(),P(`p`,Lh,T(l(e.id)?.summary),1)),e.steps.length?(N(),P(`ul`,Rh,[(N(!0),P(M,null,j(e.steps,e=>(N(),P(`li`,{key:e.id,class:C([`k-${e.kind}`,`st-${e.status}`])},[e.detail&&e.kind!==`tool`?(N(),P(`details`,{key:0,open:e.status===`error`},[I(`summary`,null,[L(c,{step:e},null,8,[`step`])]),I(`pre`,null,T(e.detail),1)],8,zh)):(N(),P(`div`,Bh,[L(c,{step:e},null,8,[`step`])])),e.kind===`agent`&&e.conversationId?(N(),P(`button`,{key:2,class:`text-button job-step-link`,onClick:t=>k(gh)(e.conversationId)},` Open subagent #`+T(e.conversationId),9,Vh)):z(``,!0)],2))),128))])):e.status===`pending`?(N(),P(`p`,Hh,`Not started yet.`)):z(``,!0)],10,Nh))),128))]),e.run.approval===`pending`?(N(),P(`div`,Uh,[I(`div`,null,[L(k(Lc),{size:20}),o[5]||=I(`strong`,null,`Approve to continue`,-1)]),I(`p`,null,T(p.value?l(p.value.id)?.summary:`This run waits for you`)+`. It is paused on a saved checkpoint: close the browser or restart the device and the decision will still be waiting. `,1),I(`div`,Wh,[I(`button`,{class:`primary small`,disabled:!!k(uh),onClick:o[0]||=t=>k(mh)(e.run,!0)},[L(k(Ys),{size:18}),o[6]||=R(`Approve & continue `,-1)],8,Gh),I(`button`,{class:`secondary`,disabled:!!k(uh),onClick:o[1]||=t=>k(mh)(e.run,!1)},`Decline`,8,Kh)])])):z(``,!0),e.run.error&&e.run.status!==`aborted`?(N(),P(`p`,qh,T(e.run.error),1)):z(``,!0),I(`footer`,Jh,[I(`span`,null,T(e.run.background?`Runs in the background: the conversation owns it, so Interrupt leaves it running.`:`Owned by this tool call: Interrupt stops it.`)+` Each phase saves a checkpoint, so a restart resumes the current phase.`,1),r.value?z(``,!0):(N(),P(`button`,{key:0,class:`secondary danger`,disabled:!!k(uh),onClick:o[2]||=t=>k(hh)(e.run)},[L(k(wc),{size:16}),o[7]||=R(`Stop `,-1)],8,Yh))])],10,_h))}}),Zh={class:`message-label`},Qh={class:`user-message`},$h={class:`message-label`},eg={key:0,class:`streaming`},tg={key:1},ng=[`aria-label`],rg=[`innerHTML`],ig={key:1,class:`thinking`},ag=[`data-call-id`],og={class:`tool-status`},sg={class:`tool-section-label`},cg=[`aria-label`,`onClick`],lg={key:0,class:`typing`},ug={key:1,class:`message-error`},dg=[`aria-label`],fg={key:3,class:`live-tool`},pg={key:0},mg={class:`event-line`},hg=[`aria-label`],gg={key:0,class:`raw`},_g=A({__name:`TranscriptItem`,props:{item:{}},emits:[`fork`],setup(e,{emit:t}){let n=t,r=e=>e.status===`error`?`Error`:e.status===`done`?`Done`:e.status,i=e=>e.kind===`user`?`pi-user`:e.kind===`assistant`?e.streaming?`live-generation`:`pi-assistant`:e.kind===`tool-result`?`pi-tool-result`:e.kind===`tool`?`live-tool-entry`:e.entryKind.replaceAll(`.`,`-`);return(t,a)=>(N(),P(`article`,{class:C([`entry`,i(e.item)])},[e.item.kind===`user`?(N(),P(M,{key:0},[I(`div`,Zh,[a[3]||=R(` YOU `,-1),I(`span`,null,`#`+T(e.item.id),1)]),I(`div`,Qh,T(e.item.text),1)],64)):e.item.kind===`assistant`?(N(),P(M,{key:1},[I(`div`,$h,[a[5]||=R(` AGENT `,-1),e.item.streaming?(N(),P(`span`,eg,`Working`)):(N(),P(`span`,tg,`#`+T(e.item.id),1)),e.item.streaming?z(``,!0):(N(),P(`button`,{key:2,class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,title:`Fork from this entry. App State stays shared.`,onClick:a[0]||=t=>n(`fork`,e.item.id)},[L(k(lc),{size:18}),a[4]||=R(`Fork `,-1)],8,ng))]),(N(!0),P(M,null,j(e.item.blocks,(e,t)=>(N(),P(M,{key:t},[e.type===`text`?(N(),P(`div`,{key:0,class:`markdown`,innerHTML:k(eh)(e.text)},null,8,rg)):e.type===`thinking`?(N(),P(`details`,ig,[a[6]||=I(`summary`,null,`Thinking`,-1),I(`div`,null,T(e.text),1)])):(N(),P(`details`,{key:2,class:C([`tool-call`,{failed:e.call.status===`error`}]),"data-call-id":e.call.callId},[I(`summary`,null,[e.call.status===`error`?(N(),F(k(fc),{key:0,size:18})):e.call.status===`done`?(N(),F(k(Ys),{key:1,size:18})):e.call.status===`running`?(N(),F(k(Hs),{key:2,size:18})):(N(),F(k(Gc),{key:3,size:18})),I(`strong`,null,T(e.call.name),1),I(`code`,null,T(k(Pu)(e.call.args)?.slice(0,90)),1),I(`span`,og,T(r(e.call)),1)]),a[10]||=I(`div`,{class:`tool-section-label`},`Input`,-1),I(`pre`,null,T(k(Pu)(e.call.args)),1),e.call.result===void 0?e.call.output?(N(),P(M,{key:1},[a[9]||=I(`div`,{class:`tool-section-label`},`Live output`,-1),I(`pre`,null,T(e.call.output),1)],64)):z(``,!0):(N(),P(M,{key:0},[I(`div`,sg,[a[8]||=I(`span`,null,`Result`,-1),e.call.resultEntryId===void 0?z(``,!0):(N(),P(`button`,{key:0,class:`fork-button`,"aria-label":`Fork at entry ${e.call.resultEntryId}`,title:`Fork after this result`,onClick:t=>n(`fork`,e.call.resultEntryId)},[L(k(lc),{size:18}),a[7]||=R(`Fork `,-1)],8,cg))]),I(`pre`,null,T(e.call.result),1)],64))],10,ag)),e.type===`tool`&&e.call.name===`run_durable_job`&&k(sh)(e.call.callId)?(N(),F(Xh,{key:3,run:k(sh)(e.call.callId)},null,8,[`run`])):z(``,!0)],64))),128)),e.item.streaming&&!e.item.blocks.length?(N(),P(`div`,lg,[...a[11]||=[I(`i`,null,null,-1),I(`i`,null,null,-1),I(`i`,null,null,-1)]])):z(``,!0),e.item.error?(N(),P(`div`,ug,T(e.item.error),1)):z(``,!0)],64)):e.item.kind===`tool-result`?(N(),P(`details`,{key:2,class:C([`tool-result`,{failed:e.item.isError}])},[I(`summary`,null,[e.item.isError?(N(),F(k(fc),{key:1,size:18})):(N(),F(k(Ys),{key:0,size:18})),I(`strong`,null,T(e.item.name),1),I(`span`,null,T(e.item.isError?`error`:`result`),1),I(`button`,{class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,onClick:a[1]||=As(t=>n(`fork`,e.item.id),[`prevent`])},[L(k(lc),{size:18}),a[12]||=R(`Fork `,-1)],8,dg)]),I(`pre`,null,T(e.item.text),1)],2)):e.item.kind===`tool`?(N(),P(`div`,fg,[I(`div`,null,[L(k(Hs),{size:18}),I(`strong`,null,T(e.item.call.name),1),I(`span`,null,T(e.item.call.status),1)]),e.item.call.output?(N(),P(`pre`,pg,T(e.item.call.output),1)):z(``,!0),e.item.call.name===`run_durable_job`&&k(sh)(e.item.call.callId)?(N(),F(Xh,{key:1,run:k(sh)(e.item.call.callId)},null,8,[`run`])):z(``,!0)])):e.item.entryKind===`demo.job`&&k(oh)(e.item.data.taskId)?(N(),F(Xh,{key:4,run:k(oh)(e.item.data.taskId)},null,8,[`run`])):(N(),P(M,{key:5},[I(`div`,mg,[e.item.entryKind===`demo.state-change`?(N(),F(k(qs),{key:0,size:18})):(N(),F(k(hc),{key:1,size:18})),I(`span`,null,T(e.item.text),1),I(`button`,{class:`fork-button`,"aria-label":`Fork at entry ${e.item.id}`,onClick:a[2]||=t=>n(`fork`,e.item.id)},[L(k(lc),{size:18}),a[13]||=R(`Fork `,-1)],8,hg)]),e.item.note?(N(),P(`details`,gg,[a[14]||=I(`summary`,null,`Context note`,-1),I(`pre`,null,T(e.item.note),1)])):z(``,!0)],64))],2))}}),vg=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,yg=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`],bg={enabled:!0,reserveTokens:16384,backgroundTokens:32768,keepRecentTokens:2e3},xg={auto:2e5,wait:25e4};function Sg(e){if(!(e>0))return{...bg};let t=Math.min(xg.wait,e-bg.reserveTokens),n=Math.min(xg.auto,t-bg.backgroundTokens);return{...bg,reserveTokens:e-t,backgroundTokens:t-n}}function Cg(e,t){let n=Math.max(0,e-t.reserveTokens);return{wait:n,auto:t.backgroundTokens>0?Math.max(0,n-t.backgroundTokens):void 0}}var wg=(e,t)=>{if(e===void 0)throw Error(`No ${t} selected`);return e},Tg=[{name:`compact`,args:`[instructions]`,description:`Summarize older context; stored entries stay`,run:async e=>{await wg(lu.value,`agent`).compact(e||void 0),Au(`Compaction requested. /tasks shows its outcome.`)}},{name:`reset`,args:`[handoff note]`,description:`Start a fresh context; history stays stored`,run:async e=>{await wg(lu.value,`agent`).reset(e||void 0),Au(`New context started.`)}},{name:`tasks`,description:`Open the Tasks panel`,run:()=>Hu(`tasks`)},{name:`new`,args:`[name]`,description:`New agent in this workspace`,run:async e=>{let t=wg(H.value,`workspace`),n=await wg(uu.value,`workspace`).createAgent(e?{name:e}:{});du({...t,agentId:n.id}),Au(`New agent ${n.name}.`)}},{name:`fork`,args:`[entryId] [name]`,description:`Fork at an entry (default: the last reply)`,run:async e=>{let[t,...n]=e.split(/\s+/).filter(Boolean),r=t&&/^\d+$/.test(t)?Number(t):void 0,i=(r===void 0?[t,...n]:n).filter(Boolean).join(` `),a=r??yu.value.entries.filter(e=>e.kind===`pi.assistant`).at(-1)?.id;if(a===void 0)throw Error(`Nothing to fork yet`);let o=wg(H.value,`agent`),s=await wg(lu.value,`agent`).fork({entryId:a,name:i||void 0});du({...o,agentId:s.id}),Au(`Forked at entry #${a}. App State stays shared.`)}},{name:`name`,args:`<name>`,description:`Rename this agent`,run:async e=>{if(!e)throw Error(`Usage: /name <name>`);await wg(lu.value,`agent`).rename(e),Au(`Agent renamed to ${e}.`)}},{name:`model`,description:`Choose this agent's model`,run:()=>U.dialog={kind:`models`}},{name:`thinking`,args:`<level>`,description:`Thinking level: ${yg.join(`, `)}`,run:async e=>{if(!yg.includes(e))throw Error(`Levels: ${yg.join(`, `)}`);await wg(lu.value,`agent`).configure({thinkingLevel:e}),await Ou(),Au(`Thinking ${e}. Used on the next turn.`)}},{name:`help`,description:`How this works, keys and commands`,run:()=>U.dialog={kind:`help`}}];function Eg(e){let t=e.trim().match(/^\/(\S+)\s*([\s\S]*)$/),n=t&&Tg.find(e=>e.name===t[1]);return n?{command:n,arg:t[2].trim()}:void 0}var Dg={class:`composer-region`},Og={key:0,class:`queue`},kg=[`aria-label`,`onClick`],Ag={class:`composer`},jg={key:0,class:`slash-menu`,role:`listbox`,"aria-label":`Slash commands`},Mg=[`aria-selected`,`onMousedown`],Ng={key:0,class:`slash-args`},Pg={class:`slash-desc`},Fg={class:`composer-toolbar`},Ig={class:`composer-left`},Lg={class:`queue-mode`},Rg={class:`composer-right`},zg=[`disabled`],Bg=[`disabled`],Vg=A({__name:`Composer`,setup(e){let t=O(`followUp`),n=O(!1),r=B(()=>ru.value&&yu.value.ready&&au.status.value===`live`&&Jl.value===`live`),i=O(0),a=O(!1),o=B(()=>{let e=U.composer.match(/^\/(\S*)$/);return e&&!a.value?Tg.filter(t=>t.name.startsWith(e[1].toLowerCase())):[]});Zn(()=>U.composer,()=>{i.value=0,U.composer.startsWith(`/`)||(a.value=!1)});async function s(e,t=!1){!e.args||t&&e.args.startsWith(`[`)&&U.composer===`/${e.name}`?(U.composer=`/${e.name}`,await u()):U.composer=`/${e.name} `}function c(e){if(!o.value.length){e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),u());return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){let t=o.value.length;i.value=(i.value+(e.key===`ArrowDown`?1:t-1))%t}else if(e.key===`Tab`||e.key===`Enter`&&!e.shiftKey)s(o.value[i.value],e.key===`Enter`);else if(e.key===`Escape`)a.value=!0;else return;e.preventDefault(),e.stopPropagation()}async function l(e){let t=Eg(e);return t?(n.value=!0,await ju(async()=>{await t.command.run(t.arg),U.composer=``}),n.value=!1,!0):!1}async function u(){let e=U.composer.trim(),i=lu.value;if(!e||n.value||!i||!r.value||e.startsWith(`/`)&&await l(e))return;n.value=!0;let a=H.value,o=`${a.deviceId}/${a.sessionId}/${a.agentId}`,s;try{s=JSON.parse(sessionStorage.getItem(`dpi.pending-send`)??`null`)}catch{}let c=s?.key===o&&s.content===e&&s.mode===t.value?s.requestId:vg();sessionStorage.setItem(`dpi.pending-send`,JSON.stringify({key:o,content:e,mode:t.value,requestId:c})),await ju(async()=>{await i.send(e,t.value,c),sessionStorage.removeItem(`dpi.pending-send`),U.composer=``}),n.value=!1}function d(e){ju(()=>lu.value.withdraw(e))}return(e,a)=>(N(),P(`div`,Dg,[k(yu).inbox.length?(N(),P(`div`,Og,[(N(!0),P(M,null,j(k(yu).inbox,e=>(N(),P(`div`,{key:e.id},[L(k(ec),{size:18}),I(`span`,null,T(e.mode===`steer`?`Steer`:`Queued`)+`: `+T(e.content??`Context update`),1),I(`button`,{class:`icon-button`,"aria-label":`Withdraw submission ${e.id}`,title:`Withdraw queued input`,onClick:t=>d(e.id)},[L(k(Kc),{size:18})],8,kg)]))),128))])):z(``,!0),I(`div`,Ag,[o.value.length?(N(),P(`ul`,jg,[(N(!0),P(M,null,j(o.value,(e,t)=>(N(),P(`li`,{key:e.name,role:`option`,"aria-selected":t===i.value,class:C({active:t===i.value}),onMousedown:As(t=>s(e),[`prevent`])},[I(`code`,null,`/`+T(e.name),1),e.args?(N(),P(`span`,Ng,T(e.args),1)):z(``,!0),I(`span`,Pg,T(e.description),1)],42,Mg))),128))])):z(``,!0),Wn(I(`textarea`,{"onUpdate:modelValue":a[0]||=e=>k(U).composer=e,rows:`2`,placeholder:`Give your agent something to do, or type / for commands…`,"aria-label":`Message your agent`,onKeydown:c},null,544),[[bs,k(U).composer]]),I(`div`,Fg,[I(`div`,Ig,[I(`div`,Lg,[Wn(I(`select`,{"onUpdate:modelValue":a[1]||=e=>t.value=e,"aria-label":`When busy`,title:`Follow-up waits for this run. Steer joins after a tool round.`},[...a[3]||=[I(`option`,{value:`followUp`},`Follow-up`,-1),I(`option`,{value:`steer`},`Steer`,-1),I(`option`,{value:`reject`},`Reject if busy`,-1)]],512),[[Cs,t.value]]),L(k(Xs),{size:24,"aria-hidden":`true`})])]),I(`div`,Rg,[I(`button`,{class:`interrupt`,disabled:!k(Cu)||k(Lu),title:`Stop foreground work and owned subagents (Escape). Background jobs continue.`,onClick:a[2]||=(...e)=>k(Ru)&&k(Ru)(...e)},[L(k(wc),{size:24,class:`stop-sign`,fill:`currentColor`}),a[4]||=R(`Interrupt`,-1)],8,zg),I(`button`,{class:`send`,"aria-label":`Send message`,disabled:!k(U).composer.trim()||n.value||!r.value,onClick:u},[L(k(Gs),{size:20})],8,Bg)])])]),a[5]||=I(`div`,{class:`composer-footnote`},[I(`span`,null,[I(`i`,{class:`live-dot`}),R(`Closing this window never interrupts your agent.`)])],-1)]))}}),Hg={class:`chat-panel`},Ug={class:`chat-header`},Wg={class:`lineage-picker`},Gg={class:`lineage-toolbar`},Kg=[`title`],qg={class:`crumb-main`},Jg={class:`device-chip`},Yg=[`title`],Xg={class:`crumb-main`},Zg={class:`crumb-name`},Qg=[`aria-current`,`title`,`onClick`],$g={class:`crumb-kind`},e_={class:`crumb-main`},t_={class:`crumb-name`},n_=[`disabled`],r_=[`aria-expanded`],i_={key:0,class:`lineage-source`},a_={id:`conversation-picker`,class:`conversation-picker`,role:`dialog`,"aria-label":`Choose conversation`},o_=[`aria-label`,`aria-current`,`onClick`],s_={class:`conversation-choice-content`},c_={class:`choice-lineage`},l_={class:`choice-source`},u_={key:0,class:`agent-stream-status`,role:`alert`},d_=[`disabled`],f_={key:0,class:`chat-empty`},p_={key:0},m_={key:1},h_={key:0,class:`chat-empty`},g_={class:`starter-grid`},__={key:1,class:`entry live-generation`},v_={class:`message-label`},y_={class:`streaming`},b_={key:2,class:`hint retry-note`},x_=A({__name:`AgentView`,setup(e){let t=O(),n=O(),r=O(!1),i=B(()=>yu.value.items),a=B(()=>i.value.some(e=>e.kind===`assistant`&&e.streaming)),o=B(()=>i.value.some(e=>e.kind===`tool`&&e.call.status===`running`||e.kind===`assistant`&&e.blocks.some(e=>e.type===`tool`&&e.call.status===`running`))),s=e=>e.kind===`fork`?`Forked from agent #${e.parentId} at entry #${e.forkedAt}`:e.kind===`subagent`?`Owned by agent #${e.ownerAgentId}`:`Root agent`,c=B(()=>bu.value.map(e=>({...e,lineage:sl(bu.value,e.id)})).sort((e,t)=>{for(let n=0;n<Math.min(e.lineage.length,t.lineage.length);n++)if(e.lineage[n].id!==t.lineage[n].id)return e.lineage[n].id-t.lineage[n].id;return e.lineage.length-t.lineage.length})),l=B(()=>xu.value.at(-1)),u=e=>e.kind===`root`?`agent`:e.kind;function d(){H.value&&($l.tree=!0,mu(H.value.deviceId,!0))}function f(){let e=bu.value.find(e=>e.kind===`root`)??bu.value[0];e&&p(e.id)}function p(e){r.value=!1,H.value&&du({...H.value,agentId:e})}function m(e){let t=lu.value,n=H.value;t&&n&&(U.dialog={kind:`prompt`,title:`Fork conversation`,hint:`${l.value?.name??`Agent #${n.agentId}`} / entry #${e}. Leave the name blank to use Fork #ID.`,label:`Fork name`,optional:!0,placeholder:`e.g. Alternative approach`,submit:`Create fork`,run:async r=>{let i=await t.fork({entryId:e,name:r||void 0});du({...n,agentId:i.id}),Au(`Forked at entry #${e}. App State stays shared.`)}})}function h(){let e=lu.value,t=l.value;e&&t&&(U.dialog={kind:`prompt`,title:`Rename agent`,label:`Agent name`,value:t.named?t.name:``,placeholder:t.name,submit:`Save name`,run:t=>e.rename(t)})}Zn(H,()=>{r.value=!1});let g=!0;return Zn(au.version,()=>{let e=t.value;g=!e||e.scrollHeight-e.scrollTop-e.clientHeight<120},{flush:`pre`}),Zn(au.version,()=>{g&&jn(()=>t.value?.scrollTo({top:t.value.scrollHeight,behavior:`instant`}))}),Zn(()=>xu.value.length,()=>void jn(()=>n.value&&(n.value.scrollLeft=n.value.scrollWidth))),(e,g)=>(N(),P(`section`,Hg,[I(`header`,Ug,[I(`div`,Wg,[I(`div`,Gg,[I(`nav`,{ref_key:`lineageNav`,ref:n,class:`crumbs conversation-lineage`,"aria-label":`Conversation lineage`},[I(`button`,{class:`crumb`,title:`${k(nu)?.name} · ${k(nu)?.url}`,onClick:d},[g[5]||=I(`span`,{class:`crumb-kind`},`device`,-1),I(`span`,qg,[L(cd,{device:k(nu),size:18},null,8,[`device`]),I(`span`,Jg,T(k(nu)?.name??k(nu)?.id),1)])],8,Kg),L(k(Zs),{class:`crumb-sep`,size:18,"aria-hidden":`true`}),I(`button`,{class:`crumb`,title:k(su)?.cwd,onClick:f},[g[6]||=I(`span`,{class:`crumb-kind`},`workspace`,-1),I(`span`,Xg,[L(k(sc),{size:18,"aria-hidden":`true`}),I(`span`,Zg,T(k(su)?.name),1)])],8,Yg),(N(!0),P(M,null,j(k(xu),e=>(N(),P(M,{key:e.id},[L(k(Zs),{class:`crumb-sep`,size:18,"aria-hidden":`true`}),I(`button`,{class:C([`crumb`,{current:e.id===k(H)?.agentId}]),"aria-current":e.id===k(H)?.agentId?`page`:void 0,title:s(e),onClick:t=>p(e.id)},[I(`span`,$g,T(u(e)),1),I(`span`,e_,[e.kind===`fork`?(N(),F(k(lc),{key:0,size:18,"aria-hidden":`true`})):e.kind===`subagent`?(N(),F(k(nc),{key:1,size:18,"aria-hidden":`true`})):(N(),F(k(bc),{key:2,size:18,"aria-hidden":`true`})),I(`span`,t_,T(e.name),1)])],10,Qg)],64))),128))],512),I(`button`,{class:`icon-button`,"aria-label":`Rename agent`,title:`Rename this agent`,disabled:!l.value,onClick:h},[L(k(kc),{size:18})],8,n_),I(`button`,{class:`icon-button conversation-menu-toggle`,"aria-label":`Browse conversations`,"aria-haspopup":`dialog`,"aria-expanded":r.value,"aria-controls":`conversation-picker`,title:`Browse roots and forks`,onClick:g[0]||=e=>r.value=!r.value},[L(k(Xs),{size:18})],8,r_)]),l.value&&l.value.kind!==`root`?(N(),P(`div`,i_,T(s(l.value)),1)):z(``,!0),r.value?(N(),P(M,{key:1},[I(`button`,{class:`conversation-menu-dismiss`,"aria-label":`Close conversation picker`,onClick:g[1]||=e=>r.value=!1}),I(`section`,a_,[g[7]||=I(`div`,{class:`conversation-picker-heading`},`Roots & forks`,-1),(N(!0),P(M,null,j(c.value,e=>(N(),P(`button`,{key:e.id,class:C([`conversation-choice`,{selected:e.id===k(H)?.agentId}]),"aria-label":e.lineage.map(e=>e.name).join(` → `),"aria-current":e.id===k(H)?.agentId?`page`:void 0,onClick:t=>p(e.id)},[I(`div`,s_,[I(`span`,c_,[(N(!0),P(M,null,j(e.lineage,(t,n)=>(N(),P(M,{key:t.id},[n?(N(),F(k(Zs),{key:0,size:18,"aria-hidden":`true`})):z(``,!0),I(`span`,{class:C({"choice-ancestor":n<e.lineage.length-1})},T(t.name),3)],64))),128))]),I(`span`,l_,T(s(e)),1)]),e.id===k(H)?.agentId?(N(),F(k(Ys),{key:0,size:18,"aria-hidden":`true`})):e.kind===`fork`?(N(),F(k(lc),{key:1,size:18,"aria-hidden":`true`})):(N(),F(k(bc),{key:2,size:18,"aria-hidden":`true`}))],10,o_))),128))])],64)):z(``,!0)])]),k(au).fault.value||k(au).status.value===`fault`||k(au).status.value===`reconnecting`||k(yu).ready&&k(au).status.value===`connecting`?(N(),P(`div`,u_,[I(`div`,null,[I(`strong`,null,T(k(yu).ready?`Cached transcript is stale.`:`Agent stream unavailable.`),1),I(`p`,null,T(k(au).fault.value||`Updates are paused while the stream reconnects.`),1),g[8]||=I(`p`,null,`Sending is paused until a fresh snapshot arrives. Your draft is kept.`,-1)]),I(`button`,{disabled:k(au).status.value===`connecting`,onClick:g[2]||=(...e)=>k(au).retry&&k(au).retry(...e)},` Retry stream `,8,d_)])):z(``,!0),I(`div`,{ref_key:`chat`,ref:t,class:`chat-scroll`,"data-testid":`chat`},[k(yu).ready?(N(),P(M,{key:1},[i.value.length?z(``,!0):(N(),P(`div`,h_,[g[13]||=I(`div`,{class:`agent-orb`},[I(`img`,{src:`/icons/durable-pi.svg`,alt:`Durable Pi`}),I(`i`)],-1),g[14]||=I(`span`,{class:`eyebrow`},`YOUR DURABLE AGENT IS READY`,-1),g[15]||=I(`h2`,null,`A conversation with continuity.`,-1),I(`p`,null,`Messages, tools and state live on `+T(k(nu)?.id)+`, beyond this window.`,1),I(`div`,g_,[I(`button`,{onClick:g[3]||=e=>k(Mu)(`Inspect this directory using your tools and give me a brief overview. Do not modify any files.`)},[L(k(sc),{size:18}),g[9]||=I(`strong`,null,`Explore this directory`,-1),g[10]||=I(`span`,null,`See coding tools in action`,-1),L(k(Ws),{size:18})]),I(`button`,{onClick:g[4]||=e=>k(Mu)(`Use read_state, then update_state to add a field called progress with value 1 and a boolean called ready with value false.`)},[L(k(qs),{size:18}),g[11]||=I(`strong`,null,`Make a state change`,-1),g[12]||=I(`span`,null,`Watch the workspace update`,-1),L(k(Ws),{size:18})])])])),(N(!0),P(M,null,j(i.value,e=>(N(),F(_g,{key:e.id,item:e,onFork:m},null,8,[`item`]))),128)),k(yu).running&&!a.value&&!o.value?(N(),P(`div`,__,[I(`div`,v_,[g[16]||=R(` AGENT `,-1),I(`span`,y_,T(k(yu).retry?`Retry scheduled`:`Working`),1)]),g[17]||=I(`div`,{class:`typing`},[I(`i`),I(`i`),I(`i`)],-1)])):z(``,!0),k(yu).retry?(N(),P(`p`,b_,` Retrying: `+T(k(yu).retry.error),1)):z(``,!0),(N(!0),P(M,null,j(k(yu).notices,(e,t)=>(N(),P(`p`,{key:t,class:`message-error`},T(e),1))),128))],64)):(N(),P(`div`,f_,[L(k(Hs),{size:30}),k(au).status.value===`fault`?(N(),P(`h2`,p_,`This agent is unavailable.`)):(N(),P(`h2`,m_,`Connecting to the agent…`)),I(`p`,null,`The agent keeps working on `+T(k(nu)?.id)+` while this view connects.`,1)]))],512),L(Vg)]))}});function S_(e,t){return`${e}/${t.replaceAll(`~`,`~0`).replaceAll(`/`,`~1`)}`}var C_=[`data-state-path`],w_={key:0,class:`state-field-heading`},T_=[`value`,`aria-label`,`disabled`],E_=[`value`],D_=[`aria-label`,`disabled`],O_=[`aria-label`,`disabled`],k_=[`aria-label`,`disabled`],A_=[`value`],j_=[`disabled`],M_=[`disabled`,`aria-label`],N_={key:2,class:`state-number`},P_=[`aria-label`,`disabled`],F_=[`aria-label`,`disabled`],I_=[`aria-label`,`disabled`],L_={key:3,class:`state-boolean`},R_=[`aria-label`,`aria-checked`,`disabled`],z_=[`aria-label`,`disabled`],B_={key:5,class:`muted`},V_=A({__name:`StateEditor`,props:{value:{type:[String,Number,Boolean,null,Array,Object]},path:{default:``},label:{default:`App State`},disabled:{type:Boolean}},emits:[`change`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>n.value===null?`null`:Array.isArray(n.value)?`array`:typeof n.value),a=B(()=>i.value===`object`||i.value===`array`),o=B(()=>a.value?Object.entries(n.value):[]),s=O(``),c=O(!1),l=O(``),u=O(`string`),d=O(!1),f=[`string`,`number`,`boolean`,`object`,`array`,`null`],p={string:()=>``,number:()=>0,boolean:()=>!1,object:()=>({}),array:()=>[],null:()=>null};Zn(()=>n.value,e=>{c.value||(s.value=String(e??``))},{immediate:!0});function m(e,t){r(`change`,{operation:e,path:n.path,value:t})}function h(){c.value=!1;let e=i.value===`number`?Number(s.value):s.value;if(i.value===`number`&&(!String(s.value).trim()||!Number.isFinite(e))){s.value=String(n.value);return}e!==n.value&&m(`update`,e)}function g(){let e=i.value===`array`?`-`:l.value.trim();e&&(r(`change`,{operation:`create`,path:S_(n.path,e),value:p[u.value]()}),l.value=``,d.value=!1)}return(t,n)=>{let _=ei(`StateEditor`,!0);return N(),P(`div`,{class:C([`state-field`,{"state-root":e.path===``}]),"data-state-path":e.path},[e.path===``?z(``,!0):(N(),P(`div`,w_,[I(`strong`,null,T(e.label),1),I(`select`,{value:i.value,"aria-label":`Type of ${e.path}`,disabled:e.disabled,onChange:n[0]||=e=>m(`update`,p[e.target.value]())},[(N(),P(M,null,j(f,e=>I(`option`,{key:e,value:e},T(e),9,E_)),64))],40,T_),I(`button`,{class:`icon-button`,"aria-label":`Delete ${e.path}`,title:`Delete field`,disabled:e.disabled,onClick:n[1]||=e=>m(`delete`)},[L(k(Bc),{size:18})],8,D_)])),a.value?(N(),P(M,{key:1},[(N(!0),P(M,null,j(o.value,([t,i])=>(N(),F(_,{key:t,value:i,path:k(S_)(e.path,t),label:t,disabled:e.disabled,onChange:n[2]||=e=>r(`change`,e)},null,8,[`value`,`path`,`label`,`disabled`]))),128)),d.value&&i.value===`array`?(N(),P(`form`,{key:0,class:`state-add`,onSubmit:As(g,[`prevent`])},[i.value===`array`?z(``,!0):Wn((N(),P(`input`,{key:0,"onUpdate:modelValue":n[3]||=e=>l.value=e,placeholder:`Field name`,"aria-label":`New field name in ${e.path||`/`}`,required:``,disabled:e.disabled},null,8,O_)),[[bs,l.value]]),Wn(I(`select`,{"onUpdate:modelValue":n[4]||=e=>u.value=e,"aria-label":`New field type in ${e.path||`/`}`,disabled:e.disabled},[(N(),P(M,null,j(f,e=>I(`option`,{key:e,value:e},T(e),9,A_)),64))],8,k_),[[Cs,u.value]]),I(`button`,{class:`secondary small`,disabled:e.disabled||i.value!==`array`&&!l.value.trim()},` Add `,8,j_),I(`button`,{type:`button`,class:`text-button`,onClick:n[5]||=e=>d.value=!1},`Cancel`)],32)):i.value===`array`?(N(),P(`button`,{key:1,class:`text-button state-add-button`,disabled:e.disabled,"aria-label":`Add ${i.value===`array`?`item`:`field`} to ${e.path||`/`}`,onClick:n[6]||=e=>d.value=!0},[L(k(jc),{size:18}),R(T(i.value===`array`?`Add item`:`Add field`),1)],8,M_)):z(``,!0)],64)):i.value===`number`?(N(),P(`div`,N_,[I(`button`,{class:`secondary`,"aria-label":`Decrement ${e.path}`,disabled:e.disabled,onClick:n[7]||=e=>m(`increment`,-1)},[L(k(xc),{size:18})],8,P_),Wn(I(`input`,{"onUpdate:modelValue":n[8]||=e=>s.value=e,type:`number`,step:`any`,"aria-label":`Value of ${e.path}`,disabled:e.disabled,onFocus:n[9]||=e=>c.value=!0,onBlur:h,onKeydown:n[10]||=Ms(e=>e.target.blur(),[`enter`])},null,40,F_),[[bs,s.value]]),I(`button`,{class:`secondary`,"aria-label":`Increment ${e.path}`,disabled:e.disabled,onClick:n[11]||=e=>m(`increment`,1)},[L(k(jc),{size:18})],8,I_)])):i.value===`boolean`?(N(),P(`div`,L_,[I(`button`,{class:C([`switch`,{on:e.value===!0}]),role:`switch`,"aria-label":`Value of ${e.path}`,"aria-checked":e.value===!0,disabled:e.disabled,onClick:n[12]||=t=>m(`update`,!e.value)},[...n[15]||=[I(`span`,null,null,-1)]],10,R_),I(`span`,null,T(e.value),1)])):i.value===`string`?Wn((N(),P(`textarea`,{key:4,"onUpdate:modelValue":n[13]||=e=>s.value=e,rows:`2`,"aria-label":`Value of ${e.path}`,disabled:e.disabled,onFocus:n[14]||=e=>c.value=!0,onBlur:h},null,40,z_)),[[bs,s.value]]):(N(),P(`span`,B_,`null`))],10,C_)}}}),H_=[`data-status`],U_=[`title`],W_=[`title`],G_=[`href`],K_=[`title`],q_=A({__name:`TunnelStatusBar`,props:{device:{}},setup(e){let t=e,n=B(()=>t.device.status===`online`),r=B(()=>t.device.transport===`tunnel`),i=B(()=>n.value?r.value?`online · via tunnel`:`online · LAN`:r.value?`tunnel`:`LAN`),a=B(()=>t.device.tunnel?.state===`connected`);return(t,o)=>(N(),P(`span`,{class:`tunnel-status`,"data-status":e.device.status},[I(`span`,{class:`axis transport`,title:r.value?`Hub ⇄ device over the tunnel (WSS)`:`Hub → device over LAN`},[r.value?(N(),F(k(Js),{key:0,size:13,class:C({live:a.value})},null,8,[`class`])):(N(),F(k(Uc),{key:1,size:13,class:C({live:n.value})},null,8,[`class`])),R(` `+T(i.value),1)],8,U_),I(`span`,{class:C([`axis monitor`,e.device.status])},[e.device.status===`offline`?(N(),F(k(Hc),{key:0,size:13})):(N(),P(M,{key:1},[R(T(e.device.status),1)],64))],2),r.value&&a.value&&e.device.tunnel?(N(),P(`span`,{key:0,class:`axis muted`,title:`tunnel last seen ${k(Iu)(e.device.tunnel.lastSeenAt)}`},T(e.device.tunnel.readerCount)+` reader`+T(e.device.tunnel.readerCount===1?``:`s`),9,W_)):z(``,!0),e.device.url?(N(),P(`a`,{key:1,class:`axis url`,href:e.device.url,target:`_blank`,rel:`noreferrer`},T(e.device.url),9,G_)):z(``,!0),e.device.lastSeenAt?(N(),P(`span`,{key:2,class:`axis muted`,title:`last probe ${k(Iu)(e.device.lastSeenAt)}`},T(k(Iu)(e.device.lastSeenAt)),9,K_)):z(``,!0)],8,H_))}});async function J_(e,t,n,r,i){let a=await fetch(`/api${t}`,{method:e,headers:n===void 0?{}:{"content-type":`application/json`},body:n===void 0?void 0:JSON.stringify(n),signal:r,...i?{keepalive:i}:{}}),o=await a.json().catch(()=>void 0);if(!a.ok){let e=o?.error;throw new xl(e?.code??`internal`,e?.message??`${a.status} ${a.statusText}`,a.status)}return o}function Y_(e){return e.offerUrl??e.pairUrl}var X_={pending:e=>J_(`GET`,`/pair/codes`,void 0,e),pairings:e=>J_(`GET`,`/pairings`,void 0,e),createCode:e=>J_(`POST`,`/pair/code`,{},e),resolveCode:(e,t)=>J_(`POST`,`/pair/resolve`,{code:e},t),codeState:(e,t)=>J_(`GET`,`/pair/codes/${encodeURIComponent(e)}`,void 0,t),approve:(e,t,n)=>J_(`POST`,`/pair/codes/${encodeURIComponent(e)}/approve`,t,n),cancel:(e,t,n)=>J_(`POST`,`/pair/codes/${encodeURIComponent(e)}/cancel`,{},t,n),rotate:(e,t)=>J_(`POST`,`/pairings/${encodeURIComponent(e)}/rotate`,{},t),revoke:(e,t=`user`,n)=>J_(`POST`,`/pairings/${encodeURIComponent(e)}/revoke`,{reason:t},n)},Z_=0;function Q_(){let e=++Z_,t=!1;return{gen:e,close:()=>t=!0,closed:()=>t}}var $_=class extends Error{codeId;constructor(e){super(`pairing poll timed out for ${e}`),this.codeId=e,this.name=`PollTimeout`}},ev=e=>e===`issued`||e===`cancelled`||e===`expired`;async function tv(e,t,n={}){let r=n.intervalMs??1e3,i=Date.now()+(n.timeoutMs??33e4);for(;;){if(e.closed())return;if(n.signal?.aborted)throw new DOMException(`The operation was aborted.`,`AbortError`);if(Date.now()>i)throw new $_(t);let a=await X_.codeState(t,n.signal);if(e.closed())return;if(e.state=a,n.onState?.(a),ev(a.phase))return a;await new Promise(e=>setTimeout(e,r))}}var nv={key:0,class:`token-manager`,"aria-label":`Credential manager`},rv={class:`credential-fingerprint`},iv=[`title`],av={key:0,class:`rotation-badge`,role:`status`},ov={class:`token-actions`},sv=[`disabled`],cv=[`disabled`],lv={key:1,class:`message-error`,role:`alert`},uv=A({__name:`TokenManager`,props:{device:{}},setup(e){let t=e,n=O(!1),r=O(``),i=B(()=>t.device.pairing);async function a(){if(!n.value){n.value=!0,r.value=``;try{await X_.rotate(t.device.id),Au(`Rotation queued — it completes when the device acknowledges the new credential.`)}catch(e){r.value=Ll(e)}finally{n.value=!1}}}async function o(){n.value||(U.dialog={kind:`prompt`,title:`Revoke ${t.device.id}?`,hint:`Every tunnel credential for this device dies at commit and the live tunnel is cut within a second. The device cleans its own files the next time it talks to the hub.`,submit:`Revoke`,danger:!0,run:async()=>{await X_.revoke(t.device.id,`user`),Au(`Revoke committed on the hub. The tunnel is cut; the device cleans up on its next contact.`)}})}return(e,t)=>i.value?(N(),P(`section`,nv,[I(`header`,null,[L(k(pc),{size:15}),t[0]||=I(`h3`,null,`Credential`,-1),I(`span`,{class:C([`pairing-status`,i.value.status])},T(i.value.status),3)]),I(`dl`,null,[t[1]||=I(`dt`,null,`Key fingerprint`,-1),I(`dd`,null,[I(`code`,rv,T(i.value.keyFingerprint),1)]),t[2]||=I(`dt`,null,`Paired`,-1),I(`dd`,{title:new Date(i.value.pairedAt).toISOString()},T(k(Iu)(i.value.pairedAt)),9,iv),t[3]||=I(`dt`,null,`Generation`,-1),I(`dd`,null,T(i.value.credentialGeneration),1)]),i.value.rotationPending?(N(),P(`p`,av,[L(k(Nc),{size:13,class:`spin`}),t[4]||=R(` rotation queued — waiting for the device to ACK `,-1)])):z(``,!0),I(`div`,ov,[i.value.status===`paired`?(N(),P(`button`,{key:0,class:`small`,disabled:n.value||i.value.rotationPending,onClick:a},[L(k(Nc),{size:14}),t[5]||=R(` Rotate credential `,-1)],8,sv)):z(``,!0),i.value.status===`paired`?(N(),P(`button`,{key:1,class:`small danger`,disabled:n.value,onClick:o},[L(k(Rc),{size:14}),t[6]||=R(` Revoke `,-1)],8,cv)):z(``,!0)]),r.value?(N(),P(`p`,lv,T(r.value),1)):z(``,!0)])):z(``,!0)}}),dv={class:`tasks-panel`},fv={class:`panel-heading`},pv={class:`tag`},mv={key:0,class:`message-error`,role:`alert`},hv={class:`task-section`,"aria-label":`Durable jobs`},gv={key:0,class:`task-empty`},_v=[`data-job`],vv={class:`job-def-head`},yv={key:0,class:`tag`},bv={class:`tag`},xv=[`aria-label`],Sv=[`title`],Cv={class:`job-def-meta`},wv=[`title`],Tv=[`title`],Ev={key:0,class:`job-def-last`},Dv=[`onClick`],Ov=[`disabled`,`onClick`],kv=[`disabled`,`onClick`],Av=[`disabled`,`onClick`],jv={class:`task-section`,"aria-label":`Agent activity`},Mv={class:`panel-heading`},Nv={key:0,class:`task-empty`},Pv={key:1,class:`task-tree`},Fv=[`data-task-kind`],Iv={class:`tag`},Lv={key:0,class:`task-phase`},Rv=[`onClick`],zv=[`disabled`],Bv={class:`raw`},Vv=A({__name:`TasksPanel`,setup(e){let t=O(``),n=O(!1),r=O([]),i=O(),a=e=>({running:`Running`,waiting:`Waiting`,completed:`Completed`,aborted:`Stopped`,declined:`Declined`,failed:`Failed`,pending:`Queued`,completing:`Finishing`,terminal:`Finished`})[e]??e,o=B(()=>new Map(rh.value.map(e=>[e.id,ah.value.find(t=>t.job===e.id)]))),s=B(()=>{let e=Su.value,t=new Set(e.map(e=>e.id)),n=new Map;for(let r of e){let e=r.owner!==void 0&&t.has(r.owner)?r.owner:void 0;n.set(e,[...n.get(e)??[],r])}let r=[],i=(e,t)=>{for(let a of(n.get(e)??[]).sort((e,t)=>e.id-t.id))r.push({task:a,depth:t}),i(a.id,t+1)};return i(void 0,0),r}),c=e=>e.kind===`pi.tool`?{icon:Gc,name:e.label??`Tool call`,what:`tool call`}:e.kind===`pi.generation`?{icon:Ks,name:`Model response`,what:`generation`}:e.kind===`pi.compaction`?{icon:hc,name:`Compaction`,what:`compaction`}:e.kind.startsWith(`demo.job.`)?{icon:Wc,name:e.label??ih(e.kind.slice(9))?.title??e.kind,what:`durable job`}:e.kind===`demo.job-approval`?{icon:Lc,name:`Approval`,what:`waits for you`}:{icon:Hs,name:e.label??e.kind,what:e.kind},l=e=>e.state.phase?e.kind.startsWith(`demo.job.`)?ih(e.kind.slice(9))?.phases.find(t=>t.id===e.state.phase)?.label??e.state.phase:e.state.phase:``;async function u(){if(!n.value&&lu.value){n.value=!0,t.value=``;try{await lu.value.abort(!0)}catch(e){t.value=Ll(e)}finally{n.value=!1}}}async function d(e){let n=uu.value;if(e.target.open&&n)try{let[e,t]=await Promise.all([n.tasks(`terminal`,40),n.inspect()]);r.value=e,i.value=t}catch(e){t.value=Ll(e)}}let f=B(()=>r.value.filter(e=>e.state.status===`terminal`).slice(-12).reverse());return(e,r)=>(N(),P(`div`,dv,[I(`div`,fv,[r[0]||=I(`h2`,null,`Tasks`,-1),I(`span`,pv,T(k(Su).length)+` active`,1)]),t.value?(N(),P(`p`,mv,T(t.value),1)):z(``,!0),I(`section`,hv,[I(`h3`,null,[L(k(Pc),{size:18}),r[1]||=R(`Durable jobs`,-1)]),r[2]||=I(`p`,{class:`hint`},[R(` Repeatable workflows with named phases. Every run follows the same phases and saves a checkpoint after each one. Start one here, or ask your agent: it finds these with `),I(`code`,null,`list_durable_jobs`),R(`, starts them with `),I(`code`,null,`run_durable_job`),R(` and checks them with `),I(`code`,null,`check_durable_job`),R(`. Runs play out live in the chat. `)],-1),k(rh).length?z(``,!0):(N(),P(`p`,gv,` This device has no durable jobs. Deploy the latest backend to it. `)),(N(!0),P(M,null,j(k(rh),e=>(N(),P(`article`,{key:e.id,class:`job-def`,"data-job":e.id},[I(`div`,vv,[L(k(Wc),{size:18}),I(`strong`,null,T(e.title),1),e.approval?(N(),P(`span`,yv,`needs approval`)):z(``,!0),I(`span`,bv,`~`+T(e.seconds)+`s`,1)]),I(`p`,null,T(e.summary),1),I(`ol`,{class:`job-chain`,"aria-label":`${e.title} phases`},[(N(!0),P(M,null,j(e.phases,(e,t)=>(N(),P(`li`,{key:e.id,title:e.summary},[I(`span`,null,T(t+1),1),R(T(e.label),1),e.kind===`repeat`?(N(),F(k(Pc),{key:0,size:13})):z(``,!0),e.kind===`approval`?(N(),F(k(Lc),{key:1,size:13})):z(``,!0)],8,Sv))),128))],8,xv),I(`div`,Cv,[(N(!0),P(M,null,j(e.inputs,e=>(N(),P(`code`,{key:e.name,title:e.description},T(e.name)+`=`+T(e.default),9,wv))),128)),I(`code`,{title:`Each run saves its result to App State ${e.resultPath}`},`→ `+T(e.resultPath),9,Tv)]),o.value.get(e.id)?(N(),P(`div`,Ev,[I(`span`,null,[R(`Run #`+T(o.value.get(e.id).run)+`: `,1),I(`strong`,null,T(a(o.value.get(e.id).status)),1),k(nh)(o.value.get(e.id))?z(``,!0):(N(),P(M,{key:0},[R(` in `+T(o.value.get(e.id).phases.find(t=>t.id===o.value.get(e.id).phase)?.label),1)],64))]),I(`button`,{class:`text-button`,onClick:t=>k(fh)(o.value.get(e.id).id)},` Show in chat `,8,Dv),o.value.get(e.id).approval===`pending`?(N(),P(M,{key:0},[I(`button`,{class:`primary small`,disabled:!!k(uh),onClick:t=>k(mh)(o.value.get(e.id),!0)},` Approve `,8,Ov),I(`button`,{class:`secondary`,disabled:!!k(uh),onClick:t=>k(mh)(o.value.get(e.id),!1)},` Decline `,8,kv)],64)):z(``,!0)])):z(``,!0),I(`button`,{class:`secondary job-def-run`,disabled:!!k(uh)||!k(lu),onClick:t=>k(ph)(e)},[L(k(Ac),{size:16}),R(`Run `+T(e.title),1)],8,Av)],8,_v))),128))]),I(`section`,jv,[I(`div`,Mv,[r[3]||=I(`h3`,null,`Agent activity`,-1),L(k(Hs),{size:18})]),r[5]||=I(`p`,{class:`hint`},` Every model response and every tool call is its own durable task with an id, an owner and a checkpoint. Follow them live here; after a restart each one resumes or reports how it ended. `,-1),s.value.length?(N(),P(`ul`,Pv,[(N(!0),P(M,null,j(s.value,({task:e,depth:t})=>(N(),P(`li`,{key:e.id,class:`task-row`,style:ye({"--depth":t}),"data-task-kind":e.kind},[(N(),F(ni(c(e).icon),{size:16})),I(`strong`,null,T(c(e).name),1),I(`span`,Iv,T(a(e.state.status)),1),l(e)?(N(),P(`span`,Lv,T(l(e)),1)):z(``,!0),I(`small`,null,`#`+T(e.id)+` `+T(c(e).what)+`, agent #`+T(e.conversationId)+T(e.effectiveBackground?`, background`:``),1),(N(!0),P(M,null,j(e.conversations,e=>(N(),P(`button`,{key:e,class:`text-button`,onClick:t=>k(gh)(e)},` Open agent #`+T(e),9,Rv))),128))],12,Fv))),128))])):(N(),P(`p`,Nv,`Nothing running. Send a message or run a job.`)),r[6]||=I(`p`,{class:`hint`},` Interrupt or Esc stops foreground work and what it owns. Stop all also stops background runs. `,-1),I(`button`,{class:`secondary danger`,disabled:!k(Su).length||n.value,onClick:u},[L(k(wc),{size:18}),r[4]||=R(`Stop all `,-1)],8,zv)]),I(`details`,{class:`raw task-section`,onToggle:d},[I(`summary`,null,[L(k(ec),{size:18}),r[7]||=R(`Runtime details`,-1)]),r[9]||=I(`p`,{class:`hint`},` Recent task results and recovery records, read from the device when opened. `,-1),(N(!0),P(M,null,j(f.value,e=>(N(),P(`details`,{key:e.id,class:`raw`},[I(`summary`,null,[R(T(e.kind)+` #`+T(e.id),1),I(`span`,null,T(a(e.state.outcome?.status??e.state.status)),1)]),I(`pre`,null,T(JSON.stringify(e.state.outcome,null,2)),1)]))),128)),I(`details`,Bv,[r[8]||=I(`summary`,null,`Recovery inspection`,-1),I(`pre`,null,T(JSON.stringify(i.value,null,2)),1)])],32)]))}}),Hv={class:`extensions-panel`},Uv={class:`panel-heading`},Wv={key:0,class:`task-empty`},Gv=[`data-extension`],Kv={class:`ext-head`},qv=[`aria-checked`,`aria-label`,`disabled`,`onClick`],Jv=[`checked`,`disabled`,`onChange`],Yv=A({__name:`ExtensionsPanel`,setup(e){let t=an(),n=O(!1);async function r(){let e=lu.value;if(!e||!ru.value)return void(t.value=void 0);t.value=await e.extensions().catch(()=>void 0)??t.value}Zn([lu,ru,()=>JSON.stringify(yu.value.agent.extensions??null)],r,{immediate:!0});async function i(e){let r=lu.value;if(r&&!n.value){n.value=!0;try{let n=await ju(()=>r.setExtension(e));n&&(t.value=n),Ou()}finally{n.value=!1}}}return(e,r)=>(N(),P(`div`,Hv,[I(`div`,Uv,[r[0]||=I(`h2`,null,`Extensions`,-1),L(k(Mc),{size:18})]),r[3]||=I(`p`,{class:`hint`},` Custom harness capabilities for this agent. Turn one on and the next request uses it. The choice is stored with the agent, so it survives restarts. `,-1),t.value?z(``,!0):(N(),P(`p`,Wv,`Loading extensions…`)),(N(!0),P(M,null,j(t.value?.extensions??[],e=>(N(),P(`article`,{key:e.name,class:C([`ext-card`,{on:e.enabled}]),"data-extension":e.name},[I(`div`,Kv,[I(`div`,null,[I(`strong`,null,T(e.title),1),I(`code`,null,T(e.name),1)]),I(`button`,{class:C([`switch`,{on:e.enabled}]),role:`switch`,"aria-checked":e.enabled,"aria-label":e.title,disabled:n.value,onClick:t=>i({name:e.name,enabled:!e.enabled})},[...r[1]||=[I(`span`,null,null,-1)]],10,qv)]),I(`p`,null,T(e.description),1),e.prompts?(N(),P(`ul`,{key:0,class:C([`ext-prompts`,{off:!e.enabled}])},[(N(!0),P(M,null,j(e.prompts,e=>(N(),P(`li`,{key:e.id},[I(`label`,null,[I(`input`,{type:`checkbox`,checked:e.enabled,disabled:n.value,onChange:t=>i({prompt:e.id,enabled:t.target.checked})},null,40,Jv),I(`code`,null,T(e.id),1)]),I(`span`,null,T(e.description),1),I(`details`,null,[r[2]||=I(`summary`,null,`View prompt`,-1),I(`pre`,null,T(e.text),1)])]))),128))],2)):z(``,!0)],10,Gv))),128))]))}}),Xv={class:`context-section`,"aria-labelledby":`context-title`},Zv={class:`section-label`},Qv={key:0,class:`hint`},$v={class:`context-numbers`},ey={class:`context-pct`},ty={key:0,class:`context-compacting`},ny=[`aria-valuemax`,`aria-valuenow`,`aria-valuetext`],ry={class:`context-marker-label`},iy=[`aria-valuemin`,`aria-valuemax`,`aria-valuenow`,`aria-valuetext`],ay={class:`context-marker-label`},oy={class:`hint context-hint`},sy={class:`modal compaction-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`compaction-title`},cy={class:`context-toggle`},ly=[`checked`],uy=512,dy=4096,fy=1024,py=A({__name:`ContextBar`,setup(e){let t=e=>e>=1e6?`${(e/1e6).toFixed(2)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e),n=B(()=>Tu.value?.contextWindow??0),r=B(()=>{let e=yu.value.entries;for(let t=e.length-1;t>=0;t--){if(e[t].kind!==`pi.assistant`)continue;let n=e[t].model?.find(e=>e.role===`assistant`)?.usage;if(n)return n.totalTokens||n.input+n.output+n.cacheRead+n.cacheWrite}return 0}),i=B(()=>yu.value.compactions.length>0),a=O(),o=B(()=>a.value??su.value?.compaction??Sg(n.value));Zn(()=>JSON.stringify(su.value?.compaction),e=>{a.value&&e===JSON.stringify(a.value)&&(a.value=void 0)});let s=O(),c=B(()=>U.dialog?.kind===`compaction`),l=()=>void(U.dialog=void 0);Jr(()=>c.value&&l());let u=B(()=>s.value??Cg(n.value,o.value)),d=e=>`${Math.min(100,Math.max(0,100*e/(n.value||1)))}%`,f=B(()=>Math.round(100*r.value/(n.value||1))),p=e=>{let t=e/(n.value||1);return t<.35?`start`:t>.65?`end`:`center`},m=(e,t)=>Math.min(n.value-fy,Math.max((t??dy)+fy,e)),h=(e,t)=>Math.min(t-fy,Math.max(dy,e));function g(e,t){let n=u.value,r=Math.round(t/uy)*uy;s.value=e===`wait`?{auto:n.auto,wait:m(r,n.auto)}:{auto:h(r,n.wait),wait:n.wait}}async function _(e){let t=uu.value;if(!t)return;let n=await ju(()=>t.setCompaction(e));n&&(a.value=n),s.value=void 0}function v(){let e=s.value;e&&_({reserveTokens:n.value-e.wait,...e.auto===void 0?{}:{backgroundTokens:e.wait-e.auto}})}let y=O(),b;function ee(e,t){b=e,t.currentTarget.setPointerCapture(t.pointerId)}function te(e){if(!b||!y.value)return;let t=y.value.getBoundingClientRect();g(b,(e.clientX-t.left)/t.width*n.value)}function x(){b&&(b=void 0,v())}function ne(e,t){let n=(t.shiftKey?8192:1024)*(t.key===`ArrowRight`||t.key===`ArrowUp`?1:t.key===`ArrowLeft`||t.key===`ArrowDown`?-1:0);if(!n)return;t.preventDefault();let r=u.value;g(e,(e===`auto`?r.auto??dy:r.wait)+n)}return(e,a)=>(N(),P(M,null,[I(`section`,Xv,[I(`div`,Zv,[a[7]||=I(`span`,{id:`context-title`},`CONTEXT`,-1),n.value?(N(),P(`button`,{key:0,class:`context-details-toggle`,onClick:a[0]||=e=>k(U).dialog={kind:`compaction`}},[L(k(fc),{size:16}),a[6]||=R(`Details `,-1)])):z(``,!0)]),n.value?(N(),P(M,{key:1},[I(`div`,$v,[I(`strong`,null,T(t(r.value)),1),I(`span`,null,`of `+T(t(n.value))+` tokens`,1),I(`span`,ey,T(f.value)+`%`,1),i.value?(N(),P(`span`,ty,[...a[8]||=[I(`i`,null,null,-1),R(`Compacting`,-1)]])):z(``,!0)]),I(`div`,{ref_key:`bar`,ref:y,class:C([`context-bar`,{off:!o.value.enabled}]),onPointermove:te,onPointerup:x,onPointercancel:x},[I(`div`,{class:C([`context-fill`,{hot:u.value.auto!==void 0&&r.value>=u.value.auto}]),style:ye({width:d(r.value)})},null,6),I(`div`,{class:`context-reserve`,style:ye({left:d(u.value.wait)}),title:`Reserved for the answer`},null,4),u.value.auto===void 0?z(``,!0):(N(),P(`button`,{key:0,class:C([`context-marker auto`,`label-${p(u.value.auto)}`]),role:`slider`,"aria-label":`Automatic compaction starts at`,"aria-valuemin":dy,"aria-valuemax":u.value.wait-fy,"aria-valuenow":u.value.auto,"aria-valuetext":`${t(u.value.auto)} tokens`,style:ye({left:d(u.value.auto)}),onPointerdown:a[1]||=e=>ee(`auto`,e),onKeydown:a[2]||=e=>ne(`auto`,e),onKeyup:v,onBlur:v},[I(`span`,ry,`Auto-compact at `+T(t(u.value.auto)),1)],46,ny)),I(`button`,{class:C([`context-marker wait`,`label-${p(u.value.wait)}`]),role:`slider`,"aria-label":`The next request waits for a summary at`,"aria-valuemin":(u.value.auto??dy)+fy,"aria-valuemax":n.value-fy,"aria-valuenow":u.value.wait,"aria-valuetext":`${t(u.value.wait)} tokens, ${t(n.value-u.value.wait)} reserved`,style:ye({left:d(u.value.wait)}),onPointerdown:a[3]||=e=>ee(`wait`,e),onKeydown:a[4]||=e=>ne(`wait`,e),onKeyup:v,onBlur:v},[I(`span`,ay,`Reserve at `+T(t(u.value.wait)),1)],46,iy)],34),I(`p`,oy,[o.value.enabled?(N(),P(M,{key:0},[a[9]||=R(`Compacts in the background at `,-1),I(`strong`,null,T(t(u.value.auto??u.value.wait)),1),a[10]||=R(` and waits at `,-1),I(`strong`,null,T(t(u.value.wait)),1),a[11]||=R(`.`,-1)],64)):(N(),P(M,{key:1},[R(`Automatic compaction is off.`)],64))])],64)):(N(),P(`div`,Qv,`Pick a model to see its context window.`))]),(N(),F(fr,{to:`body`},[c.value?(N(),P(`div`,{key:0,class:`modal-backdrop`,onClick:As(l,[`self`])},[I(`section`,sy,[I(`header`,null,[a[12]||=I(`h2`,{id:`compaction-title`},`Context compaction`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close context compaction`,onClick:l},[L(k(Kc),{size:18})])]),I(`p`,null,[a[13]||=R(` A summary starts in the background at `,-1),I(`strong`,null,T(t(u.value.auto??u.value.wait)),1),a[14]||=R(`. Above `,-1),I(`strong`,null,T(t(u.value.wait)),1),R(` the next request waits for it, keeping `+T(t(n.value-u.value.wait))+` free for the answer. Drag a marker on the bar to change either point. `,1)]),a[16]||=I(`p`,null,[R(`Older entries stay stored, and `),I(`code`,null,`search_history`),R(` still finds them.`)],-1),I(`label`,cy,[I(`input`,{type:`checkbox`,checked:o.value.enabled,onChange:a[5]||=e=>_({enabled:e.target.checked})},null,40,ly),a[15]||=R(` Automatic compaction `,-1)]),a[17]||=I(`p`,{class:`hint`},[R(` Applies to every agent in this session. `),I(`code`,null,`/compact`),R(` works either way. `)],-1),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:l},`Close`)])])])):z(``,!0)]))],64))}}),my=/^[A-Za-z_$][\w$]*$/,hy=e=>` `.repeat(e);function gy(e,t){let n=[],r=(e,t=`text`)=>n.push({text:e,kind:t});return r(`function`,`keyword`),r(` `),r(e,`function`),r(`(`,`punct`),r(`args`),r(`: `,`punct`),_y(t,0,r),r(`): `,`punct`),r(`Promise`,`type`),r(`<`,`punct`),r(`ToolResult`,`type`),r(`>;`,`punct`),n}function _y(e,t,n){if(!e||typeof e!=`object`)return n(`unknown`,`type`);if(`const`in e)return by(e.const,n);if(e.enum)return yy(e.enum.map(e=>({const:e})),t,n);if(e.anyOf??e.oneOf)return yy(e.anyOf??e.oneOf,t,n);if(Array.isArray(e.type))return yy(e.type.map(t=>({...e,type:t})),t,n);switch(e.type){case`string`:case`boolean`:case`null`:return n(e.type,`type`);case`number`:case`integer`:return n(`number`,`type`);case`array`:{let r=!!(e.items?.anyOf??e.items?.oneOf??e.items?.enum);return r&&n(`(`,`punct`),_y(e.items,t,n),r&&n(`)`,`punct`),n(`[]`,`punct`)}case`object`:return vy(e,t,n);default:return n(`unknown`,`type`)}}function vy(e,t,n){let r=Object.entries(e.properties??{});if(!r.length)return e.additionalProperties&&typeof e.additionalProperties==`object`?(n(`Record`,`type`),n(`<`,`punct`),n(`string`,`type`),n(`, `,`punct`),_y(e.additionalProperties,t,n),n(`>`,`punct`)):n(`{}`,`punct`);let i=new Set(e.required??[]);n(`{`,`punct`),n(`
76
76
  `);for(let[e,a]of r){let r=xy(a);r&&n(`${hy(t+1)}${r}\n`,`comment`),n(hy(t+1)),n(my.test(e)?e:JSON.stringify(e),`property`),n(i.has(e)?`: `:`?: `,`punct`),_y(a,t+1,n),n(`;`,`punct`),n(`
77
- `)}n(hy(t)),n(`}`,`punct`)}function yy(e,t,n){e.forEach((e,r)=>{r&&n(` | `,`punct`),_y(e,t,n)})}function by(e,t){if(typeof e==`string`)return t(JSON.stringify(e),`string`);if(typeof e==`number`)return t(String(e),`number`);t(String(e),`type`)}function xy(e){let t=[e.description,e.minimum===void 0?``:`@minimum ${e.minimum}`,e.maximum===void 0?``:`@maximum ${e.maximum}`,e.default===void 0?``:`@default ${JSON.stringify(e.default)}`].filter(Boolean);return t.length?`/** ${t.join(` `)} */`:``}var Sy={key:0,class:`panel-rail`,"aria-label":`Inspector (collapsed)`},Cy=[`title`],wy=[`aria-label`,`title`,`onClick`],Ty={key:0,class:`count`},Ey={class:`inspector-tabs`,role:`tablist`,"aria-label":`Session details`},Dy=[`id`,`aria-selected`,`onClick`],Oy={key:0,class:`count`},ky=[`title`],Ay=[`aria-labelledby`],jy={class:`session-heading`},My=[`title`],Ny={class:`cwd-trail`,dir:`rtl`},Py={dir:`ltr`},Fy={class:`session-status`},Iy={key:0,class:`background-pill`},Ly=[`title`],Ry={class:`model-section`},zy=[`src`],By={class:`thinking-row`},Vy=[`value`],Hy={class:`stats-section`,"aria-labelledby":`stats-title`},Uy={class:`metrics`},Wy=[`title`],Gy={class:`usage-breakdown`,"aria-label":`Agent token and cost breakdown`},Ky={scope:`row`},qy={class:`panel-heading`},Jy={class:`hint app-state-description`},Yy=[`disabled`],Xy={class:`state-json-actions`},Zy={key:0,class:`hint`},Qy=[`disabled`],$y=[`disabled`],eb={key:0,class:`message-error`,role:`alert`},tb={class:`panel-heading`},nb={class:`tag`},rb={class:`hook-card`},ib=[`aria-checked`],ab={key:0,class:`tag tool-disabled`},ob={class:`tag`},sb=[`aria-label`],cb=A({__name:`Inspector`,setup(e){let t=B(()=>new Map(Eu.value?.tools.map(e=>[e.name,gy(e.name,e.parameters)]))),n=[{id:`session`,label:`Session`,icon:sc},{id:`state`,label:`State`,icon:qs},{id:`tasks`,label:`Tasks`,icon:Hs},{id:`tools`,label:`Tools`,icon:Gc},{id:`extensions`,label:`Extend`,icon:Mc}],r=B(()=>[{label:`Input`,tokens:wu.value.input,cost:wu.value.inputCost},{label:`Output`,tokens:wu.value.output,cost:wu.value.outputCost},{label:`Cache read`,tokens:wu.value.cacheRead,cost:wu.value.cacheReadCost},{label:`Cache write`,tokens:wu.value.cacheWrite,cost:wu.value.cacheWriteCost}]),i=B(()=>Su.value.filter(e=>e.background).length);function a(e,t){ju(async()=>{await lu.value.configure(e),await Ou(),t&&Au(t)})}function o(){let e=uu.value;e&&(U.dialog={kind:`prompt`,title:`Rename session`,label:`Session name`,value:su.value?.name??``,submit:`Save name`,run:t=>e.rename(t)})}let s=ou.sharedState,c=O(``),l=O(``),u=O(0),d=O(!1),f=O(``),p=B(()=>c.value!==l.value),m=B(()=>p.value&&s.value?.revision!==u.value);function h(){c.value=Pu(s.value?.value??{}),l.value=c.value,u.value=s.value?.revision??0,f.value=``}Zn(s,()=>!p.value&&h(),{immediate:!0});async function g(e){if(!d.value&&lu.value){d.value=!0,f.value=``;try{await lu.value.demo(`state`,e)}catch(e){f.value=Ll(e)}finally{d.value=!1}}}async function _(){if(!d.value&&lu.value){f.value=``,d.value=!0;try{let e=JSON.parse(c.value);if(!e||Array.isArray(e)||typeof e!=`object`)throw Error(`App State must be a JSON object.`);let t=await lu.value.demo(`state`,{operation:`update`,path:``,value:e,expectedRevision:u.value});c.value=Pu(t.value),l.value=c.value,u.value=t.revision,Au(`Shared App State saved.`)}catch(e){f.value=Ll(e)}finally{d.value=!1}}}let v=B(()=>Eu.value?.config.readOnly===!0),y=B(()=>Eu.value?.tools.filter(e=>e.offered).length??0);return(e,l)=>(N(),P(`aside`,{class:C([`inspector`,{collapsed:!k(Vu),overlay:k(U).inspectorOverlay}])},[k(Vu)?(N(),P(M,{key:1},[I(`div`,Ey,[(N(),P(M,null,j(n,e=>I(`button`,{id:`inspector-tab-${e.id}`,key:e.id,role:`tab`,"aria-controls":`inspector-panel`,"aria-selected":k(U).tab===e.id,class:C({active:k(U).tab===e.id}),onClick:t=>k(U).tab=e.id},[(N(),F(ni(e.icon),{size:18})),R(T(e.label),1),e.id===`tasks`&&k(Su).length?(N(),P(`span`,Oy,T(k(Su).length),1)):z(``,!0)],10,Dy)),64)),I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Collapse inspector`,title:`Collapse inspector (${k(qu).inspector})`,onClick:l[1]||=e=>k(Uu)()},[L(k(Tc),{size:18})],8,ky)]),I(`div`,{id:`inspector-panel`,class:C([`inspector-body`,{"session-panel":k(U).tab===`session`}]),role:`tabpanel`,"aria-labelledby":`inspector-tab-${k(U).tab}`},[k(U).tab===`session`?(N(),P(M,{key:0},[I(`section`,jy,[I(`h1`,null,[I(`span`,null,T(k(su)?.name??`Loading session`),1),I(`button`,{class:`icon-button`,title:`Rename session`,"aria-label":`Rename session`,onClick:o},[L(k(kc),{size:18})])]),I(`button`,{class:`path cwd-button`,title:k(su)?.cwd,"aria-label":`Show full working directory`,onClick:l[2]||=e=>k(U).dialog={kind:`path`,path:k(su)?.cwd??``}},[L(k(sc),{size:18}),I(`span`,Ny,[I(`bdi`,Py,T(k(su)?.cwd),1)])],8,My),I(`div`,Fy,[I(`span`,{class:C([`status-pill`,{working:k(Cu)}])},[l[7]||=I(`i`,null,null,-1),R(T(k(Cu)?`Working`:`Idle`),1)],2),i.value?(N(),P(`span`,Iy,T(i.value)+` background`,1)):z(``,!0),I(`span`,{class:`saved`,title:k(nu)?.id},[L(k(Fc),{size:18}),R(T(k(nu)?.name??k(nu)?.id),1)],8,Ly),k(nu)?(N(),F(q_,{key:1,device:k(nu)},null,8,[`device`])):z(``,!0)])]),k(nu)?(N(),F(uv,{key:0,device:k(nu)},null,8,[`device`])):z(``,!0),I(`section`,Ry,[l[14]||=I(`div`,{class:`section-label`},[I(`span`,null,`AGENT`)],-1),I(`button`,{class:`model-button`,onClick:l[3]||=e=>k(U).dialog={kind:`models`}},[I(`img`,{src:k(Fu)(k(yu).agent.model?.modelId),alt:``},null,8,zy),I(`div`,null,[I(`strong`,null,T(k(Tu)?.name??k(yu).agent.model?.modelId??`Loading…`),1),I(`small`,null,T(k(Tu)?.tier??``)+` / `+T(k(yu).agent.model?.provider??``),1)]),L(k(Xs),{size:18})]),I(`div`,By,[l[8]||=I(`span`,null,`Thinking`,-1),I(`select`,{"aria-label":`Thinking level`,value:k(yu).agent.thinkingLevel??`low`,onChange:l[4]||=e=>a({thinkingLevel:e.target.value},`Thinking ${e.target.value}. Used on the next turn.`)},[(N(!0),P(M,null,j(k(yg),e=>(N(),P(`option`,{key:e},T(e),1))),128))],40,Vy)]),L(py),I(`section`,Hy,[l[13]||=I(`div`,{class:`section-label`},[I(`span`,{id:`stats-title`},`STATS`)],-1),I(`div`,Uy,[I(`div`,{title:`${k(wu).tokens.toLocaleString(`en-US`)} total tokens`},[I(`span`,null,T(k(Nu)(k(wu).tokens)),1),l[9]||=I(`small`,null,`total tokens`,-1)],8,Wy),I(`div`,null,[I(`span`,null,`$`+T(k(wu).cost.toFixed(4)),1),l[10]||=I(`small`,null,`agent cost`,-1)]),I(`div`,null,[I(`span`,null,T(k(Eu)?.tools.length??0),1),l[11]||=I(`small`,null,`tools`,-1)])]),I(`table`,Gy,[l[12]||=I(`thead`,null,[I(`tr`,null,[I(`th`,{scope:`col`},`Type`),I(`th`,{scope:`col`},`Tokens`),I(`th`,{scope:`col`},`Cost (USD)`)])],-1),I(`tbody`,null,[(N(!0),P(M,null,j(r.value,e=>(N(),P(`tr`,{key:e.label},[I(`th`,Ky,T(e.label),1),I(`td`,null,T(e.tokens.toLocaleString(`en-US`)),1),I(`td`,null,`$`+T(e.cost.toFixed(4)),1)]))),128))])])])])],64)):z(``,!0),k(U).tab===`state`?(N(),P(M,{key:1},[I(`div`,qy,[l[15]||=I(`h2`,null,`App State`,-1),L(k(qs),{size:18})]),I(`p`,Jy,` One shared JSON object for every agent, session and fork on `+T(k(nu)?.name??k(nu)?.id)+`. You and your agents can read, create, update or delete values and fields. Changes appear live and persist across closed browsers, interrupted agents and backend restarts. `,1),Wn(I(`textarea`,{"onUpdate:modelValue":l[5]||=e=>c.value=e,class:`app-state-json`,"aria-label":`App State JSON`,spellcheck:`false`,disabled:d.value||!k(s),rows:`12`},null,8,Yy),[[bs,c.value]]),I(`div`,Xy,[m.value?(N(),P(`span`,Zy,`State changed elsewhere. Load the latest JSON before saving.`)):z(``,!0),p.value?(N(),P(`button`,{key:1,class:`secondary`,disabled:d.value,onClick:h},T(m.value?`Load latest`:`Reset`),9,Qy)):z(``,!0),I(`button`,{class:`primary small`,disabled:!p.value||d.value||m.value,onClick:_},T(d.value?`Saving…`:`Save JSON`),9,$y)]),f.value?(N(),P(`p`,eb,T(f.value),1)):z(``,!0),L(V_,{value:k(s)?.value??{},disabled:d.value||p.value||!k(s),onChange:g},null,8,[`value`,`disabled`])],64)):z(``,!0),k(U).tab===`tasks`?(N(),F(Vv,{key:2})):z(``,!0),k(U).tab===`extensions`?(N(),F(Yv,{key:3})):z(``,!0),k(U).tab===`tools`?(N(),P(M,{key:4},[I(`div`,tb,[l[16]||=I(`h2`,null,`Tools`,-1),I(`span`,nb,T(y.value)+` / `+T(k(Eu)?.tools.length??0),1)]),l[20]||=I(`p`,{class:`hint`},` Every tool this agent's extensions provide. Open one to see its definition. `,-1),I(`div`,rb,[I(`div`,null,[L(k(Lc),{size:18}),l[18]||=I(`strong`,null,`Read only`,-1),I(`button`,{class:C([`switch`,{on:v.value}]),role:`switch`,"aria-checked":v.value,"aria-label":`Read only`,onClick:l[6]||=e=>a({readOnly:!v.value},v.value?`Read only off. Every tool is back.`:`Read only on. Tools that write are disabled.`)},[...l[17]||=[I(`span`,null,null,-1)]],10,ib)]),l[19]||=I(`p`,null,` Offers this agent only tools that read. Tools that create, update or delete leave its next request, and the choice is stored with the agent. `,-1)]),(N(!0),P(M,null,j(k(Eu)?.tools,e=>(N(),P(`details`,{key:e.name,class:C([`tool-row`,{disabled:!e.offered}])},[I(`summary`,null,[L(k(Gc),{size:18}),I(`strong`,null,T(e.name),1),e.offered?z(``,!0):(N(),P(`span`,ab,`disabled`)),I(`span`,ob,T(e.replay===`safe`?`replay safe`:`interrupt on crash`),1)]),I(`p`,null,T(e.description),1),e.parameters?(N(),P(`pre`,{key:0,class:`tool-signature`,"aria-label":`${e.name} TypeScript definition`},[I(`code`,null,[(N(!0),P(M,null,j(t.value.get(e.name),(e,t)=>(N(),P(`span`,{key:t,class:C(`tk-${e.kind}`)},T(e.text),3))),128))])],8,sb)):z(``,!0),I(`small`,null,T(e.replay===`safe`?`An interrupted execution may run again after recovery.`:`A crash records an interrupted result instead of rerunning this effect.`),1)],2))),128))],64)):z(``,!0)],10,Ay)],64)):(N(),P(`div`,Sy,[I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Expand inspector`,title:`Expand inspector (${k(qu).inspector})`,onClick:l[0]||=e=>k(Hu)()},[L(k(Ec),{size:18})],8,Cy),(N(),P(M,null,j(n,e=>I(`button`,{key:e.id,class:C([`rail-tab`,{active:k(U).tab===e.id}]),"aria-label":`Open ${e.label}`,title:e.label,onClick:t=>k(Hu)(e.id)},[(N(),F(ni(e.icon),{size:20})),e.id===`tasks`&&k(Su).length?(N(),P(`span`,Ty,T(k(Su).length),1)):z(``,!0)],10,wy)),64))]))],2))}}),lb={class:`chat-empty`},ub={class:`eyebrow`},db={key:3,class:`hint offline-error`},fb={key:4,class:`offline-command`},pb={key:5,class:`hint`},mb={key:6,class:`hint`},hb={class:`offline-actions`},gb=[`disabled`],_b={key:7,class:`message-error`,role:`alert`},vb=A({__name:`OfflinePanel`,props:{device:{}},setup(e){let t=e,n=O(!1),r=O(``),i=B(()=>{let e=t.device,n=e.source===`config`;switch(e.status){case`checking`:return{title:`Checking ${e.id}…`,text:`Probing the device. This view fills in as soon as it answers.`};case`unauthorized`:return e.transport===`tunnel`?{title:`${e.id} tunnel credentials are not valid`,text:`Pair the device again — the hub will mint a fresh credential.`}:{title:e.hasToken?`${e.id} rejected its token`:`No token for ${e.id}`,text:e.hasToken?`The device's DPI_TOKEN changed (a rotate or a rebuilt device). Copy the current token into this hub's registry, then check again.`:`This hub has no token for the device yet. Register it, then check again.`,command:n&&e.kind!==`url`?`just net register ${e.id}`:`just net register ${e.id} --token <token>`};case`mismatch`:return{title:`${e.id} answers as a different device`,text:`The URL now reaches a backend with another identity (a rebuilt VM or a new data directory). If that is expected, register it again: that trusts the identity it answers with now.`,command:e.kind===`url`?`just net register ${e.id} --token <token>`:`just net register ${e.id}`};case`incompatible`:return{title:`${e.id} speaks another API version`,text:`Update the device's dpi-backend.`,command:n?`just net deploy ${e.id}`:void 0};default:return{title:`${e.id} is offline`,text:`Last seen ${Iu(e.lastSeenAt)}. Its agents keep their state on the device and resume when its backend starts again. The tree shows the last known sessions.`,command:n?e.kind===`local`?`just backend run`:e.kind===`url`?void 0:`just net restart ${e.id}`:void 0,alt:n&&e.kind!==`local`&&e.kind!==`url`?`just net up ${e.id}`:void 0}}});async function a(){n.value=!0,r.value=``;try{let e=await Il.check(t.device.id);e.status===`online`&&Au(`${e.id} is online.`)}catch(e){r.value=Ll(e)}finally{n.value=!1}}async function o(e){try{await navigator.clipboard.writeText(e),Au(`Copied.`)}catch{Au(`Clipboard needs localhost or HTTPS. Select the text to copy.`)}}return(t,s)=>(N(),P(`section`,{class:C([`chat-panel offline-panel`,e.device.status]),"aria-live":`polite`},[I(`div`,lb,[e.device.status===`checking`?(N(),F(k(yc),{key:0,class:`spin`,size:30})):e.device.status===`mismatch`||e.device.status===`unauthorized`?(N(),F(k(Ic),{key:1,size:30})):(N(),F(k(Hc),{key:2,size:30})),I(`span`,ub,T(e.device.kind.toUpperCase())+` · `+T(e.device.url??(e.device.transport===`tunnel`?`tunnel`:`no endpoint`)),1),I(`h2`,null,T(i.value.title),1),I(`p`,null,T(i.value.text),1),e.device.error?(N(),P(`p`,db,T(e.device.error),1)):z(``,!0),i.value.command?(N(),P(`div`,fb,[I(`code`,null,T(i.value.command),1),I(`button`,{class:`icon-button`,"aria-label":`Copy command`,onClick:s[0]||=e=>o(i.value.command)},[L(k(tc),{size:18})])])):z(``,!0),i.value.command?(N(),P(`p`,pb,`Run it in this repo's terminal, then press Check now.`)):z(``,!0),i.value.alt?(N(),P(`p`,mb,[s[2]||=R(` Never deployed or rebuilt? `,-1),I(`code`,null,T(i.value.alt),1),s[3]||=R(` provisions it from scratch. `,-1)])):z(``,!0),I(`div`,hb,[I(`button`,{class:`secondary`,disabled:n.value,onClick:s[1]||=e=>a()},[L(k(Nc),{size:18}),R(T(n.value?`Checking…`:`Check now`),1)],8,gb)]),r.value?(N(),P(`p`,_b,T(r.value),1)):z(``,!0)])],2))}}),yb={class:`dir-browser`},bb={class:`dir-path`},xb=[`disabled`],Sb=[`aria-busy`],Cb=[`title`],wb=[`aria-selected`,`title`,`onClick`],Tb={key:1,class:`hint`},Eb={key:0,class:`message-error`,role:`alert`},Db=A({__name:`DirBrowser`,props:ui({deviceId:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=Ai(e,`modelValue`),r=O(),i=O(!1),a=O(``),o=0;async function s(e){let s=++o,c=t.deviceId;i.value=!0,a.value=``;try{let t=await Pl(c).dirs(e);return s===o?(r.value=t,t.path&&(n.value=t.path),t):void 0}catch(e){s===o&&(a.value=Ll(e));return}finally{s===o&&(i.value=!1)}}return Zn(()=>t.deviceId,async()=>{r.value=void 0;let e=await s(``),t=e?.dirs[0];t&&!e.path&&await s(t.path)},{immediate:!0}),(e,t)=>(N(),P(`div`,yb,[I(`div`,bb,[Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,"aria-label":`Working directory`,required:``,placeholder:`/path/to/project`,spellcheck:`false`,autocomplete:`off`,onKeydown:t[1]||=Ms(As(e=>s(n.value),[`prevent`]),[`enter`])},null,544),[[bs,n.value]]),I(`button`,{type:`button`,class:`secondary small`,disabled:i.value||!n.value,onClick:t[2]||=e=>s(n.value)},` Go `,8,xb)]),I(`div`,{class:`dir-list`,role:`listbox`,"aria-label":`Directories`,"aria-busy":i.value},[I(`button`,{type:`button`,class:`dir-item`,title:`Start directories`,onClick:t[3]||=e=>s(``)},[L(k(dc),{size:16}),t[5]||=I(`span`,null,`Start dirs`,-1)]),r.value?.parent?(N(),P(`button`,{key:0,type:`button`,class:`dir-item`,title:r.value.parent,onClick:t[4]||=e=>s(r.value.parent)},[L(k(rc),{size:16}),t[6]||=I(`span`,null,`..`,-1)],8,Cb)):z(``,!0),(N(!0),P(M,null,j(r.value?.dirs,e=>(N(),P(`button`,{key:e.path,type:`button`,class:`dir-item`,role:`option`,"aria-selected":e.path===n.value,title:e.path,onClick:t=>s(e.path)},[e.path===n.value?(N(),F(k(sc),{key:0,size:16})):(N(),F(k(cc),{key:1,size:16})),I(`span`,null,T(e.name),1)],8,wb))),128)),r.value&&!r.value.dirs.length?(N(),P(`p`,Tb,`No subdirectories.`)):z(``,!0)],8,Sb),a.value?(N(),P(`p`,Eb,T(a.value),1)):z(``,!0)]))}}),Ob={key:0,class:`message-error`},kb=[`value`],Ab={class:`field`},jb={key:0,class:`hint`,title:`The device reports no usable models — create still works with its default; add the provider key on the device (e.g. OPENROUTER_API_KEY) to see the catalog`},Mb=[`value`],Nb={key:2,class:`message-error`,role:`alert`},Pb=[`disabled`],Fb=A({__name:`NewSessionDialog`,props:{deviceId:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>Yl.devices.value.filter(e=>e.status===`online`)),a=O(i.value.find(e=>e.id===n.deviceId)?.id??i.value[0]?.id??``),o=B(()=>i.value.find(e=>e.id===a.value)),s=B(()=>{let e=o.value?.info?.models??[];if(e.length)return e;let t=o.value?.info;return t?.defaultModel&&t.provider?[{id:t.defaultModel,provider:t.provider,name:`${t.defaultModel} (device default)`,tier:`—`,icon:`lab.png`,contextWindow:0,reasoning:!1,cost:{input:0,output:0}}]:[]}),c=B(()=>!s.value.length||(o.value?.info?.models?.length??0)===0),l=e=>`${e.provider}/${e.id}`,u=O({name:``,cwd:``,model:``}),d=O(!1),f=O(``);Zn(o,e=>{let t=s.value,n=t.find(t=>t.id===e?.info?.defaultModel)??t[0];u.value.model=n?l(n):``,u.value.cwd=``},{immediate:!0});async function p(){if(!d.value&&o.value){d.value=!0,f.value=``;try{let e=s.value.find(e=>l(e)===u.value.model)??s.value[0];if(!e)throw Error(`Choose a model`);let t=await Pl(o.value.id).createSession({name:u.value.name.trim()||`New session`,cwd:u.value.cwd.trim(),model:{provider:e.provider,modelId:e.id}}),n=t.agents.find(e=>e.kind===`root`)??t.agents[0];du({deviceId:o.value.id,sessionId:t.id,agentId:n?.id??1}),Au(`Session created on ${o.value.id}.`),r(`close`)}catch(e){f.value=Ll(e)}finally{d.value=!1}}}return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[6]||=As(e=>r(`close`),[`self`])},[I(`form`,{class:`modal session-modal`,onSubmit:As(p,[`prevent`])},[I(`header`,null,[t[7]||=I(`div`,null,[I(`span`,{class:`eyebrow`},`A PERSISTENT WORKSPACE`),I(`h2`,null,`New session`)],-1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close new session`,onClick:t[0]||=e=>r(`close`)},[L(k(Kc),{size:18})])]),i.value.length?(N(),P(M,{key:1},[I(`label`,null,[t[8]||=R(`Device`,-1),Wn(I(`select`,{"onUpdate:modelValue":t[1]||=e=>a.value=e,"aria-label":`Device`},[(N(!0),P(M,null,j(i.value,e=>(N(),P(`option`,{key:e.id,value:e.id},T(e.name)+T(e.info?.hostname&&e.info.hostname!==e.name?` · ${e.info.hostname}`:``),9,kb))),128))],512),[[Cs,a.value]])]),I(`label`,null,[t[9]||=R(`Session name`,-1),Wn(I(`input`,{"onUpdate:modelValue":t[2]||=e=>u.value.name=e,autofocus:``,placeholder:`My durable agent`,maxlength:`100`},null,512),[[bs,u.value.name]])]),I(`div`,Ab,[I(`span`,null,`Working directory on `+T(i.value.find(e=>e.id===a.value)?.name??a.value),1),L(Db,{modelValue:u.value.cwd,"onUpdate:modelValue":t[3]||=e=>u.value.cwd=e,"device-id":a.value},null,8,[`modelValue`,`device-id`])]),I(`label`,null,[t[10]||=R(`Model`,-1),c.value?(N(),P(`span`,jb,`no key on device — using default`)):z(``,!0),Wn(I(`select`,{"onUpdate:modelValue":t[4]||=e=>u.value.model=e,"aria-label":`New session model`},[(N(!0),P(M,null,j(s.value,e=>(N(),P(`option`,{key:l(e),value:l(e)},T(e.tier)+` / `+T(e.name),9,Mb))),128))],512),[[Cs,u.value.model]])])],64)):(N(),P(`p`,Ob,` No device is online. Start one with just backend run or just net up <id>, then try again. `)),f.value?(N(),P(`p`,Nb,T(f.value),1)):z(``,!0),I(`footer`,null,[I(`button`,{type:`button`,class:`secondary`,onClick:t[5]||=e=>r(`close`)},`Cancel`),I(`button`,{class:`primary`,disabled:d.value||!u.value.model||!u.value.cwd||!o.value},[L(k(jc),{size:18}),R(T(d.value?`Creating…`:`Create session`),1)],8,Pb)])],32)]))}}),Ib=new Uint8Array(512),Lb=new Uint8Array(256);(()=>{let e=1;for(let t=0;t<255;t++)Ib[t]=e,Lb[e]=t,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)Ib[e]=Ib[e-255]})();var Rb=(e,t)=>e===0||t===0?0:Ib[Lb[e]+Lb[t]];function zb(e){let t=[1];for(let n=0;n<e;n++){let e=Array(t.length+1).fill(0);for(let r=0;r<t.length;r++)e[r]^=t[r],e[r+1]^=Rb(t[r],Ib[n]);t=e}return t}function Bb(e,t){let n=zb(t),r=Array(t).fill(0);for(let i of e){let e=i^r[0];r.shift(),r.push(0);for(let i=0;i<t;i++)r[i]^=Rb(n[i+1],e)}return r}var Vb=[21,25,29,33,37,41,45,49,53,57,61,65],Hb=[19,34,55,80,108,136,156,194,232,274,324,370],Ub=[7,10,15,20,26,36,40,48,60,72,80,96],Wb=[7,10,15,20,26,18,20,24,30,18,20,24],Gb=[[[1,19]],[[1,34]],[[1,55]],[[1,80]],[[1,108]],[[2,68]],[[2,78]],[[2,97]],[[2,116]],[[2,68],[2,69]],[[4,81]],[[2,92],[2,93]]],Kb=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58]],qb=e=>e<=9?8:16;function Jb(e){for(let t=1;t<=Vb.length;t++)if(4+qb(t)+e*8<=Hb[t-1]*8)return t;throw Error(`qr: payload too long (${e} bytes; v12L max ${Hb[11]-3})`)}function Yb(e,t){let n=[...new TextEncoder().encode(e)],r=[],i=(e,t)=>{for(let n=t-1;n>=0;n--)r.push(e>>n&1)};i(4,4),i(n.length,qb(t));for(let e of n)i(e,8);let a=Hb[t-1],o=a*8;for(i(0,Math.min(4,o-r.length));r.length%8!=0;)r.push(0);let s=[236,17],c=0;for(;r.length<o;)i(s[c++%2],8);let l=[];for(let e=0;e<a;e++){let t=0;for(let n=0;n<8;n++)t=t<<1|r[e*8+n];l.push(t)}return l}function Xb(e,t){let n=Wb[e-1],r=[],i=0;for(let[n,a]of Gb[e-1])for(let e=0;e<n;e++)r.push(t.slice(i,i+=a));let a=[],o=Math.max(...r.map(e=>e.length));for(let e=0;e<o;e++)for(let t of r)e<t.length&&a.push(t[e]);let s=r.map(e=>Bb(e,n));for(let e=0;e<n;e++)for(let t of s)a.push(t[e]);return a}function Zb(e){return Array.from({length:e},()=>Array(e).fill(!1))}function Qb(e,t){let n=Vb[t-1],r=(t,r)=>{for(let i=-1;i<=7;i++)for(let a=-1;a<=7;a++){let o=t+i,s=r+a;if(o<0||o>=n||s<0||s>=n)continue;let c=i>=0&&i<=6&&a>=0&&a<=6&&(i===0||i===6||a===0||a===6),l=i>=2&&i<=4&&a>=2&&a<=4;e[o][s]=c||l}};r(0,0),r(0,n-7),r(n-7,0);for(let t=8;t<n-8;t++)e[6][t]=t%2==0,e[t][6]=t%2==0;let i=Kb[t-1];for(let t of i)for(let r of i)if(!(t<=8&&r<=8||t<=8&&r>=n-9||t>=n-9&&r<=8))for(let n=-2;n<=2;n++)for(let i=-2;i<=2;i++)e[t+n][r+i]=Math.max(Math.abs(n),Math.abs(i))!==1;if(e[n-8][8]=!0,t>=7){let r=t<<12;for(let e=17;e>=12;e--)r>>e&1&&(r^=7973<<e-12);let i=t<<12|r&4095;for(let t=0;t<18;t++){let r=(i>>t&1)==1,a=n-11+t%3,o=t/3|0;e[a][o]=r,e[o][a]=r}}}function $b(e){let t=8|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>9&1?1335:0);let r=(t<<10|n)^21522,i=[];for(let e=14;e>=0;e--)i.push((r>>e&1)==1);return i}function ex(e,t){let n=Vb[0]*0+e.length,r=$b(t);for(let t=0;t<=5;t++)e[8][t]=r[t];e[8][7]=r[6],e[8][8]=r[7],e[7][8]=r[8];for(let t=9;t<15;t++)e[14-t][8]=r[t];for(let t=0;t<7;t++)e[n-1-t][8]=r[t];e[8][n-8]=r[7];for(let t=8;t<15;t++)e[8][n-15+t]=r[t];e[n-8][8]=!0}function tx(e,t,n,r){let i=e.length;Vb[n-1]*Vb[n-1];let a=e=>((t[e>>3]??0)>>7-(e&7)&1)==1,o=0,s=!0;for(let t=i-1;t>0;t-=2){t===6&&t--;for(let c=0;c<i;c++){let l=s?i-1-c:c;for(let i of[t,t-1]){if(rx(l,i,n))continue;if(o>=(Hb[n-1]+Ub[n-1])*8){o++;continue}let t=a(o++);nx(l,i,r)&&(t=!t),e[l][i]=t}}s=!s}}function nx(e,t,n){switch(n){case 0:return(e+t)%2==0;case 1:return e%2==0;case 2:return t%3==0;case 3:return(e+t)%3==0;case 4:return(Math.floor(e/2)+Math.floor(t/3))%2==0;case 5:return e*t%2+e*t%3==0;case 6:return(e*t%2+e*t%3)%2==0;default:return((e+t)%2+e*t%3)%2==0}}function rx(e,t,n){let r=Vb[n-1];if(e<=8&&t<=8||e<=8&&t>=r-8||e>=r-8&&t<=8||e===6||t===6||n>=7&&(e>=r-11&&e<=r-9&&t<=5||t>=r-11&&t<=r-9&&e<=5))return!0;let i=Kb[n-1];for(let n of i)for(let a of i)if(!(n<=8&&a<=8||n<=8&&a>=r-9||n>=r-9&&a<=8)&&Math.abs(e-n)<=2&&Math.abs(t-a)<=2)return!0;return!1}function ix(e){let t=e.length,n=0;for(let r=0;r<2;r++)for(let i=0;i<t;i++){let a=1;for(let o=1;o<t;o++)(r===0?e[i][o]:e[o][i])===(r===0?e[i][o-1]:e[o-1][i])?(a++,o===t-1&&a>=5&&(n+=3+(a-5))):(a>=5&&(n+=3+(a-5)),a=1)}for(let r=0;r<t-1;r++)for(let i=0;i<t-1;i++){let t=e[r][i];e[r][i+1]===t&&e[r+1][i]===t&&e[r+1][i+1]===t&&(n+=3)}let r=[!0,!1,!0,!0,!0,!1,!0,!1,!1,!1,!1],i=(e,t)=>{for(let i=0;i+11<=t;i++){let t=!0;for(let n=0;n<11;n++)if(e(i+n)!==r[n]){t=!1;break}t&&(n+=40)}};for(let n=0;n<t;n++)i(t=>e[n][t],t);for(let n=0;n<t;n++)i(t=>e[t][n],t);let a=0;for(let t of e)for(let e of t)e&&a++;let o=a*100/(t*t);return n+=Math.floor(Math.abs(o-50)/5)*10,n}function ax(e,t){let n=Jb(new TextEncoder().encode(e).length),r=Vb[n-1],i=Xb(n,Yb(e,n)),a=Zb(r);return Qb(a,n),tx(a,i,n,t),ex(a,t),a}function ox(e,t){if(t!==void 0)return ax(e,t);let n;for(let t=0;t<8;t++){let r=ax(e,t),i=ix(r);(!n||i<n.score)&&(n={m:r,score:i})}return n.m}function sx(e,t=160){let n=ox(e),r=n.length,i=t/(r+8),a=``;for(let e=0;e<r;e++)for(let t=0;t<r;t++)n[e][t]&&(a+=`<rect x="${((t+4)*i).toFixed(2)}" y="${((e+4)*i).toFixed(2)}" width="${i.toFixed(3)}" height="${i.toFixed(3)}"/>`);return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${t} ${t}" shape-rendering="crispEdges"><rect width="${t}" height="${t}" fill="#fff"/><g fill="#000">${a}</g></svg>`}var cx={class:`device-handoff`,"aria-label":`Pair this machine`},lx={class:`row`},ux=[`disabled`],dx=[`disabled`],fx={key:0,class:`target`,"data-testid":`device-url`},px={key:1,class:`err`},mx=((e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n})(A({__name:`DeviceHandoff`,props:{offerFragment:{}},setup(e){let t=e,n=O(`4780`),r=O(!1),i=B(()=>{let e=/^\d{1,5}$/.test(n.value)?Number(n.value):0;if(!(!e||e<1||e>65535))return`http://127.0.0.1:${e}/pair#${t.offerFragment}`});function a(){let e=i.value;e&&window.open(e,`_blank`,`noopener`)}async function o(){let e=i.value;if(e)try{await navigator.clipboard.writeText(e),r.value=!0,setTimeout(()=>r.value=!1,1600)}catch{}}return(e,t)=>(N(),P(`section`,cx,[I(`header`,null,[L(k(Sc),{size:18}),t[1]||=I(`h3`,null,`Pair THIS machine`,-1)]),t[4]||=I(`p`,{class:`what`},[R(` If this browser runs on the device itself, open its local pairing page — the offer is relayed inside the link, nothing is sent to the hub. Start `),I(`code`,null,`dpi device`),R(` there first. `)],-1),I(`div`,lx,[I(`label`,null,[t[2]||=R(` local port `,-1),Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,inputmode:`numeric`,spellcheck:`false`,"aria-label":`Local dpi backend port`},null,512),[[bs,n.value]])]),I(`button`,{class:`primary`,type:`button`,disabled:!i.value,onClick:a},[L(k(ac),{size:15}),t[3]||=R(`Open the device page `,-1)],8,ux),I(`button`,{class:`secondary`,type:`button`,disabled:!i.value,onClick:o},[L(k(tc),{size:15}),R(T(r.value?`Copied`:`Copy link`),1)],8,dx)]),i.value?(N(),P(`p`,fx,T(i.value),1)):z(``,!0),i.value?z(``,!0):(N(),P(`p`,px,`port must be 1–65535`))]))}}),[[`__scopeId`,`data-v-01884b7b`]]);function hx(e){return wx(e)&&!gx(e)&&!Ox(e)&&Symbol.asyncIterator in e}function gx(e){return Array.isArray(e)}function _x(e){return typeof e==`bigint`}function vx(e){return typeof e==`boolean`}function yx(e){return e instanceof globalThis.Date}function bx(e){return typeof e==`function`}function xx(e){return wx(e)&&!gx(e)&&!Ox(e)&&Symbol.iterator in e}function Sx(e){return e===null}function Cx(e){return typeof e==`number`}function wx(e){return typeof e==`object`&&!!e}function Tx(e){return e instanceof globalThis.RegExp}function Ex(e){return typeof e==`string`}function Dx(e){return typeof e==`symbol`}function Ox(e){return e instanceof globalThis.Uint8Array}function kx(e){return e===void 0}function Ax(e){return e.map(e=>Fx(e))}function jx(e){return new Date(e.getTime())}function Mx(e){return new Uint8Array(e)}function Nx(e){return new RegExp(e.source,e.flags)}function Px(e){let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=Fx(e[n]);for(let n of Object.getOwnPropertySymbols(e))t[n]=Fx(e[n]);return t}function Fx(e){return gx(e)?Ax(e):yx(e)?jx(e):Ox(e)?Mx(e):Tx(e)?Nx(e):wx(e)?Px(e):e}function Ix(e){return Fx(e)}function Lx(e,t){return Ix(t===void 0?e:{...t,...e})}function Rx(e){return typeof e==`object`&&!!e}function zx(e){return globalThis.Array.isArray(e)&&!globalThis.ArrayBuffer.isView(e)}function Bx(e){return e===void 0}function Vx(e){return typeof e==`number`}var Hx;(function(e){e.InstanceMode=`default`,e.ExactOptionalPropertyTypes=!1,e.AllowArrayObject=!1,e.AllowNaN=!1,e.AllowNullVoid=!1;function t(t,n){return e.ExactOptionalPropertyTypes?n in t:t[n]!==void 0}e.IsExactOptionalProperty=t;function n(t){let n=Rx(t);return e.AllowArrayObject?n:n&&!zx(t)}e.IsObjectLike=n;function r(e){return n(e)&&!(e instanceof Date)&&!(e instanceof Uint8Array)}e.IsRecordLike=r;function i(t){return e.AllowNaN?Vx(t):Number.isFinite(t)}e.IsNumberLike=i;function a(t){let n=Bx(t);return e.AllowNullVoid?n||t===null:n}e.IsVoidLike=a})(Hx||={});function Ux(e){return globalThis.Object.freeze(e).map(e=>Jx(e))}function Wx(e){return e}function Gx(e){return e}function Kx(e){return e}function qx(e){let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=Jx(e[n]);for(let n of Object.getOwnPropertySymbols(e))t[n]=Jx(e[n]);return globalThis.Object.freeze(t)}function Jx(e){return gx(e)?Ux(e):yx(e)?Wx(e):Ox(e)?Gx(e):Tx(e)?Kx(e):wx(e)?qx(e):e}function q(e,t){let n=t===void 0?e:{...t,...e};switch(Hx.InstanceMode){case`freeze`:return Jx(n);case`clone`:return Ix(n);default:return n}}var Yx=class extends Error{constructor(e){super(e)}},Xx=Symbol.for(`TypeBox.Transform`),Zx=Symbol.for(`TypeBox.Readonly`),Qx=Symbol.for(`TypeBox.Optional`),$x=Symbol.for(`TypeBox.Hint`),J=Symbol.for(`TypeBox.Kind`);function eS(e){return wx(e)&&e[Zx]===`Readonly`}function tS(e){return wx(e)&&e[Qx]===`Optional`}function nS(e){return Y(e,`Any`)}function rS(e){return Y(e,`Argument`)}function iS(e){return Y(e,`Array`)}function aS(e){return Y(e,`AsyncIterator`)}function oS(e){return Y(e,`BigInt`)}function sS(e){return Y(e,`Boolean`)}function cS(e){return Y(e,`Computed`)}function lS(e){return Y(e,`Constructor`)}function uS(e){return Y(e,`Date`)}function dS(e){return Y(e,`Function`)}function fS(e){return Y(e,`Integer`)}function pS(e){return Y(e,`Intersect`)}function mS(e){return Y(e,`Iterator`)}function Y(e,t){return wx(e)&&J in e&&e[J]===t}function hS(e){return vx(e)||Cx(e)||Ex(e)}function gS(e){return Y(e,`Literal`)}function _S(e){return Y(e,`MappedKey`)}function vS(e){return Y(e,`MappedResult`)}function yS(e){return Y(e,`Never`)}function bS(e){return Y(e,`Not`)}function xS(e){return Y(e,`Null`)}function SS(e){return Y(e,`Number`)}function CS(e){return Y(e,`Object`)}function wS(e){return Y(e,`Promise`)}function TS(e){return Y(e,`Record`)}function ES(e){return Y(e,`Ref`)}function DS(e){return Y(e,`RegExp`)}function OS(e){return Y(e,`String`)}function kS(e){return Y(e,`Symbol`)}function AS(e){return Y(e,`TemplateLiteral`)}function jS(e){return Y(e,`This`)}function MS(e){return wx(e)&&Xx in e}function NS(e){return Y(e,`Tuple`)}function PS(e){return Y(e,`Undefined`)}function FS(e){return Y(e,`Union`)}function IS(e){return Y(e,`Uint8Array`)}function LS(e){return Y(e,`Unknown`)}function RS(e){return Y(e,`Unsafe`)}function zS(e){return Y(e,`Void`)}function BS(e){return wx(e)&&J in e&&Ex(e[J])}function VS(e){return nS(e)||rS(e)||iS(e)||sS(e)||oS(e)||aS(e)||cS(e)||lS(e)||uS(e)||dS(e)||fS(e)||pS(e)||mS(e)||gS(e)||_S(e)||vS(e)||yS(e)||bS(e)||xS(e)||SS(e)||CS(e)||wS(e)||TS(e)||ES(e)||DS(e)||OS(e)||kS(e)||AS(e)||jS(e)||NS(e)||PS(e)||FS(e)||IS(e)||LS(e)||RS(e)||zS(e)||BS(e)}var HS=`Argument.Any.Array.AsyncIterator.BigInt.Boolean.Computed.Constructor.Date.Enum.Function.Integer.Intersect.Iterator.Literal.MappedKey.MappedResult.Not.Null.Number.Object.Promise.Record.Ref.RegExp.String.Symbol.TemplateLiteral.This.Tuple.Undefined.Union.Uint8Array.Unknown.Void`.split(`.`);function US(e){try{return new RegExp(e),!0}catch{return!1}}function WS(e){if(!Ex(e))return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n>=7&&n<=13||n===27||n===127)return!1}return!0}function GS(e){return JS(e)||HC(e)}function KS(e){return kx(e)||_x(e)}function qS(e){return kx(e)||Cx(e)}function JS(e){return kx(e)||vx(e)}function X(e){return kx(e)||Ex(e)}function YS(e){return kx(e)||Ex(e)&&WS(e)&&US(e)}function XS(e){return kx(e)||Ex(e)&&WS(e)}function ZS(e){return kx(e)||HC(e)}function QS(e){return wx(e)&&e[Qx]===`Optional`}function $S(e){return Z(e,`Any`)&&X(e.$id)}function eC(e){return Z(e,`Argument`)&&Cx(e.index)}function tC(e){return Z(e,`Array`)&&e.type===`array`&&X(e.$id)&&HC(e.items)&&qS(e.minItems)&&qS(e.maxItems)&&JS(e.uniqueItems)&&ZS(e.contains)&&qS(e.minContains)&&qS(e.maxContains)}function nC(e){return Z(e,`AsyncIterator`)&&e.type===`AsyncIterator`&&X(e.$id)&&HC(e.items)}function rC(e){return Z(e,`BigInt`)&&e.type===`bigint`&&X(e.$id)&&KS(e.exclusiveMaximum)&&KS(e.exclusiveMinimum)&&KS(e.maximum)&&KS(e.minimum)&&KS(e.multipleOf)}function iC(e){return Z(e,`Boolean`)&&e.type===`boolean`&&X(e.$id)}function aC(e){return Z(e,`Computed`)&&Ex(e.target)&&gx(e.parameters)&&e.parameters.every(e=>HC(e))}function oC(e){return Z(e,`Constructor`)&&e.type===`Constructor`&&X(e.$id)&&gx(e.parameters)&&e.parameters.every(e=>HC(e))&&HC(e.returns)}function sC(e){return Z(e,`Date`)&&e.type===`Date`&&X(e.$id)&&qS(e.exclusiveMaximumTimestamp)&&qS(e.exclusiveMinimumTimestamp)&&qS(e.maximumTimestamp)&&qS(e.minimumTimestamp)&&qS(e.multipleOfTimestamp)}function cC(e){return Z(e,`Function`)&&e.type===`Function`&&X(e.$id)&&gx(e.parameters)&&e.parameters.every(e=>HC(e))&&HC(e.returns)}function lC(e){return Z(e,`Integer`)&&e.type===`integer`&&X(e.$id)&&qS(e.exclusiveMaximum)&&qS(e.exclusiveMinimum)&&qS(e.maximum)&&qS(e.minimum)&&qS(e.multipleOf)}function uC(e){return wx(e)&&Object.entries(e).every(([e,t])=>WS(e)&&HC(t))}function dC(e){return Z(e,`Intersect`)&&!(Ex(e.type)&&e.type!==`object`)&&gx(e.allOf)&&e.allOf.every(e=>HC(e)&&!NC(e))&&X(e.type)&&(JS(e.unevaluatedProperties)||ZS(e.unevaluatedProperties))&&X(e.$id)}function fC(e){return Z(e,`Iterator`)&&e.type===`Iterator`&&X(e.$id)&&HC(e.items)}function Z(e,t){return wx(e)&&J in e&&e[J]===t}function pC(e){return gC(e)&&Ex(e.const)}function mC(e){return gC(e)&&Cx(e.const)}function hC(e){return gC(e)&&vx(e.const)}function gC(e){return Z(e,`Literal`)&&X(e.$id)&&_C(e.const)}function _C(e){return vx(e)||Cx(e)||Ex(e)}function vC(e){return Z(e,`MappedKey`)&&gx(e.keys)&&e.keys.every(e=>Cx(e)||Ex(e))}function yC(e){return Z(e,`MappedResult`)&&uC(e.properties)}function bC(e){return Z(e,`Never`)&&wx(e.not)&&Object.getOwnPropertyNames(e.not).length===0}function xC(e){return Z(e,`Not`)&&HC(e.not)}function SC(e){return Z(e,`Null`)&&e.type===`null`&&X(e.$id)}function CC(e){return Z(e,`Number`)&&e.type===`number`&&X(e.$id)&&qS(e.exclusiveMaximum)&&qS(e.exclusiveMinimum)&&qS(e.maximum)&&qS(e.minimum)&&qS(e.multipleOf)}function wC(e){return Z(e,`Object`)&&e.type===`object`&&X(e.$id)&&uC(e.properties)&&GS(e.additionalProperties)&&qS(e.minProperties)&&qS(e.maxProperties)}function TC(e){return Z(e,`Promise`)&&e.type===`Promise`&&X(e.$id)&&HC(e.item)}function EC(e){return Z(e,`Record`)&&e.type===`object`&&X(e.$id)&&GS(e.additionalProperties)&&wx(e.patternProperties)&&(e=>{let t=Object.getOwnPropertyNames(e.patternProperties);return t.length===1&&US(t[0])&&wx(e.patternProperties)&&HC(e.patternProperties[t[0]])})(e)}function DC(e){return Z(e,`Ref`)&&X(e.$id)&&Ex(e.$ref)}function OC(e){return Z(e,`RegExp`)&&X(e.$id)&&Ex(e.source)&&Ex(e.flags)&&qS(e.maxLength)&&qS(e.minLength)}function kC(e){return Z(e,`String`)&&e.type===`string`&&X(e.$id)&&qS(e.minLength)&&qS(e.maxLength)&&YS(e.pattern)&&XS(e.format)}function AC(e){return Z(e,`Symbol`)&&e.type===`symbol`&&X(e.$id)}function jC(e){return Z(e,`TemplateLiteral`)&&e.type===`string`&&Ex(e.pattern)&&e.pattern[0]===`^`&&e.pattern[e.pattern.length-1]===`$`}function MC(e){return Z(e,`This`)&&X(e.$id)&&Ex(e.$ref)}function NC(e){return wx(e)&&Xx in e}function PC(e){return Z(e,`Tuple`)&&e.type===`array`&&X(e.$id)&&Cx(e.minItems)&&Cx(e.maxItems)&&e.minItems===e.maxItems&&(kx(e.items)&&kx(e.additionalItems)&&e.minItems===0||gx(e.items)&&e.items.every(e=>HC(e)))}function FC(e){return Z(e,`Undefined`)&&e.type===`undefined`&&X(e.$id)}function IC(e){return Z(e,`Union`)&&X(e.$id)&&wx(e)&&gx(e.anyOf)&&e.anyOf.every(e=>HC(e))}function LC(e){return Z(e,`Uint8Array`)&&e.type===`Uint8Array`&&X(e.$id)&&qS(e.minByteLength)&&qS(e.maxByteLength)}function RC(e){return Z(e,`Unknown`)&&X(e.$id)}function zC(e){return Z(e,`Unsafe`)}function BC(e){return Z(e,`Void`)&&e.type===`void`&&X(e.$id)}function VC(e){return wx(e)&&J in e&&Ex(e[J])&&!HS.includes(e[J])}function HC(e){return wx(e)&&($S(e)||eC(e)||tC(e)||iC(e)||rC(e)||nC(e)||aC(e)||oC(e)||sC(e)||cC(e)||lC(e)||dC(e)||fC(e)||gC(e)||vC(e)||yC(e)||bC(e)||xC(e)||SC(e)||CC(e)||wC(e)||TC(e)||EC(e)||DC(e)||OC(e)||kC(e)||AC(e)||jC(e)||MC(e)||PC(e)||FC(e)||IC(e)||LC(e)||RC(e)||zC(e)||BC(e)||VC(e))}var UC=`(true|false)`,WC=`(0|[1-9][0-9]*)`,GC=`(.*)`,KC=`(?!.*)`;`${UC}`;var qC=`^${WC}$`,JC=`^${GC}$`,YC=`^${KC}$`;function XC(e,t){return e.includes(t)}function ZC(e){return[...new Set(e)]}function QC(e,t){return e.filter(e=>t.includes(e))}function $C(e,t){return e.reduce((e,t)=>QC(e,t),t)}function ew(e){return e.length===1?e[0]:e.length>1?$C(e.slice(1),e[0]):[]}function tw(e){let t=[];for(let n of e)t.push(...n);return t}function nw(e){return q({[J]:`Any`},e)}function rw(e,t){return q({[J]:`Array`,type:`array`,items:e},t)}function iw(e){return q({[J]:`Argument`,index:e})}function aw(e,t){return q({[J]:`AsyncIterator`,type:`AsyncIterator`,items:e},t)}function ow(e,t,n){return q({[J]:`Computed`,target:e,parameters:t},n)}function sw(e,t){let{[t]:n,...r}=e;return r}function cw(e,t){return t.reduce((e,t)=>sw(e,t),e)}function lw(e){return q({[J]:`Never`,not:{}},e)}function uw(e){return q({[J]:`MappedResult`,properties:e})}function dw(e,t,n){return q({[J]:`Constructor`,type:`Constructor`,parameters:e,returns:t},n)}function fw(e,t,n){return q({[J]:`Function`,type:`Function`,parameters:e,returns:t},n)}function pw(e,t){return q({[J]:`Union`,anyOf:e},t)}function mw(e){return e.some(e=>tS(e))}function hw(e){return e.map(e=>tS(e)?gw(e):e)}function gw(e){return cw(e,[Qx])}function _w(e,t){return mw(e)?rE(pw(hw(e),t)):pw(hw(e),t)}function vw(e,t){return e.length===1?q(e[0],t):e.length===0?lw(t):_w(e,t)}function yw(e,t){return e.length===0?lw(t):e.length===1?q(e[0],t):pw(e,t)}var bw=class extends Yx{};function xw(e){return e.replace(/\\\$/g,`$`).replace(/\\\*/g,`*`).replace(/\\\^/g,`^`).replace(/\\\|/g,`|`).replace(/\\\(/g,`(`).replace(/\\\)/g,`)`)}function Sw(e,t,n){return e[t]===n&&e.charCodeAt(t-1)!==92}function Cw(e,t){return Sw(e,t,`(`)}function ww(e,t){return Sw(e,t,`)`)}function Tw(e,t){return Sw(e,t,`|`)}function Ew(e){if(!(Cw(e,0)&&ww(e,e.length-1)))return!1;let t=0;for(let n=0;n<e.length;n++)if(Cw(e,n)&&(t+=1),ww(e,n)&&--t,t===0&&n!==e.length-1)return!1;return!0}function Dw(e){return e.slice(1,e.length-1)}function Ow(e){let t=0;for(let n=0;n<e.length;n++)if(Cw(e,n)&&(t+=1),ww(e,n)&&--t,Tw(e,n)&&t===0)return!0;return!1}function kw(e){for(let t=0;t<e.length;t++)if(Cw(e,t))return!0;return!1}function Aw(e){let[t,n]=[0,0],r=[];for(let i=0;i<e.length;i++)if(Cw(e,i)&&(t+=1),ww(e,i)&&--t,Tw(e,i)&&t===0){let t=e.slice(n,i);t.length>0&&r.push(Mw(t)),n=i+1}let i=e.slice(n);return i.length>0&&r.push(Mw(i)),r.length===0?{type:`const`,const:``}:r.length===1?r[0]:{type:`or`,expr:r}}function jw(e){function t(e,t){if(!Cw(e,t))throw new bw(`TemplateLiteralParser: Index must point to open parens`);let n=0;for(let r=t;r<e.length;r++)if(Cw(e,r)&&(n+=1),ww(e,r)&&--n,n===0)return[t,r];throw new bw(`TemplateLiteralParser: Unclosed group parens in expression`)}function n(e,t){for(let n=t;n<e.length;n++)if(Cw(e,n))return[t,n];return[t,e.length]}let r=[];for(let i=0;i<e.length;i++)if(Cw(e,i)){let[n,a]=t(e,i),o=e.slice(n,a+1);r.push(Mw(o)),i=a}else{let[t,a]=n(e,i),o=e.slice(t,a);o.length>0&&r.push(Mw(o)),i=a-1}return r.length===0?{type:`const`,const:``}:r.length===1?r[0]:{type:`and`,expr:r}}function Mw(e){return Ew(e)?Mw(Dw(e)):Ow(e)?Aw(e):kw(e)?jw(e):{type:`const`,const:xw(e)}}function Nw(e){return Mw(e.slice(1,e.length-1))}var Pw=class extends Yx{};function Fw(e){return e.type===`or`&&e.expr.length===2&&e.expr[0].type===`const`&&e.expr[0].const===`0`&&e.expr[1].type===`const`&&e.expr[1].const===`[1-9][0-9]*`}function Iw(e){return e.type===`or`&&e.expr.length===2&&e.expr[0].type===`const`&&e.expr[0].const===`true`&&e.expr[1].type===`const`&&e.expr[1].const===`false`}function Lw(e){return e.type===`const`&&e.const===`.*`}function Rw(e){return Fw(e)||Lw(e)?!1:Iw(e)?!0:e.type===`and`||e.type===`or`?e.expr.every(e=>Rw(e)):e.type===`const`||(()=>{throw new Pw(`Unknown expression type`)})()}function zw(e){return Rw(Nw(e.pattern))}var Bw=class extends Yx{};function*Vw(e){if(e.length===1)return yield*e[0];for(let t of e[0])for(let n of Vw(e.slice(1)))yield`${t}${n}`}function*Hw(e){return yield*Vw(e.expr.map(e=>[...Gw(e)]))}function*Uw(e){for(let t of e.expr)yield*Gw(t)}function*Ww(e){return yield e.const}function*Gw(e){return e.type===`and`?yield*Hw(e):e.type===`or`?yield*Uw(e):e.type===`const`?yield*Ww(e):(()=>{throw new Bw(`Unknown expression`)})()}function Kw(e){let t=Nw(e.pattern);return Rw(t)?[...Gw(t)]:[]}function qw(e,t){return q({[J]:`Literal`,const:e,type:typeof e},t)}function Jw(e){return q({[J]:`Boolean`,type:`boolean`},e)}function Yw(e){return q({[J]:`BigInt`,type:`bigint`},e)}function Xw(e){return q({[J]:`Number`,type:`number`},e)}function Zw(e){return q({[J]:`String`,type:`string`},e)}function*Qw(e){let t=e.trim().replace(/"|'/g,``);return t===`boolean`?yield Jw():t===`number`?yield Xw():t===`bigint`?yield Yw():t===`string`?yield Zw():yield(()=>{let e=t.split(`|`).map(e=>qw(e.trim()));return e.length===0?lw():e.length===1?e[0]:vw(e)})()}function*$w(e){if(e[1]!==`{`)return yield*[qw(`$`),...eT(e.slice(1))];for(let t=2;t<e.length;t++)if(e[t]===`}`){let n=Qw(e.slice(2,t)),r=eT(e.slice(t+1));return yield*[...n,...r]}yield qw(e)}function*eT(e){for(let t=0;t<e.length;t++)if(e[t]===`$`)return yield*[qw(e.slice(0,t)),...$w(e.slice(t))];yield qw(e)}function tT(e){return[...eT(e)]}var nT=class extends Yx{};function rT(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function iT(e,t){return AS(e)?e.pattern.slice(1,e.pattern.length-1):FS(e)?`(${e.anyOf.map(e=>iT(e,t)).join(`|`)})`:SS(e)||fS(e)||oS(e)?`${t}${WC}`:OS(e)?`${t}${GC}`:gS(e)?`${t}${rT(e.const.toString())}`:sS(e)?`${t}${UC}`:(()=>{throw new nT(`Unexpected Kind '${e[J]}'`)})()}function aT(e){return`^${e.map(e=>iT(e,``)).join(``)}$`}function oT(e){return vw(Kw(e).map(e=>qw(e)))}function sT(e,t){let n=Ex(e)?aT(tT(e)):aT(e);return q({[J]:`TemplateLiteral`,type:`string`,pattern:n},t)}function cT(e){return Kw(e).map(e=>e.toString())}function lT(e){let t=[];for(let n of e)t.push(...dT(n));return t}function uT(e){return[e.toString()]}function dT(e){return[...new Set(AS(e)?cT(e):FS(e)?lT(e.anyOf):gS(e)?uT(e.const):SS(e)||fS(e)?[`[number]`]:[])]}function fT(e,t,n){let r={};for(let i of Object.getOwnPropertyNames(t))r[i]=ET(e,dT(t[i]),n);return r}function pT(e,t,n){return fT(e,t.properties,n)}function mT(e,t,n){return uw(pT(e,t,n))}function hT(e,t){return e.map(e=>CT(e,t))}function gT(e){return e.filter(e=>!yS(e))}function _T(e,t){return fE(gT(hT(e,t)))}function vT(e){return e.some(e=>yS(e))?[]:e}function yT(e,t){return vw(vT(hT(e,t)))}function bT(e,t){return t in e?e[t]:t===`[number]`?vw(e):lw()}function xT(e,t){return t===`[number]`?e:lw()}function ST(e,t){return t in e?e[t]:lw()}function CT(e,t){return pS(e)?_T(e.allOf,t):FS(e)?yT(e.anyOf,t):NS(e)?bT(e.items??[],t):iS(e)?xT(e.items,t):CS(e)?ST(e.properties,t):lw()}function wT(e,t){return t.map(t=>CT(e,t))}function TT(e,t){return vw(wT(e,t))}function ET(e,t,n){if(ES(e)||ES(t)){if(!VS(e)||!VS(t))throw new Yx(`Index types using Ref parameters require both Type and Key to be of TSchema`);return ow(`Index`,[e,t])}return vS(t)?mT(e,t,n):_S(t)?AT(e,t,n):q(VS(t)?TT(e,dT(t)):TT(e,t),n)}function DT(e,t,n){return{[t]:ET(e,[t],Ix(n))}}function OT(e,t,n){return t.reduce((t,r)=>({...t,...DT(e,r,n)}),{})}function kT(e,t,n){return OT(e,t.keys,n)}function AT(e,t,n){return uw(kT(e,t,n))}function jT(e,t){return q({[J]:`Iterator`,type:`Iterator`,items:e},t)}function MT(e){return globalThis.Object.keys(e).filter(t=>!tS(e[t]))}function NT(e,t){let n=MT(e);return q(n.length>0?{[J]:`Object`,type:`object`,required:n,properties:e}:{[J]:`Object`,type:`object`,properties:e},t)}var PT=NT;function FT(e,t){return q({[J]:`Promise`,type:`Promise`,item:e},t)}function IT(e){return q(cw(e,[Zx]))}function LT(e){return q({...e,[Zx]:`Readonly`})}function RT(e,t){return t===!1?IT(e):LT(e)}function zT(e,t){let n=t??!0;return vS(e)?HT(e,n):RT(e,n)}function BT(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=zT(e[r],t);return n}function VT(e,t){return BT(e.properties,t)}function HT(e,t){return uw(VT(e,t))}function UT(e,t){return q(e.length>0?{[J]:`Tuple`,type:`array`,items:e,additionalItems:!1,minItems:e.length,maxItems:e.length}:{[J]:`Tuple`,type:`array`,minItems:e.length,maxItems:e.length},t)}function WT(e,t){return e in t?ZT(e,t[e]):uw(t)}function GT(e){return{[e]:qw(e)}}function KT(e){let t={};for(let n of e)t[n]=qw(n);return t}function qT(e,t){return XC(t,e)?GT(e):KT(t)}function JT(e,t){return WT(e,qT(e,t))}function YT(e,t){return t.map(t=>ZT(e,t))}function XT(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=ZT(e,t[r]);return n}function ZT(e,t){let n={...t};return tS(t)?rE(ZT(e,cw(t,[Qx]))):eS(t)?zT(ZT(e,cw(t,[Zx]))):vS(t)?WT(e,t.properties):_S(t)?JT(e,t.keys):lS(t)?dw(YT(e,t.parameters),ZT(e,t.returns),n):dS(t)?fw(YT(e,t.parameters),ZT(e,t.returns),n):aS(t)?aw(ZT(e,t.items),n):mS(t)?jT(ZT(e,t.items),n):pS(t)?pE(YT(e,t.allOf),n):FS(t)?yw(YT(e,t.anyOf),n):NS(t)?UT(YT(e,t.items??[]),n):CS(t)?PT(XT(e,t.properties),n):iS(t)?rw(ZT(e,t.items),n):wS(t)?FT(ZT(e,t.item),n):t}function QT(e,t){let n={};for(let r of e)n[r]=ZT(r,t);return n}function $T(e,t,n){let r=VS(e)?dT(e):e;return PT(QT(r,t({[J]:`MappedKey`,keys:r})),n)}function eE(e){return q(cw(e,[Qx]))}function tE(e){return q({...e,[Qx]:`Optional`})}function nE(e,t){return t===!1?eE(e):tE(e)}function rE(e,t){let n=t??!0;return vS(e)?oE(e,n):nE(e,n)}function iE(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=rE(e[r],t);return n}function aE(e,t){return iE(e.properties,t)}function oE(e,t){return uw(aE(e,t))}function sE(e,t={}){let n=e.every(e=>CS(e)),r=VS(t.unevaluatedProperties)?{unevaluatedProperties:t.unevaluatedProperties}:{};return q(t.unevaluatedProperties===!1||VS(t.unevaluatedProperties)||n?{...r,[J]:`Intersect`,type:`object`,allOf:e}:{...r,[J]:`Intersect`,allOf:e},t)}function cE(e){return e.every(e=>tS(e))}function lE(e){return cw(e,[Qx])}function uE(e){return e.map(e=>tS(e)?lE(e):e)}function dE(e,t){return cE(e)?rE(sE(uE(e),t)):sE(uE(e),t)}function fE(e,t={}){if(e.length===1)return q(e[0],t);if(e.length===0)return lw(t);if(e.some(e=>MS(e)))throw Error(`Cannot intersect transform types`);return dE(e,t)}function pE(e,t){if(e.length===1)return q(e[0],t);if(e.length===0)return lw(t);if(e.some(e=>MS(e)))throw Error(`Cannot intersect transform types`);return sE(e,t)}function mE(...e){let[t,n]=typeof e[0]==`string`?[e[0],e[1]]:[e[0].$id,e[1]];if(typeof t!=`string`)throw new Yx(`Ref: $ref must be a string`);return q({[J]:`Ref`,$ref:t},n)}function hE(e,t){return ow(`Awaited`,[ow(e,t)])}function gE(e){return ow(`Awaited`,[mE(e)])}function _E(e){return pE(bE(e))}function vE(e){return yw(bE(e))}function yE(e){return xE(e)}function bE(e){return e.map(e=>xE(e))}function xE(e,t){return q(cS(e)?hE(e.target,e.parameters):pS(e)?_E(e.allOf):FS(e)?vE(e.anyOf):wS(e)?yE(e.item):ES(e)?gE(e.$ref):e,t)}function SE(e){let t=[];for(let n of e)t.push(kE(n));return t}function CE(e){return tw(SE(e))}function wE(e){return ew(SE(e))}function TE(e){return e.map((e,t)=>t.toString())}function EE(e){return[`[number]`]}function DE(e){return globalThis.Object.getOwnPropertyNames(e)}function OE(e){return AE?globalThis.Object.getOwnPropertyNames(e).map(e=>e[0]===`^`&&e[e.length-1]===`$`?e.slice(1,e.length-1):e):[]}function kE(e){return pS(e)?CE(e.allOf):FS(e)?wE(e.anyOf):NS(e)?TE(e.items??[]):iS(e)?EE(e.items):CS(e)?DE(e.properties):TS(e)?OE(e.patternProperties):[]}var AE=!1;function jE(e,t){return ow(`KeyOf`,[ow(e,t)])}function ME(e){return ow(`KeyOf`,[mE(e)])}function NE(e,t){return q(vw(PE(kE(e))),t)}function PE(e){return e.map(e=>e===`[number]`?Xw():qw(e))}function FE(e,t){return cS(e)?jE(e.target,e.parameters):ES(e)?ME(e.$ref):vS(e)?RE(e,t):NE(e,t)}function IE(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=FE(e[r],Ix(t));return n}function LE(e,t){return IE(e.properties,t)}function RE(e,t){return uw(LE(e,t))}function zE(e){let t=[];for(let n of e)t.push(...kE(n));return ZC(t)}function BE(e){return e.filter(e=>!yS(e))}function VE(e,t){let n=[];for(let r of e)n.push(...wT(r,[t]));return BE(n)}function HE(e,t){let n={};for(let r of t)n[r]=fE(VE(e,r));return n}function UE(e,t){return PT(HE(e,zE(e)),t)}function WE(e){return q({[J]:`Date`,type:`Date`},e)}function GE(e){return q({[J]:`Null`,type:`null`},e)}function KE(e){return q({[J]:`Symbol`,type:`symbol`},e)}function qE(e){return q({[J]:`Undefined`,type:`undefined`},e)}function JE(e){return q({[J]:`Uint8Array`,type:`Uint8Array`},e)}function YE(e){return q({[J]:`Unknown`},e)}function XE(e){return e.map(e=>$E(e,!1))}function ZE(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=zT($E(e[n],!1));return t}function QE(e,t){return t===!0?e:zT(e)}function $E(e,t){return hx(e)||xx(e)?QE(nw(),t):gx(e)?zT(UT(XE(e))):Ox(e)?JE():yx(e)?WE():wx(e)?QE(PT(ZE(e)),t):bx(e)?QE(fw([],YE()),t):kx(e)?qE():Sx(e)?GE():Dx(e)?KE():_x(e)?Yw():Cx(e)||vx(e)||Ex(e)?qw(e):PT({})}function eD(e,t){return q($E(e,!0),t)}function tD(e,t){return lS(e)?UT(e.parameters,t):lw(t)}function nD(e,t){if(kx(e))throw Error(`Enum undefined or empty`);let n=globalThis.Object.getOwnPropertyNames(e).filter(e=>isNaN(e)).map(t=>e[t]);return yw([...new Set(n)].map(e=>qw(e)),{...t,[$x]:`Enum`})}var rD=class extends Yx{},Q;(function(e){e[e.Union=0]=`Union`,e[e.True=1]=`True`,e[e.False=2]=`False`})(Q||={});function iD(e){return e===Q.False?e:Q.True}function aD(e){throw new rD(e)}function oD(e){return bC(e)||dC(e)||IC(e)||RC(e)||$S(e)}function sD(e,t){return bC(t)?TD(e,t):dC(t)?xD(e,t):IC(t)?cO(e,t):RC(t)?uO(e,t):$S(t)?cD(e,t):aD(`StructuralRight`)}function cD(e,t){return Q.True}function lD(e,t){return dC(t)?xD(e,t):IC(t)&&t.anyOf.some(e=>$S(e)||RC(e))?Q.True:IC(t)?Q.Union:RC(t)||$S(t)?Q.True:Q.Union}function uD(e,t){return RC(e)?Q.False:$S(e)?Q.Union:bC(e)?Q.True:Q.False}function dD(e,t){return wC(t)&&HD(t)?Q.True:oD(t)?sD(e,t):tC(t)?iD(mO(e.items,t.items)):Q.False}function fD(e,t){return oD(t)?sD(e,t):nC(t)?iD(mO(e.items,t.items)):Q.False}function pD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):rC(t)?Q.True:Q.False}function mD(e,t){return hC(e)||iC(e)?Q.True:Q.False}function hD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):iC(t)?Q.True:Q.False}function gD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):oC(t)?e.parameters.length>t.parameters.length?Q.False:e.parameters.every((e,n)=>iD(mO(t.parameters[n],e))===Q.True)?iD(mO(e.returns,t.returns)):Q.False:Q.False}function _D(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):sC(t)?Q.True:Q.False}function vD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):cC(t)?e.parameters.length>t.parameters.length?Q.False:e.parameters.every((e,n)=>iD(mO(t.parameters[n],e))===Q.True)?iD(mO(e.returns,t.returns)):Q.False:Q.False}function yD(e,t){return gC(e)&&Cx(e.const)||CC(e)||lC(e)?Q.True:Q.False}function bD(e,t){return lC(t)||CC(t)?Q.True:oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):Q.False}function xD(e,t){return t.allOf.every(t=>mO(e,t)===Q.True)?Q.True:Q.False}function SD(e,t){return e.allOf.some(e=>mO(e,t)===Q.True)?Q.True:Q.False}function CD(e,t){return oD(t)?sD(e,t):fC(t)?iD(mO(e.items,t.items)):Q.False}function wD(e,t){return gC(t)&&t.const===e.const?Q.True:oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):kC(t)?$D(e,t):CC(t)?AD(e,t):lC(t)?yD(e,t):iC(t)?mD(e,t):Q.False}function TD(e,t){return Q.False}function ED(e,t){return Q.True}function DD(e){let[t,n]=[e,0];for(;xC(t);)t=t.not,n+=1;return n%2==0?t:YE()}function OD(e,t){return xC(e)?mO(DD(e),t):xC(t)?mO(e,DD(t)):aD(`Invalid fallthrough for Not`)}function kD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):SC(t)?Q.True:Q.False}function AD(e,t){return mC(e)||CC(e)||lC(e)?Q.True:Q.False}function jD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):lC(t)||CC(t)?Q.True:Q.False}function MD(e,t){return Object.getOwnPropertyNames(e.properties).length===t}function ND(e){return HD(e)}function PD(e){return MD(e,0)||MD(e,1)&&`description`in e.properties&&IC(e.properties.description)&&e.properties.description.anyOf.length===2&&(kC(e.properties.description.anyOf[0])&&FC(e.properties.description.anyOf[1])||kC(e.properties.description.anyOf[1])&&FC(e.properties.description.anyOf[0]))}function FD(e){return MD(e,0)}function ID(e){return MD(e,0)}function LD(e){return MD(e,0)}function RD(e){return MD(e,0)}function zD(e){return HD(e)}function BD(e){let t=Xw();return MD(e,0)||MD(e,1)&&`length`in e.properties&&iD(mO(e.properties.length,t))===Q.True}function VD(e){return MD(e,0)}function HD(e){let t=Xw();return MD(e,0)||MD(e,1)&&`length`in e.properties&&iD(mO(e.properties.length,t))===Q.True}function UD(e){let t=fw([nw()],nw());return MD(e,0)||MD(e,1)&&`then`in e.properties&&iD(mO(e.properties.then,t))===Q.True}function WD(e,t){return mO(e,t)===Q.False||QS(e)&&!QS(t)?Q.False:Q.True}function GD(e,t){return RC(e)?Q.False:$S(e)?Q.Union:bC(e)||pC(e)&&ND(t)||mC(e)&&FD(t)||hC(e)&&ID(t)||AC(e)&&PD(t)||rC(e)&&LD(t)||kC(e)&&ND(t)||AC(e)&&PD(t)||CC(e)&&FD(t)||lC(e)&&FD(t)||iC(e)&&ID(t)||LC(e)&&zD(t)||sC(e)&&RD(t)||oC(e)&&VD(t)||cC(e)&&BD(t)?Q.True:EC(e)&&kC(JD(e))?t[$x]===`Record`?Q.True:Q.False:EC(e)&&CC(JD(e))&&MD(t,0)?Q.True:Q.False}function KD(e,t){return oD(t)?sD(e,t):EC(t)?XD(e,t):wC(t)?(()=>{for(let n of Object.getOwnPropertyNames(t.properties)){if(!(n in e.properties)&&!QS(t.properties[n]))return Q.False;if(QS(t.properties[n]))return Q.True;if(WD(e.properties[n],t.properties[n])===Q.False)return Q.False}return Q.True})():Q.False}function qD(e,t){return oD(t)?sD(e,t):wC(t)&&UD(t)?Q.True:TC(t)?iD(mO(e.item,t.item)):Q.False}function JD(e){return qC in e.patternProperties?Xw():JC in e.patternProperties?Zw():aD(`Unknown record key pattern`)}function YD(e){return qC in e.patternProperties?e.patternProperties[qC]:JC in e.patternProperties?e.patternProperties[JC]:aD(`Unable to get record value schema`)}function XD(e,t){let[n,r]=[JD(t),YD(t)];return pC(e)&&CC(n)&&iD(mO(e,r))===Q.True?Q.True:LC(e)&&CC(n)||kC(e)&&CC(n)||tC(e)&&CC(n)?mO(e,r):wC(e)?(()=>{for(let t of Object.getOwnPropertyNames(e.properties))if(WD(r,e.properties[t])===Q.False)return Q.False;return Q.True})():Q.False}function ZD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?mO(YD(e),YD(t)):Q.False}function QD(e,t){return mO(OC(e)?Zw():e,OC(t)?Zw():t)}function $D(e,t){return gC(e)&&Ex(e.const)||kC(e)?Q.True:Q.False}function eO(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):kC(t)?Q.True:Q.False}function tO(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):AC(t)?Q.True:Q.False}function nO(e,t){return jC(e)?mO(oT(e),t):jC(t)?mO(e,oT(t)):aD(`Invalid fallthrough for TemplateLiteral`)}function rO(e,t){return tC(t)&&e.items!==void 0&&e.items.every(e=>mO(e,t.items)===Q.True)}function iO(e,t){return bC(e)?Q.True:RC(e)?Q.False:$S(e)?Q.Union:Q.False}function aO(e,t){return oD(t)?sD(e,t):wC(t)&&HD(t)||tC(t)&&rO(e,t)?Q.True:PC(t)?kx(e.items)&&!kx(t.items)||!kx(e.items)&&kx(t.items)?Q.False:kx(e.items)&&!kx(t.items)||e.items.every((e,n)=>mO(e,t.items[n])===Q.True)?Q.True:Q.False:Q.False}function oO(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):LC(t)?Q.True:Q.False}function sO(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):BC(t)?fO(e,t):FC(t)?Q.True:Q.False}function cO(e,t){return t.anyOf.some(t=>mO(e,t)===Q.True)?Q.True:Q.False}function lO(e,t){return e.anyOf.every(e=>mO(e,t)===Q.True)?Q.True:Q.False}function uO(e,t){return Q.True}function dO(e,t){return bC(t)?TD(e,t):dC(t)?xD(e,t):IC(t)?cO(e,t):$S(t)?cD(e,t):kC(t)?$D(e,t):CC(t)?AD(e,t):lC(t)?yD(e,t):iC(t)?mD(e,t):tC(t)?uD(e,t):PC(t)?iO(e,t):wC(t)?GD(e,t):RC(t)?Q.True:Q.False}function fO(e,t){return FC(e)||FC(e)?Q.True:Q.False}function pO(e,t){return dC(t)?xD(e,t):IC(t)?cO(e,t):RC(t)?uO(e,t):$S(t)?cD(e,t):wC(t)?GD(e,t):BC(t)?Q.True:Q.False}function mO(e,t){return jC(e)||jC(t)?nO(e,t):OC(e)||OC(t)?QD(e,t):xC(e)||xC(t)?OD(e,t):$S(e)?lD(e,t):tC(e)?dD(e,t):rC(e)?pD(e,t):iC(e)?hD(e,t):nC(e)?fD(e,t):oC(e)?gD(e,t):sC(e)?_D(e,t):cC(e)?vD(e,t):lC(e)?bD(e,t):dC(e)?SD(e,t):fC(e)?CD(e,t):gC(e)?wD(e,t):bC(e)?ED(e,t):SC(e)?kD(e,t):CC(e)?jD(e,t):wC(e)?KD(e,t):EC(e)?ZD(e,t):kC(e)?eO(e,t):AC(e)?tO(e,t):PC(e)?aO(e,t):TC(e)?qD(e,t):LC(e)?oO(e,t):FC(e)?sO(e,t):IC(e)?lO(e,t):RC(e)?dO(e,t):BC(e)?pO(e,t):aD(`Unknown left type operand '${e[J]}'`)}function hO(e,t){return mO(e,t)}function gO(e,t,n,r,i){let a={};for(let o of globalThis.Object.getOwnPropertyNames(e))a[o]=bO(e[o],t,n,r,Ix(i));return a}function _O(e,t,n,r,i){return gO(e.properties,t,n,r,i)}function vO(e,t,n,r,i){return uw(_O(e,t,n,r,i))}function yO(e,t,n,r){let i=hO(e,t);return i===Q.Union?yw([n,r]):i===Q.True?n:r}function bO(e,t,n,r,i){return vS(e)?vO(e,t,n,r,i):_S(e)?q(wO(e,t,n,r,i)):q(yO(e,t,n,r),i)}function xO(e,t,n,r,i){return{[e]:bO(qw(e),t,n,r,Ix(i))}}function SO(e,t,n,r,i){return e.reduce((e,a)=>({...e,...xO(a,t,n,r,i)}),{})}function CO(e,t,n,r,i){return SO(e.keys,t,n,r,i)}function wO(e,t,n,r,i){return uw(CO(e,t,n,r,i))}function TO(e,t){return DO(oT(e),t)}function EO(e,t){let n=e.filter(e=>hO(e,t)===Q.False);return n.length===1?n[0]:yw(n)}function DO(e,t,n={}){return AS(e)?q(TO(e,t),n):vS(e)?q(AO(e,t),n):q(FS(e)?EO(e.anyOf,t):hO(e,t)===Q.False?e:lw(),n)}function OO(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=DO(e[r],t);return n}function kO(e,t){return OO(e.properties,t)}function AO(e,t){return uw(kO(e,t))}function jO(e,t){return NO(oT(e),t)}function MO(e,t){let n=e.filter(e=>hO(e,t)!==Q.False);return n.length===1?n[0]:yw(n)}function NO(e,t,n){return AS(e)?q(jO(e,t),n):vS(e)?q(IO(e,t),n):q(FS(e)?MO(e.anyOf,t):hO(e,t)===Q.False?lw():e,n)}function PO(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=NO(e[r],t);return n}function FO(e,t){return PO(e.properties,t)}function IO(e,t){return uw(FO(e,t))}function LO(e,t){return lS(e)?q(e.returns,t):lw(t)}function RO(e){return zT(rE(e))}function zO(e,t,n){return q({[J]:`Record`,type:`object`,patternProperties:{[e]:t}},n)}function BO(e,t,n){let r={};for(let n of e)r[n]=t;return PT(r,{...n,[$x]:`Record`})}function VO(e,t,n){return zw(e)?BO(dT(e),t,n):zO(e.pattern,t,n)}function HO(e,t,n){return BO(dT(yw(e)),t,n)}function UO(e,t,n){return BO([e.toString()],t,n)}function WO(e,t,n){return zO(e.source,t,n)}function GO(e,t,n){return zO(kx(e.pattern)?JC:e.pattern,t,n)}function KO(e,t,n){return zO(JC,t,n)}function qO(e,t,n){return zO(YC,t,n)}function JO(e,t,n){return PT({true:t,false:t},n)}function YO(e,t,n){return zO(qC,t,n)}function XO(e,t,n){return zO(qC,t,n)}function ZO(e,t,n={}){return FS(e)?HO(e.anyOf,t,n):AS(e)?VO(e,t,n):gS(e)?UO(e.const,t,n):sS(e)?JO(e,t,n):fS(e)?YO(e,t,n):SS(e)?XO(e,t,n):DS(e)?WO(e,t,n):OS(e)?GO(e,t,n):nS(e)?KO(e,t,n):yS(e)?qO(e,t,n):lw(n)}function QO(e){return globalThis.Object.getOwnPropertyNames(e.patternProperties)[0]}function $O(e){let t=QO(e);return t===JC?Zw():t===qC?Xw():Zw({pattern:t})}function ek(e){return e.patternProperties[QO(e)]}function tk(e,t){return t.parameters=hk(e,t.parameters),t.returns=gk(e,t.returns),t}function nk(e,t){return t.parameters=hk(e,t.parameters),t.returns=gk(e,t.returns),t}function rk(e,t){return t.allOf=hk(e,t.allOf),t}function ik(e,t){return t.anyOf=hk(e,t.anyOf),t}function ak(e,t){return kx(t.items)||(t.items=hk(e,t.items)),t}function ok(e,t){return t.items=gk(e,t.items),t}function sk(e,t){return t.items=gk(e,t.items),t}function ck(e,t){return t.items=gk(e,t.items),t}function lk(e,t){return t.item=gk(e,t.item),t}function uk(e,t){let n=mk(e,t.properties);return{...t,...PT(n)}}function dk(e,t){let n=ZO(gk(e,$O(t)),gk(e,ek(t)));return{...t,...n}}function fk(e,t){return t.index in e?e[t.index]:YE()}function pk(e,t){let n=eS(t),r=tS(t),i=gk(e,t);return n&&r?RO(i):n&&!r?zT(i):!n&&r?rE(i):i}function mk(e,t){return globalThis.Object.getOwnPropertyNames(t).reduce((n,r)=>({...n,[r]:pk(e,t[r])}),{})}function hk(e,t){return t.map(t=>gk(e,t))}function gk(e,t){return lS(t)?tk(e,t):dS(t)?nk(e,t):pS(t)?rk(e,t):FS(t)?ik(e,t):NS(t)?ak(e,t):iS(t)?ok(e,t):aS(t)?sk(e,t):mS(t)?ck(e,t):wS(t)?lk(e,t):CS(t)?uk(e,t):TS(t)?dk(e,t):rS(t)?fk(e,t):t}function _k(e,t){return gk(t,Lx(e))}function vk(e){return q({[J]:`Integer`,type:`integer`},e)}function yk(e,t,n){return{[e]:Ak(qw(e),t,Ix(n))}}function bk(e,t,n){return e.reduce((e,r)=>({...e,...yk(r,t,n)}),{})}function xk(e,t,n){return bk(e.keys,t,n)}function Sk(e,t,n){return uw(xk(e,t,n))}function Ck(e){let[t,n]=[e.slice(0,1),e.slice(1)];return[t.toLowerCase(),n].join(``)}function wk(e){let[t,n]=[e.slice(0,1),e.slice(1)];return[t.toUpperCase(),n].join(``)}function Tk(e){return e.toUpperCase()}function Ek(e){return e.toLowerCase()}function Dk(e,t,n){let r=Nw(e.pattern);return Rw(r)?sT([yw(kk([...Gw(r)].map(e=>qw(e)),t))],n):{...e,pattern:Ok(e.pattern,t)}}function Ok(e,t){return typeof e==`string`?t===`Uncapitalize`?Ck(e):t===`Capitalize`?wk(e):t===`Uppercase`?Tk(e):t===`Lowercase`?Ek(e):e:e.toString()}function kk(e,t){return e.map(e=>Ak(e,t))}function Ak(e,t,n={}){return _S(e)?Sk(e,t,n):AS(e)?Dk(e,t,n):FS(e)?yw(kk(e.anyOf,t),n):gS(e)?qw(Ok(e.const,t),n):q(e,n)}function jk(e,t={}){return Ak(e,`Capitalize`,t)}function Mk(e,t={}){return Ak(e,`Lowercase`,t)}function Nk(e,t={}){return Ak(e,`Uncapitalize`,t)}function Pk(e,t={}){return Ak(e,`Uppercase`,t)}function Fk(e,t,n){let r={};for(let i of globalThis.Object.getOwnPropertyNames(e))r[i]=Gk(e[i],t,Ix(n));return r}function Ik(e,t,n){return Fk(e.properties,t,n)}function Lk(e,t,n){return uw(Ik(e,t,n))}function Rk(e,t){return e.map(e=>Wk(e,t))}function zk(e,t){return e.map(e=>Wk(e,t))}function Bk(e,t){let{[t]:n,...r}=e;return r}function Vk(e,t){return t.reduce((e,t)=>Bk(e,t),e)}function Hk(e,t,n){let r=cw(e,[Xx,`$id`,`required`,`properties`]);return PT(Vk(n,t),r)}function Uk(e){return yw(e.reduce((e,t)=>hS(t)?[...e,qw(t)]:e,[]))}function Wk(e,t){return pS(e)?pE(Rk(e.allOf,t)):FS(e)?yw(zk(e.anyOf,t)):CS(e)?Hk(e,t,e.properties):PT({})}function Gk(e,t,n){let r=gx(t)?Uk(t):t,i=VS(t)?dT(t):t,a=ES(e),o=ES(t);return vS(e)?Lk(e,i,n):_S(t)?Yk(e,t,n):a&&o||!a&&o||a&&!o?ow(`Omit`,[e,r],n):q({...Wk(e,i),...n})}function Kk(e,t,n){return{[t]:Gk(e,[t],Ix(n))}}function qk(e,t,n){return t.reduce((t,r)=>({...t,...Kk(e,r,n)}),{})}function Jk(e,t,n){return qk(e,t.keys,n)}function Yk(e,t,n){return uw(Jk(e,t,n))}function Xk(e,t,n){let r={};for(let i of globalThis.Object.getOwnPropertyNames(e))r[i]=aA(e[i],t,Ix(n));return r}function Zk(e,t,n){return Xk(e.properties,t,n)}function Qk(e,t,n){return uw(Zk(e,t,n))}function $k(e,t){return e.map(e=>iA(e,t))}function eA(e,t){return e.map(e=>iA(e,t))}function tA(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function nA(e,t,n){let r=cw(e,[Xx,`$id`,`required`,`properties`]);return PT(tA(n,t),r)}function rA(e){return yw(e.reduce((e,t)=>hS(t)?[...e,qw(t)]:e,[]))}function iA(e,t){return pS(e)?pE($k(e.allOf,t)):FS(e)?yw(eA(e.anyOf,t)):CS(e)?nA(e,t,e.properties):PT({})}function aA(e,t,n){let r=gx(t)?rA(t):t,i=VS(t)?dT(t):t,a=ES(e),o=ES(t);return vS(e)?Qk(e,i,n):_S(t)?lA(e,t,n):a&&o||!a&&o||a&&!o?ow(`Pick`,[e,r],n):q({...iA(e,i),...n})}function oA(e,t,n){return{[t]:aA(e,[t],Ix(n))}}function sA(e,t,n){return t.reduce((t,r)=>({...t,...oA(e,r,n)}),{})}function cA(e,t,n){return sA(e,t.keys,n)}function lA(e,t,n){return uw(cA(e,t,n))}function uA(e,t){return ow(`Partial`,[ow(e,t)])}function dA(e){return ow(`Partial`,[mE(e)])}function fA(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=rE(e[n]);return t}function pA(e,t){let n=cw(e,[Xx,`$id`,`required`,`properties`]);return PT(fA(t),n)}function mA(e){return e.map(e=>hA(e))}function hA(e){return cS(e)?uA(e.target,e.parameters):ES(e)?dA(e.$ref):pS(e)?pE(mA(e.allOf)):FS(e)?yw(mA(e.anyOf)):CS(e)?pA(e,e.properties):oS(e)||sS(e)||fS(e)||gS(e)||xS(e)||SS(e)||OS(e)||kS(e)||PS(e)?e:PT({})}function gA(e,t){return vS(e)?yA(e,t):q({...hA(e),...t})}function _A(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=gA(e[r],Ix(t));return n}function vA(e,t){return _A(e.properties,t)}function yA(e,t){return uw(vA(e,t))}function bA(e,t){return ow(`Required`,[ow(e,t)])}function xA(e){return ow(`Required`,[mE(e)])}function SA(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=cw(e[n],[Qx]);return t}function CA(e,t){let n=cw(e,[Xx,`$id`,`required`,`properties`]);return PT(SA(t),n)}function wA(e){return e.map(e=>TA(e))}function TA(e){return cS(e)?bA(e.target,e.parameters):ES(e)?xA(e.$ref):pS(e)?pE(wA(e.allOf)):FS(e)?yw(wA(e.anyOf)):CS(e)?CA(e,e.properties):oS(e)||sS(e)||fS(e)||gS(e)||xS(e)||SS(e)||OS(e)||kS(e)||PS(e)?e:PT({})}function EA(e,t){return vS(e)?kA(e,t):q({...TA(e),...t})}function DA(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=EA(e[r],t);return n}function OA(e,t){return DA(e.properties,t)}function kA(e,t){return uw(OA(e,t))}function AA(e,t){return t.map(t=>ES(t)?jA(e,t.$ref):QA(e,t))}function jA(e,t){return t in e?ES(e[t])?jA(e,e[t].$ref):QA(e,e[t]):lw()}function MA(e){return xE(e[0])}function NA(e){return ET(e[0],e[1])}function PA(e){return FE(e[0])}function FA(e){return gA(e[0])}function IA(e){return Gk(e[0],e[1])}function LA(e){return aA(e[0],e[1])}function RA(e){return EA(e[0])}function zA(e,t,n){let r=AA(e,n);return t===`Awaited`?MA(r):t===`Index`?NA(r):t===`KeyOf`?PA(r):t===`Partial`?FA(r):t===`Omit`?IA(r):t===`Pick`?LA(r):t===`Required`?RA(r):lw()}function BA(e,t){return rw(QA(e,t))}function VA(e,t){return aw(QA(e,t))}function HA(e,t,n){return dw(ZA(e,t),QA(e,n))}function UA(e,t,n){return fw(ZA(e,t),QA(e,n))}function WA(e,t){return pE(ZA(e,t))}function GA(e,t){return jT(QA(e,t))}function KA(e,t){return PT(globalThis.Object.keys(t).reduce((n,r)=>({...n,[r]:QA(e,t[r])}),{}))}function qA(e,t){let[n,r]=[QA(e,ek(t)),QO(t)],i=Lx(t);return i.patternProperties[r]=n,i}function JA(e,t){return ES(t)?{...jA(e,t.$ref),[Xx]:t[Xx]}:t}function YA(e,t){return UT(ZA(e,t))}function XA(e,t){return yw(ZA(e,t))}function ZA(e,t){return t.map(t=>QA(e,t))}function QA(e,t){return tS(t)?q(QA(e,cw(t,[Qx])),t):eS(t)?q(QA(e,cw(t,[Zx])),t):MS(t)?q(JA(e,t),t):iS(t)?q(BA(e,t.items),t):aS(t)?q(VA(e,t.items),t):cS(t)?q(zA(e,t.target,t.parameters)):lS(t)?q(HA(e,t.parameters,t.returns),t):dS(t)?q(UA(e,t.parameters,t.returns),t):pS(t)?q(WA(e,t.allOf),t):mS(t)?q(GA(e,t.items),t):CS(t)?q(KA(e,t.properties),t):TS(t)?q(qA(e,t)):NS(t)?q(YA(e,t.items||[]),t):FS(t)?q(XA(e,t.anyOf),t):t}function $A(e,t){return t in e?QA(e,e[t]):lw()}function ej(e){return globalThis.Object.getOwnPropertyNames(e).reduce((t,n)=>({...t,[n]:$A(e,n)}),{})}var tj=class{constructor(e){let t=ej(e),n=this.WithIdentifiers(t);this.$defs=n}Import(e,t){let n={...this.$defs,[e]:q(this.$defs[e],t)};return q({[J]:`Import`,$defs:n,$ref:e})}WithIdentifiers(e){return globalThis.Object.getOwnPropertyNames(e).reduce((t,n)=>({...t,[n]:{...e[n],$id:n}}),{})}};function nj(e){return new tj(e)}function rj(e,t){return q({[J]:`Not`,not:e},t)}function ij(e,t){return dS(e)?UT(e.parameters,t):lw()}var aj=0;function oj(e,t={}){kx(t.$id)&&(t.$id=`T${aj++}`);let n=Lx(e({[J]:`This`,$ref:`${t.$id}`}));return n.$id=t.$id,q({[$x]:`Recursive`,...n},t)}function sj(e,t){let n=Ex(e)?new globalThis.RegExp(e):e;return q({[J]:`RegExp`,type:`RegExp`,source:n.source,flags:n.flags},t)}function cj(e){return pS(e)?e.allOf:FS(e)?e.anyOf:NS(e)?e.items??[]:[]}function lj(e){return cj(e)}function uj(e,t){return dS(e)?q(e.returns,t):lw(t)}var dj=class{constructor(e){this.schema=e}Decode(e){return new fj(this.schema,e)}},fj=class{constructor(e,t){this.schema=e,this.decode=t}EncodeTransform(e,t){let n={Encode:n=>t[Xx].Encode(e(n)),Decode:e=>this.decode(t[Xx].Decode(e))};return{...t,[Xx]:n}}EncodeSchema(e,t){let n={Decode:this.decode,Encode:e};return{...t,[Xx]:n}}Encode(e){return MS(this.schema)?this.EncodeTransform(e,this.schema):this.EncodeSchema(e,this.schema)}};function pj(e){return new dj(e)}function mj(e={}){return q({[J]:e[J]??`Unsafe`},e)}function hj(e){return q({[J]:`Void`,type:`void`},e)}var $=t({Any:()=>nw,Argument:()=>iw,Array:()=>rw,AsyncIterator:()=>aw,Awaited:()=>xE,BigInt:()=>Yw,Boolean:()=>Jw,Capitalize:()=>jk,Composite:()=>UE,Const:()=>eD,Constructor:()=>dw,ConstructorParameters:()=>tD,Date:()=>WE,Enum:()=>nD,Exclude:()=>DO,Extends:()=>bO,Extract:()=>NO,Function:()=>fw,Index:()=>ET,InstanceType:()=>LO,Instantiate:()=>_k,Integer:()=>vk,Intersect:()=>pE,Iterator:()=>jT,KeyOf:()=>FE,Literal:()=>qw,Lowercase:()=>Mk,Mapped:()=>$T,Module:()=>nj,Never:()=>lw,Not:()=>rj,Null:()=>GE,Number:()=>Xw,Object:()=>PT,Omit:()=>Gk,Optional:()=>rE,Parameters:()=>ij,Partial:()=>gA,Pick:()=>aA,Promise:()=>FT,Readonly:()=>zT,ReadonlyOptional:()=>RO,Record:()=>ZO,Recursive:()=>oj,Ref:()=>mE,RegExp:()=>sj,Required:()=>EA,Rest:()=>lj,ReturnType:()=>uj,String:()=>Zw,Symbol:()=>KE,TemplateLiteral:()=>sT,Transform:()=>pj,Tuple:()=>UT,Uint8Array:()=>JE,Uncapitalize:()=>Nk,Undefined:()=>qE,Union:()=>yw,Unknown:()=>YE,Unsafe:()=>mj,Uppercase:()=>Pk,Void:()=>hj}),gj={additionalProperties:!1},_j=$.String({pattern:`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,minLength:36,maxLength:36}),vj=$.String({pattern:`^[a-z0-9][a-z0-9-]{0,31}(?![\\s\\S])`,minLength:1,maxLength:32}),yj=$.String({pattern:`^sha256:[0-9a-f]{64}$`,minLength:71,maxLength:71}),bj=$.String({pattern:`^[A-Za-z0-9_-]{43}$`,minLength:43,maxLength:43}),xj=$.String({pattern:`^dpt_[A-Za-z0-9_-]{43}$`,minLength:47,maxLength:47}),Sj=`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`,Cj=`^(?:${Sj}|[A-Z2-7]{12}|[A-Z2-7]{8})(?![\\s\\S])`,wj=$.String({pattern:Cj,minLength:8,maxLength:36}),Tj=new RegExp(Cj),Ej=/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/;function Dj(e){return typeof e!=`string`||e.length>36?!1:Tj.test(e)}function Oj(e){if(typeof e!=`string`)return;if(Ej.test(e)){let t=e.toLowerCase();return Dj(t)?t:void 0}let t=e.replace(/[\s-]+/g,``).toUpperCase();if(Dj(t)&&!(/[\s-]/.test(e)&&t.length!==12))return t}$.Object({type:$.Literal(`pair.request`),v:$.Literal(1),requestId:_j,code:wj,deviceUid:_j,deviceName:$.String({minLength:1,maxLength:64}),hostname:$.Optional($.String({minLength:1,maxLength:128})),platform:$.Optional($.String({minLength:1,maxLength:64})),publicKey:$.String({minLength:1,maxLength:256}),keyFingerprint:yj,clientTime:$.Integer(),hubNonce:$.Optional(bj)},gj),$.Object({type:$.Literal(`pair.device-request`),v:$.Literal(1),requestId:_j,deviceUid:_j,deviceName:$.String({minLength:1,maxLength:64}),hostname:$.Optional($.String({minLength:1,maxLength:128})),platform:$.Optional($.String({minLength:1,maxLength:64})),publicKey:$.String({minLength:1,maxLength:256}),keyFingerprint:yj,clientTime:$.Integer(),hubNonce:$.Optional(bj)},gj);var kj=$.Object({type:$.Literal(`pair.challenge`),v:$.Literal(1),enrollmentId:_j,nonce:bj,issuedAt:$.Integer(),hubId:_j,hubPublicKey:$.Optional($.String({minLength:1,maxLength:256})),hubKeyFingerprint:$.Optional(yj),hubSignature:$.Optional($.String({pattern:`^[A-Za-z0-9_-]{86}$`,minLength:86,maxLength:86}))},gj);$.Object({type:$.Literal(`pair.device-ack`),v:$.Literal(1),codeId:_j,code:wj,expiresAt:$.Integer(),hubOrigin:$.String(),hubId:_j,challenge:kj},gj),$.Object({type:$.Literal(`pair.response`),v:$.Literal(1),enrollmentId:_j,nonce:bj,signature:$.String({pattern:`^[A-Za-z0-9_-]{86}$`,minLength:86,maxLength:86})},gj),$.Object({type:$.Literal(`pair.pending`),v:$.Literal(1),enrollmentId:_j,state:$.Literal(`awaiting_approval`),expiresAt:$.Integer(),pollAfterMs:$.Integer({minimum:1})},gj),$.Object({type:$.Literal(`pair.token`),v:$.Literal(1),enrollmentId:_j,deviceUid:_j,deviceId:vj,pairingEpoch:_j,credentialId:_j,generation:$.Integer({minimum:1}),hubId:_j,hubOrigin:$.String(),hubUrl:$.String(),tunnelToken:xj,issuedAt:$.Integer(),expiresAt:$.Null(),hubKeyFingerprint:$.Optional(yj)},gj),$.Object({enrollmentId:_j,deviceUid:_j,keyFingerprint:yj,replaceKey:$.Optional($.Boolean())},gj),$.Object({type:$.Literal(`pair.revoke`),v:$.Literal(1),deviceId:vj,pairingEpoch:_j,reason:$.Union([$.Literal(`user`),$.Literal(`compromise`),$.Literal(`hub_migrated`)]),revokedAt:$.Integer()},gj);var Aj=$.Object({type:$.Literal(`pair.error`),v:$.Literal(1),code:$.Union([$.Literal(`code_invalid`),$.Literal(`code_expired`),$.Literal(`code_used`),$.Literal(`code_in_use`),$.Literal(`rate_limited`),$.Literal(`signature_invalid`),$.Literal(`clock_skew`),$.Literal(`paired_elsewhere`),$.Literal(`hub_required`),$.Literal(`fingerprint_mismatch`),$.Literal(`identity_conflict`),$.Literal(`enrollment_lost`),$.Literal(`enrollment_cancelled`),$.Literal(`already_issued`),$.Literal(`challenge_expired`)]),message:$.String({maxLength:512}),retryAfterMs:$.Optional($.Integer({minimum:1}))},gj);$.Object({type:$.Literal(`pair.code`),v:$.Literal(1),codeId:_j,code:wj,expiresAt:$.Integer(),hubOrigin:$.String({maxLength:2048}),pairUrl:$.String({maxLength:4096}),offerUrl:$.Optional($.String({maxLength:2048}))},gj);var jj=$.Union([$.Literal(`open`),$.Literal(`awaiting_proof`),$.Literal(`awaiting_approval`),$.Literal(`approved`),$.Literal(`issued`),$.Literal(`connected`),$.Literal(`cancelled`),$.Literal(`expired`)]);$.Object({type:$.Literal(`pair.code-state`),v:$.Literal(1),codeId:_j,expiresAt:$.Integer(),phase:jj,enrollment:$.Optional($.Object({enrollmentId:_j,deviceUid:_j,deviceName:$.String({minLength:1,maxLength:64}),keyFingerprint:yj,proofVerified:$.Boolean(),keyChanged:$.Boolean()},gj)),deviceId:$.Optional(vj),error:$.Optional(Aj)},gj);function Mj(e){if(typeof e!=`string`||e.length===0||e.length>2048)return{ok:!1,error:`origin: empty or too long`};if(/\s|\n|\r|\t/.test(e))return{ok:!1,error:`origin: whitespace not allowed`};let t;try{t=new URL(e)}catch{return{ok:!1,error:`origin: not a valid URL`}}return t.protocol!==`https:`&&!(t.protocol===`http:`&&/^(127\.0\.0\.1|\[::1\]|localhost)$/.test(t.hostname))?{ok:!1,error:`origin: HTTPS origin required`}:t.username||t.password?{ok:!1,error:`origin: userinfo not allowed`}:t.search||t.hash?{ok:!1,error:`origin: query/fragment not allowed`}:t.pathname!==`/`&&t.pathname!==``?{ok:!1,error:`origin: base path not allowed`}:{ok:!0,origin:t.origin,tunnelUrl:`${t.origin}/api/tunnel`}}function Nj(e){if(e!==``&&/^[A-Za-z0-9_-]+$/.test(e))try{let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`)),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}catch{return}}var Pj=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,Fj=RegExp(`^${Sj}$`),Ij=/^sha256:[0-9a-f]{64}$/;function Lj(e){let t=Nj(e);if(!t||t.length>1024)return;let n;try{n=JSON.parse(new TextDecoder().decode(t))}catch{return}if(!n||typeof n!=`object`||Array.isArray(n))return;let r=n;if(r.v!==2&&r.v!==3)return;let i=r.v===3?6:5;if(Object.keys(r).length!==i||typeof r.hub!=`string`)return;let a=Mj(r.hub);if(a.ok&&a.origin===r.hub&&typeof r.id==`string`&&Pj.test(r.id)&&typeof r.code==`string`&&Fj.test(r.code)&&typeof r.exp==`number`&&Number.isSafeInteger(r.exp))return r.v===3?typeof r.kfp!=`string`||!Ij.test(r.kfp)?void 0:{v:3,hub:r.hub,id:r.id,code:r.code,exp:r.exp,kfp:r.kfp}:{v:2,hub:r.hub,id:r.id,code:r.code,exp:r.exp}}function Rj(e,t=Date.now()){let n=Lj(e);if(n&&!(n.exp<t-3e4)&&!(n.exp>t+6e5))return n}function zj(e,t=Date.now()){let n;try{n=new URL(e)}catch{return}if(!/^\/pair\/?$/.test(n.pathname)||n.username||n.password||n.search||!n.hash.startsWith(`#offer=`))return;let r=Rj(n.hash.slice(7),t);if(r&&r.hub===n.origin)return{offer:r,rest:`${n.origin}/pair`}}function Bj(e){if(!/^\/pair\/?$/.test(e.pathname))return;if(e.hash.startsWith(`#offer=`)){let t=zj(e.href);if(t)return{code:t.offer.code,origin:e.origin,offerFragment:e.hash.slice(1)};let n=Rj(e.hash.slice(7));return n&&n.hub!==e.origin?{error:`This pairing link does not belong to this hub. Open the original hub link instead.`}:{error:`Invalid pairing link. Use a complete link from the hub wizard.`}}let t=e.searchParams;if(!t.has(`code`)&&!t.has(`origin`)&&!t.has(`v`))return;let n=t.get(`code`),r=n===null?void 0:Oj(n);if(e.username||e.password||e.hash||t.getAll(`code`).length!==1||!r||t.getAll(`v`).length!==1||t.get(`v`)!==`1`)return{error:`Invalid pairing link. Use a complete version 1 link from the hub wizard.`};if(t.has(`origin`))try{let n=new URL(t.get(`origin`));if(t.getAll(`origin`).length!==1||n.origin!==e.origin||n.pathname!==`/`||n.username||n.password||n.search||n.hash)throw Error(`origin mismatch`)}catch{return{error:`This pairing link does not belong to this hub. Open the original hub link instead.`}}return{code:r,origin:e.origin}}var Vj=e=>/^\/pair\/?$/.test(e.pathname)?`/`:void 0,Hj=e=>/^\/pair\/?$/.test(e.pathname)&&Bj(e)===void 0?`/`:void 0,Uj=4e3;async function Wj(e){if(!e.needsCancel)return{closed:!0,confirmed:!0};let t,n=await Promise.race([e.cancel().catch(()=>`failed`),new Promise(n=>t=setTimeout(()=>n(`failed`),e.timeoutMs))]);return clearTimeout(t),{closed:n!==`issued`,confirmed:n===`cancelled`}}var Gj={class:`modal pair-wizard`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pair-title`},Kj={key:1,class:`pair-pending`,"aria-label":`Machines waiting for approval`},qj={class:`who`},Jj={key:0,class:`muted`},Yj={key:1,class:`muted`},Xj={class:`fp`},Zj={class:`row`},Qj={class:`phase`},$j=[`onClick`],eM={key:2,class:`hint`},tM={class:`pair-steps`,"aria-label":`Pairing progress`},nM={class:`pair-grid`},rM={class:`pair-code-box`},iM={class:`pair-code`,"aria-label":`Pairing code`},aM={class:`pair-copy-actions`},oM=[`innerHTML`],sM={class:`pair-side`},cM={key:0,class:`hint`},lM={class:`pair-fingerprint`},uM={class:`fp`},dM={class:`pair-confirm`},fM={key:0,class:`pair-confirm warn`},pM=[`disabled`],mM=[`disabled`],hM={class:`hint`},gM=[`disabled`],_M={key:5,class:`error`,role:`alert`},vM={key:4},yM={class:`error`,role:`alert`},bM=A({__name:`PairDeviceWizard`,props:{handoff:{}},emits:[`close`],setup(e,{expose:t,emit:n}){let r=n,i=e,a=O(`boot`),o=O(),s=O(),c=O(),l=O(``),u=O(!1),d=O(!1),f=O(!1),p=O(!1),m=O(!1),h=O(!1),g=O(),_=O([]),v=B(()=>{let e=s.value?.code??``;return!Dj(e)||e.includes(`-`)?e:(e.match(/.{4}/g)??[]).join(`-`)}),y=B(()=>s.value?Y_(s.value):``),b=B(()=>y.value?sx(y.value,148):``),ee=B(()=>c.value?.enrollment?.keyFingerprint??``),te=B(()=>c.value?.deviceId??``);Zn(te,e=>{g.value?.(),e&&(g.value=Zn(()=>Yl.devices.value.find(t=>t.id===e)?.status,e=>{e===`online`&&(Au(`Device paired and online.`),g.value?.(),g.value=void 0)},{immediate:!0}))});async function x(e){a.value=`boot`,l.value=``,f.value=!1,p.value=!1,c.value=void 0,s.value=void 0,o.value?.close();let t=Q_();o.value=t;try{let n=e?await X_.resolveCode(e):await X_.createCode();if(t.closed()){await X_.cancel(n.codeId).catch(()=>{Au(`The late pairing code could not be cancelled. Check device credentials before retrying.`)});return}if(s.value=n,a.value=`code`,e){let e=Vj(new URL(window.location.href));e&&window.history.replaceState(window.history.state,``,e)}tv(t,n.codeId,{intervalMs:1e3,onState:e=>{c.value=e,e.phase===`awaiting_proof`?a.value=`proof`:e.phase===`awaiting_approval`||e.phase===`approved`?a.value=`approve`:e.phase===`issued`||e.phase===`connected`?a.value=`issued`:e.phase===`cancelled`?a.value=`cancelled`:e.phase===`expired`&&(a.value=`expired`)}}).catch(e=>{t.closed()||(l.value=e instanceof Error?e.message:String(e),a.value=`expired`)})}catch(e){l.value=e instanceof Error?e.message:String(e),a.value=`expired`}}async function ne(){let e=c.value,t=o.value;if(e?.enrollment&&t&&!u.value){u.value=!0,l.value=``;try{let t=await X_.approve(s.value.codeId,{enrollmentId:e.enrollment.enrollmentId,deviceUid:e.enrollment.deviceUid,keyFingerprint:e.enrollment.keyFingerprint,...p.value?{replaceKey:!0}:{}});c.value=t,(t.phase===`issued`||t.phase===`connected`)&&(a.value=`issued`)}catch(e){l.value=e instanceof Error?e.message:String(e)}finally{u.value=!1}}}async function re(e){if(!s.value)return`cancelled`;try{let t=await X_.cancel(s.value.codeId,void 0,e);return c.value=t,o.value&&(o.value.state=t),a.value=t.phase===`expired`?`expired`:`cancelled`,o.value?.close(),`cancelled`}catch(e){if(e instanceof xl&&e.status===409&&String(e.code)===`already_issued`){let e=await X_.codeState(s.value.codeId).catch(()=>void 0);return e&&(c.value=e,o.value&&(o.value.state=e)),a.value=`issued`,l.value=`Credential already issued. Closing does not revoke it; choose Revoke explicitly if needed.`,`issued`}return l.value=e instanceof Error?e.message:String(e),`failed`}}let ie=()=>re(!1),ae=()=>[`issued`,`connected`,`cancelled`,`expired`].includes(c.value?.phase??``);async function oe(){let e=te.value;if(e){u.value=!0;try{await X_.revoke(e,`user`),Au(`Issued credential revoked.`),r(`close`)}catch(e){l.value=e instanceof Error?e.message:String(e)}finally{u.value=!1}}}async function se(){if(s.value)try{await navigator.clipboard.writeText(s.value.code),m.value=!0,setTimeout(()=>m.value=!1,1500)}catch{l.value=`Clipboard unavailable; copy the code manually.`}}async function ce(){if(s.value)try{await navigator.clipboard.writeText(s.value.offerUrl??s.value.pairUrl),h.value=!0,setTimeout(()=>h.value=!1,1500)}catch{l.value=`Clipboard unavailable; copy the link manually.`}}async function le(){if(!d.value){d.value=!0,u.value=!0;try{let e=await Wj({needsCancel:!!s.value&&!ae(),cancel:ie,timeoutMs:Uj});if(!e.closed)return;o.value?.close(),g.value?.(),e.confirmed||Au(`Pairing cancellation was not confirmed. The code expires on its own; check device credentials before retrying.`),r(`close`)}finally{d.value=!1,u.value=!1}}}t({close:le});let ue;async function de(){try{_.value=(await X_.pending()).codes}catch{}}async function fe(e){s.value=void 0,c.value=void 0,l.value=``;let t=Q_();o.value=t,a.value=e.phase===`approved_ready`?`approve`:`proof`,tv(t,e.codeId,{intervalMs:1e3,onState:e=>{c.value=e,e.phase===`awaiting_proof`?a.value=`proof`:e.phase===`awaiting_approval`||e.phase===`approved`?a.value=`approve`:e.phase===`issued`||e.phase===`connected`?a.value=`issued`:e.phase===`cancelled`?a.value=`cancelled`:e.phase===`expired`&&(a.value=`expired`)}}).catch(e=>{l.value=e instanceof Error?e.message:String(e)})}return Wr(()=>{if(de(),ue=setInterval(()=>void de(),3e3),i.handoff&&`error`in i.handoff){l.value=i.handoff.error,a.value=`expired`;return}x(i.handoff?.code)}),qr(()=>{clearInterval(ue);let e=o.value;e&&!e.closed()&&s.value&&!ae()&&re(!0).then(e=>{e!==`cancelled`&&Au(`Pairing cancellation was not confirmed. Check device credentials before retrying.`)}),e?.close(),g.value?.()}),(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:As(le,[`self`])},[I(`div`,Gj,[I(`header`,null,[t[5]||=I(`h2`,{id:`pair-title`},`Pair a device`,-1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close dialog`,onClick:le},[L(k(Kc),{size:18})])]),i.handoff&&`offerFragment`in i.handoff&&i.handoff.offerFragment?(N(),F(mx,{key:0,"offer-fragment":i.handoff.offerFragment},null,8,[`offer-fragment`])):z(``,!0),_.value.length?(N(),P(`section`,Kj,[t[6]||=I(`h3`,null,`Machines waiting for you`,-1),I(`ul`,null,[(N(!0),P(M,null,j(_.value,e=>(N(),P(`li`,{key:e.codeId},[I(`div`,qj,[I(`strong`,null,T(e.deviceName??`unnamed device`),1),e.hostname?(N(),P(`span`,Jj,T(e.hostname),1)):z(``,!0),e.platform?(N(),P(`span`,Yj,T(e.platform),1)):z(``,!0)]),I(`div`,Xj,T(e.keyFingerprint),1),I(`div`,Zj,[I(`span`,Qj,T(e.phase.replaceAll(`_`,` `)),1),I(`button`,{type:`button`,class:`small`,onClick:t=>fe(e)},`Review`,8,$j)])]))),128))]),t[7]||=I(`p`,{class:`hint`},` Compare each fingerprint with the machine's own terminal before approving. Codes are minted by the hub — nothing has to be copied to the machine. `,-1)])):z(``,!0),a.value===`boot`?(N(),P(`p`,eM,`Minting a pairing code…`)):s.value?(N(),P(M,{key:3},[I(`ol`,tM,[t[8]||=I(`li`,{class:C({on:!0})},`Code`,-1),I(`li`,{class:C({on:[`proof`,`approve`,`issued`].includes(a.value)})},`Proof`,2),I(`li`,{class:C({on:[`approve`,`issued`].includes(a.value)})},`Fingerprint`,2),I(`li`,{class:C({on:a.value===`issued`})},`Online`,2)]),I(`div`,nM,[I(`div`,rM,[I(`div`,iM,T(v.value),1),I(`div`,aM,[I(`button`,{type:`button`,class:`small`,onClick:se},[L(k(tc),{size:14}),R(` `+T(m.value?`Copied`:`Copy code`),1)]),I(`button`,{type:`button`,class:`small`,onClick:ce,title:`Self-contained link: hub, code and expiry all in the fragment — it never reaches server logs`},[L(k(tc),{size:14}),R(` `+T(h.value?`Copied link`:`Copy link`),1)])]),t[9]||=I(`p`,{class:`hint`},` Run the device pairing command and scan, or enter this code on the device. Expires in 5 minutes. `,-1),I(`div`,{class:`pair-qr`,"aria-label":`Pairing QR code`,title:`Same offer link as Copy link: hub, code and expiry all in the #offer= fragment — it never reaches server logs`,innerHTML:b.value},null,8,oM)]),I(`div`,sM,[a.value===`code`||a.value===`proof`?(N(),P(`p`,cM,[L(k(Nc),{size:14,class:`spin`}),t[10]||=R(` Waiting for the device to submit its signing proof… `,-1)])):a.value===`approve`?(N(),P(M,{key:1},[I(`div`,lM,[t[11]||=I(`h3`,null,`Device key fingerprint`,-1),I(`code`,uM,T(ee.value),1),t[12]||=I(`p`,{class:`hint`},` Compare ALL 64 hex characters with the fingerprint shown on the device screen. `,-1)]),I(`label`,dM,[Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>f.value=e,type:`checkbox`},null,512),[[xs,f.value]]),t[13]||=R(` The fingerprint matches the device display exactly `,-1)]),c.value?.enrollment?.keyChanged?(N(),P(`label`,fM,[Wn(I(`input`,{"onUpdate:modelValue":t[1]||=e=>p.value=e,type:`checkbox`},null,512),[[xs,p.value]]),L(k(Ic),{size:14}),t[14]||=R(` Device is already paired with a DIFFERENT key — replace the stored key (replaceKey) `,-1)])):z(``,!0),I(`button`,{type:`button`,class:`primary`,disabled:!f.value||u.value||c.value?.enrollment?.keyChanged===!0&&!p.value,onClick:ne},` Approve device `,8,pM),I(`button`,{type:`button`,class:`small`,disabled:u.value,onClick:ie},` Cancel pairing `,8,mM)],64)):a.value===`issued`?(N(),P(M,{key:2},[I(`p`,hM,[L(k(Qs),{size:14}),t[15]||=R(` Credential issued. The device is connecting through the tunnel — you will get a toast once the monitor probe reports it online. `,-1)]),I(`button`,{type:`button`,class:`small`,onClick:le},`Close`),I(`button`,{type:`button`,class:`small danger`,disabled:!te.value||u.value,title:`Mistaken approval? Revoke the credential now.`,onClick:oe},` Revoke this credential `,8,gM)],64)):a.value===`cancelled`?(N(),P(M,{key:3},[t[16]||=I(`p`,{class:`hint`},`Pairing was cancelled (or the signature failed too many times).`,-1),I(`button`,{type:`button`,class:`small`,onClick:t[2]||=e=>x()},`Start over`)],64)):a.value===`expired`?(N(),P(M,{key:4},[t[17]||=I(`p`,{class:`hint`},`The pairing code expired.`,-1),I(`button`,{type:`button`,class:`small`,onClick:t[3]||=e=>x()},`New code`)],64)):z(``,!0),l.value?(N(),P(`p`,_M,T(l.value),1)):z(``,!0)])])],64)):(N(),P(`div`,vM,[I(`p`,yM,T(l.value||`This pairing link is unavailable.`),1),I(`button`,{type:`button`,class:`small`,onClick:t[4]||=e=>x()},`New code`)]))])]))}}),xM={class:`modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`device-credentials-title`},SM={class:`hint`},CM={key:1,class:`hint`},wM=A({__name:`DeviceCredentialsDialog`,props:{deviceId:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>Yl.devices.value.find(e=>e.id===n.deviceId));return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[2]||=As(e=>r(`close`),[`self`])},[I(`section`,xM,[I(`header`,null,[t[3]||=I(`h2`,{id:`device-credentials-title`},`Device credentials`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close device credentials`,onClick:t[0]||=e=>r(`close`)},[L(k(Kc),{size:18})])]),i.value?(N(),P(M,{key:0},[I(`p`,null,[R(T(i.value.name)+` `,1),I(`code`,null,T(i.value.id),1)]),I(`p`,SM,T(i.value.status)+` · tunnel `+T(i.value.tunnel?.state??`disconnected`)+` · `+T(i.value.tunnel?.readerCount??0)+` readers `,1),L(uv,{device:i.value},null,8,[`device`])],64)):(N(),P(`p`,CM,`This device is no longer in the registry.`)),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:t[1]||=e=>r(`close`)},`Close`)])])]))}}),TM={id:`prompt-title`},EM=[`disabled`],DM={key:0,class:`hint`},OM={key:1},kM={key:0,class:`muted`},AM=[`placeholder`,`disabled`],jM=[`required`,`placeholder`,`aria-label`,`disabled`],MM={key:2,class:`message-error`,role:`alert`},NM=[`disabled`],PM=[`disabled`],FM=A({__name:`PromptDialog`,props:{dialog:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=O(n.dialog.value??``),a=O(!1),o=O(``),s=O(),c=!!n.dialog.label;async function l(){if(!a.value&&(!c||n.dialog.optional||i.value.trim())){a.value=!0,o.value=``;try{await n.dialog.run(i.value.trim()),r(`close`)}catch(e){o.value=Ll(e)}finally{a.value=!1}}}return Wr(()=>void jn(()=>(s.value?.focus(),s.value?.select()))),(t,n)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:n[4]||=As(e=>!a.value&&r(`close`),[`self`])},[I(`form`,{class:`modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`prompt-title`,onSubmit:As(l,[`prevent`])},[I(`header`,null,[I(`h2`,TM,T(e.dialog.title),1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close dialog`,disabled:a.value,onClick:n[0]||=e=>r(`close`)},[L(k(Kc),{size:18})],8,EM)]),e.dialog.hint?(N(),P(`p`,DM,T(e.dialog.hint),1)):z(``,!0),c?(N(),P(`label`,OM,[R(T(e.dialog.label)+` `,1),e.dialog.optional?(N(),P(`span`,kM,`(optional)`)):z(``,!0),e.dialog.multiline?Wn((N(),P(`textarea`,{key:1,ref_key:`input`,ref:s,"onUpdate:modelValue":n[1]||=e=>i.value=e,rows:`4`,placeholder:e.dialog.placeholder,disabled:a.value},null,8,AM)),[[bs,i.value]]):Wn((N(),P(`input`,{key:2,ref_key:`input`,ref:s,"onUpdate:modelValue":n[2]||=e=>i.value=e,maxlength:`100`,required:!e.dialog.optional,placeholder:e.dialog.placeholder,"aria-label":e.dialog.label,disabled:a.value},null,8,jM)),[[bs,i.value]])])):z(``,!0),o.value?(N(),P(`p`,MM,T(o.value),1)):z(``,!0),I(`footer`,null,[I(`button`,{type:`button`,class:`secondary`,disabled:a.value,onClick:n[3]||=e=>r(`close`)},` Cancel `,8,NM),I(`button`,{class:C([`primary`,{danger:e.dialog.danger}]),disabled:a.value||c&&!e.dialog.optional&&!i.value.trim()},T(a.value?`Working…`:e.dialog.submit),11,PM)])],32)]))}}),IM={class:`modal model-modal`},LM={class:`eyebrow`},RM={class:`model-list`},zM=[`onClick`],BM=[`src`],VM={class:`hint`},HM=A({__name:`ModelPicker`,emits:[`close`],setup(e,{emit:t}){let n=t,r=O(``),i=B(()=>vu.value.filter(e=>`${e.name} ${e.id} ${e.tier}`.toLowerCase().includes(r.value.toLowerCase()))),a=e=>e.id===yu.value.agent.model?.modelId&&e.provider===yu.value.agent.model?.provider;async function o(e){await ju(()=>lu.value.configure({model:{provider:e.provider,modelId:e.id}}))&&(await Ou(),Au(`Model saved. Used on the next turn.`),n(`close`))}return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[2]||=As(e=>n(`close`),[`self`])},[I(`section`,IM,[I(`header`,null,[I(`div`,null,[I(`span`,LM,`PER AGENT · `+T(k(nu)?.id),1),t[3]||=I(`h2`,null,`Choose a model`,-1)]),I(`button`,{class:`icon-button`,"aria-label":`Close model picker`,onClick:t[0]||=e=>n(`close`)},[L(k(Kc),{size:18})])]),Wn(I(`input`,{"onUpdate:modelValue":t[1]||=e=>r.value=e,placeholder:`Search models or tiers…`,"aria-label":`Search models`},null,512),[[bs,r.value]]),I(`div`,RM,[(N(!0),P(M,null,j(i.value,e=>(N(),P(`button`,{key:`${e.provider}/${e.id}`,class:C({selected:a(e)}),onClick:t=>o(e)},[I(`img`,{src:k(Fu)(e.id),alt:``},null,8,BM),I(`div`,null,[I(`strong`,null,T(e.name),1),I(`small`,null,T(e.tier)+` / `+T(e.provider)+` / `+T(k(Nu)(e.contextWindow))+` context`,1)]),a(e)?(N(),F(k(Ys),{key:0,size:18})):z(``,!0)],10,zM))),128))]),I(`p`,VM,`Models available on `+T(k(nu)?.id)+`. Provider keys stay on the device.`,1)])]))}}),UM={class:`dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`help-title`},WM={class:`dialog-head`},GM={class:`dialog-body`},KM={class:`n`},qM={class:`body`},JM={class:`help-callout`},YM={class:`dialog-foot`},XM={class:`right`},ZM=A({__name:`HelpDialog`,setup(e){let t=[{title:`Pick a device, start a session`,body:`Every device in the tree runs dpi-backend. A session gets its own SQLite database on that device, in the directory you choose.`},{title:`Send work, then close the browser`,body:`The device owns the run. Reopening restores committed messages, state and live progress.`},{title:`Change state and fork`,body:`Edit App State by hand or through the agent. Every session and fork on a device shares it.`},{title:`Interrupt deliberately`,body:`Interrupt stops foreground work and owned subagents. Background jobs continue. Stop all includes them.`},{title:`Explore the boundaries`,body:`Queue a follow-up, steer after tools, wait for approval, compact context, reset or inspect raw state.`},{title:`Restart a device`,body:`Its tree dims and shows the restart command. Checkpointed jobs recover on boot. Replay-safe tools may rerun. Other interrupted tools return an error.`}];return(e,n)=>(N(),P(`div`,{class:`scrim`,onClick:n[2]||=As(e=>k(U).dialog=void 0,[`self`])},[I(`section`,UM,[I(`div`,WM,[n[3]||=I(`div`,null,[I(`span`,{class:`dialog-eyebrow`},`LEARN BY DOING`),I(`h3`,{id:`help-title`},`What makes this durable?`)],-1),I(`button`,{class:`icon-button`,"aria-label":`Close help`,onClick:n[0]||=e=>k(U).dialog=void 0},[L(k(Kc),{size:18})])]),I(`div`,GM,[(N(),P(M,null,j(t,(e,t)=>I(`div`,{key:e.title,class:`help-step`},[I(`span`,KM,T(String(t+1).padStart(2,`0`)),1),I(`div`,null,[I(`b`,null,T(e.title),1),I(`div`,qM,T(e.body),1)])])),64)),I(`div`,JM,[L(k(fc),{size:18}),n[4]||=I(`span`,null,`Durable does not mean exactly-once external effects. Checkpoints protect progress. Tools still need their own idempotency.`,-1)])]),I(`div`,YM,[I(`div`,XM,[I(`button`,{class:`secondary`,type:`button`,onClick:n[1]||=e=>k(U).dialog=void 0},`Close`)])])])]))}}),QM=Kt({needed:!1,busy:!1,error:``}),$M=new Set,eN=e=>{let t=[...$M];$M=new Set;for(let n of t)n(e)},tN=()=>new Promise(e=>$M.add(e));async function nN(e){if(QM.busy||!e)return!1;QM.busy=!0,QM.error=``;try{let t=await fetch(`/api/session`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})});return await t.text().catch(()=>``),t.ok?(QM.needed=!1,eN(!0),!0):(QM.error=t.status===401?`That token was not accepted.`:t.status===429?`Too many attempts. Wait a minute and try again.`:`Login failed (${t.status}).`,!1)}catch{return QM.error=`Cannot reach the hub.`,!1}finally{QM.busy=!1}}var rN=e=>{try{return new URL(e,location.href).pathname===`/api/session`}catch{return e===`/api/session`}};function iN(e){return(async(t,n)=>{let r=()=>e(t,n),i=await r();if(i.status!==401||rN(typeof t==`string`?t:t instanceof URL?t.href:t.url)||n?.body instanceof ReadableStream)return i;QM.needed=!0;let a=await i.text().catch(()=>``);return await tN()?r():new Response(a,{status:i.status,headers:i.headers})})}function aN(){typeof window>`u`||window.__adminFetch||(window.__adminFetch=!0,window.fetch=iN(window.fetch.bind(window)))}var oN={class:`login-veil`,"data-testid":`login-card`},sN=[`disabled`],cN={key:0,class:`message-error`,role:`alert`},lN=[`disabled`],uN=A({__name:`LoginCard`,setup(e){let t=O(``),n=O();async function r(){if(QM.busy||!t.value.trim())return;let e=await nN(t.value.trim());t.value=``,e&&n.value?.blur()}return Wr(()=>void jn(()=>n.value?.focus())),(e,i)=>(N(),P(`div`,oN,[I(`form`,{class:`modal login-card`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`login-title`,onSubmit:As(r,[`prevent`])},[i[2]||=I(`header`,null,[I(`h2`,{id:`login-title`},`Admin token`)],-1),i[3]||=I(`p`,{class:`hint`},[R(` This hub is locked. Sign in with the token from its `),I(`code`,null,`admin.token`),R(` file. `)],-1),i[4]||=I(`label`,{for:`admin-token`},`Admin token`,-1),Wn(I(`input`,{id:`admin-token`,ref_key:`input`,ref:n,"onUpdate:modelValue":i[0]||=e=>t.value=e,type:`password`,name:`admin-token`,autocomplete:`off`,spellcheck:`false`,placeholder:`adm_…`,"aria-label":`Admin token`,disabled:k(QM).busy,onKeydown:i[1]||=Ms(e=>k(QM).error=``,[`esc`])},null,40,sN),[[bs,t.value]]),k(QM).error?(N(),P(`p`,cN,T(k(QM).error),1)):z(``,!0),I(`footer`,null,[I(`button`,{class:`primary`,type:`submit`,disabled:k(QM).busy||!t.value.trim()},T(k(QM).busy?`Checking…`:`Sign in`),9,lN)])],32)]))}}),dN={key:0,class:`toast`,role:`status`},fN=A({__name:`Toast`,setup(e){return(e,t)=>(N(),F(Co,{name:`toast`},{default:Un(()=>[k(U).toast?(N(),P(`div`,dN,[L(k(Ys),{size:18}),R(T(k(U).toast),1)])):z(``,!0)]),_:1}))}}),pN={class:`shell`,"data-testid":`app-shell`},mN={key:0,class:`error-banner`,role:`alert`},hN={key:4,class:`welcome`,"data-testid":`welcome-empty`},gN=[`disabled`],_N={class:`welcome-features`},vN={class:`modal path-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`path-title`},yN={class:`full-directory`},bN=A({__name:`App`,setup(e){let t=()=>Yl.devices.value.filter(e=>e.status===`online`).length,n=O();function r(){U.dialog={kind:`new-session`,deviceId:H.value?.deviceId}}function i(e){let t=U.dialog?void 0:Ju(e);if(t)return e.preventDefault(),t===`tree`?Wu():Gu();if(e.key===`Escape`){if(U.dialog){U.dialog.kind===`pair`?n.value?.close():U.dialog=void 0;return}!e.repeat&&!e.isComposing&&Cu.value&&(e.preventDefault(),Ru()),U.drawer=!1,U.inspectorOverlay=!1}}function a(e){let t=e.clientX,n=Ql.value,r=e=>Ql.value=Math.max(220,Math.min(560,n+e.clientX-t)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}return Wr(()=>{document.addEventListener(`keydown`,i),gu()}),qr(()=>{ql.stop(),document.removeEventListener(`keydown`,i)}),(e,i)=>(N(),P(`div`,pN,[L(nd,{onNewSession:r}),k(U).error?(N(),P(`div`,mN,[L(k(fc),{size:18}),I(`span`,null,T(k(U).error),1),I(`button`,{class:`icon-button`,"aria-label":`Dismiss error`,onClick:i[0]||=e=>k(U).error=``},`×`)])):z(``,!0),I(`main`,{class:`net-workspace`,style:ye({"--tree-w":`${k(Ql)}px`})},[L(Id),k($l).tree?(N(),P(`div`,{key:0,class:`tree-resizer`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize network tree`,onPointerdown:As(a,[`prevent`])},null,32)):z(``,!0),k(U).drawer?(N(),P(`div`,{key:1,class:`tree-backdrop`,onClick:i[1]||=e=>k(U).drawer=!1})):z(``,!0),k(H)&&k(nu)&&k(ru)?(N(),P(M,{key:2},[L(cb),k(U).inspectorOverlay?(N(),P(`div`,{key:0,class:`inspector-backdrop`,onClick:i[2]||=e=>k(Uu)()})):z(``,!0),(N(),F(x_,{key:`${k(H).deviceId}/${k(H).sessionId}`}))],64)):k(H)&&k(nu)?(N(),F(vb,{key:3,device:k(nu)},null,8,[`device`])):(N(),P(`section`,hN,[i[14]||=I(`img`,{class:`welcome-symbol`,src:`/icons/durable-pi.svg`,alt:`Durable Pi`},null,-1),i[15]||=I(`span`,{class:`eyebrow`},`THE DURABLE AGENT NETWORK`,-1),i[16]||=I(`h1`,null,[R(`Close the tab.`),I(`br`),R(`The work continues.`)],-1),i[17]||=I(`p`,null,`Agents run on your devices. This page is only a window into them.`,-1),I(`button`,{class:`primary`,disabled:!t(),onClick:r},[L(k(jc),{size:18}),R(T(k(Yl).devices.value.length?`Create a session`:`Add a device to dpi-network.yaml`),1)],8,gN),I(`div`,_N,[I(`span`,null,[L(k(ic),{size:18}),i[11]||=R(`SQLite on each device`,-1)]),I(`span`,null,[L(k(lc),{size:18}),i[12]||=R(`Branch any agent`,-1)]),I(`span`,null,[L(k(Hs),{size:18}),i[13]||=R(`Watch from anywhere`,-1)])])]))],4),L(ad),k(U).dialog?.kind===`pair`?(N(),F(bM,{key:1,ref_key:`pairWizard`,ref:n,handoff:k(U).dialog.handoff,onClose:i[3]||=e=>k(U).dialog=void 0},null,8,[`handoff`])):z(``,!0),k(U).dialog?.kind===`credentials`?(N(),F(wM,{key:2,"device-id":k(U).dialog.deviceId,onClose:i[4]||=e=>k(U).dialog=void 0},null,8,[`device-id`])):z(``,!0),k(U).dialog?.kind===`new-session`?(N(),F(Fb,{key:3,"device-id":k(U).dialog.deviceId,onClose:i[5]||=e=>k(U).dialog=void 0},null,8,[`device-id`])):k(U).dialog?.kind===`prompt`?(N(),F(FM,{key:4,dialog:k(U).dialog,onClose:i[6]||=e=>k(U).dialog=void 0},null,8,[`dialog`])):k(U).dialog?.kind===`models`?(N(),F(HM,{key:5,onClose:i[7]||=e=>k(U).dialog=void 0})):k(U).dialog?.kind===`path`?(N(),P(`div`,{key:6,class:`modal-backdrop`,onClick:i[10]||=As(e=>k(U).dialog=void 0,[`self`])},[I(`section`,vN,[I(`header`,null,[i[18]||=I(`h2`,{id:`path-title`},`Working directory`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close working directory`,onClick:i[8]||=e=>k(U).dialog=void 0},[L(k(Kc),{size:18})])]),I(`code`,yN,T(k(U).dialog.path),1),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:i[9]||=e=>k(U).dialog=void 0},`Close`)])])])):k(U).dialog?.kind===`help`?(N(),F(ZM,{key:7})):z(``,!0),k(QM).needed?(N(),F(uN,{key:8})):z(``,!0),L(fN)]))}});aN();var xN=new URL(window.location.href);if(/^\/pair\/?$/.test(xN.pathname)){let e=Bj(xN);e?(xN.search=``,xN.hash=``,window.history.replaceState(window.history.state,``,xN),U.dialog={kind:`pair`,handoff:e}):window.history.replaceState(window.history.state,``,Hj(xN))}Is(bN).mount(`#app`);
77
+ `)}n(hy(t)),n(`}`,`punct`)}function yy(e,t,n){e.forEach((e,r)=>{r&&n(` | `,`punct`),_y(e,t,n)})}function by(e,t){if(typeof e==`string`)return t(JSON.stringify(e),`string`);if(typeof e==`number`)return t(String(e),`number`);t(String(e),`type`)}function xy(e){let t=[e.description,e.minimum===void 0?``:`@minimum ${e.minimum}`,e.maximum===void 0?``:`@maximum ${e.maximum}`,e.default===void 0?``:`@default ${JSON.stringify(e.default)}`].filter(Boolean);return t.length?`/** ${t.join(` `)} */`:``}var Sy={key:0,class:`panel-rail`,"aria-label":`Inspector (collapsed)`},Cy=[`title`],wy=[`aria-label`,`title`,`onClick`],Ty={key:0,class:`count`},Ey={class:`inspector-tabs`,role:`tablist`,"aria-label":`Session details`},Dy=[`id`,`aria-selected`,`onClick`],Oy={key:0,class:`count`},ky=[`title`],Ay=[`aria-labelledby`],jy={class:`session-heading`},My=[`title`],Ny={class:`cwd-trail`,dir:`rtl`},Py={dir:`ltr`},Fy={class:`session-status`},Iy={key:0,class:`background-pill`},Ly=[`title`],Ry={class:`model-section`},zy=[`src`],By={class:`thinking-row`},Vy=[`value`],Hy={class:`stats-section`,"aria-labelledby":`stats-title`},Uy={class:`metrics`},Wy=[`title`],Gy={class:`usage-breakdown`,"aria-label":`Agent token and cost breakdown`},Ky={scope:`row`},qy={class:`panel-heading`},Jy={class:`hint app-state-description`},Yy=[`disabled`],Xy={class:`state-json-actions`},Zy={key:0,class:`hint`},Qy=[`disabled`],$y=[`disabled`],eb={key:0,class:`message-error`,role:`alert`},tb={class:`panel-heading`},nb={class:`tag`},rb={class:`hook-card`},ib=[`aria-checked`],ab={key:0,class:`tag tool-disabled`},ob={class:`tag`},sb=[`aria-label`],cb=A({__name:`Inspector`,setup(e){let t=B(()=>new Map(Eu.value?.tools.map(e=>[e.name,gy(e.name,e.parameters)]))),n=[{id:`session`,label:`Session`,icon:sc},{id:`state`,label:`State`,icon:qs},{id:`tasks`,label:`Tasks`,icon:Hs},{id:`tools`,label:`Tools`,icon:Gc},{id:`extensions`,label:`Extend`,icon:Mc}],r=B(()=>[{label:`Input`,tokens:wu.value.input,cost:wu.value.inputCost},{label:`Output`,tokens:wu.value.output,cost:wu.value.outputCost},{label:`Cache read`,tokens:wu.value.cacheRead,cost:wu.value.cacheReadCost},{label:`Cache write`,tokens:wu.value.cacheWrite,cost:wu.value.cacheWriteCost}]),i=B(()=>Su.value.filter(e=>e.background).length);function a(e,t){ju(async()=>{await lu.value.configure(e),await Ou(),t&&Au(t)})}function o(){let e=uu.value;e&&(U.dialog={kind:`prompt`,title:`Rename session`,label:`Session name`,value:su.value?.name??``,submit:`Save name`,run:t=>e.rename(t)})}let s=ou.sharedState,c=O(``),l=O(``),u=O(0),d=O(!1),f=O(``),p=B(()=>c.value!==l.value),m=B(()=>p.value&&s.value?.revision!==u.value);function h(){c.value=Pu(s.value?.value??{}),l.value=c.value,u.value=s.value?.revision??0,f.value=``}Zn(s,()=>!p.value&&h(),{immediate:!0});async function g(e){if(!d.value&&lu.value){d.value=!0,f.value=``;try{await lu.value.demo(`state`,e)}catch(e){f.value=Ll(e)}finally{d.value=!1}}}async function _(){if(!d.value&&lu.value){f.value=``,d.value=!0;try{let e=JSON.parse(c.value);if(!e||Array.isArray(e)||typeof e!=`object`)throw Error(`App State must be a JSON object.`);let t=await lu.value.demo(`state`,{operation:`update`,path:``,value:e,expectedRevision:u.value});c.value=Pu(t.value),l.value=c.value,u.value=t.revision,Au(`Shared App State saved.`)}catch(e){f.value=Ll(e)}finally{d.value=!1}}}let v=B(()=>Eu.value?.config.readOnly===!0),y=B(()=>Eu.value?.tools.filter(e=>e.offered).length??0);return(e,l)=>(N(),P(`aside`,{class:C([`inspector`,{collapsed:!k(Vu),overlay:k(U).inspectorOverlay}])},[k(Vu)?(N(),P(M,{key:1},[I(`div`,Ey,[(N(),P(M,null,j(n,e=>I(`button`,{id:`inspector-tab-${e.id}`,key:e.id,role:`tab`,"aria-controls":`inspector-panel`,"aria-selected":k(U).tab===e.id,class:C({active:k(U).tab===e.id}),onClick:t=>k(U).tab=e.id},[(N(),F(ni(e.icon),{size:18})),R(T(e.label),1),e.id===`tasks`&&k(Su).length?(N(),P(`span`,Oy,T(k(Su).length),1)):z(``,!0)],10,Dy)),64)),I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Collapse inspector`,title:`Collapse inspector (${k(qu).inspector})`,onClick:l[1]||=e=>k(Uu)()},[L(k(Tc),{size:18})],8,ky)]),I(`div`,{id:`inspector-panel`,class:C([`inspector-body`,{"session-panel":k(U).tab===`session`}]),role:`tabpanel`,"aria-labelledby":`inspector-tab-${k(U).tab}`},[k(U).tab===`session`?(N(),P(M,{key:0},[I(`section`,jy,[I(`h1`,null,[I(`span`,null,T(k(su)?.name??`Loading session`),1),I(`button`,{class:`icon-button`,title:`Rename session`,"aria-label":`Rename session`,onClick:o},[L(k(kc),{size:18})])]),I(`button`,{class:`path cwd-button`,title:k(su)?.cwd,"aria-label":`Show full working directory`,onClick:l[2]||=e=>k(U).dialog={kind:`path`,path:k(su)?.cwd??``}},[L(k(sc),{size:18}),I(`span`,Ny,[I(`bdi`,Py,T(k(su)?.cwd),1)])],8,My),I(`div`,Fy,[I(`span`,{class:C([`status-pill`,{working:k(Cu)}])},[l[7]||=I(`i`,null,null,-1),R(T(k(Cu)?`Working`:`Idle`),1)],2),i.value?(N(),P(`span`,Iy,T(i.value)+` background`,1)):z(``,!0),I(`span`,{class:`saved`,title:k(nu)?.id},[L(k(Fc),{size:18}),R(T(k(nu)?.name??k(nu)?.id),1)],8,Ly),k(nu)?(N(),F(q_,{key:1,device:k(nu)},null,8,[`device`])):z(``,!0)])]),k(nu)?(N(),F(uv,{key:0,device:k(nu)},null,8,[`device`])):z(``,!0),I(`section`,Ry,[l[14]||=I(`div`,{class:`section-label`},[I(`span`,null,`AGENT`)],-1),I(`button`,{class:`model-button`,onClick:l[3]||=e=>k(U).dialog={kind:`models`}},[I(`img`,{src:k(Fu)(k(yu).agent.model?.modelId),alt:``},null,8,zy),I(`div`,null,[I(`strong`,null,T(k(Tu)?.name??k(yu).agent.model?.modelId??`Loading…`),1),I(`small`,null,T(k(Tu)?.tier??``)+` / `+T(k(yu).agent.model?.provider??``),1)]),L(k(Xs),{size:18})]),I(`div`,By,[l[8]||=I(`span`,null,`Thinking`,-1),I(`select`,{"aria-label":`Thinking level`,value:k(yu).agent.thinkingLevel??`low`,onChange:l[4]||=e=>a({thinkingLevel:e.target.value},`Thinking ${e.target.value}. Used on the next turn.`)},[(N(!0),P(M,null,j(k(yg),e=>(N(),P(`option`,{key:e},T(e),1))),128))],40,Vy)]),L(py),I(`section`,Hy,[l[13]||=I(`div`,{class:`section-label`},[I(`span`,{id:`stats-title`},`STATS`)],-1),I(`div`,Uy,[I(`div`,{title:`${k(wu).tokens.toLocaleString(`en-US`)} total tokens`},[I(`span`,null,T(k(Nu)(k(wu).tokens)),1),l[9]||=I(`small`,null,`total tokens`,-1)],8,Wy),I(`div`,null,[I(`span`,null,`$`+T(k(wu).cost.toFixed(4)),1),l[10]||=I(`small`,null,`agent cost`,-1)]),I(`div`,null,[I(`span`,null,T(k(Eu)?.tools.length??0),1),l[11]||=I(`small`,null,`tools`,-1)])]),I(`table`,Gy,[l[12]||=I(`thead`,null,[I(`tr`,null,[I(`th`,{scope:`col`},`Type`),I(`th`,{scope:`col`},`Tokens`),I(`th`,{scope:`col`},`Cost (USD)`)])],-1),I(`tbody`,null,[(N(!0),P(M,null,j(r.value,e=>(N(),P(`tr`,{key:e.label},[I(`th`,Ky,T(e.label),1),I(`td`,null,T(e.tokens.toLocaleString(`en-US`)),1),I(`td`,null,`$`+T(e.cost.toFixed(4)),1)]))),128))])])])])],64)):z(``,!0),k(U).tab===`state`?(N(),P(M,{key:1},[I(`div`,qy,[l[15]||=I(`h2`,null,`App State`,-1),L(k(qs),{size:18})]),I(`p`,Jy,` One shared JSON object for every agent, session and fork on `+T(k(nu)?.name??k(nu)?.id)+`. You and your agents can read, create, update or delete values and fields. Changes appear live and persist across closed browsers, interrupted agents and backend restarts. `,1),Wn(I(`textarea`,{"onUpdate:modelValue":l[5]||=e=>c.value=e,class:`app-state-json`,"aria-label":`App State JSON`,spellcheck:`false`,disabled:d.value||!k(s),rows:`12`},null,8,Yy),[[bs,c.value]]),I(`div`,Xy,[m.value?(N(),P(`span`,Zy,`State changed elsewhere. Load the latest JSON before saving.`)):z(``,!0),p.value?(N(),P(`button`,{key:1,class:`secondary`,disabled:d.value,onClick:h},T(m.value?`Load latest`:`Reset`),9,Qy)):z(``,!0),I(`button`,{class:`primary small`,disabled:!p.value||d.value||m.value,onClick:_},T(d.value?`Saving…`:`Save JSON`),9,$y)]),f.value?(N(),P(`p`,eb,T(f.value),1)):z(``,!0),L(V_,{value:k(s)?.value??{},disabled:d.value||p.value||!k(s),onChange:g},null,8,[`value`,`disabled`])],64)):z(``,!0),k(U).tab===`tasks`?(N(),F(Vv,{key:2})):z(``,!0),k(U).tab===`extensions`?(N(),F(Yv,{key:3})):z(``,!0),k(U).tab===`tools`?(N(),P(M,{key:4},[I(`div`,tb,[l[16]||=I(`h2`,null,`Tools`,-1),I(`span`,nb,T(y.value)+` / `+T(k(Eu)?.tools.length??0),1)]),l[20]||=I(`p`,{class:`hint`},` Every tool this agent's extensions provide. Open one to see its definition. `,-1),I(`div`,rb,[I(`div`,null,[L(k(Lc),{size:18}),l[18]||=I(`strong`,null,`Read only`,-1),I(`button`,{class:C([`switch`,{on:v.value}]),role:`switch`,"aria-checked":v.value,"aria-label":`Read only`,onClick:l[6]||=e=>a({readOnly:!v.value},v.value?`Read only off. Every tool is back.`:`Read only on. Tools that write are disabled.`)},[...l[17]||=[I(`span`,null,null,-1)]],10,ib)]),l[19]||=I(`p`,null,` Offers this agent only tools that read. Tools that create, update or delete leave its next request, and the choice is stored with the agent. `,-1)]),(N(!0),P(M,null,j(k(Eu)?.tools,e=>(N(),P(`details`,{key:e.name,class:C([`tool-row`,{disabled:!e.offered}])},[I(`summary`,null,[L(k(Gc),{size:18}),I(`strong`,null,T(e.name),1),e.offered?z(``,!0):(N(),P(`span`,ab,`disabled`)),I(`span`,ob,T(e.replay===`safe`?`replay safe`:`interrupt on crash`),1)]),I(`p`,null,T(e.description),1),e.parameters?(N(),P(`pre`,{key:0,class:`tool-signature`,"aria-label":`${e.name} TypeScript definition`},[I(`code`,null,[(N(!0),P(M,null,j(t.value.get(e.name),(e,t)=>(N(),P(`span`,{key:t,class:C(`tk-${e.kind}`)},T(e.text),3))),128))])],8,sb)):z(``,!0),I(`small`,null,T(e.replay===`safe`?`An interrupted execution may run again after recovery.`:`A crash records an interrupted result instead of rerunning this effect.`),1)],2))),128))],64)):z(``,!0)],10,Ay)],64)):(N(),P(`div`,Sy,[I(`button`,{class:`icon-button panel-toggle`,"aria-label":`Expand inspector`,title:`Expand inspector (${k(qu).inspector})`,onClick:l[0]||=e=>k(Hu)()},[L(k(Ec),{size:18})],8,Cy),(N(),P(M,null,j(n,e=>I(`button`,{key:e.id,class:C([`rail-tab`,{active:k(U).tab===e.id}]),"aria-label":`Open ${e.label}`,title:e.label,onClick:t=>k(Hu)(e.id)},[(N(),F(ni(e.icon),{size:20})),e.id===`tasks`&&k(Su).length?(N(),P(`span`,Ty,T(k(Su).length),1)):z(``,!0)],10,wy)),64))]))],2))}}),lb={class:`chat-empty`},ub={class:`eyebrow`},db={key:3,class:`hint offline-error`},fb={key:4,class:`offline-command`},pb={key:5,class:`hint`},mb={key:6,class:`hint`},hb={class:`offline-actions`},gb=[`disabled`],_b={key:7,class:`message-error`,role:`alert`},vb=A({__name:`OfflinePanel`,props:{device:{}},setup(e){let t=e,n=O(!1),r=O(``),i=B(()=>{let e=t.device,n=e.source===`config`;switch(e.status){case`checking`:return{title:`Checking ${e.id}…`,text:`Probing the device. This view fills in as soon as it answers.`};case`unauthorized`:return e.transport===`tunnel`?{title:`${e.id} tunnel credentials are not valid`,text:`Pair the device again — the hub will mint a fresh credential.`}:{title:e.hasToken?`${e.id} rejected its token`:`No token for ${e.id}`,text:e.hasToken?`The device's DPI_TOKEN changed (a rotate or a rebuilt device). Copy the current token into this hub's registry, then check again.`:`This hub has no token for the device yet. Register it, then check again.`,command:n&&e.kind!==`url`?`just net register ${e.id}`:`just net register ${e.id} --token <token>`};case`mismatch`:return{title:`${e.id} answers as a different device`,text:`The URL now reaches a backend with another identity (a rebuilt VM or a new data directory). If that is expected, register it again: that trusts the identity it answers with now.`,command:e.kind===`url`?`just net register ${e.id} --token <token>`:`just net register ${e.id}`};case`incompatible`:return{title:`${e.id} speaks another API version`,text:`Update the device's dpi-backend.`,command:n?`just net deploy ${e.id}`:void 0};default:return{title:`${e.id} is offline`,text:`Last seen ${Iu(e.lastSeenAt)}. Its agents keep their state on the device and resume when its backend starts again. The tree shows the last known sessions.`,command:n?e.kind===`local`?`just backend run`:e.kind===`url`?void 0:`just net restart ${e.id}`:void 0,alt:n&&e.kind!==`local`&&e.kind!==`url`?`just net up ${e.id}`:void 0}}});async function a(){n.value=!0,r.value=``;try{let e=await Il.check(t.device.id);e.status===`online`&&Au(`${e.id} is online.`)}catch(e){r.value=Ll(e)}finally{n.value=!1}}async function o(e){try{await navigator.clipboard.writeText(e),Au(`Copied.`)}catch{Au(`Clipboard needs localhost or HTTPS. Select the text to copy.`)}}return(t,s)=>(N(),P(`section`,{class:C([`chat-panel offline-panel`,e.device.status]),"aria-live":`polite`},[I(`div`,lb,[e.device.status===`checking`?(N(),F(k(yc),{key:0,class:`spin`,size:30})):e.device.status===`mismatch`||e.device.status===`unauthorized`?(N(),F(k(Ic),{key:1,size:30})):(N(),F(k(Hc),{key:2,size:30})),I(`span`,ub,T(e.device.kind.toUpperCase())+` · `+T(e.device.url??(e.device.transport===`tunnel`?`tunnel`:`no endpoint`)),1),I(`h2`,null,T(i.value.title),1),I(`p`,null,T(i.value.text),1),e.device.error?(N(),P(`p`,db,T(e.device.error),1)):z(``,!0),i.value.command?(N(),P(`div`,fb,[I(`code`,null,T(i.value.command),1),I(`button`,{class:`icon-button`,"aria-label":`Copy command`,onClick:s[0]||=e=>o(i.value.command)},[L(k(tc),{size:18})])])):z(``,!0),i.value.command?(N(),P(`p`,pb,`Run it in this repo's terminal, then press Check now.`)):z(``,!0),i.value.alt?(N(),P(`p`,mb,[s[2]||=R(` Never deployed or rebuilt? `,-1),I(`code`,null,T(i.value.alt),1),s[3]||=R(` provisions it from scratch. `,-1)])):z(``,!0),I(`div`,hb,[I(`button`,{class:`secondary`,disabled:n.value,onClick:s[1]||=e=>a()},[L(k(Nc),{size:18}),R(T(n.value?`Checking…`:`Check now`),1)],8,gb)]),r.value?(N(),P(`p`,_b,T(r.value),1)):z(``,!0)])],2))}}),yb={class:`dir-browser`},bb={class:`dir-path`},xb=[`disabled`],Sb=[`aria-busy`],Cb=[`title`],wb=[`aria-selected`,`title`,`onClick`],Tb={key:1,class:`hint`},Eb={key:0,class:`message-error`,role:`alert`},Db=A({__name:`DirBrowser`,props:ui({deviceId:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,n=Ai(e,`modelValue`),r=O(),i=O(!1),a=O(``),o=0;async function s(e){let s=++o,c=t.deviceId;i.value=!0,a.value=``;try{let t=await Pl(c).dirs(e);return s===o?(r.value=t,t.path&&(n.value=t.path),t):void 0}catch(e){s===o&&(a.value=Ll(e));return}finally{s===o&&(i.value=!1)}}return Zn(()=>t.deviceId,async()=>{r.value=void 0;let e=await s(``),t=e?.dirs[0];t&&!e.path&&await s(t.path)},{immediate:!0}),(e,t)=>(N(),P(`div`,yb,[I(`div`,bb,[Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,"aria-label":`Working directory`,required:``,placeholder:`/path/to/project`,spellcheck:`false`,autocomplete:`off`,onKeydown:t[1]||=Ms(As(e=>s(n.value),[`prevent`]),[`enter`])},null,544),[[bs,n.value]]),I(`button`,{type:`button`,class:`secondary small`,disabled:i.value||!n.value,onClick:t[2]||=e=>s(n.value)},` Go `,8,xb)]),I(`div`,{class:`dir-list`,role:`listbox`,"aria-label":`Directories`,"aria-busy":i.value},[I(`button`,{type:`button`,class:`dir-item`,title:`Start directories`,onClick:t[3]||=e=>s(``)},[L(k(dc),{size:16}),t[5]||=I(`span`,null,`Start dirs`,-1)]),r.value?.parent?(N(),P(`button`,{key:0,type:`button`,class:`dir-item`,title:r.value.parent,onClick:t[4]||=e=>s(r.value.parent)},[L(k(rc),{size:16}),t[6]||=I(`span`,null,`..`,-1)],8,Cb)):z(``,!0),(N(!0),P(M,null,j(r.value?.dirs,e=>(N(),P(`button`,{key:e.path,type:`button`,class:`dir-item`,role:`option`,"aria-selected":e.path===n.value,title:e.path,onClick:t=>s(e.path)},[e.path===n.value?(N(),F(k(sc),{key:0,size:16})):(N(),F(k(cc),{key:1,size:16})),I(`span`,null,T(e.name),1)],8,wb))),128)),r.value&&!r.value.dirs.length?(N(),P(`p`,Tb,`No subdirectories.`)):z(``,!0)],8,Sb),a.value?(N(),P(`p`,Eb,T(a.value),1)):z(``,!0)]))}}),Ob={key:0,class:`message-error`},kb=[`value`],Ab={class:`field`},jb={key:0,class:`hint`,title:`The device has no provider key — it lists its built-in catalog, and chat needs OPENROUTER_API_KEY set in the device's env file`},Mb=[`value`],Nb={key:2,class:`message-error`,role:`alert`},Pb=[`disabled`],Fb=A({__name:`NewSessionDialog`,props:{deviceId:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>Yl.devices.value.filter(e=>e.status===`online`)),a=O(i.value.find(e=>e.id===n.deviceId)?.id??i.value[0]?.id??``),o=B(()=>i.value.find(e=>e.id===a.value)),s=B(()=>{let e=o.value?.info?.models??[];if(e.length)return e;let t=o.value?.info;return t?.defaultModel&&t.provider?[{id:t.defaultModel,provider:t.provider,name:`${t.defaultModel} (device default)`,tier:`—`,icon:`lab.png`,contextWindow:0,reasoning:!1,cost:{input:0,output:0}}]:[]}),c=B(()=>!s.value.length||(o.value?.info?.models?.length??0)===0),l=B(()=>!!o.value?.info?.providerKeyMissing),u=e=>`${e.provider}/${e.id}`,d=O({name:``,cwd:``,model:``}),f=O(!1),p=O(``);Zn(o,e=>{let t=s.value,n=t.find(t=>t.id===e?.info?.defaultModel)??t[0];d.value.model=n?u(n):``,d.value.cwd=``},{immediate:!0});async function m(){if(!f.value&&o.value){f.value=!0,p.value=``;try{let e=s.value.find(e=>u(e)===d.value.model)??s.value[0];if(!e)throw Error(`Choose a model`);let t=await Pl(o.value.id).createSession({name:d.value.name.trim()||`New session`,cwd:d.value.cwd.trim(),model:{provider:e.provider,modelId:e.id}}),n=t.agents.find(e=>e.kind===`root`)??t.agents[0];du({deviceId:o.value.id,sessionId:t.id,agentId:n?.id??1}),Au(`Session created on ${o.value.id}.`),r(`close`)}catch(e){p.value=Ll(e)}finally{f.value=!1}}}return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[6]||=As(e=>r(`close`),[`self`])},[I(`form`,{class:`modal session-modal`,onSubmit:As(m,[`prevent`])},[I(`header`,null,[t[7]||=I(`div`,null,[I(`span`,{class:`eyebrow`},`A PERSISTENT WORKSPACE`),I(`h2`,null,`New session`)],-1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close new session`,onClick:t[0]||=e=>r(`close`)},[L(k(Kc),{size:18})])]),i.value.length?(N(),P(M,{key:1},[I(`label`,null,[t[8]||=R(`Device`,-1),Wn(I(`select`,{"onUpdate:modelValue":t[1]||=e=>a.value=e,"aria-label":`Device`},[(N(!0),P(M,null,j(i.value,e=>(N(),P(`option`,{key:e.id,value:e.id},T(e.name)+T(e.info?.hostname&&e.info.hostname!==e.name?` · ${e.info.hostname}`:``),9,kb))),128))],512),[[Cs,a.value]])]),I(`label`,null,[t[9]||=R(`Session name`,-1),Wn(I(`input`,{"onUpdate:modelValue":t[2]||=e=>d.value.name=e,autofocus:``,placeholder:`My durable agent`,maxlength:`100`},null,512),[[bs,d.value.name]])]),I(`div`,Ab,[I(`span`,null,`Working directory on `+T(i.value.find(e=>e.id===a.value)?.name??a.value),1),L(Db,{modelValue:d.value.cwd,"onUpdate:modelValue":t[3]||=e=>d.value.cwd=e,"device-id":a.value},null,8,[`modelValue`,`device-id`])]),I(`label`,null,[t[10]||=R(`Model`,-1),c.value||l.value?(N(),P(`span`,jb,`no API key on device — chat needs one`)):z(``,!0),Wn(I(`select`,{"onUpdate:modelValue":t[4]||=e=>d.value.model=e,"aria-label":`New session model`},[(N(!0),P(M,null,j(s.value,e=>(N(),P(`option`,{key:u(e),value:u(e)},T(e.tier)+` / `+T(e.name),9,Mb))),128))],512),[[Cs,d.value.model]])])],64)):(N(),P(`p`,Ob,` No device is online. Start one with just backend run or just net up <id>, then try again. `)),p.value?(N(),P(`p`,Nb,T(p.value),1)):z(``,!0),I(`footer`,null,[I(`button`,{type:`button`,class:`secondary`,onClick:t[5]||=e=>r(`close`)},`Cancel`),I(`button`,{class:`primary`,disabled:f.value||!d.value.model||!d.value.cwd||!o.value},[L(k(jc),{size:18}),R(T(f.value?`Creating…`:`Create session`),1)],8,Pb)])],32)]))}}),Ib=new Uint8Array(512),Lb=new Uint8Array(256);(()=>{let e=1;for(let t=0;t<255;t++)Ib[t]=e,Lb[e]=t,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)Ib[e]=Ib[e-255]})();var Rb=(e,t)=>e===0||t===0?0:Ib[Lb[e]+Lb[t]];function zb(e){let t=[1];for(let n=0;n<e;n++){let e=Array(t.length+1).fill(0);for(let r=0;r<t.length;r++)e[r]^=t[r],e[r+1]^=Rb(t[r],Ib[n]);t=e}return t}function Bb(e,t){let n=zb(t),r=Array(t).fill(0);for(let i of e){let e=i^r[0];r.shift(),r.push(0);for(let i=0;i<t;i++)r[i]^=Rb(n[i+1],e)}return r}var Vb=[21,25,29,33,37,41,45,49,53,57,61,65],Hb=[19,34,55,80,108,136,156,194,232,274,324,370],Ub=[7,10,15,20,26,36,40,48,60,72,80,96],Wb=[7,10,15,20,26,18,20,24,30,18,20,24],Gb=[[[1,19]],[[1,34]],[[1,55]],[[1,80]],[[1,108]],[[2,68]],[[2,78]],[[2,97]],[[2,116]],[[2,68],[2,69]],[[4,81]],[[2,92],[2,93]]],Kb=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58]],qb=e=>e<=9?8:16;function Jb(e){for(let t=1;t<=Vb.length;t++)if(4+qb(t)+e*8<=Hb[t-1]*8)return t;throw Error(`qr: payload too long (${e} bytes; v12L max ${Hb[11]-3})`)}function Yb(e,t){let n=[...new TextEncoder().encode(e)],r=[],i=(e,t)=>{for(let n=t-1;n>=0;n--)r.push(e>>n&1)};i(4,4),i(n.length,qb(t));for(let e of n)i(e,8);let a=Hb[t-1],o=a*8;for(i(0,Math.min(4,o-r.length));r.length%8!=0;)r.push(0);let s=[236,17],c=0;for(;r.length<o;)i(s[c++%2],8);let l=[];for(let e=0;e<a;e++){let t=0;for(let n=0;n<8;n++)t=t<<1|r[e*8+n];l.push(t)}return l}function Xb(e,t){let n=Wb[e-1],r=[],i=0;for(let[n,a]of Gb[e-1])for(let e=0;e<n;e++)r.push(t.slice(i,i+=a));let a=[],o=Math.max(...r.map(e=>e.length));for(let e=0;e<o;e++)for(let t of r)e<t.length&&a.push(t[e]);let s=r.map(e=>Bb(e,n));for(let e=0;e<n;e++)for(let t of s)a.push(t[e]);return a}function Zb(e){return Array.from({length:e},()=>Array(e).fill(!1))}function Qb(e,t){let n=Vb[t-1],r=(t,r)=>{for(let i=-1;i<=7;i++)for(let a=-1;a<=7;a++){let o=t+i,s=r+a;if(o<0||o>=n||s<0||s>=n)continue;let c=i>=0&&i<=6&&a>=0&&a<=6&&(i===0||i===6||a===0||a===6),l=i>=2&&i<=4&&a>=2&&a<=4;e[o][s]=c||l}};r(0,0),r(0,n-7),r(n-7,0);for(let t=8;t<n-8;t++)e[6][t]=t%2==0,e[t][6]=t%2==0;let i=Kb[t-1];for(let t of i)for(let r of i)if(!(t<=8&&r<=8||t<=8&&r>=n-9||t>=n-9&&r<=8))for(let n=-2;n<=2;n++)for(let i=-2;i<=2;i++)e[t+n][r+i]=Math.max(Math.abs(n),Math.abs(i))!==1;if(e[n-8][8]=!0,t>=7){let r=t<<12;for(let e=17;e>=12;e--)r>>e&1&&(r^=7973<<e-12);let i=t<<12|r&4095;for(let t=0;t<18;t++){let r=(i>>t&1)==1,a=n-11+t%3,o=t/3|0;e[a][o]=r,e[o][a]=r}}}function $b(e){let t=8|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>9&1?1335:0);let r=(t<<10|n)^21522,i=[];for(let e=14;e>=0;e--)i.push((r>>e&1)==1);return i}function ex(e,t){let n=Vb[0]*0+e.length,r=$b(t);for(let t=0;t<=5;t++)e[8][t]=r[t];e[8][7]=r[6],e[8][8]=r[7],e[7][8]=r[8];for(let t=9;t<15;t++)e[14-t][8]=r[t];for(let t=0;t<7;t++)e[n-1-t][8]=r[t];e[8][n-8]=r[7];for(let t=8;t<15;t++)e[8][n-15+t]=r[t];e[n-8][8]=!0}function tx(e,t,n,r){let i=e.length;Vb[n-1]*Vb[n-1];let a=e=>((t[e>>3]??0)>>7-(e&7)&1)==1,o=0,s=!0;for(let t=i-1;t>0;t-=2){t===6&&t--;for(let c=0;c<i;c++){let l=s?i-1-c:c;for(let i of[t,t-1]){if(rx(l,i,n))continue;if(o>=(Hb[n-1]+Ub[n-1])*8){o++;continue}let t=a(o++);nx(l,i,r)&&(t=!t),e[l][i]=t}}s=!s}}function nx(e,t,n){switch(n){case 0:return(e+t)%2==0;case 1:return e%2==0;case 2:return t%3==0;case 3:return(e+t)%3==0;case 4:return(Math.floor(e/2)+Math.floor(t/3))%2==0;case 5:return e*t%2+e*t%3==0;case 6:return(e*t%2+e*t%3)%2==0;default:return((e+t)%2+e*t%3)%2==0}}function rx(e,t,n){let r=Vb[n-1];if(e<=8&&t<=8||e<=8&&t>=r-8||e>=r-8&&t<=8||e===6||t===6||n>=7&&(e>=r-11&&e<=r-9&&t<=5||t>=r-11&&t<=r-9&&e<=5))return!0;let i=Kb[n-1];for(let n of i)for(let a of i)if(!(n<=8&&a<=8||n<=8&&a>=r-9||n>=r-9&&a<=8)&&Math.abs(e-n)<=2&&Math.abs(t-a)<=2)return!0;return!1}function ix(e){let t=e.length,n=0;for(let r=0;r<2;r++)for(let i=0;i<t;i++){let a=1;for(let o=1;o<t;o++)(r===0?e[i][o]:e[o][i])===(r===0?e[i][o-1]:e[o-1][i])?(a++,o===t-1&&a>=5&&(n+=3+(a-5))):(a>=5&&(n+=3+(a-5)),a=1)}for(let r=0;r<t-1;r++)for(let i=0;i<t-1;i++){let t=e[r][i];e[r][i+1]===t&&e[r+1][i]===t&&e[r+1][i+1]===t&&(n+=3)}let r=[!0,!1,!0,!0,!0,!1,!0,!1,!1,!1,!1],i=(e,t)=>{for(let i=0;i+11<=t;i++){let t=!0;for(let n=0;n<11;n++)if(e(i+n)!==r[n]){t=!1;break}t&&(n+=40)}};for(let n=0;n<t;n++)i(t=>e[n][t],t);for(let n=0;n<t;n++)i(t=>e[t][n],t);let a=0;for(let t of e)for(let e of t)e&&a++;let o=a*100/(t*t);return n+=Math.floor(Math.abs(o-50)/5)*10,n}function ax(e,t){let n=Jb(new TextEncoder().encode(e).length),r=Vb[n-1],i=Xb(n,Yb(e,n)),a=Zb(r);return Qb(a,n),tx(a,i,n,t),ex(a,t),a}function ox(e,t){if(t!==void 0)return ax(e,t);let n;for(let t=0;t<8;t++){let r=ax(e,t),i=ix(r);(!n||i<n.score)&&(n={m:r,score:i})}return n.m}function sx(e,t=160){let n=ox(e),r=n.length,i=t/(r+8),a=``;for(let e=0;e<r;e++)for(let t=0;t<r;t++)n[e][t]&&(a+=`<rect x="${((t+4)*i).toFixed(2)}" y="${((e+4)*i).toFixed(2)}" width="${i.toFixed(3)}" height="${i.toFixed(3)}"/>`);return`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${t} ${t}" shape-rendering="crispEdges"><rect width="${t}" height="${t}" fill="#fff"/><g fill="#000">${a}</g></svg>`}var cx={class:`device-handoff`,"aria-label":`Pair this machine`},lx={class:`row`},ux=[`disabled`],dx=[`disabled`],fx={key:0,class:`target`,"data-testid":`device-url`},px={key:1,class:`err`},mx=((e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n})(A({__name:`DeviceHandoff`,props:{offerFragment:{}},setup(e){let t=e,n=O(`4780`),r=O(!1),i=B(()=>{let e=/^\d{1,5}$/.test(n.value)?Number(n.value):0;if(!(!e||e<1||e>65535))return`http://127.0.0.1:${e}/pair#${t.offerFragment}`});function a(){let e=i.value;e&&window.open(e,`_blank`,`noopener`)}async function o(){let e=i.value;if(e)try{await navigator.clipboard.writeText(e),r.value=!0,setTimeout(()=>r.value=!1,1600)}catch{}}return(e,t)=>(N(),P(`section`,cx,[I(`header`,null,[L(k(Sc),{size:18}),t[1]||=I(`h3`,null,`Pair THIS machine`,-1)]),t[4]||=I(`p`,{class:`what`},[R(` If this browser runs on the device itself, open its local pairing page — the offer is relayed inside the link, nothing is sent to the hub. Start `),I(`code`,null,`dpi device`),R(` there first. `)],-1),I(`div`,lx,[I(`label`,null,[t[2]||=R(` local port `,-1),Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,inputmode:`numeric`,spellcheck:`false`,"aria-label":`Local dpi backend port`},null,512),[[bs,n.value]])]),I(`button`,{class:`primary`,type:`button`,disabled:!i.value,onClick:a},[L(k(ac),{size:15}),t[3]||=R(`Open the device page `,-1)],8,ux),I(`button`,{class:`secondary`,type:`button`,disabled:!i.value,onClick:o},[L(k(tc),{size:15}),R(T(r.value?`Copied`:`Copy link`),1)],8,dx)]),i.value?(N(),P(`p`,fx,T(i.value),1)):z(``,!0),i.value?z(``,!0):(N(),P(`p`,px,`port must be 1–65535`))]))}}),[[`__scopeId`,`data-v-01884b7b`]]);function hx(e){return wx(e)&&!gx(e)&&!Ox(e)&&Symbol.asyncIterator in e}function gx(e){return Array.isArray(e)}function _x(e){return typeof e==`bigint`}function vx(e){return typeof e==`boolean`}function yx(e){return e instanceof globalThis.Date}function bx(e){return typeof e==`function`}function xx(e){return wx(e)&&!gx(e)&&!Ox(e)&&Symbol.iterator in e}function Sx(e){return e===null}function Cx(e){return typeof e==`number`}function wx(e){return typeof e==`object`&&!!e}function Tx(e){return e instanceof globalThis.RegExp}function Ex(e){return typeof e==`string`}function Dx(e){return typeof e==`symbol`}function Ox(e){return e instanceof globalThis.Uint8Array}function kx(e){return e===void 0}function Ax(e){return e.map(e=>Fx(e))}function jx(e){return new Date(e.getTime())}function Mx(e){return new Uint8Array(e)}function Nx(e){return new RegExp(e.source,e.flags)}function Px(e){let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=Fx(e[n]);for(let n of Object.getOwnPropertySymbols(e))t[n]=Fx(e[n]);return t}function Fx(e){return gx(e)?Ax(e):yx(e)?jx(e):Ox(e)?Mx(e):Tx(e)?Nx(e):wx(e)?Px(e):e}function Ix(e){return Fx(e)}function Lx(e,t){return Ix(t===void 0?e:{...t,...e})}function Rx(e){return typeof e==`object`&&!!e}function zx(e){return globalThis.Array.isArray(e)&&!globalThis.ArrayBuffer.isView(e)}function Bx(e){return e===void 0}function Vx(e){return typeof e==`number`}var Hx;(function(e){e.InstanceMode=`default`,e.ExactOptionalPropertyTypes=!1,e.AllowArrayObject=!1,e.AllowNaN=!1,e.AllowNullVoid=!1;function t(t,n){return e.ExactOptionalPropertyTypes?n in t:t[n]!==void 0}e.IsExactOptionalProperty=t;function n(t){let n=Rx(t);return e.AllowArrayObject?n:n&&!zx(t)}e.IsObjectLike=n;function r(e){return n(e)&&!(e instanceof Date)&&!(e instanceof Uint8Array)}e.IsRecordLike=r;function i(t){return e.AllowNaN?Vx(t):Number.isFinite(t)}e.IsNumberLike=i;function a(t){let n=Bx(t);return e.AllowNullVoid?n||t===null:n}e.IsVoidLike=a})(Hx||={});function Ux(e){return globalThis.Object.freeze(e).map(e=>Jx(e))}function Wx(e){return e}function Gx(e){return e}function Kx(e){return e}function qx(e){let t={};for(let n of Object.getOwnPropertyNames(e))t[n]=Jx(e[n]);for(let n of Object.getOwnPropertySymbols(e))t[n]=Jx(e[n]);return globalThis.Object.freeze(t)}function Jx(e){return gx(e)?Ux(e):yx(e)?Wx(e):Ox(e)?Gx(e):Tx(e)?Kx(e):wx(e)?qx(e):e}function q(e,t){let n=t===void 0?e:{...t,...e};switch(Hx.InstanceMode){case`freeze`:return Jx(n);case`clone`:return Ix(n);default:return n}}var Yx=class extends Error{constructor(e){super(e)}},Xx=Symbol.for(`TypeBox.Transform`),Zx=Symbol.for(`TypeBox.Readonly`),Qx=Symbol.for(`TypeBox.Optional`),$x=Symbol.for(`TypeBox.Hint`),J=Symbol.for(`TypeBox.Kind`);function eS(e){return wx(e)&&e[Zx]===`Readonly`}function tS(e){return wx(e)&&e[Qx]===`Optional`}function nS(e){return Y(e,`Any`)}function rS(e){return Y(e,`Argument`)}function iS(e){return Y(e,`Array`)}function aS(e){return Y(e,`AsyncIterator`)}function oS(e){return Y(e,`BigInt`)}function sS(e){return Y(e,`Boolean`)}function cS(e){return Y(e,`Computed`)}function lS(e){return Y(e,`Constructor`)}function uS(e){return Y(e,`Date`)}function dS(e){return Y(e,`Function`)}function fS(e){return Y(e,`Integer`)}function pS(e){return Y(e,`Intersect`)}function mS(e){return Y(e,`Iterator`)}function Y(e,t){return wx(e)&&J in e&&e[J]===t}function hS(e){return vx(e)||Cx(e)||Ex(e)}function gS(e){return Y(e,`Literal`)}function _S(e){return Y(e,`MappedKey`)}function vS(e){return Y(e,`MappedResult`)}function yS(e){return Y(e,`Never`)}function bS(e){return Y(e,`Not`)}function xS(e){return Y(e,`Null`)}function SS(e){return Y(e,`Number`)}function CS(e){return Y(e,`Object`)}function wS(e){return Y(e,`Promise`)}function TS(e){return Y(e,`Record`)}function ES(e){return Y(e,`Ref`)}function DS(e){return Y(e,`RegExp`)}function OS(e){return Y(e,`String`)}function kS(e){return Y(e,`Symbol`)}function AS(e){return Y(e,`TemplateLiteral`)}function jS(e){return Y(e,`This`)}function MS(e){return wx(e)&&Xx in e}function NS(e){return Y(e,`Tuple`)}function PS(e){return Y(e,`Undefined`)}function FS(e){return Y(e,`Union`)}function IS(e){return Y(e,`Uint8Array`)}function LS(e){return Y(e,`Unknown`)}function RS(e){return Y(e,`Unsafe`)}function zS(e){return Y(e,`Void`)}function BS(e){return wx(e)&&J in e&&Ex(e[J])}function VS(e){return nS(e)||rS(e)||iS(e)||sS(e)||oS(e)||aS(e)||cS(e)||lS(e)||uS(e)||dS(e)||fS(e)||pS(e)||mS(e)||gS(e)||_S(e)||vS(e)||yS(e)||bS(e)||xS(e)||SS(e)||CS(e)||wS(e)||TS(e)||ES(e)||DS(e)||OS(e)||kS(e)||AS(e)||jS(e)||NS(e)||PS(e)||FS(e)||IS(e)||LS(e)||RS(e)||zS(e)||BS(e)}var HS=`Argument.Any.Array.AsyncIterator.BigInt.Boolean.Computed.Constructor.Date.Enum.Function.Integer.Intersect.Iterator.Literal.MappedKey.MappedResult.Not.Null.Number.Object.Promise.Record.Ref.RegExp.String.Symbol.TemplateLiteral.This.Tuple.Undefined.Union.Uint8Array.Unknown.Void`.split(`.`);function US(e){try{return new RegExp(e),!0}catch{return!1}}function WS(e){if(!Ex(e))return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n>=7&&n<=13||n===27||n===127)return!1}return!0}function GS(e){return JS(e)||HC(e)}function KS(e){return kx(e)||_x(e)}function qS(e){return kx(e)||Cx(e)}function JS(e){return kx(e)||vx(e)}function X(e){return kx(e)||Ex(e)}function YS(e){return kx(e)||Ex(e)&&WS(e)&&US(e)}function XS(e){return kx(e)||Ex(e)&&WS(e)}function ZS(e){return kx(e)||HC(e)}function QS(e){return wx(e)&&e[Qx]===`Optional`}function $S(e){return Z(e,`Any`)&&X(e.$id)}function eC(e){return Z(e,`Argument`)&&Cx(e.index)}function tC(e){return Z(e,`Array`)&&e.type===`array`&&X(e.$id)&&HC(e.items)&&qS(e.minItems)&&qS(e.maxItems)&&JS(e.uniqueItems)&&ZS(e.contains)&&qS(e.minContains)&&qS(e.maxContains)}function nC(e){return Z(e,`AsyncIterator`)&&e.type===`AsyncIterator`&&X(e.$id)&&HC(e.items)}function rC(e){return Z(e,`BigInt`)&&e.type===`bigint`&&X(e.$id)&&KS(e.exclusiveMaximum)&&KS(e.exclusiveMinimum)&&KS(e.maximum)&&KS(e.minimum)&&KS(e.multipleOf)}function iC(e){return Z(e,`Boolean`)&&e.type===`boolean`&&X(e.$id)}function aC(e){return Z(e,`Computed`)&&Ex(e.target)&&gx(e.parameters)&&e.parameters.every(e=>HC(e))}function oC(e){return Z(e,`Constructor`)&&e.type===`Constructor`&&X(e.$id)&&gx(e.parameters)&&e.parameters.every(e=>HC(e))&&HC(e.returns)}function sC(e){return Z(e,`Date`)&&e.type===`Date`&&X(e.$id)&&qS(e.exclusiveMaximumTimestamp)&&qS(e.exclusiveMinimumTimestamp)&&qS(e.maximumTimestamp)&&qS(e.minimumTimestamp)&&qS(e.multipleOfTimestamp)}function cC(e){return Z(e,`Function`)&&e.type===`Function`&&X(e.$id)&&gx(e.parameters)&&e.parameters.every(e=>HC(e))&&HC(e.returns)}function lC(e){return Z(e,`Integer`)&&e.type===`integer`&&X(e.$id)&&qS(e.exclusiveMaximum)&&qS(e.exclusiveMinimum)&&qS(e.maximum)&&qS(e.minimum)&&qS(e.multipleOf)}function uC(e){return wx(e)&&Object.entries(e).every(([e,t])=>WS(e)&&HC(t))}function dC(e){return Z(e,`Intersect`)&&!(Ex(e.type)&&e.type!==`object`)&&gx(e.allOf)&&e.allOf.every(e=>HC(e)&&!NC(e))&&X(e.type)&&(JS(e.unevaluatedProperties)||ZS(e.unevaluatedProperties))&&X(e.$id)}function fC(e){return Z(e,`Iterator`)&&e.type===`Iterator`&&X(e.$id)&&HC(e.items)}function Z(e,t){return wx(e)&&J in e&&e[J]===t}function pC(e){return gC(e)&&Ex(e.const)}function mC(e){return gC(e)&&Cx(e.const)}function hC(e){return gC(e)&&vx(e.const)}function gC(e){return Z(e,`Literal`)&&X(e.$id)&&_C(e.const)}function _C(e){return vx(e)||Cx(e)||Ex(e)}function vC(e){return Z(e,`MappedKey`)&&gx(e.keys)&&e.keys.every(e=>Cx(e)||Ex(e))}function yC(e){return Z(e,`MappedResult`)&&uC(e.properties)}function bC(e){return Z(e,`Never`)&&wx(e.not)&&Object.getOwnPropertyNames(e.not).length===0}function xC(e){return Z(e,`Not`)&&HC(e.not)}function SC(e){return Z(e,`Null`)&&e.type===`null`&&X(e.$id)}function CC(e){return Z(e,`Number`)&&e.type===`number`&&X(e.$id)&&qS(e.exclusiveMaximum)&&qS(e.exclusiveMinimum)&&qS(e.maximum)&&qS(e.minimum)&&qS(e.multipleOf)}function wC(e){return Z(e,`Object`)&&e.type===`object`&&X(e.$id)&&uC(e.properties)&&GS(e.additionalProperties)&&qS(e.minProperties)&&qS(e.maxProperties)}function TC(e){return Z(e,`Promise`)&&e.type===`Promise`&&X(e.$id)&&HC(e.item)}function EC(e){return Z(e,`Record`)&&e.type===`object`&&X(e.$id)&&GS(e.additionalProperties)&&wx(e.patternProperties)&&(e=>{let t=Object.getOwnPropertyNames(e.patternProperties);return t.length===1&&US(t[0])&&wx(e.patternProperties)&&HC(e.patternProperties[t[0]])})(e)}function DC(e){return Z(e,`Ref`)&&X(e.$id)&&Ex(e.$ref)}function OC(e){return Z(e,`RegExp`)&&X(e.$id)&&Ex(e.source)&&Ex(e.flags)&&qS(e.maxLength)&&qS(e.minLength)}function kC(e){return Z(e,`String`)&&e.type===`string`&&X(e.$id)&&qS(e.minLength)&&qS(e.maxLength)&&YS(e.pattern)&&XS(e.format)}function AC(e){return Z(e,`Symbol`)&&e.type===`symbol`&&X(e.$id)}function jC(e){return Z(e,`TemplateLiteral`)&&e.type===`string`&&Ex(e.pattern)&&e.pattern[0]===`^`&&e.pattern[e.pattern.length-1]===`$`}function MC(e){return Z(e,`This`)&&X(e.$id)&&Ex(e.$ref)}function NC(e){return wx(e)&&Xx in e}function PC(e){return Z(e,`Tuple`)&&e.type===`array`&&X(e.$id)&&Cx(e.minItems)&&Cx(e.maxItems)&&e.minItems===e.maxItems&&(kx(e.items)&&kx(e.additionalItems)&&e.minItems===0||gx(e.items)&&e.items.every(e=>HC(e)))}function FC(e){return Z(e,`Undefined`)&&e.type===`undefined`&&X(e.$id)}function IC(e){return Z(e,`Union`)&&X(e.$id)&&wx(e)&&gx(e.anyOf)&&e.anyOf.every(e=>HC(e))}function LC(e){return Z(e,`Uint8Array`)&&e.type===`Uint8Array`&&X(e.$id)&&qS(e.minByteLength)&&qS(e.maxByteLength)}function RC(e){return Z(e,`Unknown`)&&X(e.$id)}function zC(e){return Z(e,`Unsafe`)}function BC(e){return Z(e,`Void`)&&e.type===`void`&&X(e.$id)}function VC(e){return wx(e)&&J in e&&Ex(e[J])&&!HS.includes(e[J])}function HC(e){return wx(e)&&($S(e)||eC(e)||tC(e)||iC(e)||rC(e)||nC(e)||aC(e)||oC(e)||sC(e)||cC(e)||lC(e)||dC(e)||fC(e)||gC(e)||vC(e)||yC(e)||bC(e)||xC(e)||SC(e)||CC(e)||wC(e)||TC(e)||EC(e)||DC(e)||OC(e)||kC(e)||AC(e)||jC(e)||MC(e)||PC(e)||FC(e)||IC(e)||LC(e)||RC(e)||zC(e)||BC(e)||VC(e))}var UC=`(true|false)`,WC=`(0|[1-9][0-9]*)`,GC=`(.*)`,KC=`(?!.*)`;`${UC}`;var qC=`^${WC}$`,JC=`^${GC}$`,YC=`^${KC}$`;function XC(e,t){return e.includes(t)}function ZC(e){return[...new Set(e)]}function QC(e,t){return e.filter(e=>t.includes(e))}function $C(e,t){return e.reduce((e,t)=>QC(e,t),t)}function ew(e){return e.length===1?e[0]:e.length>1?$C(e.slice(1),e[0]):[]}function tw(e){let t=[];for(let n of e)t.push(...n);return t}function nw(e){return q({[J]:`Any`},e)}function rw(e,t){return q({[J]:`Array`,type:`array`,items:e},t)}function iw(e){return q({[J]:`Argument`,index:e})}function aw(e,t){return q({[J]:`AsyncIterator`,type:`AsyncIterator`,items:e},t)}function ow(e,t,n){return q({[J]:`Computed`,target:e,parameters:t},n)}function sw(e,t){let{[t]:n,...r}=e;return r}function cw(e,t){return t.reduce((e,t)=>sw(e,t),e)}function lw(e){return q({[J]:`Never`,not:{}},e)}function uw(e){return q({[J]:`MappedResult`,properties:e})}function dw(e,t,n){return q({[J]:`Constructor`,type:`Constructor`,parameters:e,returns:t},n)}function fw(e,t,n){return q({[J]:`Function`,type:`Function`,parameters:e,returns:t},n)}function pw(e,t){return q({[J]:`Union`,anyOf:e},t)}function mw(e){return e.some(e=>tS(e))}function hw(e){return e.map(e=>tS(e)?gw(e):e)}function gw(e){return cw(e,[Qx])}function _w(e,t){return mw(e)?rE(pw(hw(e),t)):pw(hw(e),t)}function vw(e,t){return e.length===1?q(e[0],t):e.length===0?lw(t):_w(e,t)}function yw(e,t){return e.length===0?lw(t):e.length===1?q(e[0],t):pw(e,t)}var bw=class extends Yx{};function xw(e){return e.replace(/\\\$/g,`$`).replace(/\\\*/g,`*`).replace(/\\\^/g,`^`).replace(/\\\|/g,`|`).replace(/\\\(/g,`(`).replace(/\\\)/g,`)`)}function Sw(e,t,n){return e[t]===n&&e.charCodeAt(t-1)!==92}function Cw(e,t){return Sw(e,t,`(`)}function ww(e,t){return Sw(e,t,`)`)}function Tw(e,t){return Sw(e,t,`|`)}function Ew(e){if(!(Cw(e,0)&&ww(e,e.length-1)))return!1;let t=0;for(let n=0;n<e.length;n++)if(Cw(e,n)&&(t+=1),ww(e,n)&&--t,t===0&&n!==e.length-1)return!1;return!0}function Dw(e){return e.slice(1,e.length-1)}function Ow(e){let t=0;for(let n=0;n<e.length;n++)if(Cw(e,n)&&(t+=1),ww(e,n)&&--t,Tw(e,n)&&t===0)return!0;return!1}function kw(e){for(let t=0;t<e.length;t++)if(Cw(e,t))return!0;return!1}function Aw(e){let[t,n]=[0,0],r=[];for(let i=0;i<e.length;i++)if(Cw(e,i)&&(t+=1),ww(e,i)&&--t,Tw(e,i)&&t===0){let t=e.slice(n,i);t.length>0&&r.push(Mw(t)),n=i+1}let i=e.slice(n);return i.length>0&&r.push(Mw(i)),r.length===0?{type:`const`,const:``}:r.length===1?r[0]:{type:`or`,expr:r}}function jw(e){function t(e,t){if(!Cw(e,t))throw new bw(`TemplateLiteralParser: Index must point to open parens`);let n=0;for(let r=t;r<e.length;r++)if(Cw(e,r)&&(n+=1),ww(e,r)&&--n,n===0)return[t,r];throw new bw(`TemplateLiteralParser: Unclosed group parens in expression`)}function n(e,t){for(let n=t;n<e.length;n++)if(Cw(e,n))return[t,n];return[t,e.length]}let r=[];for(let i=0;i<e.length;i++)if(Cw(e,i)){let[n,a]=t(e,i),o=e.slice(n,a+1);r.push(Mw(o)),i=a}else{let[t,a]=n(e,i),o=e.slice(t,a);o.length>0&&r.push(Mw(o)),i=a-1}return r.length===0?{type:`const`,const:``}:r.length===1?r[0]:{type:`and`,expr:r}}function Mw(e){return Ew(e)?Mw(Dw(e)):Ow(e)?Aw(e):kw(e)?jw(e):{type:`const`,const:xw(e)}}function Nw(e){return Mw(e.slice(1,e.length-1))}var Pw=class extends Yx{};function Fw(e){return e.type===`or`&&e.expr.length===2&&e.expr[0].type===`const`&&e.expr[0].const===`0`&&e.expr[1].type===`const`&&e.expr[1].const===`[1-9][0-9]*`}function Iw(e){return e.type===`or`&&e.expr.length===2&&e.expr[0].type===`const`&&e.expr[0].const===`true`&&e.expr[1].type===`const`&&e.expr[1].const===`false`}function Lw(e){return e.type===`const`&&e.const===`.*`}function Rw(e){return Fw(e)||Lw(e)?!1:Iw(e)?!0:e.type===`and`||e.type===`or`?e.expr.every(e=>Rw(e)):e.type===`const`||(()=>{throw new Pw(`Unknown expression type`)})()}function zw(e){return Rw(Nw(e.pattern))}var Bw=class extends Yx{};function*Vw(e){if(e.length===1)return yield*e[0];for(let t of e[0])for(let n of Vw(e.slice(1)))yield`${t}${n}`}function*Hw(e){return yield*Vw(e.expr.map(e=>[...Gw(e)]))}function*Uw(e){for(let t of e.expr)yield*Gw(t)}function*Ww(e){return yield e.const}function*Gw(e){return e.type===`and`?yield*Hw(e):e.type===`or`?yield*Uw(e):e.type===`const`?yield*Ww(e):(()=>{throw new Bw(`Unknown expression`)})()}function Kw(e){let t=Nw(e.pattern);return Rw(t)?[...Gw(t)]:[]}function qw(e,t){return q({[J]:`Literal`,const:e,type:typeof e},t)}function Jw(e){return q({[J]:`Boolean`,type:`boolean`},e)}function Yw(e){return q({[J]:`BigInt`,type:`bigint`},e)}function Xw(e){return q({[J]:`Number`,type:`number`},e)}function Zw(e){return q({[J]:`String`,type:`string`},e)}function*Qw(e){let t=e.trim().replace(/"|'/g,``);return t===`boolean`?yield Jw():t===`number`?yield Xw():t===`bigint`?yield Yw():t===`string`?yield Zw():yield(()=>{let e=t.split(`|`).map(e=>qw(e.trim()));return e.length===0?lw():e.length===1?e[0]:vw(e)})()}function*$w(e){if(e[1]!==`{`)return yield*[qw(`$`),...eT(e.slice(1))];for(let t=2;t<e.length;t++)if(e[t]===`}`){let n=Qw(e.slice(2,t)),r=eT(e.slice(t+1));return yield*[...n,...r]}yield qw(e)}function*eT(e){for(let t=0;t<e.length;t++)if(e[t]===`$`)return yield*[qw(e.slice(0,t)),...$w(e.slice(t))];yield qw(e)}function tT(e){return[...eT(e)]}var nT=class extends Yx{};function rT(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function iT(e,t){return AS(e)?e.pattern.slice(1,e.pattern.length-1):FS(e)?`(${e.anyOf.map(e=>iT(e,t)).join(`|`)})`:SS(e)||fS(e)||oS(e)?`${t}${WC}`:OS(e)?`${t}${GC}`:gS(e)?`${t}${rT(e.const.toString())}`:sS(e)?`${t}${UC}`:(()=>{throw new nT(`Unexpected Kind '${e[J]}'`)})()}function aT(e){return`^${e.map(e=>iT(e,``)).join(``)}$`}function oT(e){return vw(Kw(e).map(e=>qw(e)))}function sT(e,t){let n=Ex(e)?aT(tT(e)):aT(e);return q({[J]:`TemplateLiteral`,type:`string`,pattern:n},t)}function cT(e){return Kw(e).map(e=>e.toString())}function lT(e){let t=[];for(let n of e)t.push(...dT(n));return t}function uT(e){return[e.toString()]}function dT(e){return[...new Set(AS(e)?cT(e):FS(e)?lT(e.anyOf):gS(e)?uT(e.const):SS(e)||fS(e)?[`[number]`]:[])]}function fT(e,t,n){let r={};for(let i of Object.getOwnPropertyNames(t))r[i]=ET(e,dT(t[i]),n);return r}function pT(e,t,n){return fT(e,t.properties,n)}function mT(e,t,n){return uw(pT(e,t,n))}function hT(e,t){return e.map(e=>CT(e,t))}function gT(e){return e.filter(e=>!yS(e))}function _T(e,t){return fE(gT(hT(e,t)))}function vT(e){return e.some(e=>yS(e))?[]:e}function yT(e,t){return vw(vT(hT(e,t)))}function bT(e,t){return t in e?e[t]:t===`[number]`?vw(e):lw()}function xT(e,t){return t===`[number]`?e:lw()}function ST(e,t){return t in e?e[t]:lw()}function CT(e,t){return pS(e)?_T(e.allOf,t):FS(e)?yT(e.anyOf,t):NS(e)?bT(e.items??[],t):iS(e)?xT(e.items,t):CS(e)?ST(e.properties,t):lw()}function wT(e,t){return t.map(t=>CT(e,t))}function TT(e,t){return vw(wT(e,t))}function ET(e,t,n){if(ES(e)||ES(t)){if(!VS(e)||!VS(t))throw new Yx(`Index types using Ref parameters require both Type and Key to be of TSchema`);return ow(`Index`,[e,t])}return vS(t)?mT(e,t,n):_S(t)?AT(e,t,n):q(VS(t)?TT(e,dT(t)):TT(e,t),n)}function DT(e,t,n){return{[t]:ET(e,[t],Ix(n))}}function OT(e,t,n){return t.reduce((t,r)=>({...t,...DT(e,r,n)}),{})}function kT(e,t,n){return OT(e,t.keys,n)}function AT(e,t,n){return uw(kT(e,t,n))}function jT(e,t){return q({[J]:`Iterator`,type:`Iterator`,items:e},t)}function MT(e){return globalThis.Object.keys(e).filter(t=>!tS(e[t]))}function NT(e,t){let n=MT(e);return q(n.length>0?{[J]:`Object`,type:`object`,required:n,properties:e}:{[J]:`Object`,type:`object`,properties:e},t)}var PT=NT;function FT(e,t){return q({[J]:`Promise`,type:`Promise`,item:e},t)}function IT(e){return q(cw(e,[Zx]))}function LT(e){return q({...e,[Zx]:`Readonly`})}function RT(e,t){return t===!1?IT(e):LT(e)}function zT(e,t){let n=t??!0;return vS(e)?HT(e,n):RT(e,n)}function BT(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=zT(e[r],t);return n}function VT(e,t){return BT(e.properties,t)}function HT(e,t){return uw(VT(e,t))}function UT(e,t){return q(e.length>0?{[J]:`Tuple`,type:`array`,items:e,additionalItems:!1,minItems:e.length,maxItems:e.length}:{[J]:`Tuple`,type:`array`,minItems:e.length,maxItems:e.length},t)}function WT(e,t){return e in t?ZT(e,t[e]):uw(t)}function GT(e){return{[e]:qw(e)}}function KT(e){let t={};for(let n of e)t[n]=qw(n);return t}function qT(e,t){return XC(t,e)?GT(e):KT(t)}function JT(e,t){return WT(e,qT(e,t))}function YT(e,t){return t.map(t=>ZT(e,t))}function XT(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=ZT(e,t[r]);return n}function ZT(e,t){let n={...t};return tS(t)?rE(ZT(e,cw(t,[Qx]))):eS(t)?zT(ZT(e,cw(t,[Zx]))):vS(t)?WT(e,t.properties):_S(t)?JT(e,t.keys):lS(t)?dw(YT(e,t.parameters),ZT(e,t.returns),n):dS(t)?fw(YT(e,t.parameters),ZT(e,t.returns),n):aS(t)?aw(ZT(e,t.items),n):mS(t)?jT(ZT(e,t.items),n):pS(t)?pE(YT(e,t.allOf),n):FS(t)?yw(YT(e,t.anyOf),n):NS(t)?UT(YT(e,t.items??[]),n):CS(t)?PT(XT(e,t.properties),n):iS(t)?rw(ZT(e,t.items),n):wS(t)?FT(ZT(e,t.item),n):t}function QT(e,t){let n={};for(let r of e)n[r]=ZT(r,t);return n}function $T(e,t,n){let r=VS(e)?dT(e):e;return PT(QT(r,t({[J]:`MappedKey`,keys:r})),n)}function eE(e){return q(cw(e,[Qx]))}function tE(e){return q({...e,[Qx]:`Optional`})}function nE(e,t){return t===!1?eE(e):tE(e)}function rE(e,t){let n=t??!0;return vS(e)?oE(e,n):nE(e,n)}function iE(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=rE(e[r],t);return n}function aE(e,t){return iE(e.properties,t)}function oE(e,t){return uw(aE(e,t))}function sE(e,t={}){let n=e.every(e=>CS(e)),r=VS(t.unevaluatedProperties)?{unevaluatedProperties:t.unevaluatedProperties}:{};return q(t.unevaluatedProperties===!1||VS(t.unevaluatedProperties)||n?{...r,[J]:`Intersect`,type:`object`,allOf:e}:{...r,[J]:`Intersect`,allOf:e},t)}function cE(e){return e.every(e=>tS(e))}function lE(e){return cw(e,[Qx])}function uE(e){return e.map(e=>tS(e)?lE(e):e)}function dE(e,t){return cE(e)?rE(sE(uE(e),t)):sE(uE(e),t)}function fE(e,t={}){if(e.length===1)return q(e[0],t);if(e.length===0)return lw(t);if(e.some(e=>MS(e)))throw Error(`Cannot intersect transform types`);return dE(e,t)}function pE(e,t){if(e.length===1)return q(e[0],t);if(e.length===0)return lw(t);if(e.some(e=>MS(e)))throw Error(`Cannot intersect transform types`);return sE(e,t)}function mE(...e){let[t,n]=typeof e[0]==`string`?[e[0],e[1]]:[e[0].$id,e[1]];if(typeof t!=`string`)throw new Yx(`Ref: $ref must be a string`);return q({[J]:`Ref`,$ref:t},n)}function hE(e,t){return ow(`Awaited`,[ow(e,t)])}function gE(e){return ow(`Awaited`,[mE(e)])}function _E(e){return pE(bE(e))}function vE(e){return yw(bE(e))}function yE(e){return xE(e)}function bE(e){return e.map(e=>xE(e))}function xE(e,t){return q(cS(e)?hE(e.target,e.parameters):pS(e)?_E(e.allOf):FS(e)?vE(e.anyOf):wS(e)?yE(e.item):ES(e)?gE(e.$ref):e,t)}function SE(e){let t=[];for(let n of e)t.push(kE(n));return t}function CE(e){return tw(SE(e))}function wE(e){return ew(SE(e))}function TE(e){return e.map((e,t)=>t.toString())}function EE(e){return[`[number]`]}function DE(e){return globalThis.Object.getOwnPropertyNames(e)}function OE(e){return AE?globalThis.Object.getOwnPropertyNames(e).map(e=>e[0]===`^`&&e[e.length-1]===`$`?e.slice(1,e.length-1):e):[]}function kE(e){return pS(e)?CE(e.allOf):FS(e)?wE(e.anyOf):NS(e)?TE(e.items??[]):iS(e)?EE(e.items):CS(e)?DE(e.properties):TS(e)?OE(e.patternProperties):[]}var AE=!1;function jE(e,t){return ow(`KeyOf`,[ow(e,t)])}function ME(e){return ow(`KeyOf`,[mE(e)])}function NE(e,t){return q(vw(PE(kE(e))),t)}function PE(e){return e.map(e=>e===`[number]`?Xw():qw(e))}function FE(e,t){return cS(e)?jE(e.target,e.parameters):ES(e)?ME(e.$ref):vS(e)?RE(e,t):NE(e,t)}function IE(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=FE(e[r],Ix(t));return n}function LE(e,t){return IE(e.properties,t)}function RE(e,t){return uw(LE(e,t))}function zE(e){let t=[];for(let n of e)t.push(...kE(n));return ZC(t)}function BE(e){return e.filter(e=>!yS(e))}function VE(e,t){let n=[];for(let r of e)n.push(...wT(r,[t]));return BE(n)}function HE(e,t){let n={};for(let r of t)n[r]=fE(VE(e,r));return n}function UE(e,t){return PT(HE(e,zE(e)),t)}function WE(e){return q({[J]:`Date`,type:`Date`},e)}function GE(e){return q({[J]:`Null`,type:`null`},e)}function KE(e){return q({[J]:`Symbol`,type:`symbol`},e)}function qE(e){return q({[J]:`Undefined`,type:`undefined`},e)}function JE(e){return q({[J]:`Uint8Array`,type:`Uint8Array`},e)}function YE(e){return q({[J]:`Unknown`},e)}function XE(e){return e.map(e=>$E(e,!1))}function ZE(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=zT($E(e[n],!1));return t}function QE(e,t){return t===!0?e:zT(e)}function $E(e,t){return hx(e)||xx(e)?QE(nw(),t):gx(e)?zT(UT(XE(e))):Ox(e)?JE():yx(e)?WE():wx(e)?QE(PT(ZE(e)),t):bx(e)?QE(fw([],YE()),t):kx(e)?qE():Sx(e)?GE():Dx(e)?KE():_x(e)?Yw():Cx(e)||vx(e)||Ex(e)?qw(e):PT({})}function eD(e,t){return q($E(e,!0),t)}function tD(e,t){return lS(e)?UT(e.parameters,t):lw(t)}function nD(e,t){if(kx(e))throw Error(`Enum undefined or empty`);let n=globalThis.Object.getOwnPropertyNames(e).filter(e=>isNaN(e)).map(t=>e[t]);return yw([...new Set(n)].map(e=>qw(e)),{...t,[$x]:`Enum`})}var rD=class extends Yx{},Q;(function(e){e[e.Union=0]=`Union`,e[e.True=1]=`True`,e[e.False=2]=`False`})(Q||={});function iD(e){return e===Q.False?e:Q.True}function aD(e){throw new rD(e)}function oD(e){return bC(e)||dC(e)||IC(e)||RC(e)||$S(e)}function sD(e,t){return bC(t)?TD(e,t):dC(t)?xD(e,t):IC(t)?cO(e,t):RC(t)?uO(e,t):$S(t)?cD(e,t):aD(`StructuralRight`)}function cD(e,t){return Q.True}function lD(e,t){return dC(t)?xD(e,t):IC(t)&&t.anyOf.some(e=>$S(e)||RC(e))?Q.True:IC(t)?Q.Union:RC(t)||$S(t)?Q.True:Q.Union}function uD(e,t){return RC(e)?Q.False:$S(e)?Q.Union:bC(e)?Q.True:Q.False}function dD(e,t){return wC(t)&&HD(t)?Q.True:oD(t)?sD(e,t):tC(t)?iD(mO(e.items,t.items)):Q.False}function fD(e,t){return oD(t)?sD(e,t):nC(t)?iD(mO(e.items,t.items)):Q.False}function pD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):rC(t)?Q.True:Q.False}function mD(e,t){return hC(e)||iC(e)?Q.True:Q.False}function hD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):iC(t)?Q.True:Q.False}function gD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):oC(t)?e.parameters.length>t.parameters.length?Q.False:e.parameters.every((e,n)=>iD(mO(t.parameters[n],e))===Q.True)?iD(mO(e.returns,t.returns)):Q.False:Q.False}function _D(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):sC(t)?Q.True:Q.False}function vD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):cC(t)?e.parameters.length>t.parameters.length?Q.False:e.parameters.every((e,n)=>iD(mO(t.parameters[n],e))===Q.True)?iD(mO(e.returns,t.returns)):Q.False:Q.False}function yD(e,t){return gC(e)&&Cx(e.const)||CC(e)||lC(e)?Q.True:Q.False}function bD(e,t){return lC(t)||CC(t)?Q.True:oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):Q.False}function xD(e,t){return t.allOf.every(t=>mO(e,t)===Q.True)?Q.True:Q.False}function SD(e,t){return e.allOf.some(e=>mO(e,t)===Q.True)?Q.True:Q.False}function CD(e,t){return oD(t)?sD(e,t):fC(t)?iD(mO(e.items,t.items)):Q.False}function wD(e,t){return gC(t)&&t.const===e.const?Q.True:oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):kC(t)?$D(e,t):CC(t)?AD(e,t):lC(t)?yD(e,t):iC(t)?mD(e,t):Q.False}function TD(e,t){return Q.False}function ED(e,t){return Q.True}function DD(e){let[t,n]=[e,0];for(;xC(t);)t=t.not,n+=1;return n%2==0?t:YE()}function OD(e,t){return xC(e)?mO(DD(e),t):xC(t)?mO(e,DD(t)):aD(`Invalid fallthrough for Not`)}function kD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):SC(t)?Q.True:Q.False}function AD(e,t){return mC(e)||CC(e)||lC(e)?Q.True:Q.False}function jD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):lC(t)||CC(t)?Q.True:Q.False}function MD(e,t){return Object.getOwnPropertyNames(e.properties).length===t}function ND(e){return HD(e)}function PD(e){return MD(e,0)||MD(e,1)&&`description`in e.properties&&IC(e.properties.description)&&e.properties.description.anyOf.length===2&&(kC(e.properties.description.anyOf[0])&&FC(e.properties.description.anyOf[1])||kC(e.properties.description.anyOf[1])&&FC(e.properties.description.anyOf[0]))}function FD(e){return MD(e,0)}function ID(e){return MD(e,0)}function LD(e){return MD(e,0)}function RD(e){return MD(e,0)}function zD(e){return HD(e)}function BD(e){let t=Xw();return MD(e,0)||MD(e,1)&&`length`in e.properties&&iD(mO(e.properties.length,t))===Q.True}function VD(e){return MD(e,0)}function HD(e){let t=Xw();return MD(e,0)||MD(e,1)&&`length`in e.properties&&iD(mO(e.properties.length,t))===Q.True}function UD(e){let t=fw([nw()],nw());return MD(e,0)||MD(e,1)&&`then`in e.properties&&iD(mO(e.properties.then,t))===Q.True}function WD(e,t){return mO(e,t)===Q.False||QS(e)&&!QS(t)?Q.False:Q.True}function GD(e,t){return RC(e)?Q.False:$S(e)?Q.Union:bC(e)||pC(e)&&ND(t)||mC(e)&&FD(t)||hC(e)&&ID(t)||AC(e)&&PD(t)||rC(e)&&LD(t)||kC(e)&&ND(t)||AC(e)&&PD(t)||CC(e)&&FD(t)||lC(e)&&FD(t)||iC(e)&&ID(t)||LC(e)&&zD(t)||sC(e)&&RD(t)||oC(e)&&VD(t)||cC(e)&&BD(t)?Q.True:EC(e)&&kC(JD(e))?t[$x]===`Record`?Q.True:Q.False:EC(e)&&CC(JD(e))&&MD(t,0)?Q.True:Q.False}function KD(e,t){return oD(t)?sD(e,t):EC(t)?XD(e,t):wC(t)?(()=>{for(let n of Object.getOwnPropertyNames(t.properties)){if(!(n in e.properties)&&!QS(t.properties[n]))return Q.False;if(QS(t.properties[n]))return Q.True;if(WD(e.properties[n],t.properties[n])===Q.False)return Q.False}return Q.True})():Q.False}function qD(e,t){return oD(t)?sD(e,t):wC(t)&&UD(t)?Q.True:TC(t)?iD(mO(e.item,t.item)):Q.False}function JD(e){return qC in e.patternProperties?Xw():JC in e.patternProperties?Zw():aD(`Unknown record key pattern`)}function YD(e){return qC in e.patternProperties?e.patternProperties[qC]:JC in e.patternProperties?e.patternProperties[JC]:aD(`Unable to get record value schema`)}function XD(e,t){let[n,r]=[JD(t),YD(t)];return pC(e)&&CC(n)&&iD(mO(e,r))===Q.True?Q.True:LC(e)&&CC(n)||kC(e)&&CC(n)||tC(e)&&CC(n)?mO(e,r):wC(e)?(()=>{for(let t of Object.getOwnPropertyNames(e.properties))if(WD(r,e.properties[t])===Q.False)return Q.False;return Q.True})():Q.False}function ZD(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?mO(YD(e),YD(t)):Q.False}function QD(e,t){return mO(OC(e)?Zw():e,OC(t)?Zw():t)}function $D(e,t){return gC(e)&&Ex(e.const)||kC(e)?Q.True:Q.False}function eO(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):kC(t)?Q.True:Q.False}function tO(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):AC(t)?Q.True:Q.False}function nO(e,t){return jC(e)?mO(oT(e),t):jC(t)?mO(e,oT(t)):aD(`Invalid fallthrough for TemplateLiteral`)}function rO(e,t){return tC(t)&&e.items!==void 0&&e.items.every(e=>mO(e,t.items)===Q.True)}function iO(e,t){return bC(e)?Q.True:RC(e)?Q.False:$S(e)?Q.Union:Q.False}function aO(e,t){return oD(t)?sD(e,t):wC(t)&&HD(t)||tC(t)&&rO(e,t)?Q.True:PC(t)?kx(e.items)&&!kx(t.items)||!kx(e.items)&&kx(t.items)?Q.False:kx(e.items)&&!kx(t.items)||e.items.every((e,n)=>mO(e,t.items[n])===Q.True)?Q.True:Q.False:Q.False}function oO(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):LC(t)?Q.True:Q.False}function sO(e,t){return oD(t)?sD(e,t):wC(t)?GD(e,t):EC(t)?XD(e,t):BC(t)?fO(e,t):FC(t)?Q.True:Q.False}function cO(e,t){return t.anyOf.some(t=>mO(e,t)===Q.True)?Q.True:Q.False}function lO(e,t){return e.anyOf.every(e=>mO(e,t)===Q.True)?Q.True:Q.False}function uO(e,t){return Q.True}function dO(e,t){return bC(t)?TD(e,t):dC(t)?xD(e,t):IC(t)?cO(e,t):$S(t)?cD(e,t):kC(t)?$D(e,t):CC(t)?AD(e,t):lC(t)?yD(e,t):iC(t)?mD(e,t):tC(t)?uD(e,t):PC(t)?iO(e,t):wC(t)?GD(e,t):RC(t)?Q.True:Q.False}function fO(e,t){return FC(e)||FC(e)?Q.True:Q.False}function pO(e,t){return dC(t)?xD(e,t):IC(t)?cO(e,t):RC(t)?uO(e,t):$S(t)?cD(e,t):wC(t)?GD(e,t):BC(t)?Q.True:Q.False}function mO(e,t){return jC(e)||jC(t)?nO(e,t):OC(e)||OC(t)?QD(e,t):xC(e)||xC(t)?OD(e,t):$S(e)?lD(e,t):tC(e)?dD(e,t):rC(e)?pD(e,t):iC(e)?hD(e,t):nC(e)?fD(e,t):oC(e)?gD(e,t):sC(e)?_D(e,t):cC(e)?vD(e,t):lC(e)?bD(e,t):dC(e)?SD(e,t):fC(e)?CD(e,t):gC(e)?wD(e,t):bC(e)?ED(e,t):SC(e)?kD(e,t):CC(e)?jD(e,t):wC(e)?KD(e,t):EC(e)?ZD(e,t):kC(e)?eO(e,t):AC(e)?tO(e,t):PC(e)?aO(e,t):TC(e)?qD(e,t):LC(e)?oO(e,t):FC(e)?sO(e,t):IC(e)?lO(e,t):RC(e)?dO(e,t):BC(e)?pO(e,t):aD(`Unknown left type operand '${e[J]}'`)}function hO(e,t){return mO(e,t)}function gO(e,t,n,r,i){let a={};for(let o of globalThis.Object.getOwnPropertyNames(e))a[o]=bO(e[o],t,n,r,Ix(i));return a}function _O(e,t,n,r,i){return gO(e.properties,t,n,r,i)}function vO(e,t,n,r,i){return uw(_O(e,t,n,r,i))}function yO(e,t,n,r){let i=hO(e,t);return i===Q.Union?yw([n,r]):i===Q.True?n:r}function bO(e,t,n,r,i){return vS(e)?vO(e,t,n,r,i):_S(e)?q(wO(e,t,n,r,i)):q(yO(e,t,n,r),i)}function xO(e,t,n,r,i){return{[e]:bO(qw(e),t,n,r,Ix(i))}}function SO(e,t,n,r,i){return e.reduce((e,a)=>({...e,...xO(a,t,n,r,i)}),{})}function CO(e,t,n,r,i){return SO(e.keys,t,n,r,i)}function wO(e,t,n,r,i){return uw(CO(e,t,n,r,i))}function TO(e,t){return DO(oT(e),t)}function EO(e,t){let n=e.filter(e=>hO(e,t)===Q.False);return n.length===1?n[0]:yw(n)}function DO(e,t,n={}){return AS(e)?q(TO(e,t),n):vS(e)?q(AO(e,t),n):q(FS(e)?EO(e.anyOf,t):hO(e,t)===Q.False?e:lw(),n)}function OO(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=DO(e[r],t);return n}function kO(e,t){return OO(e.properties,t)}function AO(e,t){return uw(kO(e,t))}function jO(e,t){return NO(oT(e),t)}function MO(e,t){let n=e.filter(e=>hO(e,t)!==Q.False);return n.length===1?n[0]:yw(n)}function NO(e,t,n){return AS(e)?q(jO(e,t),n):vS(e)?q(IO(e,t),n):q(FS(e)?MO(e.anyOf,t):hO(e,t)===Q.False?lw():e,n)}function PO(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=NO(e[r],t);return n}function FO(e,t){return PO(e.properties,t)}function IO(e,t){return uw(FO(e,t))}function LO(e,t){return lS(e)?q(e.returns,t):lw(t)}function RO(e){return zT(rE(e))}function zO(e,t,n){return q({[J]:`Record`,type:`object`,patternProperties:{[e]:t}},n)}function BO(e,t,n){let r={};for(let n of e)r[n]=t;return PT(r,{...n,[$x]:`Record`})}function VO(e,t,n){return zw(e)?BO(dT(e),t,n):zO(e.pattern,t,n)}function HO(e,t,n){return BO(dT(yw(e)),t,n)}function UO(e,t,n){return BO([e.toString()],t,n)}function WO(e,t,n){return zO(e.source,t,n)}function GO(e,t,n){return zO(kx(e.pattern)?JC:e.pattern,t,n)}function KO(e,t,n){return zO(JC,t,n)}function qO(e,t,n){return zO(YC,t,n)}function JO(e,t,n){return PT({true:t,false:t},n)}function YO(e,t,n){return zO(qC,t,n)}function XO(e,t,n){return zO(qC,t,n)}function ZO(e,t,n={}){return FS(e)?HO(e.anyOf,t,n):AS(e)?VO(e,t,n):gS(e)?UO(e.const,t,n):sS(e)?JO(e,t,n):fS(e)?YO(e,t,n):SS(e)?XO(e,t,n):DS(e)?WO(e,t,n):OS(e)?GO(e,t,n):nS(e)?KO(e,t,n):yS(e)?qO(e,t,n):lw(n)}function QO(e){return globalThis.Object.getOwnPropertyNames(e.patternProperties)[0]}function $O(e){let t=QO(e);return t===JC?Zw():t===qC?Xw():Zw({pattern:t})}function ek(e){return e.patternProperties[QO(e)]}function tk(e,t){return t.parameters=hk(e,t.parameters),t.returns=gk(e,t.returns),t}function nk(e,t){return t.parameters=hk(e,t.parameters),t.returns=gk(e,t.returns),t}function rk(e,t){return t.allOf=hk(e,t.allOf),t}function ik(e,t){return t.anyOf=hk(e,t.anyOf),t}function ak(e,t){return kx(t.items)||(t.items=hk(e,t.items)),t}function ok(e,t){return t.items=gk(e,t.items),t}function sk(e,t){return t.items=gk(e,t.items),t}function ck(e,t){return t.items=gk(e,t.items),t}function lk(e,t){return t.item=gk(e,t.item),t}function uk(e,t){let n=mk(e,t.properties);return{...t,...PT(n)}}function dk(e,t){let n=ZO(gk(e,$O(t)),gk(e,ek(t)));return{...t,...n}}function fk(e,t){return t.index in e?e[t.index]:YE()}function pk(e,t){let n=eS(t),r=tS(t),i=gk(e,t);return n&&r?RO(i):n&&!r?zT(i):!n&&r?rE(i):i}function mk(e,t){return globalThis.Object.getOwnPropertyNames(t).reduce((n,r)=>({...n,[r]:pk(e,t[r])}),{})}function hk(e,t){return t.map(t=>gk(e,t))}function gk(e,t){return lS(t)?tk(e,t):dS(t)?nk(e,t):pS(t)?rk(e,t):FS(t)?ik(e,t):NS(t)?ak(e,t):iS(t)?ok(e,t):aS(t)?sk(e,t):mS(t)?ck(e,t):wS(t)?lk(e,t):CS(t)?uk(e,t):TS(t)?dk(e,t):rS(t)?fk(e,t):t}function _k(e,t){return gk(t,Lx(e))}function vk(e){return q({[J]:`Integer`,type:`integer`},e)}function yk(e,t,n){return{[e]:Ak(qw(e),t,Ix(n))}}function bk(e,t,n){return e.reduce((e,r)=>({...e,...yk(r,t,n)}),{})}function xk(e,t,n){return bk(e.keys,t,n)}function Sk(e,t,n){return uw(xk(e,t,n))}function Ck(e){let[t,n]=[e.slice(0,1),e.slice(1)];return[t.toLowerCase(),n].join(``)}function wk(e){let[t,n]=[e.slice(0,1),e.slice(1)];return[t.toUpperCase(),n].join(``)}function Tk(e){return e.toUpperCase()}function Ek(e){return e.toLowerCase()}function Dk(e,t,n){let r=Nw(e.pattern);return Rw(r)?sT([yw(kk([...Gw(r)].map(e=>qw(e)),t))],n):{...e,pattern:Ok(e.pattern,t)}}function Ok(e,t){return typeof e==`string`?t===`Uncapitalize`?Ck(e):t===`Capitalize`?wk(e):t===`Uppercase`?Tk(e):t===`Lowercase`?Ek(e):e:e.toString()}function kk(e,t){return e.map(e=>Ak(e,t))}function Ak(e,t,n={}){return _S(e)?Sk(e,t,n):AS(e)?Dk(e,t,n):FS(e)?yw(kk(e.anyOf,t),n):gS(e)?qw(Ok(e.const,t),n):q(e,n)}function jk(e,t={}){return Ak(e,`Capitalize`,t)}function Mk(e,t={}){return Ak(e,`Lowercase`,t)}function Nk(e,t={}){return Ak(e,`Uncapitalize`,t)}function Pk(e,t={}){return Ak(e,`Uppercase`,t)}function Fk(e,t,n){let r={};for(let i of globalThis.Object.getOwnPropertyNames(e))r[i]=Gk(e[i],t,Ix(n));return r}function Ik(e,t,n){return Fk(e.properties,t,n)}function Lk(e,t,n){return uw(Ik(e,t,n))}function Rk(e,t){return e.map(e=>Wk(e,t))}function zk(e,t){return e.map(e=>Wk(e,t))}function Bk(e,t){let{[t]:n,...r}=e;return r}function Vk(e,t){return t.reduce((e,t)=>Bk(e,t),e)}function Hk(e,t,n){let r=cw(e,[Xx,`$id`,`required`,`properties`]);return PT(Vk(n,t),r)}function Uk(e){return yw(e.reduce((e,t)=>hS(t)?[...e,qw(t)]:e,[]))}function Wk(e,t){return pS(e)?pE(Rk(e.allOf,t)):FS(e)?yw(zk(e.anyOf,t)):CS(e)?Hk(e,t,e.properties):PT({})}function Gk(e,t,n){let r=gx(t)?Uk(t):t,i=VS(t)?dT(t):t,a=ES(e),o=ES(t);return vS(e)?Lk(e,i,n):_S(t)?Yk(e,t,n):a&&o||!a&&o||a&&!o?ow(`Omit`,[e,r],n):q({...Wk(e,i),...n})}function Kk(e,t,n){return{[t]:Gk(e,[t],Ix(n))}}function qk(e,t,n){return t.reduce((t,r)=>({...t,...Kk(e,r,n)}),{})}function Jk(e,t,n){return qk(e,t.keys,n)}function Yk(e,t,n){return uw(Jk(e,t,n))}function Xk(e,t,n){let r={};for(let i of globalThis.Object.getOwnPropertyNames(e))r[i]=aA(e[i],t,Ix(n));return r}function Zk(e,t,n){return Xk(e.properties,t,n)}function Qk(e,t,n){return uw(Zk(e,t,n))}function $k(e,t){return e.map(e=>iA(e,t))}function eA(e,t){return e.map(e=>iA(e,t))}function tA(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function nA(e,t,n){let r=cw(e,[Xx,`$id`,`required`,`properties`]);return PT(tA(n,t),r)}function rA(e){return yw(e.reduce((e,t)=>hS(t)?[...e,qw(t)]:e,[]))}function iA(e,t){return pS(e)?pE($k(e.allOf,t)):FS(e)?yw(eA(e.anyOf,t)):CS(e)?nA(e,t,e.properties):PT({})}function aA(e,t,n){let r=gx(t)?rA(t):t,i=VS(t)?dT(t):t,a=ES(e),o=ES(t);return vS(e)?Qk(e,i,n):_S(t)?lA(e,t,n):a&&o||!a&&o||a&&!o?ow(`Pick`,[e,r],n):q({...iA(e,i),...n})}function oA(e,t,n){return{[t]:aA(e,[t],Ix(n))}}function sA(e,t,n){return t.reduce((t,r)=>({...t,...oA(e,r,n)}),{})}function cA(e,t,n){return sA(e,t.keys,n)}function lA(e,t,n){return uw(cA(e,t,n))}function uA(e,t){return ow(`Partial`,[ow(e,t)])}function dA(e){return ow(`Partial`,[mE(e)])}function fA(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=rE(e[n]);return t}function pA(e,t){let n=cw(e,[Xx,`$id`,`required`,`properties`]);return PT(fA(t),n)}function mA(e){return e.map(e=>hA(e))}function hA(e){return cS(e)?uA(e.target,e.parameters):ES(e)?dA(e.$ref):pS(e)?pE(mA(e.allOf)):FS(e)?yw(mA(e.anyOf)):CS(e)?pA(e,e.properties):oS(e)||sS(e)||fS(e)||gS(e)||xS(e)||SS(e)||OS(e)||kS(e)||PS(e)?e:PT({})}function gA(e,t){return vS(e)?yA(e,t):q({...hA(e),...t})}function _A(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=gA(e[r],Ix(t));return n}function vA(e,t){return _A(e.properties,t)}function yA(e,t){return uw(vA(e,t))}function bA(e,t){return ow(`Required`,[ow(e,t)])}function xA(e){return ow(`Required`,[mE(e)])}function SA(e){let t={};for(let n of globalThis.Object.getOwnPropertyNames(e))t[n]=cw(e[n],[Qx]);return t}function CA(e,t){let n=cw(e,[Xx,`$id`,`required`,`properties`]);return PT(SA(t),n)}function wA(e){return e.map(e=>TA(e))}function TA(e){return cS(e)?bA(e.target,e.parameters):ES(e)?xA(e.$ref):pS(e)?pE(wA(e.allOf)):FS(e)?yw(wA(e.anyOf)):CS(e)?CA(e,e.properties):oS(e)||sS(e)||fS(e)||gS(e)||xS(e)||SS(e)||OS(e)||kS(e)||PS(e)?e:PT({})}function EA(e,t){return vS(e)?kA(e,t):q({...TA(e),...t})}function DA(e,t){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=EA(e[r],t);return n}function OA(e,t){return DA(e.properties,t)}function kA(e,t){return uw(OA(e,t))}function AA(e,t){return t.map(t=>ES(t)?jA(e,t.$ref):QA(e,t))}function jA(e,t){return t in e?ES(e[t])?jA(e,e[t].$ref):QA(e,e[t]):lw()}function MA(e){return xE(e[0])}function NA(e){return ET(e[0],e[1])}function PA(e){return FE(e[0])}function FA(e){return gA(e[0])}function IA(e){return Gk(e[0],e[1])}function LA(e){return aA(e[0],e[1])}function RA(e){return EA(e[0])}function zA(e,t,n){let r=AA(e,n);return t===`Awaited`?MA(r):t===`Index`?NA(r):t===`KeyOf`?PA(r):t===`Partial`?FA(r):t===`Omit`?IA(r):t===`Pick`?LA(r):t===`Required`?RA(r):lw()}function BA(e,t){return rw(QA(e,t))}function VA(e,t){return aw(QA(e,t))}function HA(e,t,n){return dw(ZA(e,t),QA(e,n))}function UA(e,t,n){return fw(ZA(e,t),QA(e,n))}function WA(e,t){return pE(ZA(e,t))}function GA(e,t){return jT(QA(e,t))}function KA(e,t){return PT(globalThis.Object.keys(t).reduce((n,r)=>({...n,[r]:QA(e,t[r])}),{}))}function qA(e,t){let[n,r]=[QA(e,ek(t)),QO(t)],i=Lx(t);return i.patternProperties[r]=n,i}function JA(e,t){return ES(t)?{...jA(e,t.$ref),[Xx]:t[Xx]}:t}function YA(e,t){return UT(ZA(e,t))}function XA(e,t){return yw(ZA(e,t))}function ZA(e,t){return t.map(t=>QA(e,t))}function QA(e,t){return tS(t)?q(QA(e,cw(t,[Qx])),t):eS(t)?q(QA(e,cw(t,[Zx])),t):MS(t)?q(JA(e,t),t):iS(t)?q(BA(e,t.items),t):aS(t)?q(VA(e,t.items),t):cS(t)?q(zA(e,t.target,t.parameters)):lS(t)?q(HA(e,t.parameters,t.returns),t):dS(t)?q(UA(e,t.parameters,t.returns),t):pS(t)?q(WA(e,t.allOf),t):mS(t)?q(GA(e,t.items),t):CS(t)?q(KA(e,t.properties),t):TS(t)?q(qA(e,t)):NS(t)?q(YA(e,t.items||[]),t):FS(t)?q(XA(e,t.anyOf),t):t}function $A(e,t){return t in e?QA(e,e[t]):lw()}function ej(e){return globalThis.Object.getOwnPropertyNames(e).reduce((t,n)=>({...t,[n]:$A(e,n)}),{})}var tj=class{constructor(e){let t=ej(e),n=this.WithIdentifiers(t);this.$defs=n}Import(e,t){let n={...this.$defs,[e]:q(this.$defs[e],t)};return q({[J]:`Import`,$defs:n,$ref:e})}WithIdentifiers(e){return globalThis.Object.getOwnPropertyNames(e).reduce((t,n)=>({...t,[n]:{...e[n],$id:n}}),{})}};function nj(e){return new tj(e)}function rj(e,t){return q({[J]:`Not`,not:e},t)}function ij(e,t){return dS(e)?UT(e.parameters,t):lw()}var aj=0;function oj(e,t={}){kx(t.$id)&&(t.$id=`T${aj++}`);let n=Lx(e({[J]:`This`,$ref:`${t.$id}`}));return n.$id=t.$id,q({[$x]:`Recursive`,...n},t)}function sj(e,t){let n=Ex(e)?new globalThis.RegExp(e):e;return q({[J]:`RegExp`,type:`RegExp`,source:n.source,flags:n.flags},t)}function cj(e){return pS(e)?e.allOf:FS(e)?e.anyOf:NS(e)?e.items??[]:[]}function lj(e){return cj(e)}function uj(e,t){return dS(e)?q(e.returns,t):lw(t)}var dj=class{constructor(e){this.schema=e}Decode(e){return new fj(this.schema,e)}},fj=class{constructor(e,t){this.schema=e,this.decode=t}EncodeTransform(e,t){let n={Encode:n=>t[Xx].Encode(e(n)),Decode:e=>this.decode(t[Xx].Decode(e))};return{...t,[Xx]:n}}EncodeSchema(e,t){let n={Decode:this.decode,Encode:e};return{...t,[Xx]:n}}Encode(e){return MS(this.schema)?this.EncodeTransform(e,this.schema):this.EncodeSchema(e,this.schema)}};function pj(e){return new dj(e)}function mj(e={}){return q({[J]:e[J]??`Unsafe`},e)}function hj(e){return q({[J]:`Void`,type:`void`},e)}var $=t({Any:()=>nw,Argument:()=>iw,Array:()=>rw,AsyncIterator:()=>aw,Awaited:()=>xE,BigInt:()=>Yw,Boolean:()=>Jw,Capitalize:()=>jk,Composite:()=>UE,Const:()=>eD,Constructor:()=>dw,ConstructorParameters:()=>tD,Date:()=>WE,Enum:()=>nD,Exclude:()=>DO,Extends:()=>bO,Extract:()=>NO,Function:()=>fw,Index:()=>ET,InstanceType:()=>LO,Instantiate:()=>_k,Integer:()=>vk,Intersect:()=>pE,Iterator:()=>jT,KeyOf:()=>FE,Literal:()=>qw,Lowercase:()=>Mk,Mapped:()=>$T,Module:()=>nj,Never:()=>lw,Not:()=>rj,Null:()=>GE,Number:()=>Xw,Object:()=>PT,Omit:()=>Gk,Optional:()=>rE,Parameters:()=>ij,Partial:()=>gA,Pick:()=>aA,Promise:()=>FT,Readonly:()=>zT,ReadonlyOptional:()=>RO,Record:()=>ZO,Recursive:()=>oj,Ref:()=>mE,RegExp:()=>sj,Required:()=>EA,Rest:()=>lj,ReturnType:()=>uj,String:()=>Zw,Symbol:()=>KE,TemplateLiteral:()=>sT,Transform:()=>pj,Tuple:()=>UT,Uint8Array:()=>JE,Uncapitalize:()=>Nk,Undefined:()=>qE,Union:()=>yw,Unknown:()=>YE,Unsafe:()=>mj,Uppercase:()=>Pk,Void:()=>hj}),gj={additionalProperties:!1},_j=$.String({pattern:`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`,minLength:36,maxLength:36}),vj=$.String({pattern:`^[a-z0-9][a-z0-9-]{0,31}(?![\\s\\S])`,minLength:1,maxLength:32}),yj=$.String({pattern:`^sha256:[0-9a-f]{64}$`,minLength:71,maxLength:71}),bj=$.String({pattern:`^[A-Za-z0-9_-]{43}$`,minLength:43,maxLength:43}),xj=$.String({pattern:`^dpt_[A-Za-z0-9_-]{43}$`,minLength:47,maxLength:47}),Sj=`[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}`,Cj=`^(?:${Sj}|[A-Z2-7]{12}|[A-Z2-7]{8})(?![\\s\\S])`,wj=$.String({pattern:Cj,minLength:8,maxLength:36}),Tj=new RegExp(Cj),Ej=/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/;function Dj(e){return typeof e!=`string`||e.length>36?!1:Tj.test(e)}function Oj(e){if(typeof e!=`string`)return;if(Ej.test(e)){let t=e.toLowerCase();return Dj(t)?t:void 0}let t=e.replace(/[\s-]+/g,``).toUpperCase();if(Dj(t)&&!(/[\s-]/.test(e)&&t.length!==12))return t}$.Object({type:$.Literal(`pair.request`),v:$.Literal(1),requestId:_j,code:wj,deviceUid:_j,deviceName:$.String({minLength:1,maxLength:64}),hostname:$.Optional($.String({minLength:1,maxLength:128})),platform:$.Optional($.String({minLength:1,maxLength:64})),publicKey:$.String({minLength:1,maxLength:256}),keyFingerprint:yj,clientTime:$.Integer(),hubNonce:$.Optional(bj)},gj),$.Object({type:$.Literal(`pair.device-request`),v:$.Literal(1),requestId:_j,deviceUid:_j,deviceName:$.String({minLength:1,maxLength:64}),hostname:$.Optional($.String({minLength:1,maxLength:128})),platform:$.Optional($.String({minLength:1,maxLength:64})),publicKey:$.String({minLength:1,maxLength:256}),keyFingerprint:yj,clientTime:$.Integer(),hubNonce:$.Optional(bj)},gj);var kj=$.Object({type:$.Literal(`pair.challenge`),v:$.Literal(1),enrollmentId:_j,nonce:bj,issuedAt:$.Integer(),hubId:_j,hubPublicKey:$.Optional($.String({minLength:1,maxLength:256})),hubKeyFingerprint:$.Optional(yj),hubSignature:$.Optional($.String({pattern:`^[A-Za-z0-9_-]{86}$`,minLength:86,maxLength:86}))},gj);$.Object({type:$.Literal(`pair.device-ack`),v:$.Literal(1),codeId:_j,code:wj,expiresAt:$.Integer(),hubOrigin:$.String(),hubId:_j,challenge:kj},gj),$.Object({type:$.Literal(`pair.response`),v:$.Literal(1),enrollmentId:_j,nonce:bj,signature:$.String({pattern:`^[A-Za-z0-9_-]{86}$`,minLength:86,maxLength:86})},gj),$.Object({type:$.Literal(`pair.pending`),v:$.Literal(1),enrollmentId:_j,state:$.Literal(`awaiting_approval`),expiresAt:$.Integer(),pollAfterMs:$.Integer({minimum:1})},gj),$.Object({type:$.Literal(`pair.token`),v:$.Literal(1),enrollmentId:_j,deviceUid:_j,deviceId:vj,pairingEpoch:_j,credentialId:_j,generation:$.Integer({minimum:1}),hubId:_j,hubOrigin:$.String(),hubUrl:$.String(),tunnelToken:xj,issuedAt:$.Integer(),expiresAt:$.Null(),hubKeyFingerprint:$.Optional(yj)},gj),$.Object({enrollmentId:_j,deviceUid:_j,keyFingerprint:yj,replaceKey:$.Optional($.Boolean())},gj),$.Object({type:$.Literal(`pair.revoke`),v:$.Literal(1),deviceId:vj,pairingEpoch:_j,reason:$.Union([$.Literal(`user`),$.Literal(`compromise`),$.Literal(`hub_migrated`)]),revokedAt:$.Integer()},gj);var Aj=$.Object({type:$.Literal(`pair.error`),v:$.Literal(1),code:$.Union([$.Literal(`code_invalid`),$.Literal(`code_expired`),$.Literal(`code_used`),$.Literal(`code_in_use`),$.Literal(`rate_limited`),$.Literal(`signature_invalid`),$.Literal(`clock_skew`),$.Literal(`paired_elsewhere`),$.Literal(`hub_required`),$.Literal(`fingerprint_mismatch`),$.Literal(`identity_conflict`),$.Literal(`enrollment_lost`),$.Literal(`enrollment_cancelled`),$.Literal(`already_issued`),$.Literal(`challenge_expired`)]),message:$.String({maxLength:512}),retryAfterMs:$.Optional($.Integer({minimum:1}))},gj);$.Object({type:$.Literal(`pair.code`),v:$.Literal(1),codeId:_j,code:wj,expiresAt:$.Integer(),hubOrigin:$.String({maxLength:2048}),pairUrl:$.String({maxLength:4096}),offerUrl:$.Optional($.String({maxLength:2048}))},gj);var jj=$.Union([$.Literal(`open`),$.Literal(`awaiting_proof`),$.Literal(`awaiting_approval`),$.Literal(`approved`),$.Literal(`issued`),$.Literal(`connected`),$.Literal(`cancelled`),$.Literal(`expired`)]);$.Object({type:$.Literal(`pair.code-state`),v:$.Literal(1),codeId:_j,expiresAt:$.Integer(),phase:jj,enrollment:$.Optional($.Object({enrollmentId:_j,deviceUid:_j,deviceName:$.String({minLength:1,maxLength:64}),keyFingerprint:yj,proofVerified:$.Boolean(),keyChanged:$.Boolean()},gj)),deviceId:$.Optional(vj),error:$.Optional(Aj)},gj);function Mj(e){if(typeof e!=`string`||e.length===0||e.length>2048)return{ok:!1,error:`origin: empty or too long`};if(/\s|\n|\r|\t/.test(e))return{ok:!1,error:`origin: whitespace not allowed`};let t;try{t=new URL(e)}catch{return{ok:!1,error:`origin: not a valid URL`}}return t.protocol!==`https:`&&!(t.protocol===`http:`&&/^(127\.0\.0\.1|\[::1\]|localhost)$/.test(t.hostname))?{ok:!1,error:`origin: HTTPS origin required`}:t.username||t.password?{ok:!1,error:`origin: userinfo not allowed`}:t.search||t.hash?{ok:!1,error:`origin: query/fragment not allowed`}:t.pathname!==`/`&&t.pathname!==``?{ok:!1,error:`origin: base path not allowed`}:{ok:!0,origin:t.origin,tunnelUrl:`${t.origin}/api/tunnel`}}function Nj(e){if(e!==``&&/^[A-Za-z0-9_-]+$/.test(e))try{let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`)),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}catch{return}}var Pj=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,Fj=RegExp(`^${Sj}$`),Ij=/^sha256:[0-9a-f]{64}$/;function Lj(e){let t=Nj(e);if(!t||t.length>1024)return;let n;try{n=JSON.parse(new TextDecoder().decode(t))}catch{return}if(!n||typeof n!=`object`||Array.isArray(n))return;let r=n;if(r.v!==2&&r.v!==3)return;let i=r.v===3?6:5;if(Object.keys(r).length!==i||typeof r.hub!=`string`)return;let a=Mj(r.hub);if(a.ok&&a.origin===r.hub&&typeof r.id==`string`&&Pj.test(r.id)&&typeof r.code==`string`&&Fj.test(r.code)&&typeof r.exp==`number`&&Number.isSafeInteger(r.exp))return r.v===3?typeof r.kfp!=`string`||!Ij.test(r.kfp)?void 0:{v:3,hub:r.hub,id:r.id,code:r.code,exp:r.exp,kfp:r.kfp}:{v:2,hub:r.hub,id:r.id,code:r.code,exp:r.exp}}function Rj(e,t=Date.now()){let n=Lj(e);if(n&&!(n.exp<t-3e4)&&!(n.exp>t+6e5))return n}function zj(e,t=Date.now()){let n;try{n=new URL(e)}catch{return}if(!/^\/pair\/?$/.test(n.pathname)||n.username||n.password||n.search||!n.hash.startsWith(`#offer=`))return;let r=Rj(n.hash.slice(7),t);if(r&&r.hub===n.origin)return{offer:r,rest:`${n.origin}/pair`}}function Bj(e){if(!/^\/pair\/?$/.test(e.pathname))return;if(e.hash.startsWith(`#offer=`)){let t=zj(e.href);if(t)return{code:t.offer.code,origin:e.origin,offerFragment:e.hash.slice(1)};let n=Rj(e.hash.slice(7));return n&&n.hub!==e.origin?{error:`This pairing link does not belong to this hub. Open the original hub link instead.`}:{error:`Invalid pairing link. Use a complete link from the hub wizard.`}}let t=e.searchParams;if(!t.has(`code`)&&!t.has(`origin`)&&!t.has(`v`))return;let n=t.get(`code`),r=n===null?void 0:Oj(n);if(e.username||e.password||e.hash||t.getAll(`code`).length!==1||!r||t.getAll(`v`).length!==1||t.get(`v`)!==`1`)return{error:`Invalid pairing link. Use a complete version 1 link from the hub wizard.`};if(t.has(`origin`))try{let n=new URL(t.get(`origin`));if(t.getAll(`origin`).length!==1||n.origin!==e.origin||n.pathname!==`/`||n.username||n.password||n.search||n.hash)throw Error(`origin mismatch`)}catch{return{error:`This pairing link does not belong to this hub. Open the original hub link instead.`}}return{code:r,origin:e.origin}}var Vj=e=>/^\/pair\/?$/.test(e.pathname)?`/`:void 0,Hj=e=>/^\/pair\/?$/.test(e.pathname)&&Bj(e)===void 0?`/`:void 0,Uj=4e3;async function Wj(e){if(!e.needsCancel)return{closed:!0,confirmed:!0};let t,n=await Promise.race([e.cancel().catch(()=>`failed`),new Promise(n=>t=setTimeout(()=>n(`failed`),e.timeoutMs))]);return clearTimeout(t),{closed:n!==`issued`,confirmed:n===`cancelled`}}var Gj={class:`modal pair-wizard`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pair-title`},Kj={key:1,class:`pair-pending`,"aria-label":`Machines waiting for approval`},qj={class:`who`},Jj={key:0,class:`muted`},Yj={key:1,class:`muted`},Xj={class:`fp`},Zj={class:`row`},Qj={class:`phase`},$j=[`onClick`],eM={key:2,class:`hint`},tM={class:`pair-steps`,"aria-label":`Pairing progress`},nM={class:`pair-grid`},rM={class:`pair-code-box`},iM={class:`pair-code`,"aria-label":`Pairing code`},aM={class:`pair-copy-actions`},oM=[`innerHTML`],sM={class:`pair-side`},cM={key:0,class:`hint`},lM={class:`pair-fingerprint`},uM={class:`fp`},dM={class:`pair-confirm`},fM={key:0,class:`pair-confirm warn`},pM=[`disabled`],mM=[`disabled`],hM={class:`hint`},gM=[`disabled`],_M={key:5,class:`error`,role:`alert`},vM={key:4},yM={class:`error`,role:`alert`},bM=A({__name:`PairDeviceWizard`,props:{handoff:{}},emits:[`close`],setup(e,{expose:t,emit:n}){let r=n,i=e,a=O(`boot`),o=O(),s=O(),c=O(),l=O(``),u=O(!1),d=O(!1),f=O(!1),p=O(!1),m=O(!1),h=O(!1),g=O(),_=O([]),v=B(()=>{let e=s.value?.code??``;return!Dj(e)||e.includes(`-`)?e:(e.match(/.{4}/g)??[]).join(`-`)}),y=B(()=>s.value?Y_(s.value):``),b=B(()=>y.value?sx(y.value,148):``),ee=B(()=>c.value?.enrollment?.keyFingerprint??``),te=B(()=>c.value?.deviceId??``);Zn(te,e=>{g.value?.(),e&&(g.value=Zn(()=>Yl.devices.value.find(t=>t.id===e)?.status,e=>{e===`online`&&(Au(`Device paired and online.`),g.value?.(),g.value=void 0)},{immediate:!0}))});async function x(e){a.value=`boot`,l.value=``,f.value=!1,p.value=!1,c.value=void 0,s.value=void 0,o.value?.close();let t=Q_();o.value=t;try{let n=e?await X_.resolveCode(e):await X_.createCode();if(t.closed()){await X_.cancel(n.codeId).catch(()=>{Au(`The late pairing code could not be cancelled. Check device credentials before retrying.`)});return}if(s.value=n,a.value=`code`,e){let e=Vj(new URL(window.location.href));e&&window.history.replaceState(window.history.state,``,e)}tv(t,n.codeId,{intervalMs:1e3,onState:e=>{c.value=e,e.phase===`awaiting_proof`?a.value=`proof`:e.phase===`awaiting_approval`||e.phase===`approved`?a.value=`approve`:e.phase===`issued`||e.phase===`connected`?a.value=`issued`:e.phase===`cancelled`?a.value=`cancelled`:e.phase===`expired`&&(a.value=`expired`)}}).catch(e=>{t.closed()||(l.value=e instanceof Error?e.message:String(e),a.value=`expired`)})}catch(e){l.value=e instanceof Error?e.message:String(e),a.value=`expired`}}async function ne(){let e=c.value,t=o.value;if(e?.enrollment&&t&&!u.value){u.value=!0,l.value=``;try{let t=await X_.approve(s.value.codeId,{enrollmentId:e.enrollment.enrollmentId,deviceUid:e.enrollment.deviceUid,keyFingerprint:e.enrollment.keyFingerprint,...p.value?{replaceKey:!0}:{}});c.value=t,(t.phase===`issued`||t.phase===`connected`)&&(a.value=`issued`)}catch(e){l.value=e instanceof Error?e.message:String(e)}finally{u.value=!1}}}async function re(e){if(!s.value)return`cancelled`;try{let t=await X_.cancel(s.value.codeId,void 0,e);return c.value=t,o.value&&(o.value.state=t),a.value=t.phase===`expired`?`expired`:`cancelled`,o.value?.close(),`cancelled`}catch(e){if(e instanceof xl&&e.status===409&&String(e.code)===`already_issued`){let e=await X_.codeState(s.value.codeId).catch(()=>void 0);return e&&(c.value=e,o.value&&(o.value.state=e)),a.value=`issued`,l.value=`Credential already issued. Closing does not revoke it; choose Revoke explicitly if needed.`,`issued`}return l.value=e instanceof Error?e.message:String(e),`failed`}}let ie=()=>re(!1),ae=()=>[`issued`,`connected`,`cancelled`,`expired`].includes(c.value?.phase??``);async function oe(){let e=te.value;if(e){u.value=!0;try{await X_.revoke(e,`user`),Au(`Issued credential revoked.`),r(`close`)}catch(e){l.value=e instanceof Error?e.message:String(e)}finally{u.value=!1}}}async function se(){if(s.value)try{await navigator.clipboard.writeText(s.value.code),m.value=!0,setTimeout(()=>m.value=!1,1500)}catch{l.value=`Clipboard unavailable; copy the code manually.`}}async function ce(){if(s.value)try{await navigator.clipboard.writeText(s.value.offerUrl??s.value.pairUrl),h.value=!0,setTimeout(()=>h.value=!1,1500)}catch{l.value=`Clipboard unavailable; copy the link manually.`}}async function le(){if(!d.value){d.value=!0,u.value=!0;try{let e=await Wj({needsCancel:!!s.value&&!ae(),cancel:ie,timeoutMs:Uj});if(!e.closed)return;o.value?.close(),g.value?.(),e.confirmed||Au(`Pairing cancellation was not confirmed. The code expires on its own; check device credentials before retrying.`),r(`close`)}finally{d.value=!1,u.value=!1}}}t({close:le});let ue;async function de(){try{_.value=(await X_.pending()).codes}catch{}}async function fe(e){s.value=void 0,c.value=void 0,l.value=``;let t=Q_();o.value=t,a.value=e.phase===`approved_ready`?`approve`:`proof`,tv(t,e.codeId,{intervalMs:1e3,onState:e=>{c.value=e,e.phase===`awaiting_proof`?a.value=`proof`:e.phase===`awaiting_approval`||e.phase===`approved`?a.value=`approve`:e.phase===`issued`||e.phase===`connected`?a.value=`issued`:e.phase===`cancelled`?a.value=`cancelled`:e.phase===`expired`&&(a.value=`expired`)}}).catch(e=>{l.value=e instanceof Error?e.message:String(e)})}return Wr(()=>{if(de(),ue=setInterval(()=>void de(),3e3),i.handoff&&`error`in i.handoff){l.value=i.handoff.error,a.value=`expired`;return}x(i.handoff?.code)}),qr(()=>{clearInterval(ue);let e=o.value;e&&!e.closed()&&s.value&&!ae()&&re(!0).then(e=>{e!==`cancelled`&&Au(`Pairing cancellation was not confirmed. Check device credentials before retrying.`)}),e?.close(),g.value?.()}),(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:As(le,[`self`])},[I(`div`,Gj,[I(`header`,null,[t[5]||=I(`h2`,{id:`pair-title`},`Pair a device`,-1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close dialog`,onClick:le},[L(k(Kc),{size:18})])]),i.handoff&&`offerFragment`in i.handoff&&i.handoff.offerFragment?(N(),F(mx,{key:0,"offer-fragment":i.handoff.offerFragment},null,8,[`offer-fragment`])):z(``,!0),_.value.length?(N(),P(`section`,Kj,[t[6]||=I(`h3`,null,`Machines waiting for you`,-1),I(`ul`,null,[(N(!0),P(M,null,j(_.value,e=>(N(),P(`li`,{key:e.codeId},[I(`div`,qj,[I(`strong`,null,T(e.deviceName??`unnamed device`),1),e.hostname?(N(),P(`span`,Jj,T(e.hostname),1)):z(``,!0),e.platform?(N(),P(`span`,Yj,T(e.platform),1)):z(``,!0)]),I(`div`,Xj,T(e.keyFingerprint),1),I(`div`,Zj,[I(`span`,Qj,T(e.phase.replaceAll(`_`,` `)),1),I(`button`,{type:`button`,class:`small`,onClick:t=>fe(e)},`Review`,8,$j)])]))),128))]),t[7]||=I(`p`,{class:`hint`},` Compare each fingerprint with the machine's own terminal before approving. Codes are minted by the hub — nothing has to be copied to the machine. `,-1)])):z(``,!0),a.value===`boot`?(N(),P(`p`,eM,`Minting a pairing code…`)):s.value?(N(),P(M,{key:3},[I(`ol`,tM,[t[8]||=I(`li`,{class:C({on:!0})},`Code`,-1),I(`li`,{class:C({on:[`proof`,`approve`,`issued`].includes(a.value)})},`Proof`,2),I(`li`,{class:C({on:[`approve`,`issued`].includes(a.value)})},`Fingerprint`,2),I(`li`,{class:C({on:a.value===`issued`})},`Online`,2)]),I(`div`,nM,[I(`div`,rM,[I(`div`,iM,T(v.value),1),I(`div`,aM,[I(`button`,{type:`button`,class:`small`,onClick:se},[L(k(tc),{size:14}),R(` `+T(m.value?`Copied`:`Copy code`),1)]),I(`button`,{type:`button`,class:`small`,onClick:ce,title:`Self-contained link: hub, code and expiry all in the fragment — it never reaches server logs`},[L(k(tc),{size:14}),R(` `+T(h.value?`Copied link`:`Copy link`),1)])]),t[9]||=I(`p`,{class:`hint`},` Run the device pairing command and scan, or enter this code on the device. Expires in 5 minutes. `,-1),I(`div`,{class:`pair-qr`,"aria-label":`Pairing QR code`,title:`Same offer link as Copy link: hub, code and expiry all in the #offer= fragment — it never reaches server logs`,innerHTML:b.value},null,8,oM)]),I(`div`,sM,[a.value===`code`||a.value===`proof`?(N(),P(`p`,cM,[L(k(Nc),{size:14,class:`spin`}),t[10]||=R(` Waiting for the device to submit its signing proof… `,-1)])):a.value===`approve`?(N(),P(M,{key:1},[I(`div`,lM,[t[11]||=I(`h3`,null,`Device key fingerprint`,-1),I(`code`,uM,T(ee.value),1),t[12]||=I(`p`,{class:`hint`},` Compare ALL 64 hex characters with the fingerprint shown on the device screen. `,-1)]),I(`label`,dM,[Wn(I(`input`,{"onUpdate:modelValue":t[0]||=e=>f.value=e,type:`checkbox`},null,512),[[xs,f.value]]),t[13]||=R(` The fingerprint matches the device display exactly `,-1)]),c.value?.enrollment?.keyChanged?(N(),P(`label`,fM,[Wn(I(`input`,{"onUpdate:modelValue":t[1]||=e=>p.value=e,type:`checkbox`},null,512),[[xs,p.value]]),L(k(Ic),{size:14}),t[14]||=R(` Device is already paired with a DIFFERENT key — replace the stored key (replaceKey) `,-1)])):z(``,!0),I(`button`,{type:`button`,class:`primary`,disabled:!f.value||u.value||c.value?.enrollment?.keyChanged===!0&&!p.value,onClick:ne},` Approve device `,8,pM),I(`button`,{type:`button`,class:`small`,disabled:u.value,onClick:ie},` Cancel pairing `,8,mM)],64)):a.value===`issued`?(N(),P(M,{key:2},[I(`p`,hM,[L(k(Qs),{size:14}),t[15]||=R(` Credential issued. The device is connecting through the tunnel — you will get a toast once the monitor probe reports it online. `,-1)]),I(`button`,{type:`button`,class:`small`,onClick:le},`Close`),I(`button`,{type:`button`,class:`small danger`,disabled:!te.value||u.value,title:`Mistaken approval? Revoke the credential now.`,onClick:oe},` Revoke this credential `,8,gM)],64)):a.value===`cancelled`?(N(),P(M,{key:3},[t[16]||=I(`p`,{class:`hint`},`Pairing was cancelled (or the signature failed too many times).`,-1),I(`button`,{type:`button`,class:`small`,onClick:t[2]||=e=>x()},`Start over`)],64)):a.value===`expired`?(N(),P(M,{key:4},[t[17]||=I(`p`,{class:`hint`},`The pairing code expired.`,-1),I(`button`,{type:`button`,class:`small`,onClick:t[3]||=e=>x()},`New code`)],64)):z(``,!0),l.value?(N(),P(`p`,_M,T(l.value),1)):z(``,!0)])])],64)):(N(),P(`div`,vM,[I(`p`,yM,T(l.value||`This pairing link is unavailable.`),1),I(`button`,{type:`button`,class:`small`,onClick:t[4]||=e=>x()},`New code`)]))])]))}}),xM={class:`modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`device-credentials-title`},SM={class:`hint`},CM={key:1,class:`hint`},wM=A({__name:`DeviceCredentialsDialog`,props:{deviceId:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=B(()=>Yl.devices.value.find(e=>e.id===n.deviceId));return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[2]||=As(e=>r(`close`),[`self`])},[I(`section`,xM,[I(`header`,null,[t[3]||=I(`h2`,{id:`device-credentials-title`},`Device credentials`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close device credentials`,onClick:t[0]||=e=>r(`close`)},[L(k(Kc),{size:18})])]),i.value?(N(),P(M,{key:0},[I(`p`,null,[R(T(i.value.name)+` `,1),I(`code`,null,T(i.value.id),1)]),I(`p`,SM,T(i.value.status)+` · tunnel `+T(i.value.tunnel?.state??`disconnected`)+` · `+T(i.value.tunnel?.readerCount??0)+` readers `,1),L(uv,{device:i.value},null,8,[`device`])],64)):(N(),P(`p`,CM,`This device is no longer in the registry.`)),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:t[1]||=e=>r(`close`)},`Close`)])])]))}}),TM={id:`prompt-title`},EM=[`disabled`],DM={key:0,class:`hint`},OM={key:1},kM={key:0,class:`muted`},AM=[`placeholder`,`disabled`],jM=[`required`,`placeholder`,`aria-label`,`disabled`],MM={key:2,class:`message-error`,role:`alert`},NM=[`disabled`],PM=[`disabled`],FM=A({__name:`PromptDialog`,props:{dialog:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=O(n.dialog.value??``),a=O(!1),o=O(``),s=O(),c=!!n.dialog.label;async function l(){if(!a.value&&(!c||n.dialog.optional||i.value.trim())){a.value=!0,o.value=``;try{await n.dialog.run(i.value.trim()),r(`close`)}catch(e){o.value=Ll(e)}finally{a.value=!1}}}return Wr(()=>void jn(()=>(s.value?.focus(),s.value?.select()))),(t,n)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:n[4]||=As(e=>!a.value&&r(`close`),[`self`])},[I(`form`,{class:`modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`prompt-title`,onSubmit:As(l,[`prevent`])},[I(`header`,null,[I(`h2`,TM,T(e.dialog.title),1),I(`button`,{type:`button`,class:`icon-button`,"aria-label":`Close dialog`,disabled:a.value,onClick:n[0]||=e=>r(`close`)},[L(k(Kc),{size:18})],8,EM)]),e.dialog.hint?(N(),P(`p`,DM,T(e.dialog.hint),1)):z(``,!0),c?(N(),P(`label`,OM,[R(T(e.dialog.label)+` `,1),e.dialog.optional?(N(),P(`span`,kM,`(optional)`)):z(``,!0),e.dialog.multiline?Wn((N(),P(`textarea`,{key:1,ref_key:`input`,ref:s,"onUpdate:modelValue":n[1]||=e=>i.value=e,rows:`4`,placeholder:e.dialog.placeholder,disabled:a.value},null,8,AM)),[[bs,i.value]]):Wn((N(),P(`input`,{key:2,ref_key:`input`,ref:s,"onUpdate:modelValue":n[2]||=e=>i.value=e,maxlength:`100`,required:!e.dialog.optional,placeholder:e.dialog.placeholder,"aria-label":e.dialog.label,disabled:a.value},null,8,jM)),[[bs,i.value]])])):z(``,!0),o.value?(N(),P(`p`,MM,T(o.value),1)):z(``,!0),I(`footer`,null,[I(`button`,{type:`button`,class:`secondary`,disabled:a.value,onClick:n[3]||=e=>r(`close`)},` Cancel `,8,NM),I(`button`,{class:C([`primary`,{danger:e.dialog.danger}]),disabled:a.value||c&&!e.dialog.optional&&!i.value.trim()},T(a.value?`Working…`:e.dialog.submit),11,PM)])],32)]))}}),IM={class:`modal model-modal`},LM={class:`eyebrow`},RM={class:`model-list`},zM=[`onClick`],BM=[`src`],VM={class:`hint`},HM=A({__name:`ModelPicker`,emits:[`close`],setup(e,{emit:t}){let n=t,r=O(``),i=B(()=>vu.value.filter(e=>`${e.name} ${e.id} ${e.tier}`.toLowerCase().includes(r.value.toLowerCase()))),a=e=>e.id===yu.value.agent.model?.modelId&&e.provider===yu.value.agent.model?.provider;async function o(e){await ju(()=>lu.value.configure({model:{provider:e.provider,modelId:e.id}}))&&(await Ou(),Au(`Model saved. Used on the next turn.`),n(`close`))}return(e,t)=>(N(),P(`div`,{class:`modal-backdrop`,onClick:t[2]||=As(e=>n(`close`),[`self`])},[I(`section`,IM,[I(`header`,null,[I(`div`,null,[I(`span`,LM,`PER AGENT · `+T(k(nu)?.id),1),t[3]||=I(`h2`,null,`Choose a model`,-1)]),I(`button`,{class:`icon-button`,"aria-label":`Close model picker`,onClick:t[0]||=e=>n(`close`)},[L(k(Kc),{size:18})])]),Wn(I(`input`,{"onUpdate:modelValue":t[1]||=e=>r.value=e,placeholder:`Search models or tiers…`,"aria-label":`Search models`},null,512),[[bs,r.value]]),I(`div`,RM,[(N(!0),P(M,null,j(i.value,e=>(N(),P(`button`,{key:`${e.provider}/${e.id}`,class:C({selected:a(e)}),onClick:t=>o(e)},[I(`img`,{src:k(Fu)(e.id),alt:``},null,8,BM),I(`div`,null,[I(`strong`,null,T(e.name),1),I(`small`,null,T(e.tier)+` / `+T(e.provider)+` / `+T(k(Nu)(e.contextWindow))+` context`,1)]),a(e)?(N(),F(k(Ys),{key:0,size:18})):z(``,!0)],10,zM))),128))]),I(`p`,VM,`Models available on `+T(k(nu)?.id)+`. Provider keys stay on the device.`,1)])]))}}),UM={class:`dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`help-title`},WM={class:`dialog-head`},GM={class:`dialog-body`},KM={class:`n`},qM={class:`body`},JM={class:`help-callout`},YM={class:`dialog-foot`},XM={class:`right`},ZM=A({__name:`HelpDialog`,setup(e){let t=[{title:`Pick a device, start a session`,body:`Every device in the tree runs dpi-backend. A session gets its own SQLite database on that device, in the directory you choose.`},{title:`Send work, then close the browser`,body:`The device owns the run. Reopening restores committed messages, state and live progress.`},{title:`Change state and fork`,body:`Edit App State by hand or through the agent. Every session and fork on a device shares it.`},{title:`Interrupt deliberately`,body:`Interrupt stops foreground work and owned subagents. Background jobs continue. Stop all includes them.`},{title:`Explore the boundaries`,body:`Queue a follow-up, steer after tools, wait for approval, compact context, reset or inspect raw state.`},{title:`Restart a device`,body:`Its tree dims and shows the restart command. Checkpointed jobs recover on boot. Replay-safe tools may rerun. Other interrupted tools return an error.`}];return(e,n)=>(N(),P(`div`,{class:`scrim`,onClick:n[2]||=As(e=>k(U).dialog=void 0,[`self`])},[I(`section`,UM,[I(`div`,WM,[n[3]||=I(`div`,null,[I(`span`,{class:`dialog-eyebrow`},`LEARN BY DOING`),I(`h3`,{id:`help-title`},`What makes this durable?`)],-1),I(`button`,{class:`icon-button`,"aria-label":`Close help`,onClick:n[0]||=e=>k(U).dialog=void 0},[L(k(Kc),{size:18})])]),I(`div`,GM,[(N(),P(M,null,j(t,(e,t)=>I(`div`,{key:e.title,class:`help-step`},[I(`span`,KM,T(String(t+1).padStart(2,`0`)),1),I(`div`,null,[I(`b`,null,T(e.title),1),I(`div`,qM,T(e.body),1)])])),64)),I(`div`,JM,[L(k(fc),{size:18}),n[4]||=I(`span`,null,`Durable does not mean exactly-once external effects. Checkpoints protect progress. Tools still need their own idempotency.`,-1)])]),I(`div`,YM,[I(`div`,XM,[I(`button`,{class:`secondary`,type:`button`,onClick:n[1]||=e=>k(U).dialog=void 0},`Close`)])])])]))}}),QM=Kt({needed:!1,busy:!1,error:``}),$M=new Set,eN=e=>{let t=[...$M];$M=new Set;for(let n of t)n(e)},tN=()=>new Promise(e=>$M.add(e));async function nN(e){if(QM.busy||!e)return!1;QM.busy=!0,QM.error=``;try{let t=await fetch(`/api/session`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({token:e})});return await t.text().catch(()=>``),t.ok?(QM.needed=!1,eN(!0),!0):(QM.error=t.status===401?`That token was not accepted.`:t.status===429?`Too many attempts. Wait a minute and try again.`:`Login failed (${t.status}).`,!1)}catch{return QM.error=`Cannot reach the hub.`,!1}finally{QM.busy=!1}}var rN=e=>{try{return new URL(e,location.href).pathname===`/api/session`}catch{return e===`/api/session`}};function iN(e){return(async(t,n)=>{let r=()=>e(t,n),i=await r();if(i.status!==401||rN(typeof t==`string`?t:t instanceof URL?t.href:t.url)||n?.body instanceof ReadableStream)return i;QM.needed=!0;let a=await i.text().catch(()=>``);return await tN()?r():new Response(a,{status:i.status,headers:i.headers})})}function aN(){typeof window>`u`||window.__adminFetch||(window.__adminFetch=!0,window.fetch=iN(window.fetch.bind(window)))}var oN={class:`login-veil`,"data-testid":`login-card`},sN=[`disabled`],cN={key:0,class:`message-error`,role:`alert`},lN=[`disabled`],uN=A({__name:`LoginCard`,setup(e){let t=O(``),n=O();async function r(){if(QM.busy||!t.value.trim())return;let e=await nN(t.value.trim());t.value=``,e&&n.value?.blur()}return Wr(()=>void jn(()=>n.value?.focus())),(e,i)=>(N(),P(`div`,oN,[I(`form`,{class:`modal login-card`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`login-title`,onSubmit:As(r,[`prevent`])},[i[2]||=I(`header`,null,[I(`h2`,{id:`login-title`},`Admin token`)],-1),i[3]||=I(`p`,{class:`hint`},[R(` This hub is locked. Sign in with the token from its `),I(`code`,null,`admin.token`),R(` file. `)],-1),i[4]||=I(`label`,{for:`admin-token`},`Admin token`,-1),Wn(I(`input`,{id:`admin-token`,ref_key:`input`,ref:n,"onUpdate:modelValue":i[0]||=e=>t.value=e,type:`password`,name:`admin-token`,autocomplete:`off`,spellcheck:`false`,placeholder:`adm_…`,"aria-label":`Admin token`,disabled:k(QM).busy,onKeydown:i[1]||=Ms(e=>k(QM).error=``,[`esc`])},null,40,sN),[[bs,t.value]]),k(QM).error?(N(),P(`p`,cN,T(k(QM).error),1)):z(``,!0),I(`footer`,null,[I(`button`,{class:`primary`,type:`submit`,disabled:k(QM).busy||!t.value.trim()},T(k(QM).busy?`Checking…`:`Sign in`),9,lN)])],32)]))}}),dN={key:0,class:`toast`,role:`status`},fN=A({__name:`Toast`,setup(e){return(e,t)=>(N(),F(Co,{name:`toast`},{default:Un(()=>[k(U).toast?(N(),P(`div`,dN,[L(k(Ys),{size:18}),R(T(k(U).toast),1)])):z(``,!0)]),_:1}))}}),pN={class:`shell`,"data-testid":`app-shell`},mN={key:0,class:`error-banner`,role:`alert`},hN={key:4,class:`welcome`,"data-testid":`welcome-empty`},gN=[`disabled`],_N={class:`welcome-features`},vN={class:`modal path-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`path-title`},yN={class:`full-directory`},bN=A({__name:`App`,setup(e){let t=()=>Yl.devices.value.filter(e=>e.status===`online`).length,n=O();function r(){U.dialog={kind:`new-session`,deviceId:H.value?.deviceId}}function i(e){let t=U.dialog?void 0:Ju(e);if(t)return e.preventDefault(),t===`tree`?Wu():Gu();if(e.key===`Escape`){if(U.dialog){U.dialog.kind===`pair`?n.value?.close():U.dialog=void 0;return}!e.repeat&&!e.isComposing&&Cu.value&&(e.preventDefault(),Ru()),U.drawer=!1,U.inspectorOverlay=!1}}function a(e){let t=e.clientX,n=Ql.value,r=e=>Ql.value=Math.max(220,Math.min(560,n+e.clientX-t)),i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i)};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)}return Wr(()=>{document.addEventListener(`keydown`,i),gu()}),qr(()=>{ql.stop(),document.removeEventListener(`keydown`,i)}),(e,i)=>(N(),P(`div`,pN,[L(nd,{onNewSession:r}),k(U).error?(N(),P(`div`,mN,[L(k(fc),{size:18}),I(`span`,null,T(k(U).error),1),I(`button`,{class:`icon-button`,"aria-label":`Dismiss error`,onClick:i[0]||=e=>k(U).error=``},`×`)])):z(``,!0),I(`main`,{class:`net-workspace`,style:ye({"--tree-w":`${k(Ql)}px`})},[L(Id),k($l).tree?(N(),P(`div`,{key:0,class:`tree-resizer`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize network tree`,onPointerdown:As(a,[`prevent`])},null,32)):z(``,!0),k(U).drawer?(N(),P(`div`,{key:1,class:`tree-backdrop`,onClick:i[1]||=e=>k(U).drawer=!1})):z(``,!0),k(H)&&k(nu)&&k(ru)?(N(),P(M,{key:2},[L(cb),k(U).inspectorOverlay?(N(),P(`div`,{key:0,class:`inspector-backdrop`,onClick:i[2]||=e=>k(Uu)()})):z(``,!0),(N(),F(x_,{key:`${k(H).deviceId}/${k(H).sessionId}`}))],64)):k(H)&&k(nu)?(N(),F(vb,{key:3,device:k(nu)},null,8,[`device`])):(N(),P(`section`,hN,[i[14]||=I(`img`,{class:`welcome-symbol`,src:`/icons/durable-pi.svg`,alt:`Durable Pi`},null,-1),i[15]||=I(`span`,{class:`eyebrow`},`THE DURABLE AGENT NETWORK`,-1),i[16]||=I(`h1`,null,[R(`Close the tab.`),I(`br`),R(`The work continues.`)],-1),i[17]||=I(`p`,null,`Agents run on your devices. This page is only a window into them.`,-1),I(`button`,{class:`primary`,disabled:!t(),onClick:r},[L(k(jc),{size:18}),R(T(k(Yl).devices.value.length?`Create a session`:`Add a device to dpi-network.yaml`),1)],8,gN),I(`div`,_N,[I(`span`,null,[L(k(ic),{size:18}),i[11]||=R(`SQLite on each device`,-1)]),I(`span`,null,[L(k(lc),{size:18}),i[12]||=R(`Branch any agent`,-1)]),I(`span`,null,[L(k(Hs),{size:18}),i[13]||=R(`Watch from anywhere`,-1)])])]))],4),L(ad),k(U).dialog?.kind===`pair`?(N(),F(bM,{key:1,ref_key:`pairWizard`,ref:n,handoff:k(U).dialog.handoff,onClose:i[3]||=e=>k(U).dialog=void 0},null,8,[`handoff`])):z(``,!0),k(U).dialog?.kind===`credentials`?(N(),F(wM,{key:2,"device-id":k(U).dialog.deviceId,onClose:i[4]||=e=>k(U).dialog=void 0},null,8,[`device-id`])):z(``,!0),k(U).dialog?.kind===`new-session`?(N(),F(Fb,{key:3,"device-id":k(U).dialog.deviceId,onClose:i[5]||=e=>k(U).dialog=void 0},null,8,[`device-id`])):k(U).dialog?.kind===`prompt`?(N(),F(FM,{key:4,dialog:k(U).dialog,onClose:i[6]||=e=>k(U).dialog=void 0},null,8,[`dialog`])):k(U).dialog?.kind===`models`?(N(),F(HM,{key:5,onClose:i[7]||=e=>k(U).dialog=void 0})):k(U).dialog?.kind===`path`?(N(),P(`div`,{key:6,class:`modal-backdrop`,onClick:i[10]||=As(e=>k(U).dialog=void 0,[`self`])},[I(`section`,vN,[I(`header`,null,[i[18]||=I(`h2`,{id:`path-title`},`Working directory`,-1),I(`button`,{class:`icon-button`,"aria-label":`Close working directory`,onClick:i[8]||=e=>k(U).dialog=void 0},[L(k(Kc),{size:18})])]),I(`code`,yN,T(k(U).dialog.path),1),I(`footer`,null,[I(`button`,{class:`secondary`,onClick:i[9]||=e=>k(U).dialog=void 0},`Close`)])])])):k(U).dialog?.kind===`help`?(N(),F(ZM,{key:7})):z(``,!0),k(QM).needed?(N(),F(uN,{key:8})):z(``,!0),L(fN)]))}});aN();var xN=new URL(window.location.href);if(/^\/pair\/?$/.test(xN.pathname)){let e=Bj(xN);e?(xN.search=``,xN.hash=``,window.history.replaceState(window.history.state,``,xN),U.dialog={kind:`pair`,handoff:e}):window.history.replaceState(window.history.state,``,Hj(xN))}Is(bN).mount(`#app`);
@@ -7,7 +7,7 @@
7
7
  <meta name="referrer" content="no-referrer" />
8
8
  <link rel="icon" type="image/svg+xml" href="/icons/durable-pi.svg" />
9
9
  <title>Durable Pi | Network</title>
10
- <script type="module" crossorigin src="/assets/index-Ct_cPQy9.js"></script>
10
+ <script type="module" crossorigin src="/assets/index-DEFBWh1G.js"></script>
11
11
  <link rel="stylesheet" crossorigin href="/assets/index-Cg3vey95.css">
12
12
  </head>
13
13
  <body>
@@ -38,6 +38,8 @@ const models = computed(() => {
38
38
  const catalogEmpty = computed(
39
39
  () => !models.value.length || (device.value?.info?.models?.length ?? 0) === 0,
40
40
  );
41
+ /** The device lists its built-in catalog but chat needs the key (0.0.12+ devices). */
42
+ const keyless = computed(() => !!(device.value?.info as { providerKeyMissing?: boolean } | undefined)?.providerKeyMissing);
41
43
  const key = (m: { provider: string; id: string }) => `${m.provider}/${m.id}`;
42
44
  const draft = ref({ name: "", cwd: "", model: "" });
43
45
  const pending = ref(false);
@@ -121,10 +123,10 @@ async function create() {
121
123
  </div>
122
124
  <label
123
125
  >Model<span
124
- v-if="catalogEmpty"
126
+ v-if="catalogEmpty || keyless"
125
127
  class="hint"
126
- title="The device reports no usable models — create still works with its default; add the provider key on the device (e.g. OPENROUTER_API_KEY) to see the catalog"
127
- >no key on device — using default</span
128
+ title="The device has no provider key — it lists its built-in catalog, and chat needs OPENROUTER_API_KEY set in the device's env file"
129
+ >no API key on device — chat needs one</span
128
130
  ><select v-model="draft.model" aria-label="New session model">
129
131
  <option v-for="m in models" :key="key(m)" :value="key(m)">
130
132
  {{ m.tier }} / {{ m.name }}
@@ -96,6 +96,8 @@ export interface DeviceInfo {
96
96
  defaultModel: string;
97
97
  /** Provider id of this device ("openrouter" | "faux"); FE model fallback. */
98
98
  provider?: string;
99
+ /** No provider key on the device: the catalog shown is the built-in list and chat needs the key. */
100
+ providerKeyMissing?: boolean;
99
101
  storage: { dataDir: string; catalogPath: string; appStatePath: string };
100
102
  /** The checkout the backend runs from (repo root locally, `code_dir` on deployed devices). */
101
103
  codeDir?: string;
@@ -553,6 +553,20 @@ export class App {
553
553
  this.toast = "";
554
554
  return true;
555
555
  }
556
+ // The slash suggestion list is a MENU while it is open: ↑/↓ steer it and
557
+ // enter picks — history recall waits until the list is gone. (Reported:
558
+ // "danh sách slash command không điều hướng được, enter không autocomplete".)
559
+ const sugg = input.kind === "message" ? slashSuggestions(input.value, COMMANDS) : null;
560
+ if (sugg && matchesKey(data, "up")) {
561
+ this.suggIndex = Math.max(0, this.suggIndex - 1);
562
+ this.requestRender();
563
+ return true;
564
+ }
565
+ if (sugg && matchesKey(data, "down")) {
566
+ this.suggIndex = Math.min(sugg.names.length - 1, this.suggIndex + 1);
567
+ this.requestRender();
568
+ return true;
569
+ }
556
570
  // ↑/↓ recall sent messages; the current draft survives the round-trip.
557
571
  if (input.kind === "message" && matchesKey(data, "up")) {
558
572
  if (this.inputHistory.length) {
@@ -575,13 +589,11 @@ export class App {
575
589
  }
576
590
  // Tab completes the selected slash suggestion; shift+tab cycles it.
577
591
  if (input.kind === "message" && matchesKey(data, "shift+tab")) {
578
- const sugg = slashSuggestions(input.value, COMMANDS);
579
592
  if (sugg) this.suggIndex = (this.suggIndex + 1) % sugg.names.length;
580
593
  this.requestRender();
581
594
  return true;
582
595
  }
583
596
  if (input.kind === "message" && matchesKey(data, "tab")) {
584
- const sugg = slashSuggestions(input.value, COMMANDS);
585
597
  if (sugg) {
586
598
  const pick = sugg.names[this.suggIndex % sugg.names.length]!;
587
599
  input.value = `/${pick} `;
@@ -599,6 +611,21 @@ export class App {
599
611
  return true;
600
612
  }
601
613
  if (matchesKey(data, "enter")) {
614
+ // Enter completes the highlighted suggestion (the completed text gains a
615
+ // trailing space, the list closes, and the NEXT enter submits). An exact
616
+ // command ("/model") runs immediately instead — completing it would force
617
+ // a pointless second enter.
618
+ if (
619
+ sugg &&
620
+ input.kind === "message" &&
621
+ !COMMANDS.some((c) => `/${c.name}` === input.value)
622
+ ) {
623
+ const pick = sugg.names[this.suggIndex % sugg.names.length]!;
624
+ input.value = `/${pick} `;
625
+ this.suggIndex = 0;
626
+ this.requestRender();
627
+ return true;
628
+ }
602
629
  const value = input.value;
603
630
  this.input = null;
604
631
  this.toast = "";
@@ -333,6 +333,12 @@ function chooseModel(app: App, current?: string) {
333
333
  app.closeOverlay();
334
334
  done(undefined);
335
335
  },
336
+ undefined,
337
+ // The keyless device still lists the built-in catalog — say why chat
338
+ // will fail, instead of letting the first request be the messenger.
339
+ (app.info as { providerKeyMissing?: boolean }).providerKeyMissing
340
+ ? "no API key on this device — chat needs OPENROUTER_API_KEY in its env file"
341
+ : undefined,
336
342
  );
337
343
  const index = models.findIndex((m) => m.id === current);
338
344
  if (index >= 0) picker.list.setSelectedIndex(index);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "my-durable",
3
- "version": "0.0.11",
3
+ "version": "0.0.12",
4
4
  "description": "Durable Pi \u2014 the durable agent network: hub web UI, device backend daemon, TUI admin and the shared SDK, packaged as one runnable monorepo install",
5
5
  "license": "MIT",
6
6
  "repository": {