craig-cli 0.2.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.
Files changed (3) hide show
  1. package/README.md +70 -0
  2. package/dist/cli.js +103 -0
  3. package/package.json +21 -0
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # Craig
2
+
3
+ Craig is a local terminal control plane for repo-backed agent work.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g craig-cli
9
+ ```
10
+
11
+ Craig requires Node 22 or newer.
12
+
13
+ ## Setup
14
+
15
+ Run Craig from a git workspace:
16
+
17
+ ```bash
18
+ cd path/to/your/repo
19
+ craig
20
+ ```
21
+
22
+ Craig stores local workspace state under `.craig/` in the workspace where you run it. That state includes task records, worktrees, runtime UI state, logs, and review metadata.
23
+
24
+ ## External Tools
25
+
26
+ Craig does not bundle agent CLIs. Install and authenticate the agent CLIs you want to use separately, such as Codex, Cursor, or Claude.
27
+
28
+ Craig also expects:
29
+
30
+ - `git` for workspace, branch, and worktree operations
31
+ - `gh` authenticated with GitHub for PR, check, and merge flows
32
+
33
+ ## Commands
34
+
35
+ ```bash
36
+ craig
37
+ craig repo add <path>
38
+ craig repo list
39
+ craig repo remove <repo-id>
40
+ craig workspace list
41
+ craig task new --repo <repo-id> "<task>"
42
+ craig task list
43
+ craig task show <task-id>
44
+ craig task logs <task-id>
45
+ craig task diff <task-id>
46
+ craig task check <task-id>
47
+ craig task pr <task-id> [--watch]
48
+ craig task merge <task-id> [--preserve-worktree]
49
+ ```
50
+
51
+ ## Configuration
52
+
53
+ Craig reads optional workspace-local config from `.craig/config.json`.
54
+
55
+ ```json
56
+ {
57
+ "runners": {
58
+ "codex": { "enabled": true },
59
+ "cursor": { "enabled": true },
60
+ "claude": { "enabled": false }
61
+ },
62
+ "checks": {
63
+ "commands": ["pnpm test", "pnpm typecheck", "pnpm lint"]
64
+ },
65
+ "github": {
66
+ "mergeMethod": "squash",
67
+ "watchIntervalSeconds": 10
68
+ }
69
+ }
70
+ ```
package/dist/cli.js ADDED
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env node
2
+ var oo=Object.create;var hs=Object.defineProperty;var ao=Object.getOwnPropertyDescriptor;var co=Object.getOwnPropertyNames;var lo=Object.getPrototypeOf,uo=Object.prototype.hasOwnProperty;var ho=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var fo=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of co(t))!uo.call(e,a)&&a!==r&&hs(e,a,{get:()=>t[a],enumerable:!(i=ao(t,a))||i.enumerable});return e};var po=(e,t,r)=>(r=e!=null?oo(lo(e)):{},fo(t||!e||!e.__esModule?hs(r,"default",{value:e,enumerable:!0}):r,e));var dn=ho(ln=>{(()=>{"use strict";var e={5639:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CircularList=void 0;let p=h(7150),S=h(802);class o extends p.Disposable{constructor(c){super(),this._maxLength=c,this.onDeleteEmitter=this._register(new S.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new S.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new S.Emitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(c){if(this._maxLength===c)return;let g=new Array(c);for(let _=0;_<Math.min(c,this.length);_++)g[_]=this._array[this._getCyclicIndex(_)];this._array=g,this._maxLength=c,this._startIndex=0}get length(){return this._length}set length(c){if(c>this._length)for(let g=this._length;g<c;g++)this._array[g]=void 0;this._length=c}get(c){return this._array[this._getCyclicIndex(c)]}set(c,g){this._array[this._getCyclicIndex(c)]=g}push(c){this._array[this._getCyclicIndex(this._length)]=c,this._length===this._maxLength?(this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1)):this._length++}recycle(){if(this._length!==this._maxLength)throw new Error("Can only recycle when the buffer is full");return this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1),this._array[this._getCyclicIndex(this._length-1)]}get isFull(){return this._length===this._maxLength}pop(){return this._array[this._getCyclicIndex(this._length---1)]}splice(c,g,..._){if(g){for(let s=c;s<this._length-g;s++)this._array[this._getCyclicIndex(s)]=this._array[this._getCyclicIndex(s+g)];this._length-=g,this.onDeleteEmitter.fire({index:c,amount:g})}for(let s=this._length-1;s>=c;s--)this._array[this._getCyclicIndex(s+_.length)]=this._array[this._getCyclicIndex(s)];for(let s=0;s<_.length;s++)this._array[this._getCyclicIndex(c+s)]=_[s];if(_.length&&this.onInsertEmitter.fire({index:c,amount:_.length}),this._length+_.length>this._maxLength){let s=this._length+_.length-this._maxLength;this._startIndex+=s,this._length=this._maxLength,this.onTrimEmitter.fire(s)}else this._length+=_.length}trimStart(c){c>this._length&&(c=this._length),this._startIndex+=c,this._length-=c,this.onTrimEmitter.fire(c)}shiftElements(c,g,_){if(!(g<=0)){if(c<0||c>=this._length)throw new Error("start argument out of range");if(c+_<0)throw new Error("Cannot shift elements in list beyond index 0");if(_>0){for(let f=g-1;f>=0;f--)this.set(c+f+_,this.get(c+f));let s=c+g+_-this._length;if(s>0)for(this._length+=s;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let s=0;s<g;s++)this.set(c+s+_,this.get(c+s))}}_getCyclicIndex(c){return(this._startIndex+c)%this._maxLength}}n.CircularList=o},7453:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.clone=function h(p,S=5){if(typeof p!="object")return p;let o=Array.isArray(p)?[]:{};for(let w in p)o[w]=S<=1?p[w]:p[w]&&h(p[w],S-1);return o}},5777:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CoreTerminal=void 0;let p=h(6501),S=h(6025),o=h(7276),w=h(9640),c=h(56),g=h(4071),_=h(7792),s=h(6415),f=h(5746),d=h(5882),l=h(2486),u=h(3562),m=h(8811),v=h(802),I=h(7150),E=!1;class N extends I.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new v.Emitter),this._onScroll.event((A=>{this._onScrollApi?.fire(A.position)}))),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(A){for(let D in A)this.optionsService.options[D]=A[D]}constructor(A){super(),this._windowsWrappingHeuristics=this._register(new I.MutableDisposable),this._onBinary=this._register(new v.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new v.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new v.Emitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this._register(new v.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new v.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new v.Emitter),this._instantiationService=new S.InstantiationService,this.optionsService=this._register(new c.OptionsService(A)),this._instantiationService.setService(p.IOptionsService,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(w.BufferService)),this._instantiationService.setService(p.IBufferService,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(o.LogService)),this._instantiationService.setService(p.ILogService,this._logService),this.coreService=this._register(this._instantiationService.createInstance(g.CoreService)),this._instantiationService.setService(p.ICoreService,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(_.CoreMouseService)),this._instantiationService.setService(p.ICoreMouseService,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(s.UnicodeService)),this._instantiationService.setService(p.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(f.CharsetService),this._instantiationService.setService(p.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(m.OscLinkService),this._instantiationService.setService(p.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new l.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register(v.Event.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register(v.Event.forward(this._bufferService.onResize,this._onResize)),this._register(v.Event.forward(this.coreService.onData,this._onData)),this._register(v.Event.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom((()=>this.scrollToBottom(!0)))),this._register(this.coreService.onUserInput((()=>this._writeBuffer.handleUserInput()))),this._register(this.optionsService.onMultipleOptionChange(["windowsMode","windowsPty"],(()=>this._handleWindowsPtyOptionChange()))),this._register(this._bufferService.onScroll((()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this._writeBuffer=this._register(new u.WriteBuffer(((D,C)=>this._inputHandler.parse(D,C)))),this._register(v.Event.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(A,D){this._writeBuffer.write(A,D)}writeSync(A,D){this._logService.logLevel<=p.LogLevelEnum.WARN&&!E&&(this._logService.warn("writeSync is unreliable and will be removed soon."),E=!0),this._writeBuffer.writeSync(A,D)}input(A,D=!0){this.coreService.triggerDataEvent(A,D)}resize(A,D){isNaN(A)||isNaN(D)||(A=Math.max(A,w.MINIMUM_COLS),D=Math.max(D,w.MINIMUM_ROWS),this._bufferService.resize(A,D))}scroll(A,D=!1){this._bufferService.scroll(A,D)}scrollLines(A,D){this._bufferService.scrollLines(A,D)}scrollPages(A){this.scrollLines(A*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(A){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(A){let D=A-this._bufferService.buffer.ydisp;D!==0&&this.scrollLines(D)}registerEscHandler(A,D){return this._inputHandler.registerEscHandler(A,D)}registerDcsHandler(A,D){return this._inputHandler.registerDcsHandler(A,D)}registerCsiHandler(A,D){return this._inputHandler.registerCsiHandler(A,D)}registerOscHandler(A,D){return this._inputHandler.registerOscHandler(A,D)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let A=!1,D=this.optionsService.rawOptions.windowsPty;D&&D.buildNumber!==void 0&&D.buildNumber!==void 0?A=D.backend==="conpty"&&D.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(A=!0),A?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let A=[];A.push(this.onLineFeed(d.updateWindowsModeWrappedState.bind(null,this._bufferService))),A.push(this.registerCsiHandler({final:"H"},(()=>((0,d.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,I.toDisposable)((()=>{for(let D of A)D.dispose()}))}}}n.CoreTerminal=N},2486:function(T,n,h){var p=this&&this.__decorate||function(q,b,P,k){var R,F=arguments.length,B=F<3?b:k===null?k=Object.getOwnPropertyDescriptor(b,P):k;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")B=Reflect.decorate(q,b,P,k);else for(var U=q.length-1;U>=0;U--)(R=q[U])&&(B=(F<3?R(B):F>3?R(b,P,B):R(b,P))||B);return F>3&&B&&Object.defineProperty(b,P,B),B},S=this&&this.__param||function(q,b){return function(P,k){b(P,k,q)}};Object.defineProperty(n,"__esModule",{value:!0}),n.InputHandler=n.WindowsOptionsReportType=void 0,n.isValidColorIndex=G;let o=h(3534),w=h(6760),c=h(6717),g=h(7150),_=h(726),s=h(6107),f=h(8938),d=h(3055),l=h(5451),u=h(6501),m=h(6415),v=h(1346),I=h(9823),E=h(8693),N=h(802),O={"(":0,")":1,"*":2,"+":3,"-":1,".":2},A=131072;function D(q,b){if(q>24)return b.setWinLines||!1;switch(q){case 1:return!!b.restoreWin;case 2:return!!b.minimizeWin;case 3:return!!b.setWinPosition;case 4:return!!b.setWinSizePixels;case 5:return!!b.raiseWin;case 6:return!!b.lowerWin;case 7:return!!b.refreshWin;case 8:return!!b.setWinSizeChars;case 9:return!!b.maximizeWin;case 10:return!!b.fullscreenWin;case 11:return!!b.getWinState;case 13:return!!b.getWinPosition;case 14:return!!b.getWinSizePixels;case 15:return!!b.getScreenSizePixels;case 16:return!!b.getCellSizePixels;case 18:return!!b.getWinSizeChars;case 19:return!!b.getScreenSizeChars;case 20:return!!b.getIconTitle;case 21:return!!b.getWinTitle;case 22:return!!b.pushTitle;case 23:return!!b.popTitle;case 24:return!!b.setWinLines}return!1}var C;(function(q){q[q.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",q[q.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(C||(n.WindowsOptionsReportType=C={}));let j=0;class z extends g.Disposable{getAttrData(){return this._curAttrData}constructor(b,P,k,R,F,B,U,K,ee=new c.EscapeSequenceParser){super(),this._bufferService=b,this._charsetService=P,this._coreService=k,this._logService=R,this._optionsService=F,this._oscLinkService=B,this._coreMouseService=U,this._unicodeService=K,this._parser=ee,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new _.StringToUtf32,this._utf8Decoder=new _.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=s.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=s.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new N.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new N.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new N.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new N.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new N.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new N.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new N.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new N.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new N.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new N.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new N.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new N.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new N.Emitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new W(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate((x=>this._activeBuffer=x.activeBuffer))),this._parser.setCsiHandlerFallback(((x,Q)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(x),params:Q.toArray()})})),this._parser.setEscHandlerFallback((x=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(x)})})),this._parser.setExecuteHandlerFallback((x=>{this._logService.debug("Unknown EXECUTE code: ",{code:x})})),this._parser.setOscHandlerFallback(((x,Q,Y)=>{this._logService.debug("Unknown OSC code: ",{identifier:x,action:Q,data:Y})})),this._parser.setDcsHandlerFallback(((x,Q,Y)=>{Q==="HOOK"&&(Y=Y.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(x),action:Q,payload:Y})})),this._parser.setPrintHandler(((x,Q,Y)=>this.print(x,Q,Y))),this._parser.registerCsiHandler({final:"@"},(x=>this.insertChars(x))),this._parser.registerCsiHandler({intermediates:" ",final:"@"},(x=>this.scrollLeft(x))),this._parser.registerCsiHandler({final:"A"},(x=>this.cursorUp(x))),this._parser.registerCsiHandler({intermediates:" ",final:"A"},(x=>this.scrollRight(x))),this._parser.registerCsiHandler({final:"B"},(x=>this.cursorDown(x))),this._parser.registerCsiHandler({final:"C"},(x=>this.cursorForward(x))),this._parser.registerCsiHandler({final:"D"},(x=>this.cursorBackward(x))),this._parser.registerCsiHandler({final:"E"},(x=>this.cursorNextLine(x))),this._parser.registerCsiHandler({final:"F"},(x=>this.cursorPrecedingLine(x))),this._parser.registerCsiHandler({final:"G"},(x=>this.cursorCharAbsolute(x))),this._parser.registerCsiHandler({final:"H"},(x=>this.cursorPosition(x))),this._parser.registerCsiHandler({final:"I"},(x=>this.cursorForwardTab(x))),this._parser.registerCsiHandler({final:"J"},(x=>this.eraseInDisplay(x,!1))),this._parser.registerCsiHandler({prefix:"?",final:"J"},(x=>this.eraseInDisplay(x,!0))),this._parser.registerCsiHandler({final:"K"},(x=>this.eraseInLine(x,!1))),this._parser.registerCsiHandler({prefix:"?",final:"K"},(x=>this.eraseInLine(x,!0))),this._parser.registerCsiHandler({final:"L"},(x=>this.insertLines(x))),this._parser.registerCsiHandler({final:"M"},(x=>this.deleteLines(x))),this._parser.registerCsiHandler({final:"P"},(x=>this.deleteChars(x))),this._parser.registerCsiHandler({final:"S"},(x=>this.scrollUp(x))),this._parser.registerCsiHandler({final:"T"},(x=>this.scrollDown(x))),this._parser.registerCsiHandler({final:"X"},(x=>this.eraseChars(x))),this._parser.registerCsiHandler({final:"Z"},(x=>this.cursorBackwardTab(x))),this._parser.registerCsiHandler({final:"`"},(x=>this.charPosAbsolute(x))),this._parser.registerCsiHandler({final:"a"},(x=>this.hPositionRelative(x))),this._parser.registerCsiHandler({final:"b"},(x=>this.repeatPrecedingCharacter(x))),this._parser.registerCsiHandler({final:"c"},(x=>this.sendDeviceAttributesPrimary(x))),this._parser.registerCsiHandler({prefix:">",final:"c"},(x=>this.sendDeviceAttributesSecondary(x))),this._parser.registerCsiHandler({final:"d"},(x=>this.linePosAbsolute(x))),this._parser.registerCsiHandler({final:"e"},(x=>this.vPositionRelative(x))),this._parser.registerCsiHandler({final:"f"},(x=>this.hVPosition(x))),this._parser.registerCsiHandler({final:"g"},(x=>this.tabClear(x))),this._parser.registerCsiHandler({final:"h"},(x=>this.setMode(x))),this._parser.registerCsiHandler({prefix:"?",final:"h"},(x=>this.setModePrivate(x))),this._parser.registerCsiHandler({final:"l"},(x=>this.resetMode(x))),this._parser.registerCsiHandler({prefix:"?",final:"l"},(x=>this.resetModePrivate(x))),this._parser.registerCsiHandler({final:"m"},(x=>this.charAttributes(x))),this._parser.registerCsiHandler({final:"n"},(x=>this.deviceStatus(x))),this._parser.registerCsiHandler({prefix:"?",final:"n"},(x=>this.deviceStatusPrivate(x))),this._parser.registerCsiHandler({intermediates:"!",final:"p"},(x=>this.softReset(x))),this._parser.registerCsiHandler({intermediates:" ",final:"q"},(x=>this.setCursorStyle(x))),this._parser.registerCsiHandler({final:"r"},(x=>this.setScrollRegion(x))),this._parser.registerCsiHandler({final:"s"},(x=>this.saveCursor(x))),this._parser.registerCsiHandler({final:"t"},(x=>this.windowOptions(x))),this._parser.registerCsiHandler({final:"u"},(x=>this.restoreCursor(x))),this._parser.registerCsiHandler({intermediates:"'",final:"}"},(x=>this.insertColumns(x))),this._parser.registerCsiHandler({intermediates:"'",final:"~"},(x=>this.deleteColumns(x))),this._parser.registerCsiHandler({intermediates:'"',final:"q"},(x=>this.selectProtected(x))),this._parser.registerCsiHandler({intermediates:"$",final:"p"},(x=>this.requestMode(x,!0))),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},(x=>this.requestMode(x,!1))),this._parser.setExecuteHandler(o.C0.BEL,(()=>this.bell())),this._parser.setExecuteHandler(o.C0.LF,(()=>this.lineFeed())),this._parser.setExecuteHandler(o.C0.VT,(()=>this.lineFeed())),this._parser.setExecuteHandler(o.C0.FF,(()=>this.lineFeed())),this._parser.setExecuteHandler(o.C0.CR,(()=>this.carriageReturn())),this._parser.setExecuteHandler(o.C0.BS,(()=>this.backspace())),this._parser.setExecuteHandler(o.C0.HT,(()=>this.tab())),this._parser.setExecuteHandler(o.C0.SO,(()=>this.shiftOut())),this._parser.setExecuteHandler(o.C0.SI,(()=>this.shiftIn())),this._parser.setExecuteHandler(o.C1.IND,(()=>this.index())),this._parser.setExecuteHandler(o.C1.NEL,(()=>this.nextLine())),this._parser.setExecuteHandler(o.C1.HTS,(()=>this.tabSet())),this._parser.registerOscHandler(0,new v.OscHandler((x=>(this.setTitle(x),this.setIconName(x),!0)))),this._parser.registerOscHandler(1,new v.OscHandler((x=>this.setIconName(x)))),this._parser.registerOscHandler(2,new v.OscHandler((x=>this.setTitle(x)))),this._parser.registerOscHandler(4,new v.OscHandler((x=>this.setOrReportIndexedColor(x)))),this._parser.registerOscHandler(8,new v.OscHandler((x=>this.setHyperlink(x)))),this._parser.registerOscHandler(10,new v.OscHandler((x=>this.setOrReportFgColor(x)))),this._parser.registerOscHandler(11,new v.OscHandler((x=>this.setOrReportBgColor(x)))),this._parser.registerOscHandler(12,new v.OscHandler((x=>this.setOrReportCursorColor(x)))),this._parser.registerOscHandler(104,new v.OscHandler((x=>this.restoreIndexedColor(x)))),this._parser.registerOscHandler(110,new v.OscHandler((x=>this.restoreFgColor(x)))),this._parser.registerOscHandler(111,new v.OscHandler((x=>this.restoreBgColor(x)))),this._parser.registerOscHandler(112,new v.OscHandler((x=>this.restoreCursorColor(x)))),this._parser.registerEscHandler({final:"7"},(()=>this.saveCursor())),this._parser.registerEscHandler({final:"8"},(()=>this.restoreCursor())),this._parser.registerEscHandler({final:"D"},(()=>this.index())),this._parser.registerEscHandler({final:"E"},(()=>this.nextLine())),this._parser.registerEscHandler({final:"H"},(()=>this.tabSet())),this._parser.registerEscHandler({final:"M"},(()=>this.reverseIndex())),this._parser.registerEscHandler({final:"="},(()=>this.keypadApplicationMode())),this._parser.registerEscHandler({final:">"},(()=>this.keypadNumericMode())),this._parser.registerEscHandler({final:"c"},(()=>this.fullReset())),this._parser.registerEscHandler({final:"n"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:"o"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:"|"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:"}"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:"~"},(()=>this.setgLevel(1))),this._parser.registerEscHandler({intermediates:"%",final:"@"},(()=>this.selectDefaultCharset())),this._parser.registerEscHandler({intermediates:"%",final:"G"},(()=>this.selectDefaultCharset()));for(let x in w.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:x},(()=>this.selectCharset("("+x))),this._parser.registerEscHandler({intermediates:")",final:x},(()=>this.selectCharset(")"+x))),this._parser.registerEscHandler({intermediates:"*",final:x},(()=>this.selectCharset("*"+x))),this._parser.registerEscHandler({intermediates:"+",final:x},(()=>this.selectCharset("+"+x))),this._parser.registerEscHandler({intermediates:"-",final:x},(()=>this.selectCharset("-"+x))),this._parser.registerEscHandler({intermediates:".",final:x},(()=>this.selectCharset("."+x))),this._parser.registerEscHandler({intermediates:"/",final:x},(()=>this.selectCharset("/"+x)));this._parser.registerEscHandler({intermediates:"#",final:"8"},(()=>this.screenAlignmentPattern())),this._parser.setErrorHandler((x=>(this._logService.error("Parsing error: ",x),x))),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new I.DcsHandler(((x,Q)=>this.requestStatusString(x,Q))))}_preserveStack(b,P,k,R){this._parseStack.paused=!0,this._parseStack.cursorStartX=b,this._parseStack.cursorStartY=P,this._parseStack.decodedLength=k,this._parseStack.position=R}_logSlowResolvingAsync(b){this._logService.logLevel<=u.LogLevelEnum.WARN&&Promise.race([b,new Promise(((P,k)=>setTimeout((()=>k("#SLOW_TIMEOUT")),5e3)))]).catch((P=>{if(P!=="#SLOW_TIMEOUT")throw P;console.warn("async parser handler taking longer than 5000 ms")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(b,P){let k,R=this._activeBuffer.x,F=this._activeBuffer.y,B=0,U=this._parseStack.paused;if(U){if(k=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,P))return this._logSlowResolvingAsync(k),k;R=this._parseStack.cursorStartX,F=this._parseStack.cursorStartY,this._parseStack.paused=!1,b.length>A&&(B=this._parseStack.position+A)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+(typeof b=="string"?` "${b}"`:` "${Array.prototype.map.call(b,(x=>String.fromCharCode(x))).join("")}"`)),this._logService.logLevel===u.LogLevelEnum.TRACE&&this._logService.trace("parsing data (codes)",typeof b=="string"?b.split("").map((x=>x.charCodeAt(0))):b),this._parseBuffer.length<b.length&&this._parseBuffer.length<A&&(this._parseBuffer=new Uint32Array(Math.min(b.length,A))),U||this._dirtyRowTracker.clearRange(),b.length>A)for(let x=B;x<b.length;x+=A){let Q=x+A<b.length?x+A:b.length,Y=typeof b=="string"?this._stringDecoder.decode(b.substring(x,Q),this._parseBuffer):this._utf8Decoder.decode(b.subarray(x,Q),this._parseBuffer);if(k=this._parser.parse(this._parseBuffer,Y))return this._preserveStack(R,F,Y,x),this._logSlowResolvingAsync(k),k}else if(!U){let x=typeof b=="string"?this._stringDecoder.decode(b,this._parseBuffer):this._utf8Decoder.decode(b,this._parseBuffer);if(k=this._parser.parse(this._parseBuffer,x))return this._preserveStack(R,F,x,0),this._logSlowResolvingAsync(k),k}this._activeBuffer.x===R&&this._activeBuffer.y===F||this._onCursorMove.fire();let K=this._dirtyRowTracker.end+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp),ee=this._dirtyRowTracker.start+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp);ee<this._bufferService.rows&&this._onRequestRefreshRows.fire({start:Math.min(ee,this._bufferService.rows-1),end:Math.min(K,this._bufferService.rows-1)})}print(b,P,k){let R,F,B=this._charsetService.charset,U=this._optionsService.rawOptions.screenReaderMode,K=this._bufferService.cols,ee=this._coreService.decPrivateModes.wraparound,x=this._coreService.modes.insertMode,Q=this._curAttrData,Y=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._activeBuffer.x&&k-P>0&&Y.getWidth(this._activeBuffer.x-1)===2&&Y.setCellFromCodepoint(this._activeBuffer.x-1,0,1,Q);let Z=this._parser.precedingJoinState;for(let he=P;he<k;++he){if(R=b[he],R<127&&B){let Ae=B[String.fromCharCode(R)];Ae&&(R=Ae.charCodeAt(0))}let fe=this._unicodeService.charProperties(R,Z);F=m.UnicodeService.extractWidth(fe);let He=m.UnicodeService.extractShouldJoin(fe),Te=He?m.UnicodeService.extractWidth(Z):0;if(Z=fe,U&&this._onA11yChar.fire((0,_.stringFromCodePoint)(R)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+F-Te>K){if(ee){let Ae=Y,Ve=this._activeBuffer.x-Te;for(this._activeBuffer.x=Te,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),Y=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),Te>0&&Y instanceof s.BufferLine&&Y.copyCellsFrom(Ae,Ve,0,Te,!1);Ve<K;)Ae.setCellFromCodepoint(Ve++,0,1,Q)}else if(this._activeBuffer.x=K-1,F===2)continue}if(He&&this._activeBuffer.x){let Ae=Y.getWidth(this._activeBuffer.x-1)?1:2;Y.addCodepointToCell(this._activeBuffer.x-Ae,R,F);for(let Ve=F-Te;--Ve>=0;)Y.setCellFromCodepoint(this._activeBuffer.x++,0,0,Q)}else if(x&&(Y.insertCells(this._activeBuffer.x,F-Te,this._activeBuffer.getNullCell(Q)),Y.getWidth(K-1)===2&&Y.setCellFromCodepoint(K-1,f.NULL_CELL_CODE,f.NULL_CELL_WIDTH,Q)),Y.setCellFromCodepoint(this._activeBuffer.x++,R,F,Q),F>0)for(;--F;)Y.setCellFromCodepoint(this._activeBuffer.x++,0,0,Q)}this._parser.precedingJoinState=Z,this._activeBuffer.x<K&&k-P>0&&Y.getWidth(this._activeBuffer.x)===0&&!Y.hasContent(this._activeBuffer.x)&&Y.setCellFromCodepoint(this._activeBuffer.x,0,1,Q),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(b,P){return b.final!=="t"||b.prefix||b.intermediates?this._parser.registerCsiHandler(b,P):this._parser.registerCsiHandler(b,(k=>!D(k.params[0],this._optionsService.rawOptions.windowOptions)||P(k)))}registerDcsHandler(b,P){return this._parser.registerDcsHandler(b,new I.DcsHandler(P))}registerEscHandler(b,P){return this._parser.registerEscHandler(b,P)}registerOscHandler(b,P){return this._parser.registerOscHandler(b,new v.OscHandler(P))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let b=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);b.hasWidth(this._activeBuffer.x)&&!b.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let b=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-b),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(b=this._bufferService.cols-1){this._activeBuffer.x=Math.min(b,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(b,P){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=b,this._activeBuffer.y=this._activeBuffer.scrollTop+P):(this._activeBuffer.x=b,this._activeBuffer.y=P),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(b,P){this._restrictCursor(),this._setCursor(this._activeBuffer.x+b,this._activeBuffer.y+P)}cursorUp(b){let P=this._activeBuffer.y-this._activeBuffer.scrollTop;return P>=0?this._moveCursor(0,-Math.min(P,b.params[0]||1)):this._moveCursor(0,-(b.params[0]||1)),!0}cursorDown(b){let P=this._activeBuffer.scrollBottom-this._activeBuffer.y;return P>=0?this._moveCursor(0,Math.min(P,b.params[0]||1)):this._moveCursor(0,b.params[0]||1),!0}cursorForward(b){return this._moveCursor(b.params[0]||1,0),!0}cursorBackward(b){return this._moveCursor(-(b.params[0]||1),0),!0}cursorNextLine(b){return this.cursorDown(b),this._activeBuffer.x=0,!0}cursorPrecedingLine(b){return this.cursorUp(b),this._activeBuffer.x=0,!0}cursorCharAbsolute(b){return this._setCursor((b.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(b){return this._setCursor(b.length>=2?(b.params[1]||1)-1:0,(b.params[0]||1)-1),!0}charPosAbsolute(b){return this._setCursor((b.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(b){return this._moveCursor(b.params[0]||1,0),!0}linePosAbsolute(b){return this._setCursor(this._activeBuffer.x,(b.params[0]||1)-1),!0}vPositionRelative(b){return this._moveCursor(0,b.params[0]||1),!0}hVPosition(b){return this.cursorPosition(b),!0}tabClear(b){let P=b.params[0];return P===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:P===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(b){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let P=b.params[0]||1;for(;P--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(b){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let P=b.params[0]||1;for(;P--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(b){let P=b.params[0];return P===1&&(this._curAttrData.bg|=536870912),P!==2&&P!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(b,P,k,R=!1,F=!1){let B=this._activeBuffer.lines.get(this._activeBuffer.ybase+b);B.replaceCells(P,k,this._activeBuffer.getNullCell(this._eraseAttrData()),F),R&&(B.isWrapped=!1)}_resetBufferLine(b,P=!1){let k=this._activeBuffer.lines.get(this._activeBuffer.ybase+b);k&&(k.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),P),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+b),k.isWrapped=!1)}eraseInDisplay(b,P=!1){let k;switch(this._restrictCursor(this._bufferService.cols),b.params[0]){case 0:for(k=this._activeBuffer.y,this._dirtyRowTracker.markDirty(k),this._eraseInBufferLine(k++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,P);k<this._bufferService.rows;k++)this._resetBufferLine(k,P);this._dirtyRowTracker.markDirty(k);break;case 1:for(k=this._activeBuffer.y,this._dirtyRowTracker.markDirty(k),this._eraseInBufferLine(k,0,this._activeBuffer.x+1,!0,P),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(k+1).isWrapped=!1);k--;)this._resetBufferLine(k,P);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(k=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,k-1);k--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+k)?.getTrimmedLength(););for(;k>=0;k--)this._bufferService.scroll(this._eraseAttrData())}else{for(k=this._bufferService.rows,this._dirtyRowTracker.markDirty(k-1);k--;)this._resetBufferLine(k,P);this._dirtyRowTracker.markDirty(0)}break;case 3:let R=this._activeBuffer.lines.length-this._bufferService.rows;R>0&&(this._activeBuffer.lines.trimStart(R),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-R,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-R,0),this._onScroll.fire(0))}return!0}eraseInLine(b,P=!1){switch(this._restrictCursor(this._bufferService.cols),b.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,P);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,P);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,P)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(b){this._restrictCursor();let P=b.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let k=this._activeBuffer.ybase+this._activeBuffer.y,R=this._bufferService.rows-1-this._activeBuffer.scrollBottom,F=this._bufferService.rows-1+this._activeBuffer.ybase-R+1;for(;P--;)this._activeBuffer.lines.splice(F-1,1),this._activeBuffer.lines.splice(k,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}deleteLines(b){this._restrictCursor();let P=b.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let k=this._activeBuffer.ybase+this._activeBuffer.y,R;for(R=this._bufferService.rows-1-this._activeBuffer.scrollBottom,R=this._bufferService.rows-1+this._activeBuffer.ybase-R;P--;)this._activeBuffer.lines.splice(k,1),this._activeBuffer.lines.splice(R,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}insertChars(b){this._restrictCursor();let P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.insertCells(this._activeBuffer.x,b.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}deleteChars(b){this._restrictCursor();let P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.deleteCells(this._activeBuffer.x,b.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(b){let P=b.params[0]||1;for(;P--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollDown(b){let P=b.params[0]||1;for(;P--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(s.DEFAULT_ATTR_DATA));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollLeft(b){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let P=b.params[0]||1;for(let k=this._activeBuffer.scrollTop;k<=this._activeBuffer.scrollBottom;++k){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+k);R.deleteCells(0,P,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollRight(b){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let P=b.params[0]||1;for(let k=this._activeBuffer.scrollTop;k<=this._activeBuffer.scrollBottom;++k){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+k);R.insertCells(0,P,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}insertColumns(b){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let P=b.params[0]||1;for(let k=this._activeBuffer.scrollTop;k<=this._activeBuffer.scrollBottom;++k){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+k);R.insertCells(this._activeBuffer.x,P,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(b){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let P=b.params[0]||1;for(let k=this._activeBuffer.scrollTop;k<=this._activeBuffer.scrollBottom;++k){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+k);R.deleteCells(this._activeBuffer.x,P,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(b){this._restrictCursor();let P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(b.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}repeatPrecedingCharacter(b){let P=this._parser.precedingJoinState;if(!P)return!0;let k=b.params[0]||1,R=m.UnicodeService.extractWidth(P),F=this._activeBuffer.x-R,B=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString(F),U=new Uint32Array(B.length*k),K=0;for(let x=0;x<B.length;){let Q=B.codePointAt(x)||0;U[K++]=Q,x+=Q>65535?2:1}let ee=K;for(let x=1;x<k;++x)U.copyWithin(ee,0,K),ee+=K;return this.print(U,0,ee),!0}sendDeviceAttributesPrimary(b){return b.params[0]>0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(o.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(o.C0.ESC+"[?6c")),!0}sendDeviceAttributesSecondary(b){return b.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(o.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(o.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(b.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(o.C0.ESC+"[>83;40003;0c")),!0}_is(b){return(this._optionsService.rawOptions.termName+"").indexOf(b)===0}setMode(b){for(let P=0;P<b.length;P++)switch(b.params[P]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0}return!0}setModePrivate(b){for(let P=0;P<b.length;P++)switch(b.params[P]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,w.DEFAULT_CHARSET),this._charsetService.setgCharset(1,w.DEFAULT_CHARSET),this._charsetService.setgCharset(2,w.DEFAULT_CHARSET),this._charsetService.setgCharset(3,w.DEFAULT_CHARSET);break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(132,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!0,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!0;break;case 12:this._optionsService.options.cursorBlink=!0;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!0;break;case 66:this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire();break;case 9:this._coreMouseService.activeProtocol="X10";break;case 1e3:this._coreMouseService.activeProtocol="VT200";break;case 1002:this._coreMouseService.activeProtocol="DRAG";break;case 1003:this._coreMouseService.activeProtocol="ANY";break;case 1004:this._coreService.decPrivateModes.sendFocus=!0,this._onRequestSendFocus.fire();break;case 1005:this._logService.debug("DECSET 1005 not supported (see #2507)");break;case 1006:this._coreMouseService.activeEncoding="SGR";break;case 1015:this._logService.debug("DECSET 1015 not supported (see #2507)");break;case 1016:this._coreMouseService.activeEncoding="SGR_PIXELS";break;case 25:this._coreService.isCursorHidden=!1;break;case 1048:this.saveCursor();break;case 1049:this.saveCursor();case 47:case 1047:this._bufferService.buffers.activateAltBuffer(this._eraseAttrData()),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(void 0),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!0;break;case 2026:this._coreService.decPrivateModes.synchronizedOutput=!0}return!0}resetMode(b){for(let P=0;P<b.length;P++)switch(b.params[P]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1}return!0}resetModePrivate(b){for(let P=0;P<b.length;P++)switch(b.params[P]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:this._optionsService.options.cursorBlink=!1;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol="NONE";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug("DECRST 1005 not supported (see #2507)");break;case 1006:case 1016:this._coreMouseService.activeEncoding="DEFAULT";break;case 1015:this._logService.debug("DECRST 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),b.params[P]===1049&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(void 0),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1;break;case 2026:this._coreService.decPrivateModes.synchronizedOutput=!1,this._onRequestRefreshRows.fire(void 0)}return!0}requestMode(b,P){let k=this._coreService.decPrivateModes,{activeProtocol:R,activeEncoding:F}=this._coreMouseService,B=this._coreService,{buffers:U,cols:K}=this._bufferService,{active:ee,alt:x}=U,Q=this._optionsService.rawOptions,Y=He=>He?1:2,Z=b.params[0];return he=Z,fe=P?Z===2?4:Z===4?Y(B.modes.insertMode):Z===12?3:Z===20?Y(Q.convertEol):0:Z===1?Y(k.applicationCursorKeys):Z===3?Q.windowOptions.setWinLines?K===80?2:K===132?1:0:0:Z===6?Y(k.origin):Z===7?Y(k.wraparound):Z===8?3:Z===9?Y(R==="X10"):Z===12?Y(Q.cursorBlink):Z===25?Y(!B.isCursorHidden):Z===45?Y(k.reverseWraparound):Z===66?Y(k.applicationKeypad):Z===67?4:Z===1e3?Y(R==="VT200"):Z===1002?Y(R==="DRAG"):Z===1003?Y(R==="ANY"):Z===1004?Y(k.sendFocus):Z===1005?4:Z===1006?Y(F==="SGR"):Z===1015?4:Z===1016?Y(F==="SGR_PIXELS"):Z===1048?1:Z===47||Z===1047||Z===1049?Y(ee===x):Z===2004?Y(k.bracketedPasteMode):Z===2026?Y(k.synchronizedOutput):0,B.triggerDataEvent(`${o.C0.ESC}[${P?"":"?"}${he};${fe}$y`),!0;var he,fe}_updateAttrColor(b,P,k,R,F){return P===2?(b|=50331648,b&=-16777216,b|=l.AttributeData.fromColorRGB([k,R,F])):P===5&&(b&=-50331904,b|=33554432|255&k),b}_extractColor(b,P,k){let R=[0,0,-1,0,0,0],F=0,B=0;do{if(R[B+F]=b.params[P+B],b.hasSubParams(P+B)){let U=b.getSubParams(P+B),K=0;do R[1]===5&&(F=1),R[B+K+1+F]=U[K];while(++K<U.length&&K+B+1+F<R.length);break}if(R[1]===5&&B+F>=2||R[1]===2&&B+F>=5)break;R[1]&&(F=1)}while(++B+P<b.length&&B+F<R.length);for(let U=2;U<R.length;++U)R[U]===-1&&(R[U]=0);switch(R[0]){case 38:k.fg=this._updateAttrColor(k.fg,R[1],R[3],R[4],R[5]);break;case 48:k.bg=this._updateAttrColor(k.bg,R[1],R[3],R[4],R[5]);break;case 58:k.extended=k.extended.clone(),k.extended.underlineColor=this._updateAttrColor(k.extended.underlineColor,R[1],R[3],R[4],R[5])}return B}_processUnderline(b,P){P.extended=P.extended.clone(),(!~b||b>5)&&(b=1),P.extended.underlineStyle=b,P.fg|=268435456,b===0&&(P.fg&=-268435457),P.updateExtended()}_processSGR0(b){b.fg=s.DEFAULT_ATTR_DATA.fg,b.bg=s.DEFAULT_ATTR_DATA.bg,b.extended=b.extended.clone(),b.extended.underlineStyle=0,b.extended.underlineColor&=-67108864,b.updateExtended()}charAttributes(b){if(b.length===1&&b.params[0]===0)return this._processSGR0(this._curAttrData),!0;let P=b.length,k,R=this._curAttrData;for(let F=0;F<P;F++)k=b.params[F],k>=30&&k<=37?(R.fg&=-50331904,R.fg|=16777216|k-30):k>=40&&k<=47?(R.bg&=-50331904,R.bg|=16777216|k-40):k>=90&&k<=97?(R.fg&=-50331904,R.fg|=16777224|k-90):k>=100&&k<=107?(R.bg&=-50331904,R.bg|=16777224|k-100):k===0?this._processSGR0(R):k===1?R.fg|=134217728:k===3?R.bg|=67108864:k===4?(R.fg|=268435456,this._processUnderline(b.hasSubParams(F)?b.getSubParams(F)[0]:1,R)):k===5?R.fg|=536870912:k===7?R.fg|=67108864:k===8?R.fg|=1073741824:k===9?R.fg|=2147483648:k===2?R.bg|=134217728:k===21?this._processUnderline(2,R):k===22?(R.fg&=-134217729,R.bg&=-134217729):k===23?R.bg&=-67108865:k===24?(R.fg&=-268435457,this._processUnderline(0,R)):k===25?R.fg&=-536870913:k===27?R.fg&=-67108865:k===28?R.fg&=-1073741825:k===29?R.fg&=2147483647:k===39?(R.fg&=-67108864,R.fg|=16777215&s.DEFAULT_ATTR_DATA.fg):k===49?(R.bg&=-67108864,R.bg|=16777215&s.DEFAULT_ATTR_DATA.bg):k===38||k===48||k===58?F+=this._extractColor(b,F,R):k===53?R.bg|=1073741824:k===55?R.bg&=-1073741825:k===59?(R.extended=R.extended.clone(),R.extended.underlineColor=-1,R.updateExtended()):k===100?(R.fg&=-67108864,R.fg|=16777215&s.DEFAULT_ATTR_DATA.fg,R.bg&=-67108864,R.bg|=16777215&s.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",k);return!0}deviceStatus(b){switch(b.params[0]){case 5:this._coreService.triggerDataEvent(`${o.C0.ESC}[0n`);break;case 6:let P=this._activeBuffer.y+1,k=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${o.C0.ESC}[${P};${k}R`)}return!0}deviceStatusPrivate(b){if(b.params[0]===6){let P=this._activeBuffer.y+1,k=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${o.C0.ESC}[?${P};${k}R`)}return!0}softReset(b){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=s.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(b){let P=b.length===0?1:b.params[0];if(P===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(P){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar"}let k=P%2==1;this._coreService.decPrivateModes.cursorBlink=k}return!0}setScrollRegion(b){let P=b.params[0]||1,k;return(b.length<2||(k=b.params[1])>this._bufferService.rows||k===0)&&(k=this._bufferService.rows),k>P&&(this._activeBuffer.scrollTop=P-1,this._activeBuffer.scrollBottom=k-1,this._setCursor(0,0)),!0}windowOptions(b){if(!D(b.params[0],this._optionsService.rawOptions.windowOptions))return!0;let P=b.length>1?b.params[1]:0;switch(b.params[0]){case 14:P!==2&&this._onRequestWindowsOptionsReport.fire(C.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(C.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${o.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:P!==0&&P!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),P!==0&&P!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:P!==0&&P!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),P!==0&&P!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(b){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(b){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(b){return this._windowTitle=b,this._onTitleChange.fire(b),!0}setIconName(b){return this._iconName=b,!0}setOrReportIndexedColor(b){let P=[],k=b.split(";");for(;k.length>1;){let R=k.shift(),F=k.shift();if(/^\d+$/.exec(R)){let B=parseInt(R);if(G(B))if(F==="?")P.push({type:0,index:B});else{let U=(0,E.parseColor)(F);U&&P.push({type:1,index:B,color:U})}}}return P.length&&this._onColor.fire(P),!0}setHyperlink(b){let P=b.indexOf(";");if(P===-1)return!0;let k=b.slice(0,P).trim(),R=b.slice(P+1);return R?this._createHyperlink(k,R):!k.trim()&&this._finishHyperlink()}_createHyperlink(b,P){this._getCurrentLinkId()&&this._finishHyperlink();let k=b.split(":"),R,F=k.findIndex((B=>B.startsWith("id=")));return F!==-1&&(R=k[F].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:R,uri:P}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(b,P){let k=b.split(";");for(let R=0;R<k.length&&!(P>=this._specialColors.length);++R,++P)if(k[R]==="?")this._onColor.fire([{type:0,index:this._specialColors[P]}]);else{let F=(0,E.parseColor)(k[R]);F&&this._onColor.fire([{type:1,index:this._specialColors[P],color:F}])}return!0}setOrReportFgColor(b){return this._setOrReportSpecialColor(b,0)}setOrReportBgColor(b){return this._setOrReportSpecialColor(b,1)}setOrReportCursorColor(b){return this._setOrReportSpecialColor(b,2)}restoreIndexedColor(b){if(!b)return this._onColor.fire([{type:2}]),!0;let P=[],k=b.split(";");for(let R=0;R<k.length;++R)if(/^\d+$/.exec(k[R])){let F=parseInt(k[R]);G(F)&&P.push({type:2,index:F})}return P.length&&this._onColor.fire(P),!0}restoreFgColor(b){return this._onColor.fire([{type:2,index:256}]),!0}restoreBgColor(b){return this._onColor.fire([{type:2,index:257}]),!0}restoreCursorColor(b){return this._onColor.fire([{type:2,index:258}]),!0}nextLine(){return this._activeBuffer.x=0,this.index(),!0}keypadApplicationMode(){return this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire(),!0}keypadNumericMode(){return this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire(),!0}selectDefaultCharset(){return this._charsetService.setgLevel(0),this._charsetService.setgCharset(0,w.DEFAULT_CHARSET),!0}selectCharset(b){return b.length!==2?(this.selectDefaultCharset(),!0):(b[0]==="/"||this._charsetService.setgCharset(O[b[0]],w.CHARSETS[b[1]]||w.DEFAULT_CHARSET),!0)}index(){return this._restrictCursor(),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let b=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,b,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=s.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=s.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(b){return this._charsetService.setgLevel(b),!0}screenAlignmentPattern(){let b=new d.CellData;b.content=4194373,b.fg=this._curAttrData.fg,b.bg=this._curAttrData.bg,this._setCursor(0,0);for(let P=0;P<this._bufferService.rows;++P){let k=this._activeBuffer.ybase+this._activeBuffer.y+P,R=this._activeBuffer.lines.get(k);R&&(R.fill(b),R.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(b,P){let k=this._bufferService.buffer,R=this._optionsService.rawOptions;return(F=>(this._coreService.triggerDataEvent(`${o.C0.ESC}${F}${o.C0.ESC}\\`),!0))(b==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:b==='"p'?'P1$r61;1"p':b==="r"?`P1$r${k.scrollTop+1};${k.scrollBottom+1}r`:b==="m"?"P1$r0m":b===" q"?`P1$r${{block:2,underline:4,bar:6}[R.cursorStyle]-(R.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(b,P){this._dirtyRowTracker.markRangeDirty(b,P)}}n.InputHandler=z;let W=class{constructor(q){this._bufferService=q,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(q){q<this.start?this.start=q:q>this.end&&(this.end=q)}markRangeDirty(q,b){q>b&&(j=q,q=b,b=j),q<this.start&&(this.start=q),b>this.end&&(this.end=b)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function G(q){return 0<=q&&q<256}W=p([S(0,u.IBufferService)],W)},701:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.isChromeOS=n.isLinux=n.isWindows=n.isIphone=n.isIpad=n.isMac=n.isSafari=n.isLegacyEdge=n.isFirefox=n.isNode=void 0,n.getSafariVersion=function(){if(!n.isSafari)return 0;let S=h.match(/Version\/(\d+)/);return S===null||S.length<2?0:parseInt(S[1])},n.isNode=typeof process<"u"&&"title"in process;let h=n.isNode?"node":navigator.userAgent,p=n.isNode?"node":navigator.platform;n.isFirefox=h.includes("Firefox"),n.isLegacyEdge=h.includes("Edge"),n.isSafari=/^((?!chrome|android).)*safari/i.test(h),n.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(p),n.isIpad=p==="iPad",n.isIphone=p==="iPhone",n.isWindows=["Windows","Win16","Win32","WinCE"].includes(p),n.isLinux=p.indexOf("Linux")>=0,n.isChromeOS=/\bCrOS\b/.test(h)},6168:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DebouncedIdleTask=n.IdleTaskQueue=n.PriorityTaskQueue=void 0;let p=h(701);class S{constructor(){this._tasks=[],this._i=0}enqueue(c){this._tasks.push(c),this._start()}flush(){for(;this._i<this._tasks.length;)this._tasks[this._i]()||this._i++;this.clear()}clear(){this._idleCallback&&(this._cancelCallback(this._idleCallback),this._idleCallback=void 0),this._i=0,this._tasks.length=0}_start(){this._idleCallback||(this._idleCallback=this._requestCallback(this._process.bind(this)))}_process(c){this._idleCallback=void 0;let g=0,_=0,s=c.timeRemaining(),f=0;for(;this._i<this._tasks.length;){if(g=performance.now(),this._tasks[this._i]()||this._i++,g=Math.max(1,performance.now()-g),_=Math.max(g,_),f=c.timeRemaining(),1.5*_>f)return s-g<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(s-g))}ms`),void this._start();s=f}this.clear()}}class o extends S{_requestCallback(c){return setTimeout((()=>c(this._createDeadline(16))))}_cancelCallback(c){clearTimeout(c)}_createDeadline(c){let g=performance.now()+c;return{timeRemaining:()=>Math.max(0,g-performance.now())}}}n.PriorityTaskQueue=o,n.IdleTaskQueue=!p.isNode&&"requestIdleCallback"in window?class extends S{_requestCallback(w){return requestIdleCallback(w)}_cancelCallback(w){cancelIdleCallback(w)}}:o,n.DebouncedIdleTask=class{constructor(){this._queue=new n.IdleTaskQueue}set(w){this._queue.clear(),this._queue.enqueue(w)}flush(){this._queue.flush()}}},5882:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.updateWindowsModeWrappedState=function(S){let o=S.buffer.lines.get(S.buffer.ybase+S.buffer.y-1),w=o?.get(S.cols-1),c=S.buffer.lines.get(S.buffer.ybase+S.buffer.y);c&&w&&(c.isWrapped=w[p.CHAR_DATA_CODE_INDEX]!==p.NULL_CELL_CODE&&w[p.CHAR_DATA_CODE_INDEX]!==p.WHITESPACE_CELL_CODE)};let p=h(8938)},5451:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ExtendedAttrs=n.AttributeData=void 0;class h{constructor(){this.fg=0,this.bg=0,this.extended=new p}static toColorRGB(o){return[o>>>16&255,o>>>8&255,255&o]}static fromColorRGB(o){return(255&o[0])<<16|(255&o[1])<<8|255&o[2]}clone(){let o=new h;return o.fg=this.fg,o.bg=this.bg,o.extended=this.extended.clone(),o}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return(50331648&this.fg)==16777216||(50331648&this.fg)==33554432}isBgPalette(){return(50331648&this.bg)==16777216||(50331648&this.bg)==33554432}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==16777216||(50331648&this.extended.underlineColor)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}n.AttributeData=h;class p{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(o){this._ext=o}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(o){this._ext&=-469762049,this._ext|=o<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(o){this._ext&=-67108864,this._ext|=67108863&o}get urlId(){return this._urlId}set urlId(o){this._urlId=o}get underlineVariantOffset(){let o=(3758096384&this._ext)>>29;return o<0?4294967288^o:o}set underlineVariantOffset(o){this._ext&=536870911,this._ext|=o<<29&3758096384}constructor(o=0,w=0){this._ext=0,this._urlId=0,this._ext=o,this._urlId=w}clone(){return new p(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}n.ExtendedAttrs=p},1073:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Buffer=n.MAX_BUFFER_SIZE=void 0;let p=h(5639),S=h(6168),o=h(5451),w=h(6107),c=h(732),g=h(3055),_=h(8938),s=h(8158),f=h(6760);n.MAX_BUFFER_SIZE=4294967295,n.Buffer=class{constructor(d,l,u){this._hasScrollback=d,this._optionsService=l,this._bufferService=u,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=w.DEFAULT_ATTR_DATA.clone(),this.savedCharset=f.DEFAULT_CHARSET,this.markers=[],this._nullCell=g.CellData.fromCharData([0,_.NULL_CELL_CHAR,_.NULL_CELL_WIDTH,_.NULL_CELL_CODE]),this._whitespaceCell=g.CellData.fromCharData([0,_.WHITESPACE_CELL_CHAR,_.WHITESPACE_CELL_WIDTH,_.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new S.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new p.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(d){return d?(this._nullCell.fg=d.fg,this._nullCell.bg=d.bg,this._nullCell.extended=d.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new o.ExtendedAttrs),this._nullCell}getWhitespaceCell(d){return d?(this._whitespaceCell.fg=d.fg,this._whitespaceCell.bg=d.bg,this._whitespaceCell.extended=d.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new o.ExtendedAttrs),this._whitespaceCell}getBlankLine(d,l){return new w.BufferLine(this._bufferService.cols,this.getNullCell(d),l)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let d=this.ybase+this.y-this.ydisp;return d>=0&&d<this._rows}_getCorrectBufferLength(d){if(!this._hasScrollback)return d;let l=d+this._optionsService.rawOptions.scrollback;return l>n.MAX_BUFFER_SIZE?n.MAX_BUFFER_SIZE:l}fillViewportRows(d){if(this.lines.length===0){d===void 0&&(d=w.DEFAULT_ATTR_DATA);let l=this._rows;for(;l--;)this.lines.push(this.getBlankLine(d))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new p.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(d,l){let u=this.getNullCell(w.DEFAULT_ATTR_DATA),m=0,v=this._getCorrectBufferLength(l);if(v>this.lines.maxLength&&(this.lines.maxLength=v),this.lines.length>0){if(this._cols<d)for(let E=0;E<this.lines.length;E++)m+=+this.lines.get(E).resize(d,u);let I=0;if(this._rows<l)for(let E=this._rows;E<l;E++)this.lines.length<l+this.ybase&&(this._optionsService.rawOptions.windowsMode||this._optionsService.rawOptions.windowsPty.backend!==void 0||this._optionsService.rawOptions.windowsPty.buildNumber!==void 0?this.lines.push(new w.BufferLine(d,u)):this.ybase>0&&this.lines.length<=this.ybase+this.y+I+1?(this.ybase--,I++,this.ydisp>0&&this.ydisp--):this.lines.push(new w.BufferLine(d,u)));else for(let E=this._rows;E>l;E--)this.lines.length>l+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(v<this.lines.maxLength){let E=this.lines.length-v;E>0&&(this.lines.trimStart(E),this.ybase=Math.max(this.ybase-E,0),this.ydisp=Math.max(this.ydisp-E,0),this.savedY=Math.max(this.savedY-E,0)),this.lines.maxLength=v}this.x=Math.min(this.x,d-1),this.y=Math.min(this.y,l-1),I&&(this.y+=I),this.savedX=Math.min(this.savedX,d-1),this.scrollTop=0}if(this.scrollBottom=l-1,this._isReflowEnabled&&(this._reflow(d,l),this._cols>d))for(let I=0;I<this.lines.length;I++)m+=+this.lines.get(I).resize(d,u);this._cols=d,this._rows=l,this._memoryCleanupQueue.clear(),m>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let d=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,d=!1);let l=0;for(;this._memoryCleanupPosition<this.lines.length;)if(l+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),l>100)return!0;return d}get _isReflowEnabled(){let d=this._optionsService.rawOptions.windowsPty;return d&&d.buildNumber?this._hasScrollback&&d.backend==="conpty"&&d.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(d,l){this._cols!==d&&(d>this._cols?this._reflowLarger(d,l):this._reflowSmaller(d,l))}_reflowLarger(d,l){let u=this._optionsService.rawOptions.reflowCursorLine,m=(0,c.reflowLargerGetLinesToRemove)(this.lines,this._cols,d,this.ybase+this.y,this.getNullCell(w.DEFAULT_ATTR_DATA),u);if(m.length>0){let v=(0,c.reflowLargerCreateNewLayout)(this.lines,m);(0,c.reflowLargerApplyNewLayout)(this.lines,v.layout),this._reflowLargerAdjustViewport(d,l,v.countRemoved)}}_reflowLargerAdjustViewport(d,l,u){let m=this.getNullCell(w.DEFAULT_ATTR_DATA),v=u;for(;v-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length<l&&this.lines.push(new w.BufferLine(d,m))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-u,0)}_reflowSmaller(d,l){let u=this._optionsService.rawOptions.reflowCursorLine,m=this.getNullCell(w.DEFAULT_ATTR_DATA),v=[],I=0;for(let E=this.lines.length-1;E>=0;E--){let N=this.lines.get(E);if(!N||!N.isWrapped&&N.getTrimmedLength()<=d)continue;let O=[N];for(;N.isWrapped&&E>0;)N=this.lines.get(--E),O.unshift(N);if(!u){let k=this.ybase+this.y;if(k>=E&&k<E+O.length)continue}let A=O[O.length-1].getTrimmedLength(),D=(0,c.reflowSmallerGetNewLineLengths)(O,this._cols,d),C=D.length-O.length,j;j=this.ybase===0&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+C):Math.max(0,this.lines.length-this.lines.maxLength+C);let z=[];for(let k=0;k<C;k++){let R=this.getBlankLine(w.DEFAULT_ATTR_DATA,!0);z.push(R)}z.length>0&&(v.push({start:E+O.length+I,newLines:z}),I+=z.length),O.push(...z);let W=D.length-1,G=D[W];G===0&&(W--,G=D[W]);let q=O.length-C-1,b=A;for(;q>=0;){let k=Math.min(b,G);if(O[W]===void 0)break;if(O[W].copyCellsFrom(O[q],b-k,G-k,k,!0),G-=k,G===0&&(W--,G=D[W]),b-=k,b===0){q--;let R=Math.max(q,0);b=(0,c.getWrappedLineTrimmedLength)(O,R,this._cols)}}for(let k=0;k<O.length;k++)D[k]<d&&O[k].setCell(D[k],m);let P=C-j;for(;P-- >0;)this.ybase===0?this.y<l-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+I)-l&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+C,this.ybase+l-1)}if(v.length>0){let E=[],N=[];for(let G=0;G<this.lines.length;G++)N.push(this.lines.get(G));let O=this.lines.length,A=O-1,D=0,C=v[D];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+I);let j=0;for(let G=Math.min(this.lines.maxLength-1,O+I-1);G>=0;G--)if(C&&C.start>A+j){for(let q=C.newLines.length-1;q>=0;q--)this.lines.set(G--,C.newLines[q]);G++,E.push({index:A+1,amount:C.newLines.length}),j+=C.newLines.length,C=v[++D]}else this.lines.set(G,N[A--]);let z=0;for(let G=E.length-1;G>=0;G--)E[G].index+=z,this.lines.onInsertEmitter.fire(E[G]),z+=E[G].amount;let W=Math.max(0,O+I-this.lines.maxLength);W>0&&this.lines.onTrimEmitter.fire(W)}}translateBufferLineToString(d,l,u=0,m){let v=this.lines.get(d);return v?v.translateToString(l,u,m):""}getWrappedRangeForLine(d){let l=d,u=d;for(;l>0&&this.lines.get(l).isWrapped;)l--;for(;u+1<this.lines.length&&this.lines.get(u+1).isWrapped;)u++;return{first:l,last:u}}setupTabStops(d){for(d!=null?this.tabs[d]||(d=this.prevStop(d)):(this.tabs={},d=0);d<this._cols;d+=this._optionsService.rawOptions.tabStopWidth)this.tabs[d]=!0}prevStop(d){for(d==null&&(d=this.x);!this.tabs[--d]&&d>0;);return d>=this._cols?this._cols-1:d<0?0:d}nextStop(d){for(d==null&&(d=this.x);!this.tabs[++d]&&d<this._cols;);return d>=this._cols?this._cols-1:d<0?0:d}clearMarkers(d){this._isClearing=!0;for(let l=0;l<this.markers.length;l++)this.markers[l].line===d&&(this.markers[l].dispose(),this.markers.splice(l--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let d=0;d<this.markers.length;d++)this.markers[d].dispose();this.markers.length=0,this._isClearing=!1}addMarker(d){let l=new s.Marker(d);return this.markers.push(l),l.register(this.lines.onTrim((u=>{l.line-=u,l.line<0&&l.dispose()}))),l.register(this.lines.onInsert((u=>{l.line>=u.index&&(l.line+=u.amount)}))),l.register(this.lines.onDelete((u=>{l.line>=u.index&&l.line<u.index+u.amount&&l.dispose(),l.line>u.index&&(l.line-=u.amount)}))),l.register(l.onDispose((()=>this._removeMarker(l)))),l}_removeMarker(d){this._isClearing||this.markers.splice(this.markers.indexOf(d),1)}}},6107:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferLine=n.DEFAULT_ATTR_DATA=void 0;let p=h(5451),S=h(3055),o=h(8938),w=h(726);n.DEFAULT_ATTR_DATA=Object.freeze(new p.AttributeData);let c=0;class g{constructor(s,f,d=!1){this.isWrapped=d,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*s);let l=f||S.CellData.fromCharData([0,o.NULL_CELL_CHAR,o.NULL_CELL_WIDTH,o.NULL_CELL_CODE]);for(let u=0;u<s;++u)this.setCell(u,l);this.length=s}get(s){let f=this._data[3*s+0],d=2097151&f;return[this._data[3*s+1],2097152&f?this._combined[s]:d?(0,w.stringFromCodePoint)(d):"",f>>22,2097152&f?this._combined[s].charCodeAt(this._combined[s].length-1):d]}set(s,f){this._data[3*s+1]=f[o.CHAR_DATA_ATTR_INDEX],f[o.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[s]=f[1],this._data[3*s+0]=2097152|s|f[o.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*s+0]=f[o.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|f[o.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(s){return this._data[3*s+0]>>22}hasWidth(s){return 12582912&this._data[3*s+0]}getFg(s){return this._data[3*s+1]}getBg(s){return this._data[3*s+2]}hasContent(s){return 4194303&this._data[3*s+0]}getCodePoint(s){let f=this._data[3*s+0];return 2097152&f?this._combined[s].charCodeAt(this._combined[s].length-1):2097151&f}isCombined(s){return 2097152&this._data[3*s+0]}getString(s){let f=this._data[3*s+0];return 2097152&f?this._combined[s]:2097151&f?(0,w.stringFromCodePoint)(2097151&f):""}isProtected(s){return 536870912&this._data[3*s+2]}loadCell(s,f){return c=3*s,f.content=this._data[c+0],f.fg=this._data[c+1],f.bg=this._data[c+2],2097152&f.content&&(f.combinedData=this._combined[s]),268435456&f.bg&&(f.extended=this._extendedAttrs[s]),f}setCell(s,f){2097152&f.content&&(this._combined[s]=f.combinedData),268435456&f.bg&&(this._extendedAttrs[s]=f.extended),this._data[3*s+0]=f.content,this._data[3*s+1]=f.fg,this._data[3*s+2]=f.bg}setCellFromCodepoint(s,f,d,l){268435456&l.bg&&(this._extendedAttrs[s]=l.extended),this._data[3*s+0]=f|d<<22,this._data[3*s+1]=l.fg,this._data[3*s+2]=l.bg}addCodepointToCell(s,f,d){let l=this._data[3*s+0];2097152&l?this._combined[s]+=(0,w.stringFromCodePoint)(f):2097151&l?(this._combined[s]=(0,w.stringFromCodePoint)(2097151&l)+(0,w.stringFromCodePoint)(f),l&=-2097152,l|=2097152):l=f|4194304,d&&(l&=-12582913,l|=d<<22),this._data[3*s+0]=l}insertCells(s,f,d){if((s%=this.length)&&this.getWidth(s-1)===2&&this.setCellFromCodepoint(s-1,0,1,d),f<this.length-s){let l=new S.CellData;for(let u=this.length-s-f-1;u>=0;--u)this.setCell(s+f+u,this.loadCell(s+u,l));for(let u=0;u<f;++u)this.setCell(s+u,d)}else for(let l=s;l<this.length;++l)this.setCell(l,d);this.getWidth(this.length-1)===2&&this.setCellFromCodepoint(this.length-1,0,1,d)}deleteCells(s,f,d){if(s%=this.length,f<this.length-s){let l=new S.CellData;for(let u=0;u<this.length-s-f;++u)this.setCell(s+u,this.loadCell(s+f+u,l));for(let u=this.length-f;u<this.length;++u)this.setCell(u,d)}else for(let l=s;l<this.length;++l)this.setCell(l,d);s&&this.getWidth(s-1)===2&&this.setCellFromCodepoint(s-1,0,1,d),this.getWidth(s)!==0||this.hasContent(s)||this.setCellFromCodepoint(s,0,1,d)}replaceCells(s,f,d,l=!1){if(l)for(s&&this.getWidth(s-1)===2&&!this.isProtected(s-1)&&this.setCellFromCodepoint(s-1,0,1,d),f<this.length&&this.getWidth(f-1)===2&&!this.isProtected(f)&&this.setCellFromCodepoint(f,0,1,d);s<f&&s<this.length;)this.isProtected(s)||this.setCell(s,d),s++;else for(s&&this.getWidth(s-1)===2&&this.setCellFromCodepoint(s-1,0,1,d),f<this.length&&this.getWidth(f-1)===2&&this.setCellFromCodepoint(f,0,1,d);s<f&&s<this.length;)this.setCell(s++,d)}resize(s,f){if(s===this.length)return 4*this._data.length*2<this._data.buffer.byteLength;let d=3*s;if(s>this.length){if(this._data.buffer.byteLength>=4*d)this._data=new Uint32Array(this._data.buffer,0,d);else{let l=new Uint32Array(d);l.set(this._data),this._data=l}for(let l=this.length;l<s;++l)this.setCell(l,f)}else{this._data=this._data.subarray(0,d);let l=Object.keys(this._combined);for(let m=0;m<l.length;m++){let v=parseInt(l[m],10);v>=s&&delete this._combined[v]}let u=Object.keys(this._extendedAttrs);for(let m=0;m<u.length;m++){let v=parseInt(u[m],10);v>=s&&delete this._extendedAttrs[v]}}return this.length=s,4*d*2<this._data.buffer.byteLength}cleanupMemory(){if(4*this._data.length*2<this._data.buffer.byteLength){let s=new Uint32Array(this._data.length);return s.set(this._data),this._data=s,1}return 0}fill(s,f=!1){if(f)for(let d=0;d<this.length;++d)this.isProtected(d)||this.setCell(d,s);else{this._combined={},this._extendedAttrs={};for(let d=0;d<this.length;++d)this.setCell(d,s)}}copyFrom(s){this.length!==s.length?this._data=new Uint32Array(s._data):this._data.set(s._data),this.length=s.length,this._combined={};for(let f in s._combined)this._combined[f]=s._combined[f];this._extendedAttrs={};for(let f in s._extendedAttrs)this._extendedAttrs[f]=s._extendedAttrs[f];this.isWrapped=s.isWrapped}clone(){let s=new g(0);s._data=new Uint32Array(this._data),s.length=this.length;for(let f in this._combined)s._combined[f]=this._combined[f];for(let f in this._extendedAttrs)s._extendedAttrs[f]=this._extendedAttrs[f];return s.isWrapped=this.isWrapped,s}getTrimmedLength(){for(let s=this.length-1;s>=0;--s)if(4194303&this._data[3*s+0])return s+(this._data[3*s+0]>>22);return 0}getNoBgTrimmedLength(){for(let s=this.length-1;s>=0;--s)if(4194303&this._data[3*s+0]||50331648&this._data[3*s+2])return s+(this._data[3*s+0]>>22);return 0}copyCellsFrom(s,f,d,l,u){let m=s._data;if(u)for(let I=l-1;I>=0;I--){for(let E=0;E<3;E++)this._data[3*(d+I)+E]=m[3*(f+I)+E];268435456&m[3*(f+I)+2]&&(this._extendedAttrs[d+I]=s._extendedAttrs[f+I])}else for(let I=0;I<l;I++){for(let E=0;E<3;E++)this._data[3*(d+I)+E]=m[3*(f+I)+E];268435456&m[3*(f+I)+2]&&(this._extendedAttrs[d+I]=s._extendedAttrs[f+I])}let v=Object.keys(s._combined);for(let I=0;I<v.length;I++){let E=parseInt(v[I],10);E>=f&&(this._combined[E-f+d]=s._combined[E])}}translateToString(s,f,d,l){f=f??0,d=d??this.length,s&&(d=Math.min(d,this.getTrimmedLength())),l&&(l.length=0);let u="";for(;f<d;){let m=this._data[3*f+0],v=2097151&m,I=2097152&m?this._combined[f]:v?(0,w.stringFromCodePoint)(v):o.WHITESPACE_CELL_CHAR;if(u+=I,l)for(let E=0;E<I.length;++E)l.push(f);f+=m>>22||1}return l&&l.push(f),u}}n.BufferLine=g},732:(T,n)=>{function h(p,S,o){if(S===p.length-1)return p[S].getTrimmedLength();let w=!p[S].hasContent(o-1)&&p[S].getWidth(o-1)===1,c=p[S+1].getWidth(0)===2;return w&&c?o-1:o}Object.defineProperty(n,"__esModule",{value:!0}),n.reflowLargerGetLinesToRemove=function(p,S,o,w,c,g){let _=[];for(let s=0;s<p.length-1;s++){let f=s,d=p.get(++f);if(!d.isWrapped)continue;let l=[p.get(s)];for(;f<p.length&&d.isWrapped;)l.push(d),d=p.get(++f);if(!g&&w>=s&&w<f){s+=l.length-1;continue}let u=0,m=h(l,u,S),v=1,I=0;for(;v<l.length;){let N=h(l,v,S),O=N-I,A=o-m,D=Math.min(O,A);l[u].copyCellsFrom(l[v],I,m,D,!1),m+=D,m===o&&(u++,m=0),I+=D,I===N&&(v++,I=0),m===0&&u!==0&&l[u-1].getWidth(o-1)===2&&(l[u].copyCellsFrom(l[u-1],o-1,m++,1,!1),l[u-1].setCell(o-1,c))}l[u].replaceCells(m,o,c);let E=0;for(let N=l.length-1;N>0&&(N>u||l[N].getTrimmedLength()===0);N--)E++;E>0&&(_.push(s+l.length-E),_.push(E)),s+=l.length-1}return _},n.reflowLargerCreateNewLayout=function(p,S){let o=[],w=0,c=S[w],g=0;for(let _=0;_<p.length;_++)if(c===_){let s=S[++w];p.onDeleteEmitter.fire({index:_-g,amount:s}),_+=s-1,g+=s,c=S[++w]}else o.push(_);return{layout:o,countRemoved:g}},n.reflowLargerApplyNewLayout=function(p,S){let o=[];for(let w=0;w<S.length;w++)o.push(p.get(S[w]));for(let w=0;w<o.length;w++)p.set(w,o[w]);p.length=S.length},n.reflowSmallerGetNewLineLengths=function(p,S,o){let w=[],c=p.map(((f,d)=>h(p,d,S))).reduce(((f,d)=>f+d)),g=0,_=0,s=0;for(;s<c;){if(c-s<o){w.push(c-s);break}g+=o;let f=h(p,_,S);g>f&&(g-=f,_++);let d=p[_].getWidth(g-1)===2;d&&g--;let l=d?o-1:o;w.push(l),s+=l}return w},n.getWrappedLineTrimmedLength=h},4097:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferSet=void 0;let p=h(7150),S=h(1073),o=h(802);class w extends p.Disposable{constructor(g,_){super(),this._optionsService=g,this._bufferService=_,this._onBufferActivate=this._register(new o.Emitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",(()=>this.resize(this._bufferService.cols,this._bufferService.rows)))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",(()=>this.setupTabStops())))}reset(){this._normal=new S.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new S.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(g){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(g),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(g,_){this._normal.resize(g,_),this._alt.resize(g,_),this.setupTabStops(g)}setupTabStops(g){this._normal.setupTabStops(g),this._alt.setupTabStops(g)}}n.BufferSet=w},3055:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CellData=void 0;let p=h(726),S=h(8938),o=h(5451);class w extends o.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new o.ExtendedAttrs,this.combinedData=""}static fromCharData(g){let _=new w;return _.setFromCharData(g),_}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,p.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(g){this.fg=g[S.CHAR_DATA_ATTR_INDEX],this.bg=0;let _=!1;if(g[S.CHAR_DATA_CHAR_INDEX].length>2)_=!0;else if(g[S.CHAR_DATA_CHAR_INDEX].length===2){let s=g[S.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=s&&s<=56319){let f=g[S.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=f&&f<=57343?this.content=1024*(s-55296)+f-56320+65536|g[S.CHAR_DATA_WIDTH_INDEX]<<22:_=!0}else _=!0}else this.content=g[S.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|g[S.CHAR_DATA_WIDTH_INDEX]<<22;_&&(this.combinedData=g[S.CHAR_DATA_CHAR_INDEX],this.content=2097152|g[S.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}n.CellData=w},8938:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.WHITESPACE_CELL_CODE=n.WHITESPACE_CELL_WIDTH=n.WHITESPACE_CELL_CHAR=n.NULL_CELL_CODE=n.NULL_CELL_WIDTH=n.NULL_CELL_CHAR=n.CHAR_DATA_CODE_INDEX=n.CHAR_DATA_WIDTH_INDEX=n.CHAR_DATA_CHAR_INDEX=n.CHAR_DATA_ATTR_INDEX=n.DEFAULT_EXT=n.DEFAULT_ATTR=n.DEFAULT_COLOR=void 0,n.DEFAULT_COLOR=0,n.DEFAULT_ATTR=n.DEFAULT_COLOR<<9|256,n.DEFAULT_EXT=0,n.CHAR_DATA_ATTR_INDEX=0,n.CHAR_DATA_CHAR_INDEX=1,n.CHAR_DATA_WIDTH_INDEX=2,n.CHAR_DATA_CODE_INDEX=3,n.NULL_CELL_CHAR="",n.NULL_CELL_WIDTH=1,n.NULL_CELL_CODE=0,n.WHITESPACE_CELL_CHAR=" ",n.WHITESPACE_CELL_WIDTH=1,n.WHITESPACE_CELL_CODE=32},8158:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Marker=void 0;let p=h(802),S=h(7150);class o{get id(){return this._id}constructor(c){this.line=c,this.isDisposed=!1,this._disposables=[],this._id=o._nextId++,this._onDispose=this.register(new p.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,S.dispose)(this._disposables),this._disposables.length=0)}register(c){return this._disposables.push(c),c}}n.Marker=o,o._nextId=1},6760:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DEFAULT_CHARSET=n.CHARSETS=void 0,n.CHARSETS={},n.DEFAULT_CHARSET=n.CHARSETS.B,n.CHARSETS[0]={"`":"\u25C6",a:"\u2592",b:"\u2409",c:"\u240C",d:"\u240D",e:"\u240A",f:"\xB0",g:"\xB1",h:"\u2424",i:"\u240B",j:"\u2518",k:"\u2510",l:"\u250C",m:"\u2514",n:"\u253C",o:"\u23BA",p:"\u23BB",q:"\u2500",r:"\u23BC",s:"\u23BD",t:"\u251C",u:"\u2524",v:"\u2534",w:"\u252C",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03C0","|":"\u2260","}":"\xA3","~":"\xB7"},n.CHARSETS.A={"#":"\xA3"},n.CHARSETS.B=void 0,n.CHARSETS[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"},n.CHARSETS.C=n.CHARSETS[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},n.CHARSETS.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"},n.CHARSETS.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"},n.CHARSETS.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"},n.CHARSETS.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"},n.CHARSETS.E=n.CHARSETS[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"},n.CHARSETS.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"},n.CHARSETS.H=n.CHARSETS[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},n.CHARSETS["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"}},3534:(T,n)=>{var h,p,S;Object.defineProperty(n,"__esModule",{value:!0}),n.C1_ESCAPED=n.C1=n.C0=void 0,(function(o){o.NUL="\0",o.SOH="",o.STX="",o.ETX="",o.EOT="",o.ENQ="",o.ACK="",o.BEL="\x07",o.BS="\b",o.HT=" ",o.LF=`
3
+ `,o.VT="\v",o.FF="\f",o.CR="\r",o.SO="",o.SI="",o.DLE="",o.DC1="",o.DC2="",o.DC3="",o.DC4="",o.NAK="",o.SYN="",o.ETB="",o.CAN="",o.EM="",o.SUB="",o.ESC="\x1B",o.FS="",o.GS="",o.RS="",o.US="",o.SP=" ",o.DEL="\x7F"})(h||(n.C0=h={})),(function(o){o.PAD="\x80",o.HOP="\x81",o.BPH="\x82",o.NBH="\x83",o.IND="\x84",o.NEL="\x85",o.SSA="\x86",o.ESA="\x87",o.HTS="\x88",o.HTJ="\x89",o.VTS="\x8A",o.PLD="\x8B",o.PLU="\x8C",o.RI="\x8D",o.SS2="\x8E",o.SS3="\x8F",o.DCS="\x90",o.PU1="\x91",o.PU2="\x92",o.STS="\x93",o.CCH="\x94",o.MW="\x95",o.SPA="\x96",o.EPA="\x97",o.SOS="\x98",o.SGCI="\x99",o.SCI="\x9A",o.CSI="\x9B",o.ST="\x9C",o.OSC="\x9D",o.PM="\x9E",o.APC="\x9F"})(p||(n.C1=p={})),(function(o){o.ST=`${h.ESC}\\`})(S||(n.C1_ESCAPED=S={}))},726:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Utf8ToUtf32=n.StringToUtf32=void 0,n.stringFromCodePoint=function(h){return h>65535?(h-=65536,String.fromCharCode(55296+(h>>10))+String.fromCharCode(h%1024+56320)):String.fromCharCode(h)},n.utf32ToString=function(h,p=0,S=h.length){let o="";for(let w=p;w<S;++w){let c=h[w];c>65535?(c-=65536,o+=String.fromCharCode(55296+(c>>10))+String.fromCharCode(c%1024+56320)):o+=String.fromCharCode(c)}return o},n.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(h,p){let S=h.length;if(!S)return 0;let o=0,w=0;if(this._interim){let c=h.charCodeAt(w++);56320<=c&&c<=57343?p[o++]=1024*(this._interim-55296)+c-56320+65536:(p[o++]=this._interim,p[o++]=c),this._interim=0}for(let c=w;c<S;++c){let g=h.charCodeAt(c);if(55296<=g&&g<=56319){if(++c>=S)return this._interim=g,o;let _=h.charCodeAt(c);56320<=_&&_<=57343?p[o++]=1024*(g-55296)+_-56320+65536:(p[o++]=g,p[o++]=_)}else g!==65279&&(p[o++]=g)}return o}},n.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(h,p){let S=h.length;if(!S)return 0;let o,w,c,g,_=0,s=0,f=0;if(this.interim[0]){let u=!1,m=this.interim[0];m&=(224&m)==192?31:(240&m)==224?15:7;let v,I=0;for(;(v=63&this.interim[++I])&&I<4;)m<<=6,m|=v;let E=(224&this.interim[0])==192?2:(240&this.interim[0])==224?3:4,N=E-I;for(;f<N;){if(f>=S)return 0;if(v=h[f++],(192&v)!=128){f--,u=!0;break}this.interim[I++]=v,m<<=6,m|=63&v}u||(E===2?m<128?f--:p[_++]=m:E===3?m<2048||m>=55296&&m<=57343||m===65279||(p[_++]=m):m<65536||m>1114111||(p[_++]=m)),this.interim.fill(0)}let d=S-4,l=f;for(;l<S;){for(;!(!(l<d)||128&(o=h[l])||128&(w=h[l+1])||128&(c=h[l+2])||128&(g=h[l+3]));)p[_++]=o,p[_++]=w,p[_++]=c,p[_++]=g,l+=4;if(o=h[l++],o<128)p[_++]=o;else if((224&o)==192){if(l>=S)return this.interim[0]=o,_;if(w=h[l++],(192&w)!=128){l--;continue}if(s=(31&o)<<6|63&w,s<128){l--;continue}p[_++]=s}else if((240&o)==224){if(l>=S)return this.interim[0]=o,_;if(w=h[l++],(192&w)!=128){l--;continue}if(l>=S)return this.interim[0]=o,this.interim[1]=w,_;if(c=h[l++],(192&c)!=128){l--;continue}if(s=(15&o)<<12|(63&w)<<6|63&c,s<2048||s>=55296&&s<=57343||s===65279)continue;p[_++]=s}else if((248&o)==240){if(l>=S)return this.interim[0]=o,_;if(w=h[l++],(192&w)!=128){l--;continue}if(l>=S)return this.interim[0]=o,this.interim[1]=w,_;if(c=h[l++],(192&c)!=128){l--;continue}if(l>=S)return this.interim[0]=o,this.interim[1]=w,this.interim[2]=c,_;if(g=h[l++],(192&g)!=128){l--;continue}if(s=(7&o)<<18|(63&w)<<12|(63&c)<<6|63&g,s<65536||s>1114111)continue;p[_++]=s}}return _}}},7428:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeV6=void 0;let p=h(6415),S=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],o=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]],w;n.UnicodeV6=class{constructor(){if(this.version="6",!w){w=new Uint8Array(65536),w.fill(1),w[0]=0,w.fill(0,1,32),w.fill(0,127,160),w.fill(2,4352,4448),w[9001]=2,w[9002]=2,w.fill(2,11904,42192),w[12351]=1,w.fill(2,44032,55204),w.fill(2,63744,64256),w.fill(2,65040,65050),w.fill(2,65072,65136),w.fill(2,65280,65377),w.fill(2,65504,65511);for(let c=0;c<S.length;++c)w.fill(0,S[c][0],S[c][1]+1)}}wcwidth(c){return c<32?0:c<127?1:c<65536?w[c]:(function(g,_){let s,f=0,d=_.length-1;if(g<_[0][0]||g>_[d][1])return!1;for(;d>=f;)if(s=f+d>>1,g>_[s][1])f=s+1;else{if(!(g<_[s][0]))return!0;d=s-1}return!1})(c,o)?0:c>=131072&&c<=196605||c>=196608&&c<=262141?2:1}charProperties(c,g){let _=this.wcwidth(c),s=_===0&&g!==0;if(s){let f=p.UnicodeService.extractWidth(g);f===0?s=!1:f>_&&(_=f)}return p.UnicodeService.createPropertyValue(0,_,s)}}},3562:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.WriteBuffer=void 0;let p=h(7150),S=h(802);class o extends p.Disposable{constructor(c){super(),this._action=c,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this._register(new S.Emitter),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(c,g){if(g!==void 0&&this._syncCalls>g)return void(this._syncCalls=0);if(this._pendingData+=c.length,this._writeBuffer.push(c),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let _;for(this._isSyncWriting=!0;_=this._writeBuffer.shift();){this._action(_);let s=this._callbacks.shift();s&&s()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(c,g){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=c.length,this._writeBuffer.push(c),this._callbacks.push(g),void this._innerWrite();setTimeout((()=>this._innerWrite()))}this._pendingData+=c.length,this._writeBuffer.push(c),this._callbacks.push(g)}_innerWrite(c=0,g=!0){let _=c||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let s=this._writeBuffer[this._bufferOffset],f=this._action(s,g);if(f){let l=u=>performance.now()-_>=12?setTimeout((()=>this._innerWrite(0,u))):this._innerWrite(_,u);return void f.catch((u=>(queueMicrotask((()=>{throw u})),Promise.resolve(!1)))).then(l)}let d=this._callbacks[this._bufferOffset];if(d&&d(),this._bufferOffset++,this._pendingData-=s.length,performance.now()-_>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((()=>this._innerWrite()))):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}n.WriteBuffer=o},8693:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.parseColor=function(o){if(!o)return;let w=o.toLowerCase();if(w.indexOf("rgb:")===0){w=w.slice(4);let c=h.exec(w);if(c){let g=c[1]?15:c[4]?255:c[7]?4095:65535;return[Math.round(parseInt(c[1]||c[4]||c[7]||c[10],16)/g*255),Math.round(parseInt(c[2]||c[5]||c[8]||c[11],16)/g*255),Math.round(parseInt(c[3]||c[6]||c[9]||c[12],16)/g*255)]}}else if(w.indexOf("#")===0&&(w=w.slice(1),p.exec(w)&&[3,6,9,12].includes(w.length))){let c=w.length/3,g=[0,0,0];for(let _=0;_<3;++_){let s=parseInt(w.slice(c*_,c*_+c),16);g[_]=c===1?s<<4:c===2?s:c===3?s>>4:s>>8}return g}},n.toRgbString=function(o,w=16){let[c,g,_]=o;return`rgb:${S(c,w)}/${S(g,w)}/${S(_,w)}`};let h=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,p=/^[\da-f]+$/;function S(o,w){let c=o.toString(16),g=c.length<2?"0"+c:c;switch(w){case 4:return c[0];case 8:return g;case 12:return(g+g).slice(0,3);default:return g+g}}},1263:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.PAYLOAD_LIMIT=void 0,n.PAYLOAD_LIMIT=1e7},9823:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DcsHandler=n.DcsParser=void 0;let p=h(726),S=h(7262),o=h(1263),w=[];n.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=w,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=w}registerHandler(g,_){this._handlers[g]===void 0&&(this._handlers[g]=[]);let s=this._handlers[g];return s.push(_),{dispose:()=>{let f=s.indexOf(_);f!==-1&&s.splice(f,1)}}}clearHandler(g){this._handlers[g]&&delete this._handlers[g]}setHandlerFallback(g){this._handlerFb=g}reset(){if(this._active.length)for(let g=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;g>=0;--g)this._active[g].unhook(!1);this._stack.paused=!1,this._active=w,this._ident=0}hook(g,_){if(this.reset(),this._ident=g,this._active=this._handlers[g]||w,this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].hook(_);else this._handlerFb(this._ident,"HOOK",_)}put(g,_,s){if(this._active.length)for(let f=this._active.length-1;f>=0;f--)this._active[f].put(g,_,s);else this._handlerFb(this._ident,"PUT",(0,p.utf32ToString)(g,_,s))}unhook(g,_=!0){if(this._active.length){let s=!1,f=this._active.length-1,d=!1;if(this._stack.paused&&(f=this._stack.loopPosition-1,s=_,d=this._stack.fallThrough,this._stack.paused=!1),!d&&s===!1){for(;f>=0&&(s=this._active[f].unhook(g),s!==!0);f--)if(s instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=f,this._stack.fallThrough=!1,s;f--}for(;f>=0;f--)if(s=this._active[f].unhook(!1),s instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=f,this._stack.fallThrough=!0,s}else this._handlerFb(this._ident,"UNHOOK",g);this._active=w,this._ident=0}};let c=new S.Params;c.addParam(0),n.DcsHandler=class{constructor(g){this._handler=g,this._data="",this._params=c,this._hitLimit=!1}hook(g){this._params=g.length>1||g.params[0]?g.clone():c,this._data="",this._hitLimit=!1}put(g,_,s){this._hitLimit||(this._data+=(0,p.utf32ToString)(g,_,s),this._data.length>o.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}unhook(g){let _=!1;if(this._hitLimit)_=!1;else if(g&&(_=this._handler(this._data,this._params),_ instanceof Promise))return _.then((s=>(this._params=c,this._data="",this._hitLimit=!1,s)));return this._params=c,this._data="",this._hitLimit=!1,_}}},6717:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.EscapeSequenceParser=n.VT500_TRANSITION_TABLE=n.TransitionTable=void 0;let p=h(7150),S=h(7262),o=h(1346),w=h(9823);class c{constructor(f){this.table=new Uint8Array(f)}setDefault(f,d){this.table.fill(f<<4|d)}add(f,d,l,u){this.table[d<<8|f]=l<<4|u}addMany(f,d,l,u){for(let m=0;m<f.length;m++)this.table[d<<8|f[m]]=l<<4|u}}n.TransitionTable=c;let g=160;n.VT500_TRANSITION_TABLE=(function(){let s=new c(4095),f=Array.apply(null,Array(256)).map(((I,E)=>E)),d=(I,E)=>f.slice(I,E),l=d(32,127),u=d(0,24);u.push(25),u.push.apply(u,d(28,32));let m=d(0,14),v;for(v in s.setDefault(1,0),s.addMany(l,0,2,0),m)s.addMany([24,26,153,154],v,3,0),s.addMany(d(128,144),v,3,0),s.addMany(d(144,152),v,3,0),s.add(156,v,0,0),s.add(27,v,11,1),s.add(157,v,4,8),s.addMany([152,158,159],v,0,7),s.add(155,v,11,3),s.add(144,v,11,9);return s.addMany(u,0,3,0),s.addMany(u,1,3,1),s.add(127,1,0,1),s.addMany(u,8,0,8),s.addMany(u,3,3,3),s.add(127,3,0,3),s.addMany(u,4,3,4),s.add(127,4,0,4),s.addMany(u,6,3,6),s.addMany(u,5,3,5),s.add(127,5,0,5),s.addMany(u,2,3,2),s.add(127,2,0,2),s.add(93,1,4,8),s.addMany(l,8,5,8),s.add(127,8,5,8),s.addMany([156,27,24,26,7],8,6,0),s.addMany(d(28,32),8,0,8),s.addMany([88,94,95],1,0,7),s.addMany(l,7,0,7),s.addMany(u,7,0,7),s.add(156,7,0,0),s.add(127,7,0,7),s.add(91,1,11,3),s.addMany(d(64,127),3,7,0),s.addMany(d(48,60),3,8,4),s.addMany([60,61,62,63],3,9,4),s.addMany(d(48,60),4,8,4),s.addMany(d(64,127),4,7,0),s.addMany([60,61,62,63],4,0,6),s.addMany(d(32,64),6,0,6),s.add(127,6,0,6),s.addMany(d(64,127),6,0,0),s.addMany(d(32,48),3,9,5),s.addMany(d(32,48),5,9,5),s.addMany(d(48,64),5,0,6),s.addMany(d(64,127),5,7,0),s.addMany(d(32,48),4,9,5),s.addMany(d(32,48),1,9,2),s.addMany(d(32,48),2,9,2),s.addMany(d(48,127),2,10,0),s.addMany(d(48,80),1,10,0),s.addMany(d(81,88),1,10,0),s.addMany([89,90,92],1,10,0),s.addMany(d(96,127),1,10,0),s.add(80,1,11,9),s.addMany(u,9,0,9),s.add(127,9,0,9),s.addMany(d(28,32),9,0,9),s.addMany(d(32,48),9,9,12),s.addMany(d(48,60),9,8,10),s.addMany([60,61,62,63],9,9,10),s.addMany(u,11,0,11),s.addMany(d(32,128),11,0,11),s.addMany(d(28,32),11,0,11),s.addMany(u,10,0,10),s.add(127,10,0,10),s.addMany(d(28,32),10,0,10),s.addMany(d(48,60),10,8,10),s.addMany([60,61,62,63],10,0,11),s.addMany(d(32,48),10,9,12),s.addMany(u,12,0,12),s.add(127,12,0,12),s.addMany(d(28,32),12,0,12),s.addMany(d(32,48),12,9,12),s.addMany(d(48,64),12,0,11),s.addMany(d(64,127),12,12,13),s.addMany(d(64,127),10,12,13),s.addMany(d(64,127),9,12,13),s.addMany(u,13,13,13),s.addMany(l,13,13,13),s.add(127,13,0,13),s.addMany([27,156,24,26],13,14,0),s.add(g,0,2,0),s.add(g,8,5,8),s.add(g,6,0,6),s.add(g,11,0,11),s.add(g,13,13,13),s})();class _ extends p.Disposable{constructor(f=n.VT500_TRANSITION_TABLE){super(),this._transitions=f,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new S.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(d,l,u)=>{},this._executeHandlerFb=d=>{},this._csiHandlerFb=(d,l)=>{},this._escHandlerFb=d=>{},this._errorHandlerFb=d=>d,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register((0,p.toDisposable)((()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)}))),this._oscParser=this._register(new o.OscParser),this._dcsParser=this._register(new w.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},(()=>!0))}_identifier(f,d=[64,126]){let l=0;if(f.prefix){if(f.prefix.length>1)throw new Error("only one byte as prefix supported");if(l=f.prefix.charCodeAt(0),l&&60>l||l>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(f.intermediates){if(f.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let m=0;m<f.intermediates.length;++m){let v=f.intermediates.charCodeAt(m);if(32>v||v>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");l<<=8,l|=v}}if(f.final.length!==1)throw new Error("final must be a single byte");let u=f.final.charCodeAt(0);if(d[0]>u||u>d[1])throw new Error(`final must be in range ${d[0]} .. ${d[1]}`);return l<<=8,l|=u,l}identToString(f){let d=[];for(;f;)d.push(String.fromCharCode(255&f)),f>>=8;return d.reverse().join("")}setPrintHandler(f){this._printHandler=f}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(f,d){let l=this._identifier(f,[48,126]);this._escHandlers[l]===void 0&&(this._escHandlers[l]=[]);let u=this._escHandlers[l];return u.push(d),{dispose:()=>{let m=u.indexOf(d);m!==-1&&u.splice(m,1)}}}clearEscHandler(f){this._escHandlers[this._identifier(f,[48,126])]&&delete this._escHandlers[this._identifier(f,[48,126])]}setEscHandlerFallback(f){this._escHandlerFb=f}setExecuteHandler(f,d){this._executeHandlers[f.charCodeAt(0)]=d}clearExecuteHandler(f){this._executeHandlers[f.charCodeAt(0)]&&delete this._executeHandlers[f.charCodeAt(0)]}setExecuteHandlerFallback(f){this._executeHandlerFb=f}registerCsiHandler(f,d){let l=this._identifier(f);this._csiHandlers[l]===void 0&&(this._csiHandlers[l]=[]);let u=this._csiHandlers[l];return u.push(d),{dispose:()=>{let m=u.indexOf(d);m!==-1&&u.splice(m,1)}}}clearCsiHandler(f){this._csiHandlers[this._identifier(f)]&&delete this._csiHandlers[this._identifier(f)]}setCsiHandlerFallback(f){this._csiHandlerFb=f}registerDcsHandler(f,d){return this._dcsParser.registerHandler(this._identifier(f),d)}clearDcsHandler(f){this._dcsParser.clearHandler(this._identifier(f))}setDcsHandlerFallback(f){this._dcsParser.setHandlerFallback(f)}registerOscHandler(f,d){return this._oscParser.registerHandler(f,d)}clearOscHandler(f){this._oscParser.clearHandler(f)}setOscHandlerFallback(f){this._oscParser.setHandlerFallback(f)}setErrorHandler(f){this._errorHandler=f}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(f,d,l,u,m){this._parseStack.state=f,this._parseStack.handlers=d,this._parseStack.handlerPos=l,this._parseStack.transition=u,this._parseStack.chunkPos=m}parse(f,d,l){let u,m=0,v=0,I=0;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,I=this._parseStack.chunkPos+1;else{if(l===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");let E=this._parseStack.handlers,N=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(l===!1&&N>-1){for(;N>=0&&(u=E[N](this._params),u!==!0);N--)if(u instanceof Promise)return this._parseStack.handlerPos=N,u}this._parseStack.handlers=[];break;case 4:if(l===!1&&N>-1){for(;N>=0&&(u=E[N](),u!==!0);N--)if(u instanceof Promise)return this._parseStack.handlerPos=N,u}this._parseStack.handlers=[];break;case 6:if(m=f[this._parseStack.chunkPos],u=this._dcsParser.unhook(m!==24&&m!==26,l),u)return u;m===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(m=f[this._parseStack.chunkPos],u=this._oscParser.end(m!==24&&m!==26,l),u)return u;m===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,I=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=15&this._parseStack.transition}for(let E=I;E<d;++E){switch(m=f[E],v=this._transitions.table[this.currentState<<8|(m<160?m:g)],v>>4){case 2:for(let C=E+1;;++C){if(C>=d||(m=f[C])<32||m>126&&m<g){this._printHandler(f,E,C),E=C-1;break}if(++C>=d||(m=f[C])<32||m>126&&m<g){this._printHandler(f,E,C),E=C-1;break}if(++C>=d||(m=f[C])<32||m>126&&m<g){this._printHandler(f,E,C),E=C-1;break}if(++C>=d||(m=f[C])<32||m>126&&m<g){this._printHandler(f,E,C),E=C-1;break}}break;case 3:this._executeHandlers[m]?this._executeHandlers[m]():this._executeHandlerFb(m),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:E,code:m,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let N=this._csiHandlers[this._collect<<8|m],O=N?N.length-1:-1;for(;O>=0&&(u=N[O](this._params),u!==!0);O--)if(u instanceof Promise)return this._preserveStack(3,N,O,v,E),u;O<0&&this._csiHandlerFb(this._collect<<8|m,this._params),this.precedingJoinState=0;break;case 8:do switch(m){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(m-48)}while(++E<d&&(m=f[E])>47&&m<60);E--;break;case 9:this._collect<<=8,this._collect|=m;break;case 10:let A=this._escHandlers[this._collect<<8|m],D=A?A.length-1:-1;for(;D>=0&&(u=A[D](),u!==!0);D--)if(u instanceof Promise)return this._preserveStack(4,A,D,v,E),u;D<0&&this._escHandlerFb(this._collect<<8|m),this.precedingJoinState=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|m,this._params);break;case 13:for(let C=E+1;;++C)if(C>=d||(m=f[C])===24||m===26||m===27||m>127&&m<g){this._dcsParser.put(f,E,C),E=C-1;break}break;case 14:if(u=this._dcsParser.unhook(m!==24&&m!==26),u)return this._preserveStack(6,[],0,v,E),u;m===27&&(v|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0;break;case 4:this._oscParser.start();break;case 5:for(let C=E+1;;C++)if(C>=d||(m=f[C])<32||m>127&&m<g){this._oscParser.put(f,E,C),E=C-1;break}break;case 6:if(u=this._oscParser.end(m!==24&&m!==26),u)return this._preserveStack(5,[],0,v,E),u;m===27&&(v|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0}this.currentState=15&v}}}n.EscapeSequenceParser=_},1346:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.OscHandler=n.OscParser=void 0;let p=h(1263),S=h(726),o=[];n.OscParser=class{constructor(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(w,c){this._handlers[w]===void 0&&(this._handlers[w]=[]);let g=this._handlers[w];return g.push(c),{dispose:()=>{let _=g.indexOf(c);_!==-1&&g.splice(_,1)}}}clearHandler(w){this._handlers[w]&&delete this._handlers[w]}setHandlerFallback(w){this._handlerFb=w}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(this._state===2)for(let w=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;w>=0;--w)this._active[w].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||o,this._active.length)for(let w=this._active.length-1;w>=0;w--)this._active[w].start();else this._handlerFb(this._id,"START")}_put(w,c,g){if(this._active.length)for(let _=this._active.length-1;_>=0;_--)this._active[_].put(w,c,g);else this._handlerFb(this._id,"PUT",(0,S.utf32ToString)(w,c,g))}start(){this.reset(),this._state=1}put(w,c,g){if(this._state!==3){if(this._state===1)for(;c<g;){let _=w[c++];if(_===59){this._state=2,this._start();break}if(_<48||57<_)return void(this._state=3);this._id===-1&&(this._id=0),this._id=10*this._id+_-48}this._state===2&&g-c>0&&this._put(w,c,g)}}end(w,c=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),this._active.length){let g=!1,_=this._active.length-1,s=!1;if(this._stack.paused&&(_=this._stack.loopPosition-1,g=c,s=this._stack.fallThrough,this._stack.paused=!1),!s&&g===!1){for(;_>=0&&(g=this._active[_].end(w),g!==!0);_--)if(g instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=_,this._stack.fallThrough=!1,g;_--}for(;_>=0;_--)if(g=this._active[_].end(!1),g instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=_,this._stack.fallThrough=!0,g}else this._handlerFb(this._id,"END",w);this._active=o,this._id=-1,this._state=0}}},n.OscHandler=class{constructor(w){this._handler=w,this._data="",this._hitLimit=!1}start(){this._data="",this._hitLimit=!1}put(w,c,g){this._hitLimit||(this._data+=(0,S.utf32ToString)(w,c,g),this._data.length>p.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}end(w){let c=!1;if(this._hitLimit)c=!1;else if(w&&(c=this._handler(this._data),c instanceof Promise))return c.then((g=>(this._data="",this._hitLimit=!1,g)));return this._data="",this._hitLimit=!1,c}}},7262:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Params=void 0;let h=2147483647;class p{static fromArray(o){let w=new p;if(!o.length)return w;for(let c=Array.isArray(o[0])?1:0;c<o.length;++c){let g=o[c];if(Array.isArray(g))for(let _=0;_<g.length;++_)w.addSubParam(g[_]);else w.addParam(g)}return w}constructor(o=32,w=32){if(this.maxLength=o,this.maxSubParamsLength=w,w>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(o),this.length=0,this._subParams=new Int32Array(w),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(o),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){let o=new p(this.maxLength,this.maxSubParamsLength);return o.params.set(this.params),o.length=this.length,o._subParams.set(this._subParams),o._subParamsLength=this._subParamsLength,o._subParamsIdx.set(this._subParamsIdx),o._rejectDigits=this._rejectDigits,o._rejectSubDigits=this._rejectSubDigits,o._digitIsSub=this._digitIsSub,o}toArray(){let o=[];for(let w=0;w<this.length;++w){o.push(this.params[w]);let c=this._subParamsIdx[w]>>8,g=255&this._subParamsIdx[w];g-c>0&&o.push(Array.prototype.slice.call(this._subParams,c,g))}return o}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(o){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(o<-1)throw new Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=o>h?h:o}}addSubParam(o){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(o<-1)throw new Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]=o>h?h:o,this._subParamsIdx[this.length-1]++}}hasSubParams(o){return(255&this._subParamsIdx[o])-(this._subParamsIdx[o]>>8)>0}getSubParams(o){let w=this._subParamsIdx[o]>>8,c=255&this._subParamsIdx[o];return c-w>0?this._subParams.subarray(w,c):null}getSubParamsAll(){let o={};for(let w=0;w<this.length;++w){let c=this._subParamsIdx[w]>>8,g=255&this._subParamsIdx[w];g-c>0&&(o[w]=this._subParams.slice(c,g))}return o}addDigit(o){let w;if(this._rejectDigits||!(w=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let c=this._digitIsSub?this._subParams:this.params,g=c[w-1];c[w-1]=~g?Math.min(10*g+o,h):o}}n.Params=p},3027:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.AddonManager=void 0,n.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let h=this._addons.length-1;h>=0;h--)this._addons[h].instance.dispose()}loadAddon(h,p){let S={instance:p,dispose:p.dispose,isDisposed:!1};this._addons.push(S),p.dispose=()=>this._wrappedAddonDispose(S),p.activate(h)}_wrappedAddonDispose(h){if(h.isDisposed)return;let p=-1;for(let S=0;S<this._addons.length;S++)if(this._addons[S]===h){p=S;break}if(p===-1)throw new Error("Could not dispose an addon that has not been loaded");h.isDisposed=!0,h.dispose.apply(h.instance),this._addons.splice(p,1)}}},3235:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferApiView=void 0;let p=h(793),S=h(3055);n.BufferApiView=class{constructor(o,w){this._buffer=o,this.type=w}init(o){return this._buffer=o,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(o){let w=this._buffer.lines.get(o);if(w)return new p.BufferLineApiView(w)}getNullCell(){return new S.CellData}}},793:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferLineApiView=void 0;let p=h(3055);n.BufferLineApiView=class{constructor(S){this._line=S}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(S,o){if(!(S<0||S>=this._line.length))return o?(this._line.loadCell(S,o),o):this._line.loadCell(S,new p.CellData)}translateToString(S,o,w){return this._line.translateToString(S,o,w)}}},5101:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferNamespaceApi=void 0;let p=h(3235),S=h(7150),o=h(802);class w extends S.Disposable{constructor(g){super(),this._core=g,this._onBufferChange=this._register(new o.Emitter),this.onBufferChange=this._onBufferChange.event,this._normal=new p.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new p.BufferApiView(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)}}n.BufferNamespaceApi=w},6097:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ParserApi=void 0,n.ParserApi=class{constructor(h){this._core=h}registerCsiHandler(h,p){return this._core.registerCsiHandler(h,(S=>p(S.toArray())))}addCsiHandler(h,p){return this.registerCsiHandler(h,p)}registerDcsHandler(h,p){return this._core.registerDcsHandler(h,((S,o)=>p(S,o.toArray())))}addDcsHandler(h,p){return this.registerDcsHandler(h,p)}registerEscHandler(h,p){return this._core.registerEscHandler(h,p)}addEscHandler(h,p){return this.registerEscHandler(h,p)}registerOscHandler(h,p){return this._core.registerOscHandler(h,p)}addOscHandler(h,p){return this.registerOscHandler(h,p)}}},4335:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeApi=void 0,n.UnicodeApi=class{constructor(h){this._core=h}register(h){this._core.unicodeService.register(h)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(h){this._core.unicodeService.activeVersion=h}}},9640:function(T,n,h){var p=this&&this.__decorate||function(s,f,d,l){var u,m=arguments.length,v=m<3?f:l===null?l=Object.getOwnPropertyDescriptor(f,d):l;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")v=Reflect.decorate(s,f,d,l);else for(var I=s.length-1;I>=0;I--)(u=s[I])&&(v=(m<3?u(v):m>3?u(f,d,v):u(f,d))||v);return m>3&&v&&Object.defineProperty(f,d,v),v},S=this&&this.__param||function(s,f){return function(d,l){f(d,l,s)}};Object.defineProperty(n,"__esModule",{value:!0}),n.BufferService=n.MINIMUM_ROWS=n.MINIMUM_COLS=void 0;let o=h(7150),w=h(4097),c=h(6501),g=h(802);n.MINIMUM_COLS=2,n.MINIMUM_ROWS=1;let _=class extends o.Disposable{get buffer(){return this.buffers.active}constructor(s){super(),this.isUserScrolling=!1,this._onResize=this._register(new g.Emitter),this.onResize=this._onResize.event,this._onScroll=this._register(new g.Emitter),this.onScroll=this._onScroll.event,this.cols=Math.max(s.rawOptions.cols||0,n.MINIMUM_COLS),this.rows=Math.max(s.rawOptions.rows||0,n.MINIMUM_ROWS),this.buffers=this._register(new w.BufferSet(s,this)),this._register(this.buffers.onBufferActivate((f=>{this._onScroll.fire(f.activeBuffer.ydisp)})))}resize(s,f){let d=this.cols!==s,l=this.rows!==f;this.cols=s,this.rows=f,this.buffers.resize(s,f),this._onResize.fire({cols:s,rows:f,colsChanged:d,rowsChanged:l})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(s,f=!1){let d=this.buffer,l;l=this._cachedBlankLine,l&&l.length===this.cols&&l.getFg(0)===s.fg&&l.getBg(0)===s.bg||(l=d.getBlankLine(s,f),this._cachedBlankLine=l),l.isWrapped=f;let u=d.ybase+d.scrollTop,m=d.ybase+d.scrollBottom;if(d.scrollTop===0){let v=d.lines.isFull;m===d.lines.length-1?v?d.lines.recycle().copyFrom(l):d.lines.push(l.clone()):d.lines.splice(m+1,0,l.clone()),v?this.isUserScrolling&&(d.ydisp=Math.max(d.ydisp-1,0)):(d.ybase++,this.isUserScrolling||d.ydisp++)}else{let v=m-u+1;d.lines.shiftElements(u+1,v-1,-1),d.lines.set(m,l.clone())}this.isUserScrolling||(d.ydisp=d.ybase),this._onScroll.fire(d.ydisp)}scrollLines(s,f){let d=this.buffer;if(s<0){if(d.ydisp===0)return;this.isUserScrolling=!0}else s+d.ydisp>=d.ybase&&(this.isUserScrolling=!1);let l=d.ydisp;d.ydisp=Math.max(Math.min(d.ydisp+s,d.ybase),0),l!==d.ydisp&&(f||this._onScroll.fire(d.ydisp))}};n.BufferService=_,n.BufferService=_=p([S(0,c.IOptionsService)],_)},5746:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CharsetService=void 0,n.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(h){this.glevel=h,this.charset=this._charsets[h]}setgCharset(h,p){this._charsets[h]=p,this.glevel===h&&(this.charset=p)}}},7792:function(T,n,h){var p=this&&this.__decorate||function(l,u,m,v){var I,E=arguments.length,N=E<3?u:v===null?v=Object.getOwnPropertyDescriptor(u,m):v;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")N=Reflect.decorate(l,u,m,v);else for(var O=l.length-1;O>=0;O--)(I=l[O])&&(N=(E<3?I(N):E>3?I(u,m,N):I(u,m))||N);return E>3&&N&&Object.defineProperty(u,m,N),N},S=this&&this.__param||function(l,u){return function(m,v){u(m,v,l)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CoreMouseService=void 0;let o=h(6501),w=h(7150),c=h(802),g={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:l=>l.button!==4&&l.action===1&&(l.ctrl=!1,l.alt=!1,l.shift=!1,!0)},VT200:{events:19,restrict:l=>l.action!==32},DRAG:{events:23,restrict:l=>l.action!==32||l.button!==3},ANY:{events:31,restrict:l=>!0}};function _(l,u){let m=(l.ctrl?16:0)|(l.shift?4:0)|(l.alt?8:0);return l.button===4?(m|=64,m|=l.action):(m|=3&l.button,4&l.button&&(m|=64),8&l.button&&(m|=128),l.action===32?m|=32:l.action!==0||u||(m|=3)),m}let s=String.fromCharCode,f={DEFAULT:l=>{let u=[_(l,!1)+32,l.col+32,l.row+32];return u[0]>255||u[1]>255||u[2]>255?"":`\x1B[M${s(u[0])}${s(u[1])}${s(u[2])}`},SGR:l=>{let u=l.action===0&&l.button!==4?"m":"M";return`\x1B[<${_(l,!0)};${l.col};${l.row}${u}`},SGR_PIXELS:l=>{let u=l.action===0&&l.button!==4?"m":"M";return`\x1B[<${_(l,!0)};${l.x};${l.y}${u}`}},d=class extends w.Disposable{constructor(l,u,m){super(),this._bufferService=l,this._coreService=u,this._optionsService=m,this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._lastEvent=null,this._wheelPartialScroll=0,this._onProtocolChange=this._register(new c.Emitter),this.onProtocolChange=this._onProtocolChange.event;for(let v of Object.keys(g))this.addProtocol(v,g[v]);for(let v of Object.keys(f))this.addEncoding(v,f[v]);this.reset()}addProtocol(l,u){this._protocols[l]=u}addEncoding(l,u){this._encodings[l]=u}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(l){if(!this._protocols[l])throw new Error(`unknown protocol "${l}"`);this._activeProtocol=l,this._onProtocolChange.fire(this._protocols[l].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(l){if(!this._encodings[l])throw new Error(`unknown encoding "${l}"`);this._activeEncoding=l}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT",this._lastEvent=null,this._wheelPartialScroll=0}consumeWheelEvent(l,u,m){if(l.deltaY===0||l.shiftKey||u===void 0||m===void 0)return 0;let v=u/m,I=this._applyScrollModifier(l.deltaY,l);return l.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(I/=v+0,Math.abs(l.deltaY)<50&&(I*=.3),this._wheelPartialScroll+=I,I=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):l.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(I*=this._bufferService.rows),I}_applyScrollModifier(l,u){return u.altKey||u.ctrlKey||u.shiftKey?l*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:l*this._optionsService.rawOptions.scrollSensitivity}triggerMouseEvent(l){if(l.col<0||l.col>=this._bufferService.cols||l.row<0||l.row>=this._bufferService.rows||l.button===4&&l.action===32||l.button===3&&l.action!==32||l.button!==4&&(l.action===2||l.action===3)||(l.col++,l.row++,l.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,l,this._activeEncoding==="SGR_PIXELS"))||!this._protocols[this._activeProtocol].restrict(l))return!1;let u=this._encodings[this._activeEncoding](l);return u&&(this._activeEncoding==="DEFAULT"?this._coreService.triggerBinaryEvent(u):this._coreService.triggerDataEvent(u,!0)),this._lastEvent=l,!0}explainEvents(l){return{down:!!(1&l),up:!!(2&l),drag:!!(4&l),move:!!(8&l),wheel:!!(16&l)}}_equalEvents(l,u,m){if(m){if(l.x!==u.x||l.y!==u.y)return!1}else if(l.col!==u.col||l.row!==u.row)return!1;return l.button===u.button&&l.action===u.action&&l.ctrl===u.ctrl&&l.alt===u.alt&&l.shift===u.shift}};n.CoreMouseService=d,n.CoreMouseService=d=p([S(0,o.IBufferService),S(1,o.ICoreService),S(2,o.IOptionsService)],d)},4071:function(T,n,h){var p=this&&this.__decorate||function(d,l,u,m){var v,I=arguments.length,E=I<3?l:m===null?m=Object.getOwnPropertyDescriptor(l,u):m;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")E=Reflect.decorate(d,l,u,m);else for(var N=d.length-1;N>=0;N--)(v=d[N])&&(E=(I<3?v(E):I>3?v(l,u,E):v(l,u))||E);return I>3&&E&&Object.defineProperty(l,u,E),E},S=this&&this.__param||function(d,l){return function(u,m){l(u,m,d)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CoreService=void 0;let o=h(7453),w=h(7150),c=h(6501),g=h(802),_=Object.freeze({insertMode:!1}),s=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,wraparound:!0}),f=class extends w.Disposable{constructor(d,l,u){super(),this._bufferService=d,this._logService=l,this._optionsService=u,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this._register(new g.Emitter),this.onData=this._onData.event,this._onUserInput=this._register(new g.Emitter),this.onUserInput=this._onUserInput.event,this._onBinary=this._register(new g.Emitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this._register(new g.Emitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=(0,o.clone)(_),this.decPrivateModes=(0,o.clone)(s)}reset(){this.modes=(0,o.clone)(_),this.decPrivateModes=(0,o.clone)(s)}triggerDataEvent(d,l=!1){if(this._optionsService.rawOptions.disableStdin)return;let u=this._bufferService.buffer;l&&this._optionsService.rawOptions.scrollOnUserInput&&u.ybase!==u.ydisp&&this._onRequestScrollToBottom.fire(),l&&this._onUserInput.fire(),this._logService.debug(`sending data "${d}"`),this._logService.trace("sending data (codes)",(()=>d.split("").map((m=>m.charCodeAt(0))))),this._onData.fire(d)}triggerBinaryEvent(d){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${d}"`),this._logService.trace("sending binary (codes)",(()=>d.split("").map((l=>l.charCodeAt(0))))),this._onBinary.fire(d))}};n.CoreService=f,n.CoreService=f=p([S(0,c.IBufferService),S(1,c.ILogService),S(2,c.IOptionsService)],f)},6025:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.InstantiationService=n.ServiceCollection=void 0;let p=h(6501),S=h(6201);class o{constructor(...c){this._entries=new Map;for(let[g,_]of c)this.set(g,_)}set(c,g){let _=this._entries.get(c);return this._entries.set(c,g),_}forEach(c){for(let[g,_]of this._entries.entries())c(g,_)}has(c){return this._entries.has(c)}get(c){return this._entries.get(c)}}n.ServiceCollection=o,n.InstantiationService=class{constructor(){this._services=new o,this._services.set(p.IInstantiationService,this)}setService(w,c){this._services.set(w,c)}getService(w){return this._services.get(w)}createInstance(w,...c){let g=(0,S.getServiceDependencies)(w).sort(((f,d)=>f.index-d.index)),_=[];for(let f of g){let d=this._services.get(f.id);if(!d)throw new Error(`[createInstance] ${w.name} depends on UNKNOWN service ${f.id._id}.`);_.push(d)}let s=g.length>0?g[0].index:c.length;if(c.length!==s)throw new Error(`[createInstance] First service dependency of ${w.name} at position ${s+1} conflicts with ${c.length} static arguments`);return new w(...c,..._)}}},7276:function(T,n,h){var p=this&&this.__decorate||function(s,f,d,l){var u,m=arguments.length,v=m<3?f:l===null?l=Object.getOwnPropertyDescriptor(f,d):l;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")v=Reflect.decorate(s,f,d,l);else for(var I=s.length-1;I>=0;I--)(u=s[I])&&(v=(m<3?u(v):m>3?u(f,d,v):u(f,d))||v);return m>3&&v&&Object.defineProperty(f,d,v),v},S=this&&this.__param||function(s,f){return function(d,l){f(d,l,s)}};Object.defineProperty(n,"__esModule",{value:!0}),n.LogService=void 0,n.setTraceLogger=function(s){g=s},n.traceCall=function(s,f,d){if(typeof d.value!="function")throw new Error("not supported");let l=d.value;d.value=function(...u){if(g.logLevel!==w.LogLevelEnum.TRACE)return l.apply(this,u);g.trace(`GlyphRenderer#${l.name}(${u.map((v=>JSON.stringify(v))).join(", ")})`);let m=l.apply(this,u);return g.trace(`GlyphRenderer#${l.name} return`,m),m}};let o=h(7150),w=h(6501),c={trace:w.LogLevelEnum.TRACE,debug:w.LogLevelEnum.DEBUG,info:w.LogLevelEnum.INFO,warn:w.LogLevelEnum.WARN,error:w.LogLevelEnum.ERROR,off:w.LogLevelEnum.OFF},g,_=class extends o.Disposable{get logLevel(){return this._logLevel}constructor(s){super(),this._optionsService=s,this._logLevel=w.LogLevelEnum.OFF,this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",(()=>this._updateLogLevel()))),g=this}_updateLogLevel(){this._logLevel=c[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(s){for(let f=0;f<s.length;f++)typeof s[f]=="function"&&(s[f]=s[f]())}_log(s,f,d){this._evalLazyOptionalParams(d),s.call(console,(this._optionsService.options.logger?"":"xterm.js: ")+f,...d)}trace(s,...f){this._logLevel<=w.LogLevelEnum.TRACE&&this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger)??console.log,s,f)}debug(s,...f){this._logLevel<=w.LogLevelEnum.DEBUG&&this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger)??console.log,s,f)}info(s,...f){this._logLevel<=w.LogLevelEnum.INFO&&this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger)??console.info,s,f)}warn(s,...f){this._logLevel<=w.LogLevelEnum.WARN&&this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger)??console.warn,s,f)}error(s,...f){this._logLevel<=w.LogLevelEnum.ERROR&&this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger)??console.error,s,f)}};n.LogService=_,n.LogService=_=p([S(0,w.IOptionsService)],_)},56:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.OptionsService=n.DEFAULT_OPTIONS=void 0;let p=h(7150),S=h(701),o=h(802);n.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",customGlyphs:!0,drawBoldTextInBrightColors:!0,documentOverride:null,fastScrollModifier:"alt",fastScrollSensitivity:5,fontFamily:"monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollOnEraseInDisplay:!1,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},reflowCursorLine:!1,rescaleOverlappingGlyphs:!1,rightClickSelectsWord:S.isMac,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",cancelEvents:!1,overviewRuler:{}};let w=["normal","bold","100","200","300","400","500","600","700","800","900"];class c extends p.Disposable{constructor(_){super(),this._onOptionChange=this._register(new o.Emitter),this.onOptionChange=this._onOptionChange.event;let s={...n.DEFAULT_OPTIONS};for(let f in _)if(f in s)try{let d=_[f];s[f]=this._sanitizeAndValidateOption(f,d)}catch(d){console.error(d)}this.rawOptions=s,this.options={...s},this._setupOptions(),this._register((0,p.toDisposable)((()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null})))}onSpecificOptionChange(_,s){return this.onOptionChange((f=>{f===_&&s(this.rawOptions[_])}))}onMultipleOptionChange(_,s){return this.onOptionChange((f=>{_.indexOf(f)!==-1&&s()}))}_setupOptions(){let _=f=>{if(!(f in n.DEFAULT_OPTIONS))throw new Error(`No option with key "${f}"`);return this.rawOptions[f]},s=(f,d)=>{if(!(f in n.DEFAULT_OPTIONS))throw new Error(`No option with key "${f}"`);d=this._sanitizeAndValidateOption(f,d),this.rawOptions[f]!==d&&(this.rawOptions[f]=d,this._onOptionChange.fire(f))};for(let f in this.rawOptions){let d={get:_.bind(this,f),set:s.bind(this,f)};Object.defineProperty(this.options,f,d)}}_sanitizeAndValidateOption(_,s){switch(_){case"cursorStyle":if(s||(s=n.DEFAULT_OPTIONS[_]),!(function(f){return f==="block"||f==="underline"||f==="bar"})(s))throw new Error(`"${s}" is not a valid value for ${_}`);break;case"wordSeparator":s||(s=n.DEFAULT_OPTIONS[_]);break;case"fontWeight":case"fontWeightBold":if(typeof s=="number"&&1<=s&&s<=1e3)break;s=w.includes(s)?s:n.DEFAULT_OPTIONS[_];break;case"cursorWidth":s=Math.floor(s);case"lineHeight":case"tabStopWidth":if(s<1)throw new Error(`${_} cannot be less than 1, value: ${s}`);break;case"minimumContrastRatio":s=Math.max(1,Math.min(21,Math.round(10*s)/10));break;case"scrollback":if((s=Math.min(s,4294967295))<0)throw new Error(`${_} cannot be less than 0, value: ${s}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(s<=0)throw new Error(`${_} cannot be less than or equal to 0, value: ${s}`);break;case"rows":case"cols":if(!s&&s!==0)throw new Error(`${_} must be numeric, value: ${s}`);break;case"windowsPty":s=s??{}}return s}}n.OptionsService=c},8811:function(T,n,h){var p=this&&this.__decorate||function(c,g,_,s){var f,d=arguments.length,l=d<3?g:s===null?s=Object.getOwnPropertyDescriptor(g,_):s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")l=Reflect.decorate(c,g,_,s);else for(var u=c.length-1;u>=0;u--)(f=c[u])&&(l=(d<3?f(l):d>3?f(g,_,l):f(g,_))||l);return d>3&&l&&Object.defineProperty(g,_,l),l},S=this&&this.__param||function(c,g){return function(_,s){g(_,s,c)}};Object.defineProperty(n,"__esModule",{value:!0}),n.OscLinkService=void 0;let o=h(6501),w=class{constructor(c){this._bufferService=c,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(c){let g=this._bufferService.buffer;if(c.id===void 0){let u=g.addMarker(g.ybase+g.y),m={data:c,id:this._nextId++,lines:[u]};return u.onDispose((()=>this._removeMarkerFromLink(m,u))),this._dataByLinkId.set(m.id,m),m.id}let _=c,s=this._getEntryIdKey(_),f=this._entriesWithId.get(s);if(f)return this.addLineToLink(f.id,g.ybase+g.y),f.id;let d=g.addMarker(g.ybase+g.y),l={id:this._nextId++,key:this._getEntryIdKey(_),data:_,lines:[d]};return d.onDispose((()=>this._removeMarkerFromLink(l,d))),this._entriesWithId.set(l.key,l),this._dataByLinkId.set(l.id,l),l.id}addLineToLink(c,g){let _=this._dataByLinkId.get(c);if(_&&_.lines.every((s=>s.line!==g))){let s=this._bufferService.buffer.addMarker(g);_.lines.push(s),s.onDispose((()=>this._removeMarkerFromLink(_,s)))}}getLinkData(c){return this._dataByLinkId.get(c)?.data}_getEntryIdKey(c){return`${c.id};;${c.uri}`}_removeMarkerFromLink(c,g){let _=c.lines.indexOf(g);_!==-1&&(c.lines.splice(_,1),c.lines.length===0&&(c.data.id!==void 0&&this._entriesWithId.delete(c.key),this._dataByLinkId.delete(c.id)))}};n.OscLinkService=w,n.OscLinkService=w=p([S(0,o.IBufferService)],w)},6201:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.serviceRegistry=void 0,n.getServiceDependencies=function(S){return S[p]||[]},n.createDecorator=function(S){if(n.serviceRegistry.has(S))return n.serviceRegistry.get(S);let o=function(w,c,g){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");(function(_,s,f){s[h]===s?s[p].push({id:_,index:f}):(s[p]=[{id:_,index:f}],s[h]=s)})(o,w,g)};return o._id=S,n.serviceRegistry.set(S,o),o};let h="di$target",p="di$dependencies";n.serviceRegistry=new Map},6501:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.IDecorationService=n.IUnicodeService=n.IOscLinkService=n.IOptionsService=n.ILogService=n.LogLevelEnum=n.IInstantiationService=n.ICharsetService=n.ICoreService=n.ICoreMouseService=n.IBufferService=void 0;let p=h(6201);var S;n.IBufferService=(0,p.createDecorator)("BufferService"),n.ICoreMouseService=(0,p.createDecorator)("CoreMouseService"),n.ICoreService=(0,p.createDecorator)("CoreService"),n.ICharsetService=(0,p.createDecorator)("CharsetService"),n.IInstantiationService=(0,p.createDecorator)("InstantiationService"),(function(o){o[o.TRACE=0]="TRACE",o[o.DEBUG=1]="DEBUG",o[o.INFO=2]="INFO",o[o.WARN=3]="WARN",o[o.ERROR=4]="ERROR",o[o.OFF=5]="OFF"})(S||(n.LogLevelEnum=S={})),n.ILogService=(0,p.createDecorator)("LogService"),n.IOptionsService=(0,p.createDecorator)("OptionsService"),n.IOscLinkService=(0,p.createDecorator)("OscLinkService"),n.IUnicodeService=(0,p.createDecorator)("UnicodeService"),n.IDecorationService=(0,p.createDecorator)("DecorationService")},6415:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeService=void 0;let p=h(7428),S=h(802);class o{static extractShouldJoin(c){return!!(1&c)}static extractWidth(c){return c>>1&3}static extractCharKind(c){return c>>3}static createPropertyValue(c,g,_=!1){return(16777215&c)<<3|(3&g)<<1|(_?1:0)}constructor(){this._providers=Object.create(null),this._active="",this._onChange=new S.Emitter,this.onChange=this._onChange.event;let c=new p.UnicodeV6;this.register(c),this._active=c.version,this._activeProvider=c}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(c){if(!this._providers[c])throw new Error(`unknown Unicode version "${c}"`);this._active=c,this._activeProvider=this._providers[c],this._onChange.fire(c)}register(c){this._providers[c.version]=c}wcwidth(c){return this._activeProvider.wcwidth(c)}getStringCellWidth(c){let g=0,_=0,s=c.length;for(let f=0;f<s;++f){let d=c.charCodeAt(f);if(55296<=d&&d<=56319){if(++f>=s)return g+this.wcwidth(d);let m=c.charCodeAt(f);56320<=m&&m<=57343?d=1024*(d-55296)+m-56320+65536:g+=this.wcwidth(m)}let l=this.charProperties(d,_),u=o.extractWidth(l);o.extractShouldJoin(l)&&(u-=o.extractWidth(_)),g+=u,_=l}return g}charProperties(c,g){return this._activeProvider.charProperties(c,g)}}n.UnicodeService=o},5856:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Terminal=void 0;let p=h(6107),S=h(5777),o=h(802);class w extends S.CoreTerminal{constructor(g={}){super(g),this._onBell=this._register(new o.Emitter),this.onBell=this._onBell.event,this._onCursorMove=this._register(new o.Emitter),this.onCursorMove=this._onCursorMove.event,this._onTitleChange=this._register(new o.Emitter),this.onTitleChange=this._onTitleChange.event,this._onA11yCharEmitter=this._register(new o.Emitter),this.onA11yChar=this._onA11yCharEmitter.event,this._onA11yTabEmitter=this._register(new o.Emitter),this.onA11yTab=this._onA11yTabEmitter.event,this._setup(),this._register(this._inputHandler.onRequestBell((()=>this.bell()))),this._register(this._inputHandler.onRequestReset((()=>this.reset()))),this._register(o.Event.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(o.Event.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(o.Event.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(o.Event.forward(this._inputHandler.onA11yTab,this._onA11yTabEmitter))}get buffer(){return this.buffers.active}get markers(){return this.buffer.markers}addMarker(g){if(this.buffer===this.buffers.normal)return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+g)}bell(){this._onBell.fire()}input(g,_=!0){this.coreService.triggerDataEvent(g,_)}resize(g,_){g===this.cols&&_===this.rows||super.resize(g,_)}clear(){if(this.buffer.ybase!==0||this.buffer.y!==0){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 g=1;g<this.rows;g++)this.buffer.lines.push(this.buffer.getBlankLine(p.DEFAULT_ATTR_DATA));this._onScroll.fire({position:this.buffer.ydisp})}}reset(){this.options.rows=this.rows,this.options.cols=this.cols,this._setup(),super.reset()}}n.Terminal=w},3058:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Permutation=n.CallbackIterable=n.ArrayQueue=n.booleanComparator=n.numberComparator=n.CompareResult=void 0,n.tail=function(u,m=0){return u[u.length-(1+m)]},n.tail2=function(u){if(u.length===0)throw new Error("Invalid tail call");return[u.slice(0,u.length-1),u[u.length-1]]},n.equals=function(u,m,v=(I,E)=>I===E){if(u===m)return!0;if(!u||!m||u.length!==m.length)return!1;for(let I=0,E=u.length;I<E;I++)if(!v(u[I],m[I]))return!1;return!0},n.removeFastWithoutKeepingOrder=function(u,m){let v=u.length-1;m<v&&(u[m]=u[v]),u.pop()},n.binarySearch=function(u,m,v){return o(u.length,(I=>v(u[I],m)))},n.binarySearch2=o,n.quickSelect=function u(m,v,I){if((m|=0)>=v.length)throw new TypeError("invalid index");let E=v[Math.floor(v.length*Math.random())],N=[],O=[],A=[];for(let D of v){let C=I(D,E);C<0?N.push(D):C>0?O.push(D):A.push(D)}return m<N.length?u(m,N,I):m<N.length+A.length?A[0]:u(m-(N.length+A.length),O,I)},n.groupBy=function(u,m){let v=[],I;for(let E of u.slice(0).sort(m))I&&m(I[0],E)===0?I.push(E):(I=[E],v.push(I));return v},n.groupAdjacentBy=function*(u,m){let v,I;for(let E of u)I!==void 0&&m(I,E)?v.push(E):(v&&(yield v),v=[E]),I=E;v&&(yield v)},n.forEachAdjacent=function(u,m){for(let v=0;v<=u.length;v++)m(v===0?void 0:u[v-1],v===u.length?void 0:u[v])},n.forEachWithNeighbors=function(u,m){for(let v=0;v<u.length;v++)m(v===0?void 0:u[v-1],u[v],v+1===u.length?void 0:u[v+1])},n.sortedDiff=w,n.delta=function(u,m,v){let I=w(u,m,v),E=[],N=[];for(let O of I)E.push(...u.slice(O.start,O.start+O.deleteCount)),N.push(...O.toInsert);return{removed:E,added:N}},n.top=function(u,m,v){if(v===0)return[];let I=u.slice(0,v).sort(m);return c(u,m,I,v,u.length),I},n.topAsync=function(u,m,v,I,E){return v===0?Promise.resolve([]):new Promise(((N,O)=>{(async()=>{let A=u.length,D=u.slice(0,v).sort(m);for(let C=v,j=Math.min(v+I,A);C<A;C=j,j=Math.min(j+I,A)){if(C>v&&await new Promise((z=>setTimeout(z))),E&&E.isCancellationRequested)throw new p.CancellationError;c(u,m,D,C,j)}return D})().then(N,O)}))},n.coalesce=function(u){return u.filter((m=>!!m))},n.coalesceInPlace=function(u){let m=0;for(let v=0;v<u.length;v++)u[v]&&(u[m]=u[v],m+=1);u.length=m},n.move=function(u,m,v){u.splice(v,0,u.splice(m,1)[0])},n.isFalsyOrEmpty=function(u){return!Array.isArray(u)||u.length===0},n.isNonEmptyArray=function(u){return Array.isArray(u)&&u.length>0},n.distinct=function(u,m=v=>v){let v=new Set;return u.filter((I=>{let E=m(I);return!v.has(E)&&(v.add(E),!0)}))},n.uniqueFilter=function(u){let m=new Set;return v=>{let I=u(v);return!m.has(I)&&(m.add(I),!0)}},n.firstOrDefault=function(u,m){return u.length>0?u[0]:m},n.lastOrDefault=function(u,m){return u.length>0?u[u.length-1]:m},n.commonPrefixLength=function(u,m,v=(I,E)=>I===E){let I=0;for(let E=0,N=Math.min(u.length,m.length);E<N&&v(u[E],m[E]);E++)I++;return I},n.range=function(u,m){let v=typeof m=="number"?u:0;typeof m=="number"?v=u:(v=0,m=u);let I=[];if(v<=m)for(let E=v;E<m;E++)I.push(E);else for(let E=v;E>m;E--)I.push(E);return I},n.index=function(u,m,v){return u.reduce(((I,E)=>(I[m(E)]=v?v(E):E,I)),Object.create(null))},n.insert=function(u,m){return u.push(m),()=>g(u,m)},n.remove=g,n.arrayInsert=function(u,m,v){let I=u.slice(0,m),E=u.slice(m);return I.concat(v,E)},n.shuffle=function(u,m){let v;if(typeof m=="number"){let I=m;v=()=>{let E=179426549*Math.sin(I++);return E-Math.floor(E)}}else v=Math.random;for(let I=u.length-1;I>0;I-=1){let E=Math.floor(v()*(I+1)),N=u[I];u[I]=u[E],u[E]=N}},n.pushToStart=function(u,m){let v=u.indexOf(m);v>-1&&(u.splice(v,1),u.unshift(m))},n.pushToEnd=function(u,m){let v=u.indexOf(m);v>-1&&(u.splice(v,1),u.push(m))},n.pushMany=function(u,m){for(let v of m)u.push(v)},n.mapArrayOrNot=function(u,m){return Array.isArray(u)?u.map(m):m(u)},n.asArray=function(u){return Array.isArray(u)?u:[u]},n.getRandomElement=function(u){return u[Math.floor(Math.random()*u.length)]},n.insertInto=_,n.splice=function(u,m,v,I){let E=s(u,m),N=u.splice(E,v);return N===void 0&&(N=[]),_(u,E,I),N},n.compareBy=function(u,m){return(v,I)=>m(u(v),u(I))},n.tieBreakComparators=function(...u){return(m,v)=>{for(let I of u){let E=I(m,v);if(!f.isNeitherLessOrGreaterThan(E))return E}return f.neitherLessOrGreaterThan}},n.reverseOrder=function(u){return(m,v)=>-u(m,v)};let p=h(9807),S=h(8297);function o(u,m){let v=0,I=u-1;for(;v<=I;){let E=(v+I)/2|0,N=m(E);if(N<0)v=E+1;else{if(!(N>0))return E;I=E-1}}return-(v+1)}function w(u,m,v){let I=[];function E(A,D,C){if(D===0&&C.length===0)return;let j=I[I.length-1];j&&j.start+j.deleteCount===A?(j.deleteCount+=D,j.toInsert.push(...C)):I.push({start:A,deleteCount:D,toInsert:C})}let N=0,O=0;for(;;){if(N===u.length){E(N,0,m.slice(O));break}if(O===m.length){E(N,u.length-N,[]);break}let A=u[N],D=m[O],C=v(A,D);C===0?(N+=1,O+=1):C<0?(E(N,1,[]),N+=1):C>0&&(E(N,0,[D]),O+=1)}return I}function c(u,m,v,I,E){for(let N=v.length;I<E;I++){let O=u[I];if(m(O,v[N-1])<0){v.pop();let A=(0,S.findFirstIdxMonotonousOrArrLen)(v,(D=>m(O,D)<0));v.splice(A,0,O)}}}function g(u,m){let v=u.indexOf(m);if(v>-1)return u.splice(v,1),m}function _(u,m,v){let I=s(u,m),E=u.length,N=v.length;u.length=E+N;for(let O=E-1;O>=I;O--)u[O+N]=u[O];for(let O=0;O<N;O++)u[O+I]=v[O]}function s(u,m){return m<0?Math.max(m+u.length,0):Math.min(m,u.length)}var f;(function(u){u.isLessThan=function(m){return m<0},u.isLessThanOrEqual=function(m){return m<=0},u.isGreaterThan=function(m){return m>0},u.isNeitherLessOrGreaterThan=function(m){return m===0},u.greaterThan=1,u.lessThan=-1,u.neitherLessOrGreaterThan=0})(f||(n.CompareResult=f={})),n.numberComparator=(u,m)=>u-m,n.booleanComparator=(u,m)=>(0,n.numberComparator)(u?1:0,m?1:0),n.ArrayQueue=class{constructor(u){this.items=u,this.firstIdx=0,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(u){let m=this.firstIdx;for(;m<this.items.length&&u(this.items[m]);)m++;let v=m===this.firstIdx?null:this.items.slice(this.firstIdx,m);return this.firstIdx=m,v}takeFromEndWhile(u){let m=this.lastIdx;for(;m>=0&&u(this.items[m]);)m--;let v=m===this.lastIdx?null:this.items.slice(m+1,this.lastIdx+1);return this.lastIdx=m,v}peek(){if(this.length!==0)return this.items[this.firstIdx]}peekLast(){if(this.length!==0)return this.items[this.lastIdx]}dequeue(){let u=this.items[this.firstIdx];return this.firstIdx++,u}removeLast(){let u=this.items[this.lastIdx];return this.lastIdx--,u}takeCount(u){let m=this.items.slice(this.firstIdx,this.firstIdx+u);return this.firstIdx+=u,m}};class d{static{this.empty=new d((m=>{}))}constructor(m){this.iterate=m}forEach(m){this.iterate((v=>(m(v),!0)))}toArray(){let m=[];return this.iterate((v=>(m.push(v),!0))),m}filter(m){return new d((v=>this.iterate((I=>!m(I)||v(I)))))}map(m){return new d((v=>this.iterate((I=>v(m(I))))))}some(m){let v=!1;return this.iterate((I=>(v=m(I),!v))),v}findFirst(m){let v;return this.iterate((I=>!m(I)||(v=I,!1))),v}findLast(m){let v;return this.iterate((I=>(m(I)&&(v=I),!0))),v}findLastMaxBy(m){let v,I=!0;return this.iterate((E=>((I||f.isGreaterThan(m(E,v)))&&(I=!1,v=E),!0))),v}}n.CallbackIterable=d;class l{constructor(m){this._indexMap=m}static createSortPermutation(m,v){let I=Array.from(m.keys()).sort(((E,N)=>v(m[E],m[N])));return new l(I)}apply(m){return m.map(((v,I)=>m[this._indexMap[I]]))}inverse(){let m=this._indexMap.slice();for(let v=0;v<this._indexMap.length;v++)m[this._indexMap[v]]=v;return new l(m)}}n.Permutation=l},8297:(T,n)=>{function h(c,g,_=c.length-1){for(let s=_;s>=0;s--)if(g(c[s]))return s;return-1}function p(c,g,_=0,s=c.length){let f=_,d=s;for(;f<d;){let l=Math.floor((f+d)/2);g(c[l])?f=l+1:d=l}return f-1}function S(c,g,_=0,s=c.length){let f=_,d=s;for(;f<d;){let l=Math.floor((f+d)/2);g(c[l])?d=l:f=l+1}return f}Object.defineProperty(n,"__esModule",{value:!0}),n.MonotonousArray=void 0,n.findLast=function(c,g){let _=h(c,g);if(_!==-1)return c[_]},n.findLastIdx=h,n.findLastMonotonous=function(c,g){let _=p(c,g);return _===-1?void 0:c[_]},n.findLastIdxMonotonous=p,n.findFirstMonotonous=function(c,g){let _=S(c,g);return _===c.length?void 0:c[_]},n.findFirstIdxMonotonousOrArrLen=S,n.findFirstIdxMonotonous=function(c,g,_=0,s=c.length){let f=S(c,g,_,s);return f===c.length?-1:f},n.findFirstMax=w,n.findLastMax=function(c,g){if(c.length===0)return;let _=c[0];for(let s=1;s<c.length;s++){let f=c[s];g(f,_)>=0&&(_=f)}return _},n.findFirstMin=function(c,g){return w(c,((_,s)=>-g(_,s)))},n.findMaxIdx=function(c,g){if(c.length===0)return-1;let _=0;for(let s=1;s<c.length;s++)g(c[s],c[_])>0&&(_=s);return _},n.mapFindFirst=function(c,g){for(let _ of c){let s=g(_);if(s!==void 0)return s}};class o{static{this.assertInvariants=!1}constructor(g){this._array=g,this._findLastMonotonousLastIdx=0}findLastMonotonous(g){if(o.assertInvariants){if(this._prevFindLastPredicate){for(let s of this._array)if(this._prevFindLastPredicate(s)&&!g(s))throw new Error("MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.")}this._prevFindLastPredicate=g}let _=p(this._array,g,this._findLastMonotonousLastIdx);return this._findLastMonotonousLastIdx=_+1,_===-1?void 0:this._array[_]}}function w(c,g){if(c.length===0)return;let _=c[0];for(let s=1;s<c.length;s++){let f=c[s];g(f,_)>0&&(_=f)}return _}n.MonotonousArray=o},9087:(T,n)=>{var h;Object.defineProperty(n,"__esModule",{value:!0}),n.SetWithKey=void 0,n.groupBy=function(S,o){let w=Object.create(null);for(let c of S){let g=o(c),_=w[g];_||(_=w[g]=[]),_.push(c)}return w},n.diffSets=function(S,o){let w=[],c=[];for(let g of S)o.has(g)||w.push(g);for(let g of o)S.has(g)||c.push(g);return{removed:w,added:c}},n.diffMaps=function(S,o){let w=[],c=[];for(let[g,_]of S)o.has(g)||w.push(_);for(let[g,_]of o)S.has(g)||c.push(_);return{removed:w,added:c}},n.intersection=function(S,o){let w=new Set;for(let c of o)S.has(c)&&w.add(c);return w};class p{static{h=Symbol.toStringTag}constructor(o,w){this.toKey=w,this._map=new Map,this[h]="SetWithKey";for(let c of o)this.add(c)}get size(){return this._map.size}add(o){let w=this.toKey(o);return this._map.set(w,o),this}delete(o){return this._map.delete(this.toKey(o))}has(o){return this._map.has(this.toKey(o))}*entries(){for(let o of this._map.values())yield[o,o]}keys(){return this.values()}*values(){for(let o of this._map.values())yield o}clear(){this._map.clear()}forEach(o,w){this._map.forEach((c=>o.call(w,c,c,this)))}[Symbol.iterator](){return this.values()}}n.SetWithKey=p},9807:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BugIndicatingError=n.ErrorNoTelemetry=n.ExpectedError=n.NotSupportedError=n.NotImplementedError=n.ReadonlyError=n.CancellationError=n.errorHandler=n.ErrorHandler=void 0,n.setUnexpectedErrorHandler=function(d){n.errorHandler.setUnexpectedErrorHandler(d)},n.isSigPipeError=function(d){if(!d||typeof d!="object")return!1;let l=d;return l.code==="EPIPE"&&l.syscall?.toUpperCase()==="WRITE"},n.onUnexpectedError=function(d){S(d)||n.errorHandler.onUnexpectedError(d)},n.onUnexpectedExternalError=function(d){S(d)||n.errorHandler.onUnexpectedExternalError(d)},n.transformErrorForSerialization=function(d){if(d instanceof Error){let{name:l,message:u}=d;return{$isError:!0,name:l,message:u,stack:d.stacktrace||d.stack,noTelemetry:s.isErrorNoTelemetry(d)}}return d},n.transformErrorFromSerialization=function(d){let l;return d.noTelemetry?l=new s:(l=new Error,l.name=d.name),l.message=d.message,l.stack=d.stack,l},n.isCancellationError=S,n.canceled=function(){let d=new Error(p);return d.name=d.message,d},n.illegalArgument=function(d){return d?new Error(`Illegal argument: ${d}`):new Error("Illegal argument")},n.illegalState=function(d){return d?new Error(`Illegal state: ${d}`):new Error("Illegal state")},n.getErrorMessage=function(d){return d?d.message?d.message:d.stack?d.stack.split(`
4
+ `)[0]:String(d):"Error"};class h{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(l){setTimeout((()=>{throw l.stack?s.isErrorNoTelemetry(l)?new s(l.message+`
5
+
6
+ `+l.stack):new Error(l.message+`
7
+
8
+ `+l.stack):l}),0)}}addListener(l){return this.listeners.push(l),()=>{this._removeListener(l)}}emit(l){this.listeners.forEach((u=>{u(l)}))}_removeListener(l){this.listeners.splice(this.listeners.indexOf(l),1)}setUnexpectedErrorHandler(l){this.unexpectedErrorHandler=l}getUnexpectedErrorHandler(){return this.unexpectedErrorHandler}onUnexpectedError(l){this.unexpectedErrorHandler(l),this.emit(l)}onUnexpectedExternalError(l){this.unexpectedErrorHandler(l)}}n.ErrorHandler=h,n.errorHandler=new h;let p="Canceled";function S(d){return d instanceof o||d instanceof Error&&d.name===p&&d.message===p}class o extends Error{constructor(){super(p),this.name=this.message}}n.CancellationError=o;class w extends TypeError{constructor(l){super(l?`${l} is read-only and cannot be changed`:"Cannot change read-only property")}}n.ReadonlyError=w;class c extends Error{constructor(l){super("NotImplemented"),l&&(this.message=l)}}n.NotImplementedError=c;class g extends Error{constructor(l){super("NotSupported"),l&&(this.message=l)}}n.NotSupportedError=g;class _ extends Error{constructor(){super(...arguments),this.isExpected=!0}}n.ExpectedError=_;class s extends Error{constructor(l){super(l),this.name="CodeExpectedError"}static fromError(l){if(l instanceof s)return l;let u=new s;return u.message=l.message,u.stack=l.stack,u}static isErrorNoTelemetry(l){return l.name==="CodeExpectedError"}}n.ErrorNoTelemetry=s;class f extends Error{constructor(l){super(l||"An unexpected bug occurred."),Object.setPrototypeOf(this,f.prototype)}}n.BugIndicatingError=f},802:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ValueWithChangeEvent=n.Relay=n.EventBufferer=n.DynamicListEventMultiplexer=n.EventMultiplexer=n.MicrotaskEmitter=n.DebounceEmitter=n.PauseableEmitter=n.AsyncEmitter=n.createEventDeliveryQueue=n.Emitter=n.ListenerRefusalError=n.ListenerLeakError=n.EventProfiling=n.Event=void 0,n.setGlobalLeakWarningThreshold=function(D){let C=s;return s=D,{dispose(){s=C}}};let p=h(9807),S=h(8841),o=h(7150),w=h(6317),c=h(9725);var g;(function(D){function C(k){return(R,F=null,B)=>{let U,K=!1;return U=k((ee=>{if(!K)return U?U.dispose():K=!0,R.call(F,ee)}),null,B),K&&U.dispose(),U}}function j(k,R,F){return W(((B,U=null,K)=>k((ee=>B.call(U,R(ee))),null,K)),F)}function z(k,R,F){return W(((B,U=null,K)=>k((ee=>R(ee)&&B.call(U,ee)),null,K)),F)}function W(k,R){let F,B=new I({onWillAddFirstListener(){F=k(B.fire,B)},onDidRemoveLastListener(){F?.dispose()}});return R?.add(B),B.event}function G(k,R,F=100,B=!1,U=!1,K,ee){let x,Q,Y,Z,he=0,fe=new I({leakWarningThreshold:K,onWillAddFirstListener(){x=k((He=>{he++,Q=R(Q,He),B&&!Y&&(fe.fire(Q),Q=void 0),Z=()=>{let Te=Q;Q=void 0,Y=void 0,(!B||he>1)&&fe.fire(Te),he=0},typeof F=="number"?(clearTimeout(Y),Y=setTimeout(Z,F)):Y===void 0&&(Y=0,queueMicrotask(Z))}))},onWillRemoveListener(){U&&he>0&&Z?.()},onDidRemoveLastListener(){Z=void 0,x.dispose()}});return ee?.add(fe),fe.event}D.None=()=>o.Disposable.None,D.defer=function(k,R){return G(k,(()=>{}),0,void 0,!0,void 0,R)},D.once=C,D.map=j,D.forEach=function(k,R,F){return W(((B,U=null,K)=>k((ee=>{R(ee),B.call(U,ee)}),null,K)),F)},D.filter=z,D.signal=function(k){return k},D.any=function(...k){return(R,F=null,B)=>{return U=(0,o.combinedDisposable)(...k.map((ee=>ee((x=>R.call(F,x)))))),(K=B)instanceof Array?K.push(U):K&&K.add(U),U;var U,K}},D.reduce=function(k,R,F,B){let U=F;return j(k,(K=>(U=R(U,K),U)),B)},D.debounce=G,D.accumulate=function(k,R=0,F){return D.debounce(k,((B,U)=>B?(B.push(U),B):[U]),R,void 0,!0,void 0,F)},D.latch=function(k,R=(B,U)=>B===U,F){let B,U=!0;return z(k,(K=>{let ee=U||!R(K,B);return U=!1,B=K,ee}),F)},D.split=function(k,R,F){return[D.filter(k,R,F),D.filter(k,(B=>!R(B)),F)]},D.buffer=function(k,R=!1,F=[],B){let U=F.slice(),K=k((Q=>{U?U.push(Q):x.fire(Q)}));B&&B.add(K);let ee=()=>{U?.forEach((Q=>x.fire(Q))),U=null},x=new I({onWillAddFirstListener(){K||(K=k((Q=>x.fire(Q))),B&&B.add(K))},onDidAddFirstListener(){U&&(R?setTimeout(ee):ee())},onDidRemoveLastListener(){K&&K.dispose(),K=null}});return B&&B.add(x),x.event},D.chain=function(k,R){return(F,B,U)=>{let K=R(new b);return k((function(ee){let x=K.evaluate(ee);x!==q&&F.call(B,x)}),void 0,U)}};let q=Symbol("HaltChainable");class b{constructor(){this.steps=[]}map(R){return this.steps.push(R),this}forEach(R){return this.steps.push((F=>(R(F),F))),this}filter(R){return this.steps.push((F=>R(F)?F:q)),this}reduce(R,F){let B=F;return this.steps.push((U=>(B=R(B,U),B))),this}latch(R=(F,B)=>F===B){let F,B=!0;return this.steps.push((U=>{let K=B||!R(U,F);return B=!1,F=U,K?U:q})),this}evaluate(R){for(let F of this.steps)if((R=F(R))===q)break;return R}}D.fromNodeEventEmitter=function(k,R,F=B=>B){let B=(...K)=>U.fire(F(...K)),U=new I({onWillAddFirstListener:()=>k.on(R,B),onDidRemoveLastListener:()=>k.removeListener(R,B)});return U.event},D.fromDOMEventEmitter=function(k,R,F=B=>B){let B=(...K)=>U.fire(F(...K)),U=new I({onWillAddFirstListener:()=>k.addEventListener(R,B),onDidRemoveLastListener:()=>k.removeEventListener(R,B)});return U.event},D.toPromise=function(k){return new Promise((R=>C(k)(R)))},D.fromPromise=function(k){let R=new I;return k.then((F=>{R.fire(F)}),(()=>{R.fire(void 0)})).finally((()=>{R.dispose()})),R.event},D.forward=function(k,R){return k((F=>R.fire(F)))},D.runAndSubscribe=function(k,R,F){return R(F),k((B=>R(B)))};class P{constructor(R,F){this._observable=R,this._counter=0,this._hasChanged=!1;let B={onWillAddFirstListener:()=>{R.addObserver(this)},onDidRemoveLastListener:()=>{R.removeObserver(this)}};this.emitter=new I(B),F&&F.add(this.emitter)}beginUpdate(R){this._counter++}handlePossibleChange(R){}handleChange(R,F){this._hasChanged=!0}endUpdate(R){this._counter--,this._counter===0&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}D.fromObservable=function(k,R){return new P(k,R).emitter.event},D.fromObservableLight=function(k){return(R,F,B)=>{let U=0,K=!1,ee={beginUpdate(){U++},endUpdate(){U--,U===0&&(k.reportChanges(),K&&(K=!1,R.call(F)))},handlePossibleChange(){},handleChange(){K=!0}};k.addObserver(ee),k.reportChanges();let x={dispose(){k.removeObserver(ee)}};return B instanceof o.DisposableStore?B.add(x):Array.isArray(B)&&B.push(x),x}}})(g||(n.Event=g={}));class _{static{this.all=new Set}static{this._idPool=0}constructor(C){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${C}_${_._idPool++}`,_.all.add(this)}start(C){this._stopWatch=new c.StopWatch,this.listenerCount=C}stop(){if(this._stopWatch){let C=this._stopWatch.elapsed();this.durations.push(C),this.elapsedOverall+=C,this.invocationCount+=1,this._stopWatch=void 0}}}n.EventProfiling=_;let s=-1;class f{static{this._idPool=1}constructor(C,j,z=(f._idPool++).toString(16).padStart(3,"0")){this._errorHandler=C,this.threshold=j,this.name=z,this._warnCountdown=0}dispose(){this._stacks?.clear()}check(C,j){let z=this.threshold;if(z<=0||j<z)return;this._stacks||(this._stacks=new Map);let W=this._stacks.get(C.value)||0;if(this._stacks.set(C.value,W+1),this._warnCountdown-=1,this._warnCountdown<=0){this._warnCountdown=.5*z;let[G,q]=this.getMostFrequentStack(),b=`[${this.name}] potential listener LEAK detected, having ${j} listeners already. MOST frequent listener (${q}):`;console.warn(b),console.warn(G);let P=new l(b,G);this._errorHandler(P)}return()=>{let G=this._stacks.get(C.value)||0;this._stacks.set(C.value,G-1)}}getMostFrequentStack(){if(!this._stacks)return;let C,j=0;for(let[z,W]of this._stacks)(!C||j<W)&&(C=[z,W],j=W);return C}}class d{static create(){let C=new Error;return new d(C.stack??"")}constructor(C){this.value=C}print(){console.warn(this.value.split(`
9
+ `).slice(2).join(`
10
+ `))}}class l extends Error{constructor(C,j){super(C),this.name="ListenerLeakError",this.stack=j}}n.ListenerLeakError=l;class u extends Error{constructor(C,j){super(C),this.name="ListenerRefusalError",this.stack=j}}n.ListenerRefusalError=u;let m=0;class v{constructor(C){this.value=C,this.id=m++}}class I{constructor(C){this._size=0,this._options=C,this._leakageMon=s>0||this._options?.leakWarningThreshold?new f(C?.onListenerError??p.onUnexpectedError,this._options?.leakWarningThreshold??s):void 0,this._perfMon=this._options?._profName?new _(this._options._profName):void 0,this._deliveryQueue=this._options?.deliveryQueue}dispose(){this._disposed||(this._disposed=!0,this._deliveryQueue?.current===this&&this._deliveryQueue.reset(),this._listeners&&(this._listeners=void 0,this._size=0),this._options?.onDidRemoveLastListener?.(),this._leakageMon?.dispose())}get event(){return this._event??=(C,j,z)=>{if(this._leakageMon&&this._size>this._leakageMon.threshold**2){let b=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(b);let P=this._leakageMon.getMostFrequentStack()??["UNKNOWN stack",-1],k=new u(`${b}. HINT: Stack shows most frequent listener (${P[1]}-times)`,P[0]);return(this._options?.onListenerError||p.onUnexpectedError)(k),o.Disposable.None}if(this._disposed)return o.Disposable.None;j&&(C=C.bind(j));let W=new v(C),G;this._leakageMon&&this._size>=Math.ceil(.2*this._leakageMon.threshold)&&(W.stack=d.create(),G=this._leakageMon.check(W.stack,this._size+1)),this._listeners?this._listeners instanceof v?(this._deliveryQueue??=new E,this._listeners=[this._listeners,W]):this._listeners.push(W):(this._options?.onWillAddFirstListener?.(this),this._listeners=W,this._options?.onDidAddFirstListener?.(this)),this._size++;let q=(0,o.toDisposable)((()=>{G?.(),this._removeListener(W)}));return z instanceof o.DisposableStore?z.add(q):Array.isArray(z)&&z.push(q),q},this._event}_removeListener(C){if(this._options?.onWillRemoveListener?.(this),!this._listeners)return;if(this._size===1)return this._listeners=void 0,this._options?.onDidRemoveLastListener?.(this),void(this._size=0);let j=this._listeners,z=j.indexOf(C);if(z===-1)throw console.log("disposed?",this._disposed),console.log("size?",this._size),console.log("arr?",JSON.stringify(this._listeners)),new Error("Attempted to dispose unknown listener");this._size--,j[z]=void 0;let W=this._deliveryQueue.current===this;if(2*this._size<=j.length){let G=0;for(let q=0;q<j.length;q++)j[q]?j[G++]=j[q]:W&&(this._deliveryQueue.end--,G<this._deliveryQueue.i&&this._deliveryQueue.i--);j.length=G}}_deliver(C,j){if(!C)return;let z=this._options?.onListenerError||p.onUnexpectedError;if(z)try{C.value(j)}catch(W){z(W)}else C.value(j)}_deliverQueue(C){let j=C.current._listeners;for(;C.i<C.end;)this._deliver(j[C.i++],C.value);C.reset()}fire(C){if(this._deliveryQueue?.current&&(this._deliverQueue(this._deliveryQueue),this._perfMon?.stop()),this._perfMon?.start(this._size),this._listeners)if(this._listeners instanceof v)this._deliver(this._listeners,C);else{let j=this._deliveryQueue;j.enqueue(this,C,this._listeners.length),this._deliverQueue(j)}this._perfMon?.stop()}hasListeners(){return this._size>0}}n.Emitter=I,n.createEventDeliveryQueue=()=>new E;class E{constructor(){this.i=-1,this.end=0}enqueue(C,j,z){this.i=0,this.end=z,this.current=C,this.value=j}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}n.AsyncEmitter=class extends I{async fireAsync(D,C,j){if(this._listeners)for(this._asyncDeliveryQueue||(this._asyncDeliveryQueue=new w.LinkedList),((z,W)=>{if(z instanceof v)W(z);else for(let G=0;G<z.length;G++){let q=z[G];q&&W(q)}})(this._listeners,(z=>this._asyncDeliveryQueue.push([z.value,D])));this._asyncDeliveryQueue.size>0&&!C.isCancellationRequested;){let[z,W]=this._asyncDeliveryQueue.shift(),G=[],q={...W,token:C,waitUntil:b=>{if(Object.isFrozen(G))throw new Error("waitUntil can NOT be called asynchronous");j&&(b=j(b,z)),G.push(b)}};try{z(q)}catch(b){(0,p.onUnexpectedError)(b);continue}Object.freeze(G),await Promise.allSettled(G).then((b=>{for(let P of b)P.status==="rejected"&&(0,p.onUnexpectedError)(P.reason)}))}}};class N extends I{get isPaused(){return this._isPaused!==0}constructor(C){super(C),this._isPaused=0,this._eventQueue=new w.LinkedList,this._mergeFn=C?.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused==0)if(this._mergeFn){if(this._eventQueue.size>0){let C=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(C))}}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(C){this._size&&(this._isPaused!==0?this._eventQueue.push(C):super.fire(C))}}n.PauseableEmitter=N,n.DebounceEmitter=class extends N{constructor(D){super(D),this._delay=D.delay??100}fire(D){this._handle||(this.pause(),this._handle=setTimeout((()=>{this._handle=void 0,this.resume()}),this._delay)),super.fire(D)}},n.MicrotaskEmitter=class extends I{constructor(D){super(D),this._queuedEvents=[],this._mergeFn=D?.merge}fire(D){this.hasListeners()&&(this._queuedEvents.push(D),this._queuedEvents.length===1&&queueMicrotask((()=>{this._mergeFn?super.fire(this._mergeFn(this._queuedEvents)):this._queuedEvents.forEach((C=>super.fire(C))),this._queuedEvents=[]})))}};class O{constructor(){this.hasListeners=!1,this.events=[],this.emitter=new I({onWillAddFirstListener:()=>this.onFirstListenerAdd(),onDidRemoveLastListener:()=>this.onLastListenerRemove()})}get event(){return this.emitter.event}add(C){let j={event:C,listener:null};return this.events.push(j),this.hasListeners&&this.hook(j),(0,o.toDisposable)((0,S.createSingleCallFunction)((()=>{this.hasListeners&&this.unhook(j);let z=this.events.indexOf(j);this.events.splice(z,1)})))}onFirstListenerAdd(){this.hasListeners=!0,this.events.forEach((C=>this.hook(C)))}onLastListenerRemove(){this.hasListeners=!1,this.events.forEach((C=>this.unhook(C)))}hook(C){C.listener=C.event((j=>this.emitter.fire(j)))}unhook(C){C.listener?.dispose(),C.listener=null}dispose(){this.emitter.dispose();for(let C of this.events)C.listener?.dispose();this.events=[]}}n.EventMultiplexer=O,n.DynamicListEventMultiplexer=class{constructor(D,C,j,z){this._store=new o.DisposableStore;let W=this._store.add(new O),G=this._store.add(new o.DisposableMap);function q(b){G.set(b,W.add(z(b)))}for(let b of D)q(b);this._store.add(C((b=>{q(b)}))),this._store.add(j((b=>{G.deleteAndDispose(b)}))),this.event=W.event}dispose(){this._store.dispose()}},n.EventBufferer=class{constructor(){this.data=[]}wrapEvent(D,C,j){return(z,W,G)=>D((q=>{let b=this.data[this.data.length-1];if(!C)return void(b?b.buffers.push((()=>z.call(W,q))):z.call(W,q));let P=b;P?(P.items??=[],P.items.push(q),P.buffers.length===0&&b.buffers.push((()=>{P.reducedResult??=j?P.items.reduce(C,j):P.items.reduce(C),z.call(W,P.reducedResult)}))):z.call(W,C(j,q))}),void 0,G)}bufferEvents(D){let C={buffers:new Array};this.data.push(C);let j=D();return this.data.pop(),C.buffers.forEach((z=>z())),j}},n.Relay=class{constructor(){this.listening=!1,this.inputEvent=g.None,this.inputEventListener=o.Disposable.None,this.emitter=new I({onDidAddFirstListener:()=>{this.listening=!0,this.inputEventListener=this.inputEvent(this.emitter.fire,this.emitter)},onDidRemoveLastListener:()=>{this.listening=!1,this.inputEventListener.dispose()}}),this.event=this.emitter.event}set input(D){this.inputEvent=D,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=D(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}},n.ValueWithChangeEvent=class{static const(D){return new A(D)}constructor(D){this._value=D,this._onDidChange=new I,this.onDidChange=this._onDidChange.event}get value(){return this._value}set value(D){D!==this._value&&(this._value=D,this._onDidChange.fire(void 0))}};class A{constructor(C){this.value=C,this.onDidChange=g.None}}},8841:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createSingleCallFunction=function(h,p){let S=this,o,w=!1;return function(){if(w)return o;if(w=!0,p)try{o=h.apply(S,arguments)}finally{p()}else o=h.apply(S,arguments);return o}}},4218:(T,n)=>{var h;Object.defineProperty(n,"__esModule",{value:!0}),n.Iterable=void 0,(function(p){function S(c){return c&&typeof c=="object"&&typeof c[Symbol.iterator]=="function"}p.is=S;let o=Object.freeze([]);function*w(c){yield c}p.empty=function(){return o},p.single=w,p.wrap=function(c){return S(c)?c:w(c)},p.from=function(c){return c||o},p.reverse=function*(c){for(let g=c.length-1;g>=0;g--)yield c[g]},p.isEmpty=function(c){return!c||c[Symbol.iterator]().next().done===!0},p.first=function(c){return c[Symbol.iterator]().next().value},p.some=function(c,g){let _=0;for(let s of c)if(g(s,_++))return!0;return!1},p.find=function(c,g){for(let _ of c)if(g(_))return _},p.filter=function*(c,g){for(let _ of c)g(_)&&(yield _)},p.map=function*(c,g){let _=0;for(let s of c)yield g(s,_++)},p.flatMap=function*(c,g){let _=0;for(let s of c)yield*g(s,_++)},p.concat=function*(...c){for(let g of c)yield*g},p.reduce=function(c,g,_){let s=_;for(let f of c)s=g(s,f);return s},p.slice=function*(c,g,_=c.length){for(g<0&&(g+=c.length),_<0?_+=c.length:_>c.length&&(_=c.length);g<_;g++)yield c[g]},p.consume=function(c,g=Number.POSITIVE_INFINITY){let _=[];if(g===0)return[_,c];let s=c[Symbol.iterator]();for(let f=0;f<g;f++){let d=s.next();if(d.done)return[_,p.empty()];_.push(d.value)}return[_,{[Symbol.iterator]:()=>s}]},p.asyncToArray=async function(c){let g=[];for await(let _ of c)g.push(_);return Promise.resolve(g)}})(h||(n.Iterable=h={}))},7150:(T,n,h)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DisposableMap=n.ImmortalReference=n.AsyncReferenceCollection=n.ReferenceCollection=n.SafeDisposable=n.RefCountedDisposable=n.MandatoryMutableDisposable=n.MutableDisposable=n.Disposable=n.DisposableStore=n.DisposableTracker=void 0,n.setDisposableTracker=function(O){g=O},n.trackDisposable=s,n.markAsDisposed=f,n.markAsSingleton=function(O){return g?.markAsSingleton(O),O},n.isDisposable=l,n.dispose=u,n.disposeIfDisposable=function(O){for(let A of O)l(A)&&A.dispose();return[]},n.combinedDisposable=function(...O){let A=m((()=>u(O)));return(function(D,C){if(g)for(let j of D)g.setParent(j,C)})(O,A),A},n.toDisposable=m,n.disposeOnReturn=function(O){let A=new v;try{O(A)}finally{A.dispose()}};let p=h(3058),S=h(9087),o=h(2608),w=h(8841),c=h(4218),g=null;class _{constructor(){this.livingDisposables=new Map}static{this.idx=0}getDisposableData(A){let D=this.livingDisposables.get(A);return D||(D={parent:null,source:null,isSingleton:!1,value:A,idx:_.idx++},this.livingDisposables.set(A,D)),D}trackDisposable(A){let D=this.getDisposableData(A);D.source||(D.source=new Error().stack)}setParent(A,D){this.getDisposableData(A).parent=D}markAsDisposed(A){this.livingDisposables.delete(A)}markAsSingleton(A){this.getDisposableData(A).isSingleton=!0}getRootParent(A,D){let C=D.get(A);if(C)return C;let j=A.parent?this.getRootParent(this.getDisposableData(A.parent),D):A;return D.set(A,j),j}getTrackedDisposables(){let A=new Map;return[...this.livingDisposables.entries()].filter((([,D])=>D.source!==null&&!this.getRootParent(D,A).isSingleton)).flatMap((([D])=>D))}computeLeakingDisposables(A=10,D){let C;if(D)C=D;else{let q=new Map,b=[...this.livingDisposables.values()].filter((k=>k.source!==null&&!this.getRootParent(k,q).isSingleton));if(b.length===0)return;let P=new Set(b.map((k=>k.value)));if(C=b.filter((k=>!(k.parent&&P.has(k.parent)))),C.length===0)throw new Error("There are cyclic diposable chains!")}if(!C)return;function j(q){let b=q.source.split(`
11
+ `).map((P=>P.trim().replace("at ",""))).filter((P=>P!==""));return(function(P,k){for(;P.length>0&&k.some((R=>typeof R=="string"?R===P[0]:P[0].match(R)));)P.shift()})(b,["Error",/^trackDisposable \(.*\)$/,/^DisposableTracker.trackDisposable \(.*\)$/]),b.reverse()}let z=new o.SetMap;for(let q of C){let b=j(q);for(let P=0;P<=b.length;P++)z.add(b.slice(0,P).join(`
12
+ `),q)}C.sort((0,p.compareBy)((q=>q.idx),p.numberComparator));let W="",G=0;for(let q of C.slice(0,A)){G++;let b=j(q),P=[];for(let k=0;k<b.length;k++){let R=b[k];R=`(shared with ${z.get(b.slice(0,k+1).join(`
13
+ `)).size}/${C.length} leaks) at ${R}`;let F=z.get(b.slice(0,k).join(`
14
+ `)),B=(0,S.groupBy)([...F].map((U=>j(U)[k])),(U=>U));delete B[b[k]];for(let[U,K]of Object.entries(B))P.unshift(` - stacktraces of ${K.length} other leaks continue with ${U}`);P.unshift(R)}W+=`
15
+
16
+
17
+ ==================== Leaking disposable ${G}/${C.length}: ${q.value.constructor.name} ====================
18
+ ${P.join(`
19
+ `)}
20
+ ============================================================
21
+
22
+ `}return C.length>A&&(W+=`
23
+
24
+
25
+ ... and ${C.length-A} more leaking disposables
26
+
27
+ `),{leaks:C,details:W}}}function s(O){return g?.trackDisposable(O),O}function f(O){g?.markAsDisposed(O)}function d(O,A){g?.setParent(O,A)}function l(O){return typeof O=="object"&&O!==null&&typeof O.dispose=="function"&&O.dispose.length===0}function u(O){if(c.Iterable.is(O)){let A=[];for(let D of O)if(D)try{D.dispose()}catch(C){A.push(C)}if(A.length===1)throw A[0];if(A.length>1)throw new AggregateError(A,"Encountered errors while disposing of store");return Array.isArray(O)?[]:O}if(O)return O.dispose(),O}function m(O){let A=s({dispose:(0,w.createSingleCallFunction)((()=>{f(A),O()}))});return A}n.DisposableTracker=_;class v{static{this.DISABLE_DISPOSED_WARNING=!1}constructor(){this._toDispose=new Set,this._isDisposed=!1,s(this)}dispose(){this._isDisposed||(f(this),this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{u(this._toDispose)}finally{this._toDispose.clear()}}add(A){if(!A)return A;if(A===this)throw new Error("Cannot register a disposable on itself!");return d(A,this),this._isDisposed?v.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(A),A}delete(A){if(A){if(A===this)throw new Error("Cannot dispose a disposable on itself!");this._toDispose.delete(A),A.dispose()}}deleteAndLeak(A){A&&this._toDispose.has(A)&&(this._toDispose.delete(A),d(A,null))}}n.DisposableStore=v;class I{static{this.None=Object.freeze({dispose(){}})}constructor(){this._store=new v,s(this),d(this._store,this)}dispose(){f(this),this._store.dispose()}_register(A){if(A===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(A)}}n.Disposable=I;class E{constructor(){this._isDisposed=!1,s(this)}get value(){return this._isDisposed?void 0:this._value}set value(A){this._isDisposed||A===this._value||(this._value?.dispose(),A&&d(A,this),this._value=A)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,f(this),this._value?.dispose(),this._value=void 0}clearAndLeak(){let A=this._value;return this._value=void 0,A&&d(A,null),A}}n.MutableDisposable=E,n.MandatoryMutableDisposable=class{constructor(O){this._disposable=new E,this._isDisposed=!1,this._disposable.value=O}get value(){return this._disposable.value}set value(O){this._isDisposed||O===this._disposable.value||(this._disposable.value=O)}dispose(){this._isDisposed=!0,this._disposable.dispose()}},n.RefCountedDisposable=class{constructor(O){this._disposable=O,this._counter=1}acquire(){return this._counter++,this}release(){return--this._counter==0&&this._disposable.dispose(),this}},n.SafeDisposable=class{constructor(){this.dispose=()=>{},this.unset=()=>{},this.isset=()=>!1,s(this)}set(O){let A=O;return this.unset=()=>A=void 0,this.isset=()=>A!==void 0,this.dispose=()=>{A&&(A(),A=void 0,f(this))},this}},n.ReferenceCollection=class{constructor(){this.references=new Map}acquire(O,...A){let D=this.references.get(O);D||(D={counter:0,object:this.createReferencedObject(O,...A)},this.references.set(O,D));let{object:C}=D,j=(0,w.createSingleCallFunction)((()=>{--D.counter==0&&(this.destroyReferencedObject(O,D.object),this.references.delete(O))}));return D.counter++,{object:C,dispose:j}}},n.AsyncReferenceCollection=class{constructor(O){this.referenceCollection=O}async acquire(O,...A){let D=this.referenceCollection.acquire(O,...A);try{return{object:await D.object,dispose:()=>D.dispose()}}catch(C){throw D.dispose(),C}}},n.ImmortalReference=class{constructor(O){this.object=O}dispose(){}};class N{constructor(){this._store=new Map,this._isDisposed=!1,s(this)}dispose(){f(this),this._isDisposed=!0,this.clearAndDisposeAll()}clearAndDisposeAll(){if(this._store.size)try{u(this._store.values())}finally{this._store.clear()}}has(A){return this._store.has(A)}get size(){return this._store.size}get(A){return this._store.get(A)}set(A,D,C=!1){this._isDisposed&&console.warn(new Error("Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!").stack),C||this._store.get(A)?.dispose(),this._store.set(A,D)}deleteAndDispose(A){this._store.get(A)?.dispose(),this._store.delete(A)}deleteAndLeak(A){let D=this._store.get(A);return this._store.delete(A),D}keys(){return this._store.keys()}values(){return this._store.values()}[Symbol.iterator](){return this._store[Symbol.iterator]()}}n.DisposableMap=N},6317:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.LinkedList=void 0;class h{static{this.Undefined=new h(void 0)}constructor(o){this.element=o,this.next=h.Undefined,this.prev=h.Undefined}}class p{constructor(){this._first=h.Undefined,this._last=h.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===h.Undefined}clear(){let o=this._first;for(;o!==h.Undefined;){let w=o.next;o.prev=h.Undefined,o.next=h.Undefined,o=w}this._first=h.Undefined,this._last=h.Undefined,this._size=0}unshift(o){return this._insert(o,!1)}push(o){return this._insert(o,!0)}_insert(o,w){let c=new h(o);if(this._first===h.Undefined)this._first=c,this._last=c;else if(w){let _=this._last;this._last=c,c.prev=_,_.next=c}else{let _=this._first;this._first=c,c.next=_,_.prev=c}this._size+=1;let g=!1;return()=>{g||(g=!0,this._remove(c))}}shift(){if(this._first!==h.Undefined){let o=this._first.element;return this._remove(this._first),o}}pop(){if(this._last!==h.Undefined){let o=this._last.element;return this._remove(this._last),o}}_remove(o){if(o.prev!==h.Undefined&&o.next!==h.Undefined){let w=o.prev;w.next=o.next,o.next.prev=w}else o.prev===h.Undefined&&o.next===h.Undefined?(this._first=h.Undefined,this._last=h.Undefined):o.next===h.Undefined?(this._last=this._last.prev,this._last.next=h.Undefined):o.prev===h.Undefined&&(this._first=this._first.next,this._first.prev=h.Undefined);this._size-=1}*[Symbol.iterator](){let o=this._first;for(;o!==h.Undefined;)yield o.element,o=o.next}}n.LinkedList=p},2608:(T,n)=>{var h;Object.defineProperty(n,"__esModule",{value:!0}),n.SetMap=n.BidirectionalMap=n.CounterSet=n.Touch=void 0,n.getOrSet=function(p,S,o){let w=p.get(S);return w===void 0&&(w=o,p.set(S,w)),w},n.mapToString=function(p){let S=[];return p.forEach(((o,w)=>{S.push(`${w} => ${o}`)})),`Map(${p.size}) {${S.join(", ")}}`},n.setToString=function(p){let S=[];return p.forEach((o=>{S.push(o)})),`Set(${p.size}) {${S.join(", ")}}`},n.mapsStrictEqualIgnoreOrder=function(p,S){if(p===S)return!0;if(p.size!==S.size)return!1;for(let[o,w]of p)if(!S.has(o)||S.get(o)!==w)return!1;for(let[o]of S)if(!p.has(o))return!1;return!0},(function(p){p[p.None=0]="None",p[p.AsOld=1]="AsOld",p[p.AsNew=2]="AsNew"})(h||(n.Touch=h={})),n.CounterSet=class{constructor(){this.map=new Map}add(p){return this.map.set(p,(this.map.get(p)||0)+1),this}delete(p){let S=this.map.get(p)||0;return S!==0&&(S--,S===0?this.map.delete(p):this.map.set(p,S),!0)}has(p){return this.map.has(p)}},n.BidirectionalMap=class{constructor(p){if(this._m1=new Map,this._m2=new Map,p)for(let[S,o]of p)this.set(S,o)}clear(){this._m1.clear(),this._m2.clear()}set(p,S){this._m1.set(p,S),this._m2.set(S,p)}get(p){return this._m1.get(p)}getKey(p){return this._m2.get(p)}delete(p){let S=this._m1.get(p);return S!==void 0&&(this._m1.delete(p),this._m2.delete(S),!0)}forEach(p,S){this._m1.forEach(((o,w)=>{p.call(S,o,w,this)}))}keys(){return this._m1.keys()}values(){return this._m1.values()}},n.SetMap=class{constructor(){this.map=new Map}add(p,S){let o=this.map.get(p);o||(o=new Set,this.map.set(p,o)),o.add(S)}delete(p,S){let o=this.map.get(p);o&&(o.delete(S),o.size===0&&this.map.delete(p))}forEach(p,S){let o=this.map.get(p);o&&o.forEach(S)}get(p){return this.map.get(p)||new Set}}},9725:(T,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.StopWatch=void 0;let h=globalThis.performance&&typeof globalThis.performance.now=="function";class p{static create(o){return new p(o)}constructor(o){this._now=h&&o===!1?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}reset(){this._startTime=this._now(),this._stopTime=-1}elapsed(){return this._stopTime!==-1?this._stopTime-this._startTime:this._now()-this._startTime}}n.StopWatch=p}},t={};function r(T){var n=t[T];if(n!==void 0)return n.exports;var h=t[T]={exports:{}};return e[T].call(h.exports,h,h.exports,r),h.exports}var i={};(()=>{var T=i;Object.defineProperty(T,"__esModule",{value:!0}),T.Terminal=void 0;let n=r(5101),h=r(6097),p=r(4335),S=r(5856),o=r(3027),w=r(7150),c=["cols","rows"];class g extends w.Disposable{constructor(s){super(),this._core=this._register(new S.Terminal(s)),this._addonManager=this._register(new o.AddonManager),this._publicOptions={...this._core.options};let f=l=>this._core.options[l],d=(l,u)=>{this._checkReadonlyOptions(l),this._core.options[l]=u};for(let l in this._core.options){Object.defineProperty(this._publicOptions,l,{get:()=>this._core.options[l],set:m=>{this._checkReadonlyOptions(l),this._core.options[l]=m}});let u={get:f.bind(this,l),set:d.bind(this,l)};Object.defineProperty(this._publicOptions,l,u)}}_checkReadonlyOptions(s){if(c.includes(s))throw new Error(`Option "${s}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.options.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 onLineFeed(){return this._core.onLineFeed}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get parser(){return this._checkProposedApi(),this._parser||(this._parser=new h.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new p.UnicodeApi(this._core)}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._checkProposedApi(),this._buffer||(this._buffer=this._register(new n.BufferNamespaceApi(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){let s=this._core.coreService.decPrivateModes,f="none";switch(this._core.coreMouseService.activeProtocol){case"X10":f="x10";break;case"VT200":f="vt200";break;case"DRAG":f="drag";break;case"ANY":f="any"}return{applicationCursorKeysMode:s.applicationCursorKeys,applicationKeypadMode:s.applicationKeypad,bracketedPasteMode:s.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:f,originMode:s.origin,reverseWraparoundMode:s.reverseWraparound,sendFocusMode:s.sendFocus,synchronizedOutputMode:s.synchronizedOutput,wraparoundMode:s.wraparound}}get options(){return this._publicOptions}set options(s){for(let f in s)this._publicOptions[f]=s[f]}input(s,f=!0){this._core.input(s,f)}resize(s,f){this._verifyIntegers(s,f),this._core.resize(s,f)}registerMarker(s=0){return this._checkProposedApi(),this._verifyIntegers(s),this._core.addMarker(s)}addMarker(s){return this.registerMarker(s)}dispose(){super.dispose()}scrollLines(s){this._verifyIntegers(s),this._core.scrollLines(s)}scrollPages(s){this._verifyIntegers(s),this._core.scrollPages(s)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(s){this._verifyIntegers(s),this._core.scrollToLine(s)}clear(){this._core.clear()}write(s,f){this._core.write(s,f)}writeln(s,f){this._core.write(s),this._core.write(`\r
28
+ `,f)}reset(){this._core.reset()}loadAddon(s){this._addonManager.loadAddon(this,s)}_verifyIntegers(...s){for(let f of s)if(f===1/0||isNaN(f)||f%1!=0)throw new Error("This API only accepts integers")}}T.Terminal=g})();var a=ln;for(var y in i)a[y]=i[y];i.__esModule&&Object.defineProperty(a,"__esModule",{value:!0})})()});var de=["codex","cursor","claude"],go={codex:{id:"codex",displayName:"Codex",executable:"codex",defaultAgentTitle:"Codex"},cursor:{id:"cursor",displayName:"Cursor",executable:"cursor-agent",defaultAgentTitle:"Cursor"},claude:{id:"claude",displayName:"Claude",executable:"claude",defaultAgentTitle:"Claude"}};function pe(e){return go[e]}function ar(e,t={}){let r=pe(e),i=t.runners?.[e]?.path?.trim();return{...r,executable:i&&i.length>0?i:r.executable}}function ot(e={}){return de.filter(t=>e.runners?.[t]?.enabled!==!1)}function Ge(e={}){let t=ot(e);if(t.length===0)throw new Error("No runners are enabled. Enable at least one runner in .craig/config.json.");return t.includes("codex")?"codex":t[0]}function Pt(e,t={}){if(t.runners?.[e]?.enabled===!1)throw new Error(`Runner "${e}" is disabled in .craig/config.json.`)}function at(e){return de.includes(e)}function fs(e){if(!e||e.length===0)return"codex";if(!at(e))throw new Error(`Unsupported runner "${e}". Expected one of: ${de.join(", ")}.`);return e}function De(e){return pe(e).displayName}function ge(e,t,r={}){let i=[ar(e,r).executable];return t&&t.length>0&&i.push(t),i}function ps(e){let t=[...e];for(;t[0]==="--";)t.shift();if(t.length===0)return{mode:"interactive"};if(t.length>=3&&t[0]==="repo"&&t[1]==="add"){let r=t.slice(2).join(" ").trim();if(r.length===0)throw new Error(`Repo path cannot be empty.
29
+
30
+ `+me());return{mode:"command",command:{kind:"addRepo",path:r}}}if(t.length===2&&t[0]==="repo"&&t[1]==="list")return{mode:"command",command:{kind:"listRepos"}};if(t.length===3&&t[0]==="repo"&&t[1]==="remove")return{mode:"command",command:{kind:"removeRepo",repoId:t[2].trim()}};if(t.length>=2&&t.length<=3&&t[0]==="workspace"&&t[1]==="list"){let r=t[2]==="--archived";if(t.length===3&&!r)throw new Error(`Unsupported command: ${t.join(" ")}
31
+
32
+ ${me()}`);return{mode:"command",command:{kind:"listWorkspaces",archived:r}}}if(t.length===3&&t[0]==="workspace"&&t[1]==="archive")return{mode:"command",command:{kind:"archiveWorkspace",workspaceId:t[2].trim()}};if(t.length===3&&t[0]==="workspace"&&t[1]==="restore")return{mode:"command",command:{kind:"restoreWorkspace",workspaceId:t[2].trim()}};if(t.length>=2&&t[0]==="task"&&t[1]==="new"){let r=t.indexOf("--repo"),i=t.indexOf("--runner");if(r===-1)throw new Error(`Task creation now requires '--repo <repo-id>'.
33
+
34
+ `+me());let a=t[r+1]?.trim()??"",y=i===-1?void 0:fs(t[i+1]?.trim()??""),n=t.filter((h,p)=>p>1&&p!==r&&p!==r+1&&p!==i&&p!==i+1).join(" ").trim();if(a.length===0)throw new Error(`Repo id cannot be empty.
35
+
36
+ `+me());if(n.length===0)throw new Error(`Task prompt cannot be empty.
37
+
38
+ `+me());return{mode:"command",command:{kind:"createTask",repoId:a,prompt:n,...y?{runner:y}:{}}}}if(t.length>=2&&t.length<=4&&t[0]==="task"&&t[1]==="list"){if(t.length===2)return{mode:"command",command:{kind:"listTasks"}};if(t.length===4&&t[2]==="--repo")return{mode:"command",command:{kind:"listTasks",repoId:t[3].trim()}};throw new Error(`Unsupported command: ${t.join(" ")}
39
+
40
+ ${me()}`)}if(t.length===3&&t[0]==="task"&&t[1]==="attach")return{mode:"command",command:{kind:"attachTask",taskId:ye(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="show")return{mode:"command",command:{kind:"showTask",taskId:ye(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="logs")return{mode:"command",command:{kind:"streamTaskLogs",taskId:ye(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="diff")return{mode:"command",command:{kind:"showTaskDiff",taskId:ye(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="focus")return{mode:"command",command:{kind:"focusTask",taskId:ye(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="open")return{mode:"command",command:{kind:"openTask",taskId:ye(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="check")return{mode:"command",command:{kind:"runChecks",taskId:ye(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="commit")return{mode:"command",command:{kind:"commitTask",taskId:ye(t[2])}};if(t.length>=3&&t.length<=4&&t[0]==="task"&&t[1]==="pr"){let r=t[3]==="--watch";if(t.length===4&&!r)throw new Error(`Unsupported command: ${t.join(" ")}
41
+
42
+ ${me()}`);return{mode:"command",command:{kind:"openPullRequest",taskId:ye(t[2]),watch:r}}}if(t.length===4&&t[0]==="link"&&t[1]==="add")return{mode:"command",command:{kind:"addTaskLink",taskId:ye(t[2]),repoId:mo(t[3])}};if(t.length===3&&t[0]==="link"&&t[1]==="list")return{mode:"command",command:{kind:"listTaskLinks",taskId:ye(t[2])}};if(t.length>=3&&t.length<=4&&t[0]==="task"&&t[1]==="merge"){let r=t[3]==="--preserve-worktree";if(t.length===4&&!r)throw new Error(`Unsupported command: ${t.join(" ")}
43
+
44
+ ${me()}`);return{mode:"command",command:{kind:"mergeTask",taskId:ye(t[2]),preserveWorktree:r}}}throw new Error(`Unsupported command: ${t.join(" ")}
45
+
46
+ ${me()}`)}function me(){return["Craig commands:"," craig Show the Craig phase 0 placeholder"," craig repo add Register a repo in the current Craig workspace"," craig repo list List registered repos"," craig repo remove Remove a registered repo"," craig workspace list List active workspaces"," craig workspace list --archived List archived workspaces"," craig workspace archive Archive a workspace"," craig workspace restore Restore an archived workspace"," craig task new --repo <repo-id> [--runner codex|cursor|claude] <prompt> Create a new Craig task"," craig task list [--repo <repo-id>] List known Craig tasks"," craig task show Show details for a Craig task"," craig task logs Stream Craig-managed logs for a task"," craig task diff Show the current worktree diff for a task"," craig task attach Attach to a live task session"," craig task focus Focus the tmux pane for a task"," craig task open Open the task worktree or print its path"," craig task check Run configured checks for a task"," craig task commit Commit all task worktree changes"," craig task pr Create or refresh a task pull request"," craig task merge Merge a task pull request and clean up"," craig link add Add a linked repo to a task"," craig link list List linked repos for a task"].join(`
47
+ `)}function ye(e){let t=e.trim();if(t.length===0)throw new Error(`Task id cannot be empty.
48
+
49
+ ${me()}`);return t}function mo(e){let t=e.trim();if(t.length===0)throw new Error(`Repo id cannot be empty.
50
+
51
+ ${me()}`);return t}import Ks from"node:path";import{mkdir as _o,readFile as wo,writeFile as bo}from"node:fs/promises";import yo from"node:path";async function _e(e){try{let t=await wo(e.configFile,"utf8"),r=JSON.parse(t);return ms(r,e.configFile)}catch(t){if(So(t))return{};throw t instanceof SyntaxError?new Error(`Craig config at ${e.configFile} is malformed. Remove or repair the file before rerunning Craig.`):t}}async function gs(e,t){ms(t,e.configFile),await _o(yo.dirname(e.configFile),{recursive:!0}),await bo(e.configFile,`${JSON.stringify(t,null,2)}
52
+ `,"utf8")}function ms(e,t){if(typeof e!="object"||e===null)throw new Error(`Craig config at ${t} is invalid. Expected a JSON object.`);let r=e;if(r.runners!==void 0){if(typeof r.runners!="object"||r.runners===null||Array.isArray(r.runners))throw new Error(`Craig config at ${t} is invalid. "runners" must be an object.`);for(let[i,a]of Object.entries(r.runners)){if(!de.includes(i))throw new Error(`Craig config at ${t} is invalid. "runners.${i}" is not supported. Expected one of: ${de.join(", ")}.`);if(typeof a!="object"||a===null||Array.isArray(a))throw new Error(`Craig config at ${t} is invalid. "runners.${i}" must be an object.`);let y=a;if(y.enabled!==void 0&&typeof y.enabled!="boolean")throw new Error(`Craig config at ${t} is invalid. "runners.${i}.enabled" must be a boolean.`);if(y.path!==void 0&&(typeof y.path!="string"||y.path.trim().length===0))throw new Error(`Craig config at ${t} is invalid. "runners.${i}.path" must be a non-empty string.`)}}if(r.checks!==void 0&&(typeof r.checks!="object"||r.checks===null||!Array.isArray(r.checks.commands)||!r.checks.commands.every(i=>typeof i=="string")))throw new Error(`Craig config at ${t} is invalid. "checks.commands" must be an array of strings.`);if(r.open!==void 0&&(typeof r.open!="object"||r.open===null||!Array.isArray(r.open.command)||!r.open.command.every(i=>typeof i=="string")))throw new Error(`Craig config at ${t} is invalid. "open.command" must be an array of strings.`);if(r.github!==void 0){if(typeof r.github!="object"||r.github===null)throw new Error(`Craig config at ${t} is invalid. "github" must be an object.`);if(r.github.mergeMethod!==void 0&&r.github.mergeMethod!=="merge"&&r.github.mergeMethod!=="rebase"&&r.github.mergeMethod!=="squash")throw new Error(`Craig config at ${t} is invalid. "github.mergeMethod" must be "merge", "rebase", or "squash".`);if(r.github.watchIntervalSeconds!==void 0&&(!Number.isInteger(r.github.watchIntervalSeconds)||r.github.watchIntervalSeconds<=0))throw new Error(`Craig config at ${t} is invalid. "github.watchIntervalSeconds" must be a positive integer.`)}return r}function So(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{readFile as Ro,readdir as Zu,rm as eh}from"node:fs/promises";import Po from"node:path";import{randomUUID as vo}from"node:crypto";import{open as ko,readFile as Xu,rename as To,rm as Co}from"node:fs/promises";import cr from"node:path";async function ae(e,t){let r=cr.dirname(e),i=cr.join(r,`.${cr.basename(e)}.${process.pid}.${Date.now()}.${vo()}.tmp`),a=await ko(i,"w");try{let y=`${JSON.stringify(t,null,2)}
53
+ `;await a.writeFile(y,"utf8"),await a.sync(),await a.close(),await To(i,e)}catch(y){throw await a.close().catch(()=>{}),await Co(i,{force:!0}).catch(()=>{}),y}}async function We(e,t){let r=await Ro(lr(e,t),"utf8"),i=JSON.parse(r);return Io(i,lr(e,t))}async function Xe(e,t){await ae(lr(e,t.id),{...t,updatedAt:new Date().toISOString()})}function lr(e,t){return Po.join(e.sessionsDir,`${t}.json`)}function Io(e,t){let r=Ao(e);if(typeof r!="object"||r===null||typeof r.id!="string"||typeof r.taskId!="string"||typeof r.repoId!="string"||typeof r.workspaceId!="string"||r.substrate!=="tmux"||typeof r.sessionName!="string"||typeof r.paneId!="string"||!(r.windowTarget===null||typeof r.windowTarget=="string")||typeof r.worktreePath!="string"||!(r.logPath===null||typeof r.logPath=="string")||!Array.isArray(r.command)||!r.command.every(i=>typeof i=="string")||!["starting","running","exited","failed"].includes(r.status)||!(r.startedAt===null||typeof r.startedAt=="string")||!(r.exitedAt===null||typeof r.exitedAt=="string")||!(r.exitCode===null||typeof r.exitCode=="number")||!(r.lastAttachedAt===null||typeof r.lastAttachedAt=="string")||!Eo(r.attach)||!xo(r.snapshot)||typeof r.createdAt!="string"||typeof r.updatedAt!="string")throw new Error(`Craig session record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function xo(e){return e===null||typeof e=="object"&&e!==null&&typeof e.paneId=="string"&&(typeof e.windowTarget=="string"||e.windowTarget===null)&&typeof e.alive=="boolean"&&typeof e.capturedAt=="string"}function Eo(e){return typeof e=="object"&&e!==null&&e.detachChord==="ctrl+]"&&(e.lastSize===null||typeof e.lastSize=="object"&&e.lastSize!==null&&typeof e.lastSize.columns=="number"&&typeof e.lastSize.rows=="number")}function Ao(e){let t=typeof e=="object"&&e!==null?e:{};return{id:t.id??"",taskId:t.taskId??"",repoId:t.repoId??"",workspaceId:t.workspaceId??"",substrate:t.substrate??"tmux",sessionName:t.sessionName??"",paneId:t.paneId??"",windowTarget:typeof t.windowTarget=="string"?t.windowTarget:null,worktreePath:t.worktreePath??"",logPath:typeof t.logPath=="string"?t.logPath:null,command:Array.isArray(t.command)?t.command.filter(r=>typeof r=="string"):[],status:t.status??"starting",startedAt:typeof t.startedAt=="string"?t.startedAt:null,exitedAt:typeof t.exitedAt=="string"?t.exitedAt:null,exitCode:typeof t.exitCode=="number"?t.exitCode:null,lastAttachedAt:typeof t.lastAttachedAt=="string"?t.lastAttachedAt:null,attach:{detachChord:"ctrl+]",lastSize:typeof t.attach=="object"&&t.attach!==null&&t.attach.lastSize&&typeof t.attach.lastSize.columns=="number"&&typeof t.attach.lastSize.rows=="number"?t.attach.lastSize:null},snapshot:t.snapshot&&typeof t.snapshot=="object"?{paneId:typeof t.snapshot.paneId=="string"?t.snapshot.paneId:t.paneId??"",windowTarget:typeof t.snapshot.windowTarget=="string"?t.snapshot.windowTarget:null,alive:!!t.snapshot.alive,capturedAt:typeof t.snapshot.capturedAt=="string"?t.snapshot.capturedAt:new Date().toISOString()}:null,createdAt:t.createdAt??"",updatedAt:t.updatedAt??""}}import{readFile as Mo}from"node:fs/promises";import{readFile as Do}from"node:fs/promises";async function Re(e){let t=await Do(e.indexFile,"utf8"),r=JSON.parse(t);return dr(r,e.workspaceRoot,e.indexFile)}async function Ye(e,t){let r={...t,workspaceRoot:e.workspaceRoot,updatedAt:new Date().toISOString()};await ae(e.indexFile,r)}function dr(e,t,r){if(!Lo(e))throw new Error(`Craig index at ${r} is invalid. Remove or repair the file before rerunning Craig.`);if(e.workspaceRoot!==t)throw new Error(`Craig index at ${r} belongs to ${e.workspaceRoot}, not ${t}. Remove or repair the file before rerunning Craig.`);return e}function Lo(e){if(typeof e!="object"||e===null)return!1;let t=e;return t.version===2&&typeof t.workspaceRoot=="string"&&Array.isArray(t.repoIds)&&t.repoIds.every(r=>typeof r=="string")&&Array.isArray(t.workspaceIds)&&t.workspaceIds.every(r=>typeof r=="string")&&Array.isArray(t.taskIds)&&t.taskIds.every(r=>typeof r=="string")&&Array.isArray(t.jobIds)&&t.jobIds.every(r=>typeof r=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"}async function Se(e,t){let r=await Mo(ur(e,t),"utf8"),i=JSON.parse(r);return Oo(i,ur(e,t))}async function te(e,t){let r={...t,updatedAt:new Date().toISOString()};await ae(ur(e,t.id),r)}async function _s(e,t){let r=await Re(e);r.taskIds.includes(t)||await Ye(e,{...r,taskIds:[...r.taskIds,t]})}function ur(e,t){return`${e.tasksDir}/${t}.json`}function Oo(e,t){let r=Bo(e);if(!$o(r))throw new Error(`Craig task record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function Bo(e){if(typeof e!="object"||e===null)return e;let t=e;return{...t,runner:hr(t.runner),repoId:typeof t.repoId=="string"?t.repoId:"legacy_repo",workspaceId:typeof t.workspaceId=="string"?t.workspaceId:"legacy_workspace",sessionId:typeof t.sessionId=="string"||t.sessionId===null?t.sessionId:null,selectedPtyTabId:typeof t.selectedPtyTabId=="string"||t.selectedPtyTabId===null?t.selectedPtyTabId:null,linkedRepoIds:Array.isArray(t.linkedRepoIds)?t.linkedRepoIds.filter(r=>typeof r=="string"):[],ptyTabs:No(t),runnerSession:t.runnerSession??Fo(t),checks:Go(t),lastCommit:t.lastCommit??null,pullRequest:Xo(t),artifacts:Qo(t),cleanup:Jo(t)}}function Fo(e){if(typeof e.title!="string")return null;let t=hr(e.runner);return{command:ge(t,e.title),pid:null,startedAt:null,lastKnownState:e.status==="running"?"running":"starting",exitCode:null,exitedAt:null}}function $o(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.id=="string"&&typeof t.title=="string"&&typeof t.slug=="string"&&t.type==="repo"&&typeof t.status=="string"&&at(t.runner??"")&&typeof t.repoId=="string"&&typeof t.workspaceId=="string"&&(typeof t.sessionId=="string"||t.sessionId===null)&&(typeof t.selectedPtyTabId=="string"||t.selectedPtyTabId===null)&&Array.isArray(t.linkedRepoIds)&&t.linkedRepoIds.every(r=>typeof r=="string")&&typeof t.repoRoot=="string"&&typeof t.worktreePath=="string"&&typeof t.branch=="string"&&ws(t.ptyTabs)&&Wo(t.runnerSession)&&jo(t.prompt)&&Uo(t.checks)&&qo(t.lastCommit)&&Ko(t.pullRequest)&&zo(t.artifacts)&&Vo(t.cleanup)&&(t.lastFailureReason===void 0||t.lastFailureReason===null||typeof t.lastFailureReason=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"}function No(e){if(ws(e.ptyTabs))return e.ptyTabs;if(typeof e.id!="string"||typeof e.title!="string")return[];let t=typeof e.updatedAt=="string"?e.updatedAt:new Date().toISOString();return Ho(e.id,e.title,t,hr(e.runner))}function Ho(e,t,r,i){let a=pe(i);return[{id:`${e}:agent`,kind:"agent",title:a.defaultAgentTitle,command:ge(i),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function hr(e){return e&&at(e)?e:"codex"}function ws(e){return Array.isArray(e)&&e.every(t=>typeof t=="object"&&t!==null&&typeof t.id=="string"&&(t.kind==="agent"||t.kind==="terminal")&&typeof t.title=="string"&&Array.isArray(t.command)&&t.command.every(r=>typeof r=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string")}function Wo(e){return typeof e=="object"&&e!==null&&Array.isArray(e.command)&&e.command.every(t=>typeof t=="string")&&(typeof e.pid=="number"||e.pid===null)&&(typeof e.startedAt=="string"||e.startedAt===null)&&(e.lastKnownState==="starting"||e.lastKnownState==="running"||e.lastKnownState==="exited"||e.lastKnownState==="failed")&&(typeof e.exitCode=="number"||e.exitCode===null)&&(typeof e.exitedAt=="string"||e.exitedAt===null)}function jo(e){return typeof e=="object"&&e!==null&&(e.source==="inline"||e.source==="file")&&typeof e.value=="string"}function Uo(e){return typeof e=="object"&&e!==null&&typeof e.source=="object"&&e.source!==null&&e.source.type==="repo_config"&&typeof e.source.path=="string"&&(typeof e.lastRunAt=="string"||e.lastRunAt===null)&&(e.status==="not_run"||e.status==="running"||e.status==="passed"||e.status==="failed")&&Array.isArray(e.commands)&&e.commands.every(t=>typeof t=="string")&&Array.isArray(e.results)&&e.results.every(t=>typeof t=="object"&&t!==null&&typeof t.command=="string"&&typeof t.startedAt=="string"&&typeof t.finishedAt=="string"&&typeof t.exitCode=="number")}function qo(e){return e===null||typeof e=="object"&&e!==null&&typeof e.sha=="string"&&typeof e.message=="string"&&typeof e.committedAt=="string"}function Ko(e){return typeof e=="object"&&e!==null&&e.provider==="github"&&(typeof e.number=="number"||e.number===null)&&(typeof e.url=="string"||e.url===null)&&(typeof e.baseBranch=="string"||e.baseBranch===null)&&(typeof e.headBranch=="string"||e.headBranch===null)&&(e.status==="open"||e.status==="closed"||e.status==="merged"||e.status===null)&&typeof e.mergeable=="boolean"&&(typeof e.mergeStateStatus=="string"||e.mergeStateStatus===null)&&Array.isArray(e.requiredChecks)&&e.requiredChecks.every(t=>typeof t=="object"&&t!==null&&typeof t.name=="string"&&(t.status==="pending"||t.status==="success"||t.status==="failed"||t.status==="skipped"||t.status==="unknown")&&(typeof t.conclusion=="string"||t.conclusion===null))&&(typeof e.lastSyncedAt=="string"||e.lastSyncedAt===null)&&(typeof e.lastSyncedHeadSha=="string"||e.lastSyncedHeadSha===null||e.lastSyncedHeadSha===void 0)}function zo(e){return typeof e=="object"&&e!==null&&(typeof e.logPath=="string"||e.logPath===null)&&(typeof e.checkSummaryPath=="string"||e.checkSummaryPath===null)&&(typeof e.prDraftPath=="string"||e.prDraftPath===null)&&(typeof e.prStatusPath=="string"||e.prStatusPath===null)}function Vo(e){return typeof e=="object"&&e!==null&&(typeof e.paneClosedAt=="string"||e.paneClosedAt===null)&&(typeof e.worktreeRemovedAt=="string"||e.worktreeRemovedAt===null)&&typeof e.preservedWorktree=="boolean"&&(typeof e.warning=="string"||e.warning===null)}function Go(e){return e.checks?{...e.checks,results:e.checks.results??[]}:{source:{type:"repo_config",path:".craig/config.json"},lastRunAt:null,status:"not_run",commands:[],results:[]}}function Xo(e){let t=e.pullRequest;return t?{...t,mergeStateStatus:t.mergeStateStatus??null,requiredChecks:Yo(t.requiredChecks),lastSyncedHeadSha:t.lastSyncedHeadSha??null}:{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,mergeable:!1,mergeStateStatus:null,requiredChecks:[],lastSyncedAt:null,lastSyncedHeadSha:null}}function Yo(e){return Array.isArray(e)?e.map(t=>({...t,status:t.status==="pending"||t.status==="success"||t.status==="failed"||t.status==="skipped"||t.status==="unknown"?t.status:"unknown",conclusion:t.conclusion??null})):[]}function Qo(e){let t=e.artifacts;return t?{...t,checkSummaryPath:t.checkSummaryPath??null}:{logPath:null,checkSummaryPath:null,prDraftPath:null,prStatusPath:null}}function Jo(e){return e.cleanup??{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}import{readFile as Zo}from"node:fs/promises";async function Pe(e){try{let t=await Zo(e.uiStateFile,"utf8"),r=JSON.parse(t);return ea(r,e.uiStateFile)}catch(t){if(ra(t))return null;throw t}}async function ve(e,t){await ae(e.uiStateFile,{...t,updatedAt:new Date().toISOString()})}function Le(){return{version:1,selectedRepoId:null,selectedWorkspaceId:null,selectedTaskId:null,selectedPtyTabId:null,inputMode:"control",focusedRegion:"tasks",activeTab:"agent",inspectorSection:"task",inspectionMode:"files",openInspectionKind:null,selectedFileTreePath:null,selectedFilePath:null,selectedDiffPath:null,collapsedFileTreePaths:[],selectedActionId:"commit",updatedAt:new Date().toISOString()}}function ea(e,t){if(typeof e!="object"||e===null||e.version!==1||!(e.selectedRepoId===null||typeof e.selectedRepoId=="string")||!(e.selectedWorkspaceId===null||typeof e.selectedWorkspaceId=="string")||!(e.selectedTaskId===null||typeof e.selectedTaskId=="string")||!(e.selectedPtyTabId===void 0||e.selectedPtyTabId===null||typeof e.selectedPtyTabId=="string")||!ct(e,"inputMode")||!ct(e,"focusedRegion")||!ct(e,"activeTab")||!ct(e,"inspectorSection")||!ct(e,"inspectionMode")||!It(e,"openInspectionKind")||!It(e,"selectedFileTreePath")||!It(e,"selectedFilePath")||!It(e,"selectedDiffPath")||!ta(e,"collapsedFileTreePaths")||!ct(e,"selectedActionId")||typeof e.updatedAt!="string")throw new Error(`Craig UI state at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return e}function ct(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||typeof e[t]=="string")}function It(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||e[t]===null||typeof e[t]=="string")}function ta(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||Array.isArray(e[t])&&e[t].every(r=>typeof r=="string"))}function ra(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{execFile as sa}from"node:child_process";import{promisify as ia}from"node:util";var bs=ia(sa);async function J(e,t,r={}){try{let i=await bs(e,t,{cwd:r.cwd,env:r.env});return{stdout:i.stdout,stderr:i.stderr}}catch(i){if(ys(i)){let a=i.stderr?.trim()||i.stdout?.trim()||i.message;throw new Error(`${e} ${t.join(" ")} failed: ${a}`)}throw i}}async function oe(e,t,r={}){try{let i=await bs(e,t,{cwd:r.cwd,env:r.env});return{stdout:i.stdout,stderr:i.stderr,exitCode:0}}catch(i){if(ys(i))return{stdout:i.stdout??"",stderr:i.stderr??"",exitCode:typeof i.code=="number"?i.code:null};throw i}}function ys(e){return e instanceof Error}function xt(e){return`'${e.replace(/'/g,"'\\''")}'`}import{accessSync as na,constants as oa}from"node:fs";import{homedir as Ss}from"node:os";import je from"node:path";var aa=[je.join(Ss(),".local","bin"),je.join(Ss(),".cursor","bin"),"/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin"];function ks(e=process.env){return la([...(e.PATH??"").split(je.delimiter).filter(t=>t.length>0),...e.CRAIG_DISABLE_COMMAND_PATH_FALLBACKS==="1"?[]:aa])}function Qe(e=process.env){return{...e,PATH:ks(e).join(je.delimiter)}}function ca(e,t={}){if(e.includes(je.sep)){let r=je.isAbsolute(e)?e:je.resolve(t.cwd??process.cwd(),e);return vs(r)?r:null}for(let r of ks(t.env)){let i=je.join(r,e);if(vs(i))return i}return null}function Je(e,t={}){let r=ca(e,t);if(r)return r;throw new Error(`Command not found: ${e}. Install it or add its directory to PATH. Craig also checks ~/.local/bin, /opt/homebrew/bin, and /usr/local/bin.`)}function vs(e){try{return na(e,oa.X_OK),!0}catch{return!1}}function la(e){return[...new Set(e)]}import{spawn as da}from"node:child_process";import{createHash as ua}from"node:crypto";import ha from"node:path";var fa="craig";async function Ts(e,t,r){let i=fr(e,t),a=ga(),y=await J("tmux",["new-session","-d","-P","-F","#{session_name} #{window_id} #{pane_id}","-s",i,"-n","runner",...a,"-c",r],{cwd:e}),T=_a(y.stdout);return await pa(e,i),T}async function pa(e,t){let r=[["set-option","-t",t,"status","off"],["set-option","-t",t,"detach-on-destroy","off"],["set-window-option","-t",t,"pane-border-status","off"],["set-window-option","-t",t,"aggressive-resize","on"]];for(let i of r)await J("tmux",i,{cwd:e})}async function Cs(e,t,r){await J("tmux",["resize-window","-t",t,"-x",`${r.columns}`,"-y",`${r.rows}`],{cwd:e})}async function Rs(e,t,r){await J("tmux",["send-keys","-t",e,t,"C-m"],{cwd:r})}async function Ps(e,t,r){await J("tmux",["pipe-pane","-o","-t",e,`cat >> ${xt(t)}`],{cwd:r})}async function Et(e,t,r,i){let a=i??xs(e);if(r?await J("tmux",["select-window","-t",r],{cwd:e}):await J("tmux",["select-window","-t",t],{cwd:e}),await J("tmux",["select-pane","-t",t],{cwd:e}),process.env.TMUX){await J("tmux",["switch-client","-t",a],{cwd:e});return}await ba(e,["attach-session","-t",a])}async function Is(e,t){await J("tmux",["kill-session","-t",t],{cwd:e})}function xs(e){let r=ha.basename(e).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"repo",i=ua("sha1").update(e).digest("hex").slice(0,8);return`${fa}-${r}-${i}`}function fr(e,t){return`${xs(e)}-${t.toLowerCase()}`}function ga(){let e=ma();return e?["-x",`${e.columns}`,"-y",`${e.rows}`]:[]}function ma(){let e=[process.stdout,process.stderr,process.stdin];for(let t of e){let r="columns"in t?t.columns:void 0,i="rows"in t?t.rows:void 0;if(typeof r=="number"&&r>0&&typeof i=="number"&&i>0)return{columns:r,rows:i}}return null}function _a(e){let t=wa(e);if(t.length<3)throw new Error("tmux did not return the expected session, window, and pane targets for the Craig task session.");return{sessionName:t[0],windowTarget:t[1],paneId:t[2]}}function wa(e){return e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0)}async function ba(e,t){await new Promise((r,i)=>{let a=da("tmux",t,{cwd:e,stdio:"inherit"});a.on("error",i),a.on("exit",y=>{if(y===0){r();return}i(new Error(`tmux ${t.join(" ")} failed with exit code ${y??"unknown"}.`))})})}var pr={async prepare(e,t){let r=e.runnerSession.command[0]??ge(e.runner)[0],i=Qe();await J(Je(r,{cwd:t.repoRoot,env:i}),["--help"],{cwd:t.repoRoot,env:i})},async launch(e,t){let r=e.runnerSession.command.length>0?e.runnerSession.command:ge(e.runner,e.prompt.value),i=Je(r[0],{cwd:e.worktreePath,env:Qe()});await Rs(t.session.paneId,[i,...r.slice(1)].map(a=>xt(a)).join(" "),t.repoRoot)},async status(e){return e.runnerSession.lastKnownState},async stop(){},async collectArtifacts(){}};var pt={async create(e,t){let r=await Ts(t.repoRoot,t.taskId,t.worktreePath);t.logPath&&await Ps(r.paneId,t.logPath,t.repoRoot);let i=await Es({paneId:r.paneId,windowTarget:r.windowTarget,alive:!0}),a={id:t.sessionId,taskId:t.taskId,repoId:t.repoId,workspaceId:t.workspaceId,substrate:"tmux",sessionName:r.sessionName||fr(t.repoRoot,t.taskId),paneId:r.paneId,windowTarget:r.windowTarget,worktreePath:t.worktreePath,logPath:t.logPath,command:t.command,status:"starting",startedAt:null,exitedAt:null,exitCode:null,lastAttachedAt:null,attach:{detachChord:"ctrl+]",lastSize:null},snapshot:i,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return await Xe(e,a),a},async attach(e,t,r){let i=await pt.snapshot(t,r);if(!i.alive)throw new Error(`Session ${t.id} is no longer live and cannot be attached.`);await Et(r,t.paneId,t.windowTarget,t.sessionName);let a={...t,status:"running",lastAttachedAt:new Date().toISOString(),snapshot:i};return await Xe(e,a),a},async resize(e,t,r,i){await Cs(i,t.sessionName,r);let a={...t,attach:{...t.attach,lastSize:r}};return await Xe(e,a),a},async write(){throw new Error("Direct session writes are owned by the terminal bridge.")},async read(){throw new Error("Direct session reads are owned by the terminal bridge.")},async terminate(e,t,r){let i={...t,status:"failed",exitedAt:new Date().toISOString(),snapshot:{...t.snapshot??{paneId:t.paneId,windowTarget:t.windowTarget,alive:!1,capturedAt:new Date().toISOString()},alive:!1,capturedAt:new Date().toISOString()},command:(r.length>0,t.command)};return await Xe(e,i),i},async snapshot(e,t){return ya(e,t)}};async function ya(e,t){let r=await oe("tmux",["list-panes","-F","#{pane_id}","-t",e.paneId],{cwd:t});return Es({paneId:e.paneId,windowTarget:e.windowTarget,alive:r.exitCode===0&&r.stdout.split(/\s+/).some(i=>i.trim()===e.paneId)})}async function Es(e){return{paneId:e.paneId,windowTarget:e.windowTarget,alive:e.alive,capturedAt:new Date().toISOString()}}import{mkdir as qs,writeFile as Da}from"node:fs/promises";import Ie from"node:path";import{readFile as Sa,readdir as va,rm as ka}from"node:fs/promises";import As from"node:path";async function Me(e,t){let r=await Sa(At(e,t),"utf8"),i=JSON.parse(r);return Ta(i,At(e,t))}async function Ds(e,t){await ae(At(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function gt(e){let t=await va(e.reposDir,{withFileTypes:!0});return(await Promise.all(t.filter(i=>i.isFile()&&i.name.endsWith(".json")).map(i=>Me(e,As.basename(i.name,".json"))))).sort((i,a)=>i.name.localeCompare(a.name)||i.id.localeCompare(a.id))}async function Ls(e,t){await ka(At(e,t),{force:!0})}function At(e,t){return As.join(e.reposDir,`${t}.json`)}function Ta(e,t){if(typeof e!="object"||e===null||typeof e.id!="string"||typeof e.name!="string"||typeof e.rootPath!="string"||typeof e.defaultBranch!="string"||typeof e.createdAt!="string"||typeof e.updatedAt!="string")throw new Error(`Craig repo record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return e}import{readFile as Ca,readdir as Ra,rm as Pa}from"node:fs/promises";import Ms from"node:path";async function Lt(e,t){let r=await Ca(Dt(e,t),"utf8"),i=JSON.parse(r);return Ia(i,Dt(e,t))}async function mt(e,t){await ae(Dt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function Ze(e){let t=await Ra(e.workspacesDir,{withFileTypes:!0});return(await Promise.all(t.filter(i=>i.isFile()&&i.name.endsWith(".json")).map(i=>Lt(e,Ms.basename(i.name,".json"))))).sort((i,a)=>i.id.localeCompare(a.id))}async function Os(e,t){await Pa(Dt(e,t),{force:!0})}function Dt(e,t){return Ms.join(e.workspacesDir,`${t}.json`)}function Ia(e,t){if(typeof e!="object"||e===null||typeof e.id!="string"||typeof e.primaryRepoId!="string"||typeof e.branch!="string"||e.status!=="active"&&e.status!=="archived"||!Array.isArray(e.linkedRepoIds)||!(e.linkedRepoIds??[]).every(r=>typeof r=="string")||!(e.archivedAt===null||typeof e.archivedAt=="string")||typeof e.createdAt!="string"||typeof e.updatedAt!="string")throw new Error(`Craig workspace record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return e}async function Bs(e,t){let r=await oe("git",["show-ref","--verify","--quiet",`refs/heads/${t}`],{cwd:e});if(r.exitCode===0)return!0;if(r.exitCode===1)return!1;throw new Error(r.stderr.trim()||r.stdout.trim()||"Unable to check git branch state.")}async function Fs(e,t,r){if((await oe("git",["show-ref","--verify","--quiet","refs/heads/main"],{cwd:e})).exitCode!==0)throw new Error("Base branch 'main' does not exist locally.");let a=await xa(e);await J("git",["worktree","add","-b",t,r,a],{cwd:e})}async function xa(e){return(await oe("git",["remote","get-url","origin"],{cwd:e})).exitCode!==0||(await oe("git",["fetch","origin","main"],{cwd:e})).exitCode!==0?"main":(await oe("git",["show-ref","--verify","--quiet","refs/remotes/origin/main"],{cwd:e})).exitCode===0?"refs/remotes/origin/main":"main"}async function _t(e){let t=await oe("git",["status","--short"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"Unable to inspect git status.");return t.stdout.trim().length>0}async function $s(e){await J("git",["add","-A"],{cwd:e})}async function Ns(e,t){await J("git",["commit","-m",t],{cwd:e})}async function Mt(e){let t=await J("git",["show","-s","--format=%H%n%s","HEAD"],{cwd:e}),[r="",i=""]=t.stdout.trim().split(`
54
+ `);if(!r||!i)throw new Error("Unable to read git HEAD commit metadata.");return{sha:r,message:i}}async function Ot(e){return!await _t(e)}async function Hs(e){await J("git",["remote","get-url","origin"],{cwd:e})}async function Ws(e,t){await J("git",["push","-u","origin",t],{cwd:e})}async function js(e,t){await J("git",["worktree","remove","--force",t],{cwd:e})}async function Us(e,t){let r=await Re(e),i=Ea(new Date),a=Aa(r.taskIds,i);for(;;){let y=`task_${i}_${String(a).padStart(2,"0")}`,T=`craig/${y}`;if(!await Bs(t,T))return y;a+=1}}function Ea(e){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),i=String(e.getDate()).padStart(2,"0");return`${t}${r}${i}`}function Aa(e,t){let r=e.filter(i=>i.startsWith(`task_${t}_`)).map(i=>Number.parseInt(i.slice(-2),10)).filter(i=>Number.isInteger(i));return r.length===0?1:Math.max(...r)+1}async function Bt(e,t,r,i={}){let a=await Me(e,t),y=await Oa(e,a.id),T=await Us(e,a.rootPath),n=i.sessionId??null,h=`craig/${T}`,p=Ie.join(e.worktreesDir,a.id,T),S=Ie.join(e.logsDir,`${T}.log`),o=Ie.join(e.artifactsDir,T);await qs(Ie.dirname(p),{recursive:!0}),await qs(o,{recursive:!0}),await Da(S,"","utf8");let w=Ma(e,{taskId:T,repoId:a.id,workspaceId:y.id,sessionId:n,repoRoot:a.rootPath,prompt:r,runner:i.runner??"codex",config:i.config??{},branch:h,worktreePath:p});return await te(e,w),await _s(e,T),await Fs(a.rootPath,h,p),{repoId:a.id,repoRoot:a.rootPath,sessionId:n,workspaceId:y.id,task:w}}function La(e,t,r,i="codex",a={}){let y=pe(i);return[{id:`${e}:agent`,kind:"agent",title:y.defaultAgentTitle,command:ge(i,void 0,a),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function Ma(e,t){let r=new Date().toISOString(),i=La(t.taskId,t.prompt,r,t.runner,t.config);return{id:t.taskId,title:t.prompt,slug:Ba(t.prompt),type:"repo",status:"draft",runner:t.runner,repoId:t.repoId,workspaceId:t.workspaceId,sessionId:t.sessionId,selectedPtyTabId:i[0]?.id??null,linkedRepoIds:[],repoRoot:t.repoRoot,worktreePath:t.worktreePath,branch:t.branch,ptyTabs:i,runnerSession:{command:ge(t.runner,t.prompt,t.config),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:t.prompt},checks:{source:{type:"repo_config",path:Ie.relative(e.workspaceRoot,e.configFile)},lastRunAt:null,status:"not_run",commands:[],results:[]},lastCommit:null,pullRequest:{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,mergeable:!1,mergeStateStatus:null,requiredChecks:[],lastSyncedAt:null,lastSyncedHeadSha:null},artifacts:{logPath:Ie.relative(e.workspaceRoot,Ie.join(e.logsDir,`${t.taskId}.log`)),checkSummaryPath:Ie.relative(e.workspaceRoot,Ie.join(e.artifactsDir,t.taskId,"check-summary.json")),prDraftPath:null,prStatusPath:Ie.relative(e.workspaceRoot,Ie.join(e.artifactsDir,t.taskId,"pr-status.json"))},cleanup:{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null},lastFailureReason:null,createdAt:r,updatedAt:r}}async function Oa(e,t){let i=(await Ze(e)).find(a=>a.primaryRepoId===t&&a.status==="active");if(!i)throw new Error(`Repo ${t} does not have an active workspace.`);return i}function Ba(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}async function zs(e,t,r,i={}){let a=r.trim(),y=await _e(e),T=i.runner??Ge(y);if(Pt(T,y),t.trim().length===0)throw new Error("Repo id cannot be empty.");if(a.length===0)throw new Error("Task prompt cannot be empty.");let n=await Bt(e,t,a,{runner:T,config:y}),h=n.task,p=ge(T,a,y),S=`session_${h.id}`,o=h.artifacts.logPath?Ks.resolve(e.workspaceRoot,h.artifacts.logPath):Ks.join(e.logsDir,`${h.id}.log`);try{await pr.prepare(h,{repoRoot:n.repoRoot});let w=await pt.create(e,{sessionId:S,taskId:h.id,repoId:n.repoId,workspaceId:n.workspaceId,repoRoot:n.repoRoot,worktreePath:h.worktreePath,logPath:o,command:p});await pr.launch(h,{repoRoot:n.repoRoot,session:w});let c=new Date().toISOString();w={...w,status:"running",startedAt:c,command:p};let g={...h,status:"running",runner:T,sessionId:w.id,selectedPtyTabId:h.selectedPtyTabId,runnerSession:{command:w.command,pid:null,startedAt:c,lastKnownState:"running",exitCode:null,exitedAt:null}};return await te(e,g),await Xe(e,w),await ve({uiStateFile:e.uiStateFile},{...await Pe({uiStateFile:e.uiStateFile})??Le(),selectedRepoId:g.repoId,selectedWorkspaceId:g.workspaceId,selectedTaskId:g.id,selectedPtyTabId:g.selectedPtyTabId}),{kind:"createTask",taskId:g.id,repoId:g.repoId,sessionId:w.id,status:g.status,branch:g.branch,worktreePath:g.worktreePath,runner:g.runner}}catch(w){let c={...h,sessionId:null,status:"draft",runnerSession:{...h.runnerSession,lastKnownState:"failed"},lastFailureReason:w instanceof Error?w.message:"Unknown Craig error"};throw await te(e,c),w}}async function et(e,t){let r=await Re(e),i=[],a=[];await Promise.all(r.taskIds.map(async n=>{try{i.push(await Se(e,n))}catch(h){if(Fa(h)){a.push(n);return}throw h}}));let y=t?.includeClosed?i:i.filter(n=>n.status!=="closed"),T=t?.repoId?y.filter(n=>n.repoId===t.repoId):y;return T.sort((n,h)=>n.id.localeCompare(h.id)),a.sort(),{kind:"listTasks",tasks:T,missingTaskIds:a,repoId:t?.repoId??null}}function Fa(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{access as $a}from"node:fs/promises";import Vs from"node:path";async function ie(e,t){try{return await Se(e,t)}catch(r){throw Ua(r)?new Error(`Craig task "${t}" was not found.`):r}}async function ue(e){if(!await gr(e.worktreePath))throw new Error(`Task ${e.id} worktree does not exist at ${e.worktreePath}. Repair or recreate the task before retrying.`)}function mr(e,t){return t.artifacts.logPath?Vs.isAbsolute(t.artifacts.logPath)?t.artifacts.logPath:Vs.join(e.workspaceRoot,t.artifacts.logPath):null}async function Gs(e,t){let r=await gr(t.worktreePath),i=mr(e,t),a=i?await gr(i):!1;return{worktreeExists:r,logExists:a,recentFailureReason:t.lastFailureReason??null,runnerCommandText:t.runnerSession.command.join(" "),checksSummary:Na(t),lastCommitSummary:Ha(t),prSummary:Wa(t),cleanupSummary:ja(t)}}async function gr(e){try{return await $a(e),!0}catch{return!1}}function Na(e){let t=e.checks.commands.length,r=t===1?"command":"commands",i=e.checks.lastRunAt?` at ${e.checks.lastRunAt}`:"";return`${e.checks.status} (${t} ${r})${i}`}function Ha(e){return e.lastCommit?`${e.lastCommit.sha.slice(0,7)} ${e.lastCommit.message}`:"not committed"}function Wa(e){if(!e.pullRequest.number||!e.pullRequest.url)return"not linked";let t=e.pullRequest.requiredChecks.length,r=t===1?"check":"checks";return`#${e.pullRequest.number} ${e.pullRequest.status??"unknown"} mergeable=${e.pullRequest.mergeable} mergeState=${e.pullRequest.mergeStateStatus??"unknown"} (${t} ${r})`}function ja(e){return e.status!=="merged"?"not merged":e.cleanup.warning?`warning: ${e.cleanup.warning}`:e.cleanup.preservedWorktree?"preserved worktree":e.cleanup.worktreeRemovedAt?`worktree removed at ${e.cleanup.worktreeRemovedAt}`:"cleanup pending"}function Ua(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}async function Xs(e,t){let r=await ie(e,t);if(!r.sessionId)throw new Error(`Task ${r.id} does not have a Craig session to attach.`);let[i,a]=await Promise.all([Me(e,r.repoId),We(e,r.sessionId)]),y=await pt.attach(e,a,i.rootPath);return{kind:"attachTask",taskId:r.id,sessionId:y.id,disposition:"attached"}}import{mkdir as Qs,readFile as qa,writeFile as Ka}from"node:fs/promises";import Ft from"node:path";import Ys from"node:path";function wt(e,t){return t?Ys.isAbsolute(t)?t:Ys.join(e.repoRoot,t):null}async function lt(e){let t=await oe("gh",["auth","status"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"GitHub CLI auth is required.")}async function Js(e,t){let r=wt(t,e.artifacts.prDraftPath??Ft.join(".craig","artifacts",e.id,"pr.md"));if(!r)throw new Error(`Task ${e.id} is missing a PR draft artifact path.`);await Qs(Ft.dirname(r),{recursive:!0});try{await qa(r,"utf8")}catch{await Ka(r,`## Summary
55
+
56
+ - ${e.title}
57
+ `,"utf8")}return e.artifacts.prDraftPath=Ft.relative(t.repoRoot,r),r}async function Zs(e,t){await J("gh",["pr","create","--base","main","--head",e.branch,"--title",e.lastCommit?.message??e.title,"--body-file",t],{cwd:e.worktreePath})}async function ei(e,t){let r=t==="merge"?"--merge":t==="rebase"?"--rebase":"--squash";await J("gh",["pr","merge",String(e.pullRequest.number),r,"--delete-branch=false"],{cwd:e.worktreePath})}async function tt(e,t){let r=await J("gh",ri(t.pullRequest.number?String(t.pullRequest.number):t.branch),{cwd:t.worktreePath}),i=JSON.parse(r.stdout);return si(e,t,i)}async function _r(e,t){let r=await oe("gh",ri(t.branch),{cwd:t.worktreePath});if(r.exitCode!==0)return{discovered:!1,task:t};let i=JSON.parse(r.stdout);return await si(e,t,i),{discovered:!0,task:t}}async function wr(e,t){let i=((await _e(e)).github?.watchIntervalSeconds??10)*1e3;for(;;){if(await tt(e,t),Va(t.pullRequest))return t;await new Promise(a=>setTimeout(a,i))}}async function br(e,t){let r=wt(e,t.artifacts.prStatusPath);r&&(await Qs(Ft.dirname(r),{recursive:!0}),await ae(r,{taskId:t.id,pullRequest:t.pullRequest}))}function ti(e){return e.requiredChecks.length===0?"no required checks":e.requiredChecks.map(t=>`${t.name}:${t.status}`).join(", ")}function rt(e){return e.mergeable&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}function za(e){return e.requiredChecks.some(t=>t.status==="failed")}function Va(e){return rt(e)||za(e)||e.status==="closed"||e.status==="merged"}function Ga(e){return rt(e)?"merge_ready":e.status==="merged"?"merged":e.status==="open"?"pr_open":"checked"}function ri(e){return["pr","view",e,"--json","number,url,baseRefName,headRefName,headRefOid,state,mergeable,mergeStateStatus,statusCheckRollup"]}async function si(e,t,r){let i=Xa(r);return t.pullRequest=i,t.status=Ga(i),await br(e,t),await te(e,t),t}function Xa(e){return{provider:"github",number:e.number,url:e.url,baseBranch:e.baseRefName,headBranch:e.headRefName,status:Ya(e.state),mergeable:e.mergeable==="MERGEABLE",mergeStateStatus:e.mergeStateStatus,requiredChecks:Qa(e.statusCheckRollup),lastSyncedAt:new Date().toISOString(),lastSyncedHeadSha:e.headRefOid??null}}function Ya(e){return e==="OPEN"?"open":e==="MERGED"?"merged":e==="CLOSED"?"closed":null}function Qa(e){return e.map(t=>Ja(t)).filter(t=>t!==null)}function Ja(e){if(typeof e!="object"||e===null)return null;let t=e,r=t.name??t.context,i=t.state??t.status??t.conclusion;return r?{name:r,status:ii(i??null,t.conclusion??null),conclusion:t.conclusion??null}:null}function ii(e,t){let r=e?.toUpperCase()??null,i=t?.toUpperCase()??null;return i==="SKIPPED"||r==="SKIPPED"?"skipped":r==="SUCCESS"||i==="SUCCESS"||i==="NEUTRAL"?"success":r==="PENDING"||r==="EXPECTED"||r==="IN_PROGRESS"||r==="QUEUED"||r==="REQUESTED"||r==="WAITING"?"pending":r==="FAILURE"||r==="FAILED"||r==="ERROR"||r==="TIMED_OUT"||r==="CANCELLED"||r==="ACTION_REQUIRED"||r==="STARTUP_FAILURE"||i==="FAILURE"||i==="FAILED"||i==="ERROR"||i==="TIMED_OUT"||i==="CANCELLED"||i==="ACTION_REQUIRED"||i==="STARTUP_FAILURE"?"failed":r==="COMPLETED"&&i===null?"unknown":r==="COMPLETED"&&i!==null?ii(i,i):"unknown"}async function bt(e,t,r){let i=await ie(e,t);await ue(i),await Hs(i.worktreePath),await lt(i.worktreePath);let a=!!i.pullRequest.number;if(!a&&(await _r(e,i)).discovered)return r.watch&&i.pullRequest.status!=="merged"&&!rt(i.pullRequest)&&await wr(e,i),ni(i,r.watch,"discovered");if(i.status!=="checked"&&i.status!=="pr_open"&&i.status!=="merge_ready")throw new Error(`Task ${i.id} cannot open a pull request from status "${i.status}".`);if(!i.lastCommit)throw new Error(`Task ${i.id} must be committed before opening a pull request.`);if(!await Ot(i.worktreePath))throw new Error(`Task ${i.id} worktree must be clean before opening a pull request.`);let y=await Js(i,e);return await te(e,i),await Ws(i.worktreePath,i.branch),i.pullRequest.number||await Zs(i,y),await tt(e,i),r.watch&&i.pullRequest.status!=="merged"&&!rt(i.pullRequest)&&await wr(e,i),await br(e,i),ni(i,r.watch,a?"synced":"created")}async function oi(e,t){let r=await ie(e,t);return r.pullRequest.number&&(await lt(r.worktreePath),await tt(e,r)),r}async function yr(e,t){let r=await ie(e,t);return await ue(r),await lt(r.worktreePath),r.pullRequest.number?(await tt(e,r),{disposition:"synced",task:r}):{disposition:(await _r(e,r)).discovered?"discovered":"not_found",task:r}}function ni(e,t,r){return{kind:"openPullRequest",taskId:e.id,watch:t,disposition:r,prNumber:e.pullRequest.number??0,url:e.pullRequest.url??"",status:e.status,mergeable:e.pullRequest.mergeable,requiredChecksSummary:ti(e.pullRequest)}}async function Sr(e,t){let r=await ie(e,t);if(r.pullRequest.number)try{r=await oi(e,t)}catch{}let i=await Gs(e,r),a=r.sessionId?await We(e,r.sessionId).catch(()=>null):null;return{kind:"showTask",task:r,inspection:i,session:a}}import{access as Za}from"node:fs/promises";async function vr(e,t){let r=await ie(e,t),i=mr(e,r);if(!i)throw new Error(`Task ${r.id} does not have a Craig-managed log path.`);try{await Za(i)}catch{throw new Error(`Task ${r.id} log file does not exist yet at ${i}.`)}return{kind:"streamTaskLogs",taskId:r.id,logPath:i}}async function kr(e,t){let r=await ie(e,t);if(await ue(r),(await J("git",["status","--short"],{cwd:r.worktreePath})).stdout.trim().length===0)return{kind:"showTaskDiff",taskId:r.id,diffText:"",isEmpty:!0};let a=await ec(r.worktreePath);return{kind:"showTaskDiff",taskId:r.id,diffText:a,isEmpty:!1}}async function ec(e){let t=[],r=await J("git",["diff","--stat","--patch","HEAD"],{cwd:e});r.stdout.trim().length>0&&t.push(r.stdout.trimEnd());let i=await tc(e);for(let a of i){let y=await oe("git",["diff","--no-index","--stat","--patch","--","/dev/null",a],{cwd:e});t.push(y.stdout.trimEnd())}return t.join(`
58
+
59
+ `)}async function tc(e){return(await J("git",["ls-files","--others","--exclude-standard"],{cwd:e})).stdout.split(`
60
+ `).map(r=>r.trim()).filter(r=>r.length>0)}async function Tr(e,t){let r=await ie(e,t);if(!r.sessionId)throw new Error(`Task ${r.id} does not have a Craig session.`);let i=await We(e,r.sessionId).catch(a=>{throw rc(a)?new Error(`Task ${r.id} does not have a Craig session.`):a});if(!i.paneId)throw new Error(`Task ${r.id} does not have a tmux target.`);return await Et(e.repoRoot,i.paneId,i.windowTarget,i.sessionName),{kind:"focusTask",taskId:r.id,tmuxTarget:i.paneId}}function rc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as sc}from"node:child_process";async function Cr(e,t){let r=await ie(e,t);await ue(r);let a=(await _e(e)).open?.command??[];if(a.length===0)return{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!1,command:null};let y=[...a,r.worktreePath];return await ic(y,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:y}}async function ic(e,t){await new Promise((r,i)=>{let[a,...y]=e,T=sc(a,y,{cwd:t,stdio:"inherit"});T.on("error",i),T.on("exit",n=>{if(n===0){r();return}i(new Error(`${e.join(" ")} failed with exit code ${n??"unknown"}.`))})})}import{mkdir as nc}from"node:fs/promises";import oc from"node:path";async function Rr(e,t){let r=await ie(e,t);if(await ue(r),r.status==="draft"||r.status==="merged")throw new Error(`Task ${r.id} cannot run checks from status "${r.status}".`);if(r.status==="running"&&await _t(r.worktreePath)&&(r.status="review"),r.status!=="review"&&r.status!=="checked")throw new Error(`Task ${r.id} cannot run checks from status "${r.status}".`);let a=(await _e(e)).checks?.commands??[];if(a.length===0)throw new Error(`Craig config at ${e.configFile} does not define any "checks.commands".`);r.checks.status="running",r.checks.commands=[...a],r.checks.results=[],await te(e,r);let y=[];for(let T of a){let n=new Date().toISOString(),h=await oe("sh",["-lc",T],{cwd:r.worktreePath}),p=new Date().toISOString(),S=h.exitCode??1;if(y.push({command:T,startedAt:n,finishedAt:p,exitCode:S}),S!==0)return r.checks.results=y,r.checks.status="failed",r.checks.lastRunAt=p,r.status="review",r.lastFailureReason=h.stderr.trim()||h.stdout.trim()||`Check command failed: ${T}`,await ai(e,r),await te(e,r),{kind:"runChecks",taskId:r.id,status:"failed",commands:a}}return r.checks.results=y,r.checks.status="passed",r.checks.lastRunAt=new Date().toISOString(),r.status="checked",r.lastFailureReason=null,await ai(e,r),await te(e,r),{kind:"runChecks",taskId:r.id,status:"passed",commands:a}}async function ai(e,t){let r=wt(e,t.artifacts.checkSummaryPath);r&&(await nc(oc.dirname(r),{recursive:!0}),await ae(r,{taskId:t.id,status:t.checks.status,lastRunAt:t.checks.lastRunAt,commands:t.checks.commands,results:t.checks.results}))}async function Pr(e,t){let r=await ie(e,t);await ue(r);let i=await _t(r.worktreePath);if(r.status==="running"&&i&&(r.status="review"),r.status!=="review"&&r.status!=="checked")throw new Error(`Task ${r.id} cannot commit from status "${r.status}".`);if(!i)throw new Error(`Task ${r.id} has no uncommitted diff to commit.`);let a=r.prompt.value.trim();await $s(r.worktreePath),await Ns(r.worktreePath,a);let y=await Mt(r.worktreePath);return r.lastCommit={sha:y.sha,message:y.message,committedAt:new Date().toISOString()},r.lastFailureReason=null,await te(e,r),{kind:"commitTask",taskId:r.id,status:r.status,commitSha:y.sha,message:y.message}}async function ci(e,t,r){let i=[];try{if(t.sessionId){let a=await We(e,t.sessionId);await Is(e.repoRoot,a.sessionName),t.cleanup.paneClosedAt=new Date().toISOString()}}catch(a){i.push(a instanceof Error?a.message:"Failed to close tmux session.")}if(t.cleanup.preservedWorktree=r.preserveWorktree,!r.preserveWorktree)try{await js(e.repoRoot,t.worktreePath),t.cleanup.worktreeRemovedAt=new Date().toISOString()}catch(a){i.push(a instanceof Error?a.message:"Failed to remove worktree.")}t.cleanup.warning=i.length>0?i.join(" "):null,await te(e,t)}async function yt(e,t,r){let i=await ie(e,t);if(await ue(i),i.status!=="pr_open"&&i.status!=="merge_ready")throw new Error(`Task ${i.id} cannot merge from status "${i.status}".`);if(!i.pullRequest.number)throw new Error(`Task ${i.id} does not have a tracked pull request.`);if(!i.lastCommit)throw new Error(`Task ${i.id} must be committed before merging.`);if(!await Ot(i.worktreePath))throw new Error(`Task ${i.id} worktree must be clean before merging.`);if((await Mt(i.worktreePath)).sha!==i.lastCommit.sha)throw new Error(`Task ${i.id} local HEAD does not match the tracked task commit. Sync or commit before merging.`);await lt(i.worktreePath),await tt(e,i);let y=ac(i);if(y.length>0)throw new Error(`Task ${i.id} pull request is not merge-ready: ${y.join("; ")}.`);let n=(await _e(e)).github?.mergeMethod??"squash";return await ei(i,n),i.pullRequest.status="merged",i.status="merged",i.lastFailureReason=null,await te(e,i),await ci(e,i,r),{kind:"mergeTask",taskId:i.id,status:i.status,prNumber:i.pullRequest.number,preservedWorktree:r.preserveWorktree,cleanupWarning:i.cleanup.warning}}function ac(e){let t=[],r=e.pullRequest;r.status!=="open"&&t.push(`PR is ${r.status??"unknown"}`),r.mergeable||t.push(`GitHub reports merge state ${r.mergeStateStatus??"unknown"}`),r.lastSyncedHeadSha!==e.lastCommit?.sha&&t.push("local task commit is not synced to the PR head"),r.requiredChecks.length===0&&t.push("no GitHub checks reported");for(let i of["failed","pending","unknown"]){let a=r.requiredChecks.filter(y=>y.status===i).map(y=>y.name);a.length>0&&t.push(`${i} checks: ${a.join(", ")}`)}return rt(r)||t.push("required checks are not passing"),[...new Set(t)]}import Ir from"node:path";import{stat as lc}from"node:fs/promises";async function li(e,t){return{kind:"listWorkspaces",workspaces:(await Ze(e)).filter(i=>i.status===(t.archived?"archived":"active")),archivedOnly:t.archived}}async function di(e,t){let i={...await Lt(e,t),status:"archived",archivedAt:new Date().toISOString()};return await mt(e,i),await cc(e,t),{kind:"archiveWorkspace",workspaceId:i.id,status:i.status,branch:i.branch}}async function ui(e,t){let i={...await Lt(e,t),status:"active",archivedAt:null};await mt(e,i);let a=await Pe({uiStateFile:e.uiStateFile})??null;return await ve({uiStateFile:e.uiStateFile},{...a??Le(),selectedWorkspaceId:i.id,selectedRepoId:i.primaryRepoId,selectedTaskId:null}),{kind:"restoreWorkspace",workspaceId:i.id,status:i.status,branch:i.branch}}async function hi(e,t){await Os(e,t);let r=await Re(e);await Ye(e,{...r,workspaceIds:r.workspaceIds.filter(i=>i!==t)})}async function cc(e,t){let r=await Pe({uiStateFile:e.uiStateFile});!r||r.selectedWorkspaceId!==t||await ve({uiStateFile:e.uiStateFile},{...r,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null})}async function $t(e,t){let r=Ir.resolve(e.workspaceRoot,t);if(!(await lc(r).catch(()=>null))?.isDirectory())throw new Error(`Repo path does not exist: ${r}`);await uc(r);let a=await hc(r),y=await gt(e),T=y.find(w=>w.rootPath===r);if(T)return{kind:"createRepo",repo:T,workspaceId:fi(T.id),created:!1};let n=dc(y,Ir.basename(r)),h=new Date().toISOString(),p={id:n,name:Ir.basename(r),rootPath:r,defaultBranch:a,createdAt:h,updatedAt:h},S={id:fi(n),primaryRepoId:n,branch:a,status:"active",linkedRepoIds:[],archivedAt:null,createdAt:h,updatedAt:h};await fc(e,S),await Ds(e,p),await mt(e,S);let o=await Re(e);return await Ye(e,{...o,repoIds:[...o.repoIds,p.id],workspaceIds:[...o.workspaceIds,S.id]}),await ve({uiStateFile:e.uiStateFile},{...await Pe({uiStateFile:e.uiStateFile})??Le(),selectedRepoId:p.id,selectedWorkspaceId:S.id,selectedTaskId:null}),{kind:"createRepo",repo:p,workspaceId:S.id,created:!0}}async function pi(e){return{kind:"listRepos",repos:await gt(e)}}async function gi(e,t){let r=await Me(e,t),a=(await Ze(e)).filter(p=>p.primaryRepoId===t),y=a.filter(p=>p.status==="active"),T=await et(e,{repoId:t});if(y.length>0)throw new Error(`Cannot remove repo ${t} while active workspace records still reference it.`);if(T.tasks.length>0)throw new Error(`Cannot remove repo ${t} while task records still reference it.`);await Promise.all(a.map(p=>hi(e,p.id))),await Ls(e,t);let n=await Re(e);await Ye(e,{...n,repoIds:n.repoIds.filter(p=>p!==t)});let h=await Pe({uiStateFile:e.uiStateFile});return h?.selectedRepoId===t&&await ve({uiStateFile:e.uiStateFile},{...h,selectedRepoId:null,selectedWorkspaceId:null,selectedTaskId:null}),{kind:"removeRepo",repoId:r.id,rootPath:r.rootPath}}function dc(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"repo",i=`repo_${r}`,a=2;for(;e.some(y=>y.id===i);)i=`repo_${r}_${a}`,a+=1;return i}function fi(e){return`workspace_${e}`}async function uc(e){try{await J("git",["rev-parse","--show-toplevel"],{cwd:e})}catch{throw new Error(`Repo path is not a git repository: ${e}`)}}async function hc(e){let r=(await J("git",["branch","--show-current"],{cwd:e})).stdout.trim();return r.length>0?r:"HEAD"}async function fc(e,t){if((await Ze(e)).find(a=>a.status==="active"&&a.primaryRepoId===t.primaryRepoId&&a.branch===t.branch))throw new Error(`Workspace branch already in use for repo ${t.primaryRepoId}: ${t.branch}`)}async function mi(e,t,r){let[i,a]=await Promise.all([ie(e,t),Me(e,r)]);if(i.repoId===a.id)throw new Error(`Repo ${a.id} is already the primary repo for task ${i.id}.`);let y=i.linkedRepoIds.includes(a.id)?i.linkedRepoIds:[...i.linkedRepoIds,a.id];return await te(e,{...i,linkedRepoIds:y}),{kind:"addTaskLink",taskId:i.id,repoId:a.id,linkedRepoIds:y}}async function _i(e,t){let r=await ie(e,t),i=await Promise.all(r.linkedRepoIds.map(a=>Me(e,a)));return{kind:"listTaskLinks",taskId:r.id,repos:i}}async function wi(e,t){switch(e.kind){case"addRepo":return $t(t.paths,e.path);case"listRepos":return pi(t.paths);case"removeRepo":return gi(t.paths,e.repoId);case"listWorkspaces":return li(t.paths,{archived:e.archived});case"archiveWorkspace":return di(t.paths,e.workspaceId);case"restoreWorkspace":return ui(t.paths,e.workspaceId);case"createTask":return zs(t.paths,e.repoId,e.prompt,e.runner?{runner:e.runner}:{});case"listTasks":return e.repoId?et(t.paths,{repoId:e.repoId}):et(t.paths);case"attachTask":return Xs(t.paths,e.taskId);case"addTaskLink":return mi(t.paths,e.taskId,e.repoId);case"listTaskLinks":return _i(t.paths,e.taskId);case"refreshInteractiveState":throw new Error("Interactive refresh should be handled by the interactive app.");case"showTask":return Sr(t.paths,e.taskId);case"showSelectedTask":return Sr(t.paths,Fe(t,"show"));case"streamTaskLogs":return vr(t.paths,e.taskId);case"streamSelectedTaskLogs":return vr(t.paths,Fe(t,"logs"));case"showTaskDiff":return kr(t.paths,e.taskId);case"showSelectedTaskDiff":return kr(t.paths,Fe(t,"diff"));case"focusTask":return Tr(t.paths,e.taskId);case"focusSelectedTask":return Tr(t.paths,Fe(t,"focus"));case"openTask":return Cr(t.paths,e.taskId);case"openSelectedTask":return Cr(t.paths,Fe(t,"open"));case"runChecks":return Rr(t.paths,e.taskId);case"runSelectedTaskChecks":return Rr(t.paths,Fe(t,"check"));case"commitTask":return Pr(t.paths,e.taskId);case"commitSelectedTask":return Pr(t.paths,Fe(t,"commit"));case"openPullRequest":return bt(t.paths,e.taskId,{watch:e.watch});case"openSelectedTaskPullRequest":return bt(t.paths,Fe(t,"pr"),{watch:e.watch});case"mergeTask":return yt(t.paths,e.taskId,{preserveWorktree:e.preserveWorktree});case"mergeSelectedTask":return yt(t.paths,Fe(t,"merge"),{preserveWorktree:e.preserveWorktree});case"help":return{kind:"help",text:me()};case"exit":return{kind:"exit"};default:return pc(e)}}function pc(e){throw new Error(`Unsupported command: ${JSON.stringify(e)}`)}function Fe(e,t){if(e.selectedTaskId)return e.selectedTaskId;throw new Error(`No task selected. Create a task with 'task new --repo <repo-id> <prompt>' or use '${t} <id>'.`)}import{mkdir as Oe,readFile as gc}from"node:fs/promises";import we from"node:path";function $e(e){let t=we.join(e,".craig");return{workspaceRoot:e,repoRoot:e,craigDir:t,indexFile:we.join(t,"index.json"),reposDir:we.join(t,"repos"),workspacesDir:we.join(t,"workspaces"),sessionsDir:we.join(t,"sessions"),runtimeDir:we.join(t,"runtime"),uiStateFile:we.join(t,"runtime","ui-state.json"),tasksDir:we.join(t,"tasks"),jobsDir:we.join(t,"jobs"),logsDir:we.join(t,"logs"),artifactsDir:we.join(t,"artifacts"),worktreesDir:we.join(t,"worktrees"),configFile:we.join(t,"config.json")}}async function dt(e){let t=$e(e);await Oe(t.craigDir,{recursive:!0}),await Promise.all([Oe(t.reposDir,{recursive:!0}),Oe(t.workspacesDir,{recursive:!0}),Oe(t.sessionsDir,{recursive:!0}),Oe(t.runtimeDir,{recursive:!0}),Oe(t.tasksDir,{recursive:!0}),Oe(t.jobsDir,{recursive:!0}),Oe(t.logsDir,{recursive:!0}),Oe(t.artifactsDir,{recursive:!0}),Oe(t.worktreesDir,{recursive:!0})]);try{let a=await gc(t.indexFile,"utf8"),y=JSON.parse(a);return dr(y,e,t.indexFile)}catch(a){if(!mc(a))throw a instanceof SyntaxError?new Error(`Craig index at ${t.indexFile} is malformed. Remove or repair the file before rerunning Craig.`):a}let r=new Date().toISOString(),i={version:2,workspaceRoot:e,repoIds:[],workspaceIds:[],taskIds:[],jobIds:[],createdAt:r,updatedAt:r};return await ae(t.indexFile,i),i}function mc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}function bi(e){switch(e.kind){case"createRepo":return[`${e.created?"Registered":"Already registered"} repo ${e.repo.id}`,`Path: ${e.repo.rootPath}`,`Branch: ${e.repo.defaultBranch}`,`Workspace: ${e.workspaceId}`].join(`
61
+ `);case"listRepos":return e.repos.length===0?"No repos registered yet. Use 'craig repo add <path>'.":["ID NAME BRANCH PATH",...e.repos.map(t=>`${t.id} ${t.name} ${t.defaultBranch} ${t.rootPath}`)].join(`
62
+ `);case"removeRepo":return`Removed repo ${e.repoId} (${e.rootPath})`;case"listWorkspaces":return e.workspaces.length===0?e.archivedOnly?"No archived workspaces.":"No active workspaces yet. Register a repo with 'craig repo add <path>'.":["ID STATUS REPO BRANCH",...e.workspaces.map(t=>`${t.id} ${t.status} ${t.primaryRepoId} ${t.branch}`)].join(`
63
+ `);case"archiveWorkspace":return`Archived workspace ${e.workspaceId} on branch ${e.branch}`;case"restoreWorkspace":return`Restored workspace ${e.workspaceId} on branch ${e.branch}`;case"createTask":return[`Created task ${e.taskId}`,`Repo: ${e.repoId}`,`Session: ${e.sessionId}`,`Status: ${e.status}`,`Branch: ${e.branch}`,`Worktree: ${e.worktreePath}`,`Runner: ${e.runner}`].join(`
64
+ `);case"attachTask":return`Attached to task ${e.taskId} via session ${e.sessionId}`;case"addTaskLink":return`Linked repo ${e.repoId} to task ${e.taskId}: ${e.linkedRepoIds.join(", ")}`;case"listTaskLinks":return e.repos.length===0?`Task ${e.taskId} has no linked repos.`:["ID NAME BRANCH PATH",...e.repos.map(t=>`${t.id} ${t.name} ${t.defaultBranch} ${t.rootPath}`)].join(`
65
+ `);case"help":return e.text;case"exit":return"";case"listTasks":return e.tasks.length===0?`No Craig tasks yet. Use 'task new --repo <repo-id> <prompt>' to create one.${e.missingTaskIds.length>0?` (${e.missingTaskIds.length} referenced task file(s) missing from .craig/tasks)`:""}`:["ID REPO STATUS CHECKS PR TITLE",...e.tasks.map(t=>`${t.id} ${t.repoId} ${t.status} ${yc(t)} ${Sc(t)} ${t.title}`)].join(`
66
+ `);case"showTask":return[`${e.task.id}: ${e.task.title}`,`Status: ${e.task.status}`,`Runner: ${e.task.runner}`,`Repo: ${e.task.repoId}`,`Workspace: ${e.task.workspaceId}`,`Branch: ${e.task.branch}`,`Worktree: ${e.task.worktreePath}`,`Session: ${e.task.sessionId??"<missing>"}`,`tmux: ${e.session?.paneId??"<missing>"}`,`Linked repos: ${e.task.linkedRepoIds.length>0?e.task.linkedRepoIds.join(", "):"none"}`,`Prompt: ${e.task.prompt.source} ${JSON.stringify(e.task.prompt.value)}`,`Runner command: ${e.inspection.runnerCommandText||"<none>"}`,`Runner state: ${e.task.runnerSession.lastKnownState}`,`Started: ${e.task.runnerSession.startedAt??"not started"}`,`Exited: ${e.task.runnerSession.exitedAt??"still running"}`,`Checks: ${e.inspection.checksSummary}`,`Last commit: ${e.inspection.lastCommitSummary}`,`PR: ${e.inspection.prSummary}`,`Cleanup: ${e.inspection.cleanupSummary}`,...wc(e)].join(`
67
+ `);case"streamTaskLogs":return`Streaming logs for ${e.taskId} from ${e.logPath}`;case"showTaskDiff":return e.isEmpty?`Task ${e.taskId} has no uncommitted diff.`:e.diffText;case"focusTask":return`Focused task ${e.taskId} on ${e.tmuxTarget}`;case"openTask":return e.launched?`Opened task ${e.taskId} at ${e.worktreePath}`:e.worktreePath;case"runChecks":return`Checks ${e.status} for ${e.taskId}: ${e.commands.join(", ")}`;case"commitTask":return[`Committed task ${e.taskId}`,`Status: ${e.status}`,`Commit: ${e.commitSha}`,`Message: ${e.message}`].join(`
68
+ `);case"openPullRequest":return[`${_c(e.disposition,e.watch)} PR for ${e.taskId}`,`PR: #${e.prNumber} ${e.url}`,`Status: ${e.status}`,`Mergeable: ${e.mergeable}`,`Checks: ${e.requiredChecksSummary}`].join(`
69
+ `);case"mergeTask":return[`Merged task ${e.taskId} from PR #${e.prNumber}`,`Status: ${e.status}`,`Preserved worktree: ${e.preservedWorktree}`,`Cleanup warning: ${e.cleanupWarning??"none"}`].join(`
70
+ `);default:return bc(e)}}function _c(e,t){return t?"Watched":e==="created"?"Created":e==="discovered"?"Discovered":"Synced"}function wc(e){let t=[];return e.inspection.worktreeExists||e.task.status==="merged"&&!e.task.cleanup.preservedWorktree&&e.task.cleanup.worktreeRemovedAt||t.push(`Warning: worktree is missing at ${e.task.worktreePath}`),e.task.cleanup.warning&&!(e.task.status==="merged"&&!e.task.cleanup.worktreeRemovedAt)&&t.push(`Cleanup warning: ${e.task.cleanup.warning}`),e.task.artifacts.logPath&&!e.inspection.logExists&&t.push(`Warning: log file is missing at ${e.task.artifacts.logPath}`),e.inspection.recentFailureReason&&t.push(`Last failure: ${e.inspection.recentFailureReason}`),t}function bc(e){throw new Error(`Unsupported result: ${JSON.stringify(e)}`)}function yc(e){return e.checks.status}function Sc(e){return e.pullRequest.number?`#${e.pullRequest.number}:${e.pullRequest.status??"unknown"}`:"-"}import{createRequire as mu}from"node:module";import{readdir as _u,stat as wu}from"node:fs/promises";import as from"node:path";import{readFile as vc,stat as kc}from"node:fs/promises";import xr from"node:path";var Tc=200*1024,Cc=500*1024,Nt="100000";async function vi(e,t={}){try{await ue(e);let[r,i]=await Promise.all([Rc(e.worktreePath),Pc(e.worktreePath)]),a=[...new Set(i.map(o=>o.path))],y=Si(t.selectedFilePath??null,r),T=Si(t.selectedDiffPath??null,a),[n,h]=await Promise.all([Ci(e.worktreePath,y),Promise.all(a.map(async o=>[o,await Dc(e.worktreePath,o,i)]))]),p=Object.fromEntries(h),S=T?p[T]??xe("No diff selected","No local changes found.","empty"):xe("No diff selected","No local changes found.","empty");return{taskId:e.id,fileRows:Lc(r),filePaths:r,diffRows:i,diffPaths:a,diffContents:p,selectedFilePath:y,selectedDiffPath:T,selectedFile:n,selectedDiff:S,error:null}}catch(r){let i=r instanceof Error?r.message:"Unable to inspect task worktree.";return{taskId:e.id,fileRows:[],filePaths:[],diffRows:[],diffPaths:[],diffContents:{},selectedFilePath:null,selectedDiffPath:null,selectedFile:xe("Files unavailable",i,"error"),selectedDiff:xe("Diff unavailable",i,"error"),error:i}}}async function Rc(e){let t=await J("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e});return Ri(t.stdout)}async function Pc(e){let[t,r,i,a]=await Promise.all([Ic(e),yi(e,"staged"),yi(e,"unstaged"),xc(e)]);return[...t,...r,...i,...a]}async function Ic(e){let t=await Ti(e);if(!t)return[];let r=await J("git",["diff","--name-status",`${t}...HEAD`],{cwd:e}),i=ki(r.stdout);return(await Promise.all(i.map(async y=>{let T=await Ac(e,t,y.path);return{group:"branch",path:y.path,status:y.status,additions:T.additions,deletions:T.deletions}}))).sort((y,T)=>y.path.localeCompare(T.path))}async function yi(e,t){let i=await J("git",t==="staged"?["diff","--cached","--name-status"]:["diff","--name-status"],{cwd:e}),a=ki(i.stdout);return(await Promise.all(a.map(async T=>{let n=await Ec(e,t,T.path);return{group:t,path:T.path,status:T.status,additions:n.additions,deletions:n.deletions}}))).sort((T,n)=>T.path.localeCompare(n.path))}async function xc(e){let t=await J("git",["ls-files","--others","--exclude-standard"],{cwd:e}),r=Ri(t.stdout);return await Promise.all(r.map(async a=>{let y=await Ci(e,a),T=y.status==="ready"?Mc(y.lines):null;return{group:"untracked",path:a,status:"A",additions:T,deletions:0}}))}function ki(e){return e.split(`
71
+ `).map(t=>t.trim()).filter(t=>t.length>0).map(t=>{let[r="M",...i]=t.split(" ");return{status:r,path:i.at(-1)??""}}).filter(t=>t.path.length>0)}async function Ec(e,t,r){let a=await J("git",t==="staged"?["diff","--cached","--numstat","--",r]:["diff","--numstat","--",r],{cwd:e}),[y="-",T="-"]=(a.stdout.split(`
72
+ `)[0]??"").split(" ");return{additions:y==="-"?null:Number(y),deletions:T==="-"?null:Number(T)}}async function Ac(e,t,r){let i=await J("git",["diff","--numstat",`${t}...HEAD`,"--",r],{cwd:e}),[a="-",y="-"]=(i.stdout.split(`
73
+ `)[0]??"").split(" ");return{additions:a==="-"?null:Number(a),deletions:y==="-"?null:Number(y)}}async function Ti(e){return(await oe("git",["show-ref","--verify","--quiet","refs/remotes/origin/main"],{cwd:e})).exitCode===0?"origin/main":(await oe("git",["show-ref","--verify","--quiet","refs/heads/main"],{cwd:e})).exitCode===0?"main":null}async function Ci(e,t){if(!t)return xe("No file selected","No Git-visible files found.","empty");let r=Oc(e,t);try{let i=await kc(r);if(i.size>Tc)return xe(t,`File is ${i.size} bytes, above the 200 KB inline preview limit.`,"too_large",t,i.size);let a=await vc(r);return Bc(a)?xe(t,"Binary file preview is not available in Craig.","binary",t,a.byteLength):{path:t,status:"ready",title:t,lines:a.toString("utf8").split(`
74
+ `),byteLength:a.byteLength}}catch(i){let a=i instanceof Error?i.message:"Unable to read file.";return xe(t,a,"missing",t,null)}}async function Dc(e,t,r){if(!t)return xe("No diff selected","No local changes found.","empty");let i=[],a=r.filter(T=>T.path===t).map(T=>T.group);if(a.includes("branch")){let T=await Ti(e);if(T){let n=await J("git",["diff","--stat","--patch",`--unified=${Nt}`,`${T}...HEAD`,"--",t],{cwd:e});n.stdout.trim().length>0&&i.push(`branch
75
+ ${n.stdout.trimEnd()}`)}}if(a.includes("staged")){let T=await J("git",["diff","--cached","--stat","--patch",`--unified=${Nt}`,"--",t],{cwd:e});T.stdout.trim().length>0&&i.push(`staged
76
+ ${T.stdout.trimEnd()}`)}if(a.includes("unstaged")){let T=await J("git",["diff","--stat","--patch",`--unified=${Nt}`,"--",t],{cwd:e});T.stdout.trim().length>0&&i.push(`unstaged
77
+ ${T.stdout.trimEnd()}`)}if(a.includes("untracked")){let T=await oe("git",["diff","--no-index","--stat","--patch",`--unified=${Nt}`,"--","/dev/null",t],{cwd:e});T.stdout.trim().length>0&&i.push(`untracked
78
+ ${T.stdout.trimEnd()}`)}let y=i.join(`
79
+
80
+ `);return y.length>Cc?xe(t,"Diff is above the 500 KB inline preview limit.","too_large",t,y.length):y.includes("\0")?xe(t,"Binary diff preview is not available in Craig.","binary",t,y.length):{path:t,status:y.length>0?"ready":"empty",title:t,lines:y.length>0?y.split(`
81
+ `):["No diff for this file."],byteLength:y.length}}function Lc(e){let t=[],r=new Set;for(let i of e){let a=i.split("/");for(let y=0;y<a.length-1;y+=1){let T=a.slice(0,y+1).join("/");r.has(T)||(r.add(T),t.push({kind:"directory",path:T,depth:y,label:a[y]??T}))}t.push({kind:"file",path:i,depth:a.length-1,label:a.at(-1)??i})}return t}function Si(e,t){return e&&t.includes(e)?e:t[0]??null}function Mc(e){return e.length===1&&e[0]===""?0:e.at(-1)===""?e.length-1:e.length}function Ri(e){return[...new Set(e.split(`
82
+ `).map(t=>t.trim()).filter(t=>t.length>0))].sort((t,r)=>t.localeCompare(r))}function Oc(e,t){let r=xr.resolve(e,t),i=xr.resolve(e);if(r!==i&&!r.startsWith(`${i}${xr.sep}`))throw new Error(`File path escapes task worktree: ${t}`);return r}function Bc(e){return e.subarray(0,Math.min(e.byteLength,8e3)).includes(0)}function xe(e,t,r,i=null,a=null){return{path:i,status:r,title:e,lines:[t],byteLength:a}}import{access as Fc}from"node:fs/promises";async function Pi(e,t){let r=await ie(e,t),i=await $c(r.worktreePath),a={...r,status:"closed",cleanup:{...r.cleanup,preservedWorktree:i&&r.cleanup.worktreeRemovedAt===null,warning:null},lastFailureReason:null};return await te(e,a),a}async function $c(e){try{return await Fc(e),!0}catch{return!1}}import kt from"node:path";function Ii(e){switch(e.toLowerCase().split(".").pop()??""){case"ts":case"tsx":return"\u{F06E6} ";case"js":case"jsx":case"mjs":case"cjs":return"\u{F031E} ";case"json":case"jsonc":return"\u{F0871} ";case"md":case"mdx":return"\u{F0354} ";case"yaml":case"yml":return"\u{F0B10} ";case"sh":case"bash":case"zsh":return"\u{F018D} ";case"css":case"scss":case"sass":return"\u{F031C} ";case"html":case"htm":return"\u{F031D} ";case"py":return"\u{F0320} ";case"go":return"\u{F07D3} ";case"rs":return"\u{F1617} ";case"lock":return"\u{F033E} ";case"png":case"jpg":case"jpeg":case"gif":case"svg":case"webp":return"\u{F02E9} ";default:return"\u{F0214} "}}var xi="\u{F024B} ",Ei="\u{F0DCF} ",Ai="\u25CB",Di="\uEA64",Li="\uEAFE",Mi="\uEBDA",Er="\u25CB",Ar="\u25CF",Dr="\u2713",Lr="\u2715";function Oi(e){switch(e.toLowerCase().split(".").pop()??""){case"ts":case"tsx":return"4fc1ff";case"js":case"jsx":case"mjs":case"cjs":return"f7df1e";case"json":case"jsonc":return"fbc02d";case"md":case"mdx":return"519aba";case"yaml":case"yml":return"e06c75";case"sh":case"bash":case"zsh":return"89e051";case"css":case"scss":case"sass":return"c792ea";case"html":case"htm":return"e06c75";case"py":return"3572a5";case"go":return"00add8";case"rs":return"dea584";case"lock":return"565f89";default:return}}var Ni=["tasks","center","inspector","actions"],Hi=["agent","terminal"],Wi=[],ne="inspection",Bg=[...Hi,...Wi],ji=["commit","push","create-pr","refresh-checks","merge","close-task"],Nc=["refresh-checks","close-task"],Ui=["task","checks","pr","setup-run","actions","next-action"],qi=["diff","files","review"];function Ki(e,t={}){let r=e?.activeTab==="files"?"file":e?.activeTab==="diff"?"diff":null,i=el(e?.openInspectionKind)??r,a=ot(t);return{inputMode:rl(e?.inputMode),focusedRegion:Jc(e?.focusedRegion),selectedRepoId:Ue(e?.selectedRepoId),selectedTaskId:Ue(e?.selectedTaskId),selectedPtyTabId:Ue(e?.selectedPtyTabId),selectedLeftItemId:ul(Ue(e?.selectedTaskId)),activeTab:r?ne:Ue(e?.activeTab)??"agent",preferredPtyTabKind:tl(e?.preferredPtyTabKind),inspectorSection:St(e?.inspectorSection,Ui,"task"),inspectionMode:Zc(e?.inspectionMode,r==="diff"?"diff":"files"),openInspectionKind:i,selectedFileTreePath:Ue(e?.selectedFileTreePath),selectedFilePath:Ue(e?.selectedFilePath),selectedDiffPath:Ue(e?.selectedDiffPath),collapsedFileTreePaths:Array.isArray(e?.collapsedFileTreePaths)?e.collapsedFileTreePaths:[],fileScrollOffset:0,diffScrollOffset:0,selectedActionId:St(e?.selectedActionId,ji,"commit"),selectedRunner:sl(e?.selectedRunner,a,Ge(t)),centerTabRunner:null,actionMessage:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:Hc(),centerZoomed:!1}}function Hc(){return{status:"idle",rows:[],error:null,scrolledBack:!1}}function zi(e,t){return{...e??Le(),selectedRepoId:t.selectedRepoId,selectedTaskId:t.selectedTaskId,selectedPtyTabId:t.selectedPtyTabId,inputMode:t.inputMode,focusedRegion:t.focusedRegion,activeTab:t.activeTab,preferredPtyTabKind:t.preferredPtyTabKind,inspectorSection:t.inspectorSection,inspectionMode:t.inspectionMode,openInspectionKind:t.openInspectionKind,selectedFileTreePath:t.selectedFileTreePath,selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath,collapsedFileTreePaths:t.collapsedFileTreePaths,selectedActionId:t.selectedActionId,selectedRunner:t.selectedRunner}}function Ut(e,t,r={}){let i=ll(e,t),a=en(i),T=((a?.kind==="repo"?t.repos.find(p=>p.id===a.id)??null:a?.kind==="task"?t.repos.find(p=>p.id===t.tasks.find(S=>S.id===a.id)?.repoId)??null:null)??t.repos.find(p=>p.id===e.selectedRepoId)??t.repos[0]??null)?.id??null,n=T?t.tasks.filter(p=>p.repoId===T):[],h=(a?.kind==="task"?n.find(p=>p.id===a.id)??null:null)??n.find(p=>p.id===e.selectedTaskId)??n[0]??null;return{...e,inputMode:r.resetInputMode?"control":e.inputMode,selectedLeftItemId:i,selectedRepoId:T,selectedTaskId:h?.id??null,...nl(h,e.activeTab,e.selectedPtyTabId),selectedFilePath:t.inspection&&t.inspection.taskId===h?.id?t.inspection.selectedFilePath:e.selectedFilePath,...ol(e,t,h?.id??null),selectedDiffPath:Xc(e,t,h?.id??null),inspectorSection:St(e.inspectorSection,Ui,"task")}}function Vi(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return Wc(t)?X({state:{...e,inputMode:"control",centerZoomed:!1,actionMessage:null},changed:!0,detachTerminal:!0}):X({state:e});if(t==="q"||t==="Q")return X({state:e,exit:!0});if(t==="ESCAPE")return X({state:{...e,actionMessage:null},changed:e.actionMessage!==null,pause:!0});if(t==="n"||t==="N")return X({state:{...e,focusedRegion:"tasks",actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0});if((t==="r"||t==="R")&&e.focusedRegion==="tasks"&&Or(e.selectedLeftItemId))return X({state:{...e,selectedRunner:Fr(e.selectedRunner,r.enabledRunnerIds),actionMessage:null,taskPromptError:null},changed:!0});if(t==="TAB"||t==="]")return Ht(e,1);if(t==="SHIFT_TAB"||t==="[")return Ht(e,-1);if(t==="z"||t==="Z")return X({state:{...e,centerZoomed:!e.centerZoomed,actionMessage:null},changed:!0});if(t==="UP"||t==="k")return e.focusedRegion==="center"&&e.activeTab===ne?qe(e,-1,r):Bi(e,-1,r);if(t==="DOWN"||t==="j")return e.focusedRegion==="center"&&e.activeTab===ne?qe(e,1,r):Bi(e,1,r);if(t==="PAGE_UP")return qe(e,-(r.pageRows??10),r);if(t==="PAGE_DOWN")return qe(e,r.pageRows??10,r);if(t==="MOUSE_WHEEL_UP")return qe(e,-3,r);if(t==="MOUSE_WHEEL_DOWN")return qe(e,3,r);if(t==="r"&&e.focusedRegion==="center"&&e.selectedTaskId){let i=r.enabledRunnerIds??de,a=e.centerTabRunner?i.indexOf(e.centerTabRunner):-1,y=a===i.length-1?null:i[a+1];return X({state:{...e,centerTabRunner:y,actionMessage:null},changed:!0})}if((t==="+"||t==="a"||t==="A"||t==="t"||t==="T")&&e.focusedRegion==="center"&&e.selectedTaskId){let i=il(e,t);return X({state:{...e,preferredPtyTabKind:i,actionMessage:null},changed:!0,createPtyTab:!0,createPtyTabKind:i,createPtyTabRunner:i==="agent"?e.centerTabRunner:null})}if((t==="R"||t==="r")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return X({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0});if((t==="X"||t==="x")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return X({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&jt(e.selectedLeftItemId)&&e.selectedTaskId)return X({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if(t==="x"&&e.focusedRegion==="center"&&$i(e.activeTab,r.ptyTabIds??[]))return X({state:{...e,actionMessage:null},changed:!0,closePtyTab:!0});if(t==="LEFT"||t==="h")return e.focusedRegion==="center"?Mr(e,-1,r.centerTabIds):e.focusedRegion==="inspector"?Fi(e,-1):Ht(e,-1);if(t==="RIGHT"||t==="l")return e.focusedRegion==="center"?Mr(e,1,r.centerTabIds):e.focusedRegion==="inspector"?Fi(e,1):Ht(e,1);if(Ke(t)){if(e.focusedRegion==="tasks"&&Or(e.selectedLeftItemId)){let i=tn(e.selectedLeftItemId);return X({state:{...e,selectedRepoId:i??e.selectedRepoId,actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0})}if(e.focusedRegion==="tasks"&&e.selectedLeftItemId==="new-workspace")return X({state:{...e,actionMessage:null},changed:!0,openWorkspaceBrowser:!0});if(e.focusedRegion==="tasks"&&jt(e.selectedLeftItemId)&&e.selectedTaskId)return X({state:{...e,inputMode:"terminal",activeTab:e.selectedPtyTabId??e.activeTab,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&$i(e.activeTab,r.ptyTabIds??[])&&e.selectedTaskId)return X({state:{...e,inputMode:"terminal",selectedPtyTabId:e.activeTab,preferredPtyTabKind:$r(e.activeTab)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&e.activeTab===ne)return X({state:{...e,actionMessage:null},changed:!0,refreshInspection:!0});if(e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="files"){let i=e.selectedFileTreePath??e.selectedFilePath;if(i&&(r.fileTreeDirectoryIds??[]).includes(i))return X({state:Kc({...e,selectedFileTreePath:i}),changed:!0});let a=i&&(r.fileTreeFileIds??[]).includes(i)?i:e.selectedFilePath;return X({state:{...e,selectedFileTreePath:a,selectedFilePath:a,activeTab:ne,openInspectionKind:"file",fileScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0})}return e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="diff"?X({state:{...e,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.focusedRegion==="inspector"&&e.inspectionMode==="review"?e.selectedActionId==="refresh-checks"?X({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?X({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):X({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.focusedRegion!=="actions"?X({state:e}):e.selectedActionId==="create-pr"?X({state:{...e,actionMessage:null},changed:!0,syncPullRequest:!0}):e.selectedActionId==="refresh-checks"?X({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="merge"?X({state:{...e,actionMessage:null},changed:!0,mergeTask:!0}):e.selectedActionId==="close-task"?X({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):X({state:{...e,actionMessage:`Action queued: ${e.selectedActionId} (inspection surfaces land in phase 4.1).`},changed:!0})}return X({state:e})}function vt(e,t){return{...e,terminal:t}}function Gi(e,t){return{...e,inputMode:"control",terminal:{status:"failed",rows:[],error:t}}}function Wc(e){return e===""||e==="CTRL_]"||e==="CTRL_RIGHT_BRACKET"}function Ke(e){return e==="ENTER"||e==="KP_ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
83
+ `}function Xi(e){return e.length===1&&e>=" "&&e!=="\x7F"}function Yi(e){return Qi(e)||/:(?:agent|terminal)(?:-\d+)?$/.test(e)}function jc(e){return Wi.includes(e)}function Qi(e){return Hi.includes(e)}function Ji(e,t){return[...e?.ptyTabs.map(r=>r.id)??[],...t?.openInspectionKind?[ne]:[]]}function Ht(e,t){let r=Wt(e,"focusedRegion",Ni,t);return r.state.focusedRegion!=="actions"||r.state.inspectorSection==="actions"?r:{...r,state:{...r.state,inspectorSection:"actions"}}}function Mr(e,t,r){let i=Wt(e,"activeTab",r&&r.length>0?r:cl(e),t);return!i.changed||jc(i.state.activeTab)?i:{...i,state:{...i.state,selectedPtyTabId:i.state.activeTab,preferredPtyTabKind:$r(i.state.activeTab)??i.state.preferredPtyTabKind}}}function Bi(e,t,r){if(e.focusedRegion==="tasks")return Uc(e,t,r.leftItemIds);if(e.focusedRegion==="center")return Mr(e,t,r.centerTabIds);if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Zi(e,t,r);if(e.inspectionMode==="diff"){let i=Br(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return i.changed?{...i,state:{...i.state,diffScrollOffset:0}}:i}return Wt(e,"selectedActionId",Nc,t)}return Wt(e,"selectedActionId",ji,t)}function Uc(e,t,r){let i=Br(e,"selectedLeftItemId",r,t);if(!i.changed)return i;let a=en(i.state.selectedLeftItemId);if(a?.kind==="task")return{...i,state:{...i.state,selectedTaskId:a.id,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};if(a?.kind==="repo")return{...i,state:{...i.state,selectedRepoId:a.id,selectedTaskId:null,selectedPtyTabId:null,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};let y=tn(i.state.selectedLeftItemId);return y?{...i,state:{...i.state,selectedRepoId:y}}:i}function qe(e,t,r){if(t===0)return X({state:e});if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Zi(e,t,r);if(e.inspectionMode==="diff"){let i=Br(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return i.changed?{...i,state:{...i.state,diffScrollOffset:0}}:i}return X({state:e})}if(e.focusedRegion==="center"&&e.activeTab===ne){if(e.openInspectionKind==="file")return zc(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return Vc(e,t,r)}return X({state:e})}function qc(e,t){if(e.inspectionMode===t)return X({state:e});let r=t==="diff"?"diff":t==="files"?"file":e.openInspectionKind,i=t==="diff"||t==="files"?ne:e.activeTab;return X({state:{...e,inspectionMode:t,activeTab:i,openInspectionKind:r,fileScrollOffset:t==="files"?0:e.fileScrollOffset,diffScrollOffset:t==="diff"?0:e.diffScrollOffset,actionMessage:null},changed:!0,refreshInspection:!0})}function Fi(e,t){return qc(e,Qc(e.inspectionMode,qi,t))}function Zi(e,t,r){let i=r.fileTreeRowIds&&r.fileTreeRowIds.length>0?r.fileTreeRowIds:r.filePathIds??[];if(i.length===0)return X({state:e});let a=e.selectedFileTreePath??e.selectedFilePath??i[0]??null,y=i.indexOf(a??""),T=Ne(y===-1?0:y+t,0,i.length-1),n=i[T]??null;if(n===e.selectedFileTreePath)return X({state:e});let h=n!==null&&(r.fileTreeFileIds??r.filePathIds??[]).includes(n);return X({state:{...e,selectedFileTreePath:n,selectedFilePath:h?n:e.selectedFilePath,fileScrollOffset:h?0:e.fileScrollOffset,actionMessage:null},changed:!0,refreshInspection:h})}function Kc(e){if(!e.selectedFileTreePath)return e;let t=new Set(e.collapsedFileTreePaths);return t.has(e.selectedFileTreePath)?t.delete(e.selectedFileTreePath):t.add(e.selectedFileTreePath),{...e,collapsedFileTreePaths:[...t].sort((r,i)=>r.localeCompare(i)),actionMessage:null}}function zc(e,t,r,i,a=10){let y=Math.max(0,i-Math.max(1,a)),T=Ne(e[t]+r,0,y);return T===e[t]?X({state:e}):X({state:{...e,[t]:T,actionMessage:null},changed:!0})}function Vc(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return Gc(e,t,r);let i=r.diffLineCount??0,a=r.pageRows??10,y=Math.max(0,i-Math.max(1,a)),T=e.diffScrollOffset+t,n=r.diffPathIds??[];if(n.length===0||!e.selectedDiffPath){let S=Ne(T,0,y);return S===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:S,actionMessage:null},changed:!0})}let h=n.indexOf(e.selectedDiffPath);if(h===-1){let S=Ne(T,0,y);return S===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:S,actionMessage:null},changed:!0})}if(t>0&&T>y){let S=n[h+1]??null;return S?X({state:{...e,selectedDiffPath:S,diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===y?X({state:e}):X({state:{...e,diffScrollOffset:y,actionMessage:null},changed:!0})}if(t<0&&T<0){let S=n[h-1]??null;return S?X({state:{...e,selectedDiffPath:S,diffScrollOffset:Number.MAX_SAFE_INTEGER,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===0?X({state:e}):X({state:{...e,diffScrollOffset:0,actionMessage:null},changed:!0})}let p=Ne(T,0,y);return p===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:p,actionMessage:null},changed:!0})}function Gc(e,t,r){let i=r.diffLineCount??0,a=r.pageRows??10,y=Math.max(0,i-Math.max(1,a)),T=Ne(e.diffScrollOffset+t,0,y),n=Yc(r.diffPathRanges??[],T)??e.selectedDiffPath;return T===e.diffScrollOffset&&n===e.selectedDiffPath?X({state:e}):X({state:{...e,diffScrollOffset:T,selectedDiffPath:n,actionMessage:null},changed:!0})}function Xc(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function Yc(e,t){return e.find(r=>t>=r.start&&t<r.end)?.path??e.at(-1)?.path??null}function Wt(e,t,r,i){let a=r.indexOf(e[t]),y=Ne(a+i,0,r.length-1),T=r[y];return!T||T===e[t]?X({state:e}):X({state:{...e,[t]:T,actionMessage:null},changed:!0})}function Br(e,t,r,i,a=!1){if(r.length===0)return X({state:e});let y=r.indexOf(e[t]??r[0]??""),T=Ne(y===-1?0:y+i,0,r.length-1),n=r[T]??null;return n===e[t]?X({state:e}):X({state:{...e,[t]:n,actionMessage:null},changed:!0,refreshInspection:a})}function Qc(e,t,r){let i=t.indexOf(e);return t[Ne(i+r,0,t.length-1)]??e}function X(e){return{state:e.state,changed:e.changed??!1,exit:e.exit??!1,pause:e.pause??!1,attachTerminal:e.attachTerminal??!1,detachTerminal:e.detachTerminal??!1,beginTaskPrompt:e.beginTaskPrompt??!1,openWorkspaceBrowser:e.openWorkspaceBrowser??!1,createPtyTab:e.createPtyTab??!1,createPtyTabKind:e.createPtyTabKind??null,createPtyTabRunner:e.createPtyTabRunner??null,closePtyTab:e.closePtyTab??!1,syncPullRequest:e.syncPullRequest??!1,refreshPullRequestChecks:e.refreshPullRequestChecks??!1,mergeTask:e.mergeTask??!1,closeTask:e.closeTask??!1,refreshInspection:e.refreshInspection??!1}}function St(e,t,r){return t.includes(e??"")?e:r}function Jc(e){return e==="tabs"?"center":St(e,Ni,"tasks")}function Zc(e,t){return e==="checks"||e==="actions"||e==="review"?"review":St(e,qi,t)}function el(e){return e==="file"||e==="diff"?e:null}function tl(e){return e==="terminal"?"terminal":"agent"}function rl(e){return e==="terminal"?"terminal":"control"}function sl(e,t=[...de],r="codex"){return e&&at(e)&&t.includes(e)?e:r}function Fr(e,t=de){let r=t.length>0?t:de,i=r.indexOf(e);return r[(i+1)%r.length]??r[0]??"codex"}function $r(e){return/:agent(?:-\d+)?$/.test(e)?"agent":/:terminal(?:-\d+)?$/.test(e)?"terminal":null}function il(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":$r(e.activeTab)??e.preferredPtyTabKind}function nl(e,t,r){if(!e)return{activeTab:t===ne?t:"agent",selectedPtyTabId:null};let i=e.ptyTabs.find(n=>n.id===r)??null,a=e.selectedPtyTabId?e.ptyTabs.find(n=>n.id===e.selectedPtyTabId)??null:null,y=e.ptyTabs.find(n=>n.id===t)??null;if(y)return{activeTab:y.id,selectedPtyTabId:y.id};if(Qi(t)){let h=e.ptyTabs.find(p=>p.kind===t)??null??a??i??e.ptyTabs[0]??null;return{activeTab:h?.id??ne,selectedPtyTabId:h?.id??null}}if(t===ne)return{activeTab:ne,selectedPtyTabId:i?.id??a?.id??e.ptyTabs[0]?.id??null};let T=a??i??e.ptyTabs[0]??null;return{activeTab:T?.id??ne,selectedPtyTabId:T?.id??null}}function ol(e,t,r){if(!t.inspection||t.inspection.taskId!==r)return{selectedFileTreePath:e.selectedFileTreePath,collapsedFileTreePaths:e.collapsedFileTreePaths};let i=e.selectedFileTreePath??t.inspection.selectedFilePath,a=e.selectedFileTreePath===null&&e.collapsedFileTreePaths.length===0?al(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:i,collapsedFileTreePaths:a}}function al(e,t){let r=new Set;if(t){let i=t.split("/");for(let a=1;a<i.length;a+=1)r.add(i.slice(0,a).join("/"))}return e.filter(i=>i.kind==="directory"&&!i.path.includes("/")&&!r.has(i.path)).map(i=>i.path).sort((i,a)=>i.localeCompare(a))}function cl(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function $i(e,t){return t.includes(e)}function ll(e,t){let r=dl(t);return e.selectedLeftItemId&&r.includes(e.selectedLeftItemId)?e.selectedLeftItemId:e.selectedTaskId&&r.includes(`task:${e.selectedTaskId}`)?`task:${e.selectedTaskId}`:e.selectedRepoId&&r.includes(`repo:${e.selectedRepoId}`)?`repo:${e.selectedRepoId}`:r[0]??null}function dl(e){let t=[];for(let r of e.repos){t.push(`repo:${r.id}`);for(let i of e.tasks.filter(a=>a.repoId===r.id))t.push(`task:${i.id}`);t.push(`new-task:${r.id}`)}return t.push("new-workspace"),t}function en(e){return e?e.startsWith("repo:")?{kind:"repo",id:e.slice(5)}:e.startsWith("task:")?{kind:"task",id:e.slice(5)}:null:null}function Ue(e){return typeof e=="string"?e:null}function ul(e){return e?`task:${e}`:null}function jt(e){return typeof e=="string"&&e.startsWith("task:")}function Or(e){return typeof e=="string"&&e.startsWith("new-task:")}function tn(e){return Or(e)?e.slice(9):null}function Ne(e,t,r){return Math.min(r,Math.max(t,e))}var qt="empty",hl=[{id:"commit",label:"commit",shortcut:"c"},{id:"push",label:"push",shortcut:"p"},{id:"create-pr",label:"create pr",shortcut:"P"},{id:"refresh-checks",label:"refresh checks",shortcut:"R"},{id:"merge",label:"merge",shortcut:"M"},{id:"close-task",label:"close task",shortcut:"X"}],ce={lineNumber:"3b4261",gutter:"3b4261",keyword:"9d7cd8",string:"9ece6a",literal:"ff9e64",comment:"565f89",markup:"f7768e",diffAdd:"9ece6a",diffDelete:"f7768e",diffMeta:"565f89",diffHunk:"565f89"};function on(e,t){let r=t.repos.find(c=>c.id===e.selectedRepoId)??t.repos[0]??null,i=r?t.tasks.filter(c=>c.repoId===r.id):[],a=i.find(c=>c.id===e.selectedTaskId)??i[0]??null,y=Gl(t.tasks),T=ml(e,a),n=gl(e,a,T),h=n.find(c=>c.id===T)??n[0]??{id:"agent",label:"CODEX"},p=t.inspection?.taskId===a?.id?t.inspection:null,S=r?.name??"no repo",o=a?De(a.runner):De(e.selectedRunner),w=Vl(a);return{inputMode:e.inputMode,focusedRegion:e.focusedRegion,actionMessage:e.actionMessage,terminal:e.terminal,footerText:e.workspaceBrowser!==null?`BROWSE WORKSPACE ${e.workspaceBrowser.cwd} \u2191\u2193 move \u2192 open \u2190 up Enter add repo`:e.taskPromptInput!==null?`NEW TASK ${r?`[${r.name}]`:"[no repo]"} ${De(e.selectedRunner)} Ctrl+R runner: ${e.taskPromptInput}${e.taskPromptError?` \xB7 ${e.taskPromptError}`:""}`:e.inputMode==="terminal"?"TERMINAL \u2191\u2193/PgUp/PgDn scroll Ctrl+] detach":e.focusedRegion==="tasks"?e.selectedLeftItemId?.startsWith("new-task:")?`r runner [${De(e.selectedRunner)}] Enter create task`:jt(e.selectedLeftItemId)?"n new task Enter attach X close task":"n new task Enter select":e.focusedRegion==="center"?a===null?"n new task Tab tasks":T===ne?"\u2191\u2193/wheel/PgUp/PgDn scroll \u2190/\u2192 switch Tab inspector":`+ new tab a ${De(e.centerTabRunner??a?.runner??e.selectedRunner)} r runner t Terminal x close Enter attach`:"n new task ? help / search : command",topRail:{workspacePath:kt.relative(process.env.HOME??"",t.workspaceRoot).length>0?`~/${kt.relative(process.env.HOME??"",t.workspaceRoot)}`:t.workspaceRoot,agent:o,liveLabel:a?.status==="running"?"live":"idle"},leftTree:fl(e,t.repos,t.tasks),runners:(t.enabledRunnerIds??["codex","cursor","claude"]).map(c=>Xl(c,y[c])),centerHeader:{tabLabel:e.workspaceBrowser?"BROWSER":h.label,taskId:e.workspaceBrowser?"new workspace":a?.id??"no task",repo:S,agent:o},centerTranscript:pl(T,e,r,a,e.workspaceBrowser,p),tabs:n,rightContext:zl(r,a),rightInspection:El(e,a,p,sn(e)),rightChecks:w,rightActions:sn(e)}}function fl(e,t,r){let i=[{text:"WORKSPACES",muted:!0,focused:e.focusedRegion==="tasks"}];if(t.length===0)i.push({text:"No repos registered.",indent:2,muted:!0});else for(let y of t){let T=e.selectedLeftItemId===`repo:${y.id}`;i.push({id:`repo:${y.id}`,text:`\u25BE ${y.name}`,selected:T,focused:T&&e.focusedRegion==="tasks"});let n=r.filter(S=>S.repoId===y.id);if(n.length===0)i.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let S of n){let o=e.selectedLeftItemId===`task:${S.id}`,w=o?"\u25B8":"\u2022",c={id:`task:${S.id}`,taskId:S.id,text:`${w} ${S.id} [${S.runner}]`,indent:2,selected:o,focused:o&&e.focusedRegion==="tasks",accentDot:S.status==="running"};o&&(c.status=S.status),i.push(c)}let h=`new-task:${y.id}`,p=e.selectedLeftItemId===h;i.push({id:h,text:`+ New Task [${De(e.selectedRunner)}]`,indent:2,selected:p,focused:p&&e.focusedRegion==="tasks",muted:!p})}let a=e.selectedLeftItemId==="new-workspace";return i.push({text:"",muted:!0}),i.push({id:"new-workspace",text:"+ New Workspace",selected:a,focused:a&&e.focusedRegion==="tasks"}),i}function pl(e,t,r,i,a,y=null){if(a){let n=a.entries.length===0?["No directories or git repos here."]:a.entries.map((h,p)=>{let S=p===a.selectedIndex?"\u25B8":" ",o=h.kind==="repo"?" [git repo]":"/";return`${S} ${h.name}${o}`});return ke(["Browse for a workspace to register.",a.cwd,"",...n,"",a.error??"Use \u2191\u2193 to move, \u2192 or Enter to open, \u2190 to go up, Enter on a git repo to add it."])}if(!r)return ke(["No repos registered yet.","","Run `craig repo add <path>` in command mode, then reopen the shell."]);if(!i)return ke([`No tasks in ${r.name}.`,"",`Press n or choose + New Task to create one with ${De(t.selectedRunner)}.`]);let T=i.ptyTabs.find(n=>n.id===e)??null;return T?T.kind==="agent"?ke([`${T.title} tab ready for ${i.id}.`,"","Press Enter to attach this PTY-backed agent session.","Use + to create another task tab, a/t for a specific kind, or x to close this tab."]):ke([`${T.title} tab ready for ${i.id}.`,"","Press Enter to attach this plain task shell.","Use + to create another task tab, a/t for a specific kind, or x to close this tab."]):e===ne&&t.openInspectionKind==="file"?bl(i,y,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?yl(i,y,t.diffScrollOffset):i.ptyTabs.length===0&&!t.openInspectionKind?ke(["No task tabs open.","","Press a to create an agent tab, t to create a Terminal tab, or + to create the preferred tab kind."]):ke(["No center tab selected.","","Choose a task PTY tab or open an inspection item from the right panel."])}function gl(e,t,r){let i=t?.ptyTabs.map(y=>({id:y.id,label:_l(y)}))??[];if(!t)return[{id:qt,label:"EMPTY",active:r===qt,focused:e.focusedRegion==="center"&&r===qt}];let a=e.openInspectionKind?[{id:ne,label:wl(e)}]:[];return[...i,...a].map(y=>({...y,active:y.id===r,focused:e.focusedRegion==="center"&&y.id===r}))}function ml(e,t){return t?t.ptyTabs.some(r=>r.id===e.activeTab)||e.activeTab===ne&&e.openInspectionKind?e.activeTab:e.activeTab==="agent"||e.activeTab==="terminal"?t.ptyTabs.find(r=>r.kind===e.activeTab)?.id??t.ptyTabs[0]?.id??ne:e.selectedPtyTabId&&t.ptyTabs.some(r=>r.id===e.selectedPtyTabId)?e.selectedPtyTabId:t.ptyTabs[0]?.id??ne:qt}function _l(e){return e.title.toUpperCase()}function wl(e){let t=e.openInspectionKind==="diff"?e.selectedDiffPath:e.selectedFilePath,r=t?kt.basename(t):"Inspect";return e.openInspectionKind==="diff"?`${r} \u0394`:r}function bl(e,t,r){if(!e)return ke(["No task selected.","","Select or create a task to inspect files."]);if(!t||t.error)return ke(["Files unavailable.","",t?.error??"Craig has not loaded file inspection for this task yet."]);let i=t.selectedFile,a=cn(i.path??i.title);return[{text:i.title},{text:`${i.byteLength===null?"size unknown":`${i.byteLength} bytes`} \xB7 ${i.lines.length} lines \xB7 PgUp/PgDn or wheel scroll`,tone:"muted"},{text:""},...vl(i.lines,r,a)]}function yl(e,t,r){if(!e)return ke(["No task selected.","","Select or create a task to inspect diffs."]);if(!t||t.error)return ke(["Diff unavailable.","",t?.error??"Craig has not loaded diff inspection for this task yet."]);let i=Sl(t),a=Math.max(0,Math.min(r,Math.max(0,i.length-1)));return[{text:"All changes"},{text:`${t.diffPaths.length} files \xB7 ${i.length} rows \xB7 PgUp/PgDn or wheel scroll`,tone:"muted"},{text:""},...i.slice(a)]}function Wr(e){if(!e)return[];let t=0;return e.diffPaths.map(r=>{let a=1+(e.diffContents[r]??e.selectedDiff).lines.length+1,y={path:r,start:t,end:t+a};return t+=a,y})}function an(e){return Wr(e).at(-1)?.end??0}function Sl(e){let t=[];for(let r of e.diffPaths){let i=e.diffContents[r]??e.selectedDiff,a=cn(i.path??i.title);t.push({text:i.title,tone:"muted"}),t.push(...kl(i.lines,0,a)),t.push({text:""})}return t.length>0?t:ke(["No local changes."])}function ke(e){return e.map(t=>({text:t}))}function vl(e,t,r){let i=Math.max(3,String(e.length).length),a=Math.max(0,Math.min(t,Math.max(0,e.length-1)));return e.slice(a).map((y,T)=>{let n=a+T+1;return{text:`${`${String(n).padStart(i," ")} \u2502 `}${y}`,segments:[{text:String(n).padStart(i," "),style:{fg:ce.lineNumber}},{text:" \u2502 ",style:{fg:ce.gutter}},...Nr(y,r)],tone:"default"}})}function kl(e,t,r){let i=Tl(e),a=Math.max(0,Math.min(t,Math.max(0,i.length-1)));return i.slice(a).map(y=>Cl(y,r))}function Tl(e){let t=[],r=0,i=0;for(let a of e){let y=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(a);if(y){r=Number.parseInt(y[1]??"0",10),i=Number.parseInt(y[2]??"0",10);continue}if(!(a.startsWith("diff --git")||a.startsWith("index ")||a.startsWith("+++ ")||a.startsWith("--- "))&&!(a==="staged"||a==="unstaged"||a==="untracked")){if(a.startsWith("-")&&!a.startsWith("---")){t.push({oldNumber:r,newNumber:null,marker:"-",text:a.slice(1),kind:"delete"}),r+=1;continue}if(a.startsWith("+")&&!a.startsWith("+++")){t.push({oldNumber:null,newNumber:i,marker:"+",text:a.slice(1),kind:"add"}),i+=1;continue}if(a.startsWith(" ")){if(r===0&&i===0)continue;t.push({oldNumber:r,newNumber:i,marker:" ",text:a.slice(1),kind:"context"}),r+=1,i+=1;continue}}}return t}function Cl(e,t){let r=rn(e.oldNumber),i=rn(e.newNumber),a=e.kind==="delete"?r:i,y=e.kind==="delete"?{bg:"2a1111",fallbackFg:ce.diffDelete}:e.kind==="add"?{bg:"10210f",fallbackFg:ce.diffAdd}:null,T=`${a} \u2502 ${e.text}`,n=y?Pl(Nr(e.text,t),y.bg,y.fallbackFg):Nr(e.text,t),h=y?{fg:ce.lineNumber,bg:y.bg}:{fg:ce.lineNumber},p=y?{fg:ce.gutter,bg:y.bg}:{fg:ce.gutter};return{text:T,segments:[{text:a,style:h},{text:" \u2502 ",style:p},...n],fullBleed:y!==null}}function rn(e){return e===null?" ":String(e).padStart(4," ")}function cn(e){let t=kt.extname(e).toLowerCase();return[".ts",".tsx",".js",".jsx",".mjs",".cjs"].includes(t)?"javascript":[".json",".jsonc"].includes(t)?"json":[".md",".mdx"].includes(t)?"markdown":[".css",".scss"].includes(t)?"css":"plain"}function Nr(e,t){return t==="diff"?Rl(e):t==="markdown"?Il(e):t==="json"?Hr(e,/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|-?\b\d+(?:\.\d+)?\b/g):t==="javascript"||t==="css"?Hr(e,/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`)|\/\/.*$|\/\*.*?\*\/|\b(const|let|var|function|return|if|else|for|while|class|interface|type|import|export|from|async|await|new|extends|implements|switch|case|break|continue|try|catch|throw|true|false|null|undefined)\b|-?\b\d+(?:\.\d+)?\b/g):[{text:e}]}function Rl(e){return e.startsWith("+")&&!e.startsWith("+++")?[{text:e,style:{fg:ce.diffAdd}}]:e.startsWith("-")&&!e.startsWith("---")?[{text:e,style:{fg:ce.diffDelete}}]:e.startsWith("@@")?[{text:e,style:{fg:ce.diffHunk}}]:e.startsWith("diff --git")||e.startsWith("index ")||e.startsWith("+++ ")||e.startsWith("--- ")?[{text:e,style:{fg:ce.diffMeta}}]:[{text:e}]}function Pl(e,t,r){return e.map(i=>({text:i.text,style:{...i.style??{fg:r},bg:t}}))}function Il(e){return/^#{1,6}\s/.test(e)?[{text:e,style:{fg:ce.markup,bold:!0}}]:Hr(e,/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)]+\))/g)}function Hr(e,t){let r=[],i=0;for(let a of e.matchAll(t)){let y=a[0],T=a.index??0;T>i&&r.push({text:e.slice(i,T)}),r.push({text:y,style:xl(y)}),i=T+y.length}return i<e.length&&r.push({text:e.slice(i)}),r.length>0?r:[{text:e}]}function xl(e){return e.startsWith("//")||e.startsWith("/*")?{fg:ce.comment,italic:!0}:e.startsWith('"')||e.startsWith("'")||e.startsWith("`")?{fg:ce.string}:/^-?\d/.test(e)||e==="true"||e==="false"||e==="null"||e==="undefined"?{fg:ce.literal}:e.startsWith("**")||e.startsWith("[")||e.startsWith("`")?{fg:ce.markup}:{fg:ce.keyword}}function El(e,t,r,i){let a=[Al(e,t),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...a,...Ml(e,t,i)]}:e.inspectionMode==="files"?{title:"",rows:[...a,...jl(e,r)]}:{title:"",rows:[...a,...ql(e,r)]}}function Al(e,t){let r=e.inspectionMode,i=[{label:"CHANGES",active:r==="diff"},{label:"FILES",active:r==="files"},{label:"REVIEW",active:r==="review"}],a=[];for(let h=0;h<i.length;h++){let p=i[h];h>0&&a.push({text:" "}),a.push({text:p.label,style:{fg:p.active?"7aa2f7":"565f89"}})}let y=Dl(t?.pullRequest??null),T=Ll(t?.pullRequest?.requiredChecks??null);return a.push({text:" "},y,{text:" "},T),{id:"inspection-mode",text:a.map(h=>h.text).join(""),segments:a}}function Dl(e){return!e||!e.number?{text:Ai,style:{fg:"565f89"}}:e.status==="merged"?{text:Li,style:{fg:"9d7cd8"}}:e.status==="closed"?{text:Mi,style:{fg:"f7768e"}}:{text:Di,style:{fg:"9ece6a"}}}function Ll(e){return!e||e.length===0?{text:Er,style:{fg:"565f89"}}:e.some(t=>t.status==="failed")?{text:Lr,style:{fg:"f7768e"}}:e.every(t=>t.status==="success")?{text:Dr,style:{fg:"9ece6a"}}:{text:Ar,style:{fg:"e0af68"}}}function sn(e){return hl.map(t=>({...t,selected:t.id===e.selectedActionId,focused:e.focusedRegion==="actions"&&t.id===e.selectedActionId}))}function Ml(e,t,r){if(!t)return[{id:"review-empty",text:"No task selected.",muted:!0}];let i=t.pullRequest,a=r.find(h=>h.id==="refresh-checks"),y=r.find(h=>h.id==="close-task"),T=[nn("refresh-checks","sync pr",a?.shortcut??"R",e),nn("close-task","close task",y?.shortcut??"X",e,t.status==="closed")];return[{id:"review-title",text:"PR",muted:!0},i.number?{id:"pr-number",text:`#${i.number} ${i.status??"unknown"}`}:{id:"pr-number",text:"No PR linked.",muted:!0},Ol(i.url),{id:"pr-base",text:`base ${i.baseBranch??"unknown"}`,muted:i.baseBranch===null},{id:"pr-head",text:`head ${i.headBranch??t.branch}`,muted:i.headBranch===null},{id:"pr-merge",text:`merge ${i.mergeable?"ready":i.mergeStateStatus??"unknown"}`},{id:"pr-synced",text:`synced ${Hl(i.lastSyncedAt)}`,muted:i.lastSyncedAt===null},{id:"pr-sha",text:`sha ${Wl(i.lastSyncedHeadSha)}`,muted:i.lastSyncedHeadSha===null},{id:"review-spacer",text:""},{id:"review-checks",text:"Checks",muted:!0},...Bl(t),{id:"review-action-spacer",text:""},...T]}function Ol(e){if(!e)return{id:"pr-url",text:"not created",muted:!0};let t="Open in GitHub \u2197";return{id:"pr-url",text:t,segments:[{text:t,href:e,style:{fg:"7aa2f7",underline:!0}}]}}function nn(e,t,r,i,a=!1){return{id:e,text:`${t.padEnd(18," ")} ${r}`,selected:e===i.selectedActionId,focused:i.focusedRegion==="inspector"&&i.inspectionMode==="review"&&e===i.selectedActionId,muted:a}}function Bl(e){return e.pullRequest.number?e.pullRequest.requiredChecks.length===0?[{id:"pr-checks-empty",text:"No GitHub checks reported.",muted:!0}]:e.pullRequest.requiredChecks.map(Fl):[{id:"pr-checks-none",text:"No checks \u2014 sync after creating a PR.",muted:!0}]}function Fl(e){let{icon:t,color:r}=$l(e.status),i=e.name.length>16?`${e.name.slice(0,15)}\u2026`:e.name;return{id:`pr-check:${e.name}`,text:`${t} ${i.padEnd(16," ")} ${Nl(e.status)}`,color:r,muted:!1}}function $l(e){switch(e){case"success":return{icon:Dr,color:"9ece6a"};case"pending":return{icon:Ar,color:"e0af68"};case"failed":return{icon:Lr,color:"f7768e"};case"skipped":return{icon:Er,color:"565f89"};default:return{icon:"?",color:"565f89"}}}function Nl(e){return e==="success"?"passing":e==="failed"?"failing":e}function Hl(e){return e??"--"}function Wl(e){return e?e.slice(0,7):"--"}function jl(e,t){if(!t)return[{id:"empty",text:"No file index. Select a task with local changes.",muted:!0}];if(t.error)return[{id:"error",text:t.error,muted:!0}];if(t.fileRows.length===0)return[{id:"empty",text:"No Git-visible files.",muted:!0}];let r=new Map(t.diffRows.map(y=>[y.path,y.status])),i=Ul(t.fileRows,e.collapsedFileTreePaths),a=e.selectedFileTreePath??t.selectedFilePath;return i.map(y=>{let T=y.kind==="file"?r.get(y.path):void 0,n=T==="A"?"9ece6a":T==="M"?"e0af68":T==="D"?"f7768e":T==="??"?"565f89":void 0,h=y.kind==="directory"?e.collapsedFileTreePaths.includes(y.path)?xi:Ei:Ii(y.label),p=y.kind==="file"?Oi(y.label):void 0,S=" ".repeat(y.depth),o=p?{text:h,style:{fg:p}}:{text:h},w=n?{text:y.label,style:{fg:n}}:{text:y.label},c=[{text:S},o,w];return{id:y.path,text:`${S}${h}${y.label}`,selected:y.path===a,focused:y.path===a&&e.focusedRegion==="inspector",muted:y.kind==="directory",segments:c}})}function Ul(e,t){let r=new Set(t);return e.filter(i=>{let a=i.path.split("/");for(let y=1;y<a.length;y+=1)if(r.has(a.slice(0,y).join("/")))return!1;return!0})}function ql(e,t){if(!t)return[{id:"empty",text:"No task diff index.",muted:!0}];if(t.error)return[{id:"error",text:t.error,muted:!0}];if(t.diffRows.length===0)return[{id:"empty",text:"No local changes.",muted:!0}];let r=[];for(let i of["branch","staged","unstaged","untracked"]){let a=t.diffRows.filter(y=>y.group===i);a.length!==0&&(r.push({id:i,text:i.toUpperCase(),muted:!0}),r.push(...a.map(y=>Kl(y,e,t))))}return r}function Kl(e,t,r){let i=e.additions===null?"-":`+${e.additions}`,a=e.deletions===null?"-":`-${e.deletions}`,y=e.status==="A"||e.group==="untracked"?"9ece6a":e.status==="D"?"f7768e":"e0af68";return{id:`${e.group}:${e.path}`,text:` ${e.status.padEnd(2," ")} ${e.path} ${i}/${a}`,selected:e.path===(t.selectedDiffPath??r.selectedDiffPath),focused:e.path===(t.selectedDiffPath??r.selectedDiffPath)&&t.focusedRegion==="inspector",color:y}}function zl(e,t){return e?t?[{label:"Task",value:t.id},{label:"Repo",value:e.name},{label:"Agent",value:De(t.runner)},{label:"Branch",value:t.branch},{label:"Status",value:t.status},{label:"Worktree",value:kt.basename(t.worktreePath)}]:[{label:"Repo",value:e.name},{label:"Branch",value:e.defaultBranch},{label:"Task",value:"none",mutedValue:!0}]:[{label:"Repo",value:"none",mutedValue:!0}]}function Vl(e){return e?[{status:e.checks.status==="passed"?"\u2713":"\u25CB",label:"Checks",result:e.checks.status,duration:e.checks.lastRunAt?"done":"--",success:e.checks.status==="passed"},{status:e.runnerSession.lastKnownState==="running"?"\u2713":"\u25CB",label:"Runner",result:e.runnerSession.lastKnownState,duration:e.runnerSession.startedAt?"live":"--",success:e.runnerSession.lastKnownState==="running"}]:[{status:"\u25CB",label:"Checks",result:"n/a",duration:"--"}]}function Gl(e){return e.reduce((t,r)=>(t[r.runner]+=1,t),{codex:0,cursor:0,claude:0})}function Xl(e,t){return{name:De(e).toLowerCase(),health:t>0?1:0,count:String(t)}}var Kt={width:120,height:36},Ee={leftWidth:42,rightWidth:36,dividerWidth:1,topRailHeight:1};function ut(e,t){return{width:Math.max(e??Kt.width,Kt.width),height:Math.max(t??Kt.height,Kt.height)}}import{spawn as Sd}from"node:child_process";import{createHash as vd}from"node:crypto";import{createServer as kd,createConnection as yn}from"node:net";import{openSync as Td}from"node:fs";import{mkdir as Cd,readFile as Vr,rm as it,writeFile as Rd}from"node:fs/promises";import{tmpdir as Pd}from"node:os";import ht from"node:path";import{createRequire as id}from"node:module";var hn=po(dn(),1),Yl=1e3,Ql=["000000","cd3131","0dbc79","e5e510","2472c8","bc3fbc","11a8cd","e5e5e5","666666","f14c4c","23d18b","f5f543","3b8eea","d670d6","29b8db","ffffff"];function fn(e){return new hn.default.Terminal({allowProposedApi:!0,cols:e.columns,rows:e.rows,scrollback:Yl,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function pn(e,t){(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function Ur(e,t){return new Promise(r=>{e.write(t,r)})}function gn(e,t=0){let r=e.buffer.active,i=[],a=r.getNullCell(),y=r.baseY+r.cursorY,T=Math.max(0,r.baseY-t);for(let n=0;n<e.rows;n+=1){let h=r.getLine(T+n);if(!h){i.push({segments:[]});continue}let p=[];for(let S=0;S<e.cols;S+=1){let o=h.getCell(S,a);!o||o.getWidth()===0||p.push({text:o.getChars()||" ",style:ed(o,T+n===y&&S===r.cursorX)})}i.push({segments:Jl(Zl(p))})}return i}function Jl(e){let t=[];for(let r of e){let i=t.at(-1);if(i&&sd(i.style,r.style)){i.text+=r.text;continue}let a={text:r.text};mn(r.style)||(a.style=r.style),t.push(a)}return t}function Zl(e){let t=e.length;for(;t>0;){let r=e[t-1];if(!r||r.text!==" "||!mn(r.style))break;t-=1}return e.slice(0,t)}function ed(e,t){let r={},i=un(e,"fg"),a=un(e,"bg");return i&&(r.fg=i),a&&(r.bg=a),e.isBold()&&(r.bold=!0),e.isDim()&&(r.dim=!0),e.isItalic()&&(r.italic=!0),e.isUnderline()&&(r.underline=!0),(e.isInverse()||t)&&(r.inverse=!0),r}function un(e,t){if(t==="fg"?e.isFgDefault():e.isBgDefault())return;let i=t==="fg"?e.isFgRGB():e.isBgRGB(),a=t==="fg"?e.getFgColor():e.getBgColor();return i?a.toString(16).padStart(6,"0"):Ql[a]??td(a)}function td(e){if(e>=16&&e<=231){let t=e-16,r=Math.floor(t/36),i=Math.floor(t%36/6),a=t%6;return[r,i,a].map(rd).map(y=>y.toString(16).padStart(2,"0")).join("")}if(e>=232&&e<=255){let t=8+(e-232)*10;return[t,t,t].map(r=>r.toString(16).padStart(2,"0")).join("")}return"e6e6e6"}function rd(e){return e===0?0:55+e*40}function sd(e,t){return jr(e)===jr(t)}function jr(e){return e?[e.fg??"",e.bg??"",e.bold?"b":"",e.dim?"d":"",e.italic?"i":"",e.underline?"u":"",e.inverse?"v":""].join("|"):""}function mn(e){return jr(e)===""}var nd=id(import.meta.url),od=/^CTRL_([A-Z])$/,ad="\x1B[6n",cd="\x1B[c",ld="\x1B[?u",dd="\x1B]10;?\x1B\\",ud="\x1B]10;?\x07",hd="\x1B]11;?\x1B\\",fd="\x1B]11;?\x07",pd={ENTER:"\r",KP_ENTER:"\r",TAB:" ",SHIFT_TAB:"\x1B[Z",BACK_TAB:"\x1B[Z",BACKSPACE:"\x7F",DELETE:"\x1B[3~",ESCAPE:"\x1B",UP:"\x1B[A",DOWN:"\x1B[B",RIGHT:"\x1B[C",LEFT:"\x1B[D",HOME:"\x1B[H",END:"\x1B[F",PAGE_UP:"\x1B[5~",PAGE_DOWN:"\x1B[6~",CTRL_C:"",CTRL_D:""},zt=class{sessions=new Map;shell;env;spawn;onUpdate;resolveSessionSpec;attachedTabId=null;constructor(t){this.shell=t.shell??process.env.SHELL??"/bin/zsh",this.env=t.env??process.env,this.spawn=t.spawn,this.onUpdate=t.onUpdate,this.resolveSessionSpec=t.resolveSessionSpec??(()=>({cwd:t.workspaceRoot,command:[]}))}ensureSession(t,r,i,a){let y=this.sessions.get(r);if(y)if(y.status!=="running")qr(y),this.sessions.delete(r);else return this.attachedTabId=r,y.scrollbackLines=0,_n(y,i),this.getViewState(r);let T=this.createSession(t,r,i,a);return this.sessions.set(r,T),this.attachedTabId=r,this.getViewState(r)}write(t){let r=this.getAttachedSession();!r||r.status!=="running"||r.pty.write(t)}writeKey(t){let r=gd(t);r!==null&&this.write(r)}scrollViewport(t){let r=this.getAttachedSession();if(!r||t===0)return;let i=r.terminal.buffer.active.baseY;r.scrollbackLines=Math.max(0,Math.min(i,r.scrollbackLines-t))}resize(t){let r=this.getAttachedSession();r&&_n(r,t)}detach(){this.attachedTabId=null}disposeSession(t){let r=this.sessions.get(t);r&&(qr(r),this.sessions.delete(t),this.attachedTabId===t&&(this.attachedTabId=null))}disposeAll(){for(let t of this.sessions.values())qr(t);this.sessions.clear(),this.attachedTabId=null}getViewState(t){if(!t)return{status:"idle",rows:[],error:null,scrolledBack:!1};let r=this.sessions.get(t);return r?{status:r.status,rows:gn(r.terminal,r.scrollbackLines),error:r.error,scrolledBack:r.scrollbackLines>0}:{status:"idle",rows:[],error:null,scrolledBack:!1}}createSession(t,r,i,a){let y=this.spawn??_d().spawn,T=fn(i),n=a??this.resolveSessionSpec(t,r),h=Qe(this.env),{executable:p,args:S}=wd(this.shell,n.command,{cwd:n.cwd,env:h}),o=y(p,S,{name:"xterm-256color",cols:i.columns,rows:i.rows,cwd:n.cwd,env:bd(h)}),w={taskId:t,tabId:r,pty:o,terminal:T,status:"running",error:null,disposables:[],scrollbackLines:0};return w.disposables.push(o.onData(c=>{yd(o,c),Ur(w.terminal,c).then(()=>{this.onUpdate?.(w.tabId)})})),w.disposables.push(o.onExit(c=>{w.status="exited",Ur(w.terminal,`\r
84
+ [process exited ${c.exitCode}]`).then(()=>{this.onUpdate?.(w.tabId)})})),w}getAttachedSession(){return this.attachedTabId?this.sessions.get(this.attachedTabId)??null:null}};function gd(e){if(e.length===1)return e;let t=pd[e];if(t!==void 0)return t;let r=od.exec(e);return r?.[1]?String.fromCharCode(r[1].charCodeAt(0)-64):null}function _n(e,t){md(e.pty,t),pn(e.terminal,t)}function qr(e){for(let t of e.disposables)t.dispose();e.terminal.dispose(),e.pty.kill()}function md(e,t){t.columns>0&&t.rows>0&&(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function _d(){return nd("node-pty")}function wd(e,t,r){if(t.length===0)return{executable:e,args:[]};let a=`${[Je(t[0],r),...t.slice(1)].map(wn).join(" ")}; exec ${wn(e)} -l`;return{executable:e,args:["-lc",a]}}function wn(e){return`'${e.replaceAll("'","'\\''")}'`}function bd(e){let t={};for(let[r,i]of Object.entries(e))typeof i=="string"&&(t[r]=i);return t.TERM=t.TERM??"xterm-256color",t}function yd(e,t){for(let a=0;a<st(t,ad);a+=1)e.write("\x1B[1;1R");for(let a=0;a<st(t,cd);a+=1)e.write("\x1B[?1;2c");for(let a=0;a<st(t,ld);a+=1)e.write("\x1B[?0u");let r=st(t,dd)+st(t,ud);for(let a=0;a<r;a+=1)e.write("\x1B]10;rgb:e6e6/e6e6/e6e6\x1B\\");let i=st(t,hd)+st(t,fd);for(let a=0;a<i;a+=1)e.write("\x1B]11;rgb:0a0a/0a0a/0a0a\x1B\\")}function st(e,t){if(t.length===0)return 0;let r=0,i=e.indexOf(t);for(;i!==-1;)r+=1,i=e.indexOf(t,i+t.length);return r}var Gr=3;async function Sn(e){let t=Xr(e.paths);await Id(t,e.paths,e.spawnDaemon);let r=await Pn(t.socketPath),i=new Kr(r,e);return await i.ready(),i}async function vn(e,t={}){let r=Xr(e);await Cd(e.runtimeDir,{recursive:!0}),await it(r.socketPath,{force:!0});let i=new zr(e,t),a=kd(y=>i.handleConnection(y));await Md(a,r.socketPath),await Rd(r.pidPath,String(process.pid),"utf8"),await new Promise(y=>{let T=()=>{i.closeClients(),a.close(()=>y())};i.onShutdown=T,process.once("SIGTERM",T),process.once("SIGINT",T)}),await it(r.socketPath,{force:!0}),await it(r.pidPath,{force:!0}),i.disposeAll()}async function kn(e){let t=Xr(e);return await Gt(t.socketPath)?(await Cn(t.socketPath),!0):!1}var Kr=class{constructor(t,r){this.socket=t;this.options=r,t.setEncoding("utf8"),t.on("data",i=>this.handleData(String(i))),t.on("error",i=>this.rejectAll(i instanceof Error?i:new Error(String(i)))),t.on("close",()=>{this.closed=!0,this.rejectAll(new Error("Craig PTY daemon connection closed."))})}socket;nextRequestId=1;pending=new Map;viewCache=new Map;attachedTabId=null;buffer="";closed=!1;options;async ready(){if((await this.send({type:"ping"})).protocolVersion!==Gr)throw new Error("Craig PTY daemon protocol mismatch.")}async ensureSession(t,r,i){let a=await this.send({type:"ensureSession",taskId:t,tabId:r,size:i,spec:this.options.resolveSessionSpec?.(t,r)??{cwd:this.options.workspaceRoot,command:[]}});this.attachedTabId=r;let y=a.view??{status:"idle",rows:[],error:null};return this.viewCache.set(r,y),y}async hydrateSessions(t){for(let r of t)try{let i=await this.send({type:"hydrateSession",tabId:r});i.view&&this.viewCache.set(r,i.view)}catch(i){let a=i instanceof Error?i.message:String(i);this.viewCache.set(r,{status:"failed",rows:[],error:a})}}write(t){this.send({type:"write",input:t}).catch(()=>{})}writeKey(t){this.send({type:"writeKey",key:t}).catch(()=>{})}scrollViewport(t){this.send({type:"scrollViewport",lines:t}).then(r=>{this.attachedTabId&&r.view&&this.viewCache.set(this.attachedTabId,r.view)}).catch(()=>{})}resize(t){this.send({type:"resize",size:t}).then(r=>{this.attachedTabId&&r.view&&this.viewCache.set(this.attachedTabId,r.view)}).catch(()=>{})}detach(){this.attachedTabId=null,this.send({type:"detach"}).catch(()=>{})}disposeSession(t){this.viewCache.delete(t),this.attachedTabId===t&&(this.attachedTabId=null),this.send({type:"disposeSession",tabId:t}).catch(()=>{})}disposeAll(){this.attachedTabId=null,!this.closed&&(this.socket.end(),this.closed=!0)}getViewState(t){return t?this.viewCache.get(t)??{status:"idle",rows:[],error:null,scrolledBack:!1}:{status:"idle",rows:[],error:null,scrolledBack:!1}}async requestShutdown(){await this.send({type:"shutdown"})}async send(t){if(this.closed)throw new Error("Craig PTY daemon connection is closed.");let r=this.nextRequestId;this.nextRequestId+=1;let i={...t,id:r},a=new Promise((T,n)=>{this.pending.set(r,{resolve:T,reject:n})});if(this.socket.destroyed)throw this.pending.delete(r),new Error("Craig PTY daemon connection is closed.");this.socket.write(`${JSON.stringify(i)}
85
+ `);let y=await a;if(!y.ok)throw new Error(y.error);return y}handleData(t){this.buffer+=t;let r=this.buffer.indexOf(`
86
+ `);for(;r!==-1;){let i=this.buffer.slice(0,r);this.buffer=this.buffer.slice(r+1),this.handleMessage(i),r=this.buffer.indexOf(`
87
+ `)}}handleMessage(t){if(t.trim().length===0)return;let r;try{r=JSON.parse(t)}catch{return}if("id"in r){let i=this.pending.get(r.id);if(!i)return;this.pending.delete(r.id),i.resolve(r);return}r.type==="update"&&(r.tabId&&this.viewCache.set(r.tabId,r.view),this.options.onUpdate?.(r.tabId??""))}rejectAll(t){for(let r of this.pending.values())r.reject(t);this.pending.clear()}},zr=class{onShutdown=null;clients=new Set;runtime;attachedTabId=null;constructor(t,r){this.runtime=new zt({...r,workspaceRoot:t.workspaceRoot,onUpdate:i=>this.broadcastUpdate(i)})}handleConnection(t){let r="";this.clients.add(t),t.setEncoding("utf8"),t.on("data",i=>{r+=String(i);let a=r.indexOf(`
88
+ `);for(;a!==-1;){let y=r.slice(0,a);r=r.slice(a+1),this.handleLine(t,y),a=r.indexOf(`
89
+ `)}}),t.on("close",()=>this.clients.delete(t)),t.on("error",()=>this.clients.delete(t))}disposeAll(){this.runtime.disposeAll()}closeClients(){for(let t of this.clients)t.destroy();this.clients.clear()}async handleLine(t,r){if(r.trim().length===0)return;let i;try{i=JSON.parse(r)}catch{Vt(t,{id:-1,ok:!1,error:"Malformed daemon request."});return}try{let a=this.handleRequest(i);Vt(t,{id:i.id,ok:!0,...i.type==="ping"?{protocolVersion:Gr}:{},...a?{view:a}:{}})}catch(a){let y=a instanceof Error?a.message:String(a);Vt(t,{id:i.id,ok:!1,error:y})}}handleRequest(t){switch(t.type){case"ping":return null;case"ensureSession":return this.attachedTabId=t.tabId,this.runtime.ensureSession(t.taskId,t.tabId,t.size,t.spec);case"hydrateSession":return this.runtime.getViewState(t.tabId);case"write":return this.runtime.write(t.input),null;case"writeKey":return this.runtime.writeKey(t.key),null;case"scrollViewport":return this.runtime.scrollViewport(t.lines),this.runtime.getViewState(this.attachedTabId);case"resize":return this.runtime.resize(t.size),this.runtime.getViewState(this.attachedTabId);case"detach":return this.runtime.detach(),this.attachedTabId=null,null;case"disposeSession":return this.runtime.disposeSession(t.tabId),this.attachedTabId===t.tabId&&(this.attachedTabId=null),null;case"getViewState":return this.runtime.getViewState(t.tabId);case"shutdown":return setTimeout(()=>this.onShutdown?.(),0),null;default:return Od(t)}}broadcastUpdate(t){let r=this.runtime.getViewState(t);for(let i of this.clients)Vt(i,{type:"update",tabId:t,view:r})}};function Xr(e){let t=vd("sha256").update(e.workspaceRoot).digest("hex").slice(0,16);return{socketPath:ht.join(Pd(),`craig-${t}.sock`),pidPath:ht.join(e.runtimeDir,"pty-daemon.pid")}}async function Id(e,t,r){if(await xd(e.socketPath,1e3))return;await Gt(e.socketPath)&&(await Cn(e.socketPath),await bn(e.socketPath,1e3)),await Gt(e.socketPath)&&(await Dd(e),await bn(e.socketPath,1e3)),await Ad(e);let i=t.workspaceRoot;if(r)r(i);else{let{command:T,args:n}=Ed(i),h=Td(ht.join(t.runtimeDir,"pty-daemon.log"),"a");Sd(T,n,{cwd:i,detached:!0,stdio:["ignore",h,h],env:process.env}).unref()}let a=Date.now();for(;Date.now()-a<5e3;){if(await Tn(e.socketPath))return;await Yr(50)}let y=await Vr(ht.join(t.runtimeDir,"pty-daemon.log"),"utf8").catch(()=>"");throw new Error(`Craig PTY daemon did not start.${y?`
90
+ ${y.slice(-2e3)}`:""}`)}async function Tn(e){let t=await Ld(e).catch(()=>null);return t?.ok===!0&&t.protocolVersion===Gr}async function xd(e,t){let r=Date.now();for(;Date.now()-r<t;){if(await Tn(e))return!0;await Yr(50)}return!1}function Ed(e){let t=process.argv[1];if(t?.endsWith(".ts"))return{command:ht.resolve(ht.dirname(t),"..","node_modules",".bin","tsx"),args:[t,"__craig-daemon",e]};let r=process.argv.slice(1);return{command:process.execPath,args:[...process.execArgv,...r,"__craig-daemon",e]}}async function Ad(e){let t=await Vr(e.pidPath,"utf8").catch(()=>null);if(t){let r=Number(t.trim());if(Number.isInteger(r)&&r>0&&In(r))return}await it(e.socketPath,{force:!0}),await it(e.pidPath,{force:!0})}async function Gt(e){let t=await Pn(e).catch(()=>null);return t?(t.end(),!0):!1}async function Cn(e){await Rn(e,{id:1,type:"shutdown"}).catch(()=>null)}async function Dd(e){let t=await Vr(e.pidPath,"utf8").catch(()=>null),r=Number(t?.trim());if(!Number.isInteger(r)||r<=0||!In(r)){await it(e.socketPath,{force:!0});return}try{process.kill(r,"SIGTERM")}catch{await it(e.socketPath,{force:!0})}}async function Ld(e){return Rn(e,{id:1,type:"ping"})}function Rn(e,t){return new Promise((r,i)=>{let a=yn(e),y="",T=setTimeout(()=>{a.destroy(),i(new Error("Craig PTY daemon request timed out."))},500),n=()=>clearTimeout(T);a.setEncoding("utf8"),a.once("connect",()=>a.write(`${JSON.stringify(t)}
91
+ `)),a.once("error",h=>{n(),i(h)}),a.on("data",h=>{y+=String(h);let p=y.indexOf(`
92
+ `);if(p===-1)return;let S=y.slice(0,p);n(),a.end();try{r(JSON.parse(S))}catch(o){i(o instanceof Error?o:new Error(String(o)))}}),a.once("close",()=>n())})}async function bn(e,t){let r=Date.now();for(;Date.now()-r<t;){if(!await Gt(e))return;await Yr(50)}}function Pn(e){return new Promise((t,r)=>{let i=yn(e);i.once("connect",()=>t(i)),i.once("error",r)})}function Md(e,t){return new Promise((r,i)=>{e.once("error",i),e.listen(t,r)})}function Vt(e,t){if(!e.destroyed)try{e.write(`${JSON.stringify(t)}
93
+ `)}catch{}}function In(e){try{return process.kill(e,0),!0}catch{return!1}}function Yr(e){return new Promise(t=>setTimeout(t,e))}function Od(e){throw new Error(`Unhandled daemon request: ${JSON.stringify(e)}`)}var Bd=[" \u2584\u2588\u2588\u2588\u2588\u2584 \u2588\u2588\u2580\u2588\u2588\u2588 \u2584\u2584\u2584 \u2588\u2588\u2593 \u2584\u2588\u2588\u2588\u2588"," \u2592\u2588\u2588\u2580 \u2580\u2588 \u2593\u2588\u2588 \u2592 \u2588\u2588\u2592\u2592\u2588\u2588\u2588\u2588\u2584 \u2593\u2588\u2588\u2592 \u2588\u2588\u2592 \u2580\u2588\u2592"," \u2592\u2593\u2588 \u2584 \u2593\u2588\u2588 \u2591\u2584\u2588 \u2592\u2592\u2588\u2588 \u2580\u2588\u2584 \u2592\u2588\u2588\u2592\u2592\u2588\u2588\u2591\u2584\u2584\u2584\u2591"," \u2592\u2593\u2593\u2584 \u2584\u2588\u2588\u2592\u2592\u2588\u2588\u2580\u2580\u2588\u2584 \u2591\u2588\u2588\u2584\u2584\u2584\u2584\u2588\u2588 \u2591\u2588\u2588\u2591\u2591\u2593\u2588 \u2588\u2588\u2593"," \u2592 \u2593\u2588\u2588\u2588\u2580 \u2591\u2591\u2588\u2588\u2593 \u2592\u2588\u2588\u2592 \u2593\u2588 \u2593\u2588\u2588\u2592\u2591\u2588\u2588\u2591\u2591\u2592\u2593\u2588\u2588\u2588\u2580\u2592"," \u2591 \u2591\u2592 \u2592 \u2591\u2591 \u2592\u2593 \u2591\u2592\u2593\u2591 \u2592\u2592 \u2593\u2592\u2588\u2591\u2591\u2593 \u2591\u2592 \u2592"," \u2591 \u2592 \u2591\u2592 \u2591 \u2592\u2591 \u2592 \u2592\u2592 \u2591 \u2592 \u2591 \u2591 \u2591"," \u2591 \u2591\u2591 \u2591 \u2591 \u2592 \u2592 \u2591\u2591 \u2591 \u2591"," \u2591 \u2591 \u2591 \u2591 \u2591 \u2591 \u2591"," \u2591"];function Qr(){return[...Bd]}var Fd=["Start","Options","Exit"],$d=["Resume","Options","Exit"],Qt=2,Jt=2,Zt=2,Nd=new RegExp("\x1B\\[[0-9;]*m","g"),Hd=new RegExp("\x1B\\[(?:0)?m","g"),Wd=new RegExp("\x1B\\]8;;[^\x1B]*\x1B\\\\","g"),jd=/https?:\/\/[^\s<>"']+/g,Jr="\x1B[0m",An="\x1B]8;;\x1B\\",se={panelBg:{bg:"0a0a0a",fg:"c0caf5"},panelMuted:{bg:"0a0a0a",fg:"565f89"},panelSelected:{bg:"1a1b26",fg:"c0caf5"},panelFocused:{bg:"1a1b26",fg:"7aa2f7"},divider:{bg:"0a0a0a",fg:"292e42"},rail:{bg:"0a0a0a",fg:"c0caf5"},overlay:{bg:"06060f",fg:"565f89"},overlayTitle:{bg:"06060f",fg:"565f89"},overlayLogo:{bg:"06060f",fg:"9ece6a"},overlaySubtitle:{bg:"06060f",fg:"41a6b5"},overlayMenuSelected:{bg:"06060f",fg:"7aa2f7"},accent:{fg:"7aa2f7"},success:{fg:"9ece6a"},pending:{fg:"e0af68"},error:{fg:"f7768e"},mutedfg:{fg:"565f89"},disabled:{fg:"3b4261"}};function Dn(e,t={}){return es(e,{subtitle:"crAIg is that you?",menuItems:Fd,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Ln(e,t={}){return es(e,{subtitle:"Control mode is paused.",menuItems:$d,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}var Xt=[" GLOBAL CENTER PANEL INSPECTOR"," ? help \u2190\u2192 / hl switch tab \u2191\u2193 / jk navigate"," Esc pause / back + new tab \u2190\u2192 / hl switch mode"," Tab cycle panels a codex tab R sync PR"," q quit t terminal tab R sync PR"," x close tab X close task"," TASKS Enter attach PTY X close task"," \u2191\u2193 / jk navigate"," n new task TERMINAL MODE"," Enter attach Ctrl+] return to control mode"," Wheel / PgUp / PgDn scroll",""," Press Esc to return."],Ud=["Help"];function Zr(e,t={}){return es(e,{subtitle:t.optionsSubtitle??"Configuration",menuItems:t.optionsMenuItems??Ud,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Mn(e,t={}){let r=t.color??!0,i=se.overlay,a=new Array(e.height).fill(le(" ".repeat(e.width),r,i)),y=Qr(),T=Math.max(1,Math.floor((e.height-y.length-2-Xt.length)/2));for(let S=0;S<y.length&&!(T+S>=e.height);S+=1)a[T+S]=le(Nn(y[S]??"",e.width),r,se.overlayLogo);let n=Math.max(...Xt.map(S=>S.length)),h=Math.max(0,Math.floor((e.width-n)/2)),p=T+y.length+2;for(let S=0;S<Xt.length;S+=1){let o=p+S;if(o>=e.height)break;let w=Xt[S]??"";a[o]=le(nt(" ".repeat(h)+w,e.width),r,i)}return a.join(`
94
+ `)}function On(e,t,r={}){let i=r.color??!0,a=Ee.leftWidth,y=Ee.rightWidth,T=Ee.dividerWidth,n=r.centerOnly??!1,h=n?e.width:e.width-a-y-T*2,p=e.height-Ee.topRailHeight,S=`CRAIG | ${t.topRail.workspacePath} | ${t.topRail.agent} ${jn(`\u25CF ${t.topRail.liveLabel}`,i,se.rail)}`,o=le(nt(S,e.width),i,se.rail),w=qd(t,a-Qt-Jt,p,i),c=Kd(t,h,p,i),g=Vd(t,y,p,i),_=[];for(let s=0;s<p;s+=1){if(n){let v=s===p-1?{text:t.footerText,tone:"muted",fullBleed:!0}:c[s]??Be();_.push(Yt(v,h,i,"center"));continue}let f=Yt(w[s]??Be(),a,i,"left"),d=le("\u2502",i,se.divider),l=Yt(c[s]??Be(),h,i,"center"),u=le("\u2502",i,se.divider),m=Yt(g[s]??Be(),y,i,"right");_.push(`${f}${d}${l}${u}${m}`)}return[o,..._].join(`
95
+ `)}function es(e,t){let r=new Array(e.height).fill(le(" ".repeat(e.width),t.color,se.overlay)),i=Qr(),a=Math.max(...t.menuItems.map(p=>p.length)),y=t.menuItems.map((p,S)=>`${S===t.menuIndex?">":" "} ${p.padEnd(a)}`),T=t.optionsMessage?["",t.optionsMessage]:[],n=[...i,"",t.subtitle,"",...y,...T],h=Math.max(1,Math.floor((e.height-n.length)/2));for(let p=0;p<n.length;p+=1){let S=Nn(n[p]??"",e.width);if(p<i.length){r[h+p]=le(S,t.color,se.overlayLogo);continue}if(p===i.length+1){r[h+p]=le(S,t.color,se.overlaySubtitle);continue}let o=p-(i.length+3),c=o>=0&&o<t.menuItems.length&&o===t.menuIndex?se.overlayMenuSelected:se.overlay;r[h+p]=le(S,t.color,c)}return r.join(`
96
+ `)}function qd(e,t,r,i){let a=Yd(e.runners),y=2,T=e.leftTree.map(h=>Xd(h,t,i));return[...er(T,r-y),a,{text:e.footerText,tone:"muted",fullBleed:!0}]}function Kd(e,t,r,i){let a=e.tabs.find(o=>o.active)?.label??"AGENT",y=lu(e.tabs),T=`${" ".repeat(y)}${tr("\u2500".repeat(a.length+1),i,se.panelMuted)}`,n=[`${tr(e.centerHeader.tabLabel,i,se.panelBg)} ${e.centerHeader.taskId}`,e.centerHeader.repo].join(" \xB7 "),h=e.tabs.find(o=>o.active)?.id??"agent",p=e.centerHeader.tabLabel==="BROWSER"||!Yi(h)?e.centerTranscript.map(o=>({...o})):zd(e),S=[{text:Qd(e.tabs,i)},{text:T,tone:"muted"},{text:n},Be(),...p];return er(S,r)}function zd(e){if(e.terminal.error)return[{text:"terminal \u25B8 PTY unavailable"},Be(),{text:e.terminal.error},Be(),{text:"Fix the native dependency setup, then re-enter terminal mode."}];let t=e.tabs.find(i=>i.active)?.id??"",r=t==="agent"||/:agent(?:-\d+)?$/.test(t)?"agent":"terminal";return e.terminal.rows.length===0?[{text:`Press Enter on the ${r.toUpperCase()} tab to attach a PTY.`}]:e.terminal.rows.map(i=>({text:Wn(i.segments),segments:i.segments,fullBleed:!0}))}function Vd(e,t,r,i){let a=e.rightInspection?Gd(e.actionMessage?[...e.rightInspection.rows.slice(0,2),{id:"action-message",text:e.actionMessage},{id:"action-message-spacer",text:""},...e.rightInspection.rows.slice(2)]:e.rightInspection.rows,r):er([{text:Bn("CONTEXT",e.focusedRegion==="tasks",i,se.panelBg)},Be(),...e.rightContext.map(y=>Jd(y,i)),...e.actionMessage?[Be(),{text:e.actionMessage}]:[]],r);return er(a,r)}function Gd(e,t){let r=e.slice(0,2),i=e.slice(2),a=Math.max(0,t-r.length),y=i.findIndex(n=>n.focused||n.selected),T=y===-1?0:uu(y-Math.floor(a/2),0,Math.max(0,i.length-a));return[...r.map(n=>xn(n)),...i.slice(T,T+a).map(n=>xn(n))]}function xn(e){let t=e.focused?"\u25B8 ":e.selected?"\u2022 ":" ",r=e.focused||e.selected?"selected":e.muted?"muted":"default",i=`${t}${e.text}`;if(e.segments)return{text:i,segments:[{text:t},...e.segments],tone:r};if(e.accentPrefix&&!e.muted){let a=e.text.indexOf(" "),y=a===-1?e.text:e.text.slice(0,a),T=a===-1?"":e.text.slice(a);return{text:i,segments:[{text:t},{text:y,style:{fg:"7aa2f7"}},{text:T}],tone:r}}return e.color?{text:i,segments:[{text:t},{text:e.text,style:{fg:e.color}}],tone:r}:{text:i,tone:r}}function Xd(e,t,r){let i=" ".repeat(e.indent??0),a=e.accentDot?" \u25CF":"",y=e.status?` ${e.status}`:"",T=e.accentDot?` ${jn("\u25CF",r,e.selected?se.panelSelected:se.panelBg)}`:"",n=t-ze(y)-ze(a),h=e.focused&&!e.selected?Bn(e.text,!0,r,se.panelBg):e.text,S=`${nt(`${i}${h}`,Math.max(0,n))}${y}${T}`;return e.selected?{text:S,tone:"selected"}:e.muted?{text:S,tone:"muted"}:{text:S}}function Yd(e){let t=e.map(i=>{let a=i.health>=1,y=parseInt(i.count,10),T=y>1?` (${y})`:"";return{text:`${a?"\u25CF":"\u25CB"} ${i.name}${T}`,active:a}}),r=[];for(let i=0;i<t.length;i++){let a=t[i];i>0&&r.push({text:" "}),a.active?r.push({text:a.text,style:{fg:se.success.fg}}):r.push({text:a.text,style:{fg:se.panelMuted.fg}})}return{text:t.map(i=>i.text).join(" "),segments:r,tone:"muted"}}function Qd(e,t){return e.map(r=>r.active?tr(r.label,t,se.panelBg):Un(r.label,t,se.panelBg)).join(" ")}function Jd(e,t){return{text:`${e.label.padEnd(8," ")} ${e.mutedValue?Un(e.value,t,se.panelBg):e.value}`}}function Bn(e,t,r,i){return t?tr(e,r,i):e}function Yt(e,t,r,i){let a=Zd(i,e.tone??"default"),y=eu(e,r,a);if(i==="left"){if(e.fullBleed)return le(nt(y,t),r,a);let n=t-Qt-Jt;if(e.rightAlign){let p=ze(y),S=Math.max(0,n-p),o=`${" ".repeat(Qt)}${" ".repeat(S)}${y}${" ".repeat(Jt)}`;return le(o,r,a)}let h=`${" ".repeat(Qt)}${nt(y,n)}${" ".repeat(Jt)}`;return le(h,r,a)}return i==="center"&&e.fullBleed?tu(e,t,r,a):le(nt(` ${y}`,t),r,a)}function Zd(e,t){return t==="selected"||t==="focused"?se.panelSelected:t==="muted"?se.panelMuted:se.panelBg}function er(e,t){let r=e.slice(0,t);for(;r.length<t;)r.push(Be());return r}function Be(){return{text:""}}function eu(e,t,r){return e.segments?e.segments.map(i=>Fn(i,t,r)).join(""):e.text}function tu(e,t,r,i){let a=" ".repeat(Zt),y=Math.max(0,t-Zt*2);if(!e.segments)return le(`${a}${nt(e.text,y)}${a}`,r,i);let T=iu(e.segments,y),n=`${a}${T.map(h=>Fn(h,r,i)).join("")}${a}`;return le(n,r,i)}function Fn(e,t,r){let i=e.href?`${$n(e.href)}${e.text}${An}`:ru(e.text);return!t||!e.style?i:`${Tt(au(e.style,r))}${cu(e.style)}${i}${Jr}${Tt(r)}`}function ru(e){return e.replace(jd,t=>{let[r,i]=su(t);return`${$n(r)}${r}${An}${i}`})}function su(e){let t=e.length;for(;t>0&&".,;:!?)]}".includes(e[t-1]??"");)t-=1;return[e.slice(0,t),e.slice(t)]}function $n(e){return`\x1B]8;;${e}\x1B\\`}function iu(e,t){let r=nu(e,t);return ou(r,t)}function nu(e,t){let r=[],i=t;for(let a of e){if(i<=0)break;let y=ze(a.text);if(y<=i){r.push(a),i-=y;continue}r.push({...a,text:a.text.slice(0,i)}),i=0}return r}function ou(e,t){let r=ze(Wn(e));if(r>=t)return e;let i=e.at(-1)?.style;return i?.bg?[...e,{text:" ".repeat(t-r),style:i}]:[...e,{text:" ".repeat(t-r)}]}function au(e,t){let r=e.inverse?e.bg??t.bg:e.fg,i=e.inverse?e.fg??t.fg:e.bg,a={},y=r??t.fg,T=i??t.bg;return y&&(a.fg=y),T&&(a.bg=T),a}function cu(e){let t=[];return e.bold&&t.push("1"),e.dim&&t.push("2"),e.italic&&t.push("3"),e.underline&&t.push("4"),t.length>0?`\x1B[${t.join(";")}m`:""}function lu(e){let t=0;for(let r of e){if(r.active)return t;t+=r.label.length+3}return 0}function Nn(e,t){let r=Math.max(0,t-ze(e)),i=Math.floor(r/2),a=r-i;return`${" ".repeat(i)}${e}${" ".repeat(a)}`}function nt(e,t){let r=ze(e);return r>=t?du(e,t):e+" ".repeat(t-r)}function du(e,t){return ze(e)<=t?e:Hn(e).slice(0,Math.max(0,t-1))+"\u2026"}function ze(e){return Hn(e).length}function uu(e,t,r){return Math.min(Math.max(e,t),r)}function Hn(e){return e.replace(Wd,"").replace(Nd,"")}function Wn(e){return e.map(t=>t.text).join("")}function le(e,t,r){if(!t)return e;let i=Tt(r),a=e.replace(Hd,`${Jr}${i}`);return`${i}${a}${Jr}`}function Tt(e){let t=[];return e.fg&&t.push(`38;2;${En(e.fg).join(";")}`),e.bg&&t.push(`48;2;${En(e.bg).join(";")}`),`\x1B[${t.join(";")}m`}function En(e){return[Number.parseInt(e.slice(0,2),16),Number.parseInt(e.slice(2,4),16),Number.parseInt(e.slice(4,6),16)]}function jn(e,t,r){return ts(e,t,se.success.fg,r)}function tr(e,t,r){return ts(e,t,se.accent.fg,r)}function Un(e,t,r){return ts(e,t,se.mutedfg.fg,r)}function ts(e,t,r,i){if(!t)return e;let a=i.bg?{fg:r,bg:i.bg}:{fg:r};return`${Tt(a)}${e}${Tt(i)}`}var rs=["Runners","Help"];function ss(e,t){return de.map(r=>{let i=pe(r),a=e.runners?.[r]?.enabled!==!1,y=e.runners?.[r]?.path?.trim(),T=t.pathEdit?.runner===r?`${t.pathEdit.value}_`:y&&y.length>0?y:`default (${i.executable})`;return`${i.displayName} ${a?"enabled":"disabled"} ${T}`})}function Kn(e){return e.message?e.message:e.pathEdit?"Type an executable path. Enter saves. Empty resets to default. Esc cancels.":"Enter toggles. E edits the executable path."}function zn(e,t){return t==="UP"||t==="k"?{kind:"render",menuIndex:Math.max(0,e-1)}:t==="DOWN"||t==="j"?{kind:"render",menuIndex:Math.min(rs.length-1,e+1)}:t==="ESCAPE"?{kind:"back"}:is(t)?e===0?{kind:"runners"}:{kind:"help"}:{kind:"noop",menuIndex:e}}function Vn(e,t,r,i){if(e.pathEdit)return hu({...e,pathEdit:e.pathEdit},t,r);let a=ss(t,e).length;if(r==="UP"||r==="k")return{kind:"render",state:{...e,menuIndex:Math.max(0,e.menuIndex-1),message:null}};if(r==="DOWN"||r==="j")return{kind:"render",state:{...e,menuIndex:Math.min(a-1,e.menuIndex+1),message:null}};if(r==="ESCAPE")return{kind:"back",state:e};if(r==="e"){let n=de[e.menuIndex]??"codex";return{kind:"render",state:{...e,message:null,pathEdit:{runner:n,value:t.runners?.[n]?.path??""}}}}if(!is(r))return{kind:"noop",state:e};let y=de[e.menuIndex]??"codex",T=t.runners?.[y]?.enabled!==!1;return T&&i.length<=1?{kind:"render",state:{...e,message:"At least one runner must stay enabled."}}:{kind:"save",config:fu(t,y,!T),state:{...e,message:`${pe(y).displayName} ${T?"disabled":"enabled"}.`}}}function hu(e,t,r){if(r==="ESCAPE")return{kind:"render",state:qn({...e,message:null})};if(r==="BACKSPACE")return{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:e.pathEdit.value.slice(0,-1)}}};if(is(r)){let i=e.pathEdit.runner,a=e.pathEdit.value.trim();return{kind:"save",config:pu(t,i,a.length>0?a:null),state:qn({...e,message:a.length>0?`${pe(i).displayName} executable saved.`:`${pe(i).displayName} executable reset to default.`})}}return gu(r)?{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:`${e.pathEdit.value}${r}`}}}:{kind:"noop",state:e}}function fu(e,t,r){return{...e,runners:{...e.runners??{},[t]:{...e.runners?.[t]??{},enabled:r}}}}function pu(e,t,r){let i={...e.runners?.[t]??{},...r?{path:r}:{}};return r||delete i.path,{...e,runners:{...e.runners??{},[t]:i}}}function qn(e){let t={...e};return delete t.pathEdit,t}function is(e){return e==="ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
97
+ `}function gu(e){return e.length===1&&e>=" "&&e!=="\x7F"}var bu=mu(import.meta.url),yu=bu("terminal-kit"),Su=yu.terminal;async function Yn(e={}){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("Craig terminal shell requires a TTY.");let t=e.workspaceRoot??process.cwd(),r=$e(t);await dt(t);let i=await _e(r),a=ot(i),y=e.uiStateFile?await Pe({uiStateFile:e.uiStateFile}):null,T=Promise.resolve(),n=Promise.resolve(),h=await Ct(t,void 0,a),p=Ut(Ki(y,i),h);h=await Ct(t,p,a);let S=()=>{},o={workspaceRoot:t,onUpdate:()=>S(),resolveSessionSpec:(g,_)=>Ru(h,_,t)},w=e.ptyRuntime??await Sn({...o,paths:r}),c=g=>{if(!e.uiStateFile)return;y=zi(y,g);let _=y;T=T.then(()=>ve({uiStateFile:e.uiStateFile},_),()=>ve({uiStateFile:e.uiStateFile},_)),T.catch(()=>{})};return new Promise(g=>{let _=e.terminal??Su,s={mode:"overlay",variant:"boot",menuIndex:0,optionsMessage:null,shell:Ut(p,h)},f=!1,d=!1,l=null,u=0,m=0,v=null,I=null,E=null,N=null,O=!1,A=!0,D=null,C=()=>{},j=w;S=()=>{s.mode==="main"&&(s={mode:"main",shell:z(s.shell)},E||(E=setTimeout(()=>{E=null,s.mode==="main"&&C()},50)))};function z($){return vt($,j.getViewState($.selectedPtyTabId))}function W($){return z(ku($,h))}function G($){return h.tasks.find(M=>M.id===$.selectedTaskId)??null}async function q(){await j.hydrateSessions?.(h.tasks.flatMap($=>$.ptyTabs.map(M=>M.id)))}function b(){q().catch(()=>{}).then(()=>{s.mode==="main"&&(s={mode:"main",shell:z(s.shell)},C())})}function P($){let M=n.then($,$);return n=M.then(()=>{},()=>{}),M}function k($){let M=G($),L=h.inspection,H=L&&L.taskId===M?.id?L:null,V=Tu(H?.fileRows??[],$.collapsedFileTreePaths);return{leftItemIds:Cu(h),centerTabIds:Ji(M,$),ptyTabIds:M?.ptyTabs.map(re=>re.id)??[],filePathIds:H?.filePaths??[],fileTreeRowIds:V.map(re=>re.path),fileTreeFileIds:V.filter(re=>re.kind==="file").map(re=>re.path),fileTreeDirectoryIds:V.filter(re=>re.kind==="directory").map(re=>re.path),diffPathIds:H?.diffPaths??[],diffPathRanges:Wr(H),fileLineCount:H?.selectedFile.lines.length??0,diffLineCount:an(H),pageRows:Math.max(5,ut(_.width,_.height).height-Ee.topRailHeight-8),enabledRunnerIds:a}}async function R($){await gs(r,$),i=$,a=ot(i),h={...h,enabledRunnerIds:a},s.mode==="main"?s={mode:"main",shell:W({...s.shell,selectedRunner:a.includes(s.shell.selectedRunner)?s.shell.selectedRunner:Ge(i)})}:s={...s,shell:W({...s.shell,selectedRunner:a.includes(s.shell.selectedRunner)?s.shell.selectedRunner:Ge(i)})}}async function F($){let M=$.selectedTaskId;M&&await P(async()=>{let L=await Se(r,M);!L.ptyTabs.some(H=>H.id===$.activeTab)||L.selectedPtyTabId===$.activeTab||await te(r,{...L,selectedPtyTabId:$.activeTab})})}async function B(){let $=(s.mode==="main",s.shell);h=await Ct(t,$,a),s.mode==="main"?s={mode:"main",shell:W(s.shell)}:s={...s,shell:W(s.shell)}}async function U($){h=await Ct(t,$,a),s.mode==="main"&&(s={mode:"main",shell:W($)}),c(s.shell),C()}async function K($){let M=await Ou($);s.mode==="main"&&(s={mode:"main",shell:W({...s.shell,workspaceBrowser:M,activeTab:s.shell.selectedPtyTabId??s.shell.activeTab,actionMessage:null})},C())}async function ee($){try{let M=W($),L=G(M),H=M.selectedPtyTabId;if(L&&M.focusedRegion==="tasks"){let be=L.ptyTabs.find(Ce=>Ce.kind==="agent")??null;be?H=be.id:(L=await Ae(L),await B(),H=L.selectedPtyTabId)}L&&!H&&(L=await Ae(L),await B(),H=L.selectedPtyTabId);let V=W({...M,activeTab:H??M.activeTab,selectedPtyTabId:H});if(!V.selectedTaskId||!H){s={mode:"main",shell:V},C();return}s={mode:"main",shell:vt({...V,inputMode:"terminal"},j.getViewState(H))},c(s.shell);let re=await j.ensureSession(V.selectedTaskId,H,ns(ut(_.width,_.height)));d=os(H),l=null,s={mode:"main",shell:vt({...V,inputMode:"terminal"},re)},c(s.shell)}catch(M){let L=M instanceof Error?M.message:"Failed to start PTY.";$.selectedTaskId&&$.selectedPtyTabId&&os($.selectedPtyTabId)&&(await x($.selectedTaskId,L).catch(()=>{}),await B().catch(()=>{})),s={mode:"main",shell:Gi(W($),L)},c(s.shell)}C()}async function x($,M){await P(async()=>{let L=await Se(r,$);await te(r,{...L,status:L.status==="running"?"draft":L.status,runnerSession:{...L.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:M})})}async function Q($,M,L){let H=W($);if(!H.selectedTaskId)throw new Error("Select a task before creating a tab.");let V=await P(async()=>{let re=await Se(r,H.selectedTaskId),be=M??Iu(re,H.activeTab,H.preferredPtyTabKind),Ce=Gn(re,be,L??void 0,i),ft={...re,ptyTabs:[...re.ptyTabs,Ce],selectedPtyTabId:Ce.id};return await te(r,ft),ft});return await B(),W({...H,activeTab:V.selectedPtyTabId??H.activeTab,selectedPtyTabId:V.selectedPtyTabId,preferredPtyTabKind:V.ptyTabs.at(-1)?.kind??H.preferredPtyTabKind,focusedRegion:"center",actionMessage:`Created tab: ${V.ptyTabs.at(-1)?.title??"tab"}`})}async function Y($){let M=W($);if(!M.selectedTaskId)throw new Error("Select a task before closing a tab.");let{closedTab:L,nextSelectedTab:H}=await P(async()=>{let V=await Se(r,M.selectedTaskId),re=V.ptyTabs.findIndex(or=>or.id===M.activeTab);if(re===-1)throw new Error("Only PTY tabs can be closed.");let be=V.ptyTabs[re],Ce=V.ptyTabs.filter(or=>or.id!==be.id),ft=Ce[Math.min(re,Ce.length-1)]??Ce[re-1]??null;return await te(r,{...V,ptyTabs:Ce,selectedPtyTabId:ft?.id??null}),{closedTab:be,nextSelectedTab:ft}});return j.disposeSession(L.id),await B(),W({...M,activeTab:H?.id??(M.openInspectionKind?"inspection":M.activeTab),selectedPtyTabId:H?.id??null,focusedRegion:"center",actionMessage:`Closed tab: ${L.title}`})}async function Z($){let M=W($);if(!M.selectedTaskId)throw new Error("Select a task before creating or syncing a PR.");let L=await bt(r,M.selectedTaskId,{watch:!1});await B();let H=L.disposition==="created"?"Created PR":L.disposition==="discovered"?"Discovered PR":"Synced PR";return W({...M,focusedRegion:"inspector",inspectionMode:"review",actionMessage:`${H}: #${L.prNumber} ${L.url}`})}async function he($){let M=W($);if(!M.selectedTaskId)throw new Error("Select a task before refreshing PR checks.");let{disposition:L,task:H}=await yr(r,M.selectedTaskId);await B();let V=L==="not_found"?`No PR found for ${H.branch}`:L==="discovered"?`Discovered PR: #${H.pullRequest.number} ${H.pullRequest.url??""}`:`Refreshed checks: ${H.pullRequest.requiredChecks.length} reported`;return W({...M,focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"refresh-checks",actionMessage:V})}async function fe(){if(O||s.mode!=="main"||!s.shell.selectedTaskId)return;let $=s.shell.selectedTaskId,L=!!(h.tasks.find(H=>H.id===$)??null)?.pullRequest.number;O=!0;try{let{disposition:H,task:V}=await yr(r,$);if(s.mode!=="main"||s.shell.selectedTaskId!==$)return;h=await Ct(t,s.shell,a),s={mode:"main",shell:W({...s.shell,actionMessage:H==="discovered"&&!L?`Discovered PR: #${V.pullRequest.number} ${V.pullRequest.url??""}`:s.shell.actionMessage})},C()}catch{}finally{O=!1}}async function He($){let M=W($);if(!M.selectedTaskId)throw new Error("Select a task before merging a PR.");let L=await yt(r,M.selectedTaskId,{preserveWorktree:!0});return await B(),W({...M,focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"merge",actionMessage:`Merged PR #${L.prNumber}; worktree preserved`})}async function Te($){let M=W($);if(!M.selectedTaskId)throw new Error("Select a task before closing it.");let L=await Se(r,M.selectedTaskId),H=await Pi(r,M.selectedTaskId);for(let V of L.ptyTabs)j.disposeSession(V.id);return await B(),W({...M,selectedActionId:"close-task",actionMessage:H.cleanup.preservedWorktree?`Archived task ${H.id}; worktree preserved`:`Archived task ${H.id}`})}async function Ae($){let M=$.ptyTabs.find(V=>V.kind==="agent")??null;if(M){let V={...$,selectedPtyTabId:M.id};return await P(async()=>{let re=await Se(r,$.id),be=re.ptyTabs.find(Ce=>Ce.kind==="agent")??null;be&&await te(r,{...re,selectedPtyTabId:be.id})}),V}let L=Gn($,"agent",void 0,i),H={...$,ptyTabs:[...$.ptyTabs,L],selectedPtyTabId:L.id};return await P(async()=>{let V=await Se(r,$.id),re=V.ptyTabs.find(be=>be.kind==="agent")??null;if(re){await te(r,{...V,selectedPtyTabId:re.id});return}await te(r,{...V,ptyTabs:[...V.ptyTabs,L],selectedPtyTabId:L.id})}),H}C=()=>{Ve();let $=ut(_.width,_.height),M=s.mode==="main"?On($,on(W(s.shell),h),{centerOnly:s.shell.centerZoomed}):s.variant==="boot"?Dn($,{menuIndex:s.menuIndex,optionsMessage:s.optionsMessage}):s.variant==="pause"?Ln($,{menuIndex:s.menuIndex,optionsMessage:s.optionsMessage}):s.variant==="options"?Zr($,{menuIndex:s.menuIndex,optionsMenuItems:rs}):s.variant==="runners"?Zr($,{menuIndex:Rt(s).menuIndex,optionsMenuItems:ss(i,Rt(s)),optionsMessage:Kn(Rt(s)),optionsSubtitle:"Runners"}):Mn($);_.moveTo(1,1),A&&(_.eraseDisplayBelow(),A=!1),_.noFormat(M)};function Ve(){let $=s.mode==="main"&&s.shell.inputMode==="terminal"?"terminal":"control";$!==D&&(D=$,_.grabInput($==="terminal"?{mouse:"button"}:!0))}let Jn=()=>{process.stdout.off("resize",us),_.removeListener("key",cs),_.removeListener("unknown",ls),_.removeListener("mouse",ds),v&&(clearTimeout(v),v=null),I&&(clearTimeout(I),I=null),E&&(clearTimeout(E),E=null),N&&(clearInterval(N),N=null),j.disposeAll(),_.grabInput(!1),_.hideCursor(!1),_.fullscreen(!1)},ir=$=>{Jn(),g($)},Zn=async()=>{if(s.mode!=="main"||f)return;let $=s.shell,M=$.taskPromptInput?.trim()??"";if(!$.selectedRepoId){s={mode:"main",shell:W({...$,taskPromptError:"Select a repo first."})},C();return}if(M.length===0){s={mode:"main",shell:W({...$,taskPromptError:"Task prompt cannot be empty."})},C();return}f=!0,s={mode:"main",shell:W({...$,actionMessage:`Creating ${$.selectedRunner} task in ${$.selectedRepoId}...`})},C();let L=null;try{L=await xu(r,$.selectedRepoId,M,$.selectedRunner),await B();let H=W({...s.shell,selectedRepoId:L.repoId,selectedTaskId:L.id,selectedPtyTabId:L.selectedPtyTabId,selectedLeftItemId:`task:${L.id}`,activeTab:L.selectedPtyTabId??"agent",inputMode:"terminal",taskPromptInput:null,taskPromptError:null,actionMessage:null}),V=await j.ensureSession(L.id,H.selectedPtyTabId??Qn(L,"agent"),ns(ut(_.width,_.height)));d=os(H.selectedPtyTabId),s={mode:"main",shell:vt(H,V)},c(s.shell)}catch(H){H instanceof rr&&(L=H.task);let V=H instanceof Error?H.message:"Failed to create task.";L&&(await te(r,{...L,status:"draft",runnerSession:{...L.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:V}).catch(()=>{}),await B().catch(()=>{})),s={mode:"main",shell:W({...s.shell,inputMode:"control",selectedTaskId:L?.id??s.shell.selectedTaskId,selectedPtyTabId:L?.selectedPtyTabId??s.shell.selectedPtyTabId,selectedLeftItemId:L?`task:${L.id}`:s.shell.selectedLeftItemId,activeTab:L?.selectedPtyTabId??s.shell.activeTab,taskPromptInput:L?null:"",taskPromptError:V,actionMessage:null})}}finally{f=!1,C()}},eo=$=>{if(s.mode!=="main")return;let M=s.shell;if(M.taskPromptInput!==null){if($==="ESCAPE"){s={mode:"main",shell:W({...M,taskPromptInput:null,taskPromptError:null,actionMessage:null})},C();return}if(Ke($)){Zn();return}if($==="BACKSPACE"){s={mode:"main",shell:W({...M,taskPromptInput:M.taskPromptInput.slice(0,-1),taskPromptError:null})},C();return}if($==="CTRL_R"){s={mode:"main",shell:W({...M,selectedRunner:Fr(M.selectedRunner,a),taskPromptError:null})},C();return}Xi($)&&(s={mode:"main",shell:W({...M,taskPromptInput:`${M.taskPromptInput}${$}`,taskPromptError:null})},C())}},to=$=>{if(s.mode!=="main")return;let M=s.shell.workspaceBrowser;if(M){if($==="ESCAPE"){s={mode:"main",shell:W({...s.shell,workspaceBrowser:null,actionMessage:null})},C();return}if($==="UP"||$==="k"){s={mode:"main",shell:W({...s.shell,workspaceBrowser:{...M,selectedIndex:Math.max(0,M.selectedIndex-1),error:null}})},C();return}if($==="DOWN"||$==="j"){let L=Math.max(0,M.entries.length-1);s={mode:"main",shell:W({...s.shell,workspaceBrowser:{...M,selectedIndex:Math.min(L,M.selectedIndex+1),error:null}})},C();return}if($==="LEFT"||$==="h"){K(as.dirname(M.cwd)).catch(L=>{let H=L instanceof Error?L.message:"Failed to open parent directory.";s={mode:"main",shell:W({...s.shell,workspaceBrowser:{...M,error:H}})},C()});return}if($==="RIGHT"||$==="l"||Ke($)){let L=M.entries[M.selectedIndex]??null;if(!L)return;if(L.kind==="directory"||($==="RIGHT"||$==="l")&&L.kind==="repo"){K(L.path).catch(H=>{let V=H instanceof Error?H.message:"Failed to open directory.";s={mode:"main",shell:W({...s.shell,workspaceBrowser:{...M,error:V}})},C()});return}$t(r,L.path).then(async H=>{await B(),s={mode:"main",shell:W({...s.shell,workspaceBrowser:null,selectedLeftItemId:`repo:${H.repo.id}`,selectedRepoId:H.repo.id,selectedTaskId:null,selectedPtyTabId:null,actionMessage:`Registered workspace: ${H.repo.name}`})},c(s.shell),C()}).catch(H=>{let V=H instanceof Error?H.message:"Failed to add workspace.";s={mode:"main",shell:W({...s.shell,workspaceBrowser:{...M,error:V}})},C()})}}},cs=$=>{let M=typeof $=="string"?$:"";if(s.mode==="main"&&s.shell.taskPromptInput!==null){eo(M);return}if(s.mode==="main"&&s.shell.workspaceBrowser!==null){to(M);return}if(s.mode==="main"){let L=Vi(s.shell,M,k(s.shell));if(L.exit){ir(0);return}if(L.detachTerminal){j.detach(),s={mode:"main",shell:W(L.state)},c(s.shell),C();return}if(s.shell.inputMode==="terminal"){if(L.changed){s={mode:"main",shell:W(L.state)},c(s.shell),C();return}if(d&&Ke(M)){d=!1;return}d&&(d=!1),l=Au(M)?{key:M,at:Date.now()}:null;let H=Du(M,s.shell.terminal.scrolledBack??!1);if(H!==0){nr(H);return}j.writeKey(M);return}if(M==="CTRL_C"){ir(0);return}if(M==="?"&&s.shell.inputMode==="control"){s={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:s.shell},A=!0,C();return}if(L.pause){s={mode:"overlay",variant:"pause",menuIndex:0,optionsMessage:null,shell:W(L.state)},A=!0,C();return}if(L.beginTaskPrompt){s={mode:"main",shell:W(L.state)},c(s.shell),C();return}if(L.openWorkspaceBrowser){K(t).catch(H=>{let V=H instanceof Error?H.message:"Failed to browse workspaces.";s={mode:"main",shell:W({...L.state,workspaceBrowser:{cwd:t,entries:[],selectedIndex:0,error:V}})},C()});return}if(L.createPtyTab){Q(L.state,L.createPtyTabKind,L.createPtyTabRunner).then(H=>{ee(H)}).catch(H=>{let V=H instanceof Error?H.message:"Failed to create tab.";s={mode:"main",shell:W({...L.state,actionMessage:V})},C()});return}if(L.closePtyTab){Y(L.state).then(H=>{s={mode:"main",shell:H},c(s.shell),C()}).catch(H=>{let V=H instanceof Error?H.message:"Failed to close tab.";s={mode:"main",shell:W({...L.state,actionMessage:V})},C()});return}if(L.syncPullRequest){Z(L.state).then(H=>{s={mode:"main",shell:H},c(s.shell),C()}).catch(H=>{let V=H instanceof Error?H.message:"Failed to create or sync PR.";s={mode:"main",shell:W({...L.state,actionMessage:V})},C()});return}if(L.refreshPullRequestChecks){he(L.state).then(H=>{s={mode:"main",shell:H},c(s.shell),C()}).catch(H=>{let V=H instanceof Error?H.message:"Failed to refresh PR checks.";s={mode:"main",shell:W({...L.state,actionMessage:V})},C()});return}if(L.mergeTask){He(L.state).then(H=>{s={mode:"main",shell:H},c(s.shell),C()}).catch(H=>{let V=H instanceof Error?H.message:"Failed to merge PR.";s={mode:"main",shell:W({...L.state,actionMessage:V})},C()});return}if(L.closeTask){Te(L.state).then(H=>{s={mode:"main",shell:H},c(s.shell),C()}).catch(H=>{let V=H instanceof Error?H.message:"Failed to close task.";s={mode:"main",shell:W({...L.state,actionMessage:V})},C()});return}if(L.attachTerminal){ee(L.state);return}if(L.refreshInspection){U(L.state).catch(H=>{let V=H instanceof Error?H.message:"Failed to refresh inspection.";s={mode:"main",shell:W({...L.state,actionMessage:V})},C()});return}L.changed&&(s={mode:"main",shell:W(L.state)},F(s.shell).catch(()=>{}),c(s.shell),C());return}if(s.variant==="help"){s.viaOptions&&s.parentVariant?s={mode:"overlay",variant:"options",menuIndex:1,optionsMessage:null,shell:s.shell,parentVariant:s.parentVariant}:s.parentVariant?s={mode:"overlay",variant:s.parentVariant,menuIndex:1,optionsMessage:null,shell:s.shell}:s={mode:"main",shell:W(s.shell)},A=!0,C();return}if(s.variant==="options"){ro(M);return}if(s.variant==="runners"){so(M);return}if(s.optionsMessage){(M==="ESCAPE"||Ke(M))&&(s={...s,optionsMessage:null},C());return}if(M==="UP"||M==="k"){s={...s,menuIndex:Math.max(0,s.menuIndex-1)},C();return}if(M==="DOWN"||M==="j"){s={...s,menuIndex:Math.min(2,s.menuIndex+1)},C();return}if(M==="ESCAPE"){s.variant==="pause"&&(s={mode:"main",shell:W(s.shell)},A=!0,C());return}if(Ke(M)){if(s.menuIndex===0){s={mode:"main",shell:W({...s.shell,inputMode:"control"})},A=!0,C(),b();return}if(s.menuIndex===1){let L=s.variant==="boot"||s.variant==="pause"?s.variant:void 0;s={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:s.shell,...L!==void 0?{parentVariant:L}:{}},A=!0,C();return}ir(0)}};function ro($){if(s.mode!=="overlay"||s.variant!=="options")return;let M=zn(s.menuIndex,$);if(M.kind!=="noop"){if(M.kind==="render"){s={...s,menuIndex:M.menuIndex},C();return}if(M.kind==="back"){s.parentVariant&&(s={mode:"overlay",variant:s.parentVariant,menuIndex:1,optionsMessage:null,shell:s.shell},A=!0,C());return}if(M.kind==="help"){let L=s.parentVariant;s={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:s.shell,viaOptions:!0,...L!==void 0?{parentVariant:L}:{}},A=!0,C();return}if(M.kind==="runners"){let L=s.parentVariant;s={mode:"overlay",variant:"runners",menuIndex:0,optionsMessage:null,shell:s.shell,...L!==void 0?{parentVariant:L}:{}},A=!0,C()}}}function so($){if(s.mode!=="overlay"||s.variant!=="runners")return;let M=Vn(Rt(s),i,$,a);if(M.kind!=="noop"){if(M.kind==="back"){let L=s.parentVariant;s={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:s.shell,...L!==void 0?{parentVariant:L}:{}},A=!0,C();return}if(M.kind==="render"){s={...s,runnerOptions:M.state},C();return}R(M.config).then(()=>{s.mode!=="overlay"||s.variant!=="runners"||(s={...s,runnerOptions:M.state},C())}).catch(L=>{if(s.mode!=="overlay"||s.variant!=="runners")return;let H=L instanceof Error?L.message:"Failed to save runner option.";s={...s,runnerOptions:{...Rt(s),message:H}},C()})}}let ls=$=>{let M=Eu($);if(s.mode!=="main"||s.shell.inputMode!=="terminal"||M.length===0)return;if(M.includes("")){j.detach(),d=!1,l=null,s={mode:"main",shell:W({...s.shell,inputMode:"control",actionMessage:null})},c(s.shell),C();return}let L=Lu(M);if(L!==0){nr(L);return}if(d&&M!=="\r"&&M!==`
98
+ `&&M!==`\r
99
+ `&&(d=!1),Mu(d,l,M)){d=!1;return}j.write(M)},ds=$=>{if(s.mode!=="main")return;if(s.shell.inputMode==="control"){no(Xn($));return}let M=Xn($);M!==0&&nr(M)};function nr($){u+=$,!v&&(v=setTimeout(()=>{v=null;let M=u;u=0,M!==0&&(io(M),C())},16))}function io($){j.scrollViewport($),s={mode:"main",shell:z(s.shell)}}function no($){$!==0&&(m+=$,!I&&(I=setTimeout(()=>{I=null;let M=m;if(m=0,M===0||s.mode!=="main"||s.shell.inputMode!=="control")return;let L=qe(s.shell,M,k(s.shell));if(L.changed){if(L.refreshInspection){U(L.state).catch(H=>{let V=H instanceof Error?H.message:"Failed to refresh inspection.";s={mode:"main",shell:W({...L.state,actionMessage:V})},C()});return}s={mode:"main",shell:W(L.state)},c(s.shell),C()}},16)))}let us=()=>{A=!0,s.mode==="main"&&s.shell.inputMode==="terminal"&&(j.resize(ns(ut(_.width,_.height))),s={mode:"main",shell:z(s.shell)}),C()};process.stdout.on("resize",us),_.grabInput(!0),D="control",_.hideCursor(!0),_.fullscreen(!0),_.on("key",cs),_.on("unknown",ls),_.on("mouse",ds),N=setInterval(()=>{fe()},(i.github?.watchIntervalSeconds??10)*1e3),C()})}async function Ct(e,t,r){let i=$e(e),[a,y]=await Promise.all([gt(i),et(i)]),T=vu(y.tasks,t),n=t?{selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath}:{},h=T?await vi(T,n):null;return{workspaceRoot:e,repos:a,tasks:y.tasks,inspection:h,...r?{enabledRunnerIds:r}:{}}}function vu(e,t){return t?.selectedTaskId?e.find(r=>r.id===t.selectedTaskId)??null:null}function ku(e,t){return Ut(e,t)}function Tu(e,t){let r=new Set(t);return e.filter(i=>{let a=i.path.split("/");for(let y=1;y<a.length;y+=1)if(r.has(a.slice(0,y).join("/")))return!1;return!0})}function Cu(e){let t=[];for(let r of e.repos){t.push(`repo:${r.id}`);for(let i of e.tasks.filter(a=>a.repoId===r.id))t.push(`task:${i.id}`);t.push(`new-task:${r.id}`)}return t.push("new-workspace"),t}function Ru(e,t,r){let i=e.tasks.find(y=>y.ptyTabs.some(T=>T.id===t))??null,a=i?.ptyTabs.find(y=>y.id===t)??null;return{cwd:i?.worktreePath??r,command:a?.kind==="agent"?Pu(a):[]}}function Pu(e){return e.command.length>0?e.command:["codex"]}function Rt(e){return e.runnerOptions??{menuIndex:e.menuIndex,message:e.optionsMessage}}function Iu(e,t,r){return e.ptyTabs.find(i=>i.id===t)?.kind??r}function Gn(e,t,r,i={}){let a=r??e.runner,y=pe(a),T=t==="agent"?y.defaultAgentTitle:"Terminal",n=t==="agent"&&r&&r!==e.runner?`${e.id}:${r}`:`${e.id}:${t}`,h=new Set(e.ptyTabs.map(c=>c.id)),p=1,S=n;for(;h.has(S);)p+=1,S=`${n}-${p}`;let o=new Date().toISOString(),w=r&&r!==e.runner?r:void 0;return{id:S,kind:t,...w?{runner:w}:{},title:p===1?T:`${T} ${p}`,command:t==="agent"?ge(a,void 0,i):[],createdAt:o,updatedAt:o}}async function xu(e,t,r,i){let a=await _e(e);Pt(i,a);let y=await Bt(e,t,r,{runner:i,config:a});try{let h=Qe();await J(Je(ar(i,a).executable,{cwd:y.repoRoot,env:h}),["--help"],{cwd:y.repoRoot,env:h})}catch(h){let p=h instanceof Error?h.message:"Failed to start runner.",S={...y.task,status:"draft",runnerSession:{...y.task.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:p};throw await te(e,S),new rr(p,S)}let T=Qn(y.task,"agent"),n={...y.task,status:"running",selectedPtyTabId:T,runnerSession:{...y.task.runnerSession,startedAt:new Date().toISOString(),lastKnownState:"running"}};return await te(e,n),await ve({uiStateFile:e.uiStateFile},{...await Pe({uiStateFile:e.uiStateFile})??Le(),version:1,selectedRepoId:n.repoId,selectedWorkspaceId:n.workspaceId,selectedTaskId:n.id,selectedPtyTabId:n.selectedPtyTabId,inputMode:"control",focusedRegion:"center",activeTab:n.selectedPtyTabId??"agent",selectedActionId:"commit",updatedAt:new Date().toISOString()}),n}var rr=class extends Error{task;constructor(t,r){super(t),this.name="InteractiveTaskStartupError",this.task=r}};function Qn(e,t){let r=e.ptyTabs.find(i=>i.kind===t);if(!r)throw new Error(`Task ${e.id} is missing its ${t} PTY tab.`);return r.id}function ns(e){return{columns:Math.max(20,e.width-Ee.leftWidth-Ee.rightWidth-Ee.dividerWidth-Zt*2),rows:Math.max(5,e.height-Ee.topRailHeight-4)}}function Eu(e){return typeof e=="string"?e:Buffer.isBuffer(e)?e.toString("utf8"):""}function Au(e){return e.length===1||Ke(e)||e==="BACKSPACE"||e==="TAB"}function os(e){return typeof e=="string"&&/:agent(?:-\d+)?$/.test(e)}function Du(e,t){return e==="UP"&&t?-3:e==="DOWN"&&t?3:e==="PAGE_UP"?-5:e==="PAGE_DOWN"?5:e==="MOUSE_WHEEL_UP"?-3:e==="MOUSE_WHEEL_DOWN"?3:0}function Xn(e){return e==="MOUSE_WHEEL_UP"?-3:e==="MOUSE_WHEEL_DOWN"?3:0}function Lu(e){let t=new RegExp("\x1B\\[<(\\d+);\\d+;\\d+[mM]").exec(e);if(!t?.[1])return 0;let r=Number.parseInt(t[1],10);return r===64?-3:r===65?3:0}function Mu(e,t,r){return r.length===0?!1:e&&(r==="\r"||r===`
100
+ `||r===`\r
101
+ `)?!0:!t||Date.now()-t.at>=30?!1:r===t.key?!0:r.length<=4&&r.split("").every(i=>i===t.key)}async function Ou(e){let t=await _u(e,{withFileTypes:!0}),r=[];for(let i of t){if(!i.isDirectory())continue;let a=as.join(e,i.name);r.push({name:i.name,path:a,kind:await Bu(a)?"repo":"directory"})}return r.sort((i,a)=>i.kind!==a.kind?i.kind==="repo"?-1:1:i.name.localeCompare(a.name)),{cwd:e,entries:r,selectedIndex:0,error:null}}async function Bu(e){let t=as.join(e,".git");return await wu(t).catch(()=>null)!==null}function sr(){return process.cwd()}async function Fu(){try{if(process.argv[2]==="__craig-daemon"){let n=process.argv[3]??sr(),h=$e(n);return await dt(n),await vn(h),0}if(process.argv[2]==="__craig-daemon-shutdown"){let n=process.argv[3]??sr(),h=$e(n);return await dt(n),await kn(h),0}let e=ps(process.argv.slice(2)),t=sr(),r=$e(t),i=await dt(t),a={paths:r};if(e.mode==="interactive")return await Yn({uiStateFile:r.uiStateFile,workspaceRoot:r.workspaceRoot});if(!e.command)throw new Error("Command mode requires a command.");let y=await wi(e.command,a),T=bi(y);return T.length>0&&process.stdout.write(`${T}
102
+ `),0}catch(e){let t=e instanceof Error?e.message:"Unknown Craig error";return process.stderr.write(`${t}
103
+ `),1}}var $u=await Fu();process.exit($u);
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "craig-cli",
3
+ "version": "0.2.0",
4
+ "description": "Craig local control plane CLI",
5
+ "type": "module",
6
+ "bin": {
7
+ "craig": "dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist/cli.js",
11
+ "README.md",
12
+ "package.json"
13
+ ],
14
+ "engines": {
15
+ "node": ">=22.0.0"
16
+ },
17
+ "dependencies": {
18
+ "node-pty": "^0.10.1",
19
+ "terminal-kit": "^3.1.2"
20
+ }
21
+ }