teapot-coding-agent 0.14.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,13 +18,13 @@ WARNING: This link could potentially be dangerous`)){let e=window.open();if(e){t
18
18
  `))),this._register(this._terminal.onA11yTab(e=>this._handleTab(e))),this._register(this._terminal.onKey(e=>this._handleKey(e.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register(W(i,`selectionchange`,()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register(z(()=>{this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t<e;t++)this._handleChar(` `)}_handleChar(e){this._liveRegionLineCount<fc+1&&(this._charsToConsume.length>0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===`
19
19
  `&&(this._liveRegionLineCount++,this._liveRegionLineCount===fc+1&&(this._liveRegion.textContent+=Je.get())))}_clearLiveRegion(){this._liveRegion.textContent=``,this._liveRegionLineCount=0}_handleKey(e){this._clearLiveRegion(),/\p{Control}/u.test(e)||this._charsToConsume.push(e)}_refreshRows(e,t){this._liveRegionDebouncer.refresh(e,t,this._terminal.rows)}_renderRows(e,t){let n=this._terminal.buffer,r=n.lines.length.toString();for(let i=e;i<=t;i++){let e=n.lines.get(n.ydisp+i),t=[],a=e?.translateToString(!0,void 0,void 0,t)||``,o=(n.ydisp+i+1).toString(),s=this._rowElements[i];s&&(a.length===0?(s.textContent=`\xA0`,this._rowColumns.set(s,[0,1])):(s.textContent=a,this._rowColumns.set(s,t)),s.setAttribute(`aria-posinset`,o),s.setAttribute(`aria-setsize`,r),this._alignRowWidth(s))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce=``)}_handleBoundaryFocus(e,t){let n=e.target,r=this._rowElements[t===0?1:this._rowElements.length-2];if(n.getAttribute(`aria-posinset`)===(t===0?`1`:`${this._terminal.buffer.lines.length}`)||e.relatedTarget!==r)return;let i,a;if(t===0?(i=n,a=this._rowElements.pop(),this._rowContainer.removeChild(a)):(i=this._rowElements.shift(),a=n,this._rowContainer.removeChild(i)),i.removeEventListener(`focus`,this._topBoundaryFocusListener),a.removeEventListener(`focus`,this._bottomBoundaryFocusListener),t===0){let e=this._createAccessibilityTreeNode();this._rowElements.unshift(e),this._rowContainer.insertAdjacentElement(`afterbegin`,e)}else{let e=this._createAccessibilityTreeNode();this._rowElements.push(e),this._rowContainer.appendChild(e)}this._rowElements[0].addEventListener(`focus`,this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._terminal.scrollLines(t===0?-1:1),this._rowElements[t===0?1:this._rowElements.length-2].focus(),e.preventDefault(),e.stopImmediatePropagation()}_handleSelectionChange(){if(this._rowElements.length===0)return;let e=this._coreBrowserService.mainDocument.getSelection();if(!e)return;if(e.isCollapsed){this._rowContainer.contains(e.anchorNode)&&this._terminal.clearSelection();return}if(!e.anchorNode||!e.focusNode){console.error(`anchorNode and/or focusNode are null`);return}let t={node:e.anchorNode,offset:e.anchorOffset},n={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(n.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===n.node&&t.offset>n.offset)&&([t,n]=[n,t]),t.node.compareDocumentPosition(this._rowElements[0])&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_FOLLOWING)&&(t={node:this._rowElements[0].childNodes[0],offset:0}),!this._rowContainer.contains(t.node))return;let r=this._rowElements.slice(-1)[0];if(n.node.compareDocumentPosition(r)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(n={node:r,offset:r.textContent?.length??0}),!this._rowContainer.contains(n.node))return;let i=({node:e,offset:t})=>{let n=e instanceof Text?e.parentNode:e,r=parseInt(n?.getAttribute(`aria-posinset`),10)-1;if(isNaN(r))return console.warn(`row is invalid. Race condition?`),null;let i=this._rowColumns.get(n);if(!i)return console.warn(`columns is null. Race condition?`),null;let a=t<i.length?i[t]:i.slice(-1)[0]+1;return a>=this._terminal.cols&&(++r,a=0),{row:r,column:a}},a=i(t),o=i(n);if(!(!a||!o)){if(a.row>o.row||a.row===o.row&&a.column>=o.column)throw Error(`invalid range`);this._terminal.select(a.column,a.row,(o.row-a.row)*this._terminal.cols-a.column+o.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener(`focus`,this._bottomBoundaryFocusListener);for(let e=this._rowContainer.children.length;e<this._terminal.rows;e++)this._rowElements[e]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[e]);for(;this._rowElements.length>e;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener(`focus`,this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){let e=this._coreBrowserService.mainDocument.createElement(`div`);return e.setAttribute(`role`,`listitem`),e.tabIndex=-1,this._refreshRowDimensions(e),e}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){Object.assign(this._accessibilityContainer.style,{width:`${this._renderService.dimensions.css.canvas.width}px`,fontSize:`${this._terminal.options.fontSize}px`}),this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let e=0;e<this._terminal.rows;e++)this._refreshRowDimensions(this._rowElements[e]),this._alignRowWidth(this._rowElements[e])}}_refreshRowDimensions(e){e.style.height=`${this._renderService.dimensions.css.cell.height}px`}_alignRowWidth(e){e.style.transform=``;let t=e.getBoundingClientRect().width,n=this._rowColumns.get(e)?.slice(-1)?.[0];if(!n)return;let r=n*this._renderService.dimensions.css.cell.width;e.style.transform=`scaleX(${r/t})`}};pc=I([L(1,xt),L(2,At),L(3,R)],pc);var mc=class extends B{constructor(e,t,n,r,i){super(),this._element=e,this._mouseService=t,this._renderService=n,this._bufferService=r,this._linkProviderService=i,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this._register(new U),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this._register(new U),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this._register(z(()=>{en(this._linkCacheDisposables),this._linkCacheDisposables.length=0,this._lastMouseEvent=void 0,this._activeProviderReplies?.clear()})),this._register(this._bufferService.onResize(()=>{this._clearCurrentLink(),this._wasResized=!0})),this._register(W(this._element,`mouseleave`,()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(W(this._element,`mousemove`,this._handleMouseMove.bind(this))),this._register(W(this._element,`mousedown`,this._handleMouseDown.bind(this))),this._register(W(this._element,`mouseup`,this._handleMouseUp.bind(this)))}get currentLink(){return this._currentLink}_handleMouseMove(e){this._lastMouseEvent=e;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);if(!t)return;this._isMouseOut=!1;let n=e.composedPath();for(let e=0;e<n.length;e++){let t=n[e];if(t.classList.contains(`xterm`))break;if(t.classList.contains(`xterm-hover`))return}(!this._lastBufferCell||t.x!==this._lastBufferCell.x||t.y!==this._lastBufferCell.y)&&(this._handleHover(t),this._lastBufferCell=t)}_handleHover(e){if(this._activeLine!==e.y||this._wasResized){this._clearCurrentLink(),this._askForLink(e,!1),this._wasResized=!1;return}this._currentLink&&this._linkAtPosition(this._currentLink.link,e)||(this._clearCurrentLink(),this._askForLink(e,!0))}_askForLink(e,t){(!this._activeProviderReplies||!t)&&(this._activeProviderReplies?.forEach(e=>{e?.forEach(e=>{e.link.dispose&&e.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let n=!1;for(let[r,i]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(r)&&(n=this._checkLinkProviderResult(r,e,n)):i.provideLinks(e.y,t=>{if(this._isMouseOut)return;let i=t?.map(e=>({link:e}));this._activeProviderReplies?.set(r,i),n=this._checkLinkProviderResult(r,e,n),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){let n=new Set;for(let r=0;r<t.size;r++){let i=t.get(r);if(i)for(let t=0;t<i.length;t++){let r=i[t],a=r.link.range.start.y<e?0:r.link.range.start.x,o=r.link.range.end.y>e?this._bufferService.cols:r.link.range.end.x;for(let e=a;e<=o;e++){if(n.has(e)){i.splice(t--,1);break}n.add(e)}}}}_checkLinkProviderResult(e,t,n){if(!this._activeProviderReplies)return n;let r=this._activeProviderReplies.get(e),i=!1;for(let t=0;t<e;t++)(!this._activeProviderReplies.has(t)||this._activeProviderReplies.get(t))&&(i=!0);if(!i&&r){let e=r.find(e=>this._linkAtPosition(e.link,t));e&&(n=!0,this._handleNewLink(e))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!n)for(let e=0;e<this._activeProviderReplies.size;e++){let r=this._activeProviderReplies.get(e)?.find(e=>this._linkAtPosition(e.link,t));if(r){n=!0,this._handleNewLink(r);break}}return n}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._mouseDownLink&&hc(this._mouseDownLink.link,this._currentLink.link)&&this._linkAtPosition(this._currentLink.link,t)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,t){!this._currentLink||!this._lastMouseEvent||(!e||!t||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=t)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,en(this._linkCacheDisposables),this._linkCacheDisposables.length=0)}_handleNewLink(e){if(!this._lastMouseEvent)return;let t=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);t&&this._linkAtPosition(e.link,t)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0||e.link.decorations.underline,pointerCursor:e.link.decorations===void 0||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>this._currentLink?.state?.decorations.pointerCursor,set:e=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==e&&(this._currentLink.state.decorations.pointerCursor=e,this._currentLink.state.isHovered&&this._element.classList.toggle(`xterm-cursor-pointer`,e))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:t=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(e=>{if(!this._currentLink)return;let t=e.start===0?0:e.start+1+this._bufferService.buffer.ydisp,n=this._bufferService.buffer.ydisp+1+e.end;if(this._currentLink.link.range.start.y>=t&&this._currentLink.link.range.end.y<=n&&(this._clearCurrentLink(t,n),this._lastMouseEvent)){let e=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);e&&this._askForLink(e,!1)}})))}_linkHover(e,t,n){this._currentLink?.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add(`xterm-cursor-pointer`)),t.hover&&t.hover(n,t.text)}_fireUnderlineEvent(e,t){let n=e.range,r=this._bufferService.buffer.ydisp,i=this._createLinkUnderlineEvent(n.start.x-1,n.start.y-r-1,n.end.x,n.end.y-r-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(i)}_linkLeave(e,t,n){this._currentLink?.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(t,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove(`xterm-cursor-pointer`)),t.leave&&t.leave(n,t.text)}_linkAtPosition(e,t){let n=e.range.start.y*this._bufferService.cols+e.range.start.x,r=e.range.end.y*this._bufferService.cols+e.range.end.x,i=t.y*this._bufferService.cols+t.x;return n<=i&&i<=r}_positionFromMouseEvent(e,t,n){let r=n.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(r)return{x:r[0],y:r[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,n,r,i){return{x1:e,y1:t,x2:n,y2:r,cols:this._bufferService.cols,fg:i}}};mc=I([L(1,jt),L(2,R),L(3,_t),L(4,Ft)],mc);function hc(e,t){return e.text===t.text&&e.range.start.x===t.range.start.x&&e.range.start.y===t.range.start.y&&e.range.end.x===t.range.end.x&&e.range.end.y===t.range.end.y}var gc=class extends nc{constructor(e={}){super(e),this._linkifier=this._register(new an),this.browser=Aa,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this._register(new an),this._onCursorMove=this._register(new U),this.onCursorMove=this._onCursorMove.event,this._onKey=this._register(new U),this.onKey=this._onKey.event,this._onRender=this._register(new U),this.onRender=this._onRender.event,this._onSelectionChange=this._register(new U),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this._register(new U),this.onTitleChange=this._onTitleChange.event,this._onBell=this._register(new U),this.onBell=this._onBell.event,this._onFocus=this._register(new U),this._onBlur=this._register(new U),this._onA11yCharEmitter=this._register(new U),this._onA11yTabEmitter=this._register(new U),this._onWillOpen=this._register(new U),this._setup(),this._decorationService=this._instantiationService.createInstance(cc),this._instantiationService.setService(Et,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(Ta),this._instantiationService.setService(Ft,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(Dt)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(e=>this.refresh(e?.start??0,e?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(e=>this._reportWindowsOptions(e))),this._register(this._inputHandler.onColor(e=>this._handleColorEvent(e))),this._register(H.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(H.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(H.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(H.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(e=>this._afterResize(e.cols,e.rows))),this._register(z(()=>{this._customKeyEventHandler=void 0,this.element?.parentNode?.removeChild(this.element)}))}get linkifier(){return this._linkifier.value}get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}_handleColorEvent(e){if(this._themeService)for(let t of e){let e,n=``;switch(t.index){case 256:e=`foreground`,n=`10`;break;case 257:e=`background`,n=`11`;break;case 258:e=`cursor`,n=`12`;break;default:e=`ansi`,n=`4;`+t.index}switch(t.type){case 0:let r=J.toColorRGB(e===`ansi`?this._themeService.colors.ansi[t.index]:this._themeService.colors[e]);this.coreService.triggerDataEvent(`${G.ESC}]${n};${Bs(r)}${Ui.ST}`);break;case 1:if(e===`ansi`)this._themeService.modifyColors(e=>e.ansi[t.index]=q.toColor(...t.color));else{let n=e;this._themeService.modifyColors(e=>e[n]=q.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(e){e?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(pc,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(G.ESC+`[I`),this.element.classList.add(`focus`),this._showCursor(),this._onFocus.fire()}blur(){return this.textarea?.blur()}_handleTextAreaBlur(){this.textarea.value=``,this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(G.ESC+`[O`),this.element.classList.remove(`focus`),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;let e=this.buffer.ybase+this.buffer.y,t=this.buffer.lines.get(e);if(!t)return;let n=Math.min(this.buffer.x,this.cols-1),r=this._renderService.dimensions.css.cell.height,i=t.getWidth(n),a=this._renderService.dimensions.css.cell.width*i,o=this.buffer.y*this._renderService.dimensions.css.cell.height,s=n*this._renderService.dimensions.css.cell.width;this.textarea.style.left=s+`px`,this.textarea.style.top=o+`px`,this.textarea.style.width=a+`px`,this.textarea.style.height=r+`px`,this.textarea.style.lineHeight=r+`px`,this.textarea.style.zIndex=`-5`}_initGlobal(){this._bindKeys(),this._register(W(this.element,`copy`,e=>{this.hasSelection()&&Ze(e,this._selectionService)}));let e=e=>Qe(e,this.textarea,this.coreService,this.optionsService);this._register(W(this.textarea,`paste`,e)),this._register(W(this.element,`paste`,e)),Pa?this._register(W(this.element,`mousedown`,e=>{e.button===2&&tt(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(W(this.element,`contextmenu`,e=>{tt(e,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),Ha&&this._register(W(this.element,`auxclick`,e=>{e.button===1&&et(e,this.textarea,this.screenElement)}))}_bindKeys(){this._register(W(this.textarea,`keyup`,e=>this._keyUp(e),!0)),this._register(W(this.textarea,`keydown`,e=>this._keyDown(e),!0)),this._register(W(this.textarea,`keypress`,e=>this._keyPress(e),!0)),this._register(W(this.textarea,`compositionstart`,()=>this._compositionHelper.compositionstart())),this._register(W(this.textarea,`compositionupdate`,e=>this._compositionHelper.compositionupdate(e))),this._register(W(this.textarea,`compositionend`,()=>this._compositionHelper.compositionend())),this._register(W(this.textarea,`input`,e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw Error(`Terminal requires a parent element.`);if(e.isConnected||this._logService.debug(`Terminal.open was called on an element that was not attached to the DOM`),this.element?.ownerDocument.defaultView&&this._coreBrowserService){this.element.ownerDocument.defaultView!==this._coreBrowserService.window&&(this._coreBrowserService.window=this.element.ownerDocument.defaultView);return}this._document=e.ownerDocument,this.options.documentOverride&&this.options.documentOverride instanceof Document&&(this._document=this.optionsService.rawOptions.documentOverride),this.element=this._document.createElement(`div`),this.element.dir=`ltr`,this.element.classList.add(`terminal`),this.element.classList.add(`xterm`),e.appendChild(this.element);let t=this._document.createDocumentFragment();this._viewportElement=this._document.createElement(`div`),this._viewportElement.classList.add(`xterm-viewport`),t.appendChild(this._viewportElement),this.screenElement=this._document.createElement(`div`),this.screenElement.classList.add(`xterm-screen`),this._register(W(this.screenElement,`mousemove`,e=>this.updateCursorStyle(e))),this._helperContainer=this._document.createElement(`div`),this._helperContainer.classList.add(`xterm-helpers`),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);let n=this.textarea=this._document.createElement(`textarea`);this.textarea.classList.add(`xterm-helper-textarea`),this.textarea.setAttribute(`aria-label`,Ke.get()),Ua||this.textarea.setAttribute(`aria-multiline`,`false`),this.textarea.setAttribute(`autocorrect`,`off`),this.textarea.setAttribute(`autocapitalize`,`off`),this.textarea.setAttribute(`spellcheck`,`false`),this.textarea.tabIndex=0,this._register(this.optionsService.onSpecificOptionChange(`disableStdin`,()=>n.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(Ca,this.textarea,e.ownerDocument.defaultView??window,this._document??typeof window<`u`?window.document:null)),this._instantiationService.setService(At,this._coreBrowserService),this._register(W(this.textarea,`focus`,e=>this._handleTextAreaFocus(e))),this._register(W(this.textarea,`blur`,()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(ya,this._document,this._helperContainer),this._instantiationService.setService(kt,this._charSizeService),this._themeService=this._instantiationService.createInstance(Oo),this._instantiationService.setService(Pt,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(ea),this._instantiationService.setService(Nt,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(Ya,this.rows,this.screenElement)),this._instantiationService.setService(R,this._renderService),this._register(this._renderService.onRenderedViewportChange(e=>this._onRender.fire(e))),this.onResize(e=>this._renderService.resize(e.cols,e.rows)),this._compositionView=this._document.createElement(`div`),this._compositionView.classList.add(`composition-view`),this._compositionHelper=this._instantiationService.createInstance(Wi,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(Oa),this._instantiationService.setService(jt,this._mouseService);let r=this._linkifier.value=this._register(this._instantiationService.createInstance(mc,this.screenElement));this.element.appendChild(t);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._register(this.onCursorMove(()=>{this._renderService.handleCursorMove(),this._syncTextArea()})),this._register(this.onResize(()=>this._renderService.handleResize(this.cols,this.rows))),this._register(this.onBlur(()=>this._renderService.handleBlur())),this._register(this.onFocus(()=>this._renderService.handleFocus())),this._viewport=this._register(this._instantiationService.createInstance(Fi,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(e=>{super.scrollLines(e,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(vo,this.element,this.screenElement,r)),this._instantiationService.setService(Mt,this._selectionService),this._register(this._selectionService.onRequestScrollLines(e=>this.scrollLines(e.amount,e.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(e=>this._renderService.handleSelectionChanged(e.start,e.end,e.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(e=>{this.textarea.value=e,this.textarea.focus(),this.textarea.select()})),this._register(H.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(Ii,this.screenElement)),this._register(W(this.element,`mousedown`,e=>this._selectionService.handleMouseDown(e))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add(`enable-mouse-events`)):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(pc,this)),this._register(this.optionsService.onSpecificOptionChange(`screenReaderMode`,e=>this._handleScreenReaderModeOptionChange(e))),this.options.overviewRuler.width&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(Vi,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange(`overviewRuler`,e=>{!this._overviewRulerRenderer&&e&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(Vi,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(va,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){let e=this,t=this.element;function n(t){let n=e._mouseService.getMouseReportCoords(t,e.screenElement);if(!n)return!1;let r,i;switch(t.overrideType||t.type){case`mousemove`:i=32,t.buttons===void 0?(r=3,t.button!==void 0&&(r=t.button<3?t.button:3)):r=t.buttons&1?0:t.buttons&4?1:t.buttons&2?2:3;break;case`mouseup`:i=0,r=t.button<3?t.button:3;break;case`mousedown`:i=1,r=t.button<3?t.button:3;break;case`wheel`:if(e._customWheelEventHandler&&e._customWheelEventHandler(t)===!1)return!1;let n=t.deltaY;if(n===0||e.coreMouseService.consumeWheelEvent(t,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return!1;i=n<0?0:1,r=4;break;default:return!1}return i===void 0||r===void 0||r>4?!1:e.coreMouseService.triggerMouseEvent({col:n.col,row:n.row,x:n.x,y:n.y,button:r,action:i,ctrl:t.ctrlKey,alt:t.altKey,shift:t.shiftKey})}let r={mouseup:null,wheel:null,mousedrag:null,mousemove:null},i={mouseup:e=>(n(e),e.buttons||(this._document.removeEventListener(`mouseup`,r.mouseup),r.mousedrag&&this._document.removeEventListener(`mousemove`,r.mousedrag)),this.cancel(e)),wheel:e=>(n(e),this.cancel(e,!0)),mousedrag:e=>{e.buttons&&n(e)},mousemove:e=>{e.buttons||n(e)}};this._register(this.coreMouseService.onProtocolChange(e=>{e?(this.optionsService.rawOptions.logLevel===`debug`&&this._logService.debug(`Binding to mouse events:`,this.coreMouseService.explainEvents(e)),this.element.classList.add(`enable-mouse-events`),this._selectionService.disable()):(this._logService.debug(`Unbinding from mouse events.`),this.element.classList.remove(`enable-mouse-events`),this._selectionService.enable()),e&8?r.mousemove||=(t.addEventListener(`mousemove`,i.mousemove),i.mousemove):(t.removeEventListener(`mousemove`,r.mousemove),r.mousemove=null),e&16?r.wheel||=(t.addEventListener(`wheel`,i.wheel,{passive:!1}),i.wheel):(t.removeEventListener(`wheel`,r.wheel),r.wheel=null),e&2?r.mouseup||=i.mouseup:(this._document.removeEventListener(`mouseup`,r.mouseup),r.mouseup=null),e&4?r.mousedrag||=i.mousedrag:(this._document.removeEventListener(`mousemove`,r.mousedrag),r.mousedrag=null)})),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this._register(W(t,`mousedown`,e=>{if(e.preventDefault(),this.focus(),!(!this.coreMouseService.areMouseEventsActive||this._selectionService.shouldForceSelection(e)))return n(e),r.mouseup&&this._document.addEventListener(`mouseup`,r.mouseup),r.mousedrag&&this._document.addEventListener(`mousemove`,r.mousedrag),this.cancel(e)})),this._register(W(t,`wheel`,t=>{if(!r.wheel){if(this._customWheelEventHandler&&this._customWheelEventHandler(t)===!1)return!1;if(!this.buffer.hasScrollback){if(t.deltaY===0)return!1;if(e.coreMouseService.consumeWheelEvent(t,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return this.cancel(t,!0);let n=G.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?`O`:`[`)+(t.deltaY<0?`A`:`B`);return this.coreService.triggerDataEvent(n,!0),this.cancel(t,!0)}}},{passive:!1}))}refresh(e,t){this._renderService?.refreshRows(e,t)}updateCursorStyle(e){this._selectionService?.shouldColumnSelect(e)?this.element.classList.add(`column-select`):this.element.classList.remove(`column-select`)}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(e,t){this._viewport?this._viewport.scrollLines(e):super.scrollLines(e,t),this.refresh(0,this.rows-1)}scrollPages(e){this.scrollLines(e*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(e){e&&this._viewport?this._viewport.scrollToLine(this.buffer.ybase,!0):this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(e){let t=e-this._bufferService.buffer.ydisp;t!==0&&this.scrollLines(t)}paste(e){$e(e,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(e){this._customKeyEventHandler=e}attachCustomWheelEventHandler(e){this._customWheelEventHandler=e}registerLinkProvider(e){return this._linkProviderService.registerLinkProvider(e)}registerCharacterJoiner(e){if(!this._characterJoinerService)throw Error(`Terminal must be opened first`);let t=this._characterJoinerService.register(e);return this.refresh(0,this.rows-1),t}deregisterCharacterJoiner(e){if(!this._characterJoinerService)throw Error(`Terminal must be opened first`);this._characterJoinerService.deregister(e)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(e){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+e)}registerDecoration(e){return this._decorationService.registerDecoration(e)}hasSelection(){return this._selectionService?this._selectionService.hasSelection:!1}select(e,t,n){this._selectionService.setSelection(e,t,n)}getSelection(){return this._selectionService?this._selectionService.selectionText:``}getSelectionPosition(){if(!(!this._selectionService||!this._selectionService.hasSelection))return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){this._selectionService?.clearSelection()}selectAll(){this._selectionService?.selectAll()}selectLines(e,t){this._selectionService?.selectLines(e,t)}_keyDown(e){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;let t=this.browser.isMac&&this.options.macOptionIsMeta&&e.altKey;if(!t&&!this._compositionHelper.keydown(e))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(!0),!1;!t&&(e.key===`Dead`||e.key===`AltGraph`)&&(this._unprocessedDeadKey=!0);let n=ic(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),n.type===3||n.type===2){let t=this.rows-1;return this.scrollLines(n.type===2?-t:t),this.cancel(e,!0)}if(n.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(n.cancel&&this.cancel(e,!0),!n.key)||e.key&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.key.length===1&&e.key.charCodeAt(0)>=65&&e.key.charCodeAt(0)<=90)return!0;if(this._unprocessedDeadKey)return this._unprocessedDeadKey=!1,!0;if((n.key===G.ETX||n.key===G.CR)&&(this.textarea.value=``),this._onKey.fire({key:n.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(n.key,!0),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return this.cancel(e,!0);this._keyDownHandled=!0}_isThirdLevelShift(e,t){let n=e.isMac&&!this.options.macOptionIsMeta&&t.altKey&&!t.ctrlKey&&!t.metaKey||e.isWindows&&t.altKey&&t.ctrlKey&&!t.metaKey||e.isWindows&&t.getModifierState(`AltGraph`);return t.type===`keypress`?n:n&&(!t.keyCode||t.keyCode>47)}_keyUp(e){this._keyDownSeen=!1,!(this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)&&(_c(e)||this.focus(),this.updateCursorStyle(e),this._keyPressHandled=!1)}_keyPress(e){let t;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)return!1;if(this.cancel(e),e.charCode)t=e.charCode;else if(e.which===null||e.which===void 0)t=e.keyCode;else if(e.which!==0&&e.charCode!==0)t=e.which;else return!1;return!t||(e.altKey||e.ctrlKey||e.metaKey)&&!this._isThirdLevelShift(this.browser,e)?!1:(t=String.fromCharCode(t),this._onKey.fire({key:t,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(t,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,!0)}_inputEvent(e){if(e.data&&e.inputType===`insertText`&&(!e.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;let t=e.data;return this.coreService.triggerDataEvent(t,!0),this.cancel(e),!0}return!1}resize(e,t){if(e===this.cols&&t===this.rows){this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure();return}super.resize(e,t)}_afterResize(e,t){this._charSizeService?.measure()}clear(){if(this.buffer.ybase!==0||this.buffer.y!==0){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let e=1;e<this.rows;e++)this.buffer.lines.push(this.buffer.getBlankLine(Io));this._onScroll.fire({position:this.buffer.ydisp}),this.refresh(0,this.rows-1)}}reset(){this.options.rows=this.rows,this.options.cols=this.cols;let e=this._customKeyEventHandler;this._setup(),super.reset(),this._selectionService?.reset(),this._decorationService.reset(),this._customKeyEventHandler=e,this.refresh(0,this.rows-1)}clearTextureAtlas(){this._renderService?.clearTextureAtlas()}_reportFocus(){this.element?.classList.contains(`focus`)?this.coreService.triggerDataEvent(G.ESC+`[I`):this.coreService.triggerDataEvent(G.ESC+`[O`)}_reportWindowsOptions(e){if(this._renderService)switch(e){case 0:let e=this._renderService.dimensions.css.canvas.width.toFixed(0),t=this._renderService.dimensions.css.canvas.height.toFixed(0);this.coreService.triggerDataEvent(`${G.ESC}[4;${t};${e}t`);break;case 1:let n=this._renderService.dimensions.css.cell.width.toFixed(0),r=this._renderService.dimensions.css.cell.height.toFixed(0);this.coreService.triggerDataEvent(`${G.ESC}[6;${r};${n}t`);break}}cancel(e,t){if(!(!this.options.cancelEvents&&!t))return e.preventDefault(),e.stopPropagation(),!1}};function _c(e){return e.keyCode===16||e.keyCode===17||e.keyCode===18}var vc=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){let n={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(n),t.dispose=()=>this._wrappedAddonDispose(n),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let n=0;n<this._addons.length;n++)if(this._addons[n]===e){t=n;break}if(t===-1)throw Error(`Could not dispose an addon that has not been loaded`);e.isDisposed=!0,e.dispose.apply(e.instance),this._addons.splice(t,1)}},yc=class{constructor(e){this._line=e}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(e,t){if(!(e<0||e>=this._line.length))return t?(this._line.loadCell(e,t),t):this._line.loadCell(e,new ut)}translateToString(e,t,n){return this._line.translateToString(e,t,n)}},bc=class{constructor(e,t){this._buffer=e,this.type=t}init(e){return this._buffer=e,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(e){let t=this._buffer.lines.get(e);if(t)return new yc(t)}getNullCell(){return new ut}},xc=class extends B{constructor(e){super(),this._core=e,this._onBufferChange=this._register(new U),this.onBufferChange=this._onBufferChange.event,this._normal=new bc(this._core.buffers.normal,`normal`),this._alternate=new bc(this._core.buffers.alt,`alternate`),this._core.buffers.onBufferActivate(()=>this._onBufferChange.fire(this.active))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw Error(`Active buffer is neither normal nor alternate`)}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}},Sc=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,e=>t(e.toArray()))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,(e,n)=>t(e,n.toArray()))}addDcsHandler(e,t){return this.registerDcsHandler(e,t)}registerEscHandler(e,t){return this._core.registerEscHandler(e,t)}addEscHandler(e,t){return this.registerEscHandler(e,t)}registerOscHandler(e,t){return this._core.registerOscHandler(e,t)}addOscHandler(e,t){return this.registerOscHandler(e,t)}},Cc=class{constructor(e){this._core=e}register(e){this._core.unicodeService.register(e)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(e){this._core.unicodeService.activeVersion=e}},wc=[`cols`,`rows`],Tc=0,Ec=class extends B{constructor(e){super(),this._core=this._register(new gc(e)),this._addonManager=this._register(new vc),this._publicOptions={...this._core.options};let t=e=>this._core.options[e],n=(e,t)=>{this._checkReadonlyOptions(e),this._core.options[e]=t};for(let e in this._core.options){let r={get:t.bind(this,e),set:n.bind(this,e)};Object.defineProperty(this._publicOptions,e,r)}}_checkReadonlyOptions(e){if(wc.includes(e))throw Error(`Option "${e}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw Error(`You must set the allowProposedApi option to true to use proposed API`)}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||=new Sc(this._core),this._parser}get unicode(){return this._checkProposedApi(),new Cc(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||=this._register(new xc(this._core)),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){let e=this._core.coreService.decPrivateModes,t=`none`;switch(this._core.coreMouseService.activeProtocol){case`X10`:t=`x10`;break;case`VT200`:t=`vt200`;break;case`DRAG`:t=`drag`;break;case`ANY`:t=`any`}return{applicationCursorKeysMode:e.applicationCursorKeys,applicationKeypadMode:e.applicationKeypad,bracketedPasteMode:e.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:e.origin,reverseWraparoundMode:e.reverseWraparound,sendFocusMode:e.sendFocus,synchronizedOutputMode:e.synchronizedOutput,wraparoundMode:e.wraparound}}get options(){return this._publicOptions}set options(e){for(let t in e)this._publicOptions[t]=e[t]}blur(){this._core.blur()}focus(){this._core.focus()}input(e,t=!0){this._core.input(e,t)}resize(e,t){this._verifyIntegers(e,t),this._core.resize(e,t)}open(e){this._core.open(e)}attachCustomKeyEventHandler(e){this._core.attachCustomKeyEventHandler(e)}attachCustomWheelEventHandler(e){this._core.attachCustomWheelEventHandler(e)}registerLinkProvider(e){return this._core.registerLinkProvider(e)}registerCharacterJoiner(e){return this._checkProposedApi(),this._core.registerCharacterJoiner(e)}deregisterCharacterJoiner(e){this._checkProposedApi(),this._core.deregisterCharacterJoiner(e)}registerMarker(e=0){return this._verifyIntegers(e),this._core.registerMarker(e)}registerDecoration(e){return this._checkProposedApi(),this._verifyPositiveIntegers(e.x??0,e.width??0,e.height??0),this._core.registerDecoration(e)}hasSelection(){return this._core.hasSelection()}select(e,t,n){this._verifyIntegers(e,t,n),this._core.select(e,t,n)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(e,t){this._verifyIntegers(e,t),this._core.selectLines(e,t)}dispose(){super.dispose()}scrollLines(e){this._verifyIntegers(e),this._core.scrollLines(e)}scrollPages(e){this._verifyIntegers(e),this._core.scrollPages(e)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(e){this._verifyIntegers(e),this._core.scrollToLine(e)}clear(){this._core.clear()}write(e,t){this._core.write(e,t)}writeln(e,t){this._core.write(e),this._core.write(`\r
20
20
  `,t)}paste(e){this._core.paste(e)}refresh(e,t){this._verifyIntegers(e,t),this._core.refresh(e,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(e){this._addonManager.loadAddon(this,e)}static get strings(){return{get promptLabel(){return Ke.get()},set promptLabel(e){Ke.set(e)},get tooMuchOutput(){return Je.get()},set tooMuchOutput(e){Je.set(e)}}}_verifyIntegers(...e){for(Tc of e)if(Tc===1/0||isNaN(Tc)||Tc%1!=0)throw Error(`This API only accepts integers`)}_verifyPositiveIntegers(...e){for(Tc of e)if(Tc&&(Tc===1/0||isNaN(Tc)||Tc%1!=0||Tc<0))throw Error(`This API only accepts positive integers`)}},Dc=2,Oc=1,kc=class{activate(e){this._terminal=e}dispose(){}fit(){let e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;let t=this._terminal._core;(this._terminal.rows!==e.rows||this._terminal.cols!==e.cols)&&(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;let e=this._terminal._core._renderService.dimensions;if(e.css.cell.width===0||e.css.cell.height===0)return;let t=this._terminal.options.scrollback===0?0:this._terminal.options.overviewRuler?.width||14,n=window.getComputedStyle(this._terminal.element.parentElement),r=parseInt(n.getPropertyValue(`height`)),i=Math.max(0,parseInt(n.getPropertyValue(`width`))),a=window.getComputedStyle(this._terminal.element),o={top:parseInt(a.getPropertyValue(`padding-top`)),bottom:parseInt(a.getPropertyValue(`padding-bottom`)),right:parseInt(a.getPropertyValue(`padding-right`)),left:parseInt(a.getPropertyValue(`padding-left`))},s=o.top+o.bottom,c=o.right+o.left,l=r-s,u=i-c-t;return{cols:Math.max(Dc,Math.floor(u/e.css.cell.width)),rows:Math.max(Oc,Math.floor(l/e.css.cell.height))}}},Ac=j(`<div class=overlay><div class=modal style=max-width:360px><div class=modal-head><b>🔒 sign in</b><span></span></div><form style=display:flex;flex-direction:column;gap:10px><input id=pw-input type=password placeholder=password autofocus><button type=submit style="background:var(--acc);border:none;border-radius:6px;color:#fff;padding:7px 12px;cursor:pointer">unlock</button><span class=muted style=font-size:11px>the token is stored locally and sent as Bearer to this server only`),jc=j(`<div class=themegrid>`),Mc=j(`<div class=themepop><label class=trow title="switch automatically when the OS switches appearance — pick which theme to use for each"><input type=checkbox>follow system`),Nc=j(`<br>`),Pc=j(`<span class="badge queued">⏳ <!> queued`),Fc=j(`<span class="badge cron">⏰ `),Ic=j(`<span class=sub>ℹ`),Lc=j(`<header class=chan-head><span class=hash>#</span><span class=title></span><span></span><span class=sub> · <!>/<!> · turns <!> · tools </span><span style=margin-left:auto;display:flex;gap:4px><button class=iconbtn title="terminal (t)">⌨</button><button class=iconbtn title="toggle details panel (d)">▤`),Rc=j(`<div class=divider-msg>── beginning of log ──`),zc=j(`<div class=divider-msg>loading older events…`),Bc=j(`<details class=reasoning><summary>💭 reasoning</summary><div class=mono>`),Vc=j(`<div class=content>`),Hc=j(`<div class="msg live"><div class=avatar style="background:#5865f233;border:1px solid #5865f266">🫖</div><div class=msg-body><div class=msg-head><span class=author style=color:var(--acc)>agent</span><span class=ts>streaming…`),Uc=j(`<div class=feed>`),Wc=j(`<button class=jump>↓ `),Gc=j(`<div class="termempty muted">no shell here — + opens one, tabs fill the focused pane`),Kc=j(`<div class=termsplit>`),qc=j(`<div class="termempty muted">no shell here — click a tab or + to add`),Jc=j(`<div class=termpane>`),Yc=j(`<div class=termdrawer><div class=termgrip title="drag to resize · double-click to reset"></div><div class=termbar><div class=termtabs><button class=iconbtn title="new shell in this workspace (max 2 per agent)">+</button></div><div style=display:flex;gap:4px;align-items:center><span class="muted mono"style=flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap></span><button class=iconbtn>◫</button><button class=iconbtn title="close terminal (t)">✕</button></div></div><div class=termbody><div class=termpane>`),Xc=j(`<div class=cmds>`),Zc=j(`<label class=forkchip title="inherit the conversation prefix byte-exactly — the sub-agent's provider prefix cache starts warm"><input type=checkbox>fork ctx`),Qc=j(`<div class=composer><form><textarea rows=1></textarea><button type=submit>send</button></form><div class=hint>`),$c=j(`<h3 title="identity + storage locations for this agent">🎛 session`),el=j(`<div class="card sesscard"><div class=sessrow><span class=k>agent</span><b></b><span></span></div><div class=sessrow><span class=k>workspace</span><span class="mono ellip"></span></div><div class=sessrow><span class=k>session</span><span class=mono>/`),tl=j(`<h3 title="switch provider/model live — applies from the agent's next turn; the list shows context window &amp; pricing from the provider">🧦 model`),nl=j(`<div class=meta style=color:var(--fg)>`),rl=j(`<div class=modelbox><select title="provider (OpenAI-compatible endpoint)"></select><div style=display:flex;gap:4px><input type=text list=model-list style=flex:1;min-width:0><datalist id=model-list></datalist><button title="apply to this session — takes effect from the agent's next turn">apply</button></div><div class=meta>current: `),il=j(`<h3>⏯ controls`),al=j(`<button class=danger title="interrupt: aborts the current LLM call; the running tool finishes first">■ stop`),ol=j(`<button title="stop every sub-agent this agent spawned (descendants included)">⏹ subs`),sl=j(`<div class=btnrow><button title="branch off the conversation here — try things without disturbing the main line">⑂ fork</button><button title="remove agent from teapot (session log stays on disk)">🗑 remove`),cl=j(`<div class=ctrlrow><label title="auto-continue fires after a round ONLY when all hold: ① this toggle is on ② a goal is set and its status is 'active' ③ the round ended cleanly (no error / not stopped). It stops when the goal is marked done, or if you press ■ stop. Sending any prompt also starts an idle agent regardless."><input type=checkbox>auto-continue</label><span class=muted>loops while goal is active · stops on done / stop`),ll=j(`<h3 title="what the agent is working toward — auto-continue keeps looping while the status is 'active'">🎯 goal<span>`),ul=j(`<div class=statrow style=margin-bottom:6px><span class=k>status`),dl=j(`<div class=card><div class=content>`),fl=j(`<div class=muted style=font-size:11px;margin-top:4px>stored with the session · the agent reads it via get_goal() · auto-continue loops while status is "working" and stops when marked done`),pl=j(`<form style=display:flex;flex-direction:column;gap:6px;margin-top:8px;margin-bottom:6px><textarea id=goal-input rows=3 placeholder="set new goal…"style="background:var(--bg-darkest);border:none;border-radius:6px;padding:6px 8px;color:var(--fg);font:inherit;width:100%;resize:vertical"></textarea><div style=display:flex;justify-content:flex-end;align-items:center;gap:10px><label class=muted title="queue a harness prompt telling the agent about the new goal at its next turn boundary"style=display:flex;align-items:center;gap:4px;font-size:11.5px;white-space:nowrap;cursor:pointer><input id=goal-notify type=checkbox checked> notify agent</label><button type=submit style="background:var(--acc);border:none;border-radius:6px;color:#fff;padding:4px 12px;cursor:pointer">✓ save goal`),ml=j(`<span class=badge>/<!> done`),hl=j(`<h3 title="todo.md — a shared checklist in the session dir. Write tasks like '- [ ] fix login'; the agent ticks them off via set_todo, you edit here. With notify on, it's told at its next turn boundary.">✅ tasks<span class=muted style=text-transform:none;letter-spacing:0>· shared checklist (you + agent)`),gl=j(`<div class=bartrack style=margin-bottom:6px><div>`),_l=j(`<textarea id=todo-input class=mono rows=5 placeholder="- task one
21
- - task two"title="shared with the agent — it may check items off via set_todo; your unsaved edits win until you save"style="width:100%;background:var(--bg-darkest);border:none;border-radius:6px;padding:6px 8px;color:var(--fg);font-family:ui-monospace,Menlo,monospace;font-size:12.5px;resize:vertical">`),vl=j(`<div style=display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-top:4px><label class=muted title="queue a harness prompt telling the agent the task list changed"style=display:flex;align-items:center;gap:4px;font-size:11.5px;white-space:nowrap;cursor:pointer><input id=todo-notify type=checkbox checked> notify agent</label><button style="background:var(--ok);border:none;border-radius:6px;color:#fff;padding:4px 12px;cursor:pointer">✓ save tasks`),yl=j(`<h3 title="latest report_progress snapshot. The harness asks for one after real activity (time AND output gates); errors show under ⚠ problems">📈 progress`),bl=j(`<h3 title="cumulative billed totals · the cached pill counts tokens served from the provider's prompt cache (far cheaper) · context bar turns orange ≥70% and red ≥85% of the model window">📊 runtime`),xl=j(`<span class="pill ok">⚡ <!>% cached`),Sl=j(`<div class="card runcard"><div class=statgrid><div class=stat title="LLM turns taken this session"><span>turns</span><b></b></div><div class=stat title="tool calls executed"><span>tools</span><b></b></div><div class=stat title="times old turns were summarized to free context"><span>compacted</span><b></b></div></div><div class=statrow><span class=k>tokens</span><b> in / <!> out`),Cl=j(`<h3>🌿 branches <span class=muted style=text-transform:none;letter-spacing:0>· click to filter the feed`),wl=j(`<h3>⏰ schedule <span class=muted style=text-transform:none;letter-spacing:0>· cron tasks, all agents · edit in settings`),Tl=j(`<div><nav class=sidebar><h1>🫖 teapot<span></span><span style=float:right;display:flex;gap:4px><button class=iconbtn title="new agent">+</button><button class=iconbtn title=themes>◐</button><button class=iconbtn title=settings>⚙</button></span></h1><div class=agent-list></div><div class=metrics></div></nav><section class=channel></section><aside>`),El=j(`<label class=trow>system light →<select class=w100>`),Dl=j(`<label class=trow>system dark →<select class=w100>`),Ol=j(`<option>`),kl=j(`<button><span class=swdots>`),Al=j(`<i>`),jl=j(`<span class=caret>`),Ml=j(`<span class=subtag>🧩`),Nl=j(`<span class=mini-cron>⏰`),Pl=j(`<span title="goal done">✓`),Fl=j(`<div><span></span><span>`),Il=j(`<span class=caret-spacer>`),Ll=j(`<div class=muted style=display:grid;place-items:center;height:100%>select an agent`),Rl=j(`<div class=muted style=display:grid;place-items:center;height:100%>no events yet — say something or press ▶ start`),zl=j(`<div class="content muted">thinking…`),Bl=j(`<span>⌨ <button class=tabx title="close this shell">✕`),Vl=j(`<div><b class=mono></b><span class=muted>`),Hl=j(`<div class=cmdrow><b>@</b><span class=muted>`),Ul=j(`<button class=runbtn title="run toward the goal (starts the loop)">▶ start`),Wl=j(`<button>`),Gl=j(`<div class="card muted">no goal yet — write one below and press ✓ save. Then ▶ start (or any message) sets it in motion.`),Kl=j(`<div class=muted>none yet — the harness asks for a report after real activity, and the agent can report_progress anytime`),ql=j(`<div class=progrow><b>recent</b><span>`),Jl=j(`<div class="progrow warn"><b>⚠ problems</b><span>`),Yl=j(`<div class=progrow><b>next</b><span>`),Xl=j(`<div class=progrow><b>goal</b><span>`),Zl=j(`<div class="card prog"><div class=progrow><b>doing</b><span></span></div><div class="meta muted">`),Ql=j(`<div class=statrow><span class=k>context</span><span class=muted>no window known for this model yet`),$l=j(`<span>% of `),eu=j(`<div class=bartrack><div>`),tu=j(`<div class=ctxblock title="estimated live context vs the model's real window. Past the window, old turns are summarized into notes (compaction); the compact line below shows where that starts."><div class=statrow><span class=k>context</span><b>~<!> tok</b></div><div class=muted style=font-size:11px;margin-top:4px>compaction starts around ~<!> tok — older turns get summarized, recent ones stay intact`),nu=j(`<div><span></span><span> events`),ru=j(`<div class=muted>no scheduled tasks — add them in ⚙ settings ("scheduled tasks")`),iu=j(`<span title="runs on a forked branch so chatter stays off the main line">⑂`),au=j(`<div><div class=sched-top><b></b><span class=muted>@</span></div><div class="sched-meta mono"> → next </div><div class="sched-prompt muted">`),ou=j(`<div><div style=font-size:12.5px;margin-bottom:4px> event(s) came after this prompt — what should happen to them on the new branch?</div><label style=display:flex;gap:6px;align-items:center;font-size:13px;color:var(--fg)><input type=radio name=tail>summarize them into a note the agent can still read</label><label style=display:flex;gap:6px;align-items:center;font-size:13px;color:var(--fg)><input type=radio name=tail>discard them entirely (clean timeline)`),su=j(`<form style=display:flex;flex-direction:column;gap:10px><textarea id=edit-text class="mono w100"rows=6></textarea><div style=display:flex;justify-content:flex-end;gap:8px><button type=button>cancel</button><button type=submit style="background:var(--acc);border:none;border-radius:6px;color:#fff;padding:6px 12px;cursor:pointer">⑂ fork & resend`),cu=j(`<div class=mono>`),lu=j(`<pre class="mono toolbody">`),uu=j(`<div class=meta>ms`),du=j(`<div class=meta>waiting for output…`),fu=j(`<div class=meta>`),pu=j(`<div class=meta>writing…`),mu=j(`<pre class="mono toolbody del">`),hu=j(`<pre class="mono toolbody add">`),gu=j(`<div class=meta> · <!>ms`),_u=j(`<div class=meta>applying…`),vu=j(`<pre class="mono toolbody patch">`),yu=j(`<div>`),bu=j(`<div class=meta>validating…`),xu=j(`<a target=_blank rel="noopener noreferrer"referrerpolicy=no-referrer>open ↗`),Su=j(`<span class=muted>`),Cu=j(`<div class=meta>loading…`),wu=j(`<div class=meta>bundled: `),Tu=j(`<div class=meta>saving…`),Eu=j(`<span class=actor>@`),Du=j(`<details><summary><b>⚙ </b><span class=meta>`),Ou=j(`<div class=divider-msg>⑂ forked from <!> → `),ku=j(`<div class=divider-msg>🎯 goal <!>: `),Au=j(`<div class=divider-msg>✅ tasks updated (<!>)`),ju=j(`<div> → `),Mu=j(`<div class=avatar>`),Nu=j(`<button class=editbtn title="edit this prompt — forks the conversation here (later events are dropped or summarized)">✎ edit`),Pu=j(`<div class=msg-head><span class=author></span><span class=ts></span><span class=ts>`),Fu=j(`<div><div class=msg-body>`),Iu=j(`<span style=width:38px>`),Lu=j(`<div class=interrupted>⚠ interrupted — partial output kept`),Ru=j(`<div class=msgfoot><span>copy summary`),zu=j(`<details><summary><span class=meta></span></summary><div class=mono></div><div class=meta>ms`),Bu=j(`<div class="content muted">Rejected: `),Vu=j(`<details class="embed decision"><summary><b>📌 </b><span class=meta>decision logged</span></summary><div class=content><b>Why:`),Hu=j(`<div class=qopts>`),Uu=j(`<div class="embed question"><div>❓ </div><div class=meta>the agent is waiting for your reply — answer below or tap an option`),Wu=j(`<button class=qopt>`),Gu=j(`<div class=meta>⚠ `),Ku=j(`<div class=meta>→ `),qu=j(`<div class=embed style=border-color:var(--ok)><div>📈 `),Ju=j(`<div class="embed fail"><div class=mono>⚠ `),Yu=j(`<div class="content muted">`),Xu=j(`<button class=copybtn title="copy to clipboard">`),Zu=j(`<div class=overlay><div class=modal><div class=modal-head><b></b><button class=iconbtn>✕`),Qu=j(`<span style=color:var(--err);font-size:13px>`),$u=j(`<form style=display:flex;flex-direction:column;gap:10px><label>workspace directory<div style=display:flex;gap:6px><input type=text class="w100 mono"><button type=button>go</button><button type=button>↑</button></div></label><div class=dirlist></div><div style=display:flex;gap:10px><label style=flex:1>agent name <input type=text placeholder="(directory name)"></label><label>provider<select></select></label><label style=flex:1>model <input type=text placeholder="(provider default)"></label></div><button type=submit style=align-self:flex-end>create & start`),ed=j(`<div class=direntry>📁 `),td=j(`<span class=fsize>`),nd=j(`<div><span class=ficon></span><span class=fname>`),rd=j(`<h3 title="the agent's workspace — lazy-loaded, dotfiles hidden; click a folder to expand, a file to preview">🗂 files <span class=muted style=text-transform:none;letter-spacing:0>· `),id=j(`<div class=filebox>`),ad=j(`<div class=muted style=padding:6px>`),od=j(`<pre class=mono style=max-height:62vh;overflow:auto;white-space:pre-wrap;margin:0>`),sd=j(`<div class=muted style=font-size:11.5px;margin-top:-6px>`),cd=j(`<span style=color:var(--fg)>`),ld=j(`<div class=muted style=font-size:11.5px;margin-top:-8px> models found at this endpoint`),ud=j(`<div class=overlay style=background:var(--bg-darkest)><div class=modal style=max-width:560px><div class=modal-head><b>🫖 welcome to teapot</b></div><p class=muted style="margin:0 0 10px;font-size:13px">first run — pick an OpenAI-compatible provider and you're done. everything below can be changed later in ⚙ settings.</p><form style=display:flex;flex-direction:column;gap:12px><div style=display:flex;gap:6px;flex-wrap:wrap></div><label>base url<input type=text class="w100 mono"list=wiz-preset-urls><datalist id=wiz-preset-urls></datalist></label><label>api key <input type=password class=w100 placeholder="(local providers may not need one)"></label><label>default model<input type=text class="w100 mono"list=wiz-model-list><datalist id=wiz-model-list></datalist></label><fieldset><legend>first agent</legend><label>workspace directory<input type=text class="w100 mono"></label><label title="asks for this password when opening the UI or API from another machine — plain-HTTP LAN traffic is NOT encrypted"style=margin-top:4px>protect the API with a password? <input type=password class=w100 placeholder="(optional — LAN traffic is still plain HTTP)"></label></fieldset><button type=submit style="background:var(--acc);border:none;border-radius:8px;color:#fff;padding:9px 14px;font-weight:600;cursor:pointer">`),dd=j(`<button type=button>`),fd=j(`<div class=muted style=font-size:11.5px;margin-top:-8px>models appear here automatically once the endpoint answers GET /models`),pd=j(`<label><input type=number min=0>`),md=j(`<form style=display:flex;flex-direction:column;gap:14px><fieldset><legend>providers</legend><button type=button>+ add custom</button><div style=display:flex;gap:6px;flex-wrap:wrap;margin-top:6px><span class=muted style=font-size:11.5px>quick-add:</span></div><div><label title="agents without an explicit provider use this one"style=display:flex;align-items:center;gap:6px;margin-top:6px>default provider<select><option value>(none — first provider wins)</option></select></label></div></fieldset><fieldset><legend>agent runtime</legend><div class=cfggrid></div></fieldset><fieldset><legend>scheduled tasks</legend><button type=button>+ add task</button></fieldset><fieldset><legend>agents (read-only — edit config file or use +)</legend></fieldset><button type=submit style="align-self:flex-end;background:var(--acc);border:none;border-radius:6px;color:#fff;padding:6px 14px;cursor:pointer">save settings`),hd=j(`<div class=cfgrow><input class=cfgname placeholder=name><input placeholder=https://…/v1><input placeholder="api key"type=password><input placeholder="default model"><button type=button class=danger title="remove provider">✕`),gd=j(`<button type=button>+ `),_d=j(`<div class=cfgcol><div class=cfgrow><input placeholder=id><input placeholder="agent id"><input placeholder="every 30m / cron"><label style=display:flex;gap:3px;align-items:center;white-space:nowrap;color:var(--dim);font-size:11px><input type=checkbox>fork</label><button type=button class=danger>✕</button></div><textarea rows=2 placeholder="prompt to send">`),vd=j(`<span class=muted>🧩 sub of @`),yd=j(`<div class=cfgrow><b></b><span class=muted>`),bd={prompt:{name:`you`,icon:`🟧`,color:`#faa81a`},user:{name:`you`,icon:`🟧`,color:`#faa81a`},message:{name:`agent`,icon:`🫖`,color:`#5865f2`},progress:{name:`progress`,icon:`📈`,color:`#3ba55d`},question:{name:`agent`,icon:`❓`,color:`#5865f2`}},xd={name:`harness`,icon:`📣`,color:`#3ba55d`},[Sd,Cd]=v(``),wd,Td=e=>{Cd(e),clearTimeout(wd),wd=setTimeout(()=>Cd(``),3200)},Ed=[{key:`dark`,label:`Dark`,mode:`dark`,sw:[`#1a1c22`,`#2b2e39`,`#5865f2`]},{key:`midnight`,label:`Midnight`,mode:`dark`,sw:[`#0d0f18`,`#252a42`,`#8b7cf7`]},{key:`tea`,label:`Milk Tea`,mode:`dark`,sw:[`#241c16`,`#493b2d`,`#d98e32`]},{key:`coffee`,label:`Coffee`,mode:`dark`,sw:[`#191410`,`#403527`,`#c68a4b`]},{key:`matcha`,label:`Matcha`,mode:`dark`,sw:[`#1b2217`,`#3c4a33`,`#8db64e`]},{key:`matrix`,label:`Matrix`,mode:`dark`,sw:[`#060a06`,`#18301d`,`#2fd558`]},{key:`sunset`,label:`Sunset`,mode:`dark`,sw:[`#1c1422`,`#452f52`,`#f2784b`]},{key:`light`,label:`Light`,mode:`light`,sw:[`#eceef4`,`#ffffff`,`#4757d8`]},{key:`strawberry`,label:`Strawberry`,mode:`light`,sw:[`#fbe4ea`,`#fffafb`,`#e05575`]},{key:`ramune`,label:`Ramune`,mode:`light`,sw:[`#ddeff7`,`#fbfeff`,`#1d86ae`]}];function Dd(){let e=``,t=``;try{let n=getComputedStyle(document.documentElement);e=n.getPropertyValue(`--term-bg`).trim(),t=n.getPropertyValue(`--term-fg`).trim()}catch{}return{background:e||`#0d0e12`,foreground:t||`#dcdee4`}}var Od=e=>{if(e.data?.actor)return{name:`@${String(e.data.actor)}`,icon:`🧩`,color:`#3ba0c9`};if(e.type===`tool_call`||e.type===`tool_result`)return{name:String(e.data?.name??`tool`),icon:`⚙`,color:`#3ba0c9`};if(e.type===`prompt`){let t=String(e.data?.source??`user`);return t===`user`?bd.prompt:t.startsWith(`scheduler:`)?{name:t.slice(10),icon:`📣`,color:`#3ba55d`}:xd}return bd[e.type]??{name:e.type,icon:`•`,color:`#9298a5`}},kd=new Set([`user`,`message`,`prompt`,`tool_call`,`tool_result`,`progress`,`state`,`error`,`fork`,`goal`,`todo`,`question`,`decision`]),Ad=e=>{let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`};async function $(e,t){let n=localStorage.getItem(`teapot.token`),r=new Headers(t?.headers);n&&!r.has(`authorization`)&&r.set(`authorization`,`Bearer ${n}`);let i=await fetch(e,{...t,headers:r});if(!i.ok){i.status===401&&window.dispatchEvent(new CustomEvent(`teapot:unauthorized`));let t=``;try{t=(await i.json())?.error??``}catch{}throw Error(t||`${e}: HTTP ${i.status}`)}return i.json()}var jd=location.hash.match(/[#&]token=([^&]+)/);jd&&(localStorage.setItem(`teapot.token`,decodeURIComponent(jd[1])),history.replaceState(null,``,location.pathname+location.search));var Md=()=>{let e=localStorage.getItem(`teapot.token`);return e?`?token=${encodeURIComponent(e)}`:``};function Nd(){let[e,t]=v([]),[n,r]=v(null),[i,a]=v([]),[o,s]=v(0),[c,l]=v([]),[u,d]=v(null),[f,p]=v(``),[m,h]=v({providers:{}}),[g,_]=v(!1),[S,te]=v(!1),[ne,w]=v(localStorage.getItem(`teapot.panel`)===null?window.innerWidth>1100:localStorage.getItem(`teapot.panel`)===`1`),re=()=>{let e=!ne();w(e),localStorage.setItem(`teapot.panel`,e?`1`:`0`)},[T,ie]=v(!1),[ae,oe]=v(localStorage.getItem(`teapot.theme`)??`dark`),[E,se]=v(localStorage.getItem(`teapot.theme.auto`)===`1`),[ce,le]=v(localStorage.getItem(`teapot.theme.light`)??`light`),[ue,de]=v(localStorage.getItem(`teapot.theme.dark`)??`dark`),fe=typeof window.matchMedia==`function`?window.matchMedia(`(prefers-color-scheme: light)`):null,[pe,me]=v(fe?.matches??!1);ee(()=>{let e=e=>me(e.matches);fe?.addEventListener(`change`,e),C(()=>fe?.removeEventListener(`change`,e))}),b(()=>{document.documentElement.dataset.theme=E()?pe()?ce():ue():ae()});let[he,ge]=v(``),[_e,ve]=v(``),[ye,be]=v([]),xe=()=>Object.keys(m().providers??{});async function Se(e){if(e)try{let t=await $(`/api/models?provider=${encodeURIComponent(e)}`);be(t.models??[])}catch{be([])}}let Ce=()=>{let e=_e().trim()||F()?.model||``;if(!e)return``;let t=ye().find(t=>t.id===e);if(!t)return``;let n=[];t.contextLength&&n.push(`ctx ${zd(t.contextLength)} tok`);let r=e=>e===void 0?``:`$${e*1e6>=10?Math.round(e*1e6):+(e*1e6).toFixed(1)}/M`;if(t.pricing){let e=r(t.pricing.prompt),i=r(t.pricing.completion);e&&i?n.push(`${e} in · ${i} out`):(e||i)&&n.push(r(t.pricing.prompt??t.pricing.completion))}return n.join(` · `)};b(()=>{let e=F();e&&(ge(e.provider||m().defaultProvider||xe()[0]||``),ve(``),Se(he()))});let[we,Te]=v(!0),[j,Ee]=v(0),[je,Me]=v(null),[Ne,Pe]=v(``),Fe;b(()=>{if(!je()){clearTimeout(Fe),Fe=void 0,Pe(``);return}Fe||=setTimeout(()=>{Fe=void 0,Pe(je()?.text??``)},60)}),C(()=>clearTimeout(Fe)),b(()=>{Ne()&&we()&&requestAnimationFrame(()=>{yt()&&bt(!0)})});let F=x(()=>e().find(e=>e.id===n())),[Ie,Re]=v(null),[ze,Be]=v([]),Ve=x(()=>{let e=new Map,t=new Set,n=new Map;for(let r of i())if(kd.has(r.type)){if(r.type===`tool_call`){let e=n.get(r.data.callId)??[];e.push(r),n.set(r.data.callId,e)}else if(r.type===`tool_result`){let i=n.get(r.data.callId)?.shift();i&&(e.set(i.id,r),t.add(r.id))}}return{resFor:e,consumed:t}}),He=x(()=>{let{consumed:e}=Ve(),t=i().filter(t=>kd.has(t.type)?t.type===`tool_result`?!e.has(t.id):t.type!==`message`||String(t.data?.content??``).trim()!==``||String(t.data?.reasoning??``).trim()!==``||!!t.data?.final:!1),n=[];for(let e of t)if(e.type===`sub`){let t=e.data,r=String(t?.type??`message`);if(r===`state`)continue;n.push({...e,type:r,data:{...t?.data,actor:t?.sub}})}else n.push(e);let r=ze().filter(e=>!n.some(t=>t.type===`prompt`&&t.data?.source===`user`&&t.data?.text===e.text&&new Date(t.ts).getTime()>=e.at-1e3)).map(e=>({id:e.id,seq:0,ts:new Date(e.at).toISOString(),session:F()?.session??``,branch:F()?.branch??`br0`,parent:null,type:`prompt`,data:{source:`user`,text:e.text,pending:!0}}));return[...n,...r]}),Ue=()=>$(`/api/config`).then(h).catch(()=>{}),[We,I]=v(!1);ee(()=>{let e=()=>I(!0);window.addEventListener(`teapot:unauthorized`,e),C(()=>window.removeEventListener(`teapot:unauthorized`,e))});let[L,Ge]=v(``),[Ke,qe]=v(!1),Je=``;b(()=>{let t=n(),r=e().find(e=>e.id===t)?.todo??``;t&&t!==Je?(Je=t,qe(!1),Ge(r)):t&&!Ke()&&Ge(r)});let Ye=async()=>{let e=document.getElementById(`todo-notify`)?.checked??!0;if(n())try{await $(`/api/agents/${n()}/todo`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:L(),notify:e})}),qe(!1),Td(`tasks saved${e&&L().trim()?` & notification queued`:``}`),Ze()}catch(e){Td(`save failed: ${e.message}`)}},Xe=x(()=>{let e=0,t=0;for(let n of L().split(`
22
- `)){let r=n.match(/^\s*[-*+] \[([ xX])\]/);r&&(e++,r[1].toLowerCase()===`x`&&t++)}return{total:e,done:t}}),Ze=()=>$(`/api/agents`).then(e=>t(e.agents)).catch(()=>{}),Qe=()=>$(`/api/metrics`).then(d).catch(()=>{}),[$e,et]=v([]),tt=()=>$(`/api/tasks`).then(e=>et(e.tasks)).catch(()=>{}),nt=e=>$e().filter(t=>t.agent===e),[rt,it]=v((()=>{try{return new Set(JSON.parse(localStorage.getItem(`teapot.collapsed`)??`[]`))}catch{return new Set}})()),at=e=>{let t=new Set(rt());t.has(e)?t.delete(e):t.add(e),it(t),localStorage.setItem(`teapot.collapsed`,JSON.stringify([...t]))},ot=x(()=>{let t=e(),n=new Map,r=[];for(let e of t)e.parent&&t.some(t=>t.id===e.parent)?(n.has(e.parent)||n.set(e.parent,[]),n.get(e.parent).push(e)):r.push(e);let i=[],a=(e,t)=>{for(let r of e){i.push({a:r,depth:t});let e=n.get(r.id);e?.length&&!rt().has(r.id)&&a(e,t+1)}};return a(r,0),i}),[st,ct]=v(null),lt=new Map;function ut(e){let t=Array.from({length:e.length});for(let n=0;n<e.length;n++){let r=e[n],i=lt.get(r.id);if(t[n]=i??r,!i&&(lt.set(r.id,r),lt.size>3e3)){let e=lt.keys().next().value;e!==void 0&&lt.delete(e)}}return t}let[dt,ft]=v(!1),[pt,mt]=v(!1);function ht(e){a(t=>{let n=new Map;for(let e of t)n.set(e.id,e);for(let t of ut(e))n.has(t.id)||n.set(t.id,t);return[...n.values()].sort((e,t)=>e.seq-t.seq)})}async function gt(){let e=n(),t=i()[0];if(!(!e||!t||dt()||pt())){ft(!0);try{let n=vt(),r=n?.scrollHeight??0,i=n?.scrollTop??0,a=st(),o=(await $(`/api/agents/${e}/events?limit=300&before=${encodeURIComponent(t.id)}${a?`&branch=${encodeURIComponent(a)}`:``}`)).events??[];if(o.length===0){mt(!0);return}ht(o),requestAnimationFrame(()=>{let e=vt();e&&(e.scrollTop=i+(e.scrollHeight-r))})}catch{}finally{ft(!1)}}}async function _t(e){try{let t=st(),[n,r,i]=await Promise.all([$(`/api/agents/${e}/events?limit=300${t?`&branch=${encodeURIComponent(t)}`:``}`),$(`/api/agents/${e}/branches`),$(`/api/agents/${e}/skills`).catch(()=>({skills:[]}))]);a(e=>{let t=new Map;for(let n of e)t.set(n.id,n);for(let e of ut(n.events))t.set(e.id,e);return[...t.values()].sort((e,t)=>e.seq-t.seq)}),s(n.total??n.events.length),l(r.branches),un(i.skills??[])}catch{}}function vt(){return document.querySelector(`.feed`)}function yt(){let e=vt();return!e||e.scrollHeight-e.scrollTop-e.clientHeight<80}function bt(e=!1){let t=vt();t&&(e||we())&&(t.scrollTop=t.scrollHeight,Ee(0))}async function xt(e,t=!0){r(e),Me(null),ct(null),mt(!1),ft(!1),Be([]),localStorage.setItem(`teapot.session`,e),Ot(e,t),$(`/api/agents/${e}/load`,{method:`POST`}).then(Ze).catch(()=>{}),await _t(e),requestAnimationFrame(()=>bt(!0))}let[St,Ct]=v(!1),wt=null,Tt=null;C(()=>wt?.close());function Et(){let e=location.protocol===`https:`?`wss://`:`ws://`;wt=new WebSocket(`${e}${location.host}/api/ws${Md()}`),wt.onopen=()=>Ct(!0),wt.onclose=()=>{Ct(!1),setTimeout(Et,1500)},wt.onerror=()=>wt?.close();let t=new Set([`state`,`usage`,`session_start`]),r=null;wt.onmessage=e=>{let a=JSON.parse(e.data);if(a.kind!==`ping`&&a.kind!==`pong`){if(a.kind===`llm-delta`){r={id:a.agentId,at:Date.now()},a.agentId===n()&&Me({text:a.text??``,reasoning:a.reasoning??``});return}a.kind===`event`&&t.has(a.event?.type)||(Tt||=setTimeout(async()=>{if(Tt=null,await Ze(),await Qe(),n()){let e=i().at(-1)?.id,t=o(),a=Date.now();await _t(n()),i().at(-1)?.id!==e&&(r?.id===n()&&r.at>=a||Me(null),yt()?bt(!0):Ee(j()+Math.max(0,o()-t))),Be(e=>e.filter(e=>!i().some(t=>t.type===`prompt`&&t.data?.text===e.text&&new Date(t.ts).getTime()>=e.at-1e3)))}},400))}}}let Dt=()=>decodeURIComponent(location.pathname.split(`/`)[2]??``);function Ot(e,t=!0){let n=`/session/${encodeURIComponent(e)}`;t?history.pushState(null,``,n):history.replaceState(null,``,n)}window.addEventListener(`popstate`,()=>{let t=Dt();t&&e().some(e=>e.id===t)&&t!==n()&&xt(t,!1)}),b(()=>{let e=F();document.title=e?`${e.status===`running`?`▶ `:e.status===`error`?`⚠ `:``}${e.id} · teapot`:`teapot`}),window.addEventListener(`keydown`,e=>{let t=e.target;if(t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable)){e.key===`Escape`&&t.blur();return}if(e.key===`Escape`){if(g()){_(!1);return}if(S()){te(!1);return}if(Ie()){Re(null);return}if(T()){ie(!1);return}let e=F();if(e?.status===`running`){$(`/api/agents/${e.id}/stop`,{method:`POST`}).then(Ze);return}ne()&&window.innerWidth<=1100&&w(!1);return}if(!(g()||S())){if(e.key===`/`)e.preventDefault(),document.querySelector(`.composer textarea`)?.focus();else if(e.key===`d`)re();else if(e.key===`t`)jt();else if(e.key===`ArrowDown`||e.key===`ArrowUp`){let t=ot().map(e=>e.a);if(t.length===0)return;e.preventDefault();let r=t.findIndex(e=>e.id===n()),i=e.key===`ArrowDown`?Math.min(r+1,t.length-1):Math.max(r-1,0);i!==r&&xt(t[i].id)}}});let[kt,At]=v(localStorage.getItem(`teapot.term`)===`1`),jt=()=>{let e=!kt();At(e),localStorage.setItem(`teapot.term`,e?`1`:`0`)},[R,Mt]=v([]),[Nt,Pt]=v(0),[Ft,It]=v(-1),[Lt,Rt]=v(!1),[zt,Bt]=v(0),[Vt,Ht]=v(Number(localStorage.getItem(`teapot.termH`))||Math.max(220,Math.round(window.innerHeight*.35))),Ut=new Map,Wt=[null,null],Gt=()=>R()[zt()===0?Nt():Ft()]??null;function Kt(e){if(!R()[e])return;let t=zt()===0?Nt:Ft;(zt()===0?Ft:Nt)()===e&&(zt()===0?It(t()):Pt(t())),t()===e||(zt()===0?Pt(e):It(e))}let qt=()=>Jt();function Jt(e){let t=e??n();if(!t)return;let r=R().filter(e=>e.agentId===t).length;if(r>=2){Td(`max 2 shells per agent (${t})`);return}R().length+1;let i=r===0?{key:`${t}`,agentId:t,title:t}:{key:`${t}#${r+1}`,agentId:t,title:`${t}·${r+1}`};Mt(e=>[...e,i]),zt()===0?Pt(R().length):It(R().length)}function Yt(e){let t=R()[e];if(!t)return;let n=Ut.get(t.key);if(n){n.ro?.disconnect();try{n.ws.close()}catch{}n.term.dispose(),Ut.delete(t.key)}let r=R().filter((t,n)=>n!==e);Mt(r);let i=t=>t===e?-1:t>e?t-1:t;Pt(e=>Math.min(i(e),r.length-1)),It(e=>e===-1?-1:Math.min(i(e),r.length-1))}function Xt(){for(let[,e]of Ut){e.ro?.disconnect();try{e.ws.close()}catch{}e.term.dispose()}Ut.clear()}function Zt(e,t){let n=Ut.get(e.key);if(n)n.el.parentElement!==t&&(t.appendChild(n.el),setTimeout(()=>{try{n.fit()}catch{}},30));else{let r=document.createElement(`div`);r.className=`termsession`,t.appendChild(r);let i=new Ec({cursorBlink:!0,fontSize:12.5,fontFamily:`ui-monospace, Menlo, Consolas, monospace`,theme:Dd()}),a=new kc;i.loadAddon(a),i.open(r);let o=location.protocol===`https:`?`wss://`:`ws://`,s=new WebSocket(`${o}${location.host}/api/agents/${e.agentId}/term${Md()}`);s.onmessage=e=>{let t=JSON.parse(e.data);t.kind===`data`?i.write(t.data):t.kind===`exit`&&i.write(`\r\n\x1b[2m[terminal exited ${t.code??``}]\x1b[0m\r\n`)},i.onData(e=>{s.readyState===WebSocket.OPEN&&s.send(JSON.stringify({kind:`input`,data:e}))});let c={cols:0,rows:0},l=[],u=()=>{try{a.fit()}catch{}(i.cols!==c.cols||i.rows!==c.rows)&&s.readyState===WebSocket.OPEN&&(c={cols:i.cols,rows:i.rows},s.send(JSON.stringify({kind:`resize`,cols:i.cols,rows:i.rows})))},d=new ResizeObserver(()=>{l[0]&&clearTimeout(l[0]),l[0]=setTimeout(u,250)});d.observe(r),setTimeout(u,60),n={el:r,term:i,fit:a,ws:s,ro:d},Ut.set(e.key,n)}return n}function Qt(e){let t=Wt[e];if(!t)return;let n=R()[e===0?Nt():Ft()];if(!n){t.replaceChildren();return}let r=Zt(n,t);zt()===(e===0?0:1)&&requestAnimationFrame(()=>{try{r.fit(),r.term.focus()}catch{}})}b(()=>{R(),Lt(),Nt(),Ft(),Vt(),requestAnimationFrame(()=>{Qt(0),Lt()&&Qt(1)})}),b(()=>{if(!kt())return;let e=n();if(e){if(!R().some(t=>t.agentId===e)&&R().length===0)Jt(e);else if(!R().some(t=>t.agentId===e)){let t=R().findIndex(t=>t.agentId===e);t>=0&&Kt(t)}}});let $t=e=>{e.preventDefault();let t=e.clientY,n=Vt(),r=e=>{let r=Math.min(Math.max(n-(e.clientY-t),140),Math.round(window.innerHeight*.85));Ht(r)},i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),localStorage.setItem(`teapot.termH`,String(Vt())),requestAnimationFrame(()=>{Qt(0),Lt()&&Qt(1)})};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)},en=()=>{let e=!Lt();if(Rt(e),e&&Ft()===-1){let e=R().findIndex((e,t)=>t!==Nt());It(e>=0?e:-1)}};C(Xt);let tn=e=>t=>{Wt[e]=t};ee(()=>{Ue(),Ze().then(()=>{let t=Dt()||localStorage.getItem(`teapot.session`)||``,n=e().find(e=>e.id===t)??e()[0];n&&xt(n.id,!1)}),Qe(),tt(),B(),Et();let t=setInterval(()=>{Qe(),tt()},3e4);C(()=>clearInterval(t))});let z=[{cmd:`/start`,desc:`start working toward the goal`},{cmd:`/stop`,desc:`interrupt the running agent`},{cmd:`/fork`,desc:`branch the conversation here`},{cmd:`/goal`,desc:`/goal <text> — set goal & notify the agent`},{cmd:`/compact`,desc:`force a context compaction now`},{cmd:`/skill`,desc:`/skill <name> — force-load a skill and follow it`}],[nn,rn]=v([]),B=()=>$(`/api/personas`).then(e=>rn(e.personas)).catch(()=>{}),[an,on]=v(!1),sn=()=>{let e=f().match(/^@([A-Za-z0-9._-]*)$/);return e?e[1].toLowerCase():null},V=()=>{let t=sn();return t===null?[]:[...nn().map(e=>({key:e.key,label:`${e.label} — spawns a sub-agent`,kind:`persona`})),...e().filter(e=>e.id!==n()).map(e=>({key:e.id,label:`${e.status} — send directly`,kind:`agent`}))].filter(e=>e.key.toLowerCase().startsWith(t))},cn=new Set([`start`,`stop`,`fork`,`compact`]),[ln,un]=v([]),[H,dn]=v(-1),fn=()=>{let e=f();if(!e.startsWith(`/`)||e.includes(`
23
- `))return[];let t=e.match(/^\/([a-z]*)(?:\s+(.*))?$/i);if(!t)return[];let n=t[1].toLowerCase(),r=(t[3]??``).trim();if(!r&&n!==`skill`){let e=z.filter(e=>e.cmd.slice(1).startsWith(n));return e.find(e=>e.cmd.slice(1)===n)&&cn.has(n)?[]:e.map(e=>({insert:e.cmd+` `,title:e.desc}))}if(n===`skill`){let e=ln().filter(e=>e.name.toLowerCase().startsWith(r.toLowerCase()));return e.length===1&&e[0].name.toLowerCase()===r.toLowerCase()?[]:e.map(e=>({insert:`/skill ${e.name} `,title:e.description||`(bundled skill)`}))}return[]},pn,mn=()=>{pn&&(pn.style.height=`auto`,pn.style.height=`${Math.min(pn.scrollHeight,160)}px`)};b(()=>{f(),mn()});let hn=async(e,t)=>{let r=t??n();if(r)try{await $(`/api/agents/${r}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:e,start:!0})}),Be(t=>[...t,{id:`@p${Date.now()}${Math.random().toString(36).slice(2,6)}`,text:e,at:Date.now()}]),requestAnimationFrame(()=>bt(!0))}catch(t){p(e),console.error(`send failed:`,t)}},gn=async t=>{t.preventDefault();let r=n(),i=f().trim();if(!(!r||!i)){if(i.startsWith(`@`)){let t=i.indexOf(` `),r=(t===-1?i.slice(1):i.slice(1,t)).toLowerCase(),a=t===-1?``:i.slice(t+1).trim(),o=nn().some(e=>e.key.toLowerCase()===r),s=e().some(e=>e.id.toLowerCase()===r);try{if(o){if(!a){Td(`usage: @${r} <task>`);return}Td(`🧩 spawned ${(await $(`/api/agents/${n()}/spawn`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({persona:r,task:a,context:an()?`fork`:`none`})})).id}${an()?` (forked context)`:``}`),Ze(),p(``)}else if(s){if(!a){Td(`usage: @${r} <message>`);return}await $(`/api/agents/${encodeURIComponent(r)}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:a,start:!0})}),Td(`→ delivered to @${r}`),p(``)}else{Td(`unknown @${r} — personas: ${nn().map(e=>e.key).join(`, `)||`(none)`}`);return}}catch(e){Td(`@${r} failed: ${e.message}`)}return}if(i.startsWith(`/`)){let e=i.indexOf(` `),t=(e===-1?i.slice(1):i.slice(1,e)).toLowerCase(),n=e===-1?``:i.slice(e+1).trim();if(t===`goal`&&!n){p(`/goal `);return}if(t===`skill`&&!n){p(`/skill `);return}p(``),await _n(t,n);return}p(``),await hn(i)}},_n=async(e,t)=>{let r=n();if(!r)return;let i=(e,t)=>$(`/api/agents/${r}${e}`,{method:`POST`,headers:{"content-type":`application/json`},...t===void 0?{}:{body:JSON.stringify(t)}}).then(Ze);try{if(e===`start`)await i(`/start`);else if(e===`stop`)await i(`/stop`);else if(e===`fork`)await i(`/fork`,{}),await xt(r);else if(e===`compact`)Td((await i(`/compact`))?.ran?`context compacted`:`nothing to compact yet`);else if(e===`goal`){if(!t){Td(`usage: /goal <text>`);return}await i(`/goal`,{text:t,notify:!0}),Td(`goal saved & notification queued`)}else if(e===`skill`){if(!t){Td(`usage: /skill <name>`);return}await hn(`[harness] Force-load and follow the skill "${t}" now: call load_skill("${t}") and execute its playbook for the current task.`),Td(`skill "${t}" dispatched`)}else Td(`unknown command "${e}" — /start /stop /fork /goal /skill /compact`)}catch(t){Td(`/${e} failed: ${t.message}`)}},vn=e=>()=>n()&&$(`/api/agents/${n()}${e}`,{method:`POST`}).then(Ze),yn=async e=>{e.preventDefault();let t=document.getElementById(`goal-input`),r=document.getElementById(`goal-notify`)?.checked??!0;!n()||!t.value.trim()||(await $(`/api/agents/${n()}/goal`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:t.value,notify:r})}),t.value=``,Ze())};return[D(k,{get when(){return m()?.needsSetup},fallback:null,get children(){return D(qd,{onDone:()=>location.reload()})}}),D(k,{get when(){return We()},get children(){var e=Ac();return e.firstChild.firstChild.nextSibling.addEventListener(`submit`,e=>{e.preventDefault();let t=document.getElementById(`pw-input`);localStorage.setItem(`teapot.token`,t.value),location.reload()}),e}}),D(k,{get when(){return!m()?.needsSetup},get children(){var o=Tl(),s=o.firstChild,l=s.firstChild,d=l.firstChild.nextSibling,h=d.nextSibling.firstChild,g=h.nextSibling,v=g.nextSibling,b=l.nextSibling,x=b.nextSibling,S=s.nextSibling,ee=S.nextSibling;return h.$$click=()=>{Ue(),_(!0)},g.$$click=()=>ie(!T()),v.$$click=()=>{Ue(),te(!0)},P(s,D(k,{get when(){return T()},get children(){var e=Mc(),t=e.firstChild.firstChild;return t.addEventListener(`change`,e=>{let t=e.currentTarget.checked;se(t),localStorage.setItem(`teapot.theme.auto`,t?`1`:`0`)}),P(e,D(k,{get when(){return!E()},get fallback(){return[(()=>{var e=El(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>{le(e.currentTarget.value),localStorage.setItem(`teapot.theme.light`,e.currentTarget.value)}),P(t,D(O,{get each(){return Ed.filter(e=>e.mode===`light`)},children:e=>(()=>{var t=Ol();return P(t,()=>e.label),y(()=>t.value=e.key),t})()})),y(()=>t.value=ce()),e})(),(()=>{var e=Dl(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>{de(e.currentTarget.value),localStorage.setItem(`teapot.theme.dark`,e.currentTarget.value)}),P(t,D(O,{get each(){return Ed.filter(e=>e.mode===`dark`)},children:e=>(()=>{var t=Ol();return P(t,()=>e.label),y(()=>t.value=e.key),t})()})),y(()=>t.value=ue()),e})()]},get children(){var e=jc();return P(e,D(O,{each:Ed,children:e=>(()=>{var t=kl(),n=t.firstChild;return t.$$click=()=>{oe(e.key),localStorage.setItem(`teapot.theme`,e.key)},P(n,()=>e.sw.map(e=>(()=>{var t=Al();return ke(t,`background`,e),t})())),P(t,()=>e.label,null),y(n=>{var r=`themebtn`+(ae()===e.key?` on`:``),i=`${e.label} (${e.mode})`;return r!==n.e&&N(t,n.e=r),i!==n.t&&M(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()})),e}}),null),y(()=>t.checked=E()),e}}),b),P(b,D(O,{get each(){return ot()},children:({a:t,depth:r})=>(()=>{var i=Fl(),a=i.firstChild,o=a.nextSibling;return i.$$click=()=>xt(t.id),P(i,D(k,{get when(){return e().some(e=>e.parent===t.id)},get fallback(){return Il()},get children(){var e=jl();return e.$$click=e=>{e.stopPropagation(),at(t.id)},P(e,()=>rt().has(t.id)?`▸`:`▾`),y(()=>M(e,`title`,rt().has(t.id)?`expand sub-agents`:`collapse sub-agents`)),e}}),a),P(o,()=>t.id),P(i,D(k,{get when(){return t.parent},get children(){return Ml()}}),null),P(i,D(k,{get when(){return nt(t.id).length>0},get children(){var e=Nl();return y(()=>M(e,`title`,nt(t.id).map(e=>`${e.id}: ${e.schedule}`).join(`
24
- `))),e}}),null),P(i,D(k,{get when(){return t.goal.status===`done`},get children(){return Pl()}}),null),y(e=>{var o=`agent-item`+(t.id===n()?` sel`:``)+(r>0?` sub-row`:``),s=r>0?`padding-left:${10+r*14}px`:``,c=t.parent?`sub-agent of @${t.parent}`:void 0,l=`dot ${t.status}`;return o!==e.e&&N(i,e.e=o),e.t=Oe(i,s,e.t),c!==e.a&&M(i,`title`,e.a=c),l!==e.o&&N(a,e.o=l),e},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()})),P(x,D(k,{get when(){return u()},get children(){return[`master rss `,A(()=>u().rssMb),`MB · heap `,A(()=>u().heapUsedMb),`MB`,Nc(),`load1 `,A(()=>u().loadavg1),` · up `,A(()=>Math.floor(u().uptimeSec/60)),`m`]}})),P(S,D(k,{get when(){return F()},get fallback(){return Ll()},get children(){return[(()=>{var e=Lc(),t=e.firstChild.nextSibling,n=t.nextSibling,r=n.nextSibling,i=r.firstChild,a=i.nextSibling,o=a.nextSibling.nextSibling,s=o.nextSibling.nextSibling;s.nextSibling;var c=r.nextSibling,l=c.firstChild,u=l.nextSibling;return P(t,()=>F().id),P(n,()=>F().status),P(e,D(k,{get when(){return(F().pendingPrompts??0)>0},get children(){var e=Pc(),t=e.firstChild.nextSibling;return t.nextSibling,P(e,()=>F().pendingPrompts,t),y(()=>M(e,`title`,`${F().pendingPrompts} prompt(s) waiting — the agent picks them up at the next turn boundary`)),e}}),r),P(e,D(k,{get when(){return nt(F().id).length>0},get children(){var e=Fc();return e.firstChild,P(e,()=>nt(F().id).length,null),y(()=>M(e,`title`,`scheduled tasks:\n${nt(F().id).map(e=>`${e.schedule} · ${e.id}${e.forked?` (forked)`:``}`).join(`
25
- `)}`)),e}}),r),P(r,()=>F().model,i),P(r,()=>F().session,a),P(r,()=>F().branch,o),P(r,()=>F().stats.turns,s),P(r,()=>F().stats.toolCalls,null),P(c,D(k,{get when(){return F().statusReason},get children(){var e=Ic();return y(()=>M(e,`title`,F().statusReason)),e}}),l),l.$$click=jt,u.$$click=re,y(()=>N(n,`badge ${F().status}`)),e})(),(()=>{var e=Uc();return e.addEventListener(`scroll`,e=>{let t=e.currentTarget,r=yt();r&&j()&&Ee(0),Te(r),t.scrollTop<=4&&n()&&!dt()&&!pt()&&i().length>0&&gt()}),P(e,D(k,{get when(){return A(()=>!!pt())()&&He().length>0},get children(){return Rc()}}),null),P(e,D(k,{get when(){return dt()},get children(){return zc()}}),null),P(e,D(k,{get when(){return He().length>0},get fallback(){return Rl()},get children(){return[D(O,{get each(){return He()},children:(e,t)=>D(Fd,{e,get prev(){return He()[t()-1]},get res(){return Ve().resFor.get(e.id)},onOption:e=>void hn(e),get onEdit(){return e.type===`prompt`&&e.data?.source===`user`?()=>Re({eventId:e.id,text:String(e.data?.text??``)}):void 0}})}),D(k,{get when(){return je()},get children(){var e=Hc(),t=e.firstChild.nextSibling;return t.firstChild,P(t,D(k,{get when(){return je().reasoning},get children(){var e=Bc(),t=e.firstChild.nextSibling;return P(t,()=>je().reasoning),e}}),null),P(t,D(k,{get when(){return Ne()},get fallback(){return zl()},get children(){var e=Vc();return y(()=>e.innerHTML=Le(Ne()+`▍`)),e}}),null),e}})]}}),null),e})(),D(k,{get when(){return!we()||j()>0},get children(){var e=Wc();return e.firstChild,e.$$click=()=>bt(!0),P(e,(()=>{var e=A(()=>j()>0);return()=>e()?`${j()} new message${j()>1?`s`:``}`:`jump to present`})(),null),e}}),D(k,{get when(){return kt()},get children(){var t=Yc(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=i.firstChild,o=i.nextSibling.firstChild,s=o.nextSibling,c=s.nextSibling,l=r.nextSibling,u=l.firstChild;n.$$dblclick=()=>{Ht(Math.max(220,Math.round(window.innerHeight*.35))),localStorage.setItem(`teapot.termH`,String(Vt()))},n.$$pointerdown=$t,P(i,D(O,{get each(){return R()},children:(e,t)=>(()=>{var n=Bl(),r=n.firstChild.nextSibling;return n.$$click=()=>Kt(t()),P(n,()=>e.title,r),r.$$click=e=>{e.stopPropagation(),Yt(t())},y(r=>{var i=`termtab`+(zt()===0&&Nt()===t()?` active`:``)+(Lt()&&zt()===1&&Ft()===t()?` active`:``),a=`${e.title} — click to show in focused pane`;return i!==r.e&&N(n,r.e=i),a!==r.t&&M(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})()}),a),a.$$click=qt,P(o,(()=>{var t=A(()=>!!Gt());return()=>t()?e().find(e=>e.id===Gt().agentId)?.workspace.split(`/`).filter(Boolean).pop():F()?.workspace})()),s.$$click=en,c.$$click=jt;var d=tn(0);return typeof d==`function`&&Ae(d,u),u.$$pointerdown=()=>Bt(0),P(u,D(k,{get when(){return!Gt()||zt()===0&&Nt()===-1},get children(){return Gc()}})),P(l,D(k,{get when(){return Lt()},get children(){return[Kc(),(()=>{var e=Jc(),t=tn(1);return typeof t==`function`&&Ae(t,e),e.$$pointerdown=()=>Bt(1),P(e,D(k,{get when(){return Ft()===-1||R().length<=Ft()},get children(){return qc()}})),y(()=>e.classList.toggle(`focused`,zt()===1)),e})()]}}),null),y(e=>{var n=`${Vt()}px`,r=Lt()?`single pane`:`split panes (50/50)`,i=!!Lt(),a=zt()===0;return n!==e.e&&ke(t,`height`,e.e=n),r!==e.t&&M(s,`title`,e.t=r),i!==e.a&&l.classList.toggle(`split`,e.a=i),a!==e.o&&u.classList.toggle(`focused`,e.o=a),e},{e:void 0,t:void 0,a:void 0,o:void 0}),t}}),(()=>{var e=Qc(),t=e.firstChild,n=t.firstChild,r=n.nextSibling,i=t.nextSibling;P(e,D(k,{get when(){return fn().length>0},get children(){var e=Xc();return P(e,D(O,{get each(){return fn()},children:(e,t)=>(()=>{var n=Vl(),r=n.firstChild,i=r.nextSibling;return n.$$click=()=>{p(e.insert),dn(-1)},P(r,()=>e.insert.trim()),P(i,()=>e.title),y(r=>{var i=`cmdrow`+(t()===H()?` active`:``),a=e.title;return i!==r.e&&N(n,r.e=i),a!==r.t&&M(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})()})),e}}),t),P(e,D(k,{get when(){return V().length>0},get children(){var e=Xc();return P(e,D(O,{get each(){return V()},children:e=>(()=>{var t=Hl(),n=t.firstChild;n.firstChild;var r=n.nextSibling;return t.$$click=()=>{p(`@${e.key} `),dn(-1)},P(n,()=>e.key,null),P(r,()=>e.label),y(()=>M(t,`title`,e.label)),t})()})),e}}),t),t.addEventListener(`submit`,gn),n.$$keydown=e=>{let t=fn();if(t.length>0&&e.key===`ArrowDown`){e.preventDefault(),dn(e=>Math.min(e+1,t.length-1));return}if(t.length>0&&e.key===`ArrowUp`){e.preventDefault(),dn(e=>Math.max(e-1,0));return}if(t.length>0&&(e.key===`Tab`||e.key===`Enter`)&&!e.shiftKey&&H()>=0){e.preventDefault(),p(t[H()].insert),dn(-1);return}if(e.key===`Escape`&&t.length>0){dn(-1);return}e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),gn(e))},n.$$input=e=>{p(e.currentTarget.value),dn(0),mn()};var a=pn;return typeof a==`function`?Ae(a,n):pn=n,P(t,D(k,{get when(){return A(()=>!!f().startsWith(`@`))()&&f().includes(` `)},get children(){var e=Zc(),t=e.firstChild;return t.addEventListener(`change`,e=>on(e.currentTarget.checked)),y(()=>t.checked=an()),e}}),r),P(i,()=>Sd()||`enter send · shift+enter newline · ↑↓ sessions · / commands & focus · t terminal · d panel · esc interrupt · messages sent while the agent works queue up and land at the next turn boundary`),y(()=>M(n,`placeholder`,`message #${F().id} — / for commands`)),y(()=>n.value=f()),e})()]}})),P(ee,D(k,{get when(){return F()},get children(){return[$c(),(()=>{var e=el(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling,i=t.nextSibling,a=i.firstChild.nextSibling,o=i.nextSibling.firstChild.nextSibling,s=o.firstChild;return P(n,()=>F().id),P(r,()=>F().status),P(a,()=>F().workspace),P(o,()=>F().session,s),P(o,()=>F().branch,null),y(e=>{var t=`badge ${F().status}`,n=F().workspace;return t!==e.e&&N(r,e.e=t),n!==e.t&&M(a,`title`,e.t=n),e},{e:void 0,t:void 0}),e})(),D(Wd,{get agentId(){return F().id},get workspace(){return F().workspace}}),tl(),(()=>{var e=rl(),t=e.firstChild,r=t.nextSibling,i=r.firstChild,a=i.nextSibling,o=a.nextSibling,s=r.nextSibling;return s.firstChild,t.addEventListener(`change`,e=>{ge(e.currentTarget.value),Se(e.currentTarget.value)}),P(t,D(O,{get each(){return xe()},children:e=>(()=>{var t=Ol();return t.value=e,P(t,e,null),P(t,()=>e===m().defaultProvider?` ★`:``,null),t})()})),i.$$input=e=>ve(e.currentTarget.value),P(a,D(O,{get each(){return ye()},children:e=>(()=>{var t=Ol();return y(()=>t.value=e.id),t})()})),o.$$click=async e=>{if(!n())return;let t=e.currentTarget;t.disabled=!0;try{await $(`/api/agents/${n()}/model`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({provider:he(),model:_e().trim()||void 0,contextWindowTokens:ye().find(e=>e.id===(_e().trim()||void 0))?.contextLength})}),t.textContent=`✓ applied`,Ze()}catch(e){alert(`model switch failed: ${e.message}`)}finally{setTimeout(()=>{t.textContent=`apply`,t.disabled=!1},1200)}},P(s,()=>F().model,null),P(s,D(k,{get when(){return ye().length},get children(){return[` · `,A(()=>ye().length),` models loaded`]}}),null),P(e,D(k,{get when(){return Ce()},get children(){var e=nl();return P(e,Ce),e}}),null),y(()=>M(i,`placeholder`,F().model)),y(()=>t.value=he()),y(()=>i.value=_e()),e})(),il(),(()=>{var i=sl(),o=i.firstChild,s=o.nextSibling;return P(i,D(k,{get when(){return F().status===`running`},get fallback(){return(()=>{var e=Ul();return De(e,`click`,vn(`/start`),!0),e})()},get children(){var e=al();return De(e,`click`,vn(`/stop`),!0),e}}),o),o.$$click=()=>$(`/api/agents/${F().id}/fork`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}).then(()=>xt(F().id)),s.$$click=async()=>{let i=n();if(!i||!confirm(`remove agent ${i}? (log is kept)`))return;await $(`/api/agents/${i}`,{method:`DELETE`}).catch(()=>{});let o=e().filter(e=>e.id!==i);t(o),o[0]?xt(o[0].id):(r(null),a([]))},P(i,D(k,{get when(){return e().some(e=>e.parent===n())},get children(){var e=ol();return e.$$click=async()=>{n()&&(Td(`stopped: ${((await $(`/api/agents/${n()}/stop-children`,{method:`POST`})).stopped??[]).join(`, `)||`(none)`}`),Ze())},e}}),null),i})(),(()=>{var e=cl(),t=e.firstChild.firstChild;return t.addEventListener(`change`,e=>{n()&&$(`/api/agents/${n()}/auto-continue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({value:e.currentTarget.checked})}).then(Ze)}),y(()=>t.checked=F().autoContinue??!0),e})(),(()=>{var e=ll(),t=e.firstChild.nextSibling;return P(t,()=>F().goal.status),y(()=>N(t,`badge ${F().goal.status===`active`?`running`:F().goal.status}`)),e})(),(()=>{var e=ul();return e.firstChild,P(e,D(O,{each:[`active`,`done`,`paused`],children:e=>(()=>{var t=Wl();return t.$$click=()=>{n()&&$(`/api/agents/${n()}/goal`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({status:e})}).then(Ze)},M(t,`title`,e===`active`?`agent keeps working toward the goal (with auto-continue)`:e===`done`?`mark achieved — auto-continue stops`:`parked on purpose — resume by setting active again`),P(t,e===`active`?`▶ working`:e===`done`?`✓ done`:`⏸ paused`),y(n=>{var r=`goalstate`+(F().goal.status===e?` on ${e}`:``),i=F().goal.status===e;return r!==n.e&&N(t,n.e=r),i!==n.t&&(t.disabled=n.t=i),n},{e:void 0,t:void 0}),t})()}),null),e})(),D(k,{get when(){return F().goal.text},get fallback(){return Gl()},get children(){var e=dl(),t=e.firstChild;return y(()=>t.innerHTML=Le(String(F().goal.text))),e}}),fl(),(()=>{var e=pl();return e.addEventListener(`submit`,yn),e})(),(()=>{var e=hl(),t=e.firstChild.nextSibling;return P(e,D(k,{get when(){return Xe().total>0},get children(){var e=ml(),t=e.firstChild,n=t.nextSibling;return n.nextSibling,P(e,()=>Xe().done,t),P(e,()=>Xe().total,n),y(t=>Oe(e,Xe().done===Xe().total?`color:var(--ok)`:`color:var(--warn)`,t)),e}}),t),e})(),D(k,{get when(){return Xe().total>0},get children(){var e=gl(),t=e.firstChild;return y(e=>{var n=`barfill `+(Xe().done===Xe().total?``:`warn`),r=`${Math.round(Xe().done/Xe().total*100)}%`;return n!==e.e&&N(t,e.e=n),r!==e.t&&ke(t,`width`,e.t=r),e},{e:void 0,t:void 0}),e}}),(()=>{var e=_l();return e.$$input=e=>{Ge(e.currentTarget.value),qe(!0)},y(()=>e.value=L()),e})(),(()=>{var e=vl(),t=e.firstChild.nextSibling;return t.$$click=Ye,e})(),yl(),D(k,{get when(){return F().latestProgress},get fallback(){return Kl()},children:e=>(()=>{var t=Zl(),n=t.firstChild,r=n.firstChild.nextSibling,i=n.nextSibling;return P(r,()=>e().doing),P(t,D(k,{get when(){return e().recent},get children(){var t=ql(),n=t.firstChild.nextSibling;return P(n,()=>e().recent),t}}),i),P(t,D(k,{get when(){return e().problems},get children(){var t=Jl(),n=t.firstChild.nextSibling;return P(n,()=>e().problems),t}}),i),P(t,D(k,{get when(){return e().next},get children(){var t=Yl(),n=t.firstChild.nextSibling;return P(n,()=>e().next),t}}),i),P(t,D(k,{get when(){return e().goalStatus},get children(){var t=Xl(),n=t.firstChild.nextSibling;return P(n,()=>e().goalStatus),t}}),i),P(i,()=>Rd(e().ts)),t})()}),bl(),(()=>{var e=Sl(),t=e.firstChild,n=t.firstChild,r=n.firstChild.nextSibling,i=n.nextSibling,a=i.firstChild.nextSibling,o=i.nextSibling.firstChild.nextSibling,s=t.nextSibling,c=s.firstChild.nextSibling,l=c.firstChild,u=l.nextSibling;return u.nextSibling,P(r,()=>F().stats.turns),P(a,()=>F().stats.toolCalls),P(o,()=>F().stats.compactions??0),P(c,()=>zd(F().stats.inputTokens),l),P(c,()=>zd(F().stats.outputTokens),u),P(s,D(k,{get when(){return(F().stats.cachedInputTokens??0)>0},get children(){var e=xl(),t=e.firstChild.nextSibling;return t.nextSibling,P(e,()=>Math.round(F().stats.cachedInputTokens/Math.max(1,F().stats.inputTokens)*100),t),y(()=>M(e,`title`,`${zd(F().stats.cachedInputTokens)} tokens were served from the provider's prompt cache — billed far cheaper than fresh input`)),e}}),null),P(e,D(k,{get when(){return F().ctx},get fallback(){return Ql()},children:e=>{let t=ye().find(e=>e.id===F().model),n=e().window||t?.contextLength||0,r=n?Math.min(999,Math.round(e().usedTokens/n*100)):0,i=n?r>=85?`crit`:r>=70?`warn`:`ok`:``;return(()=>{var t=tu(),a=t.firstChild,o=a.firstChild.nextSibling,s=o.firstChild.nextSibling;s.nextSibling;var c=a.nextSibling,l=c.firstChild.nextSibling;return l.nextSibling,P(o,()=>zd(e().usedTokens),s),P(a,D(k,{when:n,get children(){var e=$l(),t=e.firstChild;return N(e,`pill ${i}`),P(e,r,t),P(e,()=>zd(n),null),e}}),null),P(t,D(k,{when:n,get children(){var e=eu(),t=e.firstChild;return N(t,`barfill ${i}`),y(e=>ke(t,`width`,`${Math.min(100,r)}%`)),e}}),c),P(c,()=>zd(e().compactAt),l),t})()}}),null),e})(),Cl(),D(O,{get each(){return c()},children:e=>(()=>{var t=nu(),r=t.firstChild,i=r.nextSibling,a=i.firstChild;return t.$$click=()=>{let t=st()===e.branch?null:e.branch;ct(t),n()&&_t(n())},P(r,()=>e.branch,null),P(r,()=>e.branch===F().branch?` (current)`:``,null),P(i,()=>e.events,a),y(n=>{var r=`branch-row`+(e.branch===F().branch||e.branch===st()?` cur`:``),i=e.branch===st()?`click to show all branches again`:`show only ${e.branch}`;return r!==n.e&&N(t,n.e=r),i!==n.t&&M(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),wl(),D(k,{get when(){return $e().length>0},get fallback(){return ru()},get children(){return D(O,{get each(){return $e()},children:e=>(()=>{var t=au(),r=t.firstChild,i=r.firstChild,a=i.nextSibling;a.firstChild;var o=r.nextSibling,s=o.firstChild,c=o.nextSibling;return t.$$click=()=>xt(e.agent),P(i,()=>e.id),P(a,()=>e.agent,null),P(r,D(k,{get when(){return e.forked},get children(){return iu()}}),null),P(o,()=>e.schedule,s),P(o,(()=>{var t=A(()=>!!e.next);return()=>t()?Rd(e.next):`—`})(),null),P(o,(()=>{var t=A(()=>!!e.last);return()=>t()?` · last ${Rd(e.last)}`:` · never ran`})(),null),P(c,()=>Bd(e.prompt,90)),y(r=>{var i=`sched-row`+(e.agent===n()?` cur`:``),a=`${Bd(e.prompt,200)}\nclick to open #${e.agent}`;return i!==r.e&&N(t,r.e=i),a!==r.t&&M(t,`title`,r.t=a),r},{e:void 0,t:void 0}),t})()})}})]}})),y(e=>{var t=`layout`+(ne()?``:` right-hidden`),n=`conn`+(St()?` ok`:``),r=St()?`live (websocket)`:`reconnecting…`,i=`rightbar`+(ne()?` open`:``);return t!==e.e&&N(o,e.e=t),n!==e.t&&N(d,e.t=n),r!==e.a&&M(d,`title`,e.a=r),i!==e.o&&N(ee,e.o=i),e},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),D(k,{get when(){return g()},get children(){return D(Ud,{get providers(){return Object.keys(m().providers??{})},onClose:()=>_(!1),onCreated:e=>{_(!1),Ze(),xt(e)}})}}),D(k,{get when(){return S()},get children(){return D(Jd,{get cfg(){return m()},onClose:()=>te(!1),onSaved:()=>{Ue(),tt()}})}}),D(k,{get when(){return Ie()},fallback:null,children:e=>{let t=()=>i().findIndex(t=>t.id===e().eventId),r=()=>Math.max(0,i().length-t()-1),[a,o]=v(r()>0?`summarize`:`discard`);return D(Hd,{title:`edit prompt — forks the conversation`,onClose:()=>Re(null),get children(){var t=su(),i=t.firstChild,s=i.nextSibling,c=s.firstChild;return t.addEventListener(`submit`,async t=>{t.preventDefault();let r=document.getElementById(`edit-text`);try{await $(`/api/agents/${n()}/edit-prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({eventId:e().eventId,text:r.value,tail:a()})}),Re(null),Ze();let t=n();t&&await xt(t)}catch(e){alert(`edit failed: ${e.message}`)}}),P(t,D(k,{get when(){return r()>0},get children(){var e=ou(),t=e.firstChild,n=t.firstChild,i=t.nextSibling,s=i.firstChild,c=i.nextSibling.firstChild;return P(t,r,n),s.addEventListener(`change`,()=>o(`summarize`)),c.addEventListener(`change`,()=>o(`discard`)),y(()=>s.checked=a()===`summarize`),y(()=>c.checked=a()===`discard`),e}}),s),c.$$click=()=>Re(null),y(()=>i.value=e().text),t}})}})]}function Pd(e){let t=e.e,n=e.res,r=t.data??{},i=String(r.name??`tool`),a=()=>n?String(n.data?.result??``):``,o=i,s=``,c=(()=>{var e=cu();return P(e,()=>Ld(JSON.stringify(r.args??{},null,1),2e3)),e})(),l=e=>String(r.args?.[e]??``),u=(e,t=1500)=>(()=>{var n=lu();return P(n,()=>Ld(e,t)),n})(),d=(e=4e3)=>n?[A(()=>u(a(),e)),(()=>{var e=uu(),t=e.firstChild;return P(e,()=>n.data?.durationMs,t),P(e,()=>n.data?.ok===!1?` · FAILED`:``,null),P(e,D(Vd,{get text(){return a()}}),null),e})()]:du();try{switch(i){case`bash`:{let e=l(`command`);o=`$ `+Bd(e,96),s=l(`timeout_ms`)?`timeout ${Math.round(Number(l(`timeout_ms`))/1e3)}s`:``,c=[A(()=>A(()=>e!==o.slice(2))()?u(e,800):null),A(()=>d(6e3))];break}case`read_file`:{o=l(`path`)||`(no path)`;let e=[];l(`pattern`)&&e.push(`grep /${Bd(l(`pattern`),40)}/`),Number(r.args?.offset)<0?e.push(`last ${-Number(r.args.offset)} lines`):r.args?.offset&&e.push(`from L${r.args.offset}`),r.args?.limit&&e.push(`≤${r.args.limit} lines`),s=e.join(` · `),c=d(6e3);break}case`write_file`:{let e=String(r.args?.content??``);o=l(`path`)||`(no path)`,s=`${e.length} bytes`,c=[A(()=>u(e)),n?(()=>{var e=fu();return P(e,()=>Bd(a(),160)),e})():pu()];break}case`edit_file`:o=l(`path`)||`(no path)`,s=r.args?.replace_all===!0?`replace all`:`unique spot`,c=[(()=>{var e=mu();return P(e,()=>Ld(`- `+l(`old_text`),900)),e})(),(()=>{var e=hu();return P(e,()=>`+ `+Ld(l(`new_text`),900)),e})(),n?(()=>{var e=gu(),t=e.firstChild,r=t.nextSibling;return r.nextSibling,P(e,()=>Bd(a(),120),t),P(e,()=>n.data?.durationMs,r),e})():_u()];break;case`apply_patch`:{let e=l(`patch`).split(`
26
- `).filter(e=>e&&!/^---$/.test(e.trim())),t=e.map(e=>e.match(/^\*\*\* (?:Add|Update|Delete) File: (.+)$/)?.[1]).filter(Boolean);o=t.length?`${t.length} file${t.length>1?`s`:``}: ${Bd(t.join(`, `),80)}`:`patch`,c=[(()=>{var t=vu();return P(t,()=>e.map(e=>{let t=e.startsWith(`+`)?` add`:e.startsWith(`-`)?` del`:/^\*\*\*|^@@/.test(e)?` meta`:``;return(()=>{var n=yu();return N(n,`pline`+t),P(n,(()=>{var t=A(()=>e.length>240);return()=>t()?e.slice(0,240)+`…`:e})()),n})()})),t})(),n?(()=>{var e=fu();return P(e,()=>Bd(a().split(`
27
- `)[0]??``,140),null),P(e,()=>n.data?.ok===!1?` · FAILED`:``,null),e})():bu()];break}case`list_dir`:o=l(`path`)||`.`,c=d(4e3);break;case`read_url`:{let e=l(`url`);try{let t=new URL(e);e=t.host+t.pathname}catch{}o=Bd(e,70),s=`web`,c=[(()=>{var e=fu();return P(e,D(k,{get when(){return/^https?:/i.test(l(`url`))},get fallback(){return(()=>{var e=Su();return P(e,()=>Bd(l(`url`),80)),e})()},get children(){var e=xu();return y(()=>M(e,`href`,l(`url`))),e}})),e})(),A(()=>d(3e3))];break}case`load_skill`:{o=`skill: ${l(`name`)}`;let e=a().replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,``);c=n?[(()=>{var t=Vc();return y(()=>t.innerHTML=Le(e)),t})(),(()=>{var e=uu(),t=e.firstChild;return P(e,()=>n.data?.durationMs,t),e})()]:Cu();break}case`save_skill`:{o=`skill: ${l(`name`)}`,s=Bd(l(`description`),60);let e=Array.isArray(r.args?.files)?r.args.files.map(e=>e?.name).filter(Boolean):[];c=[A(()=>A(()=>!!e.length)()?(()=>{var t=wu();return t.firstChild,P(t,()=>e.join(`, `),null),t})():null),n?(()=>{var e=gu(),t=e.firstChild,r=t.nextSibling;return r.nextSibling,P(e,()=>Bd(a(),160),t),P(e,()=>n.data?.durationMs,r),e})():Tu()];break}}}catch{}return(()=>{var e=Du(),r=e.firstChild,a=r.firstChild;a.firstChild;var l=a.nextSibling;return M(e,`title`,`${i}${s?` — `+s:``}`),P(a,o,null),P(r,D(k,{get when(){return t.data?.actor},get children(){var e=Eu();return e.firstChild,P(e,()=>String(t.data.actor),null),e}}),l),P(l,n?s||``:`running…`),P(e,c,null),y(()=>N(e,`embed`+(n?n.data?.ok===!1?` fail`:` done`:` running`))),e})()}function Fd(e){let t=e.e,n=Od(t),r=e.prev&&e.prev.type===t.type&&Od(e.prev).name===n.name&&t.session===e.prev.session&&t.branch===e.prev.branch;if(t.type===`fork`){let e=t.data??{};return(()=>{var n=Ou(),r=n.firstChild.nextSibling;return r.nextSibling,P(n,()=>String(e.fromBranch??`?`),r),P(n,()=>String(e.newBranch??t.branch),null),n})()}if(t.type===`goal`){let e=t.data??{},n=e.event===`status`?`marked ${String(e.status??``)}`:Bd(String(e.text??``),80);return(()=>{var t=ku(),r=t.firstChild.nextSibling;return r.nextSibling,P(t,()=>String(e.event??``),r),P(t,n,null),t})()}return t.type===`todo`?(()=>{var e=Au(),n=e.firstChild.nextSibling;return n.nextSibling,P(e,()=>String(t.data?.by??`human`),n),e})():t.type===`state`?t.data.from===t.data.to?null:(()=>{var e=ju(),n=e.firstChild;return P(e,()=>t.data.from,n),P(e,()=>t.data.to,null),P(e,(()=>{var e=A(()=>!!t.data.reason);return()=>e()?` — ${t.data.reason}`:``})(),null),y(()=>N(e,`divider-msg`+(t.data.to===`error`?` err`:``))),e})():(()=>{var i=Fu(),a=i.firstChild;return P(i,D(k,{when:!r,get fallback(){return Iu()},get children(){var e=Mu();return P(e,()=>n.icon),y(t=>{var r=n.color+`33`,i=`1px solid ${n.color}66`;return r!==t.e&&ke(e,`background`,t.e=r),i!==t.t&&ke(e,`border`,t.t=i),t},{e:void 0,t:void 0}),e}}),a),P(a,D(k,{when:!r,get children(){var r=Pu(),i=r.firstChild,a=i.nextSibling,o=a.nextSibling;return P(i,()=>n.name),P(r,D(k,{get when(){return t.data?.actor},get children(){var e=Eu();return e.firstChild,P(e,()=>String(t.data.actor),null),e}}),a),P(a,(()=>{var e=A(()=>!!t.data?.pending);return()=>e()?`pending…`:Ad(t.ts)})()),P(o,()=>t.branch),P(r,D(k,{get when(){return e.onEdit},get children(){var t=Nu();return t.$$click=t=>{t.stopPropagation(),e.onEdit()},t}}),null),y(e=>ke(i,`color`,n.color)),r}}),null),P(a,D(Id,{e:t,get res(){return e.res},get onOption(){return e.onOption}}),null),y(()=>N(i,`msg`+(r?` grouped`:``)+(t.data?.pending?` pending`:``))),i})()}function Id(e){let t=e.e;switch(t.type){case`prompt`:return(()=>{var e=Vc();return y(()=>e.innerHTML=Le(String(t.data.text??``))),e})();case`message`:return[D(k,{get when(){return A(()=>typeof t.data.reasoning==`string`)()&&t.data.reasoning.trim()},get children(){var e=Bc(),n=e.firstChild.nextSibling;return P(n,()=>String(t.data.reasoning)),e}}),(()=>{var e=Vc();return y(()=>e.innerHTML=Le(String(t.data.content??``))),e})(),D(k,{get when(){return t.data.interrupted},get children(){return Lu()}}),D(k,{get when(){return t.data.final},get children(){var e=Ru(),n=e.firstChild;return P(e,D(Vd,{get text(){return String(t.data.content??``)}}),n),e}})];case`tool_call`:return D(Pd,{e:t,get res(){return e.res}});case`tool_result`:{let e=String(t.data.result);return(()=>{var n=zu(),r=n.firstChild,i=r.firstChild,a=r.nextSibling,o=a.nextSibling,s=o.firstChild;return P(i,()=>Bd(e,120)),P(r,D(Vd,{text:e}),null),P(a,()=>Ld(e,4e3)),P(o,()=>t.data.durationMs,s),P(o,()=>t.data.ok?``:` · FAILED`,null),y(()=>N(n,`embed`+(t.data.ok?``:` fail`))),n})()}case`decision`:{let e=Array.isArray(t.data?.alternatives)?t.data.alternatives:[];return(()=>{var n=Vu(),r=n.firstChild,i=r.firstChild;i.firstChild;var a=r.nextSibling;return a.firstChild,P(i,()=>Bd(String(t.data?.decision??``),90),null),P(a,()=>String(t.data?.rationale??``),null),P(n,D(k,{get when(){return e.length},get children(){var t=Bu();return t.firstChild,P(t,()=>e.join(` / `),null),t}}),null),n})()}case`question`:{let n=Array.isArray(t.data?.options)?t.data.options:[];return(()=>{var r=Uu(),i=r.firstChild;i.firstChild;var a=i.nextSibling;return P(i,()=>String(t.data?.question??``),null),P(r,D(k,{get when(){return n.length>0},get children(){var r=Hu();return P(r,D(O,{each:n,children:n=>(()=>{var r=Wu();return r.$$click=()=>{let r=t.data?.actor;r?$(`/api/agents/${encodeURIComponent(String(r))}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:n,start:!0})}).then(()=>Td(`→ answered @${String(t.data.actor)}`)).catch(()=>Td(`answer failed`)):e.onOption?.(n)},P(r,n),r})()})),r}}),a),r})()}case`progress`:return(()=>{var e=qu(),n=e.firstChild;return n.firstChild,P(n,()=>String(t.data.doing??``),null),P(e,D(k,{get when(){return t.data.recent},get children(){var e=fu();return P(e,()=>String(t.data.recent)),e}}),null),P(e,D(k,{get when(){return t.data.problems},get children(){var e=Gu();return e.firstChild,P(e,()=>String(t.data.problems),null),e}}),null),P(e,D(k,{get when(){return t.data.next},get children(){var e=Ku();return e.firstChild,P(e,()=>String(t.data.next),null),e}}),null),e})();case`error`:return(()=>{var e=Ju(),n=e.firstChild;return n.firstChild,P(n,()=>String(t.data.message??``),null),e})();default:return(()=>{var e=Yu();return P(e,()=>Ld(JSON.stringify(t.data),200)),e})()}}function Ld(e,t){return e.length>t?e.slice(0,t)+` …`:e}function Rd(e){let t=new Date(e).getTime()-Date.now(),n=Math.abs(t),r=n<9e4?`${Math.round(n/1e3)}s`:n<54e5?`${Math.round(n/6e4)}m`:`${(n/36e5).toFixed(1)}h`;return t>=0?`in ${r}`:`${r} ago`}function zd(e){return e>=1e9?`${+(e/1e9).toFixed(1)}b`:e>=1e6?`${+(e/1e6).toFixed(1)}m`:e>=1e4?`${Math.round(e/1e3)}k`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function Bd(e,t){return Ld(e.replace(/\s+/g,` `).trim(),t)}function Vd(e){let[t,n]=v(!1);return(()=>{var r=Xu();return r.$$click=t=>{t.stopPropagation(),navigator.clipboard.writeText(e.text).then(()=>{n(!0),setTimeout(()=>n(!1),900)})},P(r,()=>t()?`✓`:`⧉`),r})()}function Hd(e){return(()=>{var t=Zu(),n=t.firstChild,r=n.firstChild.firstChild,i=r.nextSibling;return t.$$click=t=>t.target===t.currentTarget&&e.onClose(),P(r,()=>e.title),De(i,`click`,e.onClose,!0),P(n,()=>e.children,null),t})()}function Ud(e){let[t,n]=v(`~`),[r,i]=v([]),[a,o]=v(``),[s,c]=v(e.providers[0]??``),[l,u]=v(``),[d,f]=v(``);async function p(e){let t=await $(`/api/fs${e?`?path=${encodeURIComponent(e)}`:``}`);n(t.path),i(t.entries)}ee(()=>p(t()));let m=async n=>{n.preventDefault(),f(``);try{let n=await $(`/api/agents`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({workspace:t(),id:a(),provider:s()||void 0,model:l()||void 0})});e.onCreated(n.agent.id)}catch(e){f(String(e.message))}};return D(Hd,{title:`new agent`,get onClose(){return e.onClose},get children(){var i=$u(),f=i.firstChild,h=f.firstChild.nextSibling.firstChild,g=h.nextSibling,_=g.nextSibling,v=f.nextSibling,b=v.nextSibling,x=b.firstChild,S=x.firstChild.nextSibling,ee=x.nextSibling,C=ee.firstChild.nextSibling,te=ee.nextSibling.firstChild.nextSibling,ne=b.nextSibling;return i.addEventListener(`submit`,m),h.$$input=e=>n(e.currentTarget.value),g.$$click=()=>p(t()),_.$$click=()=>p(`..`),P(v,D(O,{get each(){return r()},children:e=>(()=>{var n=ed();return n.firstChild,n.$$click=()=>p(`${t()}/${e}`.replace(/\/+/g,`/`)),P(n,e,null),n})()})),S.$$input=e=>o(e.currentTarget.value),C.addEventListener(`change`,e=>c(e.currentTarget.value)),P(C,D(O,{get each(){return e.providers},children:e=>(()=>{var t=Ol();return P(t,e),t})()})),te.$$input=e=>u(e.currentTarget.value),P(i,D(k,{get when(){return d()},get children(){var e=Qu();return P(e,d),e}}),ne),y(()=>h.value=t()),y(()=>S.value=a()),y(()=>C.value=s()),y(()=>te.value=l()),i}})}function Wd(e){let[t,n]=v(new Map),[r,i]=v(new Set),[a,o]=v(null),[s,c]=v(``),l=(e,t)=>t.map(t=>({name:String(t.name),path:e?`${e}/${t.name}`:String(t.name),dir:!!t.dir,...typeof t.size==`number`?{size:t.size}:{}}));async function u(t){try{let n=await $(`/api/agents/${e.agentId}/tree${t?`?path=${encodeURIComponent(t)}`:``}`);return l(t,n.entries??[])}catch(e){return c(e.message),null}}b(()=>{e.agentId,i(new Set),n(new Map),u(``).then(e=>{e&&n(new Map([[``,e]]))})});let d=async e=>{let a=new Set(r());if(a.has(e.path)){a.delete(e.path),i(a);return}if(a.add(e.path),i(a),!t().has(e.path)){let t=await u(e.path);t&&n(n=>new Map(n).set(e.path,t))}},f=async t=>{try{let n=await $(`/api/agents/${e.agentId}/file?path=${encodeURIComponent(t.path)}`);o({path:t.path,content:n.content??``,binary:n.binary,truncated:n.truncated})}catch(e){Td(`open failed: ${e.message}`)}},p=(e,n)=>[(()=>{var t=nd(),i=t.firstChild,a=i.nextSibling;return t.$$click=()=>e.dir?void d(e):void f(e),P(i,(()=>{var t=A(()=>!!e.dir);return()=>t()?r().has(e.path)?`▾`:`▸`:`·`})()),P(a,()=>e.name),P(t,D(k,{get when(){return A(()=>!e.dir)()&&e.size!==void 0},get children(){var t=td();return P(t,()=>zd(e.size)),t}}),null),y(r=>{var i=`filerow`+(e.dir?` isdir`:``),a=`padding-left:${n*13+8}px`,o=e.dir?`browse ${e.path}`:`preview ${e.path}`;return i!==r.e&&N(t,r.e=i),r.t=Oe(t,a,r.t),o!==r.a&&M(t,`title`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})(),D(k,{get when(){return A(()=>!!e.dir)()&&r().has(e.path)},get children(){return D(O,{get each(){return t().get(e.path)??[]},children:e=>p(e,n+1)})}})],m=()=>e.workspace.split(`/`).filter(Boolean).pop()??e.workspace;return[(()=>{var e=rd(),t=e.firstChild.nextSibling;return t.firstChild,P(t,m,null),e})(),(()=>{var e=id();return P(e,D(k,{get when(){return(t().get(``)??[]).length>0},get fallback(){return(()=>{var e=ad();return P(e,()=>s()||`empty workspace`),e})()},get children(){return D(O,{get each(){return t().get(``)??[]},children:e=>p(e,0)})}})),e})(),D(k,{get when(){return a()},children:e=>D(Hd,{get title(){return`🗂 ${e().path}`},onClose:()=>o(null),get children(){var t=od();return P(t,(()=>{var t=A(()=>!!e().binary);return()=>t()?`(binary file — inspect it from the terminal)`:e().content})(),null),P(t,()=>e().truncated?`
21
+ - task two"title="shared with the agent — it may check items off via set_todo; your unsaved edits win until you save"style="width:100%;background:var(--bg-darkest);border:none;border-radius:6px;padding:6px 8px;color:var(--fg);font-family:ui-monospace,Menlo,monospace;font-size:12.5px;resize:vertical">`),vl=j(`<div style=display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-top:4px><label class=muted title="queue a harness prompt telling the agent the task list changed"style=display:flex;align-items:center;gap:4px;font-size:11.5px;white-space:nowrap;cursor:pointer><input id=todo-notify type=checkbox checked> notify agent</label><button style="background:var(--ok);border:none;border-radius:6px;color:#fff;padding:4px 12px;cursor:pointer">✓ save tasks`),yl=j(`<h3 title="latest report_progress snapshot. The harness asks for one after real activity (time AND output gates); errors show under ⚠ problems">📈 progress`),bl=j(`<h3 title="cumulative billed totals · the cached pill counts tokens served from the provider's prompt cache (far cheaper) · context bar turns orange ≥70% and red ≥85% of the model window">📊 runtime`),xl=j(`<span class="pill ok">⚡ <!>% cached`),Sl=j(`<div class="card runcard"><div class=statgrid><div class=stat title="LLM turns taken this session"><span>turns</span><b></b></div><div class=stat title="tool calls executed"><span>tools</span><b></b></div><div class=stat title="times old turns were summarized to free context"><span>compacted</span><b></b></div></div><div class=statrow><span class=k>tokens</span><b> in / <!> out`),Cl=j(`<h3>🌿 branches <span class=muted style=text-transform:none;letter-spacing:0>· click to filter the feed`),wl=j(`<h3>⏰ schedule <span class=muted style=text-transform:none;letter-spacing:0>· cron tasks, all agents · edit in settings`),Tl=j(`<div><nav class=sidebar><h1><span></span><span style=float:right;display:flex;gap:4px;align-items:center><button class=iconbtn title="new agent">+</button><button class=iconbtn title=themes>🎨</button><button class=iconbtn title=settings>⚙</button></span></h1><div class=agent-list></div><div class=sidebar-footer><div class=brand>🫖 teapot <span class=version>v</span></div></div><div class=metrics></div></nav><section class=channel></section><aside>`),El=j(`<label class=trow>system light →<select class=w100>`),Dl=j(`<label class=trow>system dark →<select class=w100>`),Ol=j(`<option>`),kl=j(`<button><span class=swdots>`),Al=j(`<i>`),jl=j(`<span class=caret>`),Ml=j(`<span class=subtag>🧩`),Nl=j(`<span class=mini-cron>⏰`),Pl=j(`<span title="goal done">✓`),Fl=j(`<div><span></span><span>`),Il=j(`<span class=caret-spacer>`),Ll=j(`<div class=muted style=display:grid;place-items:center;height:100%>select an agent`),Rl=j(`<div class=muted style=display:grid;place-items:center;height:100%>no events yet — say something or press ▶ start`),zl=j(`<div class="content muted">thinking…`),Bl=j(`<span>⌨ <button class=tabx title="close this shell">✕`),Vl=j(`<div><b class=mono></b><span class=muted>`),Hl=j(`<div class=cmdrow><b>@</b><span class=muted>`),Ul=j(`<button class=runbtn title="run toward the goal (starts the loop)">▶ start`),Wl=j(`<button>`),Gl=j(`<div class="card muted">no goal yet — write one below and press ✓ save. Then ▶ start (or any message) sets it in motion.`),Kl=j(`<div class=muted>none yet — the harness asks for a report after real activity, and the agent can report_progress anytime`),ql=j(`<div class=progrow><b>recent</b><span>`),Jl=j(`<div class="progrow warn"><b>⚠ problems</b><span>`),Yl=j(`<div class=progrow><b>next</b><span>`),Xl=j(`<div class=progrow><b>goal</b><span>`),Zl=j(`<div class="card prog"><div class=progrow><b>doing</b><span></span></div><div class="meta muted">`),Ql=j(`<div class=statrow><span class=k>context</span><span class=muted>no window known for this model yet`),$l=j(`<span>% of `),eu=j(`<div class=bartrack><div>`),tu=j(`<div class=bartrack style=margin-top:4px><div>`),nu=j(`<div class=ctxblock title="estimated live context vs the model's real window. Past the window, old turns are summarized into notes (compaction); the compact line below shows where that starts."><div class=statrow><span class=k>context</span><b>~<!> tok</b></div><div class=statrow style=margin-top:4px><span class=k>compact</span><b> tok</b><span class=muted style=font-size:11px;color:var(--dim)></span></div><div class=ctrlrow style=margin-top:6px><label title="when on, older turns are automatically summarized when context exceeds the budget"><input type=checkbox>auto-compact</label><span class=muted style=font-size:11.5px>summarizes old turns when budget exceeded</span></div><div class=muted style=font-size:11px;margin-top:4px>compaction starts around ~<!> tok — older turns get summarized, recent ones stay intact`),ru=j(`<div><span></span><span> events`),iu=j(`<div class=muted>no scheduled tasks — add them in ⚙ settings ("scheduled tasks")`),au=j(`<span title="runs on a forked branch so chatter stays off the main line">⑂`),ou=j(`<div><div class=sched-top><b></b><span class=muted>@</span></div><div class="sched-meta mono"> → next </div><div class="sched-prompt muted">`),su=j(`<div><div style=font-size:12.5px;margin-bottom:4px> event(s) came after this prompt — what should happen to them on the new branch?</div><label style=display:flex;gap:6px;align-items:center;font-size:13px;color:var(--fg)><input type=radio name=tail>summarize them into a note the agent can still read</label><label style=display:flex;gap:6px;align-items:center;font-size:13px;color:var(--fg)><input type=radio name=tail>discard them entirely (clean timeline)`),cu=j(`<form style=display:flex;flex-direction:column;gap:10px><textarea id=edit-text class="mono w100"rows=6></textarea><div style=display:flex;justify-content:flex-end;gap:8px><button type=button>cancel</button><button type=submit style="background:var(--acc);border:none;border-radius:6px;color:#fff;padding:6px 12px;cursor:pointer">⑂ fork & resend`),lu=j(`<div class=mono>`),uu=j(`<pre class="mono toolbody">`),du=j(`<div class=meta>ms`),fu=j(`<div class=meta>waiting for output…`),pu=j(`<div class=meta>`),mu=j(`<div class=meta>writing…`),hu=j(`<pre class="mono toolbody del">`),gu=j(`<pre class="mono toolbody add">`),_u=j(`<div class=meta> · <!>ms`),vu=j(`<div class=meta>applying…`),yu=j(`<pre class="mono toolbody patch">`),bu=j(`<div>`),xu=j(`<div class=meta>validating…`),Su=j(`<a target=_blank rel="noopener noreferrer"referrerpolicy=no-referrer>open ↗`),Cu=j(`<span class=muted>`),wu=j(`<div class=meta>loading…`),Tu=j(`<div class=meta>bundled: `),Eu=j(`<div class=meta>saving…`),Du=j(`<span class=actor>@`),Ou=j(`<details><summary><b>⚙ </b><span class=meta>`),ku=j(`<div class=divider-msg>⑂ forked from <!> → `),Au=j(`<div class=divider-msg>🎯 goal <!>: `),ju=j(`<div class=divider-msg>✅ tasks updated (<!>)`),Mu=j(`<div> → `),Nu=j(`<div class=avatar>`),Pu=j(`<button class=editbtn title="edit this prompt — forks the conversation here (later events are dropped or summarized)">✎ edit`),Fu=j(`<div class=msg-head><span class=author></span><span class=ts></span><span class=ts>`),Iu=j(`<div><div class=msg-body>`),Lu=j(`<span style=width:38px>`),Ru=j(`<div class=interrupted>⚠ interrupted — partial output kept`),zu=j(`<div class=msgfoot><span>copy summary`),Bu=j(`<details><summary><span class=meta></span></summary><div class=mono></div><div class=meta>ms`),Vu=j(`<div class="content muted">Rejected: `),Hu=j(`<details class="embed decision"><summary><b>📌 </b><span class=meta>decision logged</span></summary><div class=content><b>Why:`),Uu=j(`<div class=qopts>`),Wu=j(`<div class="embed question"><div>❓ </div><div class=meta>the agent is waiting for your reply — answer below or tap an option`),Gu=j(`<button class=qopt>`),Ku=j(`<div class=meta>⚠ `),qu=j(`<div class=meta>→ `),Ju=j(`<div class=embed style=border-color:var(--ok)><div>📈 `),Yu=j(`<div class="embed fail"><div class=mono>⚠ `),Xu=j(`<div class="content muted">`),Zu=j(`<button class=copybtn title="copy to clipboard">`),Qu=j(`<div class=overlay><div class=modal><div class=modal-head><b></b><button class=iconbtn>✕`),$u=j(`<span style=color:var(--err);font-size:13px>`),ed=j(`<form style=display:flex;flex-direction:column;gap:10px><label>workspace directory<div style=display:flex;gap:6px><input type=text class="w100 mono"><button type=button>go</button><button type=button>↑</button></div></label><div class=dirlist></div><div style=display:flex;gap:10px><label style=flex:1>agent name <input type=text placeholder="(directory name)"></label><label>provider<select></select></label><label style=flex:1>model <input type=text placeholder="(provider default)"></label></div><button type=submit style=align-self:flex-end>create & start`),td=j(`<div class=direntry>📁 `),nd=j(`<span class=fsize>`),rd=j(`<div><span class=ficon></span><span class=fname>`),id=j(`<h3 title="the agent's workspace — lazy-loaded, dotfiles hidden; click a folder to expand, a file to preview">🗂 files <span class=muted style=text-transform:none;letter-spacing:0>· `),ad=j(`<div class=filebox>`),od=j(`<div class=muted style=padding:6px>`),sd=j(`<pre class=mono style=max-height:62vh;overflow:auto;white-space:pre-wrap;margin:0>`),cd=j(`<div class=muted style=font-size:11.5px;margin-top:-6px>`),ld=j(`<span style=color:var(--fg)>`),ud=j(`<div class=muted style=font-size:11.5px;margin-top:-8px> models found at this endpoint`),dd=j(`<div class=overlay style=background:var(--bg-darkest)><div class=modal style=max-width:560px><div class=modal-head><b>🫖 welcome to teapot</b></div><p class=muted style="margin:0 0 10px;font-size:13px">first run — pick an OpenAI-compatible provider and you're done. everything below can be changed later in ⚙ settings.</p><form style=display:flex;flex-direction:column;gap:12px><div style=display:flex;gap:6px;flex-wrap:wrap></div><label>base url<input type=text class="w100 mono"list=wiz-preset-urls><datalist id=wiz-preset-urls></datalist></label><label>api key <input type=password class=w100 placeholder="(local providers may not need one)"></label><label>default model<input type=text class="w100 mono"list=wiz-model-list><datalist id=wiz-model-list></datalist></label><fieldset><legend>first agent</legend><label>workspace directory<input type=text class="w100 mono"></label><label title="asks for this password when opening the UI or API from another machine — plain-HTTP LAN traffic is NOT encrypted"style=margin-top:4px>protect the API with a password? <input type=password class=w100 placeholder="(optional — LAN traffic is still plain HTTP)"></label></fieldset><button type=submit style="background:var(--acc);border:none;border-radius:8px;color:#fff;padding:9px 14px;font-weight:600;cursor:pointer">`),fd=j(`<button type=button>`),pd=j(`<div class=muted style=font-size:11.5px;margin-top:-8px>models appear here automatically once the endpoint answers GET /models`),md=j(`<label><input type=number min=0>`),hd=j(`<form style=display:flex;flex-direction:column;gap:14px><fieldset><legend>providers</legend><button type=button>+ add custom</button><div style=display:flex;gap:6px;flex-wrap:wrap;margin-top:6px><span class=muted style=font-size:11.5px>quick-add:</span></div><div><label title="agents without an explicit provider use this one"style=display:flex;align-items:center;gap:6px;margin-top:6px>default provider<select><option value>(none — first provider wins)</option></select></label></div></fieldset><fieldset><legend>agent runtime</legend><div class=cfggrid></div></fieldset><fieldset><legend>scheduled tasks</legend><button type=button>+ add task</button></fieldset><fieldset><legend>agents (read-only — edit config file or use +)</legend></fieldset><button type=submit style="align-self:flex-end;background:var(--acc);border:none;border-radius:6px;color:#fff;padding:6px 14px;cursor:pointer">save settings`),gd=j(`<div class=cfgrow><input class=cfgname placeholder=name><input placeholder=https://…/v1><input placeholder="api key"type=password><input placeholder="default model"><button type=button class=danger title="remove provider">✕`),_d=j(`<button type=button>+ `),vd=j(`<div class=cfgcol><div class=cfgrow><input placeholder=id><input placeholder="agent id"><input placeholder="every 30m / cron"><label style=display:flex;gap:3px;align-items:center;white-space:nowrap;color:var(--dim);font-size:11px><input type=checkbox>fork</label><button type=button class=danger>✕</button></div><textarea rows=2 placeholder="prompt to send">`),yd=j(`<span class=muted>🧩 sub of @`),bd=j(`<div class=cfgrow><b></b><span class=muted>`),xd={prompt:{name:`you`,icon:`🟧`,color:`#faa81a`},user:{name:`you`,icon:`🟧`,color:`#faa81a`},message:{name:`agent`,icon:`🫖`,color:`#5865f2`},progress:{name:`progress`,icon:`📈`,color:`#3ba55d`},question:{name:`agent`,icon:`❓`,color:`#5865f2`}},Sd={name:`harness`,icon:`📣`,color:`#3ba55d`},[Cd,wd]=v(``),Td,Ed=e=>{wd(e),clearTimeout(Td),Td=setTimeout(()=>wd(``),3200)},Dd=[{key:`dark`,label:`Dark`,mode:`dark`,sw:[`#1a1c22`,`#2b2e39`,`#5865f2`]},{key:`midnight`,label:`Midnight`,mode:`dark`,sw:[`#0d0f18`,`#252a42`,`#8b7cf7`]},{key:`tea`,label:`Milk Tea`,mode:`dark`,sw:[`#241c16`,`#493b2d`,`#d98e32`]},{key:`coffee`,label:`Coffee`,mode:`dark`,sw:[`#191410`,`#403527`,`#c68a4b`]},{key:`matcha`,label:`Matcha`,mode:`dark`,sw:[`#1b2217`,`#3c4a33`,`#8db64e`]},{key:`matrix`,label:`Matrix`,mode:`dark`,sw:[`#060a06`,`#18301d`,`#2fd558`]},{key:`sunset`,label:`Sunset`,mode:`dark`,sw:[`#1c1422`,`#452f52`,`#f2784b`]},{key:`light`,label:`Light`,mode:`light`,sw:[`#eceef4`,`#ffffff`,`#4757d8`]},{key:`strawberry`,label:`Strawberry`,mode:`light`,sw:[`#fbe4ea`,`#fffafb`,`#e05575`]},{key:`ramune`,label:`Ramune`,mode:`light`,sw:[`#ddeff7`,`#fbfeff`,`#1d86ae`]}];function Od(){let e=``,t=``;try{let n=getComputedStyle(document.documentElement);e=n.getPropertyValue(`--term-bg`).trim(),t=n.getPropertyValue(`--term-fg`).trim()}catch{}return{background:e||`#0d0e12`,foreground:t||`#dcdee4`}}var kd=e=>{if(e.data?.actor)return{name:`@${String(e.data.actor)}`,icon:`🧩`,color:`#3ba0c9`};if(e.type===`tool_call`||e.type===`tool_result`)return{name:String(e.data?.name??`tool`),icon:`⚙`,color:`#3ba0c9`};if(e.type===`prompt`){let t=String(e.data?.source??`user`);return t===`user`?xd.prompt:t.startsWith(`scheduler:`)?{name:t.slice(10),icon:`📣`,color:`#3ba55d`}:Sd}return xd[e.type]??{name:e.type,icon:`•`,color:`#9298a5`}},Ad=new Set([`user`,`message`,`prompt`,`tool_call`,`tool_result`,`progress`,`state`,`error`,`fork`,`goal`,`todo`,`question`,`decision`]),jd=e=>{let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`};async function $(e,t){let n=localStorage.getItem(`teapot.token`),r=new Headers(t?.headers);n&&!r.has(`authorization`)&&r.set(`authorization`,`Bearer ${n}`);let i=await fetch(e,{...t,headers:r});if(!i.ok){i.status===401&&window.dispatchEvent(new CustomEvent(`teapot:unauthorized`));let t=``;try{t=(await i.json())?.error??``}catch{}throw Error(t||`${e}: HTTP ${i.status}`)}return i.json()}var Md=location.hash.match(/[#&]token=([^&]+)/);Md&&(localStorage.setItem(`teapot.token`,decodeURIComponent(Md[1])),history.replaceState(null,``,location.pathname+location.search));var Nd=()=>{let e=localStorage.getItem(`teapot.token`);return e?`?token=${encodeURIComponent(e)}`:``};function Pd(){let[e,t]=v([]),[n,r]=v(null),[i,a]=v([]),[o,s]=v(0),[c,l]=v([]),[u,d]=v(null),[f,p]=v(``),[m,h]=v({providers:{}}),[g,_]=v(!1),[S,te]=v(!1),[ne,w]=v(localStorage.getItem(`teapot.panel`)===null?window.innerWidth>1100:localStorage.getItem(`teapot.panel`)===`1`),re=()=>{let e=!ne();w(e),localStorage.setItem(`teapot.panel`,e?`1`:`0`)},[T,ie]=v(!1),[ae,oe]=v(localStorage.getItem(`teapot.theme`)??`dark`),[E,se]=v(localStorage.getItem(`teapot.theme.auto`)===`1`),[ce,le]=v(localStorage.getItem(`teapot.theme.light`)??`light`),[ue,de]=v(localStorage.getItem(`teapot.theme.dark`)??`dark`),fe=typeof window.matchMedia==`function`?window.matchMedia(`(prefers-color-scheme: light)`):null,[pe,me]=v(fe?.matches??!1);ee(()=>{let e=e=>me(e.matches);fe?.addEventListener(`change`,e),C(()=>fe?.removeEventListener(`change`,e))}),b(()=>{document.documentElement.dataset.theme=E()?pe()?ce():ue():ae()});let[he,ge]=v(``),[_e,ve]=v(``),[ye,be]=v([]),xe=()=>Object.keys(m().providers??{});async function Se(e){if(e)try{let t=await $(`/api/models?provider=${encodeURIComponent(e)}`);be(t.models??[])}catch{be([])}}let Ce=()=>{let e=_e().trim()||F()?.model||``;if(!e)return``;let t=ye().find(t=>t.id===e);if(!t)return``;let n=[];t.contextLength&&n.push(`ctx ${Bd(t.contextLength)} tok`);let r=e=>e===void 0?``:`$${e*1e6>=10?Math.round(e*1e6):+(e*1e6).toFixed(1)}/M`;if(t.pricing){let e=r(t.pricing.prompt),i=r(t.pricing.completion);e&&i?n.push(`${e} in · ${i} out`):(e||i)&&n.push(r(t.pricing.prompt??t.pricing.completion))}return n.join(` · `)};b(()=>{let e=F();e&&(ge(e.provider||m().defaultProvider||xe()[0]||``),ve(``),Se(he()))});let[we,Te]=v(!0),[j,Ee]=v(0),[je,Me]=v(null),[Ne,Pe]=v(``),Fe;b(()=>{if(!je()){clearTimeout(Fe),Fe=void 0,Pe(``);return}Fe||=setTimeout(()=>{Fe=void 0,Pe(je()?.text??``)},60)}),C(()=>clearTimeout(Fe)),b(()=>{Ne()&&we()&&requestAnimationFrame(()=>{yt()&&bt(!0)})});let F=x(()=>e().find(e=>e.id===n())),[Ie,Re]=v(null),[ze,Be]=v([]),Ve=x(()=>{let e=new Map,t=new Set,n=new Map;for(let r of i())if(Ad.has(r.type)){if(r.type===`tool_call`){let e=n.get(r.data.callId)??[];e.push(r),n.set(r.data.callId,e)}else if(r.type===`tool_result`){let i=n.get(r.data.callId)?.shift();i&&(e.set(i.id,r),t.add(r.id))}}return{resFor:e,consumed:t}}),He=x(()=>{let{consumed:e}=Ve(),t=i().filter(t=>Ad.has(t.type)?t.type===`tool_result`?!e.has(t.id):t.type!==`message`||String(t.data?.content??``).trim()!==``||String(t.data?.reasoning??``).trim()!==``||!!t.data?.final:!1),n=[];for(let e of t)if(e.type===`sub`){let t=e.data,r=String(t?.type??`message`);if(r===`state`)continue;n.push({...e,type:r,data:{...t?.data,actor:t?.sub}})}else n.push(e);let r=ze().filter(e=>!n.some(t=>t.type===`prompt`&&t.data?.source===`user`&&t.data?.text===e.text&&new Date(t.ts).getTime()>=e.at-1e3)).map(e=>({id:e.id,seq:0,ts:new Date(e.at).toISOString(),session:F()?.session??``,branch:F()?.branch??`br0`,parent:null,type:`prompt`,data:{source:`user`,text:e.text,pending:!0}}));return[...n,...r]}),Ue=()=>$(`/api/config`).then(h).catch(()=>{}),[We,I]=v(!1);ee(()=>{let e=()=>I(!0);window.addEventListener(`teapot:unauthorized`,e),C(()=>window.removeEventListener(`teapot:unauthorized`,e))});let[L,Ge]=v(``),[Ke,qe]=v(!1),Je=``;b(()=>{let t=n(),r=e().find(e=>e.id===t)?.todo??``;t&&t!==Je?(Je=t,qe(!1),Ge(r)):t&&!Ke()&&Ge(r)});let Ye=async()=>{let e=document.getElementById(`todo-notify`)?.checked??!0;if(n())try{await $(`/api/agents/${n()}/todo`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:L(),notify:e})}),qe(!1),Ed(`tasks saved${e&&L().trim()?` & notification queued`:``}`),Ze()}catch(e){Ed(`save failed: ${e.message}`)}},Xe=x(()=>{let e=0,t=0;for(let n of L().split(`
22
+ `)){let r=n.match(/^\s*[-*+] \[([ xX])\]/);r&&(e++,r[1].toLowerCase()===`x`&&t++)}return{total:e,done:t}}),Ze=()=>$(`/api/agents`).then(e=>t(e.agents)).catch(()=>{}),Qe=()=>$(`/api/metrics`).then(d).catch(()=>{}),[$e,et]=v([]),tt=()=>$(`/api/tasks`).then(e=>et(e.tasks)).catch(()=>{}),nt=e=>$e().filter(t=>t.agent===e),[rt,it]=v((()=>{try{return new Set(JSON.parse(localStorage.getItem(`teapot.collapsed`)??`[]`))}catch{return new Set}})()),at=e=>{let t=new Set(rt());t.has(e)?t.delete(e):t.add(e),it(t),localStorage.setItem(`teapot.collapsed`,JSON.stringify([...t]))},ot=x(()=>{let t=e(),n=new Map,r=[];for(let e of t)e.parent&&t.some(t=>t.id===e.parent)?(n.has(e.parent)||n.set(e.parent,[]),n.get(e.parent).push(e)):r.push(e);let i=[],a=(e,t)=>{for(let r of e){i.push({a:r,depth:t});let e=n.get(r.id);e?.length&&!rt().has(r.id)&&a(e,t+1)}};return a(r,0),i}),[st,ct]=v(null),lt=new Map;function ut(e){let t=Array.from({length:e.length});for(let n=0;n<e.length;n++){let r=e[n],i=lt.get(r.id);if(t[n]=i??r,!i&&(lt.set(r.id,r),lt.size>3e3)){let e=lt.keys().next().value;e!==void 0&&lt.delete(e)}}return t}let[dt,ft]=v(!1),[pt,mt]=v(!1);function ht(e){a(t=>{let n=new Map;for(let e of t)n.set(e.id,e);for(let t of ut(e))n.has(t.id)||n.set(t.id,t);return[...n.values()].sort((e,t)=>e.seq-t.seq)})}async function gt(){let e=n(),t=i()[0];if(!(!e||!t||dt()||pt())){ft(!0);try{let n=vt(),r=n?.scrollHeight??0,i=n?.scrollTop??0,a=st(),o=(await $(`/api/agents/${e}/events?limit=300&before=${encodeURIComponent(t.id)}${a?`&branch=${encodeURIComponent(a)}`:``}`)).events??[];if(o.length===0){mt(!0);return}ht(o),requestAnimationFrame(()=>{let e=vt();e&&(e.scrollTop=i+(e.scrollHeight-r))})}catch{}finally{ft(!1)}}}async function _t(e){try{let t=st(),[n,r,i]=await Promise.all([$(`/api/agents/${e}/events?limit=300${t?`&branch=${encodeURIComponent(t)}`:``}`),$(`/api/agents/${e}/branches`),$(`/api/agents/${e}/skills`).catch(()=>({skills:[]}))]);a(e=>{let t=new Map;for(let n of e)t.set(n.id,n);for(let e of ut(n.events))t.set(e.id,e);return[...t.values()].sort((e,t)=>e.seq-t.seq)}),s(n.total??n.events.length),l(r.branches),un(i.skills??[])}catch{}}function vt(){return document.querySelector(`.feed`)}function yt(){let e=vt();return!e||e.scrollHeight-e.scrollTop-e.clientHeight<80}function bt(e=!1){let t=vt();t&&(e||we())&&(t.scrollTop=t.scrollHeight,Ee(0))}async function xt(e,t=!0){r(e),Me(null),ct(null),mt(!1),ft(!1),Be([]),localStorage.setItem(`teapot.session`,e),Ot(e,t),$(`/api/agents/${e}/load`,{method:`POST`}).then(Ze).catch(()=>{}),await _t(e),requestAnimationFrame(()=>bt(!0))}let[St,Ct]=v(!1),wt=null,Tt=null;C(()=>wt?.close());function Et(){let e=location.protocol===`https:`?`wss://`:`ws://`;wt=new WebSocket(`${e}${location.host}/api/ws${Nd()}`),wt.onopen=()=>Ct(!0),wt.onclose=()=>{Ct(!1),setTimeout(Et,1500)},wt.onerror=()=>wt?.close();let t=new Set([`state`,`usage`,`session_start`]),r=null;wt.onmessage=e=>{let a=JSON.parse(e.data);if(a.kind!==`ping`&&a.kind!==`pong`){if(a.kind===`llm-delta`){r={id:a.agentId,at:Date.now()},a.agentId===n()&&Me({text:a.text??``,reasoning:a.reasoning??``});return}a.kind===`event`&&t.has(a.event?.type)||(Tt||=setTimeout(async()=>{if(Tt=null,await Ze(),await Qe(),n()){let e=i().at(-1)?.id,t=o(),a=Date.now();await _t(n()),i().at(-1)?.id!==e&&(r?.id===n()&&r.at>=a||Me(null),yt()?bt(!0):Ee(j()+Math.max(0,o()-t))),Be(e=>e.filter(e=>!i().some(t=>t.type===`prompt`&&t.data?.text===e.text&&new Date(t.ts).getTime()>=e.at-1e3)))}},400))}}}let Dt=()=>decodeURIComponent(location.pathname.split(`/`)[2]??``);function Ot(e,t=!0){let n=`/session/${encodeURIComponent(e)}`;t?history.pushState(null,``,n):history.replaceState(null,``,n)}window.addEventListener(`popstate`,()=>{let t=Dt();t&&e().some(e=>e.id===t)&&t!==n()&&xt(t,!1)}),b(()=>{let e=F();document.title=e?`${e.status===`running`?`▶ `:e.status===`error`?`⚠ `:``}${e.id} · teapot`:`teapot`}),window.addEventListener(`keydown`,e=>{let t=e.target;if(t&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.isContentEditable)){e.key===`Escape`&&t.blur();return}if(e.key===`Escape`){if(g()){_(!1);return}if(S()){te(!1);return}if(Ie()){Re(null);return}if(T()){ie(!1);return}let e=F();if(e?.status===`running`){$(`/api/agents/${e.id}/stop`,{method:`POST`}).then(Ze);return}ne()&&window.innerWidth<=1100&&w(!1);return}if(!(g()||S())){if(e.key===`/`)e.preventDefault(),document.querySelector(`.composer textarea`)?.focus();else if(e.key===`d`)re();else if(e.key===`t`)jt();else if(e.key===`ArrowDown`||e.key===`ArrowUp`){let t=ot().map(e=>e.a);if(t.length===0)return;e.preventDefault();let r=t.findIndex(e=>e.id===n()),i=e.key===`ArrowDown`?Math.min(r+1,t.length-1):Math.max(r-1,0);i!==r&&xt(t[i].id)}}});let[kt,At]=v(localStorage.getItem(`teapot.term`)===`1`),jt=()=>{let e=!kt();At(e),localStorage.setItem(`teapot.term`,e?`1`:`0`)},[R,Mt]=v([]),[Nt,Pt]=v(0),[Ft,It]=v(-1),[Lt,Rt]=v(!1),[zt,Bt]=v(0),[Vt,Ht]=v(Number(localStorage.getItem(`teapot.termH`))||Math.max(220,Math.round(window.innerHeight*.35))),Ut=new Map,Wt=[null,null],Gt=()=>R()[zt()===0?Nt():Ft()]??null;function Kt(e){if(!R()[e])return;let t=zt()===0?Nt:Ft;(zt()===0?Ft:Nt)()===e&&(zt()===0?It(t()):Pt(t())),t()===e||(zt()===0?Pt(e):It(e))}let qt=()=>Jt();function Jt(e){let t=e??n();if(!t)return;let r=R().filter(e=>e.agentId===t).length;if(r>=2){Ed(`max 2 shells per agent (${t})`);return}R().length+1;let i=r===0?{key:`${t}`,agentId:t,title:t}:{key:`${t}#${r+1}`,agentId:t,title:`${t}·${r+1}`};Mt(e=>[...e,i]),zt()===0?Pt(R().length):It(R().length)}function Yt(e){let t=R()[e];if(!t)return;let n=Ut.get(t.key);if(n){n.ro?.disconnect();try{n.ws.close()}catch{}n.term.dispose(),Ut.delete(t.key)}let r=R().filter((t,n)=>n!==e);Mt(r);let i=t=>t===e?-1:t>e?t-1:t;Pt(e=>Math.min(i(e),r.length-1)),It(e=>e===-1?-1:Math.min(i(e),r.length-1))}function Xt(){for(let[,e]of Ut){e.ro?.disconnect();try{e.ws.close()}catch{}e.term.dispose()}Ut.clear()}function Zt(e,t){let n=Ut.get(e.key);if(n)n.el.parentElement!==t&&(t.appendChild(n.el),setTimeout(()=>{try{n.fit()}catch{}},30));else{let r=document.createElement(`div`);r.className=`termsession`,t.appendChild(r);let i=new Ec({cursorBlink:!0,fontSize:12.5,fontFamily:`ui-monospace, Menlo, Consolas, monospace`,theme:Od()}),a=new kc;i.loadAddon(a),i.open(r);let o=location.protocol===`https:`?`wss://`:`ws://`,s=new WebSocket(`${o}${location.host}/api/agents/${e.agentId}/term${Nd()}`);s.onmessage=e=>{let t=JSON.parse(e.data);t.kind===`data`?i.write(t.data):t.kind===`exit`&&i.write(`\r\n\x1b[2m[terminal exited ${t.code??``}]\x1b[0m\r\n`)},i.onData(e=>{s.readyState===WebSocket.OPEN&&s.send(JSON.stringify({kind:`input`,data:e}))});let c={cols:0,rows:0},l=[],u=()=>{try{a.fit()}catch{}(i.cols!==c.cols||i.rows!==c.rows)&&s.readyState===WebSocket.OPEN&&(c={cols:i.cols,rows:i.rows},s.send(JSON.stringify({kind:`resize`,cols:i.cols,rows:i.rows})))},d=new ResizeObserver(()=>{l[0]&&clearTimeout(l[0]),l[0]=setTimeout(u,250)});d.observe(r),setTimeout(u,60),n={el:r,term:i,fit:a,ws:s,ro:d},Ut.set(e.key,n)}return n}function Qt(e){let t=Wt[e];if(!t)return;let n=R()[e===0?Nt():Ft()];if(!n){t.replaceChildren();return}let r=Zt(n,t);zt()===(e===0?0:1)&&requestAnimationFrame(()=>{try{r.fit(),r.term.focus()}catch{}})}b(()=>{R(),Lt(),Nt(),Ft(),Vt(),requestAnimationFrame(()=>{Qt(0),Lt()&&Qt(1)})}),b(()=>{if(!kt())return;let e=n();if(e){if(!R().some(t=>t.agentId===e)&&R().length===0)Jt(e);else if(!R().some(t=>t.agentId===e)){let t=R().findIndex(t=>t.agentId===e);t>=0&&Kt(t)}}});let $t=e=>{e.preventDefault();let t=e.clientY,n=Vt(),r=e=>{let r=Math.min(Math.max(n-(e.clientY-t),140),Math.round(window.innerHeight*.85));Ht(r)},i=()=>{window.removeEventListener(`pointermove`,r),window.removeEventListener(`pointerup`,i),localStorage.setItem(`teapot.termH`,String(Vt())),requestAnimationFrame(()=>{Qt(0),Lt()&&Qt(1)})};window.addEventListener(`pointermove`,r),window.addEventListener(`pointerup`,i)},en=()=>{let e=!Lt();if(Rt(e),e&&Ft()===-1){let e=R().findIndex((e,t)=>t!==Nt());It(e>=0?e:-1)}};C(Xt);let tn=e=>t=>{Wt[e]=t};ee(()=>{Ue(),Ze().then(()=>{let t=Dt()||localStorage.getItem(`teapot.session`)||``,n=e().find(e=>e.id===t)??e()[0];n&&xt(n.id,!1)}),Qe(),tt(),B(),Et();let t=setInterval(()=>{Qe(),tt()},3e4);C(()=>clearInterval(t))});let z=[{cmd:`/start`,desc:`start working toward the goal`},{cmd:`/stop`,desc:`interrupt the running agent`},{cmd:`/fork`,desc:`branch the conversation here`},{cmd:`/goal`,desc:`/goal <text> — set goal & notify the agent`},{cmd:`/compact`,desc:`force a context compaction now`},{cmd:`/skill`,desc:`/skill <name> — force-load a skill and follow it`}],[nn,rn]=v([]),B=()=>$(`/api/personas`).then(e=>rn(e.personas)).catch(()=>{}),[an,on]=v(!1),sn=()=>{let e=f().match(/^@([A-Za-z0-9._-]*)$/);return e?e[1].toLowerCase():null},V=()=>{let t=sn();return t===null?[]:[...nn().map(e=>({key:e.key,label:`${e.label} — spawns a sub-agent`,kind:`persona`})),...e().filter(e=>e.id!==n()).map(e=>({key:e.id,label:`${e.status} — send directly`,kind:`agent`}))].filter(e=>e.key.toLowerCase().startsWith(t))},cn=new Set([`start`,`stop`,`fork`,`compact`]),[ln,un]=v([]),[H,dn]=v(-1),fn=()=>{let e=f();if(!e.startsWith(`/`)||e.includes(`
23
+ `))return[];let t=e.match(/^\/([a-z]*)(?:\s+(.*))?$/i);if(!t)return[];let n=t[1].toLowerCase(),r=(t[3]??``).trim();if(!r&&n!==`skill`){let e=z.filter(e=>e.cmd.slice(1).startsWith(n));return e.find(e=>e.cmd.slice(1)===n)&&cn.has(n)?[]:e.map(e=>({insert:e.cmd+` `,title:e.desc}))}if(n===`skill`){let e=ln().filter(e=>e.name.toLowerCase().startsWith(r.toLowerCase()));return e.length===1&&e[0].name.toLowerCase()===r.toLowerCase()?[]:e.map(e=>({insert:`/skill ${e.name} `,title:e.description||`(bundled skill)`}))}return[]},pn,mn=()=>{pn&&(pn.style.height=`auto`,pn.style.height=`${Math.min(pn.scrollHeight,160)}px`)};b(()=>{f(),mn()});let hn=async(e,t)=>{let r=t??n();if(r)try{await $(`/api/agents/${r}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:e,start:!0})}),Be(t=>[...t,{id:`@p${Date.now()}${Math.random().toString(36).slice(2,6)}`,text:e,at:Date.now()}]),requestAnimationFrame(()=>bt(!0))}catch(t){p(e),console.error(`send failed:`,t)}},gn=async t=>{t.preventDefault();let r=n(),i=f().trim();if(!(!r||!i)){if(i.startsWith(`@`)){let t=i.indexOf(` `),r=(t===-1?i.slice(1):i.slice(1,t)).toLowerCase(),a=t===-1?``:i.slice(t+1).trim(),o=nn().some(e=>e.key.toLowerCase()===r),s=e().some(e=>e.id.toLowerCase()===r);try{if(o){if(!a){Ed(`usage: @${r} <task>`);return}Ed(`🧩 spawned ${(await $(`/api/agents/${n()}/spawn`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({persona:r,task:a,context:an()?`fork`:`none`})})).id}${an()?` (forked context)`:``}`),Ze(),p(``)}else if(s){if(!a){Ed(`usage: @${r} <message>`);return}await $(`/api/agents/${encodeURIComponent(r)}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:a,start:!0})}),Ed(`→ delivered to @${r}`),p(``)}else{Ed(`unknown @${r} — personas: ${nn().map(e=>e.key).join(`, `)||`(none)`}`);return}}catch(e){Ed(`@${r} failed: ${e.message}`)}return}if(i.startsWith(`/`)){let e=i.indexOf(` `),t=(e===-1?i.slice(1):i.slice(1,e)).toLowerCase(),n=e===-1?``:i.slice(e+1).trim();if(t===`goal`&&!n){p(`/goal `);return}if(t===`skill`&&!n){p(`/skill `);return}p(``),await _n(t,n);return}p(``),await hn(i)}},_n=async(e,t)=>{let r=n();if(!r)return;let i=(e,t)=>$(`/api/agents/${r}${e}`,{method:`POST`,headers:{"content-type":`application/json`},...t===void 0?{}:{body:JSON.stringify(t)}}).then(Ze);try{if(e===`start`)await i(`/start`);else if(e===`stop`)await i(`/stop`);else if(e===`fork`)await i(`/fork`,{}),await xt(r);else if(e===`compact`)Ed((await i(`/compact`))?.ran?`context compacted`:`nothing to compact yet`);else if(e===`goal`){if(!t){Ed(`usage: /goal <text>`);return}await i(`/goal`,{text:t,notify:!0}),Ed(`goal saved & notification queued`)}else if(e===`skill`){if(!t){Ed(`usage: /skill <name>`);return}await hn(`[harness] Force-load and follow the skill "${t}" now: call load_skill("${t}") and execute its playbook for the current task.`),Ed(`skill "${t}" dispatched`)}else Ed(`unknown command "${e}" — /start /stop /fork /goal /skill /compact`)}catch(t){Ed(`/${e} failed: ${t.message}`)}},vn=e=>()=>n()&&$(`/api/agents/${n()}${e}`,{method:`POST`}).then(Ze),yn=async e=>{e.preventDefault();let t=document.getElementById(`goal-input`),r=document.getElementById(`goal-notify`)?.checked??!0;!n()||!t.value.trim()||(await $(`/api/agents/${n()}/goal`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:t.value,notify:r})}),t.value=``,Ze())};return[D(k,{get when(){return m()?.needsSetup},fallback:null,get children(){return D(Jd,{onDone:()=>location.reload()})}}),D(k,{get when(){return We()},get children(){var e=Ac();return e.firstChild.firstChild.nextSibling.addEventListener(`submit`,e=>{e.preventDefault();let t=document.getElementById(`pw-input`);localStorage.setItem(`teapot.token`,t.value),location.reload()}),e}}),D(k,{get when(){return!m()?.needsSetup},get children(){var o=Tl(),s=o.firstChild,l=s.firstChild,d=l.firstChild,h=d.nextSibling.firstChild,g=h.nextSibling,v=g.nextSibling,b=l.nextSibling,x=b.nextSibling,S=x.firstChild.firstChild.nextSibling;S.firstChild;var ee=x.nextSibling,C=s.nextSibling,w=C.nextSibling;return h.$$click=()=>{Ue(),_(!0)},g.$$click=()=>ie(!T()),v.$$click=()=>{Ue(),te(!0)},P(s,D(k,{get when(){return T()},get children(){var e=Mc(),t=e.firstChild.firstChild;return t.addEventListener(`change`,e=>{let t=e.currentTarget.checked;se(t),localStorage.setItem(`teapot.theme.auto`,t?`1`:`0`)}),P(e,D(k,{get when(){return!E()},get fallback(){return[(()=>{var e=El(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>{le(e.currentTarget.value),localStorage.setItem(`teapot.theme.light`,e.currentTarget.value)}),P(t,D(O,{get each(){return Dd.filter(e=>e.mode===`light`)},children:e=>(()=>{var t=Ol();return P(t,()=>e.label),y(()=>t.value=e.key),t})()})),y(()=>t.value=ce()),e})(),(()=>{var e=Dl(),t=e.firstChild.nextSibling;return t.addEventListener(`change`,e=>{de(e.currentTarget.value),localStorage.setItem(`teapot.theme.dark`,e.currentTarget.value)}),P(t,D(O,{get each(){return Dd.filter(e=>e.mode===`dark`)},children:e=>(()=>{var t=Ol();return P(t,()=>e.label),y(()=>t.value=e.key),t})()})),y(()=>t.value=ue()),e})()]},get children(){var e=jc();return P(e,D(O,{each:Dd,children:e=>(()=>{var t=kl(),n=t.firstChild;return t.$$click=()=>{oe(e.key),localStorage.setItem(`teapot.theme`,e.key)},P(n,()=>e.sw.map(e=>(()=>{var t=Al();return ke(t,`background`,e),t})())),P(t,()=>e.label,null),y(n=>{var r=`themebtn`+(ae()===e.key?` on`:``),i=`${e.label} (${e.mode})`;return r!==n.e&&N(t,n.e=r),i!==n.t&&M(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()})),e}}),null),y(()=>t.checked=E()),e}}),b),P(b,D(O,{get each(){return ot()},children:({a:t,depth:r})=>(()=>{var i=Fl(),a=i.firstChild,o=a.nextSibling;return i.$$click=()=>xt(t.id),P(i,D(k,{get when(){return e().some(e=>e.parent===t.id)},get fallback(){return Il()},get children(){var e=jl();return e.$$click=e=>{e.stopPropagation(),at(t.id)},P(e,()=>rt().has(t.id)?`▸`:`▾`),y(()=>M(e,`title`,rt().has(t.id)?`expand sub-agents`:`collapse sub-agents`)),e}}),a),P(o,()=>t.id),P(i,D(k,{get when(){return t.parent},get children(){return Ml()}}),null),P(i,D(k,{get when(){return nt(t.id).length>0},get children(){var e=Nl();return y(()=>M(e,`title`,nt(t.id).map(e=>`${e.id}: ${e.schedule}`).join(`
24
+ `))),e}}),null),P(i,D(k,{get when(){return t.goal.status===`done`},get children(){return Pl()}}),null),y(e=>{var o=`agent-item`+(t.id===n()?` sel`:``)+(r>0?` sub-row`:``),s=r>0?`padding-left:${10+r*14}px`:``,c=t.parent?`sub-agent of @${t.parent}`:void 0,l=`dot ${t.status}`;return o!==e.e&&N(i,e.e=o),e.t=Oe(i,s,e.t),c!==e.a&&M(i,`title`,e.a=c),l!==e.o&&N(a,e.o=l),e},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()})),P(S,`0.14.1`,null),P(ee,D(k,{get when(){return u()},get children(){return[`master rss `,A(()=>u().rssMb),`MB · heap `,A(()=>u().heapUsedMb),`MB`,Nc(),`load1 `,A(()=>u().loadavg1),` · up `,A(()=>Math.floor(u().uptimeSec/60)),`m`]}})),P(C,D(k,{get when(){return F()},get fallback(){return Ll()},get children(){return[(()=>{var e=Lc(),t=e.firstChild.nextSibling,n=t.nextSibling,r=n.nextSibling,i=r.firstChild,a=i.nextSibling,o=a.nextSibling.nextSibling,s=o.nextSibling.nextSibling;s.nextSibling;var c=r.nextSibling,l=c.firstChild,u=l.nextSibling;return P(t,()=>F().id),P(n,()=>F().status),P(e,D(k,{get when(){return(F().pendingPrompts??0)>0},get children(){var e=Pc(),t=e.firstChild.nextSibling;return t.nextSibling,P(e,()=>F().pendingPrompts,t),y(()=>M(e,`title`,`${F().pendingPrompts} prompt(s) waiting — the agent picks them up at the next turn boundary`)),e}}),r),P(e,D(k,{get when(){return nt(F().id).length>0},get children(){var e=Fc();return e.firstChild,P(e,()=>nt(F().id).length,null),y(()=>M(e,`title`,`scheduled tasks:\n${nt(F().id).map(e=>`${e.schedule} · ${e.id}${e.forked?` (forked)`:``}`).join(`
25
+ `)}`)),e}}),r),P(r,()=>F().model,i),P(r,()=>F().session,a),P(r,()=>F().branch,o),P(r,()=>F().stats.turns,s),P(r,()=>F().stats.toolCalls,null),P(c,D(k,{get when(){return F().statusReason},get children(){var e=Ic();return y(()=>M(e,`title`,F().statusReason)),e}}),l),l.$$click=jt,u.$$click=re,y(()=>N(n,`badge ${F().status}`)),e})(),(()=>{var e=Uc();return e.addEventListener(`scroll`,e=>{let t=e.currentTarget,r=yt();r&&j()&&Ee(0),Te(r),t.scrollTop<=4&&n()&&!dt()&&!pt()&&i().length>0&&gt()}),P(e,D(k,{get when(){return A(()=>!!pt())()&&He().length>0},get children(){return Rc()}}),null),P(e,D(k,{get when(){return dt()},get children(){return zc()}}),null),P(e,D(k,{get when(){return He().length>0},get fallback(){return Rl()},get children(){return[D(O,{get each(){return He()},children:(e,t)=>D(Id,{e,get prev(){return He()[t()-1]},get res(){return Ve().resFor.get(e.id)},onOption:e=>void hn(e),get onEdit(){return e.type===`prompt`&&e.data?.source===`user`?()=>Re({eventId:e.id,text:String(e.data?.text??``)}):void 0}})}),D(k,{get when(){return je()},get children(){var e=Hc(),t=e.firstChild.nextSibling;return t.firstChild,P(t,D(k,{get when(){return je().reasoning},get children(){var e=Bc(),t=e.firstChild.nextSibling;return P(t,()=>je().reasoning),e}}),null),P(t,D(k,{get when(){return Ne()},get fallback(){return zl()},get children(){var e=Vc();return y(()=>e.innerHTML=Le(Ne()+`▍`)),e}}),null),e}})]}}),null),e})(),D(k,{get when(){return!we()||j()>0},get children(){var e=Wc();return e.firstChild,e.$$click=()=>bt(!0),P(e,(()=>{var e=A(()=>j()>0);return()=>e()?`${j()} new message${j()>1?`s`:``}`:`jump to present`})(),null),e}}),D(k,{get when(){return kt()},get children(){var t=Yc(),n=t.firstChild,r=n.nextSibling,i=r.firstChild,a=i.firstChild,o=i.nextSibling.firstChild,s=o.nextSibling,c=s.nextSibling,l=r.nextSibling,u=l.firstChild;n.$$dblclick=()=>{Ht(Math.max(220,Math.round(window.innerHeight*.35))),localStorage.setItem(`teapot.termH`,String(Vt()))},n.$$pointerdown=$t,P(i,D(O,{get each(){return R()},children:(e,t)=>(()=>{var n=Bl(),r=n.firstChild.nextSibling;return n.$$click=()=>Kt(t()),P(n,()=>e.title,r),r.$$click=e=>{e.stopPropagation(),Yt(t())},y(r=>{var i=`termtab`+(zt()===0&&Nt()===t()?` active`:``)+(Lt()&&zt()===1&&Ft()===t()?` active`:``),a=`${e.title} — click to show in focused pane`;return i!==r.e&&N(n,r.e=i),a!==r.t&&M(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})()}),a),a.$$click=qt,P(o,(()=>{var t=A(()=>!!Gt());return()=>t()?e().find(e=>e.id===Gt().agentId)?.workspace.split(`/`).filter(Boolean).pop():F()?.workspace})()),s.$$click=en,c.$$click=jt;var d=tn(0);return typeof d==`function`&&Ae(d,u),u.$$pointerdown=()=>Bt(0),P(u,D(k,{get when(){return!Gt()||zt()===0&&Nt()===-1},get children(){return Gc()}})),P(l,D(k,{get when(){return Lt()},get children(){return[Kc(),(()=>{var e=Jc(),t=tn(1);return typeof t==`function`&&Ae(t,e),e.$$pointerdown=()=>Bt(1),P(e,D(k,{get when(){return Ft()===-1||R().length<=Ft()},get children(){return qc()}})),y(()=>e.classList.toggle(`focused`,zt()===1)),e})()]}}),null),y(e=>{var n=`${Vt()}px`,r=Lt()?`single pane`:`split panes (50/50)`,i=!!Lt(),a=zt()===0;return n!==e.e&&ke(t,`height`,e.e=n),r!==e.t&&M(s,`title`,e.t=r),i!==e.a&&l.classList.toggle(`split`,e.a=i),a!==e.o&&u.classList.toggle(`focused`,e.o=a),e},{e:void 0,t:void 0,a:void 0,o:void 0}),t}}),(()=>{var e=Qc(),t=e.firstChild,n=t.firstChild,r=n.nextSibling,i=t.nextSibling;P(e,D(k,{get when(){return fn().length>0},get children(){var e=Xc();return P(e,D(O,{get each(){return fn()},children:(e,t)=>(()=>{var n=Vl(),r=n.firstChild,i=r.nextSibling;return n.$$click=()=>{p(e.insert),dn(-1)},P(r,()=>e.insert.trim()),P(i,()=>e.title),y(r=>{var i=`cmdrow`+(t()===H()?` active`:``),a=e.title;return i!==r.e&&N(n,r.e=i),a!==r.t&&M(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})()})),e}}),t),P(e,D(k,{get when(){return V().length>0},get children(){var e=Xc();return P(e,D(O,{get each(){return V()},children:e=>(()=>{var t=Hl(),n=t.firstChild;n.firstChild;var r=n.nextSibling;return t.$$click=()=>{p(`@${e.key} `),dn(-1)},P(n,()=>e.key,null),P(r,()=>e.label),y(()=>M(t,`title`,e.label)),t})()})),e}}),t),t.addEventListener(`submit`,gn),n.$$keydown=e=>{let t=fn();if(t.length>0&&e.key===`ArrowDown`){e.preventDefault(),dn(e=>Math.min(e+1,t.length-1));return}if(t.length>0&&e.key===`ArrowUp`){e.preventDefault(),dn(e=>Math.max(e-1,0));return}if(t.length>0&&(e.key===`Tab`||e.key===`Enter`)&&!e.shiftKey&&H()>=0){e.preventDefault(),p(t[H()].insert),dn(-1);return}if(e.key===`Escape`&&t.length>0){dn(-1);return}e.key===`Enter`&&!e.shiftKey&&!e.isComposing&&(e.preventDefault(),gn(e))},n.$$input=e=>{p(e.currentTarget.value),dn(0),mn()};var a=pn;return typeof a==`function`?Ae(a,n):pn=n,P(t,D(k,{get when(){return A(()=>!!f().startsWith(`@`))()&&f().includes(` `)},get children(){var e=Zc(),t=e.firstChild;return t.addEventListener(`change`,e=>on(e.currentTarget.checked)),y(()=>t.checked=an()),e}}),r),P(i,()=>Cd()||`enter send · shift+enter newline · ↑↓ sessions · / commands & focus · t terminal · d panel · esc interrupt · messages sent while the agent works queue up and land at the next turn boundary`),y(()=>M(n,`placeholder`,`message #${F().id} — / for commands`)),y(()=>n.value=f()),e})()]}})),P(w,D(k,{get when(){return F()},get children(){return[$c(),(()=>{var e=el(),t=e.firstChild,n=t.firstChild.nextSibling,r=n.nextSibling,i=t.nextSibling,a=i.firstChild.nextSibling,o=i.nextSibling.firstChild.nextSibling,s=o.firstChild;return P(n,()=>F().id),P(r,()=>F().status),P(a,()=>F().workspace),P(o,()=>F().session,s),P(o,()=>F().branch,null),y(e=>{var t=`badge ${F().status}`,n=F().workspace;return t!==e.e&&N(r,e.e=t),n!==e.t&&M(a,`title`,e.t=n),e},{e:void 0,t:void 0}),e})(),D(Gd,{get agentId(){return F().id},get workspace(){return F().workspace}}),tl(),(()=>{var e=rl(),t=e.firstChild,r=t.nextSibling,i=r.firstChild,a=i.nextSibling,o=a.nextSibling,s=r.nextSibling;return s.firstChild,t.addEventListener(`change`,e=>{ge(e.currentTarget.value),Se(e.currentTarget.value)}),P(t,D(O,{get each(){return xe()},children:e=>(()=>{var t=Ol();return t.value=e,P(t,e,null),P(t,()=>e===m().defaultProvider?` ★`:``,null),t})()})),i.$$input=e=>ve(e.currentTarget.value),P(a,D(O,{get each(){return ye()},children:e=>(()=>{var t=Ol();return y(()=>t.value=e.id),t})()})),o.$$click=async e=>{if(!n())return;let t=e.currentTarget;t.disabled=!0;try{await $(`/api/agents/${n()}/model`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({provider:he(),model:_e().trim()||void 0,contextWindowTokens:ye().find(e=>e.id===(_e().trim()||void 0))?.contextLength})}),t.textContent=`✓ applied`,Ze()}catch(e){alert(`model switch failed: ${e.message}`)}finally{setTimeout(()=>{t.textContent=`apply`,t.disabled=!1},1200)}},P(s,()=>F().model,null),P(s,D(k,{get when(){return ye().length},get children(){return[` · `,A(()=>ye().length),` models loaded`]}}),null),P(e,D(k,{get when(){return Ce()},get children(){var e=nl();return P(e,Ce),e}}),null),y(()=>M(i,`placeholder`,F().model)),y(()=>t.value=he()),y(()=>i.value=_e()),e})(),il(),(()=>{var i=sl(),o=i.firstChild,s=o.nextSibling;return P(i,D(k,{get when(){return F().status===`running`},get fallback(){return(()=>{var e=Ul();return De(e,`click`,vn(`/start`),!0),e})()},get children(){var e=al();return De(e,`click`,vn(`/stop`),!0),e}}),o),o.$$click=()=>$(`/api/agents/${F().id}/fork`,{method:`POST`,headers:{"content-type":`application/json`},body:`{}`}).then(()=>xt(F().id)),s.$$click=async()=>{let i=n();if(!i||!confirm(`remove agent ${i}? (log is kept)`))return;await $(`/api/agents/${i}`,{method:`DELETE`}).catch(()=>{});let o=e().filter(e=>e.id!==i);t(o),o[0]?xt(o[0].id):(r(null),a([]))},P(i,D(k,{get when(){return e().some(e=>e.parent===n())},get children(){var e=ol();return e.$$click=async()=>{n()&&(Ed(`stopped: ${((await $(`/api/agents/${n()}/stop-children`,{method:`POST`})).stopped??[]).join(`, `)||`(none)`}`),Ze())},e}}),null),i})(),(()=>{var e=cl(),t=e.firstChild.firstChild;return t.addEventListener(`change`,e=>{n()&&$(`/api/agents/${n()}/auto-continue`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({value:e.currentTarget.checked})}).then(Ze)}),y(()=>t.checked=F().autoContinue??!0),e})(),(()=>{var e=ll(),t=e.firstChild.nextSibling;return P(t,()=>F().goal.status),y(()=>N(t,`badge ${F().goal.status===`active`?`running`:F().goal.status}`)),e})(),(()=>{var e=ul();return e.firstChild,P(e,D(O,{each:[`active`,`done`,`paused`],children:e=>(()=>{var t=Wl();return t.$$click=()=>{n()&&$(`/api/agents/${n()}/goal`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({status:e})}).then(Ze)},M(t,`title`,e===`active`?`agent keeps working toward the goal (with auto-continue)`:e===`done`?`mark achieved — auto-continue stops`:`parked on purpose — resume by setting active again`),P(t,e===`active`?`▶ working`:e===`done`?`✓ done`:`⏸ paused`),y(n=>{var r=`goalstate`+(F().goal.status===e?` on ${e}`:``),i=F().goal.status===e;return r!==n.e&&N(t,n.e=r),i!==n.t&&(t.disabled=n.t=i),n},{e:void 0,t:void 0}),t})()}),null),e})(),D(k,{get when(){return F().goal.text},get fallback(){return Gl()},get children(){var e=dl(),t=e.firstChild;return y(()=>t.innerHTML=Le(String(F().goal.text))),e}}),fl(),(()=>{var e=pl();return e.addEventListener(`submit`,yn),e})(),(()=>{var e=hl(),t=e.firstChild.nextSibling;return P(e,D(k,{get when(){return Xe().total>0},get children(){var e=ml(),t=e.firstChild,n=t.nextSibling;return n.nextSibling,P(e,()=>Xe().done,t),P(e,()=>Xe().total,n),y(t=>Oe(e,Xe().done===Xe().total?`color:var(--ok)`:`color:var(--warn)`,t)),e}}),t),e})(),D(k,{get when(){return Xe().total>0},get children(){var e=gl(),t=e.firstChild;return y(e=>{var n=`barfill `+(Xe().done===Xe().total?``:`warn`),r=`${Math.round(Xe().done/Xe().total*100)}%`;return n!==e.e&&N(t,e.e=n),r!==e.t&&ke(t,`width`,e.t=r),e},{e:void 0,t:void 0}),e}}),(()=>{var e=_l();return e.$$input=e=>{Ge(e.currentTarget.value),qe(!0)},y(()=>e.value=L()),e})(),(()=>{var e=vl(),t=e.firstChild.nextSibling;return t.$$click=Ye,e})(),yl(),D(k,{get when(){return F().latestProgress},get fallback(){return Kl()},children:e=>(()=>{var t=Zl(),n=t.firstChild,r=n.firstChild.nextSibling,i=n.nextSibling;return P(r,()=>e().doing),P(t,D(k,{get when(){return e().recent},get children(){var t=ql(),n=t.firstChild.nextSibling;return P(n,()=>e().recent),t}}),i),P(t,D(k,{get when(){return e().problems},get children(){var t=Jl(),n=t.firstChild.nextSibling;return P(n,()=>e().problems),t}}),i),P(t,D(k,{get when(){return e().next},get children(){var t=Yl(),n=t.firstChild.nextSibling;return P(n,()=>e().next),t}}),i),P(t,D(k,{get when(){return e().goalStatus},get children(){var t=Xl(),n=t.firstChild.nextSibling;return P(n,()=>e().goalStatus),t}}),i),P(i,()=>zd(e().ts)),t})()}),bl(),(()=>{var e=Sl(),t=e.firstChild,r=t.firstChild,i=r.firstChild.nextSibling,a=r.nextSibling,o=a.firstChild.nextSibling,s=a.nextSibling.firstChild.nextSibling,c=t.nextSibling,l=c.firstChild.nextSibling,u=l.firstChild,d=u.nextSibling;return d.nextSibling,P(i,()=>F().stats.turns),P(o,()=>F().stats.toolCalls),P(s,()=>F().stats.compactions??0),P(l,()=>Bd(F().stats.inputTokens),u),P(l,()=>Bd(F().stats.outputTokens),d),P(c,D(k,{get when(){return(F().stats.cachedInputTokens??0)>0},get children(){var e=xl(),t=e.firstChild.nextSibling;return t.nextSibling,P(e,()=>Math.round(F().stats.cachedInputTokens/Math.max(1,F().stats.inputTokens)*100),t),y(()=>M(e,`title`,`${Bd(F().stats.cachedInputTokens)} tokens were served from the provider's prompt cache — billed far cheaper than fresh input`)),e}}),null),P(e,D(k,{get when(){return F().ctx},get fallback(){return Ql()},children:e=>{let t=ye().find(e=>e.id===F().model),r=e().window||t?.contextLength||0,i=r?Math.min(999,Math.round(e().usedTokens/r*100)):0,a=r?i>=85?`crit`:i>=70?`warn`:`ok`:``,o=r?Math.round(r*.75):0,s=e().compactAt,c=!s||s>=r;return(()=>{var t=nu(),l=t.firstChild,u=l.firstChild.nextSibling,d=u.firstChild.nextSibling;d.nextSibling;var f=l.nextSibling,p=f.firstChild.nextSibling,m=p.firstChild,h=p.nextSibling,g=f.nextSibling,_=g.firstChild.firstChild,v=g.nextSibling,b=v.firstChild.nextSibling;return b.nextSibling,P(u,()=>Bd(e().usedTokens),d),P(l,D(k,{when:r,get children(){var e=$l(),t=e.firstChild;return N(e,`pill ${a}`),P(e,i,t),P(e,()=>Bd(r),null),e}}),null),P(t,D(k,{when:r,get children(){var e=eu(),t=e.firstChild;return N(t,`barfill ${a}`),y(e=>ke(t,`width`,`${Math.min(100,i)}%`)),e}}),f),P(p,()=>Bd(c?o:s),m),P(h,c?` (75% of window)`:` (manual override)`),P(t,D(k,{when:r,get children(){var t=tu(),n=t.firstChild;return N(n,`barfill ${a}`),y(t=>ke(n,`width`,`${Math.min(100,Math.round(e().usedTokens/o*100))}%`)),t}}),g),_.addEventListener(`change`,e=>{n()&&$(`/api/agents/${n()}/auto-compact`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({value:e.currentTarget.checked})}).then(Ze)}),P(v,()=>Bd(e().compactAt),b),y(()=>_.checked=F().autoCompact!==!1),t})()}}),null),e})(),Cl(),D(O,{get each(){return c()},children:e=>(()=>{var t=ru(),r=t.firstChild,i=r.nextSibling,a=i.firstChild;return t.$$click=()=>{let t=st()===e.branch?null:e.branch;ct(t),n()&&_t(n())},P(r,()=>e.branch,null),P(r,()=>e.branch===F().branch?` (current)`:``,null),P(i,()=>e.events,a),y(n=>{var r=`branch-row`+(e.branch===F().branch||e.branch===st()?` cur`:``),i=e.branch===st()?`click to show all branches again`:`show only ${e.branch}`;return r!==n.e&&N(t,n.e=r),i!==n.t&&M(t,`title`,n.t=i),n},{e:void 0,t:void 0}),t})()}),wl(),D(k,{get when(){return $e().length>0},get fallback(){return iu()},get children(){return D(O,{get each(){return $e()},children:e=>(()=>{var t=ou(),r=t.firstChild,i=r.firstChild,a=i.nextSibling;a.firstChild;var o=r.nextSibling,s=o.firstChild,c=o.nextSibling;return t.$$click=()=>xt(e.agent),P(i,()=>e.id),P(a,()=>e.agent,null),P(r,D(k,{get when(){return e.forked},get children(){return au()}}),null),P(o,()=>e.schedule,s),P(o,(()=>{var t=A(()=>!!e.next);return()=>t()?zd(e.next):`—`})(),null),P(o,(()=>{var t=A(()=>!!e.last);return()=>t()?` · last ${zd(e.last)}`:` · never ran`})(),null),P(c,()=>Vd(e.prompt,90)),y(r=>{var i=`sched-row`+(e.agent===n()?` cur`:``),a=`${Vd(e.prompt,200)}\nclick to open #${e.agent}`;return i!==r.e&&N(t,r.e=i),a!==r.t&&M(t,`title`,r.t=a),r},{e:void 0,t:void 0}),t})()})}})]}})),y(e=>{var t=`layout`+(ne()?``:` right-hidden`),n=`conn`+(St()?` ok`:``),r=St()?`live (websocket)`:`reconnecting…`,i=`rightbar`+(ne()?` open`:``);return t!==e.e&&N(o,e.e=t),n!==e.t&&N(d,e.t=n),r!==e.a&&M(d,`title`,e.a=r),i!==e.o&&N(w,e.o=i),e},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),D(k,{get when(){return g()},get children(){return D(Wd,{get providers(){return Object.keys(m().providers??{})},onClose:()=>_(!1),onCreated:e=>{_(!1),Ze(),xt(e)}})}}),D(k,{get when(){return S()},get children(){return D(Yd,{get cfg(){return m()},onClose:()=>te(!1),onSaved:()=>{Ue(),tt()}})}}),D(k,{get when(){return Ie()},fallback:null,children:e=>{let t=()=>i().findIndex(t=>t.id===e().eventId),r=()=>Math.max(0,i().length-t()-1),[a,o]=v(r()>0?`summarize`:`discard`);return D(Ud,{title:`edit prompt — forks the conversation`,onClose:()=>Re(null),get children(){var t=cu(),i=t.firstChild,s=i.nextSibling,c=s.firstChild;return t.addEventListener(`submit`,async t=>{t.preventDefault();let r=document.getElementById(`edit-text`);try{await $(`/api/agents/${n()}/edit-prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({eventId:e().eventId,text:r.value,tail:a()})}),Re(null),Ze();let t=n();t&&await xt(t)}catch(e){alert(`edit failed: ${e.message}`)}}),P(t,D(k,{get when(){return r()>0},get children(){var e=su(),t=e.firstChild,n=t.firstChild,i=t.nextSibling,s=i.firstChild,c=i.nextSibling.firstChild;return P(t,r,n),s.addEventListener(`change`,()=>o(`summarize`)),c.addEventListener(`change`,()=>o(`discard`)),y(()=>s.checked=a()===`summarize`),y(()=>c.checked=a()===`discard`),e}}),s),c.$$click=()=>Re(null),y(()=>i.value=e().text),t}})}})]}function Fd(e){let t=e.e,n=e.res,r=t.data??{},i=String(r.name??`tool`),a=()=>n?String(n.data?.result??``):``,o=i,s=``,c=(()=>{var e=lu();return P(e,()=>Rd(JSON.stringify(r.args??{},null,1),2e3)),e})(),l=e=>String(r.args?.[e]??``),u=(e,t=1500)=>(()=>{var n=uu();return P(n,()=>Rd(e,t)),n})(),d=(e=4e3)=>n?[A(()=>u(a(),e)),(()=>{var e=du(),t=e.firstChild;return P(e,()=>n.data?.durationMs,t),P(e,()=>n.data?.ok===!1?` · FAILED`:``,null),P(e,D(Hd,{get text(){return a()}}),null),e})()]:fu();try{switch(i){case`bash`:{let e=l(`command`);o=`$ `+Vd(e,96),s=l(`timeout_ms`)?`timeout ${Math.round(Number(l(`timeout_ms`))/1e3)}s`:``,c=[A(()=>A(()=>e!==o.slice(2))()?u(e,800):null),A(()=>d(6e3))];break}case`read_file`:{o=l(`path`)||`(no path)`;let e=[];l(`pattern`)&&e.push(`grep /${Vd(l(`pattern`),40)}/`),Number(r.args?.offset)<0?e.push(`last ${-Number(r.args.offset)} lines`):r.args?.offset&&e.push(`from L${r.args.offset}`),r.args?.limit&&e.push(`≤${r.args.limit} lines`),s=e.join(` · `),c=d(6e3);break}case`write_file`:{let e=String(r.args?.content??``);o=l(`path`)||`(no path)`,s=`${e.length} bytes`,c=[A(()=>u(e)),n?(()=>{var e=pu();return P(e,()=>Vd(a(),160)),e})():mu()];break}case`edit_file`:o=l(`path`)||`(no path)`,s=r.args?.replace_all===!0?`replace all`:`unique spot`,c=[(()=>{var e=hu();return P(e,()=>Rd(`- `+l(`old_text`),900)),e})(),(()=>{var e=gu();return P(e,()=>`+ `+Rd(l(`new_text`),900)),e})(),n?(()=>{var e=_u(),t=e.firstChild,r=t.nextSibling;return r.nextSibling,P(e,()=>Vd(a(),120),t),P(e,()=>n.data?.durationMs,r),e})():vu()];break;case`apply_patch`:{let e=l(`patch`).split(`
26
+ `).filter(e=>e&&!/^---$/.test(e.trim())),t=e.map(e=>e.match(/^\*\*\* (?:Add|Update|Delete) File: (.+)$/)?.[1]).filter(Boolean);o=t.length?`${t.length} file${t.length>1?`s`:``}: ${Vd(t.join(`, `),80)}`:`patch`,c=[(()=>{var t=yu();return P(t,()=>e.map(e=>{let t=e.startsWith(`+`)?` add`:e.startsWith(`-`)?` del`:/^\*\*\*|^@@/.test(e)?` meta`:``;return(()=>{var n=bu();return N(n,`pline`+t),P(n,(()=>{var t=A(()=>e.length>240);return()=>t()?e.slice(0,240)+`…`:e})()),n})()})),t})(),n?(()=>{var e=pu();return P(e,()=>Vd(a().split(`
27
+ `)[0]??``,140),null),P(e,()=>n.data?.ok===!1?` · FAILED`:``,null),e})():xu()];break}case`list_dir`:o=l(`path`)||`.`,c=d(4e3);break;case`read_url`:{let e=l(`url`);try{let t=new URL(e);e=t.host+t.pathname}catch{}o=Vd(e,70),s=`web`,c=[(()=>{var e=pu();return P(e,D(k,{get when(){return/^https?:/i.test(l(`url`))},get fallback(){return(()=>{var e=Cu();return P(e,()=>Vd(l(`url`),80)),e})()},get children(){var e=Su();return y(()=>M(e,`href`,l(`url`))),e}})),e})(),A(()=>d(3e3))];break}case`load_skill`:{o=`skill: ${l(`name`)}`;let e=a().replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/,``);c=n?[(()=>{var t=Vc();return y(()=>t.innerHTML=Le(e)),t})(),(()=>{var e=du(),t=e.firstChild;return P(e,()=>n.data?.durationMs,t),e})()]:wu();break}case`save_skill`:{o=`skill: ${l(`name`)}`,s=Vd(l(`description`),60);let e=Array.isArray(r.args?.files)?r.args.files.map(e=>e?.name).filter(Boolean):[];c=[A(()=>A(()=>!!e.length)()?(()=>{var t=Tu();return t.firstChild,P(t,()=>e.join(`, `),null),t})():null),n?(()=>{var e=_u(),t=e.firstChild,r=t.nextSibling;return r.nextSibling,P(e,()=>Vd(a(),160),t),P(e,()=>n.data?.durationMs,r),e})():Eu()];break}}}catch{}return(()=>{var e=Ou(),r=e.firstChild,a=r.firstChild;a.firstChild;var l=a.nextSibling;return M(e,`title`,`${i}${s?` — `+s:``}`),P(a,o,null),P(r,D(k,{get when(){return t.data?.actor},get children(){var e=Du();return e.firstChild,P(e,()=>String(t.data.actor),null),e}}),l),P(l,n?s||``:`running…`),P(e,c,null),y(()=>N(e,`embed`+(n?n.data?.ok===!1?` fail`:` done`:` running`))),e})()}function Id(e){let t=e.e,n=kd(t),r=e.prev&&e.prev.type===t.type&&kd(e.prev).name===n.name&&t.session===e.prev.session&&t.branch===e.prev.branch;if(t.type===`fork`){let e=t.data??{};return(()=>{var n=ku(),r=n.firstChild.nextSibling;return r.nextSibling,P(n,()=>String(e.fromBranch??`?`),r),P(n,()=>String(e.newBranch??t.branch),null),n})()}if(t.type===`goal`){let e=t.data??{},n=e.event===`status`?`marked ${String(e.status??``)}`:Vd(String(e.text??``),80);return(()=>{var t=Au(),r=t.firstChild.nextSibling;return r.nextSibling,P(t,()=>String(e.event??``),r),P(t,n,null),t})()}return t.type===`todo`?(()=>{var e=ju(),n=e.firstChild.nextSibling;return n.nextSibling,P(e,()=>String(t.data?.by??`human`),n),e})():t.type===`state`?t.data.from===t.data.to?null:(()=>{var e=Mu(),n=e.firstChild;return P(e,()=>t.data.from,n),P(e,()=>t.data.to,null),P(e,(()=>{var e=A(()=>!!t.data.reason);return()=>e()?` — ${t.data.reason}`:``})(),null),y(()=>N(e,`divider-msg`+(t.data.to===`error`?` err`:``))),e})():(()=>{var i=Iu(),a=i.firstChild;return P(i,D(k,{when:!r,get fallback(){return Lu()},get children(){var e=Nu();return P(e,()=>n.icon),y(t=>{var r=n.color+`33`,i=`1px solid ${n.color}66`;return r!==t.e&&ke(e,`background`,t.e=r),i!==t.t&&ke(e,`border`,t.t=i),t},{e:void 0,t:void 0}),e}}),a),P(a,D(k,{when:!r,get children(){var r=Fu(),i=r.firstChild,a=i.nextSibling,o=a.nextSibling;return P(i,()=>n.name),P(r,D(k,{get when(){return t.data?.actor},get children(){var e=Du();return e.firstChild,P(e,()=>String(t.data.actor),null),e}}),a),P(a,(()=>{var e=A(()=>!!t.data?.pending);return()=>e()?`pending…`:jd(t.ts)})()),P(o,()=>t.branch),P(r,D(k,{get when(){return e.onEdit},get children(){var t=Pu();return t.$$click=t=>{t.stopPropagation(),e.onEdit()},t}}),null),y(e=>ke(i,`color`,n.color)),r}}),null),P(a,D(Ld,{e:t,get res(){return e.res},get onOption(){return e.onOption}}),null),y(()=>N(i,`msg`+(r?` grouped`:``)+(t.data?.pending?` pending`:``))),i})()}function Ld(e){let t=e.e;switch(t.type){case`prompt`:return(()=>{var e=Vc();return y(()=>e.innerHTML=Le(String(t.data.text??``))),e})();case`message`:return[D(k,{get when(){return A(()=>typeof t.data.reasoning==`string`)()&&t.data.reasoning.trim()},get children(){var e=Bc(),n=e.firstChild.nextSibling;return P(n,()=>String(t.data.reasoning)),e}}),(()=>{var e=Vc();return y(()=>e.innerHTML=Le(String(t.data.content??``))),e})(),D(k,{get when(){return t.data.interrupted},get children(){return Ru()}}),D(k,{get when(){return t.data.final},get children(){var e=zu(),n=e.firstChild;return P(e,D(Hd,{get text(){return String(t.data.content??``)}}),n),e}})];case`tool_call`:return D(Fd,{e:t,get res(){return e.res}});case`tool_result`:{let e=String(t.data.result);return(()=>{var n=Bu(),r=n.firstChild,i=r.firstChild,a=r.nextSibling,o=a.nextSibling,s=o.firstChild;return P(i,()=>Vd(e,120)),P(r,D(Hd,{text:e}),null),P(a,()=>Rd(e,4e3)),P(o,()=>t.data.durationMs,s),P(o,()=>t.data.ok?``:` · FAILED`,null),y(()=>N(n,`embed`+(t.data.ok?``:` fail`))),n})()}case`decision`:{let e=Array.isArray(t.data?.alternatives)?t.data.alternatives:[];return(()=>{var n=Hu(),r=n.firstChild,i=r.firstChild;i.firstChild;var a=r.nextSibling;return a.firstChild,P(i,()=>Vd(String(t.data?.decision??``),90),null),P(a,()=>String(t.data?.rationale??``),null),P(n,D(k,{get when(){return e.length},get children(){var t=Vu();return t.firstChild,P(t,()=>e.join(` / `),null),t}}),null),n})()}case`question`:{let n=Array.isArray(t.data?.options)?t.data.options:[];return(()=>{var r=Wu(),i=r.firstChild;i.firstChild;var a=i.nextSibling;return P(i,()=>String(t.data?.question??``),null),P(r,D(k,{get when(){return n.length>0},get children(){var r=Uu();return P(r,D(O,{each:n,children:n=>(()=>{var r=Gu();return r.$$click=()=>{let r=t.data?.actor;r?$(`/api/agents/${encodeURIComponent(String(r))}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({text:n,start:!0})}).then(()=>Ed(`→ answered @${String(t.data.actor)}`)).catch(()=>Ed(`answer failed`)):e.onOption?.(n)},P(r,n),r})()})),r}}),a),r})()}case`progress`:return(()=>{var e=Ju(),n=e.firstChild;return n.firstChild,P(n,()=>String(t.data.doing??``),null),P(e,D(k,{get when(){return t.data.recent},get children(){var e=pu();return P(e,()=>String(t.data.recent)),e}}),null),P(e,D(k,{get when(){return t.data.problems},get children(){var e=Ku();return e.firstChild,P(e,()=>String(t.data.problems),null),e}}),null),P(e,D(k,{get when(){return t.data.next},get children(){var e=qu();return e.firstChild,P(e,()=>String(t.data.next),null),e}}),null),e})();case`error`:return(()=>{var e=Yu(),n=e.firstChild;return n.firstChild,P(n,()=>String(t.data.message??``),null),e})();default:return(()=>{var e=Xu();return P(e,()=>Rd(JSON.stringify(t.data),200)),e})()}}function Rd(e,t){return e.length>t?e.slice(0,t)+` …`:e}function zd(e){let t=new Date(e).getTime()-Date.now(),n=Math.abs(t),r=n<9e4?`${Math.round(n/1e3)}s`:n<54e5?`${Math.round(n/6e4)}m`:`${(n/36e5).toFixed(1)}h`;return t>=0?`in ${r}`:`${r} ago`}function Bd(e){return e>=1e9?`${+(e/1e9).toFixed(1)}b`:e>=1e6?`${+(e/1e6).toFixed(1)}m`:e>=1e4?`${Math.round(e/1e3)}k`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function Vd(e,t){return Rd(e.replace(/\s+/g,` `).trim(),t)}function Hd(e){let[t,n]=v(!1);return(()=>{var r=Zu();return r.$$click=t=>{t.stopPropagation(),navigator.clipboard.writeText(e.text).then(()=>{n(!0),setTimeout(()=>n(!1),900)})},P(r,()=>t()?`✓`:`⧉`),r})()}function Ud(e){return(()=>{var t=Qu(),n=t.firstChild,r=n.firstChild.firstChild,i=r.nextSibling;return t.$$click=t=>t.target===t.currentTarget&&e.onClose(),P(r,()=>e.title),De(i,`click`,e.onClose,!0),P(n,()=>e.children,null),t})()}function Wd(e){let[t,n]=v(`~`),[r,i]=v([]),[a,o]=v(``),[s,c]=v(e.providers[0]??``),[l,u]=v(``),[d,f]=v(``);async function p(e){let t=await $(`/api/fs${e?`?path=${encodeURIComponent(e)}`:``}`);n(t.path),i(t.entries)}ee(()=>p(t()));let m=async n=>{n.preventDefault(),f(``);try{let n=await $(`/api/agents`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({workspace:t(),id:a(),provider:s()||void 0,model:l()||void 0})});e.onCreated(n.agent.id)}catch(e){f(String(e.message))}};return D(Ud,{title:`new agent`,get onClose(){return e.onClose},get children(){var i=ed(),f=i.firstChild,h=f.firstChild.nextSibling.firstChild,g=h.nextSibling,_=g.nextSibling,v=f.nextSibling,b=v.nextSibling,x=b.firstChild,S=x.firstChild.nextSibling,ee=x.nextSibling,C=ee.firstChild.nextSibling,te=ee.nextSibling.firstChild.nextSibling,ne=b.nextSibling;return i.addEventListener(`submit`,m),h.$$input=e=>n(e.currentTarget.value),g.$$click=()=>p(t()),_.$$click=()=>p(`..`),P(v,D(O,{get each(){return r()},children:e=>(()=>{var n=td();return n.firstChild,n.$$click=()=>p(`${t()}/${e}`.replace(/\/+/g,`/`)),P(n,e,null),n})()})),S.$$input=e=>o(e.currentTarget.value),C.addEventListener(`change`,e=>c(e.currentTarget.value)),P(C,D(O,{get each(){return e.providers},children:e=>(()=>{var t=Ol();return P(t,e),t})()})),te.$$input=e=>u(e.currentTarget.value),P(i,D(k,{get when(){return d()},get children(){var e=$u();return P(e,d),e}}),ne),y(()=>h.value=t()),y(()=>S.value=a()),y(()=>C.value=s()),y(()=>te.value=l()),i}})}function Gd(e){let[t,n]=v(new Map),[r,i]=v(new Set),[a,o]=v(null),[s,c]=v(``),l=(e,t)=>t.map(t=>({name:String(t.name),path:e?`${e}/${t.name}`:String(t.name),dir:!!t.dir,...typeof t.size==`number`?{size:t.size}:{}}));async function u(t){try{let n=await $(`/api/agents/${e.agentId}/tree${t?`?path=${encodeURIComponent(t)}`:``}`);return l(t,n.entries??[])}catch(e){return c(e.message),null}}b(()=>{e.agentId,i(new Set),n(new Map),u(``).then(e=>{e&&n(new Map([[``,e]]))})});let d=async e=>{let a=new Set(r());if(a.has(e.path)){a.delete(e.path),i(a);return}if(a.add(e.path),i(a),!t().has(e.path)){let t=await u(e.path);t&&n(n=>new Map(n).set(e.path,t))}},f=async t=>{try{let n=await $(`/api/agents/${e.agentId}/file?path=${encodeURIComponent(t.path)}`);o({path:t.path,content:n.content??``,binary:n.binary,truncated:n.truncated})}catch(e){Ed(`open failed: ${e.message}`)}},p=(e,n)=>[(()=>{var t=rd(),i=t.firstChild,a=i.nextSibling;return t.$$click=()=>e.dir?void d(e):void f(e),P(i,(()=>{var t=A(()=>!!e.dir);return()=>t()?r().has(e.path)?`▾`:`▸`:`·`})()),P(a,()=>e.name),P(t,D(k,{get when(){return A(()=>!e.dir)()&&e.size!==void 0},get children(){var t=nd();return P(t,()=>Bd(e.size)),t}}),null),y(r=>{var i=`filerow`+(e.dir?` isdir`:``),a=`padding-left:${n*13+8}px`,o=e.dir?`browse ${e.path}`:`preview ${e.path}`;return i!==r.e&&N(t,r.e=i),r.t=Oe(t,a,r.t),o!==r.a&&M(t,`title`,r.a=o),r},{e:void 0,t:void 0,a:void 0}),t})(),D(k,{get when(){return A(()=>!!e.dir)()&&r().has(e.path)},get children(){return D(O,{get each(){return t().get(e.path)??[]},children:e=>p(e,n+1)})}})],m=()=>e.workspace.split(`/`).filter(Boolean).pop()??e.workspace;return[(()=>{var e=id(),t=e.firstChild.nextSibling;return t.firstChild,P(t,m,null),e})(),(()=>{var e=ad();return P(e,D(k,{get when(){return(t().get(``)??[]).length>0},get fallback(){return(()=>{var e=od();return P(e,()=>s()||`empty workspace`),e})()},get children(){return D(O,{get each(){return t().get(``)??[]},children:e=>p(e,0)})}})),e})(),D(k,{get when(){return a()},children:e=>D(Ud,{get title(){return`🗂 ${e().path}`},onClose:()=>o(null),get children(){var t=sd();return P(t,(()=>{var t=A(()=>!!e().binary);return()=>t()?`(binary file — inspect it from the terminal)`:e().content})(),null),P(t,()=>e().truncated?`
28
28
 
29
- … truncated (first 100 KB)`:``,null),t}})})]}var Gd=[{key:`openrouter`,label:`OpenRouter`,url:`https://openrouter.ai/api/v1`,model:`anthropic/claude-sonnet-4`,hint:`400+ models behind one key — teapot sends app-attribution headers automatically`},{key:`orcarouter`,label:`OrcaRouter`,url:`https://api.orcarouter.ai/v1`,model:`orcarouter/auto`,hint:`zero-markup routing gateway — 'orcarouter/auto' grades each prompt and picks the model`},{key:`openai`,label:`OpenAI`,url:`https://api.openai.com/v1`,model:`gpt-4o-mini`},{key:`llamacpp`,label:`llama.cpp server`,url:`http://localhost:8080/v1`,model:``,hint:`free & local — start it with: llama-server -m ./model.gguf (any model name works)`}],Kd={key:`custom`,label:`Custom`,url:``,model:``,hint:`any OpenAI-compatible /v1 endpoint — vLLM, LM Studio, llama.cpp, a company gateway… fill the fields below`};function qd(e){let[t,n]=v(Gd[0]),[r,i]=v(Gd[0].url),[a,o]=v(``),[s,c]=v(Gd[0].model),[l,u]=v([]),[d,f]=v(`~/teapot-workspace`),[p,m]=v(``),[h,g]=v(!1),[_,x]=v(``),S=e=>{n(e),e.key!==`custom`&&e.url&&(i(e.url),e.model&&c(e.model))};b(()=>{let e=r().trim(),t=a();if(!/^https?:\/\//.test(e)){u([]);return}let n=setTimeout(async()=>{try{let n=await $(`/api/setup/models?baseUrl=${encodeURIComponent(e)}${t?`&apiKey=${encodeURIComponent(t)}`:``}`);u(n.models??[])}catch{u([])}},600);C(()=>clearTimeout(n))});let ee=e=>{let t=l().find(t=>t.id===e.trim());if(!t)return``;let n=[];t.contextLength&&n.push(`ctx ${zd(t.contextLength)} tok`);let r=e=>e===void 0?``:`$${e*1e6>=10?Math.round(e*1e6):+(e*1e6).toFixed(1)}/M`;if(t.pricing){let e=r(t.pricing.prompt),i=r(t.pricing.completion);e&&i?n.push(`${e} in · ${i} out`):(e||i)&&n.push(r(t.pricing.prompt??t.pricing.completion))}return n.join(` · `)},te=()=>ee(s()),ne=async t=>{t.preventDefault(),x(``),g(!0);try{await $(`/api/setup`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({baseUrl:r(),apiKey:a()||void 0,model:s(),workspace:d(),...p()?{password:p()}:{}})}),e.onDone()}catch(e){x(e.message),g(!1)}};return(()=>{var e=ud(),n=e.firstChild.firstChild.nextSibling.nextSibling,u=n.firstChild,g=u.nextSibling,v=g.firstChild.nextSibling,b=v.nextSibling,x=g.nextSibling,ee=x.firstChild.nextSibling,C=x.nextSibling,w=C.firstChild.nextSibling,re=w.nextSibling,T=C.nextSibling,ie=T.firstChild.nextSibling,ae=ie.firstChild.nextSibling,oe=ie.nextSibling.firstChild.nextSibling,E=T.nextSibling;return n.addEventListener(`submit`,ne),P(u,()=>[...Gd,Kd].map(e=>(()=>{var n=dd();return n.$$click=()=>S(e),P(n,()=>e.label),y(r=>{var i=`presetbtn`+(t().key===e.key?` active`:``),a=e.hint||e.url;return i!==r.e&&N(n,r.e=i),a!==r.t&&M(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})())),P(n,D(k,{get when(){return t().hint},get children(){var e=sd();return P(e,()=>t().hint),e}}),g),v.$$input=e=>i(e.currentTarget.value),P(b,()=>Gd.map(e=>(()=>{var t=Ol();return y(()=>t.value=e.url),t})())),ee.$$input=e=>o(e.currentTarget.value),w.$$input=e=>c(e.currentTarget.value),P(re,()=>l().map(e=>(()=>{var t=Ol();return y(()=>t.value=e.id),t})())),P(n,D(k,{get when(){return l().length>0},get fallback(){return fd()},get children(){var e=ld(),t=e.firstChild;return P(e,()=>l().length,t),P(e,D(k,{get when(){return te()},get children(){return[` · `,(()=>{var e=cd();return P(e,te),e})()]}}),null),e}}),T),ae.$$input=e=>f(e.currentTarget.value),oe.$$input=e=>m(e.currentTarget.value),P(n,D(k,{get when(){return _()},get children(){var e=Qu();return P(e,_),e}}),E),P(E,()=>h()?`saving…`:`finish setup`),y(e=>{var n=t().key===`llamacpp`?`(any name — serves whichever gguf is loaded)`:`(type to filter models from the endpoint)`,r=h();return n!==e.e&&M(w,`placeholder`,e.e=n),r!==e.t&&(E.disabled=e.t=r),e},{e:void 0,t:void 0}),y(()=>v.value=r()),y(()=>ee.value=a()),y(()=>w.value=s()),y(()=>ae.value=d()),y(()=>oe.value=p()),e})()}function Jd(e){let[t,n]=v(Object.entries(e.cfg.providers??{}).map(([e,t])=>({name:e,baseUrl:t.baseUrl??``,apiKey:t.apiKey??``,model:t.model??``}))),[r,i]=v(e.cfg.defaultProvider??``),[a,o]=v(Math.round((e.cfg.progressIntervalMs??6e5)/6e4)),[s,c]=v(e.cfg.progressMinChars??4e3),[l,u]=v(Math.round((e.cfg.contextTokenBudget??96e3)/1e3)),[d,f]=v(e.cfg.contextWindowTokens?Math.round(e.cfg.contextWindowTokens/1e3):0),[p,m]=v(e.cfg.maxSpawnDepth??3),[h,g]=v((e.cfg.tasks??[]).map(e=>({...e}))),[_,b]=v(``),x=()=>(e.cfg.agents??[]).map(e=>e.id),S=()=>{let e={};for(let n of t()){if(!n.name.trim())return b(`provider name is required`),null;if(n.baseUrl&&!/^https?:\/\//.test(n.baseUrl))return b(`provider ${n.name}: baseUrl must start with http(s)://`),null;e[n.name.trim()]={baseUrl:n.baseUrl,...n.apiKey?{apiKey:n.apiKey}:{},...n.model?{model:n.model}:{}}}return e},ee=async t=>{t.preventDefault(),b(``);let n=S();if(!n)return;let i=h().filter(e=>e.id?.trim()||e.prompt?.trim()).map((e,t)=>({id:e.id?.trim()||`task-${t+1}`,agent:e.agent,schedule:e.schedule,prompt:e.prompt,...e.forked?{forked:!0}:{}}));for(let e of i){if(!e.agent){b(`task "${e.id}": agent is required`);return}if(!e.schedule?.trim()){b(`task "${e.id}": schedule is required`);return}}try{await $(`/api/config`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({providers:n,defaultProvider:r()||void 0,progressIntervalMs:Math.max(1,a())*6e4,progressMinChars:Math.max(100,s()),contextTokenBudget:Math.max(1e3,l())*1e3,...d()>0?{contextWindowTokens:d()*1e3}:{},maxSpawnDepth:Math.max(0,p()),tasks:i})}),e.onSaved(),e.onClose()}catch(e){b(e.message)}},C=(e,t,n,r)=>(()=>{var i=pd(),a=i.firstChild;return M(i,`title`,r),P(i,e,a),a.$$input=e=>n(Number(e.currentTarget.value)),a.value=t,i})();return D(Hd,{title:`settings`,get onClose(){return e.onClose},get children(){var v=md(),b=v.firstChild,S=b.firstChild.nextSibling,te=S.nextSibling;te.firstChild;var ne=te.nextSibling.firstChild.firstChild.nextSibling;ne.firstChild;var w=b.nextSibling,re=w.firstChild.nextSibling,T=w.nextSibling,ie=T.firstChild.nextSibling,ae=T.nextSibling;ae.firstChild;var oe=ae.nextSibling;return v.addEventListener(`submit`,ee),P(b,D(O,{get each(){return t()},children:(e,r)=>(()=>{var i=hd(),a=i.firstChild,o=a.nextSibling,s=o.nextSibling,c=s.nextSibling,l=c.nextSibling;return a.$$input=e=>n(t().map((t,n)=>n===r()?{...t,name:e.currentTarget.value}:t)),o.$$input=e=>n(t().map((t,n)=>n===r()?{...t,baseUrl:e.currentTarget.value}:t)),s.$$input=e=>n(t().map((t,n)=>n===r()?{...t,apiKey:e.currentTarget.value}:t)),c.$$input=e=>n(t().map((t,n)=>n===r()?{...t,model:e.currentTarget.value}:t)),l.$$click=()=>n(t().filter((e,t)=>t!==r())),y(()=>a.value=e.name),y(()=>o.value=e.baseUrl),y(()=>s.value=e.apiKey),y(()=>c.value=e.model),i})()}),S),S.$$click=()=>n([...t(),{name:``,baseUrl:``,apiKey:``,model:``}]),P(te,D(O,{each:Gd,children:e=>(()=>{var a=gd();return a.firstChild,a.$$click=()=>{let a=t().filter(t=>t.name!==e.key);n([...a,{name:e.key,baseUrl:e.url,apiKey:``,model:e.model}]),r()||i(e.key)},P(a,()=>e.label,null),y(()=>M(a,`title`,`fill a ${e.label} row — ${e.url}${e.model?` (model: ${e.model})`:``}`)),a})()}),null),ne.addEventListener(`change`,e=>i(e.currentTarget.value)),P(ne,D(O,{get each(){return[...new Set(t().map(e=>e.name.trim()).filter(Boolean))]},children:e=>(()=>{var t=Ol();return t.value=e,P(t,e),t})()}),null),P(re,()=>C(`progress interval (min)`,a(),e=>o(e),`how often the harness asks for a progress report`),null),P(re,()=>C(`progress min chars`,s(),e=>c(e),`progress prompts wait for this much real output`),null),P(re,()=>C(`compact budget (k tok)`,l(),e=>u(e),`auto-compact when estimated context exceeds this`),null),P(re,()=>C(`context window (k tok)`,d(),e=>f(e),`model's real window — 0/blank hides the % gauge`),null),P(re,()=>C(`max spawn depth`,p(),e=>m(e),`sub-agent nesting limit (0 = no spawning)`),null),P(T,D(k,{get when(){return h().length>0},get children(){return D(O,{get each(){return h()},children:(e,t)=>(()=>{var n=_d(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.nextSibling,s=o.nextSibling,c=s.firstChild,l=s.nextSibling,u=r.nextSibling;return i.$$input=e=>g(h().map((n,r)=>r===t()?{...n,id:e.currentTarget.value}:n)),a.$$input=e=>g(h().map((n,r)=>r===t()?{...n,agent:e.currentTarget.value}:n)),o.$$input=e=>g(h().map((n,r)=>r===t()?{...n,schedule:e.currentTarget.value}:n)),c.addEventListener(`change`,e=>g(h().map((n,r)=>r===t()?{...n,forked:e.currentTarget.checked}:n))),l.$$click=()=>g(h().filter((e,n)=>n!==t())),u.$$input=e=>g(h().map((n,r)=>r===t()?{...n,prompt:e.currentTarget.value}:n)),y(()=>i.value=e.id),y(()=>a.value=e.agent),y(()=>o.value=e.schedule),y(()=>c.checked=!!e.forked),y(()=>u.value=e.prompt),n})()})}}),ie),ie.$$click=()=>g([...h(),{id:``,agent:x()[0]??``,schedule:`every 30m`,prompt:``}]),P(ae,D(O,{get each(){return e.cfg.agents??[]},children:e=>(()=>{var t=yd(),n=t.firstChild,r=n.nextSibling;return P(n,()=>e.id),P(r,()=>e.workspace),P(t,D(k,{get when(){return e.parent},get children(){var t=vd();return t.firstChild,P(t,()=>e.parent,null),t}}),null),t})()}),null),P(v,D(k,{get when(){return _()},get children(){var e=Qu();return P(e,_),e}}),oe),y(()=>ne.value=r()),v}})}Ee([`click`,`pointerdown`,`dblclick`,`input`,`keydown`]),Te(()=>D(Nd,{}),document.getElementById(`root`));
30
- //# sourceMappingURL=index-C8JLJ99u.js.map
29
+ … truncated (first 100 KB)`:``,null),t}})})]}var Kd=[{key:`openrouter`,label:`OpenRouter`,url:`https://openrouter.ai/api/v1`,model:`anthropic/claude-sonnet-4`,hint:`400+ models behind one key — teapot sends app-attribution headers automatically`},{key:`orcarouter`,label:`OrcaRouter`,url:`https://api.orcarouter.ai/v1`,model:`orcarouter/auto`,hint:`zero-markup routing gateway — 'orcarouter/auto' grades each prompt and picks the model`},{key:`openai`,label:`OpenAI`,url:`https://api.openai.com/v1`,model:`gpt-4o-mini`},{key:`llamacpp`,label:`llama.cpp server`,url:`http://localhost:8080/v1`,model:``,hint:`free & local — start it with: llama-server -m ./model.gguf (any model name works)`}],qd={key:`custom`,label:`Custom`,url:``,model:``,hint:`any OpenAI-compatible /v1 endpoint — vLLM, LM Studio, llama.cpp, a company gateway… fill the fields below`};function Jd(e){let[t,n]=v(Kd[0]),[r,i]=v(Kd[0].url),[a,o]=v(``),[s,c]=v(Kd[0].model),[l,u]=v([]),[d,f]=v(`~/teapot-workspace`),[p,m]=v(``),[h,g]=v(!1),[_,x]=v(``),S=e=>{n(e),e.key!==`custom`&&e.url&&(i(e.url),e.model&&c(e.model))};b(()=>{let e=r().trim(),t=a();if(!/^https?:\/\//.test(e)){u([]);return}let n=setTimeout(async()=>{try{let n=await $(`/api/setup/models?baseUrl=${encodeURIComponent(e)}${t?`&apiKey=${encodeURIComponent(t)}`:``}`);u(n.models??[])}catch{u([])}},600);C(()=>clearTimeout(n))});let ee=e=>{let t=l().find(t=>t.id===e.trim());if(!t)return``;let n=[];t.contextLength&&n.push(`ctx ${Bd(t.contextLength)} tok`);let r=e=>e===void 0?``:`$${e*1e6>=10?Math.round(e*1e6):+(e*1e6).toFixed(1)}/M`;if(t.pricing){let e=r(t.pricing.prompt),i=r(t.pricing.completion);e&&i?n.push(`${e} in · ${i} out`):(e||i)&&n.push(r(t.pricing.prompt??t.pricing.completion))}return n.join(` · `)},te=()=>ee(s()),ne=async t=>{t.preventDefault(),x(``),g(!0);try{await $(`/api/setup`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({baseUrl:r(),apiKey:a()||void 0,model:s(),workspace:d(),...p()?{password:p()}:{}})}),e.onDone()}catch(e){x(e.message),g(!1)}};return(()=>{var e=dd(),n=e.firstChild.firstChild.nextSibling.nextSibling,u=n.firstChild,g=u.nextSibling,v=g.firstChild.nextSibling,b=v.nextSibling,x=g.nextSibling,ee=x.firstChild.nextSibling,C=x.nextSibling,w=C.firstChild.nextSibling,re=w.nextSibling,T=C.nextSibling,ie=T.firstChild.nextSibling,ae=ie.firstChild.nextSibling,oe=ie.nextSibling.firstChild.nextSibling,E=T.nextSibling;return n.addEventListener(`submit`,ne),P(u,()=>[...Kd,qd].map(e=>(()=>{var n=fd();return n.$$click=()=>S(e),P(n,()=>e.label),y(r=>{var i=`presetbtn`+(t().key===e.key?` active`:``),a=e.hint||e.url;return i!==r.e&&N(n,r.e=i),a!==r.t&&M(n,`title`,r.t=a),r},{e:void 0,t:void 0}),n})())),P(n,D(k,{get when(){return t().hint},get children(){var e=cd();return P(e,()=>t().hint),e}}),g),v.$$input=e=>i(e.currentTarget.value),P(b,()=>Kd.map(e=>(()=>{var t=Ol();return y(()=>t.value=e.url),t})())),ee.$$input=e=>o(e.currentTarget.value),w.$$input=e=>c(e.currentTarget.value),P(re,()=>l().map(e=>(()=>{var t=Ol();return y(()=>t.value=e.id),t})())),P(n,D(k,{get when(){return l().length>0},get fallback(){return pd()},get children(){var e=ud(),t=e.firstChild;return P(e,()=>l().length,t),P(e,D(k,{get when(){return te()},get children(){return[` · `,(()=>{var e=ld();return P(e,te),e})()]}}),null),e}}),T),ae.$$input=e=>f(e.currentTarget.value),oe.$$input=e=>m(e.currentTarget.value),P(n,D(k,{get when(){return _()},get children(){var e=$u();return P(e,_),e}}),E),P(E,()=>h()?`saving…`:`finish setup`),y(e=>{var n=t().key===`llamacpp`?`(any name — serves whichever gguf is loaded)`:`(type to filter models from the endpoint)`,r=h();return n!==e.e&&M(w,`placeholder`,e.e=n),r!==e.t&&(E.disabled=e.t=r),e},{e:void 0,t:void 0}),y(()=>v.value=r()),y(()=>ee.value=a()),y(()=>w.value=s()),y(()=>ae.value=d()),y(()=>oe.value=p()),e})()}function Yd(e){let[t,n]=v(Object.entries(e.cfg.providers??{}).map(([e,t])=>({name:e,baseUrl:t.baseUrl??``,apiKey:t.apiKey??``,model:t.model??``}))),[r,i]=v(e.cfg.defaultProvider??``),[a,o]=v(Math.round((e.cfg.progressIntervalMs??6e5)/6e4)),[s,c]=v(e.cfg.progressMinChars??4e3),[l,u]=v(Math.round((e.cfg.contextTokenBudget??96e3)/1e3)),[d,f]=v(e.cfg.contextWindowTokens?Math.round(e.cfg.contextWindowTokens/1e3):0),[p,m]=v(e.cfg.maxSpawnDepth??3),[h,g]=v((e.cfg.tasks??[]).map(e=>({...e}))),[_,b]=v(``),x=()=>(e.cfg.agents??[]).map(e=>e.id),S=()=>{let e={};for(let n of t()){if(!n.name.trim())return b(`provider name is required`),null;if(n.baseUrl&&!/^https?:\/\//.test(n.baseUrl))return b(`provider ${n.name}: baseUrl must start with http(s)://`),null;e[n.name.trim()]={baseUrl:n.baseUrl,...n.apiKey?{apiKey:n.apiKey}:{},...n.model?{model:n.model}:{}}}return e},ee=async t=>{t.preventDefault(),b(``);let n=S();if(!n)return;let i=h().filter(e=>e.id?.trim()||e.prompt?.trim()).map((e,t)=>({id:e.id?.trim()||`task-${t+1}`,agent:e.agent,schedule:e.schedule,prompt:e.prompt,...e.forked?{forked:!0}:{}}));for(let e of i){if(!e.agent){b(`task "${e.id}": agent is required`);return}if(!e.schedule?.trim()){b(`task "${e.id}": schedule is required`);return}}try{await $(`/api/config`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({providers:n,defaultProvider:r()||void 0,progressIntervalMs:Math.max(1,a())*6e4,progressMinChars:Math.max(100,s()),contextTokenBudget:Math.max(1e3,l())*1e3,...d()>0?{contextWindowTokens:d()*1e3}:{},maxSpawnDepth:Math.max(0,p()),tasks:i})}),e.onSaved(),e.onClose()}catch(e){b(e.message)}},C=(e,t,n,r)=>(()=>{var i=md(),a=i.firstChild;return M(i,`title`,r),P(i,e,a),a.$$input=e=>n(Number(e.currentTarget.value)),a.value=t,i})();return D(Ud,{title:`settings`,get onClose(){return e.onClose},get children(){var v=hd(),b=v.firstChild,S=b.firstChild.nextSibling,te=S.nextSibling;te.firstChild;var ne=te.nextSibling.firstChild.firstChild.nextSibling;ne.firstChild;var w=b.nextSibling,re=w.firstChild.nextSibling,T=w.nextSibling,ie=T.firstChild.nextSibling,ae=T.nextSibling;ae.firstChild;var oe=ae.nextSibling;return v.addEventListener(`submit`,ee),P(b,D(O,{get each(){return t()},children:(e,r)=>(()=>{var i=gd(),a=i.firstChild,o=a.nextSibling,s=o.nextSibling,c=s.nextSibling,l=c.nextSibling;return a.$$input=e=>n(t().map((t,n)=>n===r()?{...t,name:e.currentTarget.value}:t)),o.$$input=e=>n(t().map((t,n)=>n===r()?{...t,baseUrl:e.currentTarget.value}:t)),s.$$input=e=>n(t().map((t,n)=>n===r()?{...t,apiKey:e.currentTarget.value}:t)),c.$$input=e=>n(t().map((t,n)=>n===r()?{...t,model:e.currentTarget.value}:t)),l.$$click=()=>n(t().filter((e,t)=>t!==r())),y(()=>a.value=e.name),y(()=>o.value=e.baseUrl),y(()=>s.value=e.apiKey),y(()=>c.value=e.model),i})()}),S),S.$$click=()=>n([...t(),{name:``,baseUrl:``,apiKey:``,model:``}]),P(te,D(O,{each:Kd,children:e=>(()=>{var a=_d();return a.firstChild,a.$$click=()=>{let a=t().filter(t=>t.name!==e.key);n([...a,{name:e.key,baseUrl:e.url,apiKey:``,model:e.model}]),r()||i(e.key)},P(a,()=>e.label,null),y(()=>M(a,`title`,`fill a ${e.label} row — ${e.url}${e.model?` (model: ${e.model})`:``}`)),a})()}),null),ne.addEventListener(`change`,e=>i(e.currentTarget.value)),P(ne,D(O,{get each(){return[...new Set(t().map(e=>e.name.trim()).filter(Boolean))]},children:e=>(()=>{var t=Ol();return t.value=e,P(t,e),t})()}),null),P(re,()=>C(`progress interval (min)`,a(),e=>o(e),`how often the harness asks for a progress report`),null),P(re,()=>C(`progress min chars`,s(),e=>c(e),`progress prompts wait for this much real output`),null),P(re,()=>C(`compact budget (k tok)`,l(),e=>u(e),`auto-compact threshold — defaults to 75% of context window when empty; manual override in k tokens`),null),P(re,()=>C(`context window (k tok)`,d(),e=>f(e),`model's real window — 0/blank hides the % gauge`),null),P(re,()=>C(`max spawn depth`,p(),e=>m(e),`sub-agent nesting limit (0 = no spawning)`),null),P(T,D(k,{get when(){return h().length>0},get children(){return D(O,{get each(){return h()},children:(e,t)=>(()=>{var n=vd(),r=n.firstChild,i=r.firstChild,a=i.nextSibling,o=a.nextSibling,s=o.nextSibling,c=s.firstChild,l=s.nextSibling,u=r.nextSibling;return i.$$input=e=>g(h().map((n,r)=>r===t()?{...n,id:e.currentTarget.value}:n)),a.$$input=e=>g(h().map((n,r)=>r===t()?{...n,agent:e.currentTarget.value}:n)),o.$$input=e=>g(h().map((n,r)=>r===t()?{...n,schedule:e.currentTarget.value}:n)),c.addEventListener(`change`,e=>g(h().map((n,r)=>r===t()?{...n,forked:e.currentTarget.checked}:n))),l.$$click=()=>g(h().filter((e,n)=>n!==t())),u.$$input=e=>g(h().map((n,r)=>r===t()?{...n,prompt:e.currentTarget.value}:n)),y(()=>i.value=e.id),y(()=>a.value=e.agent),y(()=>o.value=e.schedule),y(()=>c.checked=!!e.forked),y(()=>u.value=e.prompt),n})()})}}),ie),ie.$$click=()=>g([...h(),{id:``,agent:x()[0]??``,schedule:`every 30m`,prompt:``}]),P(ae,D(O,{get each(){return e.cfg.agents??[]},children:e=>(()=>{var t=bd(),n=t.firstChild,r=n.nextSibling;return P(n,()=>e.id),P(r,()=>e.workspace),P(t,D(k,{get when(){return e.parent},get children(){var t=yd();return t.firstChild,P(t,()=>e.parent,null),t}}),null),t})()}),null),P(v,D(k,{get when(){return _()},get children(){var e=$u();return P(e,_),e}}),oe),y(()=>ne.value=r()),v}})}Ee([`click`,`pointerdown`,`dblclick`,`input`,`keydown`]),Te(()=>D(Pd,{}),document.getElementById(`root`));
30
+ //# sourceMappingURL=index-Dh8Jmu2Y.js.map