@staff0rd/assist 0.775.5 → 0.776.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -434,7 +434,7 @@ Each assist install is a **node** with its own daemon and web server. A node can
434
434
  - `assist sessions nodes logs <name> [-n, --lines <count>] [--json]` — tail a linked node's `daemon.log`; naming this node reads the local log.
435
435
  - `assist sessions nodes restart <name> [--target daemon|webserver|both]` — the CLI form of **Restart <node>**: posts the node's `/api/restart`, waits up to 90s for its link to reconnect and prints its version.
436
436
  - `assist sessions nodes update <name>` — the CLI form of **Update assist on <node>**: over a connected link it opens an `assist update` card on the node, waits for its daemon to come back, then restarts its web server; otherwise it posts the node's `/api/self-update`. It then prints the node's new version.
437
- - `sessions.linkVersionCheck` — reaction to a version mismatch with a linked node: `block` (default) updates an older peer and holds the link until the versions match; `warn` proceeds anyway; `off` skips the check.
437
+ - `sessions.linkVersionCheck` — reaction when a linked node's protocol range doesn't overlap this node's (links use the highest shared protocol, whatever the app versions, and never restart a peer): `block` (default) holds the link `version-blocked` until the older node is updated; `warn` proceeds anyway; `off` skips the check.
438
438
 
439
439
  `nodes restart` and `nodes update` log `nodes <action> <name> trace=<id>` here and send that trace id to the node, and when the node can't be reached or doesn't come back they name the first broken `nodes doctor` hop.
440
440
 
@@ -3973,7 +3973,7 @@ ${f.join(`
3973
3973
  `))),this._register(this._terminal.onA11yTab(o=>this._handleTab(o))),this._register(this._terminal.onKey(o=>this._handleKey(o.key))),this._register(this._terminal.onBlur(()=>this._clearLiveRegion())),this._register(this._renderService.onDimensionsChange(()=>this._refreshRowsDimensions())),this._register(En(i,"selectionchange",()=>this._handleSelectionChange())),this._register(this._coreBrowserService.onDprChange(()=>this._refreshRowsDimensions())),this._refreshRowsDimensions(),this._refreshRows(),this._register(ia(()=>{Shr?this._debugRootContainer.remove():this._accessibilityContainer.remove(),this._rowElements.length=0}))}_handleTab(e){for(let t=0;t<e;t++)this._handleChar(" ")}_handleChar(e){this._liveRegionLineCount<Thr+1&&(this._charsToConsume.length>0?this._charsToConsume.shift()!==e&&(this._charsToAnnounce+=e):this._charsToAnnounce+=e,e===`
3974
3974
  `&&(this._liveRegionLineCount++,this._liveRegionLineCount===Thr+1&&(this._liveRegion.textContent+=uFe.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 r=this._terminal.buffer,n=r.lines.length.toString();for(let i=e;i<=t;i++){let o=r.lines.get(r.ydisp+i),a=[],s=o?.translateToString(!0,void 0,void 0,a)||"",l=(r.ydisp+i+1).toString(),u=this._rowElements[i];u&&(s.length===0?(u.textContent="\xA0",this._rowColumns.set(u,[0,1])):(u.textContent=s,this._rowColumns.set(u,a)),u.setAttribute("aria-posinset",l),u.setAttribute("aria-setsize",n),this._alignRowWidth(u))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(e,t){let r=e.target,n=this._rowElements[t===0?1:this._rowElements.length-2],i=r.getAttribute("aria-posinset"),o=t===0?"1":`${this._terminal.buffer.lines.length}`;if(i===o||e.relatedTarget!==n)return;let a,s;if(t===0?(a=r,s=this._rowElements.pop(),this._rowContainer.removeChild(s)):(a=this._rowElements.shift(),s=r,this._rowContainer.removeChild(a)),a.removeEventListener("focus",this._topBoundaryFocusListener),s.removeEventListener("focus",this._bottomBoundaryFocusListener),t===0){let l=this._createAccessibilityTreeNode();this._rowElements.unshift(l),this._rowContainer.insertAdjacentElement("afterbegin",l)}else{let l=this._createAccessibilityTreeNode();this._rowElements.push(l),this._rowContainer.appendChild(l)}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},r={node:e.focusNode,offset:e.focusOffset};if((t.node.compareDocumentPosition(r.node)&Node.DOCUMENT_POSITION_PRECEDING||t.node===r.node&&t.offset>r.offset)&&([t,r]=[r,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 n=this._rowElements.slice(-1)[0];if(r.node.compareDocumentPosition(n)&(Node.DOCUMENT_POSITION_CONTAINED_BY|Node.DOCUMENT_POSITION_PRECEDING)&&(r={node:n,offset:n.textContent?.length??0}),!this._rowContainer.contains(r.node))return;let i=({node:s,offset:l})=>{let u=s instanceof Text?s.parentNode:s,f=parseInt(u?.getAttribute("aria-posinset"),10)-1;if(isNaN(f))return console.warn("row is invalid. Race condition?"),null;let d=this._rowColumns.get(u);if(!d)return console.warn("columns is null. Race condition?"),null;let h=l<d.length?d[l]:d.slice(-1)[0]+1;return h>=this._terminal.cols&&(++f,h=0),{row:f,column:h}},o=i(t),a=i(r);if(!(!o||!a)){if(o.row>a.row||o.row===a.row&&o.column>=a.column)throw new Error("invalid range");this._terminal.select(o.column,o.row,(a.row-o.row)*this._terminal.cols-o.column+a.column)}}_handleResize(e){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let t=this._rowContainer.children.length;t<this._terminal.rows;t++)this._rowElements[t]=this._createAccessibilityTreeNode(),this._rowContainer.appendChild(this._rowElements[t]);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,r=this._rowColumns.get(e)?.slice(-1)?.[0];if(!r)return;let n=r*this._renderService.dimensions.css.cell.width;e.style.transform=`scaleX(${n/t})`}};lge=as([Tr(1,jFe),Tr(2,R2),Tr(3,A2)],lge);var qFe=class extends Wn{constructor(e,t,r,n,i){super(),this._element=e,this._mouseService=t,this._renderService=r,this._bufferService=n,this._linkProviderService=i,this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this._register(new cr),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this._register(new cr),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this._register(ia(()=>{gR(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(En(this._element,"mouseleave",()=>{this._isMouseOut=!0,this._clearCurrentLink()})),this._register(En(this._element,"mousemove",this._handleMouseMove.bind(this))),this._register(En(this._element,"mousedown",this._handleMouseDown.bind(this))),this._register(En(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 r=e.composedPath();for(let n=0;n<r.length;n++){let i=r[n];if(i.classList.contains("xterm"))break;if(i.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(n=>{n?.forEach(i=>{i.link.dispose&&i.link.dispose()})}),this._activeProviderReplies=new Map,this._activeLine=e.y);let r=!1;for(let[n,i]of this._linkProviderService.linkProviders.entries())t?this._activeProviderReplies?.get(n)&&(r=this._checkLinkProviderResult(n,e,r)):i.provideLinks(e.y,o=>{if(this._isMouseOut)return;let a=o?.map(s=>({link:s}));this._activeProviderReplies?.set(n,a),r=this._checkLinkProviderResult(n,e,r),this._activeProviderReplies?.size===this._linkProviderService.linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)})}_removeIntersectingLinks(e,t){let r=new Set;for(let n=0;n<t.size;n++){let i=t.get(n);if(i)for(let o=0;o<i.length;o++){let a=i[o],s=a.link.range.start.y<e?0:a.link.range.start.x,l=a.link.range.end.y>e?this._bufferService.cols:a.link.range.end.x;for(let u=s;u<=l;u++){if(r.has(u)){i.splice(o--,1);break}r.add(u)}}}}_checkLinkProviderResult(e,t,r){if(!this._activeProviderReplies)return r;let n=this._activeProviderReplies.get(e),i=!1;for(let o=0;o<e;o++)(!this._activeProviderReplies.has(o)||this._activeProviderReplies.get(o))&&(i=!0);if(!i&&n){let o=n.find(a=>this._linkAtPosition(a.link,t));o&&(r=!0,this._handleNewLink(o))}if(this._activeProviderReplies.size===this._linkProviderService.linkProviders.length&&!r)for(let o=0;o<this._activeProviderReplies.size;o++){let a=this._activeProviderReplies.get(o)?.find(s=>this._linkAtPosition(s.link,t));if(a){r=!0,this._handleNewLink(a);break}}return r}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._currentLink)return;let t=this._positionFromMouseEvent(e,this._element,this._mouseService);t&&this._mouseDownLink&&oUn(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,gR(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?!0:e.link.decorations.underline,pointerCursor:e.link.decorations===void 0?!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:r=>{this._currentLink?.state&&this._currentLink.state.decorations.pointerCursor!==r&&(this._currentLink.state.decorations.pointerCursor=r,this._currentLink.state.isHovered&&this._element.classList.toggle("xterm-cursor-pointer",r))}},underline:{get:()=>this._currentLink?.state?.decorations.underline,set:r=>{this._currentLink?.state&&this._currentLink?.state?.decorations.underline!==r&&(this._currentLink.state.decorations.underline=r,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,r))}}}),this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange(r=>{if(!this._currentLink)return;let n=r.start===0?0:r.start+1+this._bufferService.buffer.ydisp,i=this._bufferService.buffer.ydisp+1+r.end;if(this._currentLink.link.range.start.y>=n&&this._currentLink.link.range.end.y<=i&&(this._clearCurrentLink(n,i),this._lastMouseEvent)){let o=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);o&&this._askForLink(o,!1)}})))}_linkHover(e,t,r){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(r,t.text)}_fireUnderlineEvent(e,t){let r=e.range,n=this._bufferService.buffer.ydisp,i=this._createLinkUnderlineEvent(r.start.x-1,r.start.y-n-1,r.end.x,r.end.y-n-1,void 0);(t?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(i)}_linkLeave(e,t,r){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(r,t.text)}_linkAtPosition(e,t){let r=e.range.start.y*this._bufferService.cols+e.range.start.x,n=e.range.end.y*this._bufferService.cols+e.range.end.x,i=t.y*this._bufferService.cols+t.x;return r<=i&&i<=n}_positionFromMouseEvent(e,t,r){let n=r.getCoords(e,t,this._bufferService.cols,this._bufferService.rows);if(n)return{x:n[0],y:n[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,t,r,n,i){return{x1:e,y1:t,x2:r,y2:n,cols:this._bufferService.cols,fg:i}}};qFe=as([Tr(1,YFe),Tr(2,A2),Tr(3,Of),Tr(4,Ohr)],qFe);function oUn(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 aUn=class extends ZHn{constructor(e={}){super(e),this._linkifier=this._register(new q9),this.browser=cpr,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this._register(new q9),this._onCursorMove=this._register(new cr),this.onCursorMove=this._onCursorMove.event,this._onKey=this._register(new cr),this.onKey=this._onKey.event,this._onRender=this._register(new cr),this.onRender=this._onRender.event,this._onSelectionChange=this._register(new cr),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this._register(new cr),this.onTitleChange=this._onTitleChange.event,this._onBell=this._register(new cr),this.onBell=this._onBell.event,this._onFocus=this._register(new cr),this._onBlur=this._register(new cr),this._onA11yCharEmitter=this._register(new cr),this._onA11yTabEmitter=this._register(new cr),this._onWillOpen=this._register(new cr),this._setup(),this._decorationService=this._instantiationService.createInstance(tUn),this._instantiationService.setService(qj,this._decorationService),this._linkProviderService=this._instantiationService.createInstance(Yzn),this._instantiationService.setService(Ohr,this._linkProviderService),this._linkProviderService.registerLinkProvider(this._instantiationService.createInstance(dFe)),this._register(this._inputHandler.onRequestBell(()=>this._onBell.fire())),this._register(this._inputHandler.onRequestRefreshRows(t=>this.refresh(t?.start??0,t?.end??this.rows-1))),this._register(this._inputHandler.onRequestSendFocus(()=>this._reportFocus())),this._register(this._inputHandler.onRequestReset(()=>this.reset())),this._register(this._inputHandler.onRequestWindowsOptionsReport(t=>this._reportWindowsOptions(t))),this._register(this._inputHandler.onColor(t=>this._handleColorEvent(t))),this._register(ou.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(ou.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(ou.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(ou.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this._register(this._bufferService.onResize(t=>this._afterResize(t.cols,t.rows))),this._register(ia(()=>{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 r,n="";switch(t.index){case 256:r="foreground",n="10";break;case 257:r="background",n="11";break;case 258:r="cursor",n="12";break;default:r="ansi",n="4;"+t.index}switch(t.type){case 0:let i=na.toColorRGB(r==="ansi"?this._themeService.colors.ansi[t.index]:this._themeService.colors[r]);this.coreService.triggerDataEvent(`${$t.ESC}]${n};${GHn(i)}${spr.ST}`);break;case 1:if(r==="ansi")this._themeService.modifyColors(o=>o.ansi[t.index]=Js.toColor(...t.color));else{let o=r;this._themeService.modifyColors(a=>a[o]=Js.toColor(...t.color))}break;case 2:this._themeService.restoreColor(t.index);break}}}_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(lge,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(e){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent($t.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($t.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 r=Math.min(this.buffer.x,this.cols-1),n=this._renderService.dimensions.css.cell.height,i=t.getWidth(r),o=this._renderService.dimensions.css.cell.width*i,a=this.buffer.y*this._renderService.dimensions.css.cell.height,s=r*this._renderService.dimensions.css.cell.width;this.textarea.style.left=s+"px",this.textarea.style.top=a+"px",this.textarea.style.width=o+"px",this.textarea.style.height=n+"px",this.textarea.style.lineHeight=n+"px",this.textarea.style.zIndex="-5"}_initGlobal(){this._bindKeys(),this._register(En(this.element,"copy",t=>{this.hasSelection()&&NFn(t,this._selectionService)}));let e=t=>BFn(t,this.textarea,this.coreService,this.optionsService);this._register(En(this.textarea,"paste",e)),this._register(En(this.element,"paste",e)),upr?this._register(En(this.element,"mousedown",t=>{t.button===2&&Cdr(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})):this._register(En(this.element,"contextmenu",t=>{Cdr(t,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)})),r$e&&this._register(En(this.element,"auxclick",t=>{t.button===1&&khr(t,this.textarea,this.screenElement)}))}_bindKeys(){this._register(En(this.textarea,"keyup",e=>this._keyUp(e),!0)),this._register(En(this.textarea,"keydown",e=>this._keyDown(e),!0)),this._register(En(this.textarea,"keypress",e=>this._keyPress(e),!0)),this._register(En(this.textarea,"compositionstart",()=>this._compositionHelper.compositionstart())),this._register(En(this.textarea,"compositionupdate",e=>this._compositionHelper.compositionupdate(e))),this._register(En(this.textarea,"compositionend",()=>this._compositionHelper.compositionend())),this._register(En(this.textarea,"input",e=>this._inputEvent(e),!0)),this._register(this.onRender(()=>this._compositionHelper.updateCompositionElements()))}open(e){if(!e)throw new 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(En(this.screenElement,"mousemove",i=>this.updateCursorStyle(i))),this._helperContainer=this._document.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),t.appendChild(this.screenElement);let r=this.textarea=this._document.createElement("textarea");this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",cFe.get()),hpr||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",()=>r.readOnly=this.optionsService.rawOptions.disableStdin)),this.textarea.readOnly=this.optionsService.rawOptions.disableStdin,this._coreBrowserService=this._register(this._instantiationService.createInstance(qzn,this.textarea,e.ownerDocument.defaultView??window,this._document??typeof window<"u"?window.document:null)),this._instantiationService.setService(R2,this._coreBrowserService),this._register(En(this.textarea,"focus",i=>this._handleTextAreaFocus(i))),this._register(En(this.textarea,"blur",()=>this._handleTextAreaBlur())),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(DFe,this._document,this._helperContainer),this._instantiationService.setService(uge,this._charSizeService),this._themeService=this._instantiationService.createInstance(FFe),this._instantiationService.setService(j9,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(oge),this._instantiationService.setService(Dhr,this._characterJoinerService),this._renderService=this._register(this._instantiationService.createInstance(NFe,this.rows,this.screenElement)),this._instantiationService.setService(A2,this._renderService),this._register(this._renderService.onRenderedViewportChange(i=>this._onRender.fire(i))),this.onResize(i=>this._renderService.resize(i.cols,i.rows)),this._compositionView=this._document.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(LFe,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this._mouseService=this._instantiationService.createInstance(OFe),this._instantiationService.setService(YFe,this._mouseService);let n=this._linkifier.value=this._register(this._instantiationService.createInstance(qFe,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(AFe,this.element,this.screenElement)),this._register(this._viewport.onRequestScrollLines(i=>{super.scrollLines(i,!1),this.refresh(0,this.rows-1)})),this._selectionService=this._register(this._instantiationService.createInstance(BFe,this.element,this.screenElement,n)),this._instantiationService.setService(GFn,this._selectionService),this._register(this._selectionService.onRequestScrollLines(i=>this.scrollLines(i.amount,i.suppressScrollEvent))),this._register(this._selectionService.onSelectionChange(()=>this._onSelectionChange.fire())),this._register(this._selectionService.onRequestRedraw(i=>this._renderService.handleSelectionChanged(i.start,i.end,i.columnSelectMode))),this._register(this._selectionService.onLinuxMouseSelection(i=>{this.textarea.value=i,this.textarea.focus(),this.textarea.select()})),this._register(ou.any(this._onScroll.event,this._inputHandler.onScroll)(()=>{this._selectionService.refresh(),this._viewport?.queueSync()})),this._register(this._instantiationService.createInstance(PFe,this.screenElement)),this._register(En(this.element,"mousedown",i=>this._selectionService.handleMouseDown(i))),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(lge,this)),this._register(this.optionsService.onSpecificOptionChange("screenReaderMode",i=>this._handleScreenReaderModeOptionChange(i))),this.options.overviewRuler.width&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ige,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("overviewRuler",i=>{!this._overviewRulerRenderer&&i&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this._register(this._instantiationService.createInstance(ige,this._viewportElement,this.screenElement)))}),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(IFe,this,this._document,this.element,this.screenElement,this._viewportElement,this._helperContainer,this.linkifier)}bindMouse(){let e=this,t=this.element;function r(o){let a=e._mouseService.getMouseReportCoords(o,e.screenElement);if(!a)return!1;let s,l;switch(o.overrideType||o.type){case"mousemove":l=32,o.buttons===void 0?(s=3,o.button!==void 0&&(s=o.button<3?o.button:3)):s=o.buttons&1?0:o.buttons&4?1:o.buttons&2?2:3;break;case"mouseup":l=0,s=o.button<3?o.button:3;break;case"mousedown":l=1,s=o.button<3?o.button:3;break;case"wheel":if(e._customWheelEventHandler&&e._customWheelEventHandler(o)===!1)return!1;let u=o.deltaY;if(u===0||e.coreMouseService.consumeWheelEvent(o,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return!1;l=u<0?0:1,s=4;break;default:return!1}return l===void 0||s===void 0||s>4?!1:e.coreMouseService.triggerMouseEvent({col:a.col,row:a.row,x:a.x,y:a.y,button:s,action:l,ctrl:o.ctrlKey,alt:o.altKey,shift:o.shiftKey})}let n={mouseup:null,wheel:null,mousedrag:null,mousemove:null},i={mouseup:o=>(r(o),o.buttons||(this._document.removeEventListener("mouseup",n.mouseup),n.mousedrag&&this._document.removeEventListener("mousemove",n.mousedrag)),this.cancel(o)),wheel:o=>(r(o),this.cancel(o,!0)),mousedrag:o=>{o.buttons&&r(o)},mousemove:o=>{o.buttons||r(o)}};this._register(this.coreMouseService.onProtocolChange(o=>{o?(this.optionsService.rawOptions.logLevel==="debug"&&this._logService.debug("Binding to mouse events:",this.coreMouseService.explainEvents(o)),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()),o&8?n.mousemove||(t.addEventListener("mousemove",i.mousemove),n.mousemove=i.mousemove):(t.removeEventListener("mousemove",n.mousemove),n.mousemove=null),o&16?n.wheel||(t.addEventListener("wheel",i.wheel,{passive:!1}),n.wheel=i.wheel):(t.removeEventListener("wheel",n.wheel),n.wheel=null),o&2?n.mouseup||(n.mouseup=i.mouseup):(this._document.removeEventListener("mouseup",n.mouseup),n.mouseup=null),o&4?n.mousedrag||(n.mousedrag=i.mousedrag):(this._document.removeEventListener("mousemove",n.mousedrag),n.mousedrag=null)})),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this._register(En(t,"mousedown",o=>{if(o.preventDefault(),this.focus(),!(!this.coreMouseService.areMouseEventsActive||this._selectionService.shouldForceSelection(o)))return r(o),n.mouseup&&this._document.addEventListener("mouseup",n.mouseup),n.mousedrag&&this._document.addEventListener("mousemove",n.mousedrag),this.cancel(o)})),this._register(En(t,"wheel",o=>{if(!n.wheel){if(this._customWheelEventHandler&&this._customWheelEventHandler(o)===!1)return!1;if(!this.buffer.hasScrollback){if(o.deltaY===0)return!1;if(e.coreMouseService.consumeWheelEvent(o,e._renderService?.dimensions?.device?.cell?.height,e._coreBrowserService?.dpr)===0)return this.cancel(o,!0);let a=$t.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(o.deltaY<0?"A":"B");return this.coreService.triggerDataEvent(a,!0),this.cancel(o,!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){_hr(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 new 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 new 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,r){this._selectionService.setSelection(e,t,r)}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 r=JHn(e,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(e),r.type===3||r.type===2){let n=this.rows-1;return this.scrollLines(r.type===2?-n:n),this.cancel(e,!0)}if(r.type===1&&this.selectAll(),this._isThirdLevelShift(this.browser,e)||(r.cancel&&this.cancel(e,!0),!r.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((r.key===$t.ETX||r.key===$t.CR)&&(this.textarea.value=""),this._onKey.fire({key:r.key,domEvent:e}),this._showCursor(),this.coreService.triggerDataEvent(r.key,!0),!this.optionsService.rawOptions.screenReaderMode||e.altKey||e.ctrlKey)return this.cancel(e,!0);this._keyDownHandled=!0}_isThirdLevelShift(e,t){let r=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"?r:r&&(!t.keyCode||t.keyCode>47)}_keyUp(e){this._keyDownSeen=!1,!(this._customKeyEventHandler&&this._customKeyEventHandler(e)===!1)&&(sUn(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(Qs));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($t.ESC+"[I"):this.coreService.triggerDataEvent($t.ESC+"[O")}_reportWindowsOptions(e){if(this._renderService)switch(e){case 0:let t=this._renderService.dimensions.css.canvas.width.toFixed(0),r=this._renderService.dimensions.css.canvas.height.toFixed(0);this.coreService.triggerDataEvent(`${$t.ESC}[4;${r};${t}t`);break;case 1:let n=this._renderService.dimensions.css.cell.width.toFixed(0),i=this._renderService.dimensions.css.cell.height.toFixed(0);this.coreService.triggerDataEvent(`${$t.ESC}[6;${i};${n}t`);break}}cancel(e,t){if(!(!this.options.cancelEvents&&!t))return e.preventDefault(),e.stopPropagation(),!1}};function sUn(e){return e.keyCode===16||e.keyCode===17||e.keyCode===18}var lUn=class{constructor(){this._addons=[]}dispose(){for(let e=this._addons.length-1;e>=0;e--)this._addons[e].instance.dispose()}loadAddon(e,t){let r={instance:t,dispose:t.dispose,isDisposed:!1};this._addons.push(r),t.dispose=()=>this._wrappedAddonDispose(r),t.activate(e)}_wrappedAddonDispose(e){if(e.isDisposed)return;let t=-1;for(let r=0;r<this._addons.length;r++)if(this._addons[r]===e){t=r;break}if(t===-1)throw new Error("Could not dispose an addon that has not been loaded");e.isDisposed=!0,e.dispose.apply(e.instance),this._addons.splice(t,1)}},cUn=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 Fm)}translateToString(e,t,r){return this._line.translateToString(e,t,r)}},Chr=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 cUn(t)}getNullCell(){return new Fm}},uUn=class extends Wn{constructor(e){super(),this._core=e,this._onBufferChange=this._register(new cr),this.onBufferChange=this._onBufferChange.event,this._normal=new Chr(this._core.buffers.normal,"normal"),this._alternate=new Chr(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 new 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)}},fUn=class{constructor(e){this._core=e}registerCsiHandler(e,t){return this._core.registerCsiHandler(e,r=>t(r.toArray()))}addCsiHandler(e,t){return this.registerCsiHandler(e,t)}registerDcsHandler(e,t){return this._core.registerDcsHandler(e,(r,n)=>t(r,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)}},dUn=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}},hUn=["cols","rows"],W1=0,Cpr=class extends Wn{constructor(e){super(),this._core=this._register(new aUn(e)),this._addonManager=this._register(new lUn),this._publicOptions={...this._core.options};let t=n=>this._core.options[n],r=(n,i)=>{this._checkReadonlyOptions(n),this._core.options[n]=i};for(let n in this._core.options){let i={get:t.bind(this,n),set:r.bind(this,n)};Object.defineProperty(this._publicOptions,n,i)}}_checkReadonlyOptions(e){if(hUn.includes(e))throw new Error(`Option "${e}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new 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||(this._parser=new fUn(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new dUn(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._buffer=this._register(new uUn(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";break}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,r){this._verifyIntegers(e,t,r),this._core.select(e,t,r)}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
3975
3975
  `,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 cFe.get()},set promptLabel(e){cFe.set(e)},get tooMuchOutput(){return uFe.get()},set tooMuchOutput(e){uFe.set(e)}}}_verifyIntegers(...e){for(W1 of e)if(W1===1/0||isNaN(W1)||W1%1!==0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...e){for(W1 of e)if(W1&&(W1===1/0||isNaN(W1)||W1%1!==0||W1<0))throw new Error("This API only accepts positive integers")}};var n$e=/(https?|HTTPS?):[/]{2}[^\s"'!*(){}|\\^<>`]*[^\s"':,.!?{}|\\^~[\]`()<>]/;function pUn(e){try{return!!new URL(e).host}catch{return!1}}function _pr(e,t){let r=e(t),n=e(t+1);return!!r&&!!n&&(n.isWrapped||r.isFull)}function mUn(e,t){let r=[];for(let n=t;n-t<64;n++){let i=e(n);if(!i||(r.push(i.text),!_pr(e,n)))break}return r}function wpr(e,t,r){let n=t;for(let i of e){if(r<i.length)return{x:r+1,y:n+1};r-=i.length,n++}}function gUn(e,t,r){let n=r[0],i=wpr(e,t,r.index),o=wpr(e,t,r.index+n.length-1);if(!(!pUn(n)||!i||!o))return{text:n,range:{start:i,end:o}}}function yUn(e,t,r){let n=new RegExp(r.source,`${r.flags||""}g`);return[...e.join("").matchAll(n)].flatMap(o=>gUn(e,t,o)??[])}function kpr(e,t,r=n$e){if(!e(t-1))return[];let n=t-1;for(;n>0&&_pr(e,n-1);)n--;return yUn(mUn(e,n),n,r)}function Epr(e,t){let r=n=>{let i=e.buffer.active.getLine(n);if(!i)return;let o=e.cols,a=i.getCell(o-1);return{text:i.translateToString(!0,0,o),isWrapped:i.isWrapped,isFull:!!a&&a.getChars()!==""&&a.getChars()!==" "}};return{provideLinks(n,i){let o=kpr(r,n,n$e);i(o.map(a=>({range:a.range,text:a.text,activate:t})))}}}function Rpr(e){let t=new Cpr({cursorBlink:!0,fontSize:14,fontFamily:"'Cascadia Code', 'Fira Code', Consolas, monospace",theme:{background:"#1e1e1e",foreground:"#d4d4d4"},linkHandler:{activate:(o,a)=>{window.open(a,"_blank")}}}),r=new tfr;t.loadAddon(r);let n=t.registerLinkProvider(Epr(t,(o,a)=>{window.open(a,"_blank")}));t.open(e);let i;try{i=new xdr,i.onContextLoss(()=>{i?.dispose(),i=void 0}),t.loadAddon(i)}catch{i=void 0}return r.fit(),{term:t,fitAddon:r,dispose:()=>{n.dispose(),i?.dispose(),t.dispose()}}}function Apr(e,t,r,n){if(e.type!=="keydown"||!(e.ctrlKey||e.metaKey)||e.shiftKey||e.altKey)return!0;let i=e.key.toLowerCase();return i==="c"&&t.hasSelection()?(e.preventDefault(),r.writeText(t.getSelection()),!1):i==="v"?(e.preventDefault(),r.readText().then(n),!1):!0}function K9(e){return e!==null&&e.clientWidth>0&&e.clientHeight>0}var vUn=["quickOpen","newSession","navTab","shortcutsSheet","focusSidebar","focusTerminal","toggleDiff","openConfig","openMenu","focusRepoPicker","focusAddAgent","focusVsCode","focusDone"];function Ppr(e){let t=T3.get();return vUn.some(r=>lw(r,t).matches(e))}function Lpr(e,t,{sendInput:r,onOutput:n,sendResize:i,isStale:o,mayResize:a}){let s=Rpr(e);s.term.onData(d=>r(t,d)),s.term.attachCustomKeyEventHandler(d=>Ppr(d)?!1:Apr(d,s.term,navigator.clipboard,h=>s.term.paste(h)));let l=n(t,d=>{o()||s.term.write(d)}),u=new ResizeObserver(()=>{!a()||!K9(e)||(s.fitAddon.fit(),i(t,s.term.cols,s.term.rows))});return u.observe(e),{handle:s,cleanup:()=>{u.disconnect(),l(),s.dispose()}}}var Kj=L(ge(),1);function Mpr({containerRef:e,handleRef:t,staleRef:r,mayResize:n,takeOver:i},o,{visible:a,ownership:s},l){let u=(0,Kj.useCallback)(()=>{let f=t.current;!f||!n()||!K9(e.current)||(f.fitAddon.fit(),kGt()||f.term.focus(),l(o,f.term.cols,f.term.rows))},[e,t,n,o,l]);return(0,Kj.useEffect)(()=>{if(!a)return;let f=setTimeout(()=>{r.current&&Sme()?i():u()},50);return()=>clearTimeout(f)},[a,r,i,u]),(0,Kj.useEffect)(()=>{if(a)return u(),window.addEventListener("focus",u),()=>window.removeEventListener("focus",u)},[a,s,u]),u}var mge=L(ge(),1);function Ipr({containerRef:e,handleRef:t,staleRef:r},n,i,o){let a=(0,mge.useCallback)(()=>{r.current=!1;let s=t.current;s&&(s.term.reset(),K9(e.current)&&(s.fitAddon.fit(),s.term.focus(),o(n,s.term.cols,s.term.rows,!0)))},[e,t,r,n,o]);return(0,mge.useEffect)(()=>{i==="other"?r.current=!0:i==="mine"&&r.current&&a()},[r,i,a]),a}function Dpr(e,t,{visible:r,ownership:n,sendInput:i,onOutput:o,sendResize:a}){let s=(0,bR.useRef)(null),l=(0,bR.useRef)(n==="other"),u=(0,bR.useRef)({visible:r,ownership:n});u.current={visible:r,ownership:n};let f=(0,bR.useRef)(()=>Jur(u.current.ownership,u.current.visible,Sme()));(0,bR.useEffect)(()=>{let m=e.current;if(!m)return;let{handle:g,cleanup:y}=Lpr(m,t,{sendInput:i,onOutput:o,sendResize:a,isStale:()=>l.current,mayResize:f.current});return s.current=g,()=>{y(),s.current=null}},[e,t,o,i,a]);let d={containerRef:e,handleRef:s,staleRef:l},h=Ipr(d,t,n,a),p=Mpr({...d,mayResize:f.current,takeOver:h},t,{visible:r,ownership:n},a);return efr(n,h,p)}var Xj=L(z(),1);function Npr({sessionId:e,visible:t,ownership:r,activeNode:n,onOutput:i,sendInput:o,sendResize:a}){let s=(0,Opr.useRef)(null),l=r==="other",u=Dpr(s,e,{visible:t,ownership:r,sendInput:o,onOutput:i,sendResize:a});return(0,Xj.jsxs)(fe,{"data-terminal-session-id":e,sx:{position:"absolute",inset:"0 0 0 8px",visibility:t?"visible":"hidden",pointerEvents:t?"auto":"none"},onPointerDownCapture:u,children:[(0,Xj.jsx)(fe,{ref:s,sx:{position:"absolute",inset:0,isolation:"isolate"}}),l&&(0,Xj.jsx)(Zur,{activeNode:n})]})}var Bpr="assist-viewer-id";function bUn(){try{return sessionStorage}catch{return}}function xUn(){let e=bUn(),t=e?.getItem(Bpr);if(t)return t;let r=`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;return e?.setItem(Bpr,r),r}var Zj=xUn();var xR=L(z(),1);function TUn(e){return e===void 0?"free":e===Zj?"mine":"other"}function Fpr({sessions:e,activeId:t,activeLoading:r,onOutput:n,sendInput:i,sendResize:o}){return(0,xR.jsxs)(fe,{sx:{flex:1,position:"relative",bgcolor:"background.default"},children:[e.map(a=>(0,xR.jsx)(Npr,{sessionId:a.id,visible:a.id===t,ownership:TUn(a.activeViewer),activeNode:a.activeViewerNode,onOutput:n,sendInput:i,sendResize:o},a.id)),r&&(0,xR.jsx)(Xur,{}),e.length===0&&(0,xR.jsx)(fe,{sx:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%"},children:(0,xR.jsx)($e,{variant:"body2",color:"text.disabled",children:"Create a session to get started"})})]})}var zpr=L(z(),1);function $pr({sessions:e,activeId:t,initialized:r,onOutput:n,sendInput:i,sendResize:o}){let a=e.find(l=>l.id===t),s=a!==void 0&&kfe(a,r);return(0,zpr.jsx)(Fpr,{sessions:e,activeId:t,activeLoading:s,onOutput:n,sendInput:i,sendResize:o})}var X9=L(ge(),1),i$e=(0,X9.createContext)({userMessages:null,fetchUserMessages:()=>{}});function Hpr(e){let{userMessages:t,fetchUserMessages:r}=(0,X9.useContext)(i$e),n=(0,X9.useCallback)(()=>{e&&r(e)},[e,r]);return{history:t?.sessionId===e?t?.messages:void 0,onFetchHistory:n}}var Z9=L(z(),1),SUn={position:"relative",display:"flex",flex:1,minWidth:0,minHeight:0};function Upr({activeSession:e,sendPrDecision:t,showLastMessage:r,...n}){let{history:i,onFetchHistory:o}=Hpr(e?.id);return(0,Z9.jsxs)(fe,{sx:SUn,children:[(0,Z9.jsx)(Bur,{session:e,sendPrDecision:t,sendInput:n.sendInput,children:(0,Z9.jsx)($pr,{...n})}),r&&e!==void 0&&(0,Z9.jsx)(Kur,{message:e.lastUserMessage,history:i,onFetchHistory:o})]})}var Wpr=L(z(),1),Vpr=ft((0,Wpr.jsx)("path",{d:"m22.7 19-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4"}),"Build");var $m=L(z(),1);function Gpr({message:e}){return e.role==="tool"?(0,$m.jsx)(CUn,{tool:e.tool,target:e.target}):(0,$m.jsx)(wUn,{role:e.role,text:e.text})}function CUn({tool:e,target:t}){return(0,$m.jsxs)(fe,{sx:{display:"flex",alignItems:"center",gap:1,py:.5,pl:1},children:[(0,$m.jsx)(Vpr,{sx:{fontSize:14,color:"text.disabled"}}),(0,$m.jsxs)($e,{variant:"caption",sx:{color:"text.secondary",fontFamily:"monospace"},children:[(0,$m.jsx)(fe,{component:"span",sx:{color:"warning.main"},children:e}),t&&(0,$m.jsxs)(fe,{component:"span",children:[" ",t]})]})]})}function wUn({role:e,text:t}){let r=e==="user",n=r?"info.main":"success.main";return(0,$m.jsxs)(fe,{sx:{mb:1.5,pl:1.5,py:1,pr:1,borderLeft:2,borderColor:n,borderTopRightRadius:1,borderBottomRightRadius:1,bgcolor:r?"action.hover":"transparent"},children:[(0,$m.jsx)($e,{variant:"caption",sx:{color:n,fontWeight:600,display:"block",mb:.5},children:r?"User":"Assistant"}),(0,$m.jsx)($e,{variant:"body2",sx:{color:"text.primary",whiteSpace:"pre-wrap",overflowWrap:"anywhere",lineHeight:1.6},children:t})]})}var j1=L(z(),1);function _Un(e){let t=new Map;return e.map(r=>{let n=r.role==="tool"?`tool:${r.tool}:${r.target}`:`${r.role}:${r.text.slice(0,40)}`,i=t.get(n)??0;return t.set(n,i+1),{...r,key:`${n}#${i}`}})}function jpr({messages:e,loading:t}){return t?(0,j1.jsxs)(fe,{sx:qpr,children:[(0,j1.jsx)(mo,{size:20}),(0,j1.jsx)($e,{variant:"caption",color:"text.disabled",children:"Loading transcript\u2026"})]}):e.length===0?(0,j1.jsx)(fe,{sx:qpr,children:(0,j1.jsx)($e,{variant:"body2",color:"text.disabled",children:"No transcript available"})}):(0,j1.jsx)(fe,{sx:{position:"absolute",inset:0,overflowY:"auto",p:2},children:(0,j1.jsx)(fe,{sx:{maxWidth:820,mx:"auto"},children:_Un(e).map(r=>(0,j1.jsx)(Gpr,{message:r},r.key))})})}var qpr={position:"absolute",inset:0,display:"flex",flexDirection:"column",gap:1.5,alignItems:"center",justifyContent:"center"};var o$e=L(z(),1);function Ypr({sessionId:e,transcript:t}){let r=t?.sessionId===e;return(0,o$e.jsx)(fe,{sx:{flex:1,position:"relative",bgcolor:"background.default"},children:(0,o$e.jsx)(jpr,{messages:r?t?.messages??[]:[],loading:!r})})}var C_=L(z(),1),kUn={flex:1,minHeight:0,display:"flex",flexDirection:"column"};function Kpr({viewingTranscriptSessionId:e,transcript:t,sendPrDecision:r,lifecycle:n,...i}){let o=Ld();if(e!==null)return(0,C_.jsx)(Ypr,{sessionId:e,transcript:t});let a=i.sessions.find(s=>s.id===i.activeId);return(0,C_.jsx)(Yu.Provider,{value:a?.node,children:(0,C_.jsxs)(fe,{sx:kUn,children:[(0,C_.jsx)(Usr,{shown:o,session:a,sessions:i.sessions,lifecycle:n}),(0,C_.jsx)(Gsr,{sessionId:i.activeId,sessions:i.sessions,sendInput:i.sendInput,children:(0,C_.jsx)(Upr,{...i,activeSession:a,sendPrDecision:r,showLastMessage:o})})]})})}var s$e=L(z(),1);function Xpr({socket:e}){let t=(0,a$e.useMemo)(()=>({onRetry:e.retrySession,onRestart:e.restartSession,onDismiss:e.dismissSession,onSetAutoRun:e.setAutoRun,onSetAutoAdvance:e.setAutoAdvance}),[e.retrySession,e.restartSession,e.dismissSession,e.setAutoRun,e.setAutoAdvance]),r=(0,a$e.useMemo)(()=>({userMessages:e.userMessages,fetchUserMessages:e.fetchUserMessages}),[e.userMessages,e.fetchUserMessages]);return(0,s$e.jsx)(i$e.Provider,{value:r,children:(0,s$e.jsx)(Kpr,{lifecycle:t,sessions:e.sessions,activeId:e.activeId,initialized:e.initialized,onOutput:e.onOutput,sendInput:e.sendInput,sendResize:e.sendResize,viewingTranscriptSessionId:e.viewingTranscriptSessionId,transcript:e.transcript,sendPrDecision:e.sendPrDecision})})}var gge=L(ge(),1),l$e=(0,gge.createContext)({entries:[],loading:!0,refresh:()=>{}});function yge(){return(0,gge.useContext)(l$e)}var mmr=L(ge(),1);var c$e=L(z(),1);function Zpr({open:e,label:t,onToggle:r}){return(0,c$e.jsx)(sr,{size:"small",onClick:r,"aria-expanded":e,"aria-label":t,sx:{width:28,height:28},children:(0,c$e.jsx)(Iw,{fontSize:"small",sx:{transition:"transform .2s ease",transform:e?"rotate(90deg)":"none"}})})}function vge(e){return e==="webserver"?"web server":"daemon"}var w_=L(z(),1),Qpr=e=>t=>({p:1.5,borderRadius:1,bgcolor:Ea(t.palette[e].main,.1)});function Jpr({entry:e,state:t}){let r=e.status;return r?t.kind==="ready"?(0,w_.jsx)(fe,{sx:Qpr("warning"),children:(0,w_.jsxs)($e,{variant:"body2",children:[(0,w_.jsx)("b",{children:r.running===r.built?"New code is built but not running.":`v${r.built} is built but not running.`})," ","Restart the ",r.restart.map(vge).join(" and ")," on"," ",e.name," to load it.",r.restart.includes("daemon")&&" Open sessions are restored after the daemon restarts."]})}):t.kind==="diverged"?(0,w_.jsx)(fe,{sx:Qpr("error"),children:(0,w_.jsxs)($e,{variant:"body2",children:[(0,w_.jsxs)("b",{children:[e.name,"'s install can't fast-forward to origin."]})," A Claude session",r.loop.escalationId?` (${r.loop.escalationId})`:""," is reconciling it. The update loop resumes when that session closes."]})}):null:null}var bge=L(ge(),1),u$e=L(z(),1),EUn={m:0,p:1.5,borderRadius:1,bgcolor:e=>e.palette.mode==="dark"?"#1b1b1c":"#f3f4f6",fontFamily:"'Roboto Mono', ui-monospace, Menlo, monospace",fontSize:12,lineHeight:1.7,maxHeight:320,overflow:"auto",whiteSpace:"pre"};function emr({lines:e}){let t=(0,bge.useRef)(null);return(0,bge.useLayoutEffect)(()=>{t.current&&(t.current.scrollTop=t.current.scrollHeight)},[e]),e.length===0?(0,u$e.jsx)($e,{variant:"body2",color:"text.secondary",children:"No history yet."}):(0,u$e.jsx)(fe,{component:"pre",ref:t,sx:EUn,children:e.join(`
3976
- `)})}var Q9=L(z(),1);function tmr({entry:e,state:t}){return(0,Q9.jsxs)(fe,{sx:{px:2,pb:2,pl:{xs:2,sm:7.5},display:"grid",gap:1.5},children:[(0,Q9.jsx)(Jpr,{entry:e,state:t}),(0,Q9.jsx)($e,{variant:"caption",color:"text.secondary",children:"History \xB7 ~/.assist/watchers/"}),(0,Q9.jsx)(emr,{lines:e.status?.history??[]})]})}var RUn={ready:"warning",diverged:"error"},rmr=e=>t=>{let r=RUn[e];return{display:"grid",gridTemplateColumns:{xs:"28px minmax(0,1fr)",sm:"28px minmax(0,1.3fr) minmax(0,1fr) minmax(0,1.6fr)"},alignItems:"center",columnGap:1.5,rowGap:1,px:2,py:1.5,boxShadow:r?`inset 3px 0 0 ${t.palette[r].main}`:"none"}};var nmr=L(z(),1),imr=ft((0,nmr.jsx)("path",{d:"m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z"}),"ArrowUpward");var omr=L(z(),1),amr=ft((0,omr.jsx)("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96M3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4z"}),"CloudOff");var smr=L(z(),1),lmr=ft((0,smr.jsx)("path",{d:"M6 19h4V5H6zm8-14v14h4V5z"}),"Pause");var cmr=L(z(),1),umr=ft((0,cmr.jsx)("path",{d:"M1 21h22L12 2zm12-3h-2v-2h2zm0-4h-2v-4h2z"}),"Warning");var P2=L(z(),1),AUn={ok:{tone:"success",icon:(0,P2.jsx)(x1,{})},ready:{tone:"warning",icon:(0,P2.jsx)(imr,{})},diverged:{tone:"error",icon:(0,P2.jsx)(umr,{})},retrying:{tone:"warning",icon:(0,P2.jsx)(ode,{})},off:{tone:"neutral",icon:(0,P2.jsx)(lmr,{})},unavailable:{tone:"neutral",icon:(0,P2.jsx)(amr,{})}};function PUn(e,t){return t==="neutral"?e.palette.text.secondary:e.palette[t].main}function fmr({state:e}){let{tone:t,icon:r}=AUn[e.kind];return(0,P2.jsxs)(fe,{component:"span",sx:n=>({alignSelf:"flex-start",display:"inline-flex",alignItems:"center",gap:.75,height:24,px:1.25,borderRadius:3,fontSize:12,fontWeight:500,whiteSpace:"nowrap",color:PUn(n,t),bgcolor:t==="neutral"?n.palette.action.hover:Ea(n.palette[t].main,.1),border:t==="neutral"?`1px solid ${n.palette.divider}`:0,"& svg":{fontSize:14}}),children:[r,e.label]})}var Y1=L(z(),1),dmr={gridColumn:{xs:"2",sm:"auto"}},LUn={fontFamily:"'Roboto Mono', ui-monospace, Menlo, monospace",fontSize:12,fontVariantNumeric:"tabular-nums"};function hmr({entry:e}){let t=e.status;if(!t)return(0,Y1.jsx)($e,{variant:"caption",color:"text.secondary",sx:dmr,children:"\u2014"});let r=t.running!==t.built;return(0,Y1.jsxs)(fe,{sx:{...dmr,display:"flex",flexDirection:"column"},children:[(0,Y1.jsxs)(fe,{component:"span",sx:LUn,children:["v",t.running,r&&(0,Y1.jsxs)(Y1.Fragment,{children:[" ",(0,Y1.jsx)(fe,{component:"span",sx:{color:"warning.main"},children:"\u2192"})," ","v",t.built]})]}),(0,Y1.jsx)($e,{variant:"caption",color:"text.secondary",children:r?"running \u2192 built":"running"})]})}function xge(e){return(e.status?.restart.length??0)>0}function Tge(e){let{status:t}=e;if(!t)return{kind:"unavailable",label:"Unavailable",line:e.error??"no update state"};let{loop:r}=t,n=fa(r.since);return r.phase==="diverged"?{kind:"diverged",label:"Diverged \xB7 fixing",line:`diverged ${n}${r.escalationId?` \xB7 session ${r.escalationId}`:""}`}:xge(e)?{kind:"ready",label:"Restart to update",line:`restart ${t.restart.map(vge).join(" + ")}`}:r.phase==="off"?{kind:"off",label:"Off",line:r.reason??"not running"}:r.phase==="retrying"?{kind:"retrying",label:"Retrying",line:`${r.reason??"lap failed"} \xB7 ${n}`}:{kind:"ok",label:"Up to date",line:`watching origin since ${n}`}}var np=L(z(),1),pmr={display:"flex",flexDirection:"column",minWidth:0};function gmr({entry:e}){let[t,r]=(0,mmr.useState)(!1),n=Tge(e),i=e.local?"this machine":"linked";return(0,np.jsxs)(fe,{component:"article",sx:{"& + &":{borderTop:1,borderColor:"divider"}},children:[(0,np.jsxs)(fe,{sx:rmr(n.kind),children:[(0,np.jsx)(Zpr,{open:t,label:`${t?"Hide":"Show"} history for ${e.name}`,onToggle:()=>r(o=>!o)}),(0,np.jsxs)(fe,{sx:pmr,children:[(0,np.jsx)($e,{variant:"body2",sx:{fontWeight:500},children:e.name}),(0,np.jsx)($e,{variant:"caption",color:"text.secondary",noWrap:!0,children:e.status?`${i} \xB7 ${e.status.installDir}`:i})]}),(0,np.jsx)(hmr,{entry:e}),(0,np.jsxs)(fe,{sx:{...pmr,gridColumn:{xs:"2",sm:"auto"},gap:.25},children:[(0,np.jsx)(fmr,{state:n}),(0,np.jsx)($e,{variant:"caption",color:"text.secondary",noWrap:!0,children:n.line})]})]}),t&&(0,np.jsx)(tmr,{entry:e,state:n})]})}function ymr(e){let t=e.map(o=>Tge(o).kind),r=o=>t.filter(a=>a===o).length,n=r("ready"),i=[`${e.length} node${e.length===1?"":"s"}`];return i.push(n?`${n} ready to restart`:"all running their latest build"),r("diverged")&&i.push(`${r("diverged")} diverged`),r("unavailable")&&i.push(`${r("unavailable")} unavailable`),i.join(" \xB7 ")}var K1=L(z(),1);function vmr(){let{entries:e,loading:t}=yge();return(0,K1.jsx)(nc,{loading:t,header:(0,K1.jsxs)(K1.Fragment,{children:[(0,K1.jsx)($e,{variant:"h5",component:"h1",children:"Updates"}),(0,K1.jsx)($e,{variant:"body2",color:"text.secondary",sx:{mb:3},children:ymr(e)})]}),children:(0,K1.jsx)(on,{variant:"outlined",component:"section","aria-label":"Nodes",children:e.map(r=>(0,K1.jsx)(gmr,{entry:r},r.name))})})}var agr=L(ge(),1);var J9=L(ge(),1);function Sge(e,t){let r=(0,J9.useRef)(null),[n,i]=(0,J9.useState)();return(0,J9.useLayoutEffect)(()=>{e===t&&r.current&&i(r.current.offsetHeight)},[e,t]),{ref:r,height:n}}var xmr=L(ge(),1);function Cge(e){if(e.startsWith("local:")){let n=e.slice(6).replace(/\/+$/,"").split("/").filter(Boolean);return n[n.length-1]??e}let t=e.indexOf("/");return t===-1?e:e.slice(t+1)}function wge(e){let t=o=>o.startsWith("local:"),r=o=>{let a=Cge(o),s=a.split("/");return s[s.length-1]??a},n=new Map;for(let o of new Set(e)){if(t(o))continue;let a=r(o);n.set(a,(n.get(a)??0)+1)}let i=new Map;for(let o of e){if(t(o)){i.set(o,Cge(o));continue}let a=r(o),s=(n.get(a)??0)>1;i.set(o,s?Cge(o):a)}return i}var Qj={field:"lastPhase",direction:"desc"};var Jj="all",eY="all";async function bmr(e,t,r){let n=new URLSearchParams({page:String(e),pageSize:String(t)});r.origin!==Jj&&n.set("origin",r.origin),r.status!==eY&&n.set("status",r.status),r.sort.field!==Qj.field&&n.set("sort",r.sort.field),r.sort.direction!==Qj.direction&&n.set("direction",r.sort.direction);let i=await fetch(`/api/usage/items?${n}`);if(!i.ok)throw new Error(`Failed to load item usage (HTTP ${i.status}).`);return i.json()}var tY=L(z(),1);function Tmr({origins:e,origin:t,onChange:r}){let n=(0,xmr.useMemo)(()=>wge(e.map(o=>o.origin)),[e]),i=e.reduce((o,a)=>o+a.count,0);return(0,tY.jsxs)(ni,{select:!0,size:"small",label:"Repo",value:t,onChange:o=>r(o.target.value),sx:{minWidth:220},children:[(0,tY.jsx)(cn,{value:Jj,children:`All repos (${i})`}),e.map(o=>(0,tY.jsx)(cn,{value:o.origin,children:`${n.get(o.origin)??o.origin} (${o.count})`},o.origin))]})}var f$e=L(z(),1),MUn=[{value:eY,label:"All"},{value:"done",label:"Done"},{value:"running",label:"Running"}];function Smr({status:e,onChange:t}){return(0,f$e.jsx)(du,{size:"small",exclusive:!0,value:e,onChange:(r,n)=>n&&t(n),"aria-label":"Filter items by status",children:MUn.map(r=>(0,f$e.jsx)(hs,{value:r.value,children:r.label},r.value))})}var eB=L(z(),1),IUn={display:"flex",alignItems:"center",gap:2,flexWrap:"wrap",mb:2},DUn="Repos show their bare name, or org/repo when two share one. Totals sum every phase's recorded usage.";function Cmr({origins:e,origin:t,onOriginChange:r,status:n,onStatusChange:i}){return(0,eB.jsxs)(fe,{sx:IUn,children:[(0,eB.jsx)(Smr,{status:n,onChange:i}),(0,eB.jsx)(Tmr,{origins:e,origin:t,onChange:r}),(0,eB.jsx)($e,{variant:"caption",color:"text.disabled",children:DUn})]})}var Omr=L(ge(),1);var kge=L(z(),1),OUn={whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},wmr={display:"block",fontSize:"0.75rem",color:"text.disabled",whiteSpace:"nowrap"},NUn={...wmr,fontStyle:"italic"};function _ge({total:e,perPhase:t,partial:r}){return(0,kge.jsxs)(_n,{align:"right",sx:OUn,children:[e,t?(0,kge.jsx)($e,{component:"span",sx:r?NUn:wmr,children:t}):null]})}var rY=L(z(),1),BUn={width:"100%",maxWidth:0},FUn={display:"block",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},$Un={display:"block",mt:"2px",fontSize:"0.75rem",color:"text.secondary",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};function _mr({id:e,name:t,type:r,repoLabel:n}){return(0,rY.jsxs)(_n,{sx:BUn,children:[(0,rY.jsx)(xn,{component:ys,to:BT(e),underline:"hover",color:"text.primary",title:t,sx:FUn,children:t}),(0,rY.jsxs)($e,{component:"span",sx:$Un,children:[so(e)," \xB7 ",r," \xB7 ",n]})]})}function kmr(e){let t=Math.max(1,e.recordedPhases);return{active:`${sg(e.activeMs/t)} / phase`,tokens:`${Zf(Math.round((e.tokensUp+e.tokensDown)/t))} / phase`}}function Emr(e){if(!(e.status==="done"||e.recordedPhases>e.phaseCount))return`${e.recordedPhases} of ${e.phaseCount} phases`}var zUn=new Set(["done","wontdo"]);function Rmr(e){return zUn.has(e)?{label:e,color:cJ[e]}:{label:"running",color:"warning"}}var d$e=L(z(),1),HUn={height:20,fontSize:"0.6875rem"};function Amr({status:e}){let t=Rmr(e);return(0,d$e.jsx)(_n,{children:(0,d$e.jsx)(bn,{label:t.label,size:"small",variant:"outlined",color:t.color,sx:HUn})})}var a0=L(z(),1),Pmr={whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"};function Lmr({row:e,repoLabel:t}){let r=kmr(e);return(0,a0.jsxs)(Gu,{hover:!0,children:[(0,a0.jsx)(_mr,{id:e.id,name:e.name,type:e.type,repoLabel:t}),(0,a0.jsx)(Amr,{status:e.status}),(0,a0.jsx)(_ge,{total:String(e.phaseCount||e.recordedPhases),perPhase:Emr(e),partial:!0}),(0,a0.jsx)(_ge,{total:sg(e.activeMs),perPhase:r.active}),(0,a0.jsx)(_ge,{total:`\u2191 ${Zf(e.tokensUp)} \u2193 ${Zf(e.tokensDown)}`,perPhase:r.tokens}),(0,a0.jsx)(_n,{align:"right",sx:Pmr,children:(0,a0.jsxs)(fe,{component:"span",sx:{color:Ife(e.peakContextPct)},children:[Math.round(e.peakContextPct),"%"]})}),(0,a0.jsx)(_n,{align:"right",sx:Pmr,children:e.lastPhaseAt?fa(e.lastPhaseAt):"\u2014"})]})}var Mmr=[{label:"Item"},{label:"Status"},{label:"Phases",sort:"phases",numeric:!0},{label:"Active",sort:"active",numeric:!0,tooltip:"Accumulated active time across the item's phases \u2014 not wall clock."},{label:"Tokens",sort:"tokens",numeric:!0},{label:"Peak ctx",sort:"peakContext",numeric:!0,tooltip:"The highest context-window usage any one phase reached."},{label:"Last phase",sort:"lastPhase",numeric:!0,tooltip:"When the item's most recent phase session started."}];var zm=L(z(),1),UUn={"& th":{whiteSpace:"nowrap"}};function Imr({column:e}){return e.tooltip?(0,zm.jsx)(lr,{title:e.tooltip,describeChild:!0,children:(0,zm.jsx)("span",{children:e.label})}):(0,zm.jsx)(zm.Fragment,{children:e.label})}function Dmr({sort:e,onSort:t}){return(0,zm.jsx)(Dk,{sx:UUn,children:(0,zm.jsx)(Gu,{children:Mmr.map(r=>{let n=r.sort,i=n!==void 0&&e.field===n;return(0,zm.jsx)(_n,{align:r.numeric?"right":"left",sortDirection:i?e.direction:!1,children:n===void 0?(0,zm.jsx)(Imr,{column:r}):(0,zm.jsx)(q1e,{active:i,direction:i?e.direction:"desc",onClick:()=>t(n),children:(0,zm.jsx)(Imr,{column:r})})},r.label)})})})}var TR=L(z(),1),WUn={"& td, & th":{px:1.5}};function Nmr({rows:e,origins:t,sort:r,onSort:n}){let i=(0,Omr.useMemo)(()=>wge([...t,...e.map(o=>o.origin)]),[t,e]);return(0,TR.jsx)(Ik,{component:on,children:(0,TR.jsxs)(wv,{size:"small",sx:WUn,children:[(0,TR.jsx)(Dmr,{sort:r,onSort:n}),(0,TR.jsx)(_v,{children:e.map(o=>(0,TR.jsx)(Lmr,{row:o,repoLabel:i.get(o.origin)??o.origin},o.id))})]})})}function Bmr(e){let t=Math.max(1,e.medianPhases),r=e.repoCount===1?"repo":"repos";return{items:String(e.itemCount),itemsFoot:`across ${e.repoCount} ${r} \xB7 ${e.doneCount} done`,phases:String(Math.round(e.medianPhases*10)/10),active:sg(e.medianActiveMs),activeFoot:`${sg(e.medianActiveMs/t)} per phase`,tokens:Zf(Math.round(e.medianTokens)),tokensFoot:`${Zf(Math.round(e.medianTokens/t))} per phase`}}var tB=L(z(),1),Fmr={display:"block"},VUn={fontWeight:400,fontVariantNumeric:"tabular-nums"};function nY({label:e,value:t,foot:r}){return(0,tB.jsxs)(fe,{children:[(0,tB.jsx)($e,{variant:"caption",color:"text.secondary",sx:Fmr,children:e}),(0,tB.jsx)($e,{variant:"h5",sx:VUn,children:t}),r?(0,tB.jsx)($e,{variant:"caption",color:"text.disabled",sx:Fmr,children:r}):null]})}var SR=L(z(),1),GUn={display:"flex",flexDirection:{xs:"column",sm:"row"},mb:3,"& > *":{flex:1,minWidth:0,p:2},"& > * + *":{borderColor:"divider",borderTop:{xs:1,sm:0},borderLeft:{xs:0,sm:1}}};function $mr({summary:e}){let t=Bmr(e);return(0,SR.jsxs)(on,{sx:GUn,children:[(0,SR.jsx)(nY,{label:"Items with recorded usage",value:t.items,foot:t.itemsFoot}),(0,SR.jsx)(nY,{label:"Median phases",value:t.phases}),(0,SR.jsx)(nY,{label:"Median active time",value:t.active,foot:t.activeFoot}),(0,SR.jsx)(nY,{label:"Median tokens",value:t.tokens,foot:t.tokensFoot})]})}var ip=L(z(),1);function zmr({items:e,data:t}){let{rows:r,total:n,page:i,pageSize:o}=e,{ref:a,height:s}=Sge(r.length,o);return(0,ip.jsxs)(ip.Fragment,{children:[(0,ip.jsx)($mr,{summary:t.summary}),(0,ip.jsx)(Cmr,{origins:t.origins,origin:e.origin,onOriginChange:e.selectOrigin,status:e.status,onStatusChange:e.selectStatus}),n===0?(0,ip.jsx)($e,{color:"text.secondary",align:"center",sx:{py:6},children:"No items match this filter."}):(0,ip.jsxs)(ip.Fragment,{children:[(0,ip.jsx)(fe,{ref:a,sx:{minHeight:s},children:(0,ip.jsx)(Nmr,{rows:r,origins:t.origins.map(l=>l.origin),sort:e.sort,onSort:e.sortBy})}),(0,ip.jsx)(jF,{component:"div",count:n,page:i,rowsPerPage:o,rowsPerPageOptions:[o],onPageChange:(l,u)=>e.setPage(u)})]})]})}var L2=L(z(),1);function Hmr({items:e}){let{data:t}=e;return(0,L2.jsxs)(L2.Fragment,{children:[(0,L2.jsx)(fe,{sx:{height:4,mb:1},children:e.fetching&&(0,L2.jsx)(Mk,{})}),t?t.origins.length===0?(0,L2.jsx)($e,{color:"text.secondary",align:"center",sx:{py:6},children:"No item usage recorded yet."}):(0,L2.jsx)(zmr,{items:e,data:t}):null]})}function h$e(e,t,r){if(e==null)return;let n=Math.max(0,e-r),i=Math.max(0,t-n)/t;if(!(i<.05))return i}function Ege(e,t){let r=Math.max(0,e-t),n=Math.floor(r/86400),i=Math.floor(r%86400/3600),o=Math.floor(r%3600/60);return n>0?`${n}d ${i}h`:i>0?`${i}h ${o}m`:`${o}m`}function qUn(e,t,r,n){let i=h$e(t,r,n);if(i!=null)return e/i}function __(e,t,r,n){let i=qUn(e,t,r,n);return i==null?"ok":i>100?"over":i>75?"warn":"ok"}var jUn=["five_hour","seven_day"],YUn=["claude","codex","pi"];function Umr(e){let[t,r]=e.includes(":")?e.split(":",2):["claude",e],n=YUn.find(o=>o===t),i=jUn.find(o=>o===r);if(!(!n||!i)&&!(n==="claude"&&e.includes(":")))return{harness:n,window:i}}var Wmr={five_hour:{label:"5h",seconds:18e3},seven_day:{label:"7d",seconds:604800,tint:{light:"rgba(0, 0, 0, 0.1)",dark:"rgba(255, 255, 255, 0.1)"}}};function rB(e){let t=Umr(e);if(!t)return Wmr.five_hour;let r=Wmr[t.window];return t.harness==="claude"?r:{...r,label:`${Lu(t.harness)} ${r.label}`}}var KUn={ok:"success.main",warn:"warning.main",over:"error.main"};function k_(e){return KUn[e]}var aY=L(z(),1),XUn={ok:"success",warn:"warning",over:"error"};function Vmr({percentage:e,level:t}){return(0,aY.jsxs)(fe,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,aY.jsx)(Mk,{variant:"determinate",value:Math.min(100,e),color:XUn[t],sx:{flexGrow:1,height:8,borderRadius:1}}),(0,aY.jsxs)(fe,{sx:{minWidth:40,textAlign:"right",color:k_(t)},children:[Math.round(e),"%"]})]})}function Gmr(e){return e.avgContextPct==null?"\u2014":`${Math.round(e.avgContextPct)}%`}var ZUn=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function p$e(e){return ZUn.format(e)}var Rge=L(z(),1);function qmr({peak:e}){return(0,Rge.jsx)(_n,{align:"right",sx:{whiteSpace:"nowrap"},children:(0,Rge.jsx)(lr,{title:`Cycle started ${p$e(new Date(e.createdAt))}`,children:(0,Rge.jsx)("span",{children:p$e(new Date(e.resetsAt*1e3))})})})}var Ymr=L(z(),1);function jmr(){return(0,Ymr.jsx)(bn,{label:"reset",size:"small",color:"warning",variant:"outlined",title:"Quota reset mid-cycle \u2014 this is the peak reached before the reset.",sx:{ml:1}})}function Kmr(e){return!e.tokensUp&&!e.tokensDown?"\u2014":`\u2191 ${Zf(e.tokensUp)} \u2193 ${Zf(e.tokensDown)}`}var s0=L(z(),1);function Xmr({peak:e,now:t}){let{label:r,seconds:n,tint:i}=rB(e.window),o=__(e.usedPercentage,e.resetsAt,n,t);return(0,s0.jsxs)(Gu,{sx:a=>({backgroundColor:i?a.palette.mode==="dark"?i.dark:i.light:void 0}),children:[(0,s0.jsxs)(_n,{children:[r,e.resetDetected&&(0,s0.jsx)(jmr,{})]}),(0,s0.jsx)(_n,{sx:{minWidth:160},children:(0,s0.jsx)(Vmr,{percentage:e.usedPercentage,level:o})}),(0,s0.jsx)(_n,{align:"right",sx:{whiteSpace:"nowrap"},children:Gmr(e)}),(0,s0.jsx)(_n,{align:"right",sx:{whiteSpace:"nowrap"},children:e.phaseCount??0}),(0,s0.jsx)(_n,{align:"right",sx:{whiteSpace:"nowrap"},children:Kmr(e)}),(0,s0.jsx)(qmr,{peak:e})]})}var Age=L(ge(),1);function E_(e){let[t,r]=(0,Age.useState)(()=>Math.floor(Date.now()/1e3));return(0,Age.useEffect)(()=>{let n=setInterval(()=>r(Math.floor(Date.now()/1e3)),e);return()=>clearInterval(n)},[e]),t}var pc=L(z(),1);function Zmr({peaks:e}){let t=E_(3e4);return(0,pc.jsx)(Ik,{component:on,children:(0,pc.jsxs)(wv,{size:"small",children:[(0,pc.jsx)(Dk,{sx:{"& th":{whiteSpace:"nowrap"}},children:(0,pc.jsxs)(Gu,{children:[(0,pc.jsx)(_n,{children:"Window"}),(0,pc.jsx)(_n,{children:"Peak usage"}),(0,pc.jsx)(_n,{align:"right",children:(0,pc.jsx)(lr,{title:"Mean context-window usage across all readings in this rate-limit cycle \u2014 distinct from the Peak usage quota above.",children:(0,pc.jsx)("span",{children:"Avg context"})})}),(0,pc.jsx)(_n,{align:"right",children:(0,pc.jsx)(lr,{title:"Number of phase readings behind the average.",children:(0,pc.jsx)("span",{children:"Phases"})})}),(0,pc.jsx)(_n,{align:"right",children:"Tokens spent"}),(0,pc.jsx)(_n,{align:"right",children:"Cycle reset"})]})}),(0,pc.jsx)(_v,{children:e.map(r=>(0,pc.jsx)(Xmr,{peak:r,now:t},`${r.window}-${r.resetsAt}-${r.segment}`))})]})})}var R_=L(z(),1);function Qmr({rows:e,total:t,page:r,pageSize:n,onPageChange:i}){let{ref:o,height:a}=Sge(e.length,n);return(0,R_.jsxs)(R_.Fragment,{children:[(0,R_.jsx)(fe,{ref:o,sx:{minHeight:a},children:(0,R_.jsx)(Zmr,{peaks:e})}),(0,R_.jsx)(jF,{component:"div",count:t,page:r,rowsPerPage:n,rowsPerPageOptions:[n],onPageChange:(s,l)=>i(l)})]})}var m$e=L(z(),1),Jmr=["five_hour","seven_day"],QUn=["codex:five_hour","codex:seven_day"];function JUn(e){let t=e?[...Jmr,...QUn]:Jmr;return[{value:"all",label:"All"},...t.map(r=>({value:r,label:rB(r).label}))]}function egr({window:e,onChange:t}){let{exposeCodexActions:r}=$T();return(0,m$e.jsx)(du,{size:"small",exclusive:!0,value:e,onChange:(n,i)=>i&&t(i),"aria-label":"Filter peaks by rate-limit window",children:JUn(r).map(n=>(0,m$e.jsx)(hs,{value:n.value,children:n.label},n.value))})}var X1=L(z(),1);function tgr({history:e}){let{window:t,total:r}=e;return(0,X1.jsxs)(X1.Fragment,{children:[(0,X1.jsx)(egr,{window:t,onChange:e.selectWindow}),(0,X1.jsx)(fe,{sx:{height:4,my:1},children:e.fetching&&(0,X1.jsx)(Mk,{})}),r===0?(0,X1.jsx)($e,{color:"text.secondary",align:"center",sx:{py:6},children:t==="all"?"No usage peaks recorded yet.":`No ${rB(t).label} usage peaks recorded yet.`}):(0,X1.jsx)(Qmr,{rows:e.rows,total:r,page:e.page,pageSize:e.pageSize,onPageChange:e.setPage})]})}var Lge=L(ge(),1);async function rgr(e,t,r){let n=new URLSearchParams({page:String(e),pageSize:String(t)});r!=="all"&&n.set("window",r);let i=await fetch(`/api/usage/history?${n}`);if(!i.ok)throw new Error(`Failed to load usage history (HTTP ${i.status}).`);return i.json()}var A_=L(ge(),1);function Pge(e,t,r=!0){let[n,i]=(0,A_.useState)(0),[o,a]=(0,A_.useState)(null),[s,l]=(0,A_.useState)(!1),[u,f]=(0,A_.useState)(null);(0,A_.useEffect)(()=>{if(!r)return;let p=!1;return l(!0),e(n,t).then(m=>{p||(a(m),l(!1))},m=>{p||(f(m instanceof Error?m:new Error(String(m))),l(!1))}),()=>{p=!0}},[e,n,t,r]);let d=o?.total??0;(0,A_.useEffect)(()=>{if(d===0)return;let p=Math.ceil(d/t)-1;n>p&&i(p)},[n,t,d]);let h=o?.rows??[];return{data:o,rows:h,total:d,loaded:o!==null,fetching:s,error:u,page:n,setPage:i,pageSize:t}}var eWn=30;function ngr(){let[e,t]=(0,Lge.useState)("all"),r=(0,Lge.useCallback)((o,a)=>rgr(o,a,e),[e]),n=Pge(r,eWn);return{...n,window:e,selectWindow:o=>{t(o),n.setPage(0)}}}var nB=L(ge(),1);function igr(e,t){return e.field!==t?{field:t,direction:"desc"}:{field:t,direction:e.direction==="desc"?"asc":"desc"}}var tWn=30;function ogr(e){let[t,r]=(0,nB.useState)(Jj),[n,i]=(0,nB.useState)(eY),[o,a]=(0,nB.useState)(Qj),s=(0,nB.useCallback)((h,p)=>bmr(h,p,{origin:t,status:n,sort:o}),[t,n,o]),l=Pge(s,tWn,e);return{...l,origin:t,selectOrigin:h=>{r(h),l.setPage(0)},status:n,selectStatus:h=>{i(h),l.setPage(0)},sort:o,sortBy:h=>{a(p=>igr(p,h)),l.setPage(0)}}}var P_=L(z(),1),rWn={borderBottom:1,borderColor:"divider",mb:2};function sgr(){let[e,t]=(0,agr.useState)("limits"),r=ngr(),n=ogr(e==="items");if(r.error)throw r.error;if(n.error)throw n.error;return(0,P_.jsxs)(nc,{loading:!r.loaded,title:"Usage history",maxWidth:"lg",children:[(0,P_.jsxs)(Nk,{value:e,onChange:(i,o)=>t(o),textColor:"inherit",indicatorColor:"secondary",sx:rWn,"aria-label":"Usage history views",children:[(0,P_.jsx)(Cv,{label:"Rate limits",value:"limits"}),(0,P_.jsx)(Cv,{label:"Items",value:"items"})]}),e==="limits"?(0,P_.jsx)(tgr,{history:r}):(0,P_.jsx)(Hmr,{items:n})]})}var hi=L(z(),1);function nWn({socket:e}){return(0,hi.jsx)(SF,{maxWidth:"lg",sx:{py:3,px:2},children:(0,hi.jsx)(dGt,{socket:e})})}function lgr({socket:e}){return W0("AppRoutes"),(0,hi.jsxs)(hi.Fragment,{children:[(0,hi.jsx)(gsr,{}),(0,hi.jsx)(c5,{children:(0,hi.jsxs)(gs,{element:(0,hi.jsx)(XYt,{socket:e}),children:[(0,hi.jsx)(gs,{path:"sessions",element:(0,hi.jsx)(Xpr,{socket:e})}),(0,hi.jsx)(gs,{path:"backlog/*",element:(0,hi.jsx)(nWn,{socket:e})}),(0,hi.jsx)(gs,{path:"next",element:(0,hi.jsx)(Aar,{sessions:e.sessions,selectSession:e.selectSession})}),(0,hi.jsx)(gs,{path:"news",element:(0,hi.jsx)(zor,{})}),(0,hi.jsx)(gs,{path:"releases",element:(0,hi.jsx)(dsr,{})}),(0,hi.jsx)(gs,{path:"usage",element:(0,hi.jsx)(sgr,{})}),(0,hi.jsx)(gs,{path:"backups",element:(0,hi.jsx)(nKt,{})}),(0,hi.jsx)(gs,{path:"config",element:(0,hi.jsx)(jXt,{})}),(0,hi.jsx)(gs,{path:"updates",element:(0,hi.jsx)(vmr,{})}),(0,hi.jsx)(gs,{path:"diff",element:(0,hi.jsx)(ior,{socket:e})}),(0,hi.jsx)(gs,{path:"file",element:(0,hi.jsx)(Oor,{socket:e})}),(0,hi.jsx)(gs,{path:"*",element:(0,hi.jsx)(Qxe,{to:"/sessions",replace:!0})})]})})]})}var Nge=L(ge(),1);var Oge=L(ge(),1);function cgr(e,t,r){if(!e)return"Select a repo to search files.";if(r.error)return"Couldn't search files in this repo.";if(!(r.files.length>0||r.loading))return t?"No matching files.":"No files in this repo."}var L_=L(z(),1),iWn={display:"flex",gap:1,alignItems:"center",minWidth:0},oWn={display:"flex",gap:1,alignItems:"baseline",minWidth:0,overflow:"hidden"},aWn={fontFamily:"monospace",fontSize:13,whiteSpace:"nowrap"},sWn={fontFamily:"monospace",fontSize:11,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};function lWn(e){let t=e.lastIndexOf("/");return t===-1?{dir:"",basename:e}:{dir:e.slice(0,t),basename:e.slice(t+1)}}function ugr({files:e,highlight:t,onHighlight:r,onSelect:n}){return(0,L_.jsx)(Sp,{dense:!0,sx:{py:0},children:e.map((i,o)=>{let{dir:a,basename:s}=lWn(i);return(0,L_.jsxs)(cn,{selected:o===t,onMouseEnter:()=>r(o),onClick:()=>n(i),sx:iWn,children:[(0,L_.jsx)(c9,{path:i}),(0,L_.jsxs)(fe,{sx:oWn,children:[(0,L_.jsx)($e,{component:"span",sx:aWn,children:s}),(0,L_.jsx)($e,{component:"span",color:"text.secondary",sx:sWn,children:a})]})]},i)})})}var Mge=L(z(),1),cWn={maxHeight:420,overflowY:"auto"},uWn={px:2,py:2,fontSize:13};function fgr({message:e,files:t,highlight:r,onHighlight:n,onSelect:i}){return(0,Mge.jsx)(fe,{sx:cWn,children:e?(0,Mge.jsx)($e,{color:"text.secondary",sx:uWn,children:e}):(0,Mge.jsx)(ugr,{files:t,highlight:r,onHighlight:n,onSelect:i})})}var dgr=L(z(),1),fWn={mt:6,alignSelf:"flex-start"};function Ige({onClose:e,onEntered:t,centered:r=!1,children:n}){return(0,dgr.jsx)(Ps,{open:!0,onClose:e,maxWidth:"sm",fullWidth:!0,slotProps:{paper:{sx:r?void 0:fWn},transition:{onEntered:t}},children:n})}var Dge=L(ge(),1);var hgr={files:[],loading:!1,error:!1};function pgr(e,t){let[r,n]=(0,Dge.useState)(hgr),i=vr();return(0,Dge.useEffect)(()=>{if(!e){n(hgr);return}let o=!1;return n(s=>({...s,loading:!0})),(async()=>{try{let s=await fetch(un(`/api/files?cwd=${encodeURIComponent(e)}&q=${encodeURIComponent(t)}`,i));if(!s.ok)throw new Error(`HTTP ${s.status}`);let l=await s.json();if(o)return;n({files:Array.isArray(l.files)?l.files:[],loading:!1,error:!1})}catch{o||n({files:[],loading:!1,error:!0})}})(),()=>{o=!0}},[e,t,i]),r}var CR=L(z(),1);function dWn(e,t,r){let n=new URLSearchParams({path:e});return t&&n.set("cwd",t),t&&r&&n.set("node",r),`/file?${n}`}function mgr({onClose:e}){let{worktreeNode:t}=$n();return(0,CR.jsx)(Yu.Provider,{value:t,children:(0,CR.jsx)(hWn,{onClose:e})})}function hWn({onClose:e}){let{worktreeCwd:t,worktreeNode:r}=$n(),[n,i]=(0,Oge.useState)(""),o=pgr(t,n),a=Xi(),s=(0,Oge.useRef)(null),l=p=>a(dWn(p,t,r)),{highlight:u,setHighlight:f,onKeyDown:d}=HT(o.files,n,l,e),h=p=>{l(p),e()};return(0,CR.jsxs)(Ige,{onClose:e,onEntered:()=>s.current?.focus(),children:[(0,CR.jsx)(mP,{autoFocus:!0,inputRef:s,value:n,onChange:i,onKeyDown:d,placeholder:"Search files by name..."}),(0,CR.jsx)(fgr,{message:cgr(t,n,o),files:o.files,highlight:u,onHighlight:f,onSelect:h})]})}function ggr(e){zo(Xn("quickOpen").matches,e)}var vgr=L(z(),1);function ygr(){let[e,t]=(0,Nge.useState)(!1);return ggr((0,Nge.useCallback)(()=>t(!0),[])),e?(0,vgr.jsx)(mgr,{onClose:()=>t(!1)}):null}var Bge=L(z(),1);function bgr({notice:e,onClose:t,onView:r}){let n=e?.sessionId??null;return(0,Bge.jsx)(ol,{open:e!==null,autoHideDuration:6e3,onClose:t,anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,Bge.jsx)(ri,{severity:"success",variant:"filled",onClose:t,action:n!==null?(0,Bge.jsx)(Jt,{color:"inherit",size:"small",onClick:()=>r(n),children:"View"}):void 0,children:e?.message})})}var Uge=L(ge(),1);function xgr(e){let t=["claude"];return e.exposeCodexActions&&t.push("codex"),e.exposePiActions&&t.push("pi"),t}var Igr=L(ge(),1);var Tgr=L(z(),1),Sgr=ft((0,Tgr.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2"}),"Circle");var M_="0.775.5";var pWn={connected:"success.main",connecting:"warning.main",disconnected:"error.main","version-blocked":"error.main"};function Cgr(e){return e?pWn[e]:"success.main"}function wgr(e){return e.split("-")[0].split(".").map(Number)}function _gr(e,t){if(!e||!t||e===t)return;let r=wgr(e),n=wgr(t);for(let i=0;i<Math.max(r.length,n.length);i++){let o=(r[i]??0)-(n[i]??0);if(Number.isNaN(o))return;if(o!==0)return o<0?"behind":"ahead"}}var Fge=L(ge(),1),g$e=(0,Fge.createContext)(null);function $ge(){return(0,Fge.useContext)(g$e)}var wR=L(z(),1),mWn={height:16,fontSize:10},gWn={opacity:.6,fontSize:"0.85em"};function yWn(e,t){if(t===e.local)return"this machine";let r=e.links.find(n=>n.name===t);return r?r.error?`${r.state}: ${r.error}`:r.state:""}function sY({nodes:e,name:t,showVersion:r=!1}){let n=$ge()??M_,i=e.links.find(a=>a.name===t),o=_gr(i?.peerVersion,n);return(0,wR.jsx)(lr,{title:yWn(e,t),placement:"right",children:(0,wR.jsxs)(fe,{component:"span",sx:{display:"inline-flex",alignItems:"center",gap:.75},children:[(0,wR.jsx)(Sgr,{sx:{fontSize:8,color:Cgr(i?.state)}}),t,r&&i?.peerVersion&&(0,wR.jsxs)(fe,{component:"span",sx:gWn,children:["v",i.peerVersion]}),o&&(0,wR.jsx)(bn,{label:o,size:"small",color:o==="behind"?"warning":"info",sx:mWn})]})})}var _R=L(z(),1),vWn={opacity:.6},bWn={display:"inline-flex",alignItems:"center",gap:.5,px:.5,border:1,borderStyle:"dashed",borderRadius:1};function kgr({nodes:e,name:t,clone:r}){let n=(0,_R.jsx)(sY,{nodes:e,name:t});return r.kind==="cloned"?n:r.kind==="unavailable"?(0,_R.jsx)(fe,{component:"span",sx:vWn,children:n}):(0,_R.jsx)(lr,{title:uP(t,r.cloneTarget),children:(0,_R.jsxs)(fe,{component:"span",sx:bWn,children:[(0,_R.jsx)(cP,{sx:{fontSize:14}}),n]})})}var Rgr=L(z(),1),xWn={px:1.5,borderRadius:.75,fontSize:12,fontWeight:600,color:"text.secondary","&:hover":{color:"text.primary",bgcolor:"action.hover"},"&[aria-checked='true']":{color:"primary.main",bgcolor:"action.selected"},"&.Mui-focusVisible":{outline:2,outlineColor:"primary.main"}};function Egr({value:e,label:t,checked:r,autoFocus:n,onSelect:i}){return(0,Rgr.jsx)(Dn,{role:"radio","aria-checked":r,"data-value":e,tabIndex:r?0:-1,autoFocus:n&&r,onClick:i,sx:xWn,children:t})}var Agr={ArrowRight:1,ArrowLeft:-1};function TWn(e,t,r){if(e.key==="Tab"){let n=t+(e.shiftKey?-1:1);return n>=0&&n<r?n:void 0}return(t+Agr[e.key]+r)%r}function Pgr(e,t,r,n){return i=>{if(i.key==="ArrowUp"||i.key==="ArrowDown"){if(!n)return;i.preventDefault(),n();return}if(i.key!=="Tab"&&!Agr[i.key]){Bx(i);return}let o=TWn(i,e.indexOf(t),e.length);o!==void 0&&(i.preventDefault(),r(e[o]),i.currentTarget.querySelector(`[data-value="${e[o]}"]`)?.focus())}}var Lgr=L(ge(),1);function iB(e){return e?.querySelector('[aria-checked="true"]')}function Mgr(e,t){(0,Lgr.useEffect)(()=>{let r=e.current;if(!r?.contains(document.activeElement))return;let n=iB(r);n&&n!==document.activeElement&&n.focus()},[e,t])}var y$e=L(z(),1),SWn={border:1,borderColor:"divider",borderRadius:1,height:40,p:"2px",flexShrink:0};function zge({label:e,options:t,value:r,onChange:n,optionLabel:i=u=>u,groupRef:o,autoFocus:a,onTrack:s,onToggleRow:l}){return Mgr(o,r),(0,y$e.jsx)(Rt,{ref:o,direction:"row",role:"radiogroup","aria-label":e,spacing:"2px",onFocus:s,onKeyDown:Pgr(t,r,n,l),sx:SWn,children:t.map(u=>(0,y$e.jsx)(Egr,{value:u,label:i(u),checked:u===r,autoFocus:a,onSelect:()=>n(u)},u))})}var v$e=L(z(),1);function Dgr({value:e,onChange:t,cloneState:r}){let{nodes:n,names:i,visible:o}=gu(),a=(0,Igr.useRef)(null);return!o||!n||!e?null:(0,v$e.jsx)(zge,{label:"Machine",options:i,value:e,onChange:t,optionLabel:s=>(0,v$e.jsx)(kgr,{nodes:n,name:s,clone:r(s)}),groupRef:a,autoFocus:!1,onTrack:()=>{}})}var Ngr=L(z(),1);function Ogr({value:e,onChange:t,placeholder:r,inputRef:n,autoFocus:i,onTrack:o}){return(0,Ngr.jsx)(ni,{value:e,onChange:a=>t(a.target.value),onKeyDown:Bx,onFocus:o,onSelect:o,inputRef:n,placeholder:r,autoFocus:i,fullWidth:!0,multiline:!0,minRows:3,maxRows:12,slotProps:{htmlInput:{"aria-label":"Prompt"},input:{sx:{fontSize:14}}}})}var zgr=L(ge(),1);var M2={draft:{placeholder:"Describe the backlog item to draft...",submitLabel:"Start draft",sessionMode:"assist-draft"},bug:{placeholder:"Describe the bug: what happened, what you expected...",submitLabel:"File bug",sessionMode:"assist-bug"},prompt:{placeholder:fde,submitLabel:"Start session"},design:{placeholder:"Describe the design task...",submitLabel:"Start design"}},Bgr=Object.keys(M2);var b$e=L(z(),1);function Fgr({anchor:e,harness:t,harnesses:r,onPick:n,onClose:i}){return(0,b$e.jsx)(Dl,{open:e!==null,anchorEl:e,onClose:i,slotProps:{list:{dense:!0,"aria-label":"Harness"}},children:r.map(o=>(0,b$e.jsx)(cn,{role:"menuitemradio","aria-checked":o===t,selected:o===t,onClick:()=>{n(o),i()},sx:{fontSize:13},children:Lu(o)},o))})}var kR=L(z(),1);function $gr(e){return t=>t==="prompt"&&e?(0,kR.jsxs)(kR.Fragment,{children:["prompt",(0,kR.jsx)(fe,{component:"span",sx:{fontWeight:400,whiteSpace:"pre"},children:` \xB7 ${Lu(e)}`}),(0,kR.jsx)(Bp,{sx:{fontSize:18,mr:-.75}})]}):t}var ER=L(z(),1);function Hgr({draft:e,harness:t,harnesses:r,focus:n}){let[i,o]=(0,zgr.useState)(null),a=e.mode==="prompt"&&r.length>1,s=()=>o(iB(n.modeRef.current)??null),l=u=>{a&&u==="prompt"?s():e.setMode(u)};return(0,ER.jsxs)(ER.Fragment,{children:[(0,ER.jsx)(zge,{label:"Mode",options:Bgr,value:e.mode,onChange:l,optionLabel:$gr(r.length>1?t:void 0),groupRef:n.modeRef,autoFocus:n.autoFocus==="mode",onTrack:n.trackMode,onToggleRow:a?s:void 0}),(0,ER.jsx)(Fgr,{anchor:i,harness:t,harnesses:r,onPick:e.setHarness,onClose:()=>o(null)})]})}var Qgr=L(ge(),1);var x$e=L(z(),1),CWn={zIndex:e=>e.zIndex.modal+1};function Ugr({open:e,anchor:t,children:r}){return(0,x$e.jsx)(MA,{open:e,anchorEl:t,placement:"bottom-start",sx:CWn,children:(0,x$e.jsx)(on,{sx:{maxHeight:240,overflowY:"auto",width:t?.clientWidth},onMouseDown:n=>n.preventDefault(),children:r})})}function Wgr(e){return{htmlInput:{role:"combobox","aria-label":"Repo","aria-expanded":e},input:{sx:{fontSize:13,height:40}}}}var Vgr=L(QB(),1);function Ggr({open:e,highlighted:t,accept:r,close:n,navigate:i,openList:o}){return a=>{if(!e){if(a.key==="ArrowDown"){a.preventDefault(),o();return}Bx(a);return}if(a.key!=="Escape"){if(a.key==="Enter"){if(a.preventDefault(),t===void 0)return;(0,Vgr.flushSync)(()=>{r(t),n()}),Bx(a);return}if(a.key!=="Tab"){i(a);return}t!==void 0&&r(t),n()}}}function qgr(e,t){let r=t.trim().toLowerCase();return r?e.filter(n=>H0(n).toLowerCase().includes(r)):e}var T$e=L(ge(),1);function jgr(){let[e,t]=(0,T$e.useState)(!1),[r,n]=(0,T$e.useState)("");return{open:e,query:r,show:()=>t(!0),filterBy:i=>{n(i),t(!0)},close:()=>{t(!1),n("")}}}var Kgr=L(ge(),1);var Ygr=e=>e?H0(e):"";function Xgr(e){let[t,r]=(0,Kgr.useState)(()=>Ygr(e));return{text:t,setText:r,showRepo:n=>r(Ygr(n))}}function Zgr(e,t,r){let n=jgr(),i=Xgr(t),o=qgr(e,n.query),a=f=>{r(f),i.showRepo(f)},s=HT(o,n.query,a,n.close),l=()=>s.setHighlight(Math.max(e.indexOf(t),0)),u=()=>{l(),n.show()};return{open:n.open,text:i.text,filtered:o,highlight:s.highlight,setHighlight:s.setHighlight,onKeyDown:Ggr({open:n.open,highlighted:o[s.highlight],accept:a,close:n.close,navigate:s.onKeyDown,openList:u}),onClick:()=>{n.open||u()},onType:f=>{i.setText(f),n.filterBy(f)},onFocus:l,onBlur:()=>{n.close(),i.showRepo(t)},pick:f=>{a(f),n.close()}}}var oB=L(z(),1);function Jgr({repos:e,value:t,onChange:r,inputRef:n,autoFocus:i,onTrack:o}){let a=Zgr(e,t,r),s=(0,Qgr.useRef)(null);return(0,oB.jsxs)(fe,{ref:s,sx:{flex:1,minWidth:0},children:[(0,oB.jsx)(ni,{value:a.text,onChange:l=>a.onType(l.target.value),onFocus:l=>{l.target.select(),a.onFocus(),o()},inputRef:n,autoFocus:i,onClick:a.onClick,onBlur:a.onBlur,onKeyDown:a.onKeyDown,placeholder:"Repo",size:"small",fullWidth:!0,slotProps:Wgr(a.open)}),(0,oB.jsx)(Ugr,{open:a.open,anchor:s.current,children:(0,oB.jsx)(AJ,{repos:a.filtered,selected:t,highlight:a.highlight,onHighlight:a.setHighlight,onSelect:a.pick})})]})}var I_=L(z(),1);function e0r({cloneState:e,...t}){let{draft:r,focus:n}=t,{repos:i}=$n();return(0,I_.jsxs)(Rt,{spacing:1,sx:{p:1},children:[(0,I_.jsx)(Ogr,{value:r.prompt,onChange:r.setPrompt,placeholder:M2[r.mode].placeholder,inputRef:n.promptRef,autoFocus:n.autoFocus==="prompt",onTrack:n.trackPrompt}),(0,I_.jsxs)(Rt,{direction:"row",spacing:1,sx:{alignItems:"flex-start"},children:[(0,I_.jsx)(Jgr,{repos:i,value:r.cwd,onChange:r.setCwd,inputRef:n.repoRef,autoFocus:n.autoFocus==="repo",onTrack:n.trackRepo}),(0,I_.jsx)(Hgr,{...t})]}),(0,I_.jsx)(Dgr,{value:r.node,onChange:r.setNode,cloneState:e})]})}var aB=L(z(),1),wWn=["Enter start","Shift+Enter newline","Esc close"],_Wn={alignItems:"center",px:1.5,py:1,borderTop:1,borderColor:"divider",bgcolor:"action.hover"};function t0r({submitLabel:e,disabled:t=!1}){return(0,aB.jsxs)(Rt,{direction:"row",spacing:1.5,sx:_Wn,children:[(0,aB.jsx)(Rt,{direction:"row",spacing:1.5,sx:{mr:"auto"},children:wWn.map(r=>(0,aB.jsx)($e,{variant:"caption",color:"text.secondary",children:r},r))}),(0,aB.jsx)(Jt,{type:"submit",variant:"contained",size:"small",disabled:t,children:e})]})}function r0r({mode:e,harness:t,prompt:r,cwd:n,node:i},o){let a=n||void 0,s=i?[i]:[];if(e==="prompt"){t==="claude"?o.onCreate(r,a,...s):o.onCreateHarness(t,r,a,...s);return}if(e==="design"){o.onCreateDesign(r,a,...s);return}let l=i?[{node:i}]:[];Gjt(M2[e].sessionMode,n,(u,f)=>o.onCreateAssist(u,f,...l),()=>{},r)}function n0r(e,t,r,n){return r.kind==="blocked"?!1:r.kind==="clone"?(gJ(r.prompt,n.onCreateAssist),!0):(r0r({mode:e.mode,harness:t,prompt:e.prompt,cwd:r.cwd,node:e.node},n),e.clear(),!0)}var RR=L(ge(),1);function i0r(e,t){let r=(0,RR.useRef)(e),n=(0,RR.useRef)(null),i=(0,RR.useRef)(null),o=(0,RR.useRef)(null),a=(0,RR.useCallback)(u=>{n.current=u;let{field:f,selectionStart:d,selectionEnd:h}=r.current;u&&f==="prompt"&&u.setSelectionRange(d,h)},[]),s=u=>{let f=u.target;t({field:"prompt",selectionStart:f.selectionStart,selectionEnd:f.selectionEnd})},l=()=>{if(o.current?.closest("form")?.contains(document.activeElement))return;let{field:u}=r.current;({repo:i.current,mode:iB(o.current),prompt:n.current}[u]??n.current)?.focus()};return{autoFocus:e.field,promptRef:a,repoRef:i,modeRef:o,trackPrompt:s,trackRepo:()=>t({...e,field:"repo"}),trackMode:()=>t({...e,field:"mode"}),restore:l}}function kWn(e,t,r){return e?r.kind==="cloned"?{kind:"launch",cwd:r.cwd}:r.kind==="clonable"?{kind:"clone",prompt:LJ(r,t)}:{kind:"blocked"}:{kind:"launch",cwd:e}}function o0r(e,t){let{names:r,visible:n}=gu(),i=TJ(t,n?r:[void 0]);return{cloneState:i,target:kWn(t,e,i(e))}}var sB=L(z(),1);function a0r({draft:e,launchers:t,onClose:r}){let n=i0r(e.focus,e.setFocus),i=xgr($T()),o=i.includes(e.harness)?e.harness:"claude",{target:a,cloneState:s}=o0r(e.node,e.cwd),l=u=>{u.preventDefault(),n0r(e,o,a,t)&&r()};return(0,sB.jsx)(Ige,{onClose:r,onEntered:n.restore,centered:!0,children:(0,sB.jsxs)("form",{onSubmit:l,children:[(0,sB.jsx)(e0r,{draft:e,harness:o,harnesses:i,focus:n,cloneState:s}),(0,sB.jsx)(t0r,{submitLabel:a.kind==="clone"?"Clone":M2[e.mode].submitLabel,disabled:a.kind==="blocked"})]})})}var Hge=L(ge(),1);function s0r(e){let[t,r]=(0,Hge.useState)(null);return(0,Hge.useEffect)(()=>{let n=!1;return(async()=>{let i="draft";try{let o=e?`?cwd=${encodeURIComponent(e)}`:"",s=await(await fetch(`/api/new-session-defaults${o}`)).json();Object.hasOwn(M2,s?.mode)&&(i=s.mode)}catch{}n||r(i)})(),()=>{n=!0}},[e]),t}function l0r(e,{visible:t,names:r,selected:n}){if(t)return e&&r.includes(e)?e:n}var I2=L(ge(),1),c0r={field:"prompt",selectionStart:0,selectionEnd:0};function u0r(){let[e,t]=(0,I2.useState)(""),[r,n]=(0,I2.useState)(),[i,o]=(0,I2.useState)(),[a,s]=(0,I2.useState)("claude"),[l,u]=(0,I2.useState)(),[f,d]=(0,I2.useState)(c0r),h=(0,I2.useCallback)(()=>{t(""),n(void 0),o(void 0),u(void 0),d(c0r)},[]);return{prompt:e,cwd:r,mode:i,harness:a,node:l,focus:f,setPrompt:t,setNode:u,setCwd:n,setMode:o,setHarness:s,setFocus:d,clear:h}}function f0r(e=s0r){let{selectedCwd:t}=$n(),r=gu(),n=u0r(),i=n.cwd??t,o=e(i);return o?{...n,cwd:i,mode:n.mode??o,node:l0r(n.node,r)}:null}function d0r(e){zo(Xn("newSession").matches,e)}var h0r=L(ge(),1);function p0r(e,t){let{selectedCwd:r}=$n(),[n,i]=Pc(),o=n.get("new"),a=n.get("newCwd")??r,{setPrompt:s,setCwd:l,setFocus:u}=e??{};(0,h0r.useEffect)(()=>{o===null||!s||!l||!u||(o&&(s(o),l(a),u({field:"prompt",selectionStart:o.length,selectionEnd:o.length})),t(),i(f=>(f.delete("new"),f.delete("newCwd"),f),{replace:!0}))},[o,a,s,l,u,t,i])}var g0r=L(z(),1);function m0r({launchers:e}){let[t,r]=(0,Uge.useState)(!1),n=f0r(),i=(0,Uge.useCallback)(()=>r(!0),[]);return d0r(i),p0r(n,i),!t||!n?null:(0,g0r.jsx)(a0r,{draft:n,launchers:e,onClose:()=>r(!1)})}var Wge=L(z(),1);function y0r({reconnecting:e}){return(0,Wge.jsx)(ol,{open:e,anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,Wge.jsx)(ri,{severity:"info",variant:"filled",icon:(0,Wge.jsx)(mo,{size:16,color:"inherit"}),children:"Reconnecting\u2026"})})}var Z1=L(z(),1);function v0r({socket:e,onViewLaunchedSession:t}){return(0,Z1.jsxs)(Z1.Fragment,{children:[(0,Z1.jsx)(ygr,{}),(0,Z1.jsx)(m0r,{launchers:{onCreate:e.createSession,onCreateDesign:e.createDesignSession,onCreateHarness:e.createHarnessSession,onCreateAssist:e.createAssistSession}}),(0,Z1.jsx)(y0r,{reconnecting:e.reconnecting}),(0,Z1.jsx)(Mu,{error:e.error,onClose:e.clearError}),(0,Z1.jsx)(bgr,{notice:e.success,onClose:e.clearSuccess,onView:t})]})}var l0=L(ge(),1);async function b0r(e,t){try{let r=await fetch(un("/api/updates",t?void 0:e)),n=await r.json();if(!r.ok)throw new Error(n?.error??`HTTP ${r.status}`);return{name:e,local:t,status:n}}catch(r){return{name:e,local:t,error:r instanceof Error?r.message:"Failed to load update state"}}}var EWn=6e4;function x0r(e){let t=e.nodes?.local,r=e.names.join(`
3976
+ `)})}var Q9=L(z(),1);function tmr({entry:e,state:t}){return(0,Q9.jsxs)(fe,{sx:{px:2,pb:2,pl:{xs:2,sm:7.5},display:"grid",gap:1.5},children:[(0,Q9.jsx)(Jpr,{entry:e,state:t}),(0,Q9.jsx)($e,{variant:"caption",color:"text.secondary",children:"History \xB7 ~/.assist/watchers/"}),(0,Q9.jsx)(emr,{lines:e.status?.history??[]})]})}var RUn={ready:"warning",diverged:"error"},rmr=e=>t=>{let r=RUn[e];return{display:"grid",gridTemplateColumns:{xs:"28px minmax(0,1fr)",sm:"28px minmax(0,1.3fr) minmax(0,1fr) minmax(0,1.6fr)"},alignItems:"center",columnGap:1.5,rowGap:1,px:2,py:1.5,boxShadow:r?`inset 3px 0 0 ${t.palette[r].main}`:"none"}};var nmr=L(z(),1),imr=ft((0,nmr.jsx)("path",{d:"m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z"}),"ArrowUpward");var omr=L(z(),1),amr=ft((0,omr.jsx)("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96M3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4z"}),"CloudOff");var smr=L(z(),1),lmr=ft((0,smr.jsx)("path",{d:"M6 19h4V5H6zm8-14v14h4V5z"}),"Pause");var cmr=L(z(),1),umr=ft((0,cmr.jsx)("path",{d:"M1 21h22L12 2zm12-3h-2v-2h2zm0-4h-2v-4h2z"}),"Warning");var P2=L(z(),1),AUn={ok:{tone:"success",icon:(0,P2.jsx)(x1,{})},ready:{tone:"warning",icon:(0,P2.jsx)(imr,{})},diverged:{tone:"error",icon:(0,P2.jsx)(umr,{})},retrying:{tone:"warning",icon:(0,P2.jsx)(ode,{})},off:{tone:"neutral",icon:(0,P2.jsx)(lmr,{})},unavailable:{tone:"neutral",icon:(0,P2.jsx)(amr,{})}};function PUn(e,t){return t==="neutral"?e.palette.text.secondary:e.palette[t].main}function fmr({state:e}){let{tone:t,icon:r}=AUn[e.kind];return(0,P2.jsxs)(fe,{component:"span",sx:n=>({alignSelf:"flex-start",display:"inline-flex",alignItems:"center",gap:.75,height:24,px:1.25,borderRadius:3,fontSize:12,fontWeight:500,whiteSpace:"nowrap",color:PUn(n,t),bgcolor:t==="neutral"?n.palette.action.hover:Ea(n.palette[t].main,.1),border:t==="neutral"?`1px solid ${n.palette.divider}`:0,"& svg":{fontSize:14}}),children:[r,e.label]})}var Y1=L(z(),1),dmr={gridColumn:{xs:"2",sm:"auto"}},LUn={fontFamily:"'Roboto Mono', ui-monospace, Menlo, monospace",fontSize:12,fontVariantNumeric:"tabular-nums"};function hmr({entry:e}){let t=e.status;if(!t)return(0,Y1.jsx)($e,{variant:"caption",color:"text.secondary",sx:dmr,children:"\u2014"});let r=t.running!==t.built;return(0,Y1.jsxs)(fe,{sx:{...dmr,display:"flex",flexDirection:"column"},children:[(0,Y1.jsxs)(fe,{component:"span",sx:LUn,children:["v",t.running,r&&(0,Y1.jsxs)(Y1.Fragment,{children:[" ",(0,Y1.jsx)(fe,{component:"span",sx:{color:"warning.main"},children:"\u2192"})," ","v",t.built]})]}),(0,Y1.jsx)($e,{variant:"caption",color:"text.secondary",children:r?"running \u2192 built":"running"})]})}function xge(e){return(e.status?.restart.length??0)>0}function Tge(e){let{status:t}=e;if(!t)return{kind:"unavailable",label:"Unavailable",line:e.error??"no update state"};let{loop:r}=t,n=fa(r.since);return r.phase==="diverged"?{kind:"diverged",label:"Diverged \xB7 fixing",line:`diverged ${n}${r.escalationId?` \xB7 session ${r.escalationId}`:""}`}:xge(e)?{kind:"ready",label:"Restart to update",line:`restart ${t.restart.map(vge).join(" + ")}`}:r.phase==="off"?{kind:"off",label:"Off",line:r.reason??"not running"}:r.phase==="retrying"?{kind:"retrying",label:"Retrying",line:`${r.reason??"lap failed"} \xB7 ${n}`}:{kind:"ok",label:"Up to date",line:`watching origin since ${n}`}}var np=L(z(),1),pmr={display:"flex",flexDirection:"column",minWidth:0};function gmr({entry:e}){let[t,r]=(0,mmr.useState)(!1),n=Tge(e),i=e.local?"this machine":"linked";return(0,np.jsxs)(fe,{component:"article",sx:{"& + &":{borderTop:1,borderColor:"divider"}},children:[(0,np.jsxs)(fe,{sx:rmr(n.kind),children:[(0,np.jsx)(Zpr,{open:t,label:`${t?"Hide":"Show"} history for ${e.name}`,onToggle:()=>r(o=>!o)}),(0,np.jsxs)(fe,{sx:pmr,children:[(0,np.jsx)($e,{variant:"body2",sx:{fontWeight:500},children:e.name}),(0,np.jsx)($e,{variant:"caption",color:"text.secondary",noWrap:!0,children:e.status?`${i} \xB7 ${e.status.installDir}`:i})]}),(0,np.jsx)(hmr,{entry:e}),(0,np.jsxs)(fe,{sx:{...pmr,gridColumn:{xs:"2",sm:"auto"},gap:.25},children:[(0,np.jsx)(fmr,{state:n}),(0,np.jsx)($e,{variant:"caption",color:"text.secondary",noWrap:!0,children:n.line})]})]}),t&&(0,np.jsx)(tmr,{entry:e,state:n})]})}function ymr(e){let t=e.map(o=>Tge(o).kind),r=o=>t.filter(a=>a===o).length,n=r("ready"),i=[`${e.length} node${e.length===1?"":"s"}`];return i.push(n?`${n} ready to restart`:"all running their latest build"),r("diverged")&&i.push(`${r("diverged")} diverged`),r("unavailable")&&i.push(`${r("unavailable")} unavailable`),i.join(" \xB7 ")}var K1=L(z(),1);function vmr(){let{entries:e,loading:t}=yge();return(0,K1.jsx)(nc,{loading:t,header:(0,K1.jsxs)(K1.Fragment,{children:[(0,K1.jsx)($e,{variant:"h5",component:"h1",children:"Updates"}),(0,K1.jsx)($e,{variant:"body2",color:"text.secondary",sx:{mb:3},children:ymr(e)})]}),children:(0,K1.jsx)(on,{variant:"outlined",component:"section","aria-label":"Nodes",children:e.map(r=>(0,K1.jsx)(gmr,{entry:r},r.name))})})}var agr=L(ge(),1);var J9=L(ge(),1);function Sge(e,t){let r=(0,J9.useRef)(null),[n,i]=(0,J9.useState)();return(0,J9.useLayoutEffect)(()=>{e===t&&r.current&&i(r.current.offsetHeight)},[e,t]),{ref:r,height:n}}var xmr=L(ge(),1);function Cge(e){if(e.startsWith("local:")){let n=e.slice(6).replace(/\/+$/,"").split("/").filter(Boolean);return n[n.length-1]??e}let t=e.indexOf("/");return t===-1?e:e.slice(t+1)}function wge(e){let t=o=>o.startsWith("local:"),r=o=>{let a=Cge(o),s=a.split("/");return s[s.length-1]??a},n=new Map;for(let o of new Set(e)){if(t(o))continue;let a=r(o);n.set(a,(n.get(a)??0)+1)}let i=new Map;for(let o of e){if(t(o)){i.set(o,Cge(o));continue}let a=r(o),s=(n.get(a)??0)>1;i.set(o,s?Cge(o):a)}return i}var Qj={field:"lastPhase",direction:"desc"};var Jj="all",eY="all";async function bmr(e,t,r){let n=new URLSearchParams({page:String(e),pageSize:String(t)});r.origin!==Jj&&n.set("origin",r.origin),r.status!==eY&&n.set("status",r.status),r.sort.field!==Qj.field&&n.set("sort",r.sort.field),r.sort.direction!==Qj.direction&&n.set("direction",r.sort.direction);let i=await fetch(`/api/usage/items?${n}`);if(!i.ok)throw new Error(`Failed to load item usage (HTTP ${i.status}).`);return i.json()}var tY=L(z(),1);function Tmr({origins:e,origin:t,onChange:r}){let n=(0,xmr.useMemo)(()=>wge(e.map(o=>o.origin)),[e]),i=e.reduce((o,a)=>o+a.count,0);return(0,tY.jsxs)(ni,{select:!0,size:"small",label:"Repo",value:t,onChange:o=>r(o.target.value),sx:{minWidth:220},children:[(0,tY.jsx)(cn,{value:Jj,children:`All repos (${i})`}),e.map(o=>(0,tY.jsx)(cn,{value:o.origin,children:`${n.get(o.origin)??o.origin} (${o.count})`},o.origin))]})}var f$e=L(z(),1),MUn=[{value:eY,label:"All"},{value:"done",label:"Done"},{value:"running",label:"Running"}];function Smr({status:e,onChange:t}){return(0,f$e.jsx)(du,{size:"small",exclusive:!0,value:e,onChange:(r,n)=>n&&t(n),"aria-label":"Filter items by status",children:MUn.map(r=>(0,f$e.jsx)(hs,{value:r.value,children:r.label},r.value))})}var eB=L(z(),1),IUn={display:"flex",alignItems:"center",gap:2,flexWrap:"wrap",mb:2},DUn="Repos show their bare name, or org/repo when two share one. Totals sum every phase's recorded usage.";function Cmr({origins:e,origin:t,onOriginChange:r,status:n,onStatusChange:i}){return(0,eB.jsxs)(fe,{sx:IUn,children:[(0,eB.jsx)(Smr,{status:n,onChange:i}),(0,eB.jsx)(Tmr,{origins:e,origin:t,onChange:r}),(0,eB.jsx)($e,{variant:"caption",color:"text.disabled",children:DUn})]})}var Omr=L(ge(),1);var kge=L(z(),1),OUn={whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},wmr={display:"block",fontSize:"0.75rem",color:"text.disabled",whiteSpace:"nowrap"},NUn={...wmr,fontStyle:"italic"};function _ge({total:e,perPhase:t,partial:r}){return(0,kge.jsxs)(_n,{align:"right",sx:OUn,children:[e,t?(0,kge.jsx)($e,{component:"span",sx:r?NUn:wmr,children:t}):null]})}var rY=L(z(),1),BUn={width:"100%",maxWidth:0},FUn={display:"block",fontWeight:500,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},$Un={display:"block",mt:"2px",fontSize:"0.75rem",color:"text.secondary",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};function _mr({id:e,name:t,type:r,repoLabel:n}){return(0,rY.jsxs)(_n,{sx:BUn,children:[(0,rY.jsx)(xn,{component:ys,to:BT(e),underline:"hover",color:"text.primary",title:t,sx:FUn,children:t}),(0,rY.jsxs)($e,{component:"span",sx:$Un,children:[so(e)," \xB7 ",r," \xB7 ",n]})]})}function kmr(e){let t=Math.max(1,e.recordedPhases);return{active:`${sg(e.activeMs/t)} / phase`,tokens:`${Zf(Math.round((e.tokensUp+e.tokensDown)/t))} / phase`}}function Emr(e){if(!(e.status==="done"||e.recordedPhases>e.phaseCount))return`${e.recordedPhases} of ${e.phaseCount} phases`}var zUn=new Set(["done","wontdo"]);function Rmr(e){return zUn.has(e)?{label:e,color:cJ[e]}:{label:"running",color:"warning"}}var d$e=L(z(),1),HUn={height:20,fontSize:"0.6875rem"};function Amr({status:e}){let t=Rmr(e);return(0,d$e.jsx)(_n,{children:(0,d$e.jsx)(bn,{label:t.label,size:"small",variant:"outlined",color:t.color,sx:HUn})})}var a0=L(z(),1),Pmr={whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"};function Lmr({row:e,repoLabel:t}){let r=kmr(e);return(0,a0.jsxs)(Gu,{hover:!0,children:[(0,a0.jsx)(_mr,{id:e.id,name:e.name,type:e.type,repoLabel:t}),(0,a0.jsx)(Amr,{status:e.status}),(0,a0.jsx)(_ge,{total:String(e.phaseCount||e.recordedPhases),perPhase:Emr(e),partial:!0}),(0,a0.jsx)(_ge,{total:sg(e.activeMs),perPhase:r.active}),(0,a0.jsx)(_ge,{total:`\u2191 ${Zf(e.tokensUp)} \u2193 ${Zf(e.tokensDown)}`,perPhase:r.tokens}),(0,a0.jsx)(_n,{align:"right",sx:Pmr,children:(0,a0.jsxs)(fe,{component:"span",sx:{color:Ife(e.peakContextPct)},children:[Math.round(e.peakContextPct),"%"]})}),(0,a0.jsx)(_n,{align:"right",sx:Pmr,children:e.lastPhaseAt?fa(e.lastPhaseAt):"\u2014"})]})}var Mmr=[{label:"Item"},{label:"Status"},{label:"Phases",sort:"phases",numeric:!0},{label:"Active",sort:"active",numeric:!0,tooltip:"Accumulated active time across the item's phases \u2014 not wall clock."},{label:"Tokens",sort:"tokens",numeric:!0},{label:"Peak ctx",sort:"peakContext",numeric:!0,tooltip:"The highest context-window usage any one phase reached."},{label:"Last phase",sort:"lastPhase",numeric:!0,tooltip:"When the item's most recent phase session started."}];var zm=L(z(),1),UUn={"& th":{whiteSpace:"nowrap"}};function Imr({column:e}){return e.tooltip?(0,zm.jsx)(lr,{title:e.tooltip,describeChild:!0,children:(0,zm.jsx)("span",{children:e.label})}):(0,zm.jsx)(zm.Fragment,{children:e.label})}function Dmr({sort:e,onSort:t}){return(0,zm.jsx)(Dk,{sx:UUn,children:(0,zm.jsx)(Gu,{children:Mmr.map(r=>{let n=r.sort,i=n!==void 0&&e.field===n;return(0,zm.jsx)(_n,{align:r.numeric?"right":"left",sortDirection:i?e.direction:!1,children:n===void 0?(0,zm.jsx)(Imr,{column:r}):(0,zm.jsx)(q1e,{active:i,direction:i?e.direction:"desc",onClick:()=>t(n),children:(0,zm.jsx)(Imr,{column:r})})},r.label)})})})}var TR=L(z(),1),WUn={"& td, & th":{px:1.5}};function Nmr({rows:e,origins:t,sort:r,onSort:n}){let i=(0,Omr.useMemo)(()=>wge([...t,...e.map(o=>o.origin)]),[t,e]);return(0,TR.jsx)(Ik,{component:on,children:(0,TR.jsxs)(wv,{size:"small",sx:WUn,children:[(0,TR.jsx)(Dmr,{sort:r,onSort:n}),(0,TR.jsx)(_v,{children:e.map(o=>(0,TR.jsx)(Lmr,{row:o,repoLabel:i.get(o.origin)??o.origin},o.id))})]})})}function Bmr(e){let t=Math.max(1,e.medianPhases),r=e.repoCount===1?"repo":"repos";return{items:String(e.itemCount),itemsFoot:`across ${e.repoCount} ${r} \xB7 ${e.doneCount} done`,phases:String(Math.round(e.medianPhases*10)/10),active:sg(e.medianActiveMs),activeFoot:`${sg(e.medianActiveMs/t)} per phase`,tokens:Zf(Math.round(e.medianTokens)),tokensFoot:`${Zf(Math.round(e.medianTokens/t))} per phase`}}var tB=L(z(),1),Fmr={display:"block"},VUn={fontWeight:400,fontVariantNumeric:"tabular-nums"};function nY({label:e,value:t,foot:r}){return(0,tB.jsxs)(fe,{children:[(0,tB.jsx)($e,{variant:"caption",color:"text.secondary",sx:Fmr,children:e}),(0,tB.jsx)($e,{variant:"h5",sx:VUn,children:t}),r?(0,tB.jsx)($e,{variant:"caption",color:"text.disabled",sx:Fmr,children:r}):null]})}var SR=L(z(),1),GUn={display:"flex",flexDirection:{xs:"column",sm:"row"},mb:3,"& > *":{flex:1,minWidth:0,p:2},"& > * + *":{borderColor:"divider",borderTop:{xs:1,sm:0},borderLeft:{xs:0,sm:1}}};function $mr({summary:e}){let t=Bmr(e);return(0,SR.jsxs)(on,{sx:GUn,children:[(0,SR.jsx)(nY,{label:"Items with recorded usage",value:t.items,foot:t.itemsFoot}),(0,SR.jsx)(nY,{label:"Median phases",value:t.phases}),(0,SR.jsx)(nY,{label:"Median active time",value:t.active,foot:t.activeFoot}),(0,SR.jsx)(nY,{label:"Median tokens",value:t.tokens,foot:t.tokensFoot})]})}var ip=L(z(),1);function zmr({items:e,data:t}){let{rows:r,total:n,page:i,pageSize:o}=e,{ref:a,height:s}=Sge(r.length,o);return(0,ip.jsxs)(ip.Fragment,{children:[(0,ip.jsx)($mr,{summary:t.summary}),(0,ip.jsx)(Cmr,{origins:t.origins,origin:e.origin,onOriginChange:e.selectOrigin,status:e.status,onStatusChange:e.selectStatus}),n===0?(0,ip.jsx)($e,{color:"text.secondary",align:"center",sx:{py:6},children:"No items match this filter."}):(0,ip.jsxs)(ip.Fragment,{children:[(0,ip.jsx)(fe,{ref:a,sx:{minHeight:s},children:(0,ip.jsx)(Nmr,{rows:r,origins:t.origins.map(l=>l.origin),sort:e.sort,onSort:e.sortBy})}),(0,ip.jsx)(jF,{component:"div",count:n,page:i,rowsPerPage:o,rowsPerPageOptions:[o],onPageChange:(l,u)=>e.setPage(u)})]})]})}var L2=L(z(),1);function Hmr({items:e}){let{data:t}=e;return(0,L2.jsxs)(L2.Fragment,{children:[(0,L2.jsx)(fe,{sx:{height:4,mb:1},children:e.fetching&&(0,L2.jsx)(Mk,{})}),t?t.origins.length===0?(0,L2.jsx)($e,{color:"text.secondary",align:"center",sx:{py:6},children:"No item usage recorded yet."}):(0,L2.jsx)(zmr,{items:e,data:t}):null]})}function h$e(e,t,r){if(e==null)return;let n=Math.max(0,e-r),i=Math.max(0,t-n)/t;if(!(i<.05))return i}function Ege(e,t){let r=Math.max(0,e-t),n=Math.floor(r/86400),i=Math.floor(r%86400/3600),o=Math.floor(r%3600/60);return n>0?`${n}d ${i}h`:i>0?`${i}h ${o}m`:`${o}m`}function qUn(e,t,r,n){let i=h$e(t,r,n);if(i!=null)return e/i}function __(e,t,r,n){let i=qUn(e,t,r,n);return i==null?"ok":i>100?"over":i>75?"warn":"ok"}var jUn=["five_hour","seven_day"],YUn=["claude","codex","pi"];function Umr(e){let[t,r]=e.includes(":")?e.split(":",2):["claude",e],n=YUn.find(o=>o===t),i=jUn.find(o=>o===r);if(!(!n||!i)&&!(n==="claude"&&e.includes(":")))return{harness:n,window:i}}var Wmr={five_hour:{label:"5h",seconds:18e3},seven_day:{label:"7d",seconds:604800,tint:{light:"rgba(0, 0, 0, 0.1)",dark:"rgba(255, 255, 255, 0.1)"}}};function rB(e){let t=Umr(e);if(!t)return Wmr.five_hour;let r=Wmr[t.window];return t.harness==="claude"?r:{...r,label:`${Lu(t.harness)} ${r.label}`}}var KUn={ok:"success.main",warn:"warning.main",over:"error.main"};function k_(e){return KUn[e]}var aY=L(z(),1),XUn={ok:"success",warn:"warning",over:"error"};function Vmr({percentage:e,level:t}){return(0,aY.jsxs)(fe,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,aY.jsx)(Mk,{variant:"determinate",value:Math.min(100,e),color:XUn[t],sx:{flexGrow:1,height:8,borderRadius:1}}),(0,aY.jsxs)(fe,{sx:{minWidth:40,textAlign:"right",color:k_(t)},children:[Math.round(e),"%"]})]})}function Gmr(e){return e.avgContextPct==null?"\u2014":`${Math.round(e.avgContextPct)}%`}var ZUn=new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"});function p$e(e){return ZUn.format(e)}var Rge=L(z(),1);function qmr({peak:e}){return(0,Rge.jsx)(_n,{align:"right",sx:{whiteSpace:"nowrap"},children:(0,Rge.jsx)(lr,{title:`Cycle started ${p$e(new Date(e.createdAt))}`,children:(0,Rge.jsx)("span",{children:p$e(new Date(e.resetsAt*1e3))})})})}var Ymr=L(z(),1);function jmr(){return(0,Ymr.jsx)(bn,{label:"reset",size:"small",color:"warning",variant:"outlined",title:"Quota reset mid-cycle \u2014 this is the peak reached before the reset.",sx:{ml:1}})}function Kmr(e){return!e.tokensUp&&!e.tokensDown?"\u2014":`\u2191 ${Zf(e.tokensUp)} \u2193 ${Zf(e.tokensDown)}`}var s0=L(z(),1);function Xmr({peak:e,now:t}){let{label:r,seconds:n,tint:i}=rB(e.window),o=__(e.usedPercentage,e.resetsAt,n,t);return(0,s0.jsxs)(Gu,{sx:a=>({backgroundColor:i?a.palette.mode==="dark"?i.dark:i.light:void 0}),children:[(0,s0.jsxs)(_n,{children:[r,e.resetDetected&&(0,s0.jsx)(jmr,{})]}),(0,s0.jsx)(_n,{sx:{minWidth:160},children:(0,s0.jsx)(Vmr,{percentage:e.usedPercentage,level:o})}),(0,s0.jsx)(_n,{align:"right",sx:{whiteSpace:"nowrap"},children:Gmr(e)}),(0,s0.jsx)(_n,{align:"right",sx:{whiteSpace:"nowrap"},children:e.phaseCount??0}),(0,s0.jsx)(_n,{align:"right",sx:{whiteSpace:"nowrap"},children:Kmr(e)}),(0,s0.jsx)(qmr,{peak:e})]})}var Age=L(ge(),1);function E_(e){let[t,r]=(0,Age.useState)(()=>Math.floor(Date.now()/1e3));return(0,Age.useEffect)(()=>{let n=setInterval(()=>r(Math.floor(Date.now()/1e3)),e);return()=>clearInterval(n)},[e]),t}var pc=L(z(),1);function Zmr({peaks:e}){let t=E_(3e4);return(0,pc.jsx)(Ik,{component:on,children:(0,pc.jsxs)(wv,{size:"small",children:[(0,pc.jsx)(Dk,{sx:{"& th":{whiteSpace:"nowrap"}},children:(0,pc.jsxs)(Gu,{children:[(0,pc.jsx)(_n,{children:"Window"}),(0,pc.jsx)(_n,{children:"Peak usage"}),(0,pc.jsx)(_n,{align:"right",children:(0,pc.jsx)(lr,{title:"Mean context-window usage across all readings in this rate-limit cycle \u2014 distinct from the Peak usage quota above.",children:(0,pc.jsx)("span",{children:"Avg context"})})}),(0,pc.jsx)(_n,{align:"right",children:(0,pc.jsx)(lr,{title:"Number of phase readings behind the average.",children:(0,pc.jsx)("span",{children:"Phases"})})}),(0,pc.jsx)(_n,{align:"right",children:"Tokens spent"}),(0,pc.jsx)(_n,{align:"right",children:"Cycle reset"})]})}),(0,pc.jsx)(_v,{children:e.map(r=>(0,pc.jsx)(Xmr,{peak:r,now:t},`${r.window}-${r.resetsAt}-${r.segment}`))})]})})}var R_=L(z(),1);function Qmr({rows:e,total:t,page:r,pageSize:n,onPageChange:i}){let{ref:o,height:a}=Sge(e.length,n);return(0,R_.jsxs)(R_.Fragment,{children:[(0,R_.jsx)(fe,{ref:o,sx:{minHeight:a},children:(0,R_.jsx)(Zmr,{peaks:e})}),(0,R_.jsx)(jF,{component:"div",count:t,page:r,rowsPerPage:n,rowsPerPageOptions:[n],onPageChange:(s,l)=>i(l)})]})}var m$e=L(z(),1),Jmr=["five_hour","seven_day"],QUn=["codex:five_hour","codex:seven_day"];function JUn(e){let t=e?[...Jmr,...QUn]:Jmr;return[{value:"all",label:"All"},...t.map(r=>({value:r,label:rB(r).label}))]}function egr({window:e,onChange:t}){let{exposeCodexActions:r}=$T();return(0,m$e.jsx)(du,{size:"small",exclusive:!0,value:e,onChange:(n,i)=>i&&t(i),"aria-label":"Filter peaks by rate-limit window",children:JUn(r).map(n=>(0,m$e.jsx)(hs,{value:n.value,children:n.label},n.value))})}var X1=L(z(),1);function tgr({history:e}){let{window:t,total:r}=e;return(0,X1.jsxs)(X1.Fragment,{children:[(0,X1.jsx)(egr,{window:t,onChange:e.selectWindow}),(0,X1.jsx)(fe,{sx:{height:4,my:1},children:e.fetching&&(0,X1.jsx)(Mk,{})}),r===0?(0,X1.jsx)($e,{color:"text.secondary",align:"center",sx:{py:6},children:t==="all"?"No usage peaks recorded yet.":`No ${rB(t).label} usage peaks recorded yet.`}):(0,X1.jsx)(Qmr,{rows:e.rows,total:r,page:e.page,pageSize:e.pageSize,onPageChange:e.setPage})]})}var Lge=L(ge(),1);async function rgr(e,t,r){let n=new URLSearchParams({page:String(e),pageSize:String(t)});r!=="all"&&n.set("window",r);let i=await fetch(`/api/usage/history?${n}`);if(!i.ok)throw new Error(`Failed to load usage history (HTTP ${i.status}).`);return i.json()}var A_=L(ge(),1);function Pge(e,t,r=!0){let[n,i]=(0,A_.useState)(0),[o,a]=(0,A_.useState)(null),[s,l]=(0,A_.useState)(!1),[u,f]=(0,A_.useState)(null);(0,A_.useEffect)(()=>{if(!r)return;let p=!1;return l(!0),e(n,t).then(m=>{p||(a(m),l(!1))},m=>{p||(f(m instanceof Error?m:new Error(String(m))),l(!1))}),()=>{p=!0}},[e,n,t,r]);let d=o?.total??0;(0,A_.useEffect)(()=>{if(d===0)return;let p=Math.ceil(d/t)-1;n>p&&i(p)},[n,t,d]);let h=o?.rows??[];return{data:o,rows:h,total:d,loaded:o!==null,fetching:s,error:u,page:n,setPage:i,pageSize:t}}var eWn=30;function ngr(){let[e,t]=(0,Lge.useState)("all"),r=(0,Lge.useCallback)((o,a)=>rgr(o,a,e),[e]),n=Pge(r,eWn);return{...n,window:e,selectWindow:o=>{t(o),n.setPage(0)}}}var nB=L(ge(),1);function igr(e,t){return e.field!==t?{field:t,direction:"desc"}:{field:t,direction:e.direction==="desc"?"asc":"desc"}}var tWn=30;function ogr(e){let[t,r]=(0,nB.useState)(Jj),[n,i]=(0,nB.useState)(eY),[o,a]=(0,nB.useState)(Qj),s=(0,nB.useCallback)((h,p)=>bmr(h,p,{origin:t,status:n,sort:o}),[t,n,o]),l=Pge(s,tWn,e);return{...l,origin:t,selectOrigin:h=>{r(h),l.setPage(0)},status:n,selectStatus:h=>{i(h),l.setPage(0)},sort:o,sortBy:h=>{a(p=>igr(p,h)),l.setPage(0)}}}var P_=L(z(),1),rWn={borderBottom:1,borderColor:"divider",mb:2};function sgr(){let[e,t]=(0,agr.useState)("limits"),r=ngr(),n=ogr(e==="items");if(r.error)throw r.error;if(n.error)throw n.error;return(0,P_.jsxs)(nc,{loading:!r.loaded,title:"Usage history",maxWidth:"lg",children:[(0,P_.jsxs)(Nk,{value:e,onChange:(i,o)=>t(o),textColor:"inherit",indicatorColor:"secondary",sx:rWn,"aria-label":"Usage history views",children:[(0,P_.jsx)(Cv,{label:"Rate limits",value:"limits"}),(0,P_.jsx)(Cv,{label:"Items",value:"items"})]}),e==="limits"?(0,P_.jsx)(tgr,{history:r}):(0,P_.jsx)(Hmr,{items:n})]})}var hi=L(z(),1);function nWn({socket:e}){return(0,hi.jsx)(SF,{maxWidth:"lg",sx:{py:3,px:2},children:(0,hi.jsx)(dGt,{socket:e})})}function lgr({socket:e}){return W0("AppRoutes"),(0,hi.jsxs)(hi.Fragment,{children:[(0,hi.jsx)(gsr,{}),(0,hi.jsx)(c5,{children:(0,hi.jsxs)(gs,{element:(0,hi.jsx)(XYt,{socket:e}),children:[(0,hi.jsx)(gs,{path:"sessions",element:(0,hi.jsx)(Xpr,{socket:e})}),(0,hi.jsx)(gs,{path:"backlog/*",element:(0,hi.jsx)(nWn,{socket:e})}),(0,hi.jsx)(gs,{path:"next",element:(0,hi.jsx)(Aar,{sessions:e.sessions,selectSession:e.selectSession})}),(0,hi.jsx)(gs,{path:"news",element:(0,hi.jsx)(zor,{})}),(0,hi.jsx)(gs,{path:"releases",element:(0,hi.jsx)(dsr,{})}),(0,hi.jsx)(gs,{path:"usage",element:(0,hi.jsx)(sgr,{})}),(0,hi.jsx)(gs,{path:"backups",element:(0,hi.jsx)(nKt,{})}),(0,hi.jsx)(gs,{path:"config",element:(0,hi.jsx)(jXt,{})}),(0,hi.jsx)(gs,{path:"updates",element:(0,hi.jsx)(vmr,{})}),(0,hi.jsx)(gs,{path:"diff",element:(0,hi.jsx)(ior,{socket:e})}),(0,hi.jsx)(gs,{path:"file",element:(0,hi.jsx)(Oor,{socket:e})}),(0,hi.jsx)(gs,{path:"*",element:(0,hi.jsx)(Qxe,{to:"/sessions",replace:!0})})]})})]})}var Nge=L(ge(),1);var Oge=L(ge(),1);function cgr(e,t,r){if(!e)return"Select a repo to search files.";if(r.error)return"Couldn't search files in this repo.";if(!(r.files.length>0||r.loading))return t?"No matching files.":"No files in this repo."}var L_=L(z(),1),iWn={display:"flex",gap:1,alignItems:"center",minWidth:0},oWn={display:"flex",gap:1,alignItems:"baseline",minWidth:0,overflow:"hidden"},aWn={fontFamily:"monospace",fontSize:13,whiteSpace:"nowrap"},sWn={fontFamily:"monospace",fontSize:11,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"};function lWn(e){let t=e.lastIndexOf("/");return t===-1?{dir:"",basename:e}:{dir:e.slice(0,t),basename:e.slice(t+1)}}function ugr({files:e,highlight:t,onHighlight:r,onSelect:n}){return(0,L_.jsx)(Sp,{dense:!0,sx:{py:0},children:e.map((i,o)=>{let{dir:a,basename:s}=lWn(i);return(0,L_.jsxs)(cn,{selected:o===t,onMouseEnter:()=>r(o),onClick:()=>n(i),sx:iWn,children:[(0,L_.jsx)(c9,{path:i}),(0,L_.jsxs)(fe,{sx:oWn,children:[(0,L_.jsx)($e,{component:"span",sx:aWn,children:s}),(0,L_.jsx)($e,{component:"span",color:"text.secondary",sx:sWn,children:a})]})]},i)})})}var Mge=L(z(),1),cWn={maxHeight:420,overflowY:"auto"},uWn={px:2,py:2,fontSize:13};function fgr({message:e,files:t,highlight:r,onHighlight:n,onSelect:i}){return(0,Mge.jsx)(fe,{sx:cWn,children:e?(0,Mge.jsx)($e,{color:"text.secondary",sx:uWn,children:e}):(0,Mge.jsx)(ugr,{files:t,highlight:r,onHighlight:n,onSelect:i})})}var dgr=L(z(),1),fWn={mt:6,alignSelf:"flex-start"};function Ige({onClose:e,onEntered:t,centered:r=!1,children:n}){return(0,dgr.jsx)(Ps,{open:!0,onClose:e,maxWidth:"sm",fullWidth:!0,slotProps:{paper:{sx:r?void 0:fWn},transition:{onEntered:t}},children:n})}var Dge=L(ge(),1);var hgr={files:[],loading:!1,error:!1};function pgr(e,t){let[r,n]=(0,Dge.useState)(hgr),i=vr();return(0,Dge.useEffect)(()=>{if(!e){n(hgr);return}let o=!1;return n(s=>({...s,loading:!0})),(async()=>{try{let s=await fetch(un(`/api/files?cwd=${encodeURIComponent(e)}&q=${encodeURIComponent(t)}`,i));if(!s.ok)throw new Error(`HTTP ${s.status}`);let l=await s.json();if(o)return;n({files:Array.isArray(l.files)?l.files:[],loading:!1,error:!1})}catch{o||n({files:[],loading:!1,error:!0})}})(),()=>{o=!0}},[e,t,i]),r}var CR=L(z(),1);function dWn(e,t,r){let n=new URLSearchParams({path:e});return t&&n.set("cwd",t),t&&r&&n.set("node",r),`/file?${n}`}function mgr({onClose:e}){let{worktreeNode:t}=$n();return(0,CR.jsx)(Yu.Provider,{value:t,children:(0,CR.jsx)(hWn,{onClose:e})})}function hWn({onClose:e}){let{worktreeCwd:t,worktreeNode:r}=$n(),[n,i]=(0,Oge.useState)(""),o=pgr(t,n),a=Xi(),s=(0,Oge.useRef)(null),l=p=>a(dWn(p,t,r)),{highlight:u,setHighlight:f,onKeyDown:d}=HT(o.files,n,l,e),h=p=>{l(p),e()};return(0,CR.jsxs)(Ige,{onClose:e,onEntered:()=>s.current?.focus(),children:[(0,CR.jsx)(mP,{autoFocus:!0,inputRef:s,value:n,onChange:i,onKeyDown:d,placeholder:"Search files by name..."}),(0,CR.jsx)(fgr,{message:cgr(t,n,o),files:o.files,highlight:u,onHighlight:f,onSelect:h})]})}function ggr(e){zo(Xn("quickOpen").matches,e)}var vgr=L(z(),1);function ygr(){let[e,t]=(0,Nge.useState)(!1);return ggr((0,Nge.useCallback)(()=>t(!0),[])),e?(0,vgr.jsx)(mgr,{onClose:()=>t(!1)}):null}var Bge=L(z(),1);function bgr({notice:e,onClose:t,onView:r}){let n=e?.sessionId??null;return(0,Bge.jsx)(ol,{open:e!==null,autoHideDuration:6e3,onClose:t,anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,Bge.jsx)(ri,{severity:"success",variant:"filled",onClose:t,action:n!==null?(0,Bge.jsx)(Jt,{color:"inherit",size:"small",onClick:()=>r(n),children:"View"}):void 0,children:e?.message})})}var Uge=L(ge(),1);function xgr(e){let t=["claude"];return e.exposeCodexActions&&t.push("codex"),e.exposePiActions&&t.push("pi"),t}var Igr=L(ge(),1);var Tgr=L(z(),1),Sgr=ft((0,Tgr.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2"}),"Circle");var M_="0.776.0";var pWn={connected:"success.main",connecting:"warning.main",disconnected:"error.main","version-blocked":"error.main"};function Cgr(e){return e?pWn[e]:"success.main"}function wgr(e){return e.split("-")[0].split(".").map(Number)}function _gr(e,t){if(!e||!t||e===t)return;let r=wgr(e),n=wgr(t);for(let i=0;i<Math.max(r.length,n.length);i++){let o=(r[i]??0)-(n[i]??0);if(Number.isNaN(o))return;if(o!==0)return o<0?"behind":"ahead"}}var Fge=L(ge(),1),g$e=(0,Fge.createContext)(null);function $ge(){return(0,Fge.useContext)(g$e)}var wR=L(z(),1),mWn={height:16,fontSize:10},gWn={opacity:.6,fontSize:"0.85em"};function yWn(e,t){if(t===e.local)return"this machine";let r=e.links.find(n=>n.name===t);return r?r.error?`${r.state}: ${r.error}`:r.state:""}function sY({nodes:e,name:t,showVersion:r=!1}){let n=$ge()??M_,i=e.links.find(a=>a.name===t),o=_gr(i?.peerVersion,n);return(0,wR.jsx)(lr,{title:yWn(e,t),placement:"right",children:(0,wR.jsxs)(fe,{component:"span",sx:{display:"inline-flex",alignItems:"center",gap:.75},children:[(0,wR.jsx)(Sgr,{sx:{fontSize:8,color:Cgr(i?.state)}}),t,r&&i?.peerVersion&&(0,wR.jsxs)(fe,{component:"span",sx:gWn,children:["v",i.peerVersion]}),o&&(0,wR.jsx)(bn,{label:o,size:"small",color:o==="behind"?"warning":"info",sx:mWn})]})})}var _R=L(z(),1),vWn={opacity:.6},bWn={display:"inline-flex",alignItems:"center",gap:.5,px:.5,border:1,borderStyle:"dashed",borderRadius:1};function kgr({nodes:e,name:t,clone:r}){let n=(0,_R.jsx)(sY,{nodes:e,name:t});return r.kind==="cloned"?n:r.kind==="unavailable"?(0,_R.jsx)(fe,{component:"span",sx:vWn,children:n}):(0,_R.jsx)(lr,{title:uP(t,r.cloneTarget),children:(0,_R.jsxs)(fe,{component:"span",sx:bWn,children:[(0,_R.jsx)(cP,{sx:{fontSize:14}}),n]})})}var Rgr=L(z(),1),xWn={px:1.5,borderRadius:.75,fontSize:12,fontWeight:600,color:"text.secondary","&:hover":{color:"text.primary",bgcolor:"action.hover"},"&[aria-checked='true']":{color:"primary.main",bgcolor:"action.selected"},"&.Mui-focusVisible":{outline:2,outlineColor:"primary.main"}};function Egr({value:e,label:t,checked:r,autoFocus:n,onSelect:i}){return(0,Rgr.jsx)(Dn,{role:"radio","aria-checked":r,"data-value":e,tabIndex:r?0:-1,autoFocus:n&&r,onClick:i,sx:xWn,children:t})}var Agr={ArrowRight:1,ArrowLeft:-1};function TWn(e,t,r){if(e.key==="Tab"){let n=t+(e.shiftKey?-1:1);return n>=0&&n<r?n:void 0}return(t+Agr[e.key]+r)%r}function Pgr(e,t,r,n){return i=>{if(i.key==="ArrowUp"||i.key==="ArrowDown"){if(!n)return;i.preventDefault(),n();return}if(i.key!=="Tab"&&!Agr[i.key]){Bx(i);return}let o=TWn(i,e.indexOf(t),e.length);o!==void 0&&(i.preventDefault(),r(e[o]),i.currentTarget.querySelector(`[data-value="${e[o]}"]`)?.focus())}}var Lgr=L(ge(),1);function iB(e){return e?.querySelector('[aria-checked="true"]')}function Mgr(e,t){(0,Lgr.useEffect)(()=>{let r=e.current;if(!r?.contains(document.activeElement))return;let n=iB(r);n&&n!==document.activeElement&&n.focus()},[e,t])}var y$e=L(z(),1),SWn={border:1,borderColor:"divider",borderRadius:1,height:40,p:"2px",flexShrink:0};function zge({label:e,options:t,value:r,onChange:n,optionLabel:i=u=>u,groupRef:o,autoFocus:a,onTrack:s,onToggleRow:l}){return Mgr(o,r),(0,y$e.jsx)(Rt,{ref:o,direction:"row",role:"radiogroup","aria-label":e,spacing:"2px",onFocus:s,onKeyDown:Pgr(t,r,n,l),sx:SWn,children:t.map(u=>(0,y$e.jsx)(Egr,{value:u,label:i(u),checked:u===r,autoFocus:a,onSelect:()=>n(u)},u))})}var v$e=L(z(),1);function Dgr({value:e,onChange:t,cloneState:r}){let{nodes:n,names:i,visible:o}=gu(),a=(0,Igr.useRef)(null);return!o||!n||!e?null:(0,v$e.jsx)(zge,{label:"Machine",options:i,value:e,onChange:t,optionLabel:s=>(0,v$e.jsx)(kgr,{nodes:n,name:s,clone:r(s)}),groupRef:a,autoFocus:!1,onTrack:()=>{}})}var Ngr=L(z(),1);function Ogr({value:e,onChange:t,placeholder:r,inputRef:n,autoFocus:i,onTrack:o}){return(0,Ngr.jsx)(ni,{value:e,onChange:a=>t(a.target.value),onKeyDown:Bx,onFocus:o,onSelect:o,inputRef:n,placeholder:r,autoFocus:i,fullWidth:!0,multiline:!0,minRows:3,maxRows:12,slotProps:{htmlInput:{"aria-label":"Prompt"},input:{sx:{fontSize:14}}}})}var zgr=L(ge(),1);var M2={draft:{placeholder:"Describe the backlog item to draft...",submitLabel:"Start draft",sessionMode:"assist-draft"},bug:{placeholder:"Describe the bug: what happened, what you expected...",submitLabel:"File bug",sessionMode:"assist-bug"},prompt:{placeholder:fde,submitLabel:"Start session"},design:{placeholder:"Describe the design task...",submitLabel:"Start design"}},Bgr=Object.keys(M2);var b$e=L(z(),1);function Fgr({anchor:e,harness:t,harnesses:r,onPick:n,onClose:i}){return(0,b$e.jsx)(Dl,{open:e!==null,anchorEl:e,onClose:i,slotProps:{list:{dense:!0,"aria-label":"Harness"}},children:r.map(o=>(0,b$e.jsx)(cn,{role:"menuitemradio","aria-checked":o===t,selected:o===t,onClick:()=>{n(o),i()},sx:{fontSize:13},children:Lu(o)},o))})}var kR=L(z(),1);function $gr(e){return t=>t==="prompt"&&e?(0,kR.jsxs)(kR.Fragment,{children:["prompt",(0,kR.jsx)(fe,{component:"span",sx:{fontWeight:400,whiteSpace:"pre"},children:` \xB7 ${Lu(e)}`}),(0,kR.jsx)(Bp,{sx:{fontSize:18,mr:-.75}})]}):t}var ER=L(z(),1);function Hgr({draft:e,harness:t,harnesses:r,focus:n}){let[i,o]=(0,zgr.useState)(null),a=e.mode==="prompt"&&r.length>1,s=()=>o(iB(n.modeRef.current)??null),l=u=>{a&&u==="prompt"?s():e.setMode(u)};return(0,ER.jsxs)(ER.Fragment,{children:[(0,ER.jsx)(zge,{label:"Mode",options:Bgr,value:e.mode,onChange:l,optionLabel:$gr(r.length>1?t:void 0),groupRef:n.modeRef,autoFocus:n.autoFocus==="mode",onTrack:n.trackMode,onToggleRow:a?s:void 0}),(0,ER.jsx)(Fgr,{anchor:i,harness:t,harnesses:r,onPick:e.setHarness,onClose:()=>o(null)})]})}var Qgr=L(ge(),1);var x$e=L(z(),1),CWn={zIndex:e=>e.zIndex.modal+1};function Ugr({open:e,anchor:t,children:r}){return(0,x$e.jsx)(MA,{open:e,anchorEl:t,placement:"bottom-start",sx:CWn,children:(0,x$e.jsx)(on,{sx:{maxHeight:240,overflowY:"auto",width:t?.clientWidth},onMouseDown:n=>n.preventDefault(),children:r})})}function Wgr(e){return{htmlInput:{role:"combobox","aria-label":"Repo","aria-expanded":e},input:{sx:{fontSize:13,height:40}}}}var Vgr=L(QB(),1);function Ggr({open:e,highlighted:t,accept:r,close:n,navigate:i,openList:o}){return a=>{if(!e){if(a.key==="ArrowDown"){a.preventDefault(),o();return}Bx(a);return}if(a.key!=="Escape"){if(a.key==="Enter"){if(a.preventDefault(),t===void 0)return;(0,Vgr.flushSync)(()=>{r(t),n()}),Bx(a);return}if(a.key!=="Tab"){i(a);return}t!==void 0&&r(t),n()}}}function qgr(e,t){let r=t.trim().toLowerCase();return r?e.filter(n=>H0(n).toLowerCase().includes(r)):e}var T$e=L(ge(),1);function jgr(){let[e,t]=(0,T$e.useState)(!1),[r,n]=(0,T$e.useState)("");return{open:e,query:r,show:()=>t(!0),filterBy:i=>{n(i),t(!0)},close:()=>{t(!1),n("")}}}var Kgr=L(ge(),1);var Ygr=e=>e?H0(e):"";function Xgr(e){let[t,r]=(0,Kgr.useState)(()=>Ygr(e));return{text:t,setText:r,showRepo:n=>r(Ygr(n))}}function Zgr(e,t,r){let n=jgr(),i=Xgr(t),o=qgr(e,n.query),a=f=>{r(f),i.showRepo(f)},s=HT(o,n.query,a,n.close),l=()=>s.setHighlight(Math.max(e.indexOf(t),0)),u=()=>{l(),n.show()};return{open:n.open,text:i.text,filtered:o,highlight:s.highlight,setHighlight:s.setHighlight,onKeyDown:Ggr({open:n.open,highlighted:o[s.highlight],accept:a,close:n.close,navigate:s.onKeyDown,openList:u}),onClick:()=>{n.open||u()},onType:f=>{i.setText(f),n.filterBy(f)},onFocus:l,onBlur:()=>{n.close(),i.showRepo(t)},pick:f=>{a(f),n.close()}}}var oB=L(z(),1);function Jgr({repos:e,value:t,onChange:r,inputRef:n,autoFocus:i,onTrack:o}){let a=Zgr(e,t,r),s=(0,Qgr.useRef)(null);return(0,oB.jsxs)(fe,{ref:s,sx:{flex:1,minWidth:0},children:[(0,oB.jsx)(ni,{value:a.text,onChange:l=>a.onType(l.target.value),onFocus:l=>{l.target.select(),a.onFocus(),o()},inputRef:n,autoFocus:i,onClick:a.onClick,onBlur:a.onBlur,onKeyDown:a.onKeyDown,placeholder:"Repo",size:"small",fullWidth:!0,slotProps:Wgr(a.open)}),(0,oB.jsx)(Ugr,{open:a.open,anchor:s.current,children:(0,oB.jsx)(AJ,{repos:a.filtered,selected:t,highlight:a.highlight,onHighlight:a.setHighlight,onSelect:a.pick})})]})}var I_=L(z(),1);function e0r({cloneState:e,...t}){let{draft:r,focus:n}=t,{repos:i}=$n();return(0,I_.jsxs)(Rt,{spacing:1,sx:{p:1},children:[(0,I_.jsx)(Ogr,{value:r.prompt,onChange:r.setPrompt,placeholder:M2[r.mode].placeholder,inputRef:n.promptRef,autoFocus:n.autoFocus==="prompt",onTrack:n.trackPrompt}),(0,I_.jsxs)(Rt,{direction:"row",spacing:1,sx:{alignItems:"flex-start"},children:[(0,I_.jsx)(Jgr,{repos:i,value:r.cwd,onChange:r.setCwd,inputRef:n.repoRef,autoFocus:n.autoFocus==="repo",onTrack:n.trackRepo}),(0,I_.jsx)(Hgr,{...t})]}),(0,I_.jsx)(Dgr,{value:r.node,onChange:r.setNode,cloneState:e})]})}var aB=L(z(),1),wWn=["Enter start","Shift+Enter newline","Esc close"],_Wn={alignItems:"center",px:1.5,py:1,borderTop:1,borderColor:"divider",bgcolor:"action.hover"};function t0r({submitLabel:e,disabled:t=!1}){return(0,aB.jsxs)(Rt,{direction:"row",spacing:1.5,sx:_Wn,children:[(0,aB.jsx)(Rt,{direction:"row",spacing:1.5,sx:{mr:"auto"},children:wWn.map(r=>(0,aB.jsx)($e,{variant:"caption",color:"text.secondary",children:r},r))}),(0,aB.jsx)(Jt,{type:"submit",variant:"contained",size:"small",disabled:t,children:e})]})}function r0r({mode:e,harness:t,prompt:r,cwd:n,node:i},o){let a=n||void 0,s=i?[i]:[];if(e==="prompt"){t==="claude"?o.onCreate(r,a,...s):o.onCreateHarness(t,r,a,...s);return}if(e==="design"){o.onCreateDesign(r,a,...s);return}let l=i?[{node:i}]:[];Gjt(M2[e].sessionMode,n,(u,f)=>o.onCreateAssist(u,f,...l),()=>{},r)}function n0r(e,t,r,n){return r.kind==="blocked"?!1:r.kind==="clone"?(gJ(r.prompt,n.onCreateAssist),!0):(r0r({mode:e.mode,harness:t,prompt:e.prompt,cwd:r.cwd,node:e.node},n),e.clear(),!0)}var RR=L(ge(),1);function i0r(e,t){let r=(0,RR.useRef)(e),n=(0,RR.useRef)(null),i=(0,RR.useRef)(null),o=(0,RR.useRef)(null),a=(0,RR.useCallback)(u=>{n.current=u;let{field:f,selectionStart:d,selectionEnd:h}=r.current;u&&f==="prompt"&&u.setSelectionRange(d,h)},[]),s=u=>{let f=u.target;t({field:"prompt",selectionStart:f.selectionStart,selectionEnd:f.selectionEnd})},l=()=>{if(o.current?.closest("form")?.contains(document.activeElement))return;let{field:u}=r.current;({repo:i.current,mode:iB(o.current),prompt:n.current}[u]??n.current)?.focus()};return{autoFocus:e.field,promptRef:a,repoRef:i,modeRef:o,trackPrompt:s,trackRepo:()=>t({...e,field:"repo"}),trackMode:()=>t({...e,field:"mode"}),restore:l}}function kWn(e,t,r){return e?r.kind==="cloned"?{kind:"launch",cwd:r.cwd}:r.kind==="clonable"?{kind:"clone",prompt:LJ(r,t)}:{kind:"blocked"}:{kind:"launch",cwd:e}}function o0r(e,t){let{names:r,visible:n}=gu(),i=TJ(t,n?r:[void 0]);return{cloneState:i,target:kWn(t,e,i(e))}}var sB=L(z(),1);function a0r({draft:e,launchers:t,onClose:r}){let n=i0r(e.focus,e.setFocus),i=xgr($T()),o=i.includes(e.harness)?e.harness:"claude",{target:a,cloneState:s}=o0r(e.node,e.cwd),l=u=>{u.preventDefault(),n0r(e,o,a,t)&&r()};return(0,sB.jsx)(Ige,{onClose:r,onEntered:n.restore,centered:!0,children:(0,sB.jsxs)("form",{onSubmit:l,children:[(0,sB.jsx)(e0r,{draft:e,harness:o,harnesses:i,focus:n,cloneState:s}),(0,sB.jsx)(t0r,{submitLabel:a.kind==="clone"?"Clone":M2[e.mode].submitLabel,disabled:a.kind==="blocked"})]})})}var Hge=L(ge(),1);function s0r(e){let[t,r]=(0,Hge.useState)(null);return(0,Hge.useEffect)(()=>{let n=!1;return(async()=>{let i="draft";try{let o=e?`?cwd=${encodeURIComponent(e)}`:"",s=await(await fetch(`/api/new-session-defaults${o}`)).json();Object.hasOwn(M2,s?.mode)&&(i=s.mode)}catch{}n||r(i)})(),()=>{n=!0}},[e]),t}function l0r(e,{visible:t,names:r,selected:n}){if(t)return e&&r.includes(e)?e:n}var I2=L(ge(),1),c0r={field:"prompt",selectionStart:0,selectionEnd:0};function u0r(){let[e,t]=(0,I2.useState)(""),[r,n]=(0,I2.useState)(),[i,o]=(0,I2.useState)(),[a,s]=(0,I2.useState)("claude"),[l,u]=(0,I2.useState)(),[f,d]=(0,I2.useState)(c0r),h=(0,I2.useCallback)(()=>{t(""),n(void 0),o(void 0),u(void 0),d(c0r)},[]);return{prompt:e,cwd:r,mode:i,harness:a,node:l,focus:f,setPrompt:t,setNode:u,setCwd:n,setMode:o,setHarness:s,setFocus:d,clear:h}}function f0r(e=s0r){let{selectedCwd:t}=$n(),r=gu(),n=u0r(),i=n.cwd??t,o=e(i);return o?{...n,cwd:i,mode:n.mode??o,node:l0r(n.node,r)}:null}function d0r(e){zo(Xn("newSession").matches,e)}var h0r=L(ge(),1);function p0r(e,t){let{selectedCwd:r}=$n(),[n,i]=Pc(),o=n.get("new"),a=n.get("newCwd")??r,{setPrompt:s,setCwd:l,setFocus:u}=e??{};(0,h0r.useEffect)(()=>{o===null||!s||!l||!u||(o&&(s(o),l(a),u({field:"prompt",selectionStart:o.length,selectionEnd:o.length})),t(),i(f=>(f.delete("new"),f.delete("newCwd"),f),{replace:!0}))},[o,a,s,l,u,t,i])}var g0r=L(z(),1);function m0r({launchers:e}){let[t,r]=(0,Uge.useState)(!1),n=f0r(),i=(0,Uge.useCallback)(()=>r(!0),[]);return d0r(i),p0r(n,i),!t||!n?null:(0,g0r.jsx)(a0r,{draft:n,launchers:e,onClose:()=>r(!1)})}var Wge=L(z(),1);function y0r({reconnecting:e}){return(0,Wge.jsx)(ol,{open:e,anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,Wge.jsx)(ri,{severity:"info",variant:"filled",icon:(0,Wge.jsx)(mo,{size:16,color:"inherit"}),children:"Reconnecting\u2026"})})}var Z1=L(z(),1);function v0r({socket:e,onViewLaunchedSession:t}){return(0,Z1.jsxs)(Z1.Fragment,{children:[(0,Z1.jsx)(ygr,{}),(0,Z1.jsx)(m0r,{launchers:{onCreate:e.createSession,onCreateDesign:e.createDesignSession,onCreateHarness:e.createHarnessSession,onCreateAssist:e.createAssistSession}}),(0,Z1.jsx)(y0r,{reconnecting:e.reconnecting}),(0,Z1.jsx)(Mu,{error:e.error,onClose:e.clearError}),(0,Z1.jsx)(bgr,{notice:e.success,onClose:e.clearSuccess,onView:t})]})}var l0=L(ge(),1);async function b0r(e,t){try{let r=await fetch(un("/api/updates",t?void 0:e)),n=await r.json();if(!r.ok)throw new Error(n?.error??`HTTP ${r.status}`);return{name:e,local:t,status:n}}catch(r){return{name:e,local:t,error:r instanceof Error?r.message:"Failed to load update state"}}}var EWn=6e4;function x0r(e){let t=e.nodes?.local,r=e.names.join(`
3977
3977
  `),[n,i]=(0,l0.useState)([]),[o,a]=(0,l0.useState)(!0),s=(0,l0.useRef)(0),l=(0,l0.useCallback)(()=>{let u=r?r.split(`
3978
3978
  `):[];if(u.length===0)return;let f=++s.current;Promise.all(u.map(d=>b0r(d,d===t))).then(d=>{f===s.current&&(i(d),a(!1))})},[r,t]);return(0,l0.useEffect)(()=>{l();let u=setInterval(l,EWn);return()=>clearInterval(u)},[l]),(0,l0.useMemo)(()=>({entries:n,loading:o,refresh:l}),[n,o,l])}var D_=L(z(),1);function T0r({shell:e,children:t}){let{socket:r,selection:n,launch:i,topBar:o,sidebarCollapse:a}=e,s=x0r(r.nodeSelection);return(0,D_.jsx)(l$e.Provider,{value:s,children:(0,D_.jsx)(IDe.Provider,{value:o,children:(0,D_.jsx)(aOe.Provider,{value:a,children:(0,D_.jsx)(sz.Provider,{value:n,children:(0,D_.jsx)(y2e.Provider,{value:r.nodeSelection,children:(0,D_.jsx)(Yu.Provider,{value:n.selectedNode,children:(0,D_.jsx)(p2e.Provider,{value:i,children:t})})})})})})})}var S0r=L(z(),1),C0r=ft((0,S0r.jsx)("path",{d:"M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2zM4 6h16v10H4z"}),"Computer");var w0r=L(ge(),1);var c0=L(z(),1),RWn={ml:1,textTransform:"none",fontSize:12};function _0r(){let{nodes:e,names:t,visible:r,selected:n,select:i}=gu(),[o,a]=(0,w0r.useState)(null);return!r||!e||!n?null:(0,c0.jsxs)(c0.Fragment,{children:[(0,c0.jsx)(Jt,{size:"small",color:"inherit",startIcon:(0,c0.jsx)(C0r,{fontSize:"small"}),"aria-label":"Machine","aria-haspopup":"menu",onClick:s=>a(s.currentTarget),sx:RWn,children:(0,c0.jsx)(sY,{nodes:e,name:n})}),(0,c0.jsx)(Dl,{anchorEl:o,open:!!o,onClose:()=>a(null),children:t.map(s=>(0,c0.jsx)(cn,{selected:s===n,onClick:()=>{i(s),a(null)},sx:{fontSize:13},children:(0,c0.jsx)(sY,{nodes:e,name:s,showVersion:!0})},s))})]})}var lY=L(ge(),1);function k0r(e,t){return[...e[0].slice(0,-1),String(t+1)]}var Vge=L(z(),1);function E0r({index:e,label:t,...r}){let{chords:n}=Xn("navTab");return(0,Vge.jsx)(lr,{describeChild:!0,title:(0,Vge.jsx)(Md,{label:t,chords:[k0r(n,e)]}),children:(0,Vge.jsx)(Cv,{label:t,...r})})}var S$e=L(ge(),1);function R0r(e,t){let{bound:r}=Xn("navTab"),n=e.length,i=(0,S$e.useCallback)(a=>(YG(a,r)??n)<n,[r,n]),o=(0,S$e.useCallback)(a=>{let s=e[YG(a,r)??-1];s&&t(s)},[e,t,r]);zo(i,o)}var Gge=L(ge(),1);function A0r(){let[e,t]=(0,Gge.useState)(!1);return(0,Gge.useEffect)(()=>{let r=!1;return(async()=>{try{let i=await(await fetch("/api/news/nav")).json();r||t(i?.showInNav===!0)}catch{r||t(!1)}})(),()=>{r=!0}},[]),e}var qge=L(ge(),1);async function AWn(e,t){let r=await fetch(un(`/api/releases/configured?cwd=${encodeURIComponent(e)}`,t));return r.ok?(await r.json())?.configured===!0:void 0}function P0r(e){let[t,r]=(0,qge.useState)(null),n=vr(),i=`${n??""}\0${e}`;return(0,qge.useEffect)(()=>{if(!e)return;let o=!1;return AWn(e,n).catch(()=>{}).then(a=>{o||r({key:i,configured:a})}),()=>{o=!0}},[e,n,i]),t?.key===i?t.configured:void 0}var L0r=L(ge(),1);function M0r(e){let{pathname:t}=ua(),r=Xi(),n=t==="/releases"||t.startsWith("/releases/");(0,L0r.useEffect)(()=>{e===!1&&n&&r("/sessions",{replace:!0})},[e,n,r])}var PWn={path:"/sessions",label:"Sessions"},LWn={path:"/backlog",label:"Backlog"},MWn={path:"/next",label:"Next"},IWn={path:"/releases",label:"Releases"},DWn={path:"/news",label:"News"};function I0r(e,t){return[PWn,LWn,MWn,...e?[IWn]:[],...t?[DWn]:[]]}var C$e=L(z(),1);function D0r({cwd:e}){let t=ua(),r=Xi(),n=P0r(e),i=A0r();M0r(n);let o=n===!0,a=(0,lY.useMemo)(()=>I0r(o,i),[o,i]),s=(0,lY.useMemo)(()=>a.map(f=>f.path),[a]),l=a.findIndex(f=>t.pathname.startsWith(f.path)),u=(0,lY.useCallback)(f=>{t.pathname!==f&&r(f)},[t.pathname,r]);return R0r(s,u),(0,C$e.jsx)(Nk,{value:l===-1?!1:l,textColor:"inherit",indicatorColor:"secondary",children:a.map((f,d)=>(0,C$e.jsx)(E0r,{index:d,label:f.label,onClick:()=>u(f.path)},f.path))})}var O0r=L(z(),1),N0r=ft((0,O0r.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m5 11h-4v4h-2v-4H7v-2h4V7h2v4h4z"}),"AddCircle");var cY=L(z(),1),OWn={color:"success.light"};function B0r(){let[,e]=Pc(),{label:t,chords:r}=Xn("newSession");return(0,cY.jsx)(lr,{title:(0,cY.jsx)(Md,{label:t,chords:r}),children:(0,cY.jsx)(sr,{size:"small",sx:OWn,"aria-label":"New session",onClick:()=>e(i=>(i.set("new",""),i),{replace:!0}),children:(0,cY.jsx)(N0r,{})})})}var Yge=L(ge(),1);var jge=L(z(),1),NWn={color:"inherit"};function F0r({cwd:e}){let[t,r]=(0,Yge.useState)(null),n=vr();return(0,Yge.useEffect)(()=>{if(!e){r(null);return}let i=!1;return(async()=>{try{let a=await(await fetch(un(`/api/github-url?cwd=${encodeURIComponent(e)}`,n))).json();i||r(a?.url??null)}catch{i||r(null)}})(),()=>{i=!0}},[e,n]),t?(0,jge.jsx)(lr,{title:"Open in GitHub",children:(0,jge.jsx)(sr,{sx:NWn,onClick:()=>window.open(t,"_blank"),children:(0,jge.jsx)(rP,{})})}):null}var H0r=L(ge(),1);var z0r=L(ge(),1);var Kge=L(z(),1);function $0r({window:e,windowSeconds:t,fallbackLabel:r,now:n}){let i=e?.used_percentage;if(i==null)return null;let o=__(i,e?.resets_at,t,n),a=e?.resets_at!=null?Ege(e.resets_at,n):r;return(0,Kge.jsxs)(fe,{component:"span",children:[(0,Kge.jsxs)(fe,{component:"span",sx:{color:k_(o)},children:[Math.round(i),"%"]})," ",(0,Kge.jsxs)(fe,{component:"span",sx:{color:"text.secondary"},children:["(",a,")"]})]})}var O_=L(z(),1);function Xge({rateLimits:e}){let t=E_(3e4),r=[{window:e.five_hour,windowSeconds:18e3,fallbackLabel:"5h"},{window:e.seven_day,windowSeconds:604800,fallbackLabel:"7d"}].filter(n=>n.window?.used_percentage!=null);return(0,O_.jsx)(O_.Fragment,{children:r.map((n,i)=>(0,O_.jsxs)(z0r.Fragment,{children:[i>0?(0,O_.jsx)(fe,{component:"span",sx:{color:"text.secondary",mr:.5},children:","}):null,(0,O_.jsx)($0r,{window:n.window,windowSeconds:n.windowSeconds,fallbackLabel:n.fallbackLabel,now:t})]},n.fallbackLabel))})}var N_=L(z(),1);function U0r({groups:e}){return(0,N_.jsx)(N_.Fragment,{children:e.map((t,r)=>(0,N_.jsxs)(H0r.Fragment,{children:[(0,N_.jsx)(fe,{component:"span",sx:{color:"text.secondary",ml:r>0?1:0,mr:.5},children:Lu(t.harness)}),(0,N_.jsx)(Xge,{rateLimits:t.rateLimits})]},t.harness))})}function BWn(e){if(e==="over")return{level:"warn",boundary:100};if(e==="warn")return{level:"ok",boundary:75}}function FWn(e){if(e==="ok")return{level:"warn",boundary:75};if(e==="warn")return{level:"over",boundary:100}}function $Wn(e,t,r,n){if(e>=t)return;let i=e/t;return Math.round(r-n*(1-i))}function G0r(e,t,r,n){if(t==null)return{kind:"unprojectable"};let i=h$e(t,r,n);if(i==null)return{kind:"unprojectable"};let o=__(e,t,r,n),a=BWn(o),s=FWn(o);return{kind:"projected",recovery:a&&{level:a.level,pct:a.boundary*i,at:$Wn(e,a.boundary,t,r)},worse:s&&{level:s.level,pct:s.boundary*i}}}function q0r(e,t){return e.at==null?"not before reset":`${e.level==="ok"?"green":"under"} in ${Ege(e.at,t)}`}var u0=L(z(),1);function w$e({direction:e,threshold:t}){let r=e==="back",n={display:"inline-flex",gap:.5,minWidth:"6ch",justifyContent:r?"flex-end":"flex-start"};if(!t)return(0,u0.jsx)(fe,{component:"span",sx:n});let i=(0,u0.jsx)(fe,{component:"span",sx:{opacity:.6},children:r?"\u2190":"\u2192"}),o=(0,u0.jsxs)(fe,{component:"span",sx:{color:k_(t.level)},children:[Math.round(t.pct),"%"]});return(0,u0.jsx)(fe,{component:"span",sx:n,children:r?(0,u0.jsxs)(u0.Fragment,{children:[o,i]}):(0,u0.jsxs)(u0.Fragment,{children:[i,o]})})}var B_=L(z(),1);function j0r({label:e,pct:t,resetsAt:r,windowSeconds:n,now:i}){let o=__(t,r,n,i),a=G0r(t,r,n,i),s=a.kind==="projected"?a:void 0;return(0,B_.jsxs)(fe,{sx:{display:"flex",alignItems:"baseline",gap:.75},children:[(0,B_.jsx)(fe,{component:"span",sx:{minWidth:"2ch"},children:e}),(0,B_.jsx)(w$e,{direction:"back",threshold:s?.recovery}),(0,B_.jsxs)(fe,{component:"span",sx:{minWidth:"4ch",textAlign:"right",color:k_(o)},children:[Math.round(t),"%"]}),(0,B_.jsx)(w$e,{direction:"forward",threshold:s?.worse}),(0,B_.jsx)(fe,{component:"span",sx:{opacity:.6},children:s?s.recovery&&q0r(s.recovery,i):"no projection yet"})]})}function Y0r(e){return[{label:"5h",window:e.five_hour,windowSeconds:18e3},{label:"7d",window:e.seven_day,windowSeconds:604800}].flatMap(t=>t.window?.used_percentage==null?[]:[{label:t.label,pct:t.window.used_percentage,resetsAt:t.window.resets_at,windowSeconds:t.windowSeconds}])}var K0r=L(z(),1);function Zge({rateLimits:e,now:t}){return Y0r(e).map(r=>(0,K0r.jsx)(j0r,{label:r.label,pct:r.pct,resetsAt:r.resetsAt,windowSeconds:r.windowSeconds,now:t},r.label))}var AR=L(z(),1);function X0r({groups:e}){let t=E_(3e4);return(0,AR.jsxs)(fe,{sx:{fontFamily:"monospace",fontSize:12},children:[e.map(r=>(0,AR.jsxs)(fe,{sx:{mb:.5},children:[(0,AR.jsx)(fe,{sx:{opacity:.8},children:Lu(r.harness)}),(0,AR.jsx)(Zge,{rateLimits:r.rateLimits,now:t})]},r.harness)),(0,AR.jsx)(fe,{sx:{mt:.5,opacity:.6},children:"Account usage per harness \u2014 view history"})]})}function Z0r(e){return e?.five_hour?.used_percentage!=null||e?.seven_day?.used_percentage!=null}function Q0r(e,t){let r=[];Z0r(e)&&r.push({harness:"claude",rateLimits:e});for(let[n,i]of Object.entries(t))Z0r(i)&&r.push({harness:n,rateLimits:i});return r}var uY=L(z(),1),_$e="Claude account usage (5h / 7d windows) \u2014 view history";function J0r({rateLimits:e}){let t=E_(3e4);return(0,uY.jsxs)(fe,{sx:{fontFamily:"monospace",fontSize:12},children:[(0,uY.jsx)(Zge,{rateLimits:e,now:t}),(0,uY.jsx)(fe,{sx:{mt:.5,opacity:.6},children:_$e})]})}var PR=L(z(),1),zWn={display:"flex",alignItems:"center",ml:2,fontFamily:"monospace",fontSize:13},HWn={};function eyr({rateLimits:e,harnessRateLimits:t=HWn}){let r=Q0r(e,t),n=r.every(s=>s.harness==="claude"),i=e,o=_$e,a="Usage";return r.length>0&&n?(o=(0,PR.jsx)(J0r,{rateLimits:i}),a=(0,PR.jsx)(Xge,{rateLimits:i})):r.length>0&&(o=(0,PR.jsx)(X0r,{groups:r}),a=(0,PR.jsx)(U0r,{groups:r})),(0,PR.jsx)(lr,{title:o,children:(0,PR.jsx)(xn,{component:ys,to:"/usage",underline:"hover",color:"inherit",sx:zWn,children:a})})}var tyr=L(z(),1),ryr=ft((0,tyr.jsx)("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z"}),"Refresh");var O2=L(ge(),1);var lB={target:"both",label:"Restart daemon",message:"This restarts the sessions daemon and the web server, then reloads the page once the server is back."};function cB(e,t){let r=t?`&node=${encodeURIComponent(t)}`:"";return fetch(`/api/restart?target=${e}${r}`,{method:"POST"})}var D2=L(ge(),1);var UWn="/api/session-layout";async function WWn(){try{return(await fetch(UWn,{cache:"no-store"})).ok}catch{return!1}}async function nyr(e){let t=0;for(;!e();){if(t=await WWn()?t+1:0,t>=2)return!e();await new Promise(r=>setTimeout(r,300))}return!1}function VWn(){return{sawDisconnect:!1,waiting:!1,abandoned:!0}}function iyr(e,t,r){let n=(0,D2.useRef)(VWn()),i=(0,D2.useRef)(r);i.current=r,(0,D2.useEffect)(()=>{let s=n.current;if(!(!e||s.abandoned)){if(t){s.sawDisconnect=!0;return}!s.sawDisconnect||s.waiting||(s.waiting=!0,nyr(()=>s.abandoned).then(l=>{l&&i.current()}))}},[e,t]);let o=(0,D2.useCallback)(()=>{n.current.abandoned=!0},[]),a=(0,D2.useCallback)(()=>{n.current.abandoned=!0,n.current={sawDisconnect:!1,waiting:!1,abandoned:!1}},[]);return(0,D2.useEffect)(()=>o,[o]),{arm:a,abandon:o}}var GWn=15e3;function uB(e,t,r){let[n,i]=(0,O2.useState)(!1),[o,a]=(0,O2.useState)(null),s=(0,O2.useRef)(void 0),{arm:l,abandon:u}=iyr(n,t,()=>{clearTimeout(s.current),r?.(),globalThis.location.reload()});(0,O2.useEffect)(()=>()=>clearTimeout(s.current),[]);let f=(0,O2.useCallback)(async()=>{i(!0),l(),s.current=setTimeout(()=>{u(),i(!1),a("Web server did not come back")},GWn);try{if(!(await cB(e)).ok)throw new Error("restart failed")}catch{u(),clearTimeout(s.current),i(!1),a("Failed to restart web server")}},[e,l,u]);return{pending:n,error:o,clearError:()=>a(null),restart:f}}var f0=L(z(),1),qWn={color:"inherit",mr:1.5};function oyr({reconnecting:e}){let{pending:t,error:r,clearError:n,restart:i}=uB("webserver",e);return(0,f0.jsxs)(f0.Fragment,{children:[(0,f0.jsx)(lr,{title:"Restart web server",children:(0,f0.jsx)("span",{children:(0,f0.jsx)(sr,{sx:qWn,disabled:t,onClick:i,children:t?(0,f0.jsx)(mo,{size:24}):(0,f0.jsx)(ryr,{})})})}),(0,f0.jsx)(Mu,{error:r,onClose:n})]})}var lyr=L(ge(),1);var ayr=L(ge(),1);function syr(e){let t=Ni().palette.primary.main;zo(Xn("focusRepoPicker").matches,(0,ayr.useCallback)(()=>Rf({locate:()=>e.current?.querySelector("button")??null,focus:r=>r.focus()},t),[e,t]))}var fY=L(z(),1),jWn={width:240,ml:2};function cyr({repos:e,selected:t,onSelect:r}){let n=(0,lyr.useRef)(null);syr(n);let{chords:i}=Xn("focusRepoPicker");return(0,fY.jsx)(fe,{ref:n,sx:jWn,children:(0,fY.jsx)(_J,{label:t?H0(t):"Select repo...",tooltip:(0,fY.jsx)(Md,{label:"Repo",chords:i}),children:o=>(0,fY.jsx)(vet,{repos:e,selected:t,onSelect:r,close:o})})})}var byr=L(ge(),1);var dY=L(ge(),1);function Qge(e){let[t,r]=(0,dY.useState)([]),[n,i]=(0,dY.useState)(!0),o=vr();return(0,dY.useEffect)(()=>{if(!e){r([]),i(!1);return}let a=!1;return i(!0),fetch(un(`/api/pr-list?cwd=${encodeURIComponent(e)}`,o)).then(s=>s.json()).then(s=>{a||(r(Array.isArray(s?.prs)?s.prs:[]),i(!1))}).catch(()=>{a||(r([]),i(!1))}),()=>{a=!0}},[e,o]),{prs:t,loading:n}}var k$e=L(z(),1);function E$e({text:e}){return(0,k$e.jsx)(fe,{sx:{p:1.5},children:(0,k$e.jsx)($e,{sx:{fontSize:13,color:"text.secondary"},children:e})})}var fB=L(z(),1);function uyr({pr:e,highlighted:t,onHover:r,onPick:n}){let i=RJ(t);return(0,fB.jsx)(cn,{ref:i,selected:t,onMouseDown:o=>o.preventDefault(),onMouseEnter:r,onClick:()=>n(e),sx:{alignItems:"flex-start",py:.75,whiteSpace:"normal"},children:(0,fB.jsxs)(Rt,{spacing:.25,sx:{minWidth:0},children:[(0,fB.jsx)($e,{sx:{fontSize:13,lineHeight:1.3,fontWeight:500},children:e.title}),(0,fB.jsxs)($e,{sx:{fontSize:11,color:"text.secondary"},children:["#",e.number," \xB7 ",e.author," \xB7 ",fa(e.createdAt)]})]})})}var R$e=L(z(),1);function fyr({prs:e,highlight:t,onHighlight:r,onPick:n}){return(0,R$e.jsx)(Sp,{dense:!0,disablePadding:!0,sx:{maxHeight:200,overflowY:"auto"},children:e.map((i,o)=>(0,R$e.jsx)(uyr,{pr:i,highlighted:o===t,onHover:()=>r(o),onPick:n},i.number))})}var hyr=L(ge(),1);function dyr(e,t){let r=t.trim().toLowerCase();if(!r)return e;let n=r.replace(/^#/,"");return e.filter(i=>i.title.toLowerCase().includes(r)||i.author.toLowerCase().includes(r)||n!==""&&String(i.number).includes(n))}function pyr(e,t,r){let[n,i]=(0,hyr.useState)(""),o=dyr(e,n),{highlight:a,setHighlight:s,onKeyDown:l}=HT(o,n,t,r);return{filter:n,setFilter:i,filtered:o,highlight:a,setHighlight:s,onKeyDown:l,select:f=>{t(f),r()}}}var F_=L(z(),1),myr={...pP,left:"auto",width:320,maxHeight:"none",overflowY:"visible"};function gyr({cwd:e,onPick:t,close:r}){let{prs:n,loading:i}=Qge(e),o=pyr(n,t,r);return i||n.length===0?(0,F_.jsx)(on,{elevation:4,sx:myr,children:(0,F_.jsx)(E$e,{text:i?"Loading open PRs\u2026":"No open PRs"})}):(0,F_.jsxs)(on,{elevation:4,sx:myr,children:[(0,F_.jsx)(mP,{autoFocus:!0,value:o.filter,onChange:o.setFilter,onKeyDown:o.onKeyDown,placeholder:"Filter PRs..."}),o.filtered.length===0?(0,F_.jsx)(E$e,{text:"No PRs match"}):(0,F_.jsx)(fyr,{prs:o.filtered,highlight:o.highlight,onHighlight:o.setHighlight,onPick:o.select})]})}var vyr=L(z(),1);function yyr({cwd:e,onPick:t,close:r}){return(0,vyr.jsx)(gyr,{cwd:e,onPick:t,close:r})}var $_=L(z(),1);function xyr({cwd:e,disabled:t,onSelect:r}){let{prs:n,loading:i}=Qge(e),[o,a]=(0,byr.useState)(null);return i||n.length===0?null:(0,$_.jsxs)($_.Fragment,{children:[(0,$_.jsx)(_J,{label:"prs",disabled:t,children:s=>(0,$_.jsx)(yyr,{cwd:e,onPick:a,close:s})}),o&&(0,$_.jsx)(Gpe,{pr:o,onSelect:s=>{r(o,s),a(null)},onCancel:()=>a(null)})]})}var Syr=L(z(),1);function Tyr({onStartRun:e,cwd:t}){let r=cde(t);return!t||r.length===0?null:(0,Syr.jsx)(sde,{runs:r,onSelect:n=>e(n,t)})}var hY=L(z(),1);function Cyr({onCreateAssist:e,onStartRun:t}){let{selectedCwd:r,selectedNode:n}=$n();return(0,hY.jsxs)(Rt,{direction:"row",spacing:.5,sx:{alignItems:"center","&:not(:empty)":{ml:2}},children:[(0,hY.jsx)(xyr,{cwd:r,disabled:!r,onSelect:(i,o)=>e([...o,String(i.number)],r,{...dN(i),node:n})}),(0,hY.jsx)(Tyr,{onStartRun:(i,o)=>t(i,o,void 0,void 0,n),cwd:r})]})}var Hd=L(z(),1),YWn={minHeight:48,pl:1,pr:14};function wyr({socket:e,selection:t}){let{collapsed:r,onToggleCollapsed:n}=vw();return(0,Hd.jsxs)(Ok,{variant:"dense",disableGutters:!0,sx:YWn,children:[r&&(0,Hd.jsx)(xde,{collapsed:r,onToggleCollapsed:n}),(0,Hd.jsx)(oyr,{reconnecting:e.reconnecting}),(0,Hd.jsx)(D0r,{cwd:t.selectedCwd}),(0,Hd.jsx)(_0r,{}),(0,Hd.jsx)(cyr,{repos:t.repos,selected:t.selectedCwd,onSelect:t.setSelectedCwd}),(0,Hd.jsxs)(fe,{sx:{display:"flex",alignItems:"center",ml:1},children:[(0,Hd.jsx)(dde,{cwd:t.selectedCwd}),(0,Hd.jsx)(F0r,{cwd:t.selectedCwd}),(0,Hd.jsx)(B0r,{})]}),(0,Hd.jsx)(Cyr,{onCreateAssist:e.createAssistSession,onStartRun:e.startRun}),(0,Hd.jsx)(eyr,{rateLimits:e.rateLimits,harnessRateLimits:e.harnessRateLimits})]})}var Jge=L(ge(),1);function _yr(){let[e,t]=(0,Jge.useState)(null);return(0,Jge.useEffect)(()=>{let r=!1;return(async()=>{try{let i=await(await fetch("/api/health")).json();!r&&typeof i?.nodeName=="string"&&t(i.nodeName)}catch{}})(),()=>{r=!0}},[]),e}var Eyr=L(z(),1),KWn={lineHeight:"32px",bgcolor:"transparent"};function kyr(){let e=_yr();return e?(0,Eyr.jsx)(e1e,{sx:KWn,children:e}):null}var Ryr=L(z(),1),Ayr=ft((0,Ryr.jsx)("path",{d:"M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m-9 3h2v2h-2zm0 3h2v2h-2zM8 8h2v2H8zm0 3h2v2H8zm-1 2H5v-2h2zm0-3H5V8h2zm9 7H8v-2h8zm0-4h-2v-2h2zm0-3h-2V8h2zm3 3h-2v-2h2zm0-3h-2V8h2z"}),"Keyboard");var Pyr=L(z(),1),Lyr=ft((0,Pyr.jsx)("path",{d:"m12 16.5 4-4h-3v-9h-2v9H8zm9-13h-6v1.99h6v14.03H3V5.49h6V3.5H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-14c0-1.1-.9-2-2-2"}),"SystemUpdateAlt");var Myr=L(z(),1),Iyr=ft((0,Myr.jsx)("path",{d:"M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zM12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6c3.31 0 6 2.69 6 6s-2.69 6-6 6"}),"Brightness4");var Dyr=L(z(),1),Oyr=ft((0,Dyr.jsx)("path",{d:"M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6m0-10c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4"}),"Brightness7");var A$e=L(z(),1);function Nyr({mode:e}){return e==="dark"?(0,A$e.jsx)(Oyr,{fontSize:"small"}):(0,A$e.jsx)(Iyr,{fontSize:"small"})}var Byr=L(z(),1),Fyr=ft((0,Byr.jsx)("path",{d:"m20.38 8.57-1.23 1.85a8 8 0 0 1-.22 7.58H5.07A8 8 0 0 1 15.58 6.85l1.85-1.23A10 10 0 0 0 3.35 19a2 2 0 0 0 1.72 1h13.85a2 2 0 0 0 1.74-1 10 10 0 0 0-.27-10.44zm-9.79 6.84a2 2 0 0 0 2.83 0l5.66-8.49-8.49 5.66a2 2 0 0 0 0 2.83"}),"Speed");var dB=L(z(),1);function $yr(){let e=Zpe();return(0,dB.jsxs)(cn,{onClick:()=>Xet(!e),children:[(0,dB.jsx)(rT,{children:(0,dB.jsx)(Fyr,{fontSize:"small"})}),(0,dB.jsx)(Tp,{children:e?"Hide render HUD":"Show render HUD"})]})}var el=L(z(),1);function zyr({mode:e,restartLabel:t,updateLabel:r,onToggleColorMode:n,onShowShortcuts:i,onRestart:o,onUpdate:a}){return[(0,el.jsxs)(cn,{onClick:n,children:[(0,el.jsx)(rT,{children:(0,el.jsx)(Nyr,{mode:e})}),(0,el.jsx)(Tp,{children:"Toggle dark mode"})]},"color-mode"),(0,el.jsx)($yr,{},"render-hud"),(0,el.jsxs)(cn,{onClick:i,children:[(0,el.jsx)(rT,{children:(0,el.jsx)(Ayr,{fontSize:"small"})}),(0,el.jsx)(Tp,{children:"Keyboard shortcuts"})]},"shortcuts"),(0,el.jsx)(no,{},"restart-divider"),(0,el.jsxs)(cn,{onClick:o,children:[(0,el.jsx)(rT,{children:(0,el.jsx)(Kfe,{fontSize:"small"})}),(0,el.jsx)(Tp,{children:t})]},"restart"),(0,el.jsxs)(cn,{onClick:a,children:[(0,el.jsx)(rT,{children:(0,el.jsx)(Lyr,{fontSize:"small"})}),(0,el.jsx)(Tp,{children:r})]},"update")]}var Hyr=L(ge(),1);var Wyr=L(z(),1);function Uyr({peer:e,onRestart:t,onClose:r}){let[n,i]=(0,Hyr.useState)(!1);return(0,Wyr.jsx)(vo,{title:`Restart ${e}?`,message:`Restarts the sessions daemon and web server on ${e}. Its sessions resume when the daemon is back. This page stays open.`,confirmLabel:"Restart",busy:n,autoFocusConfirm:!0,onConfirm:()=>{i(!0),t(e).finally(r)},onCancel:r})}var Q1=L(z(),1);function P$e({notices:e}){let{back:t,clearBack:r,error:n,clearError:i,progress:o}=e;return(0,Q1.jsxs)(Q1.Fragment,{children:[(0,Q1.jsx)(ol,{open:!!o,anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,Q1.jsx)(ri,{severity:"info",variant:"filled",children:o})}),(0,Q1.jsx)(ol,{open:t!==null,autoHideDuration:6e3,onClose:r,anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,Q1.jsx)(ri,{severity:"success",variant:"filled",onClose:r,children:t})}),(0,Q1.jsx)(Mu,{error:n,onClose:i})]})}function Vyr(e){let t=new Map;for(let r of e){let n=t.get(r.group)??[];n.push(r),t.set(r.group,n)}return[...t].map(([r,n])=>({name:r,shortcuts:n}))}var XWn=Object.keys(iN);function Gyr(){let e=oN();return Vyr(XWn.map(t=>lw(t,e)))}var op=L(z(),1),ZWn={display:"flex",alignItems:"center",justifyContent:"space-between",pr:1},QWn={display:"flex",alignItems:"center",justifyContent:"space-between",gap:2,py:.5};function qyr({onClose:e}){let t=Gyr();return(0,op.jsxs)(Ps,{open:!0,onClose:e,maxWidth:"xs",fullWidth:!0,"aria-labelledby":"shortcuts-dialog-title",children:[(0,op.jsxs)(Il,{id:"shortcuts-dialog-title",sx:ZWn,children:["Keyboard shortcuts",(0,op.jsx)(sr,{size:"small","aria-label":"Close",onClick:e,children:(0,op.jsx)(xa,{fontSize:"small"})})]}),(0,op.jsx)(Ml,{dividers:!0,children:t.map(r=>(0,op.jsxs)(fe,{component:"section",sx:{mb:1.5},children:[(0,op.jsx)($e,{variant:"overline",color:"text.secondary",children:r.name}),r.shortcuts.map(n=>(0,op.jsxs)(fe,{sx:QWn,children:[(0,op.jsx)($e,{variant:"body2",children:n.label}),(0,op.jsx)(Rt,{direction:"row",spacing:.5,children:(0,op.jsx)(Afe,{chords:n.chords})})]},n.label))]},r.name))})]})}var LR=L(z(),1);function jyr({reconnecting:e,onClose:t}){let{pending:r,error:n,clearError:i,restart:o}=uB(lB.target,e);return(0,LR.jsxs)(LR.Fragment,{children:[(0,LR.jsx)(vo,{title:lB.label,message:lB.message,confirmLabel:"Restart",busy:r,autoFocusConfirm:!0,onConfirm:()=>{o()},onCancel:t}),(0,LR.jsx)(Mu,{error:n,onClose:i})]})}var Kyr=L(z(),1);function JWn(e){return e?{title:`Update assist on ${e}?`,message:`This runs 'assist update' on ${e} as a new session, then restarts its web server. This page stays open.`}:{title:"Update assist",message:"This starts a new session running 'assist update'. Its output will appear in the terminal."}}function Yyr({peer:e,onConfirm:t,onClose:r}){return(0,Kyr.jsx)(vo,{...JWn(e),confirmLabel:"Update",onConfirm:()=>{t(),r()},onCancel:r})}var d0=L(ge(),1);async function eVn(e){try{let t=await fetch(`/api/node-doctor?link=${encodeURIComponent(e)}`);return t.ok?(await t.json()).hop:null}catch{return null}}async function Xyr(e,t){let r=await eVn(e);if(!r)return t;let n=r.remediation?` \u2014 ${r.remediation}`:"";return`${t}: ${r.hop} hop failed: ${r.error}${n}`}async function Zyr(e){if(!e)return"web server unreachable";try{return(await e.json()).error??`HTTP ${e.status}`}catch{return`HTTP ${e.status}`}}var N2=L(ge(),1);function Qyr(e){let{nodes:t}=gu(),[r,n]=(0,N2.useState)(null),i=(0,N2.useRef)(!1),o=r?t?.links.find(l=>l.name===r.peer):void 0;(0,N2.useEffect)(()=>{if(!(!r||!o)){if(o.state!=="connected"){i.current=!0;return}i.current&&(n(null),e(r.describe(r.peer,o.peerVersion)))}},[r,o,e]);let a=(0,N2.useCallback)((l,u)=>{i.current=!1,n({peer:l,describe:u})},[]),s=(0,N2.useCallback)(()=>n(null),[]);return{watch:a,stop:s}}var tVn=9e4;function e0e(){let[e,t]=(0,d0.useState)(null),[r,n]=(0,d0.useState)(null),i=(0,d0.useRef)(void 0),o=(0,d0.useCallback)(f=>{clearTimeout(i.current),t(f)},[]),{watch:a,stop:s}=Qyr(o);(0,d0.useEffect)(()=>()=>clearTimeout(i.current),[]);let l=(0,d0.useCallback)(async(f,d)=>{n(await Xyr(f,d))},[]);return{requestThenAwait:(0,d0.useCallback)(async(f,d,h,p)=>{let m;try{m=await h()}catch{}return m?.ok?(a(f,p),clearTimeout(i.current),i.current=setTimeout(()=>{s(),l(f,`${f} did not come back`)},tVn),!0):(await l(f,`${d} failed (${await Zyr(m)})`),!1)},[l,a,s]),back:e,clearBack:()=>t(null),error:r,clearError:()=>n(null)}}var rVn=(e,t)=>t?`${e} is back (v${t})`:`${e} is back`;function Jyr(){let{requestThenAwait:e,...t}=e0e();return{restart:n=>e(n,`Restart ${n}`,()=>cB("both",n),rVn),...t}}var pY=L(ge(),1);var h0=L(ge(),1);function e1r(e){return e.commandType==="assist"&&e.assistArgs?.[0]==="update"&&e.status==="done"}function t0e(e,t,r){let[n,i]=(0,h0.useState)(!1),[o,a]=(0,h0.useState)(!1),s=(0,h0.useRef)(!1),l=(0,h0.useRef)(e);l.current=e;let u=(0,h0.useRef)(new Set),f=(0,h0.useCallback)(()=>{s.current=!1,a(!1),u.current=new Set(l.current.filter(e1r).map(d=>d.id)),i(!0)},[]);return(0,h0.useEffect)(()=>{if(!n||o)return;if(t){s.current=!0;return}if(!s.current)return;e.some(h=>e1r(h)&&h.node===r&&!u.current.has(h.id))&&a(!0)},[n,o,t,e,r]),{arm:f,completed:o}}var t1r=(e,t)=>t?`${e} updated to v${t}`:`${e} updated`;function nVn(e){return fetch(`/api/self-update?node=${encodeURIComponent(e)}`,{method:"POST"})}function r1r(e){let{nodes:t}=gu(),{launchAssist:r}=$l(),{requestThenAwait:n,...i}=e0e(),[o,a]=(0,pY.useState)(null),[s,l]=(0,pY.useState)(),u=m=>t?.links.find(g=>g.name===m)?.state,{arm:f,completed:d}=t0e(e,u(s)!=="connected",s);(0,pY.useEffect)(()=>{!d||!s||(l(void 0),n(s,`Restart ${s}'s web server`,()=>cB("webserver",s),t1r))},[d,s,n]);let h=async m=>{a(`Updating assist on ${m}\u2026`),await n(m,`Update ${m}`,()=>nVn(m),t1r),a(null)};return{update:m=>{if(u(m)!=="connected"){h(m);return}l(m),f(),r(["update"],void 0,{node:m})},progress:o,...i}}var p0=L(z(),1);function n1r({dialog:e,peer:t,sessions:r,reconnecting:n,onClose:i}){let{launchAssist:o,armUpdateReload:a}=$l(),s=Jyr(),l=r1r(r);return(0,p0.jsxs)(p0.Fragment,{children:[e==="shortcuts"&&(0,p0.jsx)(qyr,{onClose:i}),e==="restart"&&t&&(0,p0.jsx)(Uyr,{peer:t,onRestart:s.restart,onClose:i}),e==="restart"&&!t&&(0,p0.jsx)(jyr,{reconnecting:n,onClose:i}),e==="update"&&(0,p0.jsx)(Yyr,{peer:t,onConfirm:()=>{if(t){l.update(t);return}a(),o(["update"])},onClose:i}),(0,p0.jsx)(P$e,{notices:s}),(0,p0.jsx)(P$e,{notices:l})]})}var i1r=L(z(),1),o1r=ft((0,i1r.jsx)("path",{d:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6"}),"Settings");var a1r=L(ge(),1);var mY=L(z(),1);function s1r(){let e=Xi(),t=(0,a1r.useCallback)(()=>e("/config"),[e]),{matches:r,chords:n}=Xn("openConfig");return zo(r,t),(0,mY.jsx)(lr,{describeChild:!0,title:(0,mY.jsx)(Md,{label:"Config",chords:n}),children:(0,mY.jsx)(sr,{size:"small",sx:{color:"inherit"},"aria-label":"Config",onClick:t,children:(0,mY.jsx)(o1r,{fontSize:"small"})})})}var l1r=L(z(),1),c1r=ft((0,l1r.jsx)("path",{d:"M3 18h18v-2H3zm0-5h18v-2H3zm0-7v2h18V6z"}),"Menu");var r0e=L(ge(),1);var gY=L(z(),1);function u1r({open:e,onOpen:t}){let r=(0,r0e.useRef)(null),{matches:n,chords:i}=Xn("openMenu");return zo(n,(0,r0e.useCallback)(()=>{r.current&&t(r.current)},[t])),(0,gY.jsx)(lr,{describeChild:!0,title:(0,gY.jsx)(Md,{label:"Menu",chords:i}),children:(0,gY.jsx)(sr,{ref:r,onClick:o=>t(o.currentTarget),size:"small",sx:{color:"inherit"},"aria-label":"Open menu","aria-haspopup":"true","aria-expanded":e?"true":void 0,children:(0,gY.jsx)(c1r,{fontSize:"small"})})})}var L$e=L(z(),1),f1r=ft([(0,L$e.jsx)("path",{d:"M12 5.99 19.53 19H4.47zM12 2 1 21h22z"},"0"),(0,L$e.jsx)("path",{d:"M13 16h-2v2h2zm0-6h-2v5h2z"},"1")],"WarningAmber");var M$e=L(z(),1);function d1r(){let e=$ge();return!e||e===M_?null:(0,M$e.jsx)(lr,{title:`Daemon is running v${e}, but this page was served by v${M_}. Restart the daemon to match.`,children:(0,M$e.jsx)(f1r,{fontSize:"small",color:"warning","aria-label":"Version mismatch"})})}var h1r=e=>({display:"inline-flex",alignItems:"center",gap:.75,px:1,py:.25,borderRadius:999,fontSize:12,lineHeight:1.5,color:"inherit",opacity:e?1:.55,bgcolor:e?"rgba(255,255,255,0.16)":"transparent",transition:"opacity .2s ease, background-color .2s ease","&:hover, &:focus-visible":{opacity:1,bgcolor:"rgba(255,255,255,0.12)"},"& .ready-dot":{width:8,height:8,borderRadius:"50%",bgcolor:"#ffb74d",boxShadow:"0 0 0 2px rgba(0,0,0,.15)"},"& .ready-count":{fontWeight:500}});var J1=L(z(),1);function p1r(){let{entries:e}=yge();if(!M_)return null;let t=e.filter(xge).length;return(0,J1.jsxs)(J1.Fragment,{children:[(0,J1.jsxs)(Dn,{component:ys,to:"/updates","aria-label":t?`Updates: ${t} node${t>1?"s have":" has"} an update ready`:"Updates",sx:h1r(t>0),children:[t>0&&(0,J1.jsx)("span",{className:"ready-dot","aria-hidden":!0}),(0,J1.jsxs)("span",{children:["v",M_]}),t>0&&(0,J1.jsxs)("span",{className:"ready-count",children:[t," ready"]})]}),(0,J1.jsx)(d1r,{})]})}var hB=L(z(),1);function m1r({open:e,onOpen:t}){return(0,hB.jsxs)(fe,{sx:{position:"fixed",top:8,right:16,zIndex:r=>r.zIndex.drawer+2,display:"flex",alignItems:"center",gap:.5,color:"inherit"},children:[(0,hB.jsx)(p1r,{}),(0,hB.jsx)(s1r,{}),(0,hB.jsx)(u1r,{open:e,onOpen:t})]})}var MR=L(ge(),1);var y1r=L(ge(),1);var g1r=!0,iVn=new Set(["openMenu","cycleCards"]),oVn=Object.keys(iN).filter(e=>!iVn.has(e));function v1r(e,t){let r=oN();(0,y1r.useEffect)(()=>{if(!e)return;let n=i=>{oVn.some(o=>lw(o,r).matches(i))&&t()};return globalThis.addEventListener("keydown",n,g1r),()=>globalThis.removeEventListener("keydown",n,g1r)},[e,t,r])}function b1r(){let[e,t]=(0,MR.useState)(null),[r,n]=(0,MR.useState)(!0),i=!!e,o=(0,MR.useCallback)(()=>t(null),[]),a=(0,MR.useCallback)(s=>{n(!0),t(s)},[]);return v1r(i,(0,MR.useCallback)(()=>{n(!1),t(null)},[])),{anchorEl:e,open:i,close:o,openAt:a,restoreFocus:r}}var yY=L(ge(),1);function x1r(e){zo(Xn("shortcutsSheet").matches,e)}function T1r(){let[e,t]=(0,yY.useState)(null);x1r((0,yY.useCallback)(()=>t("shortcuts"),[]));let r=(0,yY.useCallback)(()=>t(null),[]);return{dialog:e,showDialog:t,closeDialog:r}}function S1r(){let{nodes:e,selected:t}=gu();return e&&t&&t!==e.local?t:void 0}function C1r(e){return{restartLabel:e?`Restart ${e}`:lB.label,updateLabel:e?`Update assist on ${e}`:"Update assist"}}var B2=L(z(),1);function w1r({mode:e,toggle:t,sessions:r,reconnecting:n}){let{anchorEl:i,open:o,close:a,openAt:s,restoreFocus:l}=b1r(),{dialog:u,showDialog:f,closeDialog:d}=T1r(),h=S1r(),p=m=>()=>{a(),f(m)};return(0,B2.jsxs)(B2.Fragment,{children:[(0,B2.jsx)(m1r,{open:o,onOpen:s}),(0,B2.jsxs)(Dl,{anchorEl:i,open:o,onClose:a,disableRestoreFocus:!l,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,B2.jsx)(kyr,{}),zyr({mode:e,...C1r(h),onToggleColorMode:()=>{t(),a()},onShowShortcuts:p("shortcuts"),onRestart:p("restart"),onUpdate:p("update")})]}),(0,B2.jsx)(n1r,{dialog:u,peer:h,sessions:r,reconnecting:n,onClose:d})]})}var E1r=L(ge(),1);var k1r=L(z(),1);function _1r({conflict:e,onConfirm:t,onCancel:r}){let{name:n,cwd:i,port:o,group:a}=e.existing,s=xm(i),l=o?` on port ${o}`:"",u=s?` in ${s}`:"",f=a?`, holding the ${a} server slot`:"";return(0,k1r.jsx)(vo,{title:a?`Replace the ${a} server?`:"Replace running server?",message:`"${n}" is already serving${l}${u}${f}. Replace it \u2014 stop the running server and start this one?`,confirmLabel:"Replace",confirmColor:"error",onConfirm:t,onCancel:r})}var n0e=L(z(),1);function R1r({socket:e,children:t}){let{serverConflict:r,clearServerConflict:n,retrySession:i,stopSession:o,startRun:a,discardSession:s}=e,l=(0,E1r.useMemo)(()=>({onStop:o,onStart:a,onDiscard:s}),[o,a,s]),u=()=>{r&&(r.runName?a(r.runName,r.cwd,!0,r.launchedFrom,r.node):r.sessionId&&i(r.sessionId,!0),n())};return(0,n0e.jsxs)(GDe.Provider,{value:l,children:[t,r&&(0,n0e.jsx)(_1r,{conflict:r,onConfirm:u,onCancel:n})]})}var A1r=new Map;function P1r(e,t){if(!UJ())return;let r=A1r.get(e);if(A1r.set(e,t),!!r)for(let[n,i]of Object.entries(t))Object.is(i,r[n])||W0(`\u0394 ${e}.${n}`)}var o0e=L(ge(),1);function L1r(e,t,r){if(!t)return null;let n=e[t];if(!n)return null;let i=r.find(o=>o.id===n);return!i||Tm(i)!==t?null:n}function ev(e,t,r){if(e)return t.find(n=>n.id===e)??r.find(n=>n.sessionId===e)}function i0e(){let{pathname:e}=ua();return e.startsWith("/backlog")||e.startsWith("/usage")}function M1r({selectedCwd:e,selectedCardId:t,sessions:r,history:n,activeByRepo:i,onSelect:o}){let a=ev(t,r,n),s=a&&Tm(a),l=!!(s&&s===e),u=L1r(i,e,r),f=(0,o0e.useRef)(t),d=i0e();(0,o0e.useEffect)(()=>{let h=f.current!==t&&!!s;f.current=t,!(d||h||l||!u)&&o(u)},[t,s,l,u,o,d])}var l0e=L(ge(),1);function I1r(e,t,r,n){return ev(e,t,r)?.cwd||n}function D1r(e,t,r,n){let i=I1r(e,t,r,n.cwd),o=ev(e,t,r);return{cwd:i,node:o?.cwd?o.node:n.node}}function O1r(e,t){let r=new Set,n=new Set,i=[];for(let o of t){if(o.cwdMissing)continue;let a=iw(o),s=Tm(o);!a||!s||r.has(a)||n.has(s)||(r.add(a),n.add(s),i.push(s))}return e&&!r.has(tN(e,t))&&!n.has(e)&&i.unshift(e),i}var ap="";function aVn(e){let t=new Map([[ap,[]]]);for(let r of e){let n=r.node??ap;t.set(n,[...t.get(n)??[],r])}return t}function N1r(e,t){var n;let r=new Map;for(let[i,o]of aVn(t)){let a=i===ap?e:"";for(let s of O1r(a,o)){let l=tN(s,o),u=r.get(l)??{key:l,origin:l===s?void 0:l,clones:{}};(n=u.clones)[i]??(n[i]=s),r.set(l,u)}}return[...r.values()]}function B1r(e,t){return e.clones[t]??e.clones[ap]??Object.values(e.clones)[0]}function vY(e,t){return e.find(r=>Object.values(r.clones).includes(t))}function pB(e,t){return!e||e===t?ap:e}var I$e=L(ge(),1);function F1r(e,t){let r=(0,I$e.useCallback)((i,o)=>{let a=pB(o,t),s=vY(e,i);return s?s.clones[a]:a===ap?i:void 0},[e,t]),n=(0,I$e.useCallback)(i=>vY(e,i)?.origin,[e]);return{cloneOn:r,originOf:n}}var a0e=L(ge(),1);function $1r(e,t,r,n){let i=(0,a0e.useRef)(e);(0,a0e.useEffect)(()=>{if(i.current===e)return;i.current=e;let o=vY(t,r)?.clones[e];o&&n(o,e)},[e,t,r,n])}var mB=L(ge(),1);function z1r(e,t,r){if(t.node!==void 0)return t.node;let n=new Set(e.flatMap(i=>Object.entries(i.clones).filter(([,o])=>o===t.cwd).map(([o])=>o)));return n.has(r)?r:n.size===0||n.has(ap)?ap:[...n][0]}function H1r(e,t,r,n){let[i,o]=(0,mB.useState)({cwd:e}),a=(0,mB.useCallback)((l,u)=>o({cwd:l,node:u}),[]);(0,mB.useEffect)(()=>{e&&!i.cwd&&o({cwd:e})},[e,i.cwd]);let s=z1r(t,{cwd:i.cwd,node:i.node===void 0?void 0:pB(i.node,n)},r);return{selectedCwd:i.cwd,selectedNode:s||void 0,setSelectedCwd:a}}var U1r=L(ge(),1);function s0e(e,t,r){let n=ev(e,t,r);return n&&Tm(n)}function W1r(e,t,r,n){let i=s0e(e,t,r),o=ev(e,t,r)?.node??ap;(0,U1r.useEffect)(()=>{i&&n(i,o)},[i,o,n])}function V1r(e,t,r,n,i){let o=i.nodes?.local,a=pB(i.selected,o),s=(0,l0e.useMemo)(()=>N1r(e,t),[e,t]),{selectedCwd:l,selectedNode:u,setSelectedCwd:f}=H1r(e,s,a,o);W1r(r,n,t,f),$1r(a,s,l,f);let{cloneOn:d,originOf:h}=F1r(s,o),p=(0,l0e.useMemo)(()=>s.map(y=>B1r(y,a)),[s,a]),{cwd:m,node:g}=D1r(r,n,t,{cwd:l,node:u});return(0,l0e.useMemo)(()=>({repos:p,selectedCwd:l,selectedNode:u,worktreeCwd:m,worktreeNode:g,setSelectedCwd:f,cloneOn:d,originOf:h}),[p,l,u,m,g,f,d,h])}var u0e=L(ge(),1);var z_=L(ge(),1);var G1r=L(ge(),1),c0e="assist:reloaded-after-update";function q1r(e){(0,G1r.useEffect)(()=>{globalThis.sessionStorage?.getItem(c0e)&&(globalThis.sessionStorage.removeItem(c0e),e({message:"Reloaded after updating assist",sessionId:null}))},[e])}function j1r(e,t,r,n){let{arm:i,completed:o}=t0e(e,t),a=(0,z_.useRef)(!1),s=(0,z_.useCallback)(()=>{globalThis.sessionStorage?.setItem(c0e,"1")},[]),{error:l,restart:u}=uB("webserver",t,s);return q1r(r),(0,z_.useEffect)(()=>{l&&n(l)},[l,n]),(0,z_.useEffect)(()=>{!o||a.current||(a.current=!0,u())},[o,u]),{armUpdateReload:(0,z_.useCallback)(()=>{a.current=!1,i()},[i])}}function Y1r(e){let{armUpdateReload:t}=j1r(e.sessions,e.reconnecting,e.setSuccess,e.setError),r=(0,u0e.useMemo)(()=>({launchAssist:e.createAssistSession,launchAgentInStream:e.createSessionInStream,resumeSession:e.resumeSession,armUpdateReload:t}),[e.createAssistSession,e.createSessionInStream,e.resumeSession,t]),n=Xi(),i=(0,u0e.useCallback)(o=>{e.selectSession(o),n("/sessions"),e.clearSuccess()},[n,e.selectSession,e.clearSuccess]);return{launch:r,viewLaunchedSession:i}}var K1r=L(ge(),1);function X1r(e,t,r,n){let i=s0e(e,t,r);(0,K1r.useEffect)(()=>{e&&i&&n({type:"set-active",cwd:i,sessionId:e})},[e,i,n])}var f0e=L(ge(),1);function Z1r(e,t){let r=(0,f0e.useRef)(new Map);(0,f0e.useEffect)(()=>{let n=new Set;for(let{id:i,status:o}of e)n.add(i),r.current.get(i)!==o&&(r.current.set(i,o),console.debug(`[sessions] render session ${i} status=${o}`),t({type:"ui-status",sessionId:i,status:o}));for(let i of r.current.keys())n.has(i)||r.current.delete(i)},[e,t])}var gB=L(ge(),1),Q1r="assist.sessions.node";function sVn(){try{return localStorage.getItem(Q1r)}catch{return null}}function lVn(e){try{localStorage.setItem(Q1r,e)}catch{}}function J1r(e){let[t,r]=(0,gB.useState)(sVn),n=(0,gB.useCallback)(i=>{r(i),lVn(i)},[]);return(0,gB.useMemo)(()=>{let i=e?[e.local,...e.links.map(o=>o.name)]:[];return{nodes:e,names:i,visible:i.length>1,selected:t&&i.includes(t)?t:e?.local,select:n}},[e,t,n])}var tvr=L(ge(),1);function evr(e){let t=e;if(t.type==="create")return{cwd:t.cwd,title:t.prompt?.trim()||(t.design?"New design session":"New session"),node:t.node};if(t.type==="create-assist"){let r=t.title?.trim();return{cwd:t.cwd,title:r||"New session",named:!!r,node:t.node}}return null}function rvr(e,t){return(0,tvr.useCallback)(r=>{let n=e.current;n?.readyState===WebSocket.OPEN&&n.send(JSON.stringify(r));let i=evr(r);i&&t(i)},[e,t])}var tv=L(ge(),1);function d0e(e,t,r,n,i){e({type:"create",prompt:r||void 0,cwd:n,...t,...i?{node:i}:{}})}function nvr(e){return(t,r,n)=>d0e(e,{design:!0},t,r,n)}function ivr(e){return(t,r,n,i)=>d0e(e,{harness:t},r,n,i)}function ovr(e){return(t,r,n)=>d0e(e,{auto:!0},t,r,n)}function avr(e){return(t,r,n)=>e({type:"create-assist",assistArgs:t,cwd:r,...n})}function svr(e){return(t,r,n,i,o)=>e({type:"resume",sessionId:t,cwd:r,name:n,harness:i,node:o})}function lvr(e,t){return(r,n)=>{t.delete(r),e({type:"retry",sessionId:r,replace:n})}}function cvr(e,t){return r=>{t.delete(r),e({type:"restart",sessionId:r})}}function uvr(e,t){return r=>{e({type:"dismiss",sessionId:r}),t.delete(r)}}function fvr(e,t){return r=>{e({type:"discard",sessionId:r}),t.delete(r)}}function dvr(e){return t=>e({type:"stop",sessionId:t})}function hvr(e){return(t,r,n,i,o)=>e({type:"create-run",runName:t,cwd:r,replace:n,launchedFrom:i,node:o})}function pvr(e){return(t,r)=>e({type:"set-autorun",sessionId:t,enabled:r})}function mvr(e){return(t,r)=>e({type:"set-autoadvance",sessionId:t,enabled:r})}function gvr(e){return(t,r)=>e({type:"set-starred",sessionId:t,starred:r})}function yvr(e){return(t,r)=>e({type:"input",sessionId:t,data:r,viewerId:Zj})}function vvr(e){return(t,r,n,i)=>e({type:"resize",sessionId:t,cols:r,rows:n,viewerId:Zj,claim:i})}function bvr(e,t){return(r,n)=>{let i=e.get(r);return i&&n(i),t.set(r,n),()=>t.delete(r)}}function xvr(e){return(t,r,n,i)=>e({type:"pr-decision",sessionId:t,requestId:r,decision:n,...i})}var IR=L(ge(),1);function Tvr(e){return(t,r,n)=>e({type:"create",prompt:r||void 0,cwd:n,joinSessionId:t,auto:!0})}function Svr(e){return{createSession:(0,IR.useMemo)(()=>ovr(e),[e]),createSessionInStream:(0,IR.useMemo)(()=>Tvr(e),[e]),createDesignSession:(0,IR.useMemo)(()=>nvr(e),[e]),createHarnessSession:(0,IR.useMemo)(()=>ivr(e),[e]),createAssistSession:(0,IR.useMemo)(()=>avr(e),[e]),resumeSession:(0,IR.useMemo)(()=>svr(e),[e])}}var bY=L(ge(),1);function Cvr(e,t){let r=(0,bY.useCallback)((a,s)=>{lvr(e,t.current)(a,s)},[e,t]),n=(0,bY.useCallback)(a=>{cvr(e,t.current)(a)},[e,t]),i=(0,bY.useCallback)(a=>{uvr(e,t.current)(a)},[e,t]),o=(0,bY.useCallback)(a=>{fvr(e,t.current)(a)},[e,t]);return{retrySession:r,restartSession:n,dismissSession:i,discardSession:o}}function wvr(e,t,r){let n={...Svr(e),sendInput:(0,tv.useMemo)(()=>yvr(e),[e]),sendResize:(0,tv.useMemo)(()=>vvr(e),[e]),sendPrDecision:(0,tv.useMemo)(()=>xvr(e),[e]),setAutoRun:(0,tv.useMemo)(()=>pvr(e),[e]),setAutoAdvance:(0,tv.useMemo)(()=>mvr(e),[e]),setStarred:(0,tv.useMemo)(()=>gvr(e),[e]),stopSession:(0,tv.useMemo)(()=>dvr(e),[e]),startRun:(0,tv.useMemo)(()=>hvr(e),[e])},i=(0,tv.useMemo)(()=>bvr(t.current,r.current),[t,r]);return{...n,...Cvr(e,t),onOutput:i}}var xY=L(ge(),1);function _vr(e,t,r){let n=(0,xY.useCallback)(s=>{r(s),e({type:"fetch-transcript",sessionId:s})},[e,r]),i=(0,xY.useCallback)(s=>e({type:"fetch-user-messages",sessionId:s}),[e]),o=(0,xY.useCallback)(()=>{r(null)},[r]),a=(0,xY.useCallback)(s=>{r(null),t(s)},[t,r]);return{viewTranscript:n,fetchUserMessages:i,clearTranscript:o,selectSession:a}}var W_=L(ge(),1);function kvr(e,t){let r=new Set(t.map(i=>i.id)),n=null;for(let i of Object.values(e))r.has(i)&&(n=i);return n}var Rvr=L(ge(),1);function Evr(e,t,r=null){return t!==null?e.some(n=>n.id===t)?t:e[0]?.id??null:r&&e.some(n=>n.id===r)?r:e[0]?.id??null}function Avr(e,t,r){let n=i0e();(0,Rvr.useEffect)(()=>{if(n){t(null);return}t(i=>Evr(e,i,r))},[e,t,r,n])}var h0e=L(ge(),1);function Pvr(){let[e,t]=(0,h0e.useState)({}),[r,n]=(0,h0e.useState)(null),[i,o]=(0,h0e.useState)(null);return{activeByRepo:e,setActiveByRepo:t,daemonVersion:r,setDaemonVersion:n,nodes:i,setNodes:o}}var m0=L(ge(),1);function Lvr(e,t){if(!t.some(n=>e.has(n)))return e;let r=new Set(e);for(let n of t)r.delete(n);return r}function Mvr(e,t){let r=[];for(let n of t){let i=e.get(n.id);i!==void 0&&i!==n.startedAt&&r.push(n.id)}return r}function Ivr(e,t){return t.filter(r=>r.commandType==="run"&&e.get(r.id)!==r.startedAt).map(r=>r.id)}var cVn=1500;function Dvr(){let[e,t]=(0,m0.useState)(new Set),r=(0,m0.useRef)(new Map),n=(0,m0.useRef)(new Map),i=(0,m0.useCallback)(s=>{t(l=>l.has(s)?l:new Set(l).add(s))},[]),o=(0,m0.useCallback)(s=>{let l=n.current;for(let u of s)clearTimeout(l.get(u)),l.set(u,setTimeout(()=>{l.delete(u),i(u)},cVn))},[i]);(0,m0.useEffect)(()=>{let s=n.current;return()=>{for(let l of s.values())clearTimeout(l)}},[]);let a=(0,m0.useCallback)(s=>{let l=Mvr(r.current,s),u=Ivr(r.current,s);r.current=new Map(s.map(f=>[f.id,f.startedAt])),l.length&&t(f=>Lvr(f,l)),o(u)},[o]);return{initialized:e,markInitialized:i,syncSessions:a}}var H_=L(ge(),1);function Ovr(){let[e,t]=(0,H_.useState)(null),[r,n]=(0,H_.useState)(null),[i,o]=(0,H_.useState)(null),a=(0,H_.useCallback)(()=>t(null),[]),s=(0,H_.useCallback)(()=>n(null),[]),l=(0,H_.useCallback)(()=>o(null),[]);return{error:e,setError:t,clearError:a,success:r,setSuccess:n,clearSuccess:s,serverConflict:i,setServerConflict:o,clearServerConflict:l}}var rv=L(ge(),1);function Nvr(e,t){return[...e,{...t,status:"launching"}]}function p0e(e){return e.find(t=>t.status==="launching")}function Bvr(e){let t=p0e(e);return t?e.filter(r=>r.id!==t.id):e}function Fvr(e,t){let r=p0e(e);return r?D$e(e,r.id,t):e}function D$e(e,t,r){return e.map(n=>n.id===t&&n.status==="launching"?{...n,status:"error",error:r}:n)}function $vr(e,t){return e.filter(r=>r.id!==t)}var zvr=L(ge(),1);var uVn=6e4,fVn="Launch timed out \u2014 the session did not start.";function Hvr(e,t){(0,zvr.useEffect)(()=>{let r=e.filter(i=>i.status==="launching");if(r.length===0)return;let n=r.map(i=>setTimeout(()=>t(o=>D$e(o,i.id,fVn)),Math.max(0,uVn-(Date.now()-i.startedAt))));return()=>n.forEach(clearTimeout)},[e,t])}function Uvr(){let[e,t]=(0,rv.useState)([]),r=(0,rv.useRef)([]),n=(0,rv.useCallback)(l=>{r.current=l(r.current),t(r.current)},[]),i=(0,rv.useCallback)(l=>{n(u=>Nvr(u,{id:crypto.randomUUID(),startedAt:Date.now(),...l}))},[n]),o=(0,rv.useCallback)(()=>{let l=p0e(r.current);return n(Bvr),l?.named?l.title:void 0},[n]),a=(0,rv.useCallback)(l=>n(u=>Fvr(u,l)),[n]),s=(0,rv.useCallback)(l=>n(u=>$vr(u,l)),[n]);return Hvr(e,n),{pendingLaunches:e,addPendingLaunch:i,resolvePendingLaunch:o,failPendingLaunch:a,dismissPendingLaunch:s}}var TY=L(ge(),1);function Wvr(){let[e,t]=(0,TY.useState)(null),[r,n]=(0,TY.useState)({}),i=(0,TY.useCallback)((o,a)=>{o!=="claude"&&n(s=>({...s,[o]:a}))},[]);return{rateLimits:e,setRateLimits:t,harnessRateLimits:r,setHarnessRateLimits:i}}var Vvr=L(ge(),1);function Gvr(e,t){return(0,Vvr.useCallback)(r=>{e(r),t(r)},[e,t])}var m0e=L(ge(),1);function qvr(){let[e,t]=(0,m0e.useState)(null),[r,n]=(0,m0e.useState)(null),[i,o]=(0,m0e.useState)(null);return{transcript:e,setTranscript:t,viewingTranscriptSessionId:r,setViewingTranscriptSessionId:n,userMessages:i,setUserMessages:o}}var U_=L(ge(),1);function jvr(e,t){let r=e.sessionId;t.buffers.current?.delete(r),t.handlers.current?.get(r)?.("\x1Bc")}function Yvr(e,t){let r=e.sessionId,n=t.resolvePendingLaunch();t.setViewingTranscriptSessionId(null),t.setActiveId(r),e.isNew&&t.setSuccess({message:n?`Started ${n}`:"New session started",sessionId:r})}function Kvr(e,t){let r=e.message;t.setError(r),t.failPendingLaunch(r)}function Xvr(e,t){let r=e.rateLimits,n=e.harness;!n||n==="claude"?t.setRateLimits(r):t.setHarnessRateLimits?.(n,r)}function Zvr(e,t){t.setNodes({local:e.local,links:e.links??[]})}function Qvr(e,t){t.setSuccess({message:e.message,sessionId:null})}function Jvr(e,t){let r=e.sessionId,n=t.buffers.current?.get(r)??"";t.buffers.current?.set(r,n+e.data),t.handlers.current?.get(r)?.(e.data),t.markInitialized(r)}function ebr(e,t){t.setServerConflict({existing:e.existing,runName:e.runName,cwd:e.cwd,sessionId:e.sessionId,launchedFrom:e.launchedFrom,node:e.node})}function tbr(e,t){let r=e.sessions;t.setSessions(r),e.cwd&&t.setCurrentCwd(e.cwd),t.setActiveByRepo(e.active??{})}var dVn={sessions:tbr,created:Yvr,history:(e,t)=>t.setHistory(e.sessions),transcript:(e,t)=>t.setTranscript({sessionId:e.sessionId,messages:e.messages}),"user-messages":(e,t)=>t.setUserMessages({sessionId:e.sessionId,messages:e.messages}),hello:(e,t)=>t.setDaemonVersion(e.version),nodes:Zvr,error:Kvr,notice:Qvr,"run-conflict":ebr,limits:Xvr,clear:jvr,output:Jvr};function rbr(e,t){dVn[e.type]?.(e,t)}function nbr(e,t={}){let r=location.protocol==="https:"?"wss:":"ws:",n=new WebSocket(`${r}//${location.host}/ws`);return n.onopen=()=>{t.onOpen?.(),n.send(JSON.stringify({type:"hello"})),n.send(JSON.stringify({type:"history"}))},n.onmessage=i=>{rbr(JSON.parse(i.data),e)},n.onclose=()=>t.onClose?.(),n}function ibr(e,t,r,n){let i=!1,o,a=0,s=!1,l=()=>{i||t(nbr(e,{onOpen:()=>{s&&r(),s=!1,n(!1),a=0},onClose:()=>{if(i)return;s=!0,n(!0);let u=Math.min(300*2**a,2e3);a+=1,o=setTimeout(l,u)}}))};return l(),()=>{i=!0,o&&clearTimeout(o)}}function obr(e){let t=(0,U_.useRef)(null),[r,n]=(0,U_.useState)(!1),{handleSessions:i,markInitialized:o,buffers:a,handlers:s}=e;(0,U_.useEffect)(()=>{let u=()=>{a.current?.clear();let d=s.current;if(d)for(let h of d.values())h("\x1Bc")},f=ibr({...e,setSessions:i},d=>{t.current=d},u,n);return()=>{f(),t.current?.close()}},[i,o,a,s]);let l=(0,U_.useCallback)(()=>{let u=t.current;u?.readyState===WebSocket.OPEN&&u.send(JSON.stringify({type:"history"}))},[]);return{wsRef:t,requestHistory:l,reconnecting:r}}function abr(){let[e,t]=(0,W_.useState)([]),[r,n]=(0,W_.useState)([]),[i,o]=(0,W_.useState)(null),a=Pvr(),s=qvr(),[l,u]=(0,W_.useState)(""),f=Ovr(),d=Uvr(),h=Wvr(),{initialized:p,markInitialized:m,syncSessions:g}=Dvr(),y=(0,W_.useRef)(new Map),v=(0,W_.useRef)(new Map),b=Gvr(g,t),{wsRef:x,requestHistory:S,reconnecting:C}=obr({handleSessions:b,setHistory:n,setActiveId:o,...a,...s,setCurrentCwd:u,...f,...d,...h,markInitialized:m,buffers:y,handlers:v});return Avr(e,o,kvr(a.activeByRepo,e)),{sessions:e,history:r,activeId:i,setActiveId:o,...a,...s,currentCwd:l,...f,...d,...h,initialized:p,wsRef:x,buffers:y,handlers:v,requestHistory:S,reconnecting:C}}function sbr(){let e=abr(),{wsRef:t,buffers:r,handlers:n,addPendingLaunch:i,activeId:o,sessions:a}=e,s=J1r(e.nodes),l=rvr(t,i),u=wvr(l,r,n);X1r(o,a,e.history,l),Z1r(a,l);let f=_vr(l,e.setActiveId,e.setViewingTranscriptSessionId);return{...e,...u,...f,nodeSelection:s}}var yB=L(ge(),1);var lbr="assist:sidebar-collapsed";function cbr(){let[e,t]=(0,yB.useState)(()=>Bd(lbr).length>0),r=(0,yB.useCallback)(()=>{t(n=>{let i=!n;return Fd(lbr,i?[!0]:[]),i})},[]);return(0,yB.useMemo)(()=>({collapsed:e,onToggleCollapsed:r}),[e,r])}var ubr=L(ge(),1);function fbr(){(0,ubr.useEffect)(()=>{let e=!1;return(async()=>{try{let t=await fetch("/api/hotkeys");if(!t.ok)return;let r=await t.json();e||T3.set(r)}catch{}})(),()=>{e=!0}},[])}var g0e=L(ge(),1);function dbr(){let[e,t]=(0,g0e.useState)(!0);return(0,g0e.useEffect)(()=>{let r=!1;return(async()=>{try{let i=await(await fetch("/api/session-layout")).json();r||t(!!i?.topBar)}catch{t(!0)}})(),()=>{r=!0}},[]),e}function hbr(){let e=sbr(),t=Epe(e),r=V1r(e.currentCwd,e.history,t,e.sessions,e.nodeSelection);M1r({selectedCwd:r.selectedCwd,selectedCardId:t,sessions:e.sessions,history:e.history,activeByRepo:e.activeByRepo,onSelect:e.selectSession});let{launch:n,viewLaunchedSession:i}=Y1r(e),o=dbr();fbr();let a=cbr();return P1r("shell",{...e,selection:r,launch:n,topBar:o,sidebarCollapse:a}),{socket:e,selection:r,launch:n,viewLaunchedSession:i,topBar:o,sidebarCollapse:a}}var g0=L(z(),1),hVn={zIndex:e=>e.zIndex.drawer+1},pVn={minHeight:48};function pbr({mode:e,toggle:t}){let r=hbr(),{socket:n,selection:i,viewLaunchedSession:o}=r;return(0,g0.jsx)(T0r,{shell:r,children:(0,g0.jsxs)(g$e.Provider,{value:n.daemonVersion,children:[(0,g0.jsx)(w1r,{mode:e,toggle:t,sessions:n.sessions,reconnecting:n.reconnecting}),(0,g0.jsx)(Fye,{position:"fixed",elevation:1,sx:hVn,children:(0,g0.jsx)(wyr,{socket:n,selection:i})}),(0,g0.jsx)(Ok,{variant:"dense",sx:pVn}),(0,g0.jsx)(R1r,{socket:n,children:(0,g0.jsx)(lgr,{socket:n})}),(0,g0.jsx)(v0r,{socket:n,onViewLaunchedSession:o})]})})}var mbr=L(ge(),1);function gbr(){let[e,t]=(0,mbr.useState)(()=>{try{return localStorage.getItem("theme-mode")??"dark"}catch{return"dark"}});return{mode:e,toggle:()=>t(n=>{let i=n==="dark"?"light":"dark";try{localStorage.setItem("theme-mode",i)}catch{}return i})}}var V_=L(z(),1),mVn={MuiButtonBase:{styleOverrides:{root:{cursor:"pointer","&.Mui-disabled":{cursor:"default"}}}},MuiLink:{styleOverrides:{root:{cursor:"pointer"}}}};function gVn(){let{mode:e,toggle:t}=gbr(),r=(0,vbr.useMemo)(()=>C0({palette:{mode:e,...e==="dark"&&{background:{default:"#1e1e1e",paper:"#252526"}}},components:mVn}),[e]);return(0,V_.jsxs)(AK,{theme:r,children:[(0,V_.jsx)(gX,{}),(0,V_.jsx)(pbr,{mode:e,toggle:t})]})}var yVn=o2e([{path:"*",element:(0,V_.jsx)(gVn,{})}]);function vVn(){return(0,V_.jsx)(Zxe,{router:yVn})}var ybr=document.getElementById("app");ybr&&(0,bbr.createRoot)(ybr).render((0,V_.jsx)(vVn,{}));})();
3979
3979
  /*! Bundled license information:
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import { Command } from "commander";
6
6
  // package.json
7
7
  var package_default = {
8
8
  name: "@staff0rd/assist",
9
- version: "0.775.5",
9
+ version: "0.776.0",
10
10
  type: "module",
11
11
  main: "dist/index.js",
12
12
  bin: {
@@ -13009,7 +13009,7 @@ var nodesConfigHelp = [
13009
13009
  {
13010
13010
  key: "sessions.linkVersionCheck",
13011
13011
  setter: "assist config set sessions.linkVersionCheck block -g",
13012
- note: "reaction to a protocol mismatch with a linked node (app versions may differ): block (default) heals an older peer via its /api/self-update and latches if the gap remains, warn proceeds, off skips the check"
13012
+ note: "reaction when a linked node's protocol range doesn't overlap this node's (app versions may differ; never restarts a peer): block (default) holds the link version-blocked until the older node is updated, warn proceeds, off skips the check"
13013
13013
  }
13014
13014
  ];
13015
13015
 
@@ -13592,11 +13592,13 @@ function harnessCapabilities(_req, res) {
13592
13592
  // src/commands/sessions/daemon/buildHello.ts
13593
13593
  var ASSIST_VERSION = package_default.version;
13594
13594
  var PROTOCOL_VERSION = 2;
13595
+ var MIN_PROTOCOL_VERSION = 1;
13595
13596
  function buildHello(extra = {}) {
13596
13597
  return {
13597
13598
  type: "hello",
13598
13599
  version: ASSIST_VERSION,
13599
13600
  protocol: PROTOCOL_VERSION,
13601
+ minProtocol: MIN_PROTOCOL_VERSION,
13600
13602
  nodeName: resolveNodeName(),
13601
13603
  ...extra
13602
13604
  };
@@ -13604,15 +13606,26 @@ function buildHello(extra = {}) {
13604
13606
  function isHello(msg) {
13605
13607
  return msg.type === "hello" && typeof msg.version === "string" && (msg.protocol === void 0 || typeof msg.protocol === "number");
13606
13608
  }
13607
- function helloCompatible(msg) {
13608
- if (typeof msg.protocol === "number") return !protocolMismatched(msg);
13609
- return msg.version === ASSIST_VERSION;
13609
+ function peerProtocolRange(msg) {
13610
+ if (typeof msg.protocol !== "number") return void 0;
13611
+ const min = typeof msg.minProtocol === "number" ? Math.min(msg.minProtocol, msg.protocol) : msg.protocol;
13612
+ return { min, max: msg.protocol };
13610
13613
  }
13611
- function helloMismatchKind(msg) {
13612
- return protocolMismatched(msg) ? "protocol" : "version";
13614
+ function negotiateProtocol(msg) {
13615
+ const peer = peerProtocolRange(msg);
13616
+ if (!peer) return void 0;
13617
+ const common = Math.min(peer.max, PROTOCOL_VERSION);
13618
+ return common >= Math.max(peer.min, MIN_PROTOCOL_VERSION) ? common : void 0;
13613
13619
  }
13614
- function protocolMismatched(msg) {
13615
- return typeof msg.protocol === "number" && msg.protocol !== PROTOCOL_VERSION;
13620
+ function formatRange(range) {
13621
+ if (!range) return "legacy (no protocol)";
13622
+ return range.min === range.max ? `protocol ${range.max}` : `protocols ${range.min}\u2013${range.max}`;
13623
+ }
13624
+ function describeProtocolGap(node, msg) {
13625
+ const peer = peerProtocolRange(msg);
13626
+ const local = { min: MIN_PROTOCOL_VERSION, max: PROTOCOL_VERSION };
13627
+ const behind = peer && peer.min > local.max ? "this node" : node;
13628
+ return `no common protocol: ${node} ${msg.version} speaks ${formatRange(peer)}, this node ${ASSIST_VERSION} speaks ${formatRange(local)}; update ${behind} and restart it when convenient \u2014 the link reconnects once the ranges overlap`;
13616
13629
  }
13617
13630
 
13618
13631
  // src/commands/sessions/daemon/requestDaemonReply.ts
@@ -16194,19 +16207,17 @@ async function helloHop(spec, probes) {
16194
16207
  `malformed hello: ${JSON.stringify(msg)}`,
16195
16208
  `run \`assist update\` on ${spec.name}`
16196
16209
  );
16197
- const detail = `hello ${msg.version} (protocol ${msg.protocol ?? "legacy"})`;
16198
- if (helloCompatible(msg)) return passed("ws", detail);
16199
- const mismatch = `${helloMismatchKind(msg)} mismatch: peer ${msg.version} (protocol ${msg.protocol ?? "legacy"}), this node ${ASSIST_VERSION} (protocol ${PROTOCOL_VERSION})`;
16210
+ const protocol = negotiateProtocol(msg);
16211
+ if (protocol !== void 0)
16212
+ return passed("ws", `hello ${msg.version} (protocol ${protocol})`);
16213
+ const gap = describeProtocolGap(spec.name, msg);
16200
16214
  const mode = linkVersionCheck();
16201
16215
  if (mode !== "block")
16202
- return passed(
16203
- "ws",
16204
- `${mismatch}; allowed by sessions.linkVersionCheck=${mode}`
16205
- );
16216
+ return passed("ws", `${gap}; allowed by sessions.linkVersionCheck=${mode}`);
16206
16217
  return failed(
16207
16218
  "ws",
16208
- mismatch,
16209
- `this node heals an older peer via its /api/self-update on connect; if the heal latched, run \`assist update\` on the older node, then \`assist daemon restart\` here`
16219
+ gap,
16220
+ `run \`assist update\` on the older node, then restart its daemon (\`assist daemon restart\`) when convenient`
16210
16221
  );
16211
16222
  }
16212
16223
 
@@ -16228,7 +16239,11 @@ function linkStateHop(spec, probes) {
16228
16239
  if (status2.state === "connected") return passed("link", "connected");
16229
16240
  const error = status2.error ?? status2.state;
16230
16241
  if (status2.state === "version-blocked")
16231
- return failed("link", error, `version mismatch \u2014 heal latched. ${error}`);
16242
+ return failed(
16243
+ "link",
16244
+ error,
16245
+ "no common protocol \u2014 update the older node and restart its daemon when convenient; the link retries every minute"
16246
+ );
16232
16247
  return failed(
16233
16248
  "link",
16234
16249
  error,
@@ -46060,18 +46075,6 @@ function guardLinkCallback(label2, callback) {
46060
46075
  };
46061
46076
  }
46062
46077
 
46063
- // src/commands/sessions/daemon/links/selfUpdatePeer.ts
46064
- var SELF_UPDATE_TIMEOUT_MS = 10 * 6e4;
46065
- async function selfUpdatePeer(url) {
46066
- const response = await fetch(new URL("/api/self-update", url), {
46067
- method: "POST",
46068
- signal: AbortSignal.timeout(SELF_UPDATE_TIMEOUT_MS)
46069
- });
46070
- if (response.ok) return;
46071
- const body = await response.json().catch(() => ({}));
46072
- throw new Error(body.error ?? `self-update responded ${response.status}`);
46073
- }
46074
-
46075
46078
  // src/commands/sessions/daemon/links/linkDeps.ts
46076
46079
  function linkDeps(options2, callbacks) {
46077
46080
  return {
@@ -46089,7 +46092,6 @@ function linkDeps(options2, callbacks) {
46089
46092
  callbacks.onHistoryChanged
46090
46093
  ),
46091
46094
  transport: options2.transport ?? connectLinkWebSocket,
46092
- heal: options2.heal ?? selfUpdatePeer,
46093
46095
  reconnectMs: options2.reconnectMs ?? 3e3,
46094
46096
  blockedRetryMs: options2.blockedRetryMs ?? 6e4,
46095
46097
  createTimeoutMs: options2.createTimeoutMs ?? 15e3
@@ -46142,6 +46144,7 @@ function createRelayState(node, { viewers, onSessionsChanged, onHistoryChanged }
46142
46144
  scrollback: /* @__PURE__ */ new Map(),
46143
46145
  pendingCreators: [],
46144
46146
  historyWaiters: [],
46147
+ unrecognisedTypes: /* @__PURE__ */ new Set(),
46145
46148
  viewers,
46146
46149
  onSessionsChanged,
46147
46150
  onHistoryChanged
@@ -46200,10 +46203,6 @@ function createLinkContext(spec, deps2) {
46200
46203
  state: "disconnected",
46201
46204
  disposed: false,
46202
46205
  connect: () => {
46203
- },
46204
- onMismatch: () => {
46205
- },
46206
- onCompatible: () => {
46207
46206
  }
46208
46207
  };
46209
46208
  }
@@ -46217,7 +46216,8 @@ function describeLink(ctx) {
46217
46216
  error: ctx.blockedMessage ?? ctx.lastError?.message,
46218
46217
  errorAt: ctx.lastError?.at,
46219
46218
  peerVersion: ctx.peer?.version,
46220
- peerProtocol: ctx.peer?.protocol
46219
+ peerProtocol: ctx.peer?.protocol,
46220
+ protocol: ctx.protocol
46221
46221
  };
46222
46222
  }
46223
46223
  function unavailableReason(ctx) {
@@ -46298,135 +46298,19 @@ function forwardToLink(ctx, client, data) {
46298
46298
  daemonLog(`link ${node} ws: forwarded ${data.type} for ${data.sessionId}`);
46299
46299
  }
46300
46300
 
46301
- // src/commands/sessions/daemon/links/linkHealRefusal.ts
46302
- import semver2 from "semver";
46303
- function peerIsNewer(peerVersion) {
46304
- return semver2.valid(peerVersion) !== null && semver2.valid(ASSIST_VERSION) !== null && semver2.gt(peerVersion, ASSIST_VERSION);
46305
- }
46306
- function linkHealRefusal(node, peerVersion, healAttempted) {
46307
- if (peerIsNewer(peerVersion))
46308
- return `This node (${ASSIST_VERSION}) is older than ${node} (${peerVersion}); update this node and restart its daemon.`;
46309
- if (healAttempted)
46310
- return `${node} is still on ${peerVersion} after auto-update (this node is ${ASSIST_VERSION}); update ${node} manually; this node reconnects once it reports a compatible version.`;
46311
- return void 0;
46312
- }
46313
-
46314
- // src/commands/sessions/daemon/links/scheduleReconnect.ts
46315
- function armReconnect(ctx, delay2) {
46316
- clearTimeout(ctx.reconnectTimer);
46317
- ctx.reconnectTimer = setTimeout(ctx.connect, delay2);
46318
- ctx.reconnectTimer.unref?.();
46319
- }
46320
- function scheduleReconnect2(ctx) {
46321
- if (ctx.disposed) return;
46322
- if (ctx.blockedMessage) return armReconnect(ctx, ctx.deps.blockedRetryMs);
46323
- const delay2 = ctx.breaker.tripped() ? ctx.breaker.remainingMs() : ctx.deps.reconnectMs;
46324
- armReconnect(ctx, delay2);
46325
- }
46326
- function reconnectNow(ctx) {
46327
- ctx.breaker.clear();
46328
- armReconnect(ctx, ctx.deps.reconnectMs);
46329
- }
46330
-
46331
- // src/commands/sessions/daemon/links/teardownLink.ts
46332
- function teardownLink(ctx) {
46333
- const hadSessions = ctx.relay.sessions.length > 0;
46334
- ctx.socket = null;
46335
- ctx.greeted = false;
46336
- resetRelayState(ctx.relay, `${ctx.spec.name} connection closed`);
46337
- if (!ctx.blockedMessage) setLinkState(ctx, "disconnected");
46338
- if (hadSessions) ctx.deps.onSessionsChanged();
46339
- }
46340
- function disconnectLink(ctx) {
46341
- const socket = ctx.socket;
46342
- teardownLink(ctx);
46343
- socket?.close();
46344
- }
46345
- function failLink(ctx, message3) {
46346
- daemonLog(`link ${ctx.spec.name} ws: ${message3}`);
46347
- ctx.lastError = { message: message3, at: (/* @__PURE__ */ new Date()).toISOString() };
46348
- ctx.breaker.fail(message3);
46349
- setLinkState(ctx, ctx.blockedMessage ? "version-blocked" : "disconnected");
46350
- scheduleReconnect2(ctx);
46351
- }
46352
- function blockLink(ctx, message3) {
46353
- const repeat = ctx.blockedMessage === message3;
46354
- ctx.blockedMessage = message3;
46355
- disconnectLink(ctx);
46356
- setLinkState(ctx, "version-blocked");
46357
- if (!repeat) broadcastToViewers(ctx.relay, { type: "error", message: message3 });
46358
- scheduleReconnect2(ctx);
46359
- }
46360
-
46361
- // src/commands/sessions/daemon/links/runLinkHeal.ts
46362
- async function runLinkHeal(ctx, peerVersion) {
46363
- const node = ctx.spec.name;
46364
- daemonLog(
46365
- `link ${node} heal: peer ${peerVersion} is older than ${ASSIST_VERSION}; requesting self-update`
46366
- );
46367
- failPendingCreators(
46368
- ctx.relay,
46369
- `${node} is out of date; updating it now \u2014 retry once the update finishes.`
46370
- );
46371
- disconnectLink(ctx);
46372
- try {
46373
- await ctx.deps.heal(ctx.spec.url);
46374
- daemonLog(`link ${node} heal: self-update done, reconnecting`);
46375
- } catch (error) {
46376
- const message3 = error instanceof Error ? error.message : String(error);
46377
- daemonLog(`link ${node} heal: self-update failed: ${message3}`);
46378
- broadcastToViewers(ctx.relay, {
46379
- type: "error",
46380
- message: `${node} auto-update failed: ${message3}`
46381
- });
46382
- }
46383
- reconnectNow(ctx);
46384
- }
46385
-
46386
- // src/commands/sessions/daemon/links/LinkHealer.ts
46387
- var LinkHealer = class {
46388
- constructor(ctx) {
46389
- this.ctx = ctx;
46390
- }
46391
- healAttempted = false;
46392
- healing = false;
46393
- awaitingConfirmation = false;
46394
- async onMismatch(peerVersion) {
46395
- if (this.healing) return;
46396
- const node = this.ctx.spec.name;
46397
- const refusal = linkHealRefusal(node, peerVersion, this.healAttempted);
46398
- if (refusal) {
46399
- this.awaitingConfirmation = false;
46400
- if (this.ctx.blockedMessage !== refusal)
46401
- daemonLog(`link ${node} heal: latched, retrying slowly: ${refusal}`);
46402
- return blockLink(this.ctx, refusal);
46403
- }
46404
- this.healing = true;
46405
- this.healAttempted = true;
46406
- this.awaitingConfirmation = true;
46407
- try {
46408
- await runLinkHeal(this.ctx, peerVersion);
46409
- } finally {
46410
- this.healing = false;
46411
- }
46412
- }
46413
- reset() {
46414
- this.healAttempted = false;
46415
- this.awaitingConfirmation = false;
46416
- }
46417
- onCompatible() {
46418
- if (!this.awaitingConfirmation) return;
46419
- this.awaitingConfirmation = false;
46420
- const node = this.ctx.spec.name;
46421
- daemonLog(`link ${node} heal: post-heal handshake compatible`);
46422
- broadcastToViewers(this.ctx.relay, {
46423
- type: "notice",
46424
- message: `${node} is up to date.`
46425
- });
46426
- }
46427
- };
46428
-
46429
46301
  // src/commands/sessions/daemon/links/acceptPeerHello.ts
46302
+ var helloFields = /* @__PURE__ */ new Set([
46303
+ "type",
46304
+ "version",
46305
+ "protocol",
46306
+ "minProtocol",
46307
+ "nodeName",
46308
+ "peer"
46309
+ ]);
46310
+ function unrecognisedHelloFields(msg) {
46311
+ const extra = Object.keys(msg).filter((key) => !helloFields.has(key));
46312
+ return extra.length ? `; ignoring unrecognised fields ${extra.join(",")}` : "";
46313
+ }
46430
46314
  function acceptPeerHello(linkName, msg) {
46431
46315
  if (!isHello(msg)) return { kind: "reject", reason: "malformed hello" };
46432
46316
  const peer = { version: msg.version, protocol: msg.protocol };
@@ -46436,20 +46320,30 @@ function acceptPeerHello(linkName, msg) {
46436
46320
  reason: `peer reports nodeName ${msg.nodeName}, link expects ${linkName}`,
46437
46321
  peer
46438
46322
  };
46439
- if (helloCompatible(msg)) {
46440
- daemonLog(`link ${linkName} ws: hello ok (${msg.version})`);
46441
- return { kind: "accept", peer };
46323
+ const protocol = negotiateProtocol(msg);
46324
+ if (protocol !== void 0) {
46325
+ daemonLog(
46326
+ `link ${linkName} ws: hello ok (${msg.version}, protocol ${protocol})${unrecognisedHelloFields(msg)}`
46327
+ );
46328
+ return { kind: "accept", peer, protocol };
46442
46329
  }
46443
46330
  const mode = linkVersionCheck();
46444
- const detail = `${helloMismatchKind(msg)} mismatch: peer protocol ${msg.protocol ?? "legacy"} version ${msg.version} (this node protocol ${PROTOCOL_VERSION} version ${ASSIST_VERSION})`;
46331
+ const reason4 = describeProtocolGap(linkName, msg);
46445
46332
  if (mode !== "block") {
46446
46333
  daemonLog(
46447
- `link ${linkName} ws: ${detail}; proceeding (sessions.linkVersionCheck=${mode})`
46334
+ `link ${linkName} ws: ${reason4}; proceeding (sessions.linkVersionCheck=${mode})`
46448
46335
  );
46449
46336
  return { kind: "accept", peer };
46450
46337
  }
46451
- daemonLog(`link ${linkName} ws: ${detail}`);
46452
- return { kind: "heal", peer };
46338
+ return { kind: "block", reason: reason4, peer };
46339
+ }
46340
+
46341
+ // src/commands/sessions/daemon/logUnrecognisedType.ts
46342
+ function logUnrecognisedType(seen, prefix2, type) {
46343
+ const key = String(type);
46344
+ if (seen.has(key)) return;
46345
+ seen.add(key);
46346
+ daemonLog(`${prefix2}ignoring unrecognised message type ${key} (logged once)`);
46453
46347
  }
46454
46348
 
46455
46349
  // src/commands/sessions/daemon/links/relayLinkSessions.ts
@@ -46532,8 +46426,65 @@ var relays = {
46532
46426
  if (typeof msg.line === "string") relayDaemonLog(state.node, msg.line);
46533
46427
  }
46534
46428
  };
46429
+ var notRelayed = /* @__PURE__ */ new Set(["limits", "nodes"]);
46535
46430
  function relayLinkMessage(state, msg) {
46536
- relays[msg.type]?.(state, msg);
46431
+ const type = msg.type;
46432
+ if (Object.hasOwn(relays, type)) relays[type](state, msg);
46433
+ else if (!notRelayed.has(type))
46434
+ logUnrecognisedType(
46435
+ state.unrecognisedTypes,
46436
+ `link ${state.node} ws: `,
46437
+ msg.type
46438
+ );
46439
+ }
46440
+
46441
+ // src/commands/sessions/daemon/links/scheduleReconnect.ts
46442
+ function armReconnect(ctx, delay2) {
46443
+ clearTimeout(ctx.reconnectTimer);
46444
+ ctx.reconnectTimer = setTimeout(ctx.connect, delay2);
46445
+ ctx.reconnectTimer.unref?.();
46446
+ }
46447
+ function scheduleReconnect2(ctx) {
46448
+ if (ctx.disposed) return;
46449
+ if (ctx.blockedMessage) return armReconnect(ctx, ctx.deps.blockedRetryMs);
46450
+ const delay2 = ctx.breaker.tripped() ? ctx.breaker.remainingMs() : ctx.deps.reconnectMs;
46451
+ armReconnect(ctx, delay2);
46452
+ }
46453
+ function reconnectNow(ctx) {
46454
+ ctx.breaker.clear();
46455
+ armReconnect(ctx, ctx.deps.reconnectMs);
46456
+ }
46457
+
46458
+ // src/commands/sessions/daemon/links/teardownLink.ts
46459
+ function teardownLink(ctx) {
46460
+ const hadSessions = ctx.relay.sessions.length > 0;
46461
+ ctx.socket = null;
46462
+ ctx.greeted = false;
46463
+ ctx.protocol = void 0;
46464
+ resetRelayState(ctx.relay, `${ctx.spec.name} connection closed`);
46465
+ if (!ctx.blockedMessage) setLinkState(ctx, "disconnected");
46466
+ if (hadSessions) ctx.deps.onSessionsChanged();
46467
+ }
46468
+ function disconnectLink(ctx) {
46469
+ const socket = ctx.socket;
46470
+ teardownLink(ctx);
46471
+ socket?.close();
46472
+ }
46473
+ function failLink(ctx, message3) {
46474
+ daemonLog(`link ${ctx.spec.name} ws: ${message3}`);
46475
+ ctx.lastError = { message: message3, at: (/* @__PURE__ */ new Date()).toISOString() };
46476
+ ctx.breaker.fail(message3);
46477
+ setLinkState(ctx, ctx.blockedMessage ? "version-blocked" : "disconnected");
46478
+ scheduleReconnect2(ctx);
46479
+ }
46480
+ function blockLink(ctx, message3) {
46481
+ const repeat = ctx.blockedMessage === message3;
46482
+ if (!repeat) daemonLog(`link ${ctx.spec.name} ws: ${message3}`);
46483
+ ctx.blockedMessage = message3;
46484
+ disconnectLink(ctx);
46485
+ setLinkState(ctx, "version-blocked");
46486
+ if (!repeat) broadcastToViewers(ctx.relay, { type: "error", message: message3 });
46487
+ scheduleReconnect2(ctx);
46537
46488
  }
46538
46489
 
46539
46490
  // src/commands/sessions/daemon/links/onLinkLine.ts
@@ -46547,18 +46498,18 @@ function onHello(ctx, msg) {
46547
46498
  disconnectLink(ctx);
46548
46499
  return failLink(ctx, verdict.reason);
46549
46500
  }
46550
- if (verdict.kind === "heal") return ctx.onMismatch(verdict.peer.version);
46501
+ if (verdict.kind === "block") return blockLink(ctx, verdict.reason);
46551
46502
  if (ctx.blockedMessage)
46552
46503
  daemonLog(
46553
- `link ${ctx.spec.name} heal: peer now reports ${verdict.peer.version}; latch cleared`
46504
+ `link ${ctx.spec.name} ws: peer now reports ${verdict.peer.version}; protocol block cleared`
46554
46505
  );
46555
46506
  ctx.blockedMessage = void 0;
46507
+ ctx.protocol = verdict.protocol;
46556
46508
  ctx.greeted = true;
46557
46509
  ctx.breaker.clear();
46558
46510
  ctx.lastError = void 0;
46559
46511
  setLinkState(ctx, "connected");
46560
46512
  ctx.deps.onHistoryChanged();
46561
- ctx.onCompatible();
46562
46513
  }
46563
46514
  function onLinkLine(ctx, line) {
46564
46515
  let msg;
@@ -46631,21 +46582,15 @@ var NodeLink = class {
46631
46582
  constructor(spec, deps2) {
46632
46583
  this.spec = spec;
46633
46584
  const ctx = createLinkContext(spec, deps2);
46634
- const healer = new LinkHealer(ctx);
46635
46585
  ctx.connect = () => void openLink(ctx);
46636
- ctx.onMismatch = (version2) => void healer.onMismatch(version2);
46637
- ctx.onCompatible = () => healer.onCompatible();
46638
46586
  this.ctx = ctx;
46639
- this.healer = healer;
46640
46587
  }
46641
46588
  ctx;
46642
- healer;
46643
46589
  start = () => this.ctx.connect();
46644
46590
  unlatch() {
46645
46591
  if (!this.ctx.blockedMessage) return;
46646
- daemonLog(`link ${this.spec.name} heal: latch cleared by reload`);
46592
+ daemonLog(`link ${this.spec.name} ws: protocol block cleared by reload`);
46647
46593
  this.ctx.blockedMessage = void 0;
46648
- this.healer.reset();
46649
46594
  setLinkState(this.ctx, "disconnected");
46650
46595
  reconnectNow(this.ctx);
46651
46596
  }
@@ -47760,12 +47705,15 @@ var messageHandlers = {
47760
47705
  };
47761
47706
 
47762
47707
  // src/commands/sessions/daemon/dispatchMessage.ts
47708
+ var unrecognisedTypes = /* @__PURE__ */ new Set();
47763
47709
  function dispatchMessage(client, manager, data) {
47764
47710
  if (typeof data.traceId === "string")
47765
47711
  daemonLog(
47766
47712
  `linked ${data.type} received (cwd=${data.cwd ?? "default"}) trace=${data.traceId}`
47767
47713
  );
47768
- messageHandlers[data.type]?.(client, manager, data);
47714
+ const handler = Object.hasOwn(messageHandlers, data.type) ? messageHandlers[data.type] : void 0;
47715
+ if (handler) handler(client, manager, data);
47716
+ else logUnrecognisedType(unrecognisedTypes, "", data.type);
47769
47717
  }
47770
47718
 
47771
47719
  // src/commands/sessions/daemon/handleConnection.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@staff0rd/assist",
3
- "version": "0.775.5",
3
+ "version": "0.776.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {