craig-cli 0.4.6 → 0.4.8

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 (2) hide show
  1. package/dist/cli.js +53 -53
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- var ca=Object.create;var Dr=Object.defineProperty;var la=Object.getOwnPropertyDescriptor;var da=Object.getOwnPropertyNames;var ua=Object.getPrototypeOf,ha=Object.prototype.hasOwnProperty;var $e=(e,t)=>()=>(e&&(t=e(e=0)),t);var fa=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),pa=(e,t)=>{for(var r in t)Dr(e,r,{get:t[r],enumerable:!0})},ga=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of da(t))!ha.call(e,o)&&o!==r&&Dr(e,o,{get:()=>t[o],enumerable:!(s=la(t,o))||s.enumerable});return e};var ma=(e,t,r)=>(r=e!=null?ca(ua(e)):{},ga(t||!e||!e.__esModule?Dr(r,"default",{value:e,enumerable:!0}):r,e));function be(e){return _a[e]}function Lr(e,t={}){let r=be(e),s=t.runners?.[e]?.path?.trim();return{...r,executable:s&&s.length>0?s:r.executable}}function mt(e={}){return ce.filter(t=>e.runners?.[t]?.enabled!==!1)}function it(e={}){let t=mt(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 zt(e,t={}){if(t.runners?.[e]?.enabled===!1)throw new Error(`Runner "${e}" is disabled in .craig/config.json.`)}function _t(e){return ce.includes(e)}function Gs(e){if(!e||e.length===0)return"codex";if(!_t(e))throw new Error(`Unsupported runner "${e}". Expected one of: ${ce.join(", ")}.`);return e}function Se(e){return be(e).displayName}function me(e,t,r={}){let s=[Lr(e,r).executable];return t&&t.length>0&&s.push(t),s}var ce,_a,Ae=$e(()=>{"use strict";ce=["codex","cursor","claude"],_a={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"}}});import{randomUUID as Ta}from"node:crypto";import{open as Ra,readFile as Hh,rename as Ca,rm as Pa}from"node:fs/promises";import Mr from"node:path";async function le(e,t){let r=Mr.dirname(e),s=Mr.join(r,`.${Mr.basename(e)}.${process.pid}.${Date.now()}.${Ta()}.tmp`),o=await Ra(s,"w");try{let m=`${JSON.stringify(t,null,2)}
3
- `;await o.writeFile(m,"utf8"),await o.sync(),await o.close(),await Ca(s,e)}catch(m){throw await o.close().catch(()=>{}),await Pa(s,{force:!0}).catch(()=>{}),m}}var Fe=$e(()=>{"use strict"});import{readFile as Ma}from"node:fs/promises";async function Re(e){let t=await Ma(e.indexFile,"utf8"),r=JSON.parse(t);return Br(r,e.workspaceRoot,e.indexFile)}async function ot(e,t){let r={...t,workspaceRoot:e.workspaceRoot,updatedAt:new Date().toISOString()};await le(e.indexFile,r)}function Br(e,t,r){if(!Oa(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 Oa(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"}var at=$e(()=>{"use strict";Fe()});import{readFile as Ba}from"node:fs/promises";async function Ce(e,t){let r=await Ba($r(e,t),"utf8"),s=JSON.parse(r);return $a(s,$r(e,t))}async function re(e,t){let r={...t,updatedAt:new Date().toISOString()};await le($r(e,t.id),r)}async function Fr(e,t){let r=await Re(e);r.taskIds.includes(t)||await ot(e,{...r,taskIds:[...r.taskIds,t]})}function $r(e,t){return`${e.tasksDir}/${t}.json`}function $a(e,t){let r=Fa(e);if(!Na(r))throw new Error(`Craig task record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function Fa(e){if(typeof e!="object"||e===null)return e;let t=e;return{...t,runner:Wr(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:Ua(t),bundlePath:typeof t.bundlePath=="string"||t.bundlePath===null?t.bundlePath:null,selectedRepoTargetId:typeof t.selectedRepoTargetId=="string"||t.selectedRepoTargetId===null?t.selectedRepoTargetId:null,repoTargets:ja(t.repoTargets),runnerSession:t.runnerSession??Wa(t),checks:Ga(t),lastCommit:t.lastCommit??null,pullRequest:Xa(t),artifacts:Ja(t),cleanup:Qa(t)}}function Wa(e){if(typeof e.title!="string")return null;let t=Wr(e.runner);return{command:me(t,e.title),pid:null,startedAt:null,lastKnownState:e.status==="running"?"running":"starting",exitCode:null,exitedAt:null}}function Na(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"||t.type==="project")&&typeof t.status=="string"&&_t(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"&&Zs(t.ptyTabs)&&(t.bundlePath===void 0||t.bundlePath===null||typeof t.bundlePath=="string")&&(t.selectedRepoTargetId===void 0||t.selectedRepoTargetId===null||typeof t.selectedRepoTargetId=="string")&&(t.repoTargets===void 0||Ha(t.repoTargets))&&Ka(t.runnerSession)&&za(t.prompt)&&ei(t.checks)&&ti(t.lastCommit)&&ri(t.pullRequest)&&Va(t.artifacts)&&si(t.cleanup)&&(t.lastFailureReason===void 0||t.lastFailureReason===null||typeof t.lastFailureReason=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"}function ja(e){if(Array.isArray(e))return e.filter(Qs)}function Ha(e){return Array.isArray(e)&&e.every(Qs)}function Qs(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.repoId=="string"&&typeof t.branch=="string"&&typeof t.repoRoot=="string"&&typeof t.worktreePath=="string"&&(t.status==="ready"||t.status==="unavailable"||t.status==="merged"||t.status==="closed")&&(typeof t.failureReason=="string"||t.failureReason===null)&&ei(t.checks)&&ti(t.lastCommit)&&ri(t.pullRequest)&&si(t.cleanup)}function Ua(e){if(Zs(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 qa(e.id,e.title,t,Wr(e.runner))}function qa(e,t,r,s){let o=be(s);return[{id:`${e}:agent`,kind:"agent",title:o.defaultAgentTitle,command:me(s),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function Wr(e){return e&&_t(e)?e:"codex"}function Zs(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 Ka(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 za(e){return typeof e=="object"&&e!==null&&(e.source==="inline"||e.source==="file")&&typeof e.value=="string"}function ei(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 ti(e){return e===null||typeof e=="object"&&e!==null&&typeof e.sha=="string"&&typeof e.message=="string"&&typeof e.committedAt=="string"}function ri(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 Va(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 si(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 Ga(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 Xa(e){let t=e.pullRequest;return t?{...t,mergeStateStatus:t.mergeStateStatus??null,requiredChecks:Ya(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 Ya(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 Ja(e){let t=e.artifacts;return t?{...t,checkSummaryPath:t.checkSummaryPath??null}:{logPath:null,checkSummaryPath:null,prDraftPath:null,prStatusPath:null}}function Qa(e){return e.cleanup??{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}var _e=$e(()=>{"use strict";Fe();at();Ae()});import{readFile as Za}from"node:fs/promises";async function De(e){try{let t=await Za(e.uiStateFile,"utf8"),r=JSON.parse(t);return ec(r,e.uiStateFile)}catch(t){if(rc(t))return null;throw t}}async function Pe(e,t){await le(e.uiStateFile,{...t,updatedAt:new Date().toISOString()})}function We(){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 ec(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")||!wt(e,"inputMode")||!wt(e,"focusedRegion")||!wt(e,"activeTab")||!wt(e,"inspectorSection")||!wt(e,"inspectionMode")||!Vt(e,"openInspectionKind")||!Vt(e,"selectedFileTreePath")||!Vt(e,"selectedFilePath")||!Vt(e,"selectedDiffPath")||!tc(e,"collapsedFileTreePaths")||!wt(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 wt(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||typeof e[t]=="string")}function Vt(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||e[t]===null||typeof e[t]=="string")}function tc(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||Array.isArray(e[t])&&e[t].every(r=>typeof r=="string"))}function rc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var kt=$e(()=>{"use strict";Fe()});import{execFile as sc}from"node:child_process";import{promisify as ic}from"node:util";async function J(e,t,r={}){try{let s=await ii(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr}}catch(s){if(ni(s)){let o=s.stderr?.trim()||s.stdout?.trim()||s.message;throw new Error(`${e} ${t.join(" ")} failed: ${o}`)}throw s}}async function ae(e,t,r={}){try{let s=await ii(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr,exitCode:0}}catch(s){if(ni(s))return{stdout:s.stdout??"",stderr:s.stderr??"",exitCode:typeof s.code=="number"?s.code:null};throw s}}function ni(e){return e instanceof Error}var ii,Ie=$e(()=>{"use strict";ii=ic(sc)});import{readFile as yc,readdir as vc,rm as Sc}from"node:fs/promises";import mi from"node:path";async function Le(e,t){let r=await yc(Yt(e,t),"utf8"),s=JSON.parse(r);return Tc(s,Yt(e,t))}async function Jt(e,t){await le(Yt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function dt(e){let t=await vc(e.reposDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Le(e,mi.basename(s.name,".json"))))).sort((s,o)=>s.name.localeCompare(o.name)||s.id.localeCompare(o.id))}async function _i(e,t){await Sc(Yt(e,t),{force:!0})}function Yt(e,t){return mi.join(e.reposDir,`${t}.json`)}function Tc(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}var ut=$e(()=>{"use strict";Fe()});import{readFile as Rc,readdir as Cc,rm as Pc}from"node:fs/promises";import wi from"node:path";async function Ct(e,t){let r=await Rc(Qt(e,t),"utf8"),s=JSON.parse(r);return Ic(s,Qt(e,t))}async function bt(e,t){await le(Qt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function Me(e){let t=await Cc(e.workspacesDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Ct(e,wi.basename(s.name,".json"))))).sort((s,o)=>s.id.localeCompare(o.id))}async function ki(e,t){await Pc(Qt(e,t),{force:!0})}function Qt(e,t){return wi.join(e.workspacesDir,`${t}.json`)}function Ic(e,t){let r=xc(e);if(typeof r!="object"||r===null||typeof r.id!="string"||r.kind!=="repo"&&r.kind!=="project"||typeof r.name!="string"||typeof r.rootPath!="string"||typeof r.primaryRepoId!="string"||typeof r.branch!="string"||r.status!=="active"&&r.status!=="archived"||!Array.isArray(r.linkedRepoIds)||!(r.linkedRepoIds??[]).every(s=>typeof s=="string")||!(r.repoId===void 0||typeof r.repoId=="string")||!Array.isArray(r.discoveredRepoIds)||!(r.discoveredRepoIds??[]).every(s=>typeof s=="string")||!(r.archivedAt===null||typeof r.archivedAt=="string")||typeof r.createdAt!="string"||typeof r.updatedAt!="string")throw new Error(`Craig workspace record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function xc(e){if(typeof e!="object"||e===null)return e;let t=e,r=t.repoId??t.primaryRepoId;return{...t,kind:t.kind??"repo",name:t.name??r??t.id,rootPath:t.rootPath??"",primaryRepoId:t.primaryRepoId??r??"",repoId:t.kind==="project"?t.repoId:r,discoveredRepoIds:Array.isArray(t.discoveredRepoIds)?t.discoveredRepoIds.filter(s=>typeof s=="string"):t.kind==="project"?[]:r?[r]:[],linkedRepoIds:Array.isArray(t.linkedRepoIds)?t.linkedRepoIds.filter(s=>typeof s=="string"):[]}}var Pt=$e(()=>{"use strict";Fe()});async function Ne(e,t){let r=await Re(e),s=[],o=[];await Promise.all(r.taskIds.map(async n=>{try{s.push(await Ce(e,n))}catch(l){if(Bc(l)){o.push(n);return}throw l}}));let y=(t?.includeClosed?s:s.filter(n=>n.status!=="closed")).filter(n=>!(t?.workspaceId&&n.workspaceId!==t.workspaceId||t?.repoId&&n.repoId!==t.repoId&&!(n.repoTargets??[]).some(l=>l.repoId===t.repoId)));return y.sort((n,l)=>n.id.localeCompare(l.id)),o.sort(),{kind:"listTasks",tasks:y,missingTaskIds:o,repoId:t?.repoId??null}}function Bc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var At=$e(()=>{"use strict";at();_e()});var nn={};pa(nn,{addWorkspace:()=>Ot,archiveWorkspace:()=>Bt,listWorkspaces:()=>os,removeWorkspace:()=>$t,removeWorkspaceRecord:()=>nr,restoreWorkspace:()=>as});import{readdir as ol,realpath as Ji,stat as al}from"node:fs/promises";import Qe from"node:path";async function Ot(e,t){let r=Qe.resolve(e.workspaceRoot,t);if(!(await al(r).catch(()=>null))?.isDirectory())throw new Error(`Workspace path does not exist: ${r}`);return await tn(r)?cl(e,r):ll(e,r)}async function os(e,t){return{kind:"listWorkspaces",workspaces:(await Me(e)).filter(s=>s.status===(t.archived?"archived":"active")),archivedOnly:t.archived}}async function Bt(e,t){let s={...await Ct(e,t),status:"archived",archivedAt:new Date().toISOString()};return await bt(e,s),await sn(e,t),{kind:"archiveWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function as(e,t){let s={...await Ct(e,t),status:"active",archivedAt:null};await bt(e,s);let o=await De({uiStateFile:e.uiStateFile})??null;return await Pe({uiStateFile:e.uiStateFile},{...o??We(),selectedWorkspaceId:s.id,selectedRepoId:s.kind==="project"?s.discoveredRepoIds?.[0]??null:s.primaryRepoId,selectedTaskId:null}),{kind:"restoreWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function $t(e,t){let r=await Ct(e,t),s=await Ne(e,{workspaceId:t,includeClosed:!0});if(r.status==="active")throw new Error(`Cannot remove workspace ${t} while it is active. Archive it first.`);if(s.tasks.length>0)throw new Error(`Cannot remove workspace ${t} while task records still reference it.`);return await nr(e,t),await sn(e,t),{kind:"removeWorkspace",workspaceId:r.id,rootPath:r.rootPath??""}}async function cl(e,t){let r=await rn(t),s=await dt(e),o=s.find(a=>a.rootPath===t)??null,m=o??Qi(s,t,r),y=`workspace_${m.id}`,l=(await Me(e)).find(a=>a.id===y)??null,f=new Date().toISOString(),k=l??{id:y,kind:"repo",name:m.name,rootPath:t,primaryRepoId:m.id,repoId:m.id,discoveredRepoIds:[m.id],branch:r,status:"active",linkedRepoIds:[],archivedAt:null,createdAt:f,updatedAt:f};return o||await Jt(e,m),l||await bt(e,k),await Zi(e,{repoIds:[m.id],workspaceIds:[k.id]}),await en(e,k,m.id),{kind:"createWorkspace",workspace:k,repos:[m],created:!l}}async function ll(e,t){let r=await dl(e,t);if(r.length===0)throw new Error(`Workspace path does not contain direct child Git repos: ${t}`);let s=await Me(e),o=hl(s,Qe.basename(t)),m=s.find(f=>f.kind==="project"&&f.rootPath===t)??null,y=new Date().toISOString(),n=r.map(f=>f.id),l=m?{...m,discoveredRepoIds:n,primaryRepoId:n[0]??m.primaryRepoId,status:"active",archivedAt:null}:{id:o,kind:"project",name:Qe.basename(t),rootPath:t,primaryRepoId:n[0]??"",discoveredRepoIds:n,branch:"project",status:"active",linkedRepoIds:n,archivedAt:null,createdAt:y,updatedAt:y};return await Promise.all(r.map(f=>Jt(e,f))),await bt(e,l),await Zi(e,{repoIds:n,workspaceIds:[l.id]}),await en(e,l,n[0]??null),{kind:"createWorkspace",workspace:l,repos:r,created:!m}}async function dl(e,t){let r=await ol(t,{withFileTypes:!0}),s=await dt(e),o=[];for(let m of r){if(!m.isDirectory()||m.name.startsWith("."))continue;let y=Qe.join(t,m.name);if(!await tn(y))continue;let n=s.find(l=>l.rootPath===y)??o.find(l=>l.rootPath===y);o.push(n??Qi([...s,...o],y,await rn(y)))}return o.sort((m,y)=>m.name.localeCompare(y.name)||m.id.localeCompare(y.id))}function Qi(e,t,r){let s=new Date().toISOString();return{id:ul(e,Qe.basename(t)),name:Qe.basename(t),rootPath:t,defaultBranch:r,createdAt:s,updatedAt:s}}function ul(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"repo",s=`repo_${r}`,o=2;for(;e.some(m=>m.id===s);)s=`repo_${r}_${o}`,o+=1;return s}function hl(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"workspace",s=`workspace_${r}`,o=2;for(;e.some(m=>m.id===s);)s=`workspace_${r}_${o}`,o+=1;return s}async function Zi(e,t){let r=await Re(e);await ot(e,{...r,repoIds:[...new Set([...r.repoIds,...t.repoIds])],workspaceIds:[...new Set([...r.workspaceIds,...t.workspaceIds])]})}async function en(e,t,r){await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),selectedRepoId:r,selectedWorkspaceId:t.id,selectedTaskId:null})}async function tn(e){try{let r=(await J("git",["rev-parse","--show-toplevel"],{cwd:e})).stdout.trim(),[s,o]=await Promise.all([Ji(r).catch(()=>Qe.resolve(r)),Ji(e).catch(()=>Qe.resolve(e))]);return s===o}catch{return!1}}async function rn(e){let r=(await J("git",["branch","--show-current"],{cwd:e})).stdout.trim();return r.length>0?r:"HEAD"}async function nr(e,t){await ki(e,t);let r=await Re(e);await ot(e,{...r,workspaceIds:r.workspaceIds.filter(s=>s!==t)})}async function sn(e,t){let r=await De({uiStateFile:e.uiStateFile});!r||r.selectedWorkspaceId!==t||await Pe({uiStateFile:e.uiStateFile},{...r,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null})}var Ft=$e(()=>{"use strict";at();ut();Pt();kt();Ie();At()});var ao=fa(oo=>{(()=>{"use strict";var e={5639:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CircularList=void 0;let f=l(7150),k=l(802);class a extends f.Disposable{constructor(c){super(),this._maxLength=c,this.onDeleteEmitter=this._register(new k.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new k.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new k.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 i=c;i<this._length-g;i++)this._array[this._getCyclicIndex(i)]=this._array[this._getCyclicIndex(i+g)];this._length-=g,this.onDeleteEmitter.fire({index:c,amount:g})}for(let i=this._length-1;i>=c;i--)this._array[this._getCyclicIndex(i+_.length)]=this._array[this._getCyclicIndex(i)];for(let i=0;i<_.length;i++)this._array[this._getCyclicIndex(c+i)]=_[i];if(_.length&&this.onInsertEmitter.fire({index:c,amount:_.length}),this._length+_.length>this._maxLength){let i=this._length+_.length-this._maxLength;this._startIndex+=i,this._length=this._maxLength,this.onTrimEmitter.fire(i)}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 p=g-1;p>=0;p--)this.set(c+p+_,this.get(c+p));let i=c+g+_-this._length;if(i>0)for(this._length+=i;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let i=0;i<g;i++)this.set(c+i+_,this.get(c+i))}}_getCyclicIndex(c){return(this._startIndex+c)%this._maxLength}}n.CircularList=a},7453:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.clone=function l(f,k=5){if(typeof f!="object")return f;let a=Array.isArray(f)?[]:{};for(let w in f)a[w]=k<=1?f[w]:f[w]&&l(f[w],k-1);return a}},5777:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CoreTerminal=void 0;let f=l(6501),k=l(6025),a=l(7276),w=l(9640),c=l(56),g=l(4071),_=l(7792),i=l(6415),p=l(5746),h=l(5882),d=l(2486),u=l(3562),b=l(8811),S=l(802),P=l(7150),E=!1;class H extends P.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new S.Emitter),this._onScroll.event((D=>{this._onScrollApi?.fire(D.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(D){for(let x in D)this.optionsService.options[x]=D[x]}constructor(D){super(),this._windowsWrappingHeuristics=this._register(new P.MutableDisposable),this._onBinary=this._register(new S.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new S.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new S.Emitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this._register(new S.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new S.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new S.Emitter),this._instantiationService=new k.InstantiationService,this.optionsService=this._register(new c.OptionsService(D)),this._instantiationService.setService(f.IOptionsService,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(w.BufferService)),this._instantiationService.setService(f.IBufferService,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(a.LogService)),this._instantiationService.setService(f.ILogService,this._logService),this.coreService=this._register(this._instantiationService.createInstance(g.CoreService)),this._instantiationService.setService(f.ICoreService,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(_.CoreMouseService)),this._instantiationService.setService(f.ICoreMouseService,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(i.UnicodeService)),this._instantiationService.setService(f.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(p.CharsetService),this._instantiationService.setService(f.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(b.OscLinkService),this._instantiationService.setService(f.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new d.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register(S.Event.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register(S.Event.forward(this._bufferService.onResize,this._onResize)),this._register(S.Event.forward(this.coreService.onData,this._onData)),this._register(S.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(((x,A)=>this._inputHandler.parse(x,A)))),this._register(S.Event.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(D,x){this._writeBuffer.write(D,x)}writeSync(D,x){this._logService.logLevel<=f.LogLevelEnum.WARN&&!E&&(this._logService.warn("writeSync is unreliable and will be removed soon."),E=!0),this._writeBuffer.writeSync(D,x)}input(D,x=!0){this.coreService.triggerDataEvent(D,x)}resize(D,x){isNaN(D)||isNaN(x)||(D=Math.max(D,w.MINIMUM_COLS),x=Math.max(x,w.MINIMUM_ROWS),this._bufferService.resize(D,x))}scroll(D,x=!1){this._bufferService.scroll(D,x)}scrollLines(D,x){this._bufferService.scrollLines(D,x)}scrollPages(D){this.scrollLines(D*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(D){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(D){let x=D-this._bufferService.buffer.ydisp;x!==0&&this.scrollLines(x)}registerEscHandler(D,x){return this._inputHandler.registerEscHandler(D,x)}registerDcsHandler(D,x){return this._inputHandler.registerDcsHandler(D,x)}registerCsiHandler(D,x){return this._inputHandler.registerCsiHandler(D,x)}registerOscHandler(D,x){return this._inputHandler.registerOscHandler(D,x)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let D=!1,x=this.optionsService.rawOptions.windowsPty;x&&x.buildNumber!==void 0&&x.buildNumber!==void 0?D=x.backend==="conpty"&&x.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(D=!0),D?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let D=[];D.push(this.onLineFeed(h.updateWindowsModeWrappedState.bind(null,this._bufferService))),D.push(this.registerCsiHandler({final:"H"},(()=>((0,h.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,P.toDisposable)((()=>{for(let x of D)x.dispose()}))}}}n.CoreTerminal=H},2486:function(y,n,l){var f=this&&this.__decorate||function(q,v,C,T){var R,F=arguments.length,j=F<3?v:T===null?T=Object.getOwnPropertyDescriptor(v,C):T;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")j=Reflect.decorate(q,v,C,T);else for(var U=q.length-1;U>=0;U--)(R=q[U])&&(j=(F<3?R(j):F>3?R(v,C,j):R(v,C))||j);return F>3&&j&&Object.defineProperty(v,C,j),j},k=this&&this.__param||function(q,v){return function(C,T){v(C,T,q)}};Object.defineProperty(n,"__esModule",{value:!0}),n.InputHandler=n.WindowsOptionsReportType=void 0,n.isValidColorIndex=W;let a=l(3534),w=l(6760),c=l(6717),g=l(7150),_=l(726),i=l(6107),p=l(8938),h=l(3055),d=l(5451),u=l(6501),b=l(6415),S=l(1346),P=l(9823),E=l(8693),H=l(802),$={"(":0,")":1,"*":2,"+":3,"-":1,".":2},D=131072;function x(q,v){if(q>24)return v.setWinLines||!1;switch(q){case 1:return!!v.restoreWin;case 2:return!!v.minimizeWin;case 3:return!!v.setWinPosition;case 4:return!!v.setWinSizePixels;case 5:return!!v.raiseWin;case 6:return!!v.lowerWin;case 7:return!!v.refreshWin;case 8:return!!v.setWinSizeChars;case 9:return!!v.maximizeWin;case 10:return!!v.fullscreenWin;case 11:return!!v.getWinState;case 13:return!!v.getWinPosition;case 14:return!!v.getWinSizePixels;case 15:return!!v.getScreenSizePixels;case 16:return!!v.getCellSizePixels;case 18:return!!v.getWinSizeChars;case 19:return!!v.getScreenSizeChars;case 20:return!!v.getIconTitle;case 21:return!!v.getWinTitle;case 22:return!!v.pushTitle;case 23:return!!v.popTitle;case 24:return!!v.setWinLines}return!1}var A;(function(q){q[q.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",q[q.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(A||(n.WindowsOptionsReportType=A={}));let L=0;class z extends g.Disposable{getAttrData(){return this._curAttrData}constructor(v,C,T,R,F,j,U,V,te=new c.EscapeSequenceParser){super(),this._bufferService=v,this._charsetService=C,this._coreService=T,this._logService=R,this._optionsService=F,this._oscLinkService=j,this._coreMouseService=U,this._unicodeService=V,this._parser=te,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new _.StringToUtf32,this._utf8Decoder=new _.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=i.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=i.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new H.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new H.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new H.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new H.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new H.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new H.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new H.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new H.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new H.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new H.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new H.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new H.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new H.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 X(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate((I=>this._activeBuffer=I.activeBuffer))),this._parser.setCsiHandlerFallback(((I,Q)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(I),params:Q.toArray()})})),this._parser.setEscHandlerFallback((I=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(I)})})),this._parser.setExecuteHandlerFallback((I=>{this._logService.debug("Unknown EXECUTE code: ",{code:I})})),this._parser.setOscHandlerFallback(((I,Q,Y)=>{this._logService.debug("Unknown OSC code: ",{identifier:I,action:Q,data:Y})})),this._parser.setDcsHandlerFallback(((I,Q,Y)=>{Q==="HOOK"&&(Y=Y.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(I),action:Q,payload:Y})})),this._parser.setPrintHandler(((I,Q,Y)=>this.print(I,Q,Y))),this._parser.registerCsiHandler({final:"@"},(I=>this.insertChars(I))),this._parser.registerCsiHandler({intermediates:" ",final:"@"},(I=>this.scrollLeft(I))),this._parser.registerCsiHandler({final:"A"},(I=>this.cursorUp(I))),this._parser.registerCsiHandler({intermediates:" ",final:"A"},(I=>this.scrollRight(I))),this._parser.registerCsiHandler({final:"B"},(I=>this.cursorDown(I))),this._parser.registerCsiHandler({final:"C"},(I=>this.cursorForward(I))),this._parser.registerCsiHandler({final:"D"},(I=>this.cursorBackward(I))),this._parser.registerCsiHandler({final:"E"},(I=>this.cursorNextLine(I))),this._parser.registerCsiHandler({final:"F"},(I=>this.cursorPrecedingLine(I))),this._parser.registerCsiHandler({final:"G"},(I=>this.cursorCharAbsolute(I))),this._parser.registerCsiHandler({final:"H"},(I=>this.cursorPosition(I))),this._parser.registerCsiHandler({final:"I"},(I=>this.cursorForwardTab(I))),this._parser.registerCsiHandler({final:"J"},(I=>this.eraseInDisplay(I,!1))),this._parser.registerCsiHandler({prefix:"?",final:"J"},(I=>this.eraseInDisplay(I,!0))),this._parser.registerCsiHandler({final:"K"},(I=>this.eraseInLine(I,!1))),this._parser.registerCsiHandler({prefix:"?",final:"K"},(I=>this.eraseInLine(I,!0))),this._parser.registerCsiHandler({final:"L"},(I=>this.insertLines(I))),this._parser.registerCsiHandler({final:"M"},(I=>this.deleteLines(I))),this._parser.registerCsiHandler({final:"P"},(I=>this.deleteChars(I))),this._parser.registerCsiHandler({final:"S"},(I=>this.scrollUp(I))),this._parser.registerCsiHandler({final:"T"},(I=>this.scrollDown(I))),this._parser.registerCsiHandler({final:"X"},(I=>this.eraseChars(I))),this._parser.registerCsiHandler({final:"Z"},(I=>this.cursorBackwardTab(I))),this._parser.registerCsiHandler({final:"`"},(I=>this.charPosAbsolute(I))),this._parser.registerCsiHandler({final:"a"},(I=>this.hPositionRelative(I))),this._parser.registerCsiHandler({final:"b"},(I=>this.repeatPrecedingCharacter(I))),this._parser.registerCsiHandler({final:"c"},(I=>this.sendDeviceAttributesPrimary(I))),this._parser.registerCsiHandler({prefix:">",final:"c"},(I=>this.sendDeviceAttributesSecondary(I))),this._parser.registerCsiHandler({final:"d"},(I=>this.linePosAbsolute(I))),this._parser.registerCsiHandler({final:"e"},(I=>this.vPositionRelative(I))),this._parser.registerCsiHandler({final:"f"},(I=>this.hVPosition(I))),this._parser.registerCsiHandler({final:"g"},(I=>this.tabClear(I))),this._parser.registerCsiHandler({final:"h"},(I=>this.setMode(I))),this._parser.registerCsiHandler({prefix:"?",final:"h"},(I=>this.setModePrivate(I))),this._parser.registerCsiHandler({final:"l"},(I=>this.resetMode(I))),this._parser.registerCsiHandler({prefix:"?",final:"l"},(I=>this.resetModePrivate(I))),this._parser.registerCsiHandler({final:"m"},(I=>this.charAttributes(I))),this._parser.registerCsiHandler({final:"n"},(I=>this.deviceStatus(I))),this._parser.registerCsiHandler({prefix:"?",final:"n"},(I=>this.deviceStatusPrivate(I))),this._parser.registerCsiHandler({intermediates:"!",final:"p"},(I=>this.softReset(I))),this._parser.registerCsiHandler({intermediates:" ",final:"q"},(I=>this.setCursorStyle(I))),this._parser.registerCsiHandler({final:"r"},(I=>this.setScrollRegion(I))),this._parser.registerCsiHandler({final:"s"},(I=>this.saveCursor(I))),this._parser.registerCsiHandler({final:"t"},(I=>this.windowOptions(I))),this._parser.registerCsiHandler({final:"u"},(I=>this.restoreCursor(I))),this._parser.registerCsiHandler({intermediates:"'",final:"}"},(I=>this.insertColumns(I))),this._parser.registerCsiHandler({intermediates:"'",final:"~"},(I=>this.deleteColumns(I))),this._parser.registerCsiHandler({intermediates:'"',final:"q"},(I=>this.selectProtected(I))),this._parser.registerCsiHandler({intermediates:"$",final:"p"},(I=>this.requestMode(I,!0))),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},(I=>this.requestMode(I,!1))),this._parser.setExecuteHandler(a.C0.BEL,(()=>this.bell())),this._parser.setExecuteHandler(a.C0.LF,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.VT,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.FF,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.CR,(()=>this.carriageReturn())),this._parser.setExecuteHandler(a.C0.BS,(()=>this.backspace())),this._parser.setExecuteHandler(a.C0.HT,(()=>this.tab())),this._parser.setExecuteHandler(a.C0.SO,(()=>this.shiftOut())),this._parser.setExecuteHandler(a.C0.SI,(()=>this.shiftIn())),this._parser.setExecuteHandler(a.C1.IND,(()=>this.index())),this._parser.setExecuteHandler(a.C1.NEL,(()=>this.nextLine())),this._parser.setExecuteHandler(a.C1.HTS,(()=>this.tabSet())),this._parser.registerOscHandler(0,new S.OscHandler((I=>(this.setTitle(I),this.setIconName(I),!0)))),this._parser.registerOscHandler(1,new S.OscHandler((I=>this.setIconName(I)))),this._parser.registerOscHandler(2,new S.OscHandler((I=>this.setTitle(I)))),this._parser.registerOscHandler(4,new S.OscHandler((I=>this.setOrReportIndexedColor(I)))),this._parser.registerOscHandler(8,new S.OscHandler((I=>this.setHyperlink(I)))),this._parser.registerOscHandler(10,new S.OscHandler((I=>this.setOrReportFgColor(I)))),this._parser.registerOscHandler(11,new S.OscHandler((I=>this.setOrReportBgColor(I)))),this._parser.registerOscHandler(12,new S.OscHandler((I=>this.setOrReportCursorColor(I)))),this._parser.registerOscHandler(104,new S.OscHandler((I=>this.restoreIndexedColor(I)))),this._parser.registerOscHandler(110,new S.OscHandler((I=>this.restoreFgColor(I)))),this._parser.registerOscHandler(111,new S.OscHandler((I=>this.restoreBgColor(I)))),this._parser.registerOscHandler(112,new S.OscHandler((I=>this.restoreCursorColor(I)))),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 I in w.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:I},(()=>this.selectCharset("("+I))),this._parser.registerEscHandler({intermediates:")",final:I},(()=>this.selectCharset(")"+I))),this._parser.registerEscHandler({intermediates:"*",final:I},(()=>this.selectCharset("*"+I))),this._parser.registerEscHandler({intermediates:"+",final:I},(()=>this.selectCharset("+"+I))),this._parser.registerEscHandler({intermediates:"-",final:I},(()=>this.selectCharset("-"+I))),this._parser.registerEscHandler({intermediates:".",final:I},(()=>this.selectCharset("."+I))),this._parser.registerEscHandler({intermediates:"/",final:I},(()=>this.selectCharset("/"+I)));this._parser.registerEscHandler({intermediates:"#",final:"8"},(()=>this.screenAlignmentPattern())),this._parser.setErrorHandler((I=>(this._logService.error("Parsing error: ",I),I))),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new P.DcsHandler(((I,Q)=>this.requestStatusString(I,Q))))}_preserveStack(v,C,T,R){this._parseStack.paused=!0,this._parseStack.cursorStartX=v,this._parseStack.cursorStartY=C,this._parseStack.decodedLength=T,this._parseStack.position=R}_logSlowResolvingAsync(v){this._logService.logLevel<=u.LogLevelEnum.WARN&&Promise.race([v,new Promise(((C,T)=>setTimeout((()=>T("#SLOW_TIMEOUT")),5e3)))]).catch((C=>{if(C!=="#SLOW_TIMEOUT")throw C;console.warn("async parser handler taking longer than 5000 ms")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(v,C){let T,R=this._activeBuffer.x,F=this._activeBuffer.y,j=0,U=this._parseStack.paused;if(U){if(T=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,C))return this._logSlowResolvingAsync(T),T;R=this._parseStack.cursorStartX,F=this._parseStack.cursorStartY,this._parseStack.paused=!1,v.length>D&&(j=this._parseStack.position+D)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+(typeof v=="string"?` "${v}"`:` "${Array.prototype.map.call(v,(I=>String.fromCharCode(I))).join("")}"`)),this._logService.logLevel===u.LogLevelEnum.TRACE&&this._logService.trace("parsing data (codes)",typeof v=="string"?v.split("").map((I=>I.charCodeAt(0))):v),this._parseBuffer.length<v.length&&this._parseBuffer.length<D&&(this._parseBuffer=new Uint32Array(Math.min(v.length,D))),U||this._dirtyRowTracker.clearRange(),v.length>D)for(let I=j;I<v.length;I+=D){let Q=I+D<v.length?I+D:v.length,Y=typeof v=="string"?this._stringDecoder.decode(v.substring(I,Q),this._parseBuffer):this._utf8Decoder.decode(v.subarray(I,Q),this._parseBuffer);if(T=this._parser.parse(this._parseBuffer,Y))return this._preserveStack(R,F,Y,I),this._logSlowResolvingAsync(T),T}else if(!U){let I=typeof v=="string"?this._stringDecoder.decode(v,this._parseBuffer):this._utf8Decoder.decode(v,this._parseBuffer);if(T=this._parser.parse(this._parseBuffer,I))return this._preserveStack(R,F,I,0),this._logSlowResolvingAsync(T),T}this._activeBuffer.x===R&&this._activeBuffer.y===F||this._onCursorMove.fire();let V=this._dirtyRowTracker.end+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp),te=this._dirtyRowTracker.start+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp);te<this._bufferService.rows&&this._onRequestRefreshRows.fire({start:Math.min(te,this._bufferService.rows-1),end:Math.min(V,this._bufferService.rows-1)})}print(v,C,T){let R,F,j=this._charsetService.charset,U=this._optionsService.rawOptions.screenReaderMode,V=this._bufferService.cols,te=this._coreService.decPrivateModes.wraparound,I=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&&T-C>0&&Y.getWidth(this._activeBuffer.x-1)===2&&Y.setCellFromCodepoint(this._activeBuffer.x-1,0,1,Q);let Z=this._parser.precedingJoinState;for(let we=C;we<T;++we){if(R=v[we],R<127&&j){let Ue=j[String.fromCharCode(R)];Ue&&(R=Ue.charCodeAt(0))}let ke=this._unicodeService.charProperties(R,Z);F=b.UnicodeService.extractWidth(ke);let Xe=b.UnicodeService.extractShouldJoin(ke),xe=Xe?b.UnicodeService.extractWidth(Z):0;if(Z=ke,U&&this._onA11yChar.fire((0,_.stringFromCodePoint)(R)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+F-xe>V){if(te){let Ue=Y,st=this._activeBuffer.x-xe;for(this._activeBuffer.x=xe,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),xe>0&&Y instanceof i.BufferLine&&Y.copyCellsFrom(Ue,st,0,xe,!1);st<V;)Ue.setCellFromCodepoint(st++,0,1,Q)}else if(this._activeBuffer.x=V-1,F===2)continue}if(Xe&&this._activeBuffer.x){let Ue=Y.getWidth(this._activeBuffer.x-1)?1:2;Y.addCodepointToCell(this._activeBuffer.x-Ue,R,F);for(let st=F-xe;--st>=0;)Y.setCellFromCodepoint(this._activeBuffer.x++,0,0,Q)}else if(I&&(Y.insertCells(this._activeBuffer.x,F-xe,this._activeBuffer.getNullCell(Q)),Y.getWidth(V-1)===2&&Y.setCellFromCodepoint(V-1,p.NULL_CELL_CODE,p.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<V&&T-C>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(v,C){return v.final!=="t"||v.prefix||v.intermediates?this._parser.registerCsiHandler(v,C):this._parser.registerCsiHandler(v,(T=>!x(T.params[0],this._optionsService.rawOptions.windowOptions)||C(T)))}registerDcsHandler(v,C){return this._parser.registerDcsHandler(v,new P.DcsHandler(C))}registerEscHandler(v,C){return this._parser.registerEscHandler(v,C)}registerOscHandler(v,C){return this._parser.registerOscHandler(v,new S.OscHandler(C))}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 v=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);v.hasWidth(this._activeBuffer.x)&&!v.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let v=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-v),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(v=this._bufferService.cols-1){this._activeBuffer.x=Math.min(v,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(v,C){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=v,this._activeBuffer.y=this._activeBuffer.scrollTop+C):(this._activeBuffer.x=v,this._activeBuffer.y=C),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(v,C){this._restrictCursor(),this._setCursor(this._activeBuffer.x+v,this._activeBuffer.y+C)}cursorUp(v){let C=this._activeBuffer.y-this._activeBuffer.scrollTop;return C>=0?this._moveCursor(0,-Math.min(C,v.params[0]||1)):this._moveCursor(0,-(v.params[0]||1)),!0}cursorDown(v){let C=this._activeBuffer.scrollBottom-this._activeBuffer.y;return C>=0?this._moveCursor(0,Math.min(C,v.params[0]||1)):this._moveCursor(0,v.params[0]||1),!0}cursorForward(v){return this._moveCursor(v.params[0]||1,0),!0}cursorBackward(v){return this._moveCursor(-(v.params[0]||1),0),!0}cursorNextLine(v){return this.cursorDown(v),this._activeBuffer.x=0,!0}cursorPrecedingLine(v){return this.cursorUp(v),this._activeBuffer.x=0,!0}cursorCharAbsolute(v){return this._setCursor((v.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(v){return this._setCursor(v.length>=2?(v.params[1]||1)-1:0,(v.params[0]||1)-1),!0}charPosAbsolute(v){return this._setCursor((v.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(v){return this._moveCursor(v.params[0]||1,0),!0}linePosAbsolute(v){return this._setCursor(this._activeBuffer.x,(v.params[0]||1)-1),!0}vPositionRelative(v){return this._moveCursor(0,v.params[0]||1),!0}hVPosition(v){return this.cursorPosition(v),!0}tabClear(v){let C=v.params[0];return C===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:C===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let C=v.params[0]||1;for(;C--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let C=v.params[0]||1;for(;C--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(v){let C=v.params[0];return C===1&&(this._curAttrData.bg|=536870912),C!==2&&C!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(v,C,T,R=!1,F=!1){let j=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);j.replaceCells(C,T,this._activeBuffer.getNullCell(this._eraseAttrData()),F),R&&(j.isWrapped=!1)}_resetBufferLine(v,C=!1){let T=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);T&&(T.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),C),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+v),T.isWrapped=!1)}eraseInDisplay(v,C=!1){let T;switch(this._restrictCursor(this._bufferService.cols),v.params[0]){case 0:for(T=this._activeBuffer.y,this._dirtyRowTracker.markDirty(T),this._eraseInBufferLine(T++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,C);T<this._bufferService.rows;T++)this._resetBufferLine(T,C);this._dirtyRowTracker.markDirty(T);break;case 1:for(T=this._activeBuffer.y,this._dirtyRowTracker.markDirty(T),this._eraseInBufferLine(T,0,this._activeBuffer.x+1,!0,C),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(T+1).isWrapped=!1);T--;)this._resetBufferLine(T,C);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(T=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,T-1);T--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+T)?.getTrimmedLength(););for(;T>=0;T--)this._bufferService.scroll(this._eraseAttrData())}else{for(T=this._bufferService.rows,this._dirtyRowTracker.markDirty(T-1);T--;)this._resetBufferLine(T,C);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(v,C=!1){switch(this._restrictCursor(this._bufferService.cols),v.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,C);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,C);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,C)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(v){this._restrictCursor();let C=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let T=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(;C--;)this._activeBuffer.lines.splice(F-1,1),this._activeBuffer.lines.splice(T,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}deleteLines(v){this._restrictCursor();let C=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let T=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;C--;)this._activeBuffer.lines.splice(T,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(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.insertCells(this._activeBuffer.x,v.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}deleteChars(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.deleteCells(this._activeBuffer.x,v.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(v){let C=v.params[0]||1;for(;C--;)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(v){let C=v.params[0]||1;for(;C--;)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(i.DEFAULT_ATTR_DATA));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollLeft(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.deleteCells(0,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollRight(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.insertCells(0,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}insertColumns(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.insertCells(this._activeBuffer.x,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.deleteCells(this._activeBuffer.x,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(v.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}repeatPrecedingCharacter(v){let C=this._parser.precedingJoinState;if(!C)return!0;let T=v.params[0]||1,R=b.UnicodeService.extractWidth(C),F=this._activeBuffer.x-R,j=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString(F),U=new Uint32Array(j.length*T),V=0;for(let I=0;I<j.length;){let Q=j.codePointAt(I)||0;U[V++]=Q,I+=Q>65535?2:1}let te=V;for(let I=1;I<T;++I)U.copyWithin(te,0,V),te+=V;return this.print(U,0,te),!0}sendDeviceAttributesPrimary(v){return v.params[0]>0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(a.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(a.C0.ESC+"[?6c")),!0}sendDeviceAttributesSecondary(v){return v.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(a.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(a.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(v.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(a.C0.ESC+"[>83;40003;0c")),!0}_is(v){return(this._optionsService.rawOptions.termName+"").indexOf(v)===0}setMode(v){for(let C=0;C<v.length;C++)switch(v.params[C]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0}return!0}setModePrivate(v){for(let C=0;C<v.length;C++)switch(v.params[C]){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(v){for(let C=0;C<v.length;C++)switch(v.params[C]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1}return!0}resetModePrivate(v){for(let C=0;C<v.length;C++)switch(v.params[C]){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(),v.params[C]===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(v,C){let T=this._coreService.decPrivateModes,{activeProtocol:R,activeEncoding:F}=this._coreMouseService,j=this._coreService,{buffers:U,cols:V}=this._bufferService,{active:te,alt:I}=U,Q=this._optionsService.rawOptions,Y=Xe=>Xe?1:2,Z=v.params[0];return we=Z,ke=C?Z===2?4:Z===4?Y(j.modes.insertMode):Z===12?3:Z===20?Y(Q.convertEol):0:Z===1?Y(T.applicationCursorKeys):Z===3?Q.windowOptions.setWinLines?V===80?2:V===132?1:0:0:Z===6?Y(T.origin):Z===7?Y(T.wraparound):Z===8?3:Z===9?Y(R==="X10"):Z===12?Y(Q.cursorBlink):Z===25?Y(!j.isCursorHidden):Z===45?Y(T.reverseWraparound):Z===66?Y(T.applicationKeypad):Z===67?4:Z===1e3?Y(R==="VT200"):Z===1002?Y(R==="DRAG"):Z===1003?Y(R==="ANY"):Z===1004?Y(T.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(te===I):Z===2004?Y(T.bracketedPasteMode):Z===2026?Y(T.synchronizedOutput):0,j.triggerDataEvent(`${a.C0.ESC}[${C?"":"?"}${we};${ke}$y`),!0;var we,ke}_updateAttrColor(v,C,T,R,F){return C===2?(v|=50331648,v&=-16777216,v|=d.AttributeData.fromColorRGB([T,R,F])):C===5&&(v&=-50331904,v|=33554432|255&T),v}_extractColor(v,C,T){let R=[0,0,-1,0,0,0],F=0,j=0;do{if(R[j+F]=v.params[C+j],v.hasSubParams(C+j)){let U=v.getSubParams(C+j),V=0;do R[1]===5&&(F=1),R[j+V+1+F]=U[V];while(++V<U.length&&V+j+1+F<R.length);break}if(R[1]===5&&j+F>=2||R[1]===2&&j+F>=5)break;R[1]&&(F=1)}while(++j+C<v.length&&j+F<R.length);for(let U=2;U<R.length;++U)R[U]===-1&&(R[U]=0);switch(R[0]){case 38:T.fg=this._updateAttrColor(T.fg,R[1],R[3],R[4],R[5]);break;case 48:T.bg=this._updateAttrColor(T.bg,R[1],R[3],R[4],R[5]);break;case 58:T.extended=T.extended.clone(),T.extended.underlineColor=this._updateAttrColor(T.extended.underlineColor,R[1],R[3],R[4],R[5])}return j}_processUnderline(v,C){C.extended=C.extended.clone(),(!~v||v>5)&&(v=1),C.extended.underlineStyle=v,C.fg|=268435456,v===0&&(C.fg&=-268435457),C.updateExtended()}_processSGR0(v){v.fg=i.DEFAULT_ATTR_DATA.fg,v.bg=i.DEFAULT_ATTR_DATA.bg,v.extended=v.extended.clone(),v.extended.underlineStyle=0,v.extended.underlineColor&=-67108864,v.updateExtended()}charAttributes(v){if(v.length===1&&v.params[0]===0)return this._processSGR0(this._curAttrData),!0;let C=v.length,T,R=this._curAttrData;for(let F=0;F<C;F++)T=v.params[F],T>=30&&T<=37?(R.fg&=-50331904,R.fg|=16777216|T-30):T>=40&&T<=47?(R.bg&=-50331904,R.bg|=16777216|T-40):T>=90&&T<=97?(R.fg&=-50331904,R.fg|=16777224|T-90):T>=100&&T<=107?(R.bg&=-50331904,R.bg|=16777224|T-100):T===0?this._processSGR0(R):T===1?R.fg|=134217728:T===3?R.bg|=67108864:T===4?(R.fg|=268435456,this._processUnderline(v.hasSubParams(F)?v.getSubParams(F)[0]:1,R)):T===5?R.fg|=536870912:T===7?R.fg|=67108864:T===8?R.fg|=1073741824:T===9?R.fg|=2147483648:T===2?R.bg|=134217728:T===21?this._processUnderline(2,R):T===22?(R.fg&=-134217729,R.bg&=-134217729):T===23?R.bg&=-67108865:T===24?(R.fg&=-268435457,this._processUnderline(0,R)):T===25?R.fg&=-536870913:T===27?R.fg&=-67108865:T===28?R.fg&=-1073741825:T===29?R.fg&=2147483647:T===39?(R.fg&=-67108864,R.fg|=16777215&i.DEFAULT_ATTR_DATA.fg):T===49?(R.bg&=-67108864,R.bg|=16777215&i.DEFAULT_ATTR_DATA.bg):T===38||T===48||T===58?F+=this._extractColor(v,F,R):T===53?R.bg|=1073741824:T===55?R.bg&=-1073741825:T===59?(R.extended=R.extended.clone(),R.extended.underlineColor=-1,R.updateExtended()):T===100?(R.fg&=-67108864,R.fg|=16777215&i.DEFAULT_ATTR_DATA.fg,R.bg&=-67108864,R.bg|=16777215&i.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",T);return!0}deviceStatus(v){switch(v.params[0]){case 5:this._coreService.triggerDataEvent(`${a.C0.ESC}[0n`);break;case 6:let C=this._activeBuffer.y+1,T=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[${C};${T}R`)}return!0}deviceStatusPrivate(v){if(v.params[0]===6){let C=this._activeBuffer.y+1,T=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[?${C};${T}R`)}return!0}softReset(v){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=i.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(v){let C=v.length===0?1:v.params[0];if(C===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(C){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 T=C%2==1;this._coreService.decPrivateModes.cursorBlink=T}return!0}setScrollRegion(v){let C=v.params[0]||1,T;return(v.length<2||(T=v.params[1])>this._bufferService.rows||T===0)&&(T=this._bufferService.rows),T>C&&(this._activeBuffer.scrollTop=C-1,this._activeBuffer.scrollBottom=T-1,this._setCursor(0,0)),!0}windowOptions(v){if(!x(v.params[0],this._optionsService.rawOptions.windowOptions))return!0;let C=v.length>1?v.params[1]:0;switch(v.params[0]){case 14:C!==2&&this._onRequestWindowsOptionsReport.fire(A.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(A.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${a.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:C!==0&&C!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),C!==0&&C!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:C!==0&&C!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),C!==0&&C!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(v){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(v){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(v){return this._windowTitle=v,this._onTitleChange.fire(v),!0}setIconName(v){return this._iconName=v,!0}setOrReportIndexedColor(v){let C=[],T=v.split(";");for(;T.length>1;){let R=T.shift(),F=T.shift();if(/^\d+$/.exec(R)){let j=parseInt(R);if(W(j))if(F==="?")C.push({type:0,index:j});else{let U=(0,E.parseColor)(F);U&&C.push({type:1,index:j,color:U})}}}return C.length&&this._onColor.fire(C),!0}setHyperlink(v){let C=v.indexOf(";");if(C===-1)return!0;let T=v.slice(0,C).trim(),R=v.slice(C+1);return R?this._createHyperlink(T,R):!T.trim()&&this._finishHyperlink()}_createHyperlink(v,C){this._getCurrentLinkId()&&this._finishHyperlink();let T=v.split(":"),R,F=T.findIndex((j=>j.startsWith("id=")));return F!==-1&&(R=T[F].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:R,uri:C}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(v,C){let T=v.split(";");for(let R=0;R<T.length&&!(C>=this._specialColors.length);++R,++C)if(T[R]==="?")this._onColor.fire([{type:0,index:this._specialColors[C]}]);else{let F=(0,E.parseColor)(T[R]);F&&this._onColor.fire([{type:1,index:this._specialColors[C],color:F}])}return!0}setOrReportFgColor(v){return this._setOrReportSpecialColor(v,0)}setOrReportBgColor(v){return this._setOrReportSpecialColor(v,1)}setOrReportCursorColor(v){return this._setOrReportSpecialColor(v,2)}restoreIndexedColor(v){if(!v)return this._onColor.fire([{type:2}]),!0;let C=[],T=v.split(";");for(let R=0;R<T.length;++R)if(/^\d+$/.exec(T[R])){let F=parseInt(T[R]);W(F)&&C.push({type:2,index:F})}return C.length&&this._onColor.fire(C),!0}restoreFgColor(v){return this._onColor.fire([{type:2,index:256}]),!0}restoreBgColor(v){return this._onColor.fire([{type:2,index:257}]),!0}restoreCursorColor(v){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(v){return v.length!==2?(this.selectDefaultCharset(),!0):(v[0]==="/"||this._charsetService.setgCharset($[v[0]],w.CHARSETS[v[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 v=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,v,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=i.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=i.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(v){return this._charsetService.setgLevel(v),!0}screenAlignmentPattern(){let v=new h.CellData;v.content=4194373,v.fg=this._curAttrData.fg,v.bg=this._curAttrData.bg,this._setCursor(0,0);for(let C=0;C<this._bufferService.rows;++C){let T=this._activeBuffer.ybase+this._activeBuffer.y+C,R=this._activeBuffer.lines.get(T);R&&(R.fill(v),R.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(v,C){let T=this._bufferService.buffer,R=this._optionsService.rawOptions;return(F=>(this._coreService.triggerDataEvent(`${a.C0.ESC}${F}${a.C0.ESC}\\`),!0))(v==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:v==='"p'?'P1$r61;1"p':v==="r"?`P1$r${T.scrollTop+1};${T.scrollBottom+1}r`:v==="m"?"P1$r0m":v===" q"?`P1$r${{block:2,underline:4,bar:6}[R.cursorStyle]-(R.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(v,C){this._dirtyRowTracker.markRangeDirty(v,C)}}n.InputHandler=z;let X=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,v){q>v&&(L=q,q=v,v=L),q<this.start&&(this.start=q),v>this.end&&(this.end=v)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function W(q){return 0<=q&&q<256}X=f([k(0,u.IBufferService)],X)},701:(y,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 k=l.match(/Version\/(\d+)/);return k===null||k.length<2?0:parseInt(k[1])},n.isNode=typeof process<"u"&&"title"in process;let l=n.isNode?"node":navigator.userAgent,f=n.isNode?"node":navigator.platform;n.isFirefox=l.includes("Firefox"),n.isLegacyEdge=l.includes("Edge"),n.isSafari=/^((?!chrome|android).)*safari/i.test(l),n.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(f),n.isIpad=f==="iPad",n.isIphone=f==="iPhone",n.isWindows=["Windows","Win16","Win32","WinCE"].includes(f),n.isLinux=f.indexOf("Linux")>=0,n.isChromeOS=/\bCrOS\b/.test(l)},6168:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DebouncedIdleTask=n.IdleTaskQueue=n.PriorityTaskQueue=void 0;let f=l(701);class k{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,i=c.timeRemaining(),p=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,_),p=c.timeRemaining(),1.5*_>p)return i-g<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(i-g))}ms`),void this._start();i=p}this.clear()}}class a extends k{_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=a,n.IdleTaskQueue=!f.isNode&&"requestIdleCallback"in window?class extends k{_requestCallback(w){return requestIdleCallback(w)}_cancelCallback(w){cancelIdleCallback(w)}}:a,n.DebouncedIdleTask=class{constructor(){this._queue=new n.IdleTaskQueue}set(w){this._queue.clear(),this._queue.enqueue(w)}flush(){this._queue.flush()}}},5882:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.updateWindowsModeWrappedState=function(k){let a=k.buffer.lines.get(k.buffer.ybase+k.buffer.y-1),w=a?.get(k.cols-1),c=k.buffer.lines.get(k.buffer.ybase+k.buffer.y);c&&w&&(c.isWrapped=w[f.CHAR_DATA_CODE_INDEX]!==f.NULL_CELL_CODE&&w[f.CHAR_DATA_CODE_INDEX]!==f.WHITESPACE_CELL_CODE)};let f=l(8938)},5451:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ExtendedAttrs=n.AttributeData=void 0;class l{constructor(){this.fg=0,this.bg=0,this.extended=new f}static toColorRGB(a){return[a>>>16&255,a>>>8&255,255&a]}static fromColorRGB(a){return(255&a[0])<<16|(255&a[1])<<8|255&a[2]}clone(){let a=new l;return a.fg=this.fg,a.bg=this.bg,a.extended=this.extended.clone(),a}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=l;class f{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(a){this._ext=a}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(a){this._ext&=-469762049,this._ext|=a<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(a){this._ext&=-67108864,this._ext|=67108863&a}get urlId(){return this._urlId}set urlId(a){this._urlId=a}get underlineVariantOffset(){let a=(3758096384&this._ext)>>29;return a<0?4294967288^a:a}set underlineVariantOffset(a){this._ext&=536870911,this._ext|=a<<29&3758096384}constructor(a=0,w=0){this._ext=0,this._urlId=0,this._ext=a,this._urlId=w}clone(){return new f(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}n.ExtendedAttrs=f},1073:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Buffer=n.MAX_BUFFER_SIZE=void 0;let f=l(5639),k=l(6168),a=l(5451),w=l(6107),c=l(732),g=l(3055),_=l(8938),i=l(8158),p=l(6760);n.MAX_BUFFER_SIZE=4294967295,n.Buffer=class{constructor(h,d,u){this._hasScrollback=h,this._optionsService=d,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=p.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 k.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new f.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(h){return h?(this._nullCell.fg=h.fg,this._nullCell.bg=h.bg,this._nullCell.extended=h.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new a.ExtendedAttrs),this._nullCell}getWhitespaceCell(h){return h?(this._whitespaceCell.fg=h.fg,this._whitespaceCell.bg=h.bg,this._whitespaceCell.extended=h.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new a.ExtendedAttrs),this._whitespaceCell}getBlankLine(h,d){return new w.BufferLine(this._bufferService.cols,this.getNullCell(h),d)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let h=this.ybase+this.y-this.ydisp;return h>=0&&h<this._rows}_getCorrectBufferLength(h){if(!this._hasScrollback)return h;let d=h+this._optionsService.rawOptions.scrollback;return d>n.MAX_BUFFER_SIZE?n.MAX_BUFFER_SIZE:d}fillViewportRows(h){if(this.lines.length===0){h===void 0&&(h=w.DEFAULT_ATTR_DATA);let d=this._rows;for(;d--;)this.lines.push(this.getBlankLine(h))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new f.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(h,d){let u=this.getNullCell(w.DEFAULT_ATTR_DATA),b=0,S=this._getCorrectBufferLength(d);if(S>this.lines.maxLength&&(this.lines.maxLength=S),this.lines.length>0){if(this._cols<h)for(let E=0;E<this.lines.length;E++)b+=+this.lines.get(E).resize(h,u);let P=0;if(this._rows<d)for(let E=this._rows;E<d;E++)this.lines.length<d+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(h,u)):this.ybase>0&&this.lines.length<=this.ybase+this.y+P+1?(this.ybase--,P++,this.ydisp>0&&this.ydisp--):this.lines.push(new w.BufferLine(h,u)));else for(let E=this._rows;E>d;E--)this.lines.length>d+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(S<this.lines.maxLength){let E=this.lines.length-S;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=S}this.x=Math.min(this.x,h-1),this.y=Math.min(this.y,d-1),P&&(this.y+=P),this.savedX=Math.min(this.savedX,h-1),this.scrollTop=0}if(this.scrollBottom=d-1,this._isReflowEnabled&&(this._reflow(h,d),this._cols>h))for(let P=0;P<this.lines.length;P++)b+=+this.lines.get(P).resize(h,u);this._cols=h,this._rows=d,this._memoryCleanupQueue.clear(),b>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let h=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,h=!1);let d=0;for(;this._memoryCleanupPosition<this.lines.length;)if(d+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),d>100)return!0;return h}get _isReflowEnabled(){let h=this._optionsService.rawOptions.windowsPty;return h&&h.buildNumber?this._hasScrollback&&h.backend==="conpty"&&h.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(h,d){this._cols!==h&&(h>this._cols?this._reflowLarger(h,d):this._reflowSmaller(h,d))}_reflowLarger(h,d){let u=this._optionsService.rawOptions.reflowCursorLine,b=(0,c.reflowLargerGetLinesToRemove)(this.lines,this._cols,h,this.ybase+this.y,this.getNullCell(w.DEFAULT_ATTR_DATA),u);if(b.length>0){let S=(0,c.reflowLargerCreateNewLayout)(this.lines,b);(0,c.reflowLargerApplyNewLayout)(this.lines,S.layout),this._reflowLargerAdjustViewport(h,d,S.countRemoved)}}_reflowLargerAdjustViewport(h,d,u){let b=this.getNullCell(w.DEFAULT_ATTR_DATA),S=u;for(;S-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length<d&&this.lines.push(new w.BufferLine(h,b))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-u,0)}_reflowSmaller(h,d){let u=this._optionsService.rawOptions.reflowCursorLine,b=this.getNullCell(w.DEFAULT_ATTR_DATA),S=[],P=0;for(let E=this.lines.length-1;E>=0;E--){let H=this.lines.get(E);if(!H||!H.isWrapped&&H.getTrimmedLength()<=h)continue;let $=[H];for(;H.isWrapped&&E>0;)H=this.lines.get(--E),$.unshift(H);if(!u){let T=this.ybase+this.y;if(T>=E&&T<E+$.length)continue}let D=$[$.length-1].getTrimmedLength(),x=(0,c.reflowSmallerGetNewLineLengths)($,this._cols,h),A=x.length-$.length,L;L=this.ybase===0&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+A):Math.max(0,this.lines.length-this.lines.maxLength+A);let z=[];for(let T=0;T<A;T++){let R=this.getBlankLine(w.DEFAULT_ATTR_DATA,!0);z.push(R)}z.length>0&&(S.push({start:E+$.length+P,newLines:z}),P+=z.length),$.push(...z);let X=x.length-1,W=x[X];W===0&&(X--,W=x[X]);let q=$.length-A-1,v=D;for(;q>=0;){let T=Math.min(v,W);if($[X]===void 0)break;if($[X].copyCellsFrom($[q],v-T,W-T,T,!0),W-=T,W===0&&(X--,W=x[X]),v-=T,v===0){q--;let R=Math.max(q,0);v=(0,c.getWrappedLineTrimmedLength)($,R,this._cols)}}for(let T=0;T<$.length;T++)x[T]<h&&$[T].setCell(x[T],b);let C=A-L;for(;C-- >0;)this.ybase===0?this.y<d-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+P)-d&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+A,this.ybase+d-1)}if(S.length>0){let E=[],H=[];for(let W=0;W<this.lines.length;W++)H.push(this.lines.get(W));let $=this.lines.length,D=$-1,x=0,A=S[x];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+P);let L=0;for(let W=Math.min(this.lines.maxLength-1,$+P-1);W>=0;W--)if(A&&A.start>D+L){for(let q=A.newLines.length-1;q>=0;q--)this.lines.set(W--,A.newLines[q]);W++,E.push({index:D+1,amount:A.newLines.length}),L+=A.newLines.length,A=S[++x]}else this.lines.set(W,H[D--]);let z=0;for(let W=E.length-1;W>=0;W--)E[W].index+=z,this.lines.onInsertEmitter.fire(E[W]),z+=E[W].amount;let X=Math.max(0,$+P-this.lines.maxLength);X>0&&this.lines.onTrimEmitter.fire(X)}}translateBufferLineToString(h,d,u=0,b){let S=this.lines.get(h);return S?S.translateToString(d,u,b):""}getWrappedRangeForLine(h){let d=h,u=h;for(;d>0&&this.lines.get(d).isWrapped;)d--;for(;u+1<this.lines.length&&this.lines.get(u+1).isWrapped;)u++;return{first:d,last:u}}setupTabStops(h){for(h!=null?this.tabs[h]||(h=this.prevStop(h)):(this.tabs={},h=0);h<this._cols;h+=this._optionsService.rawOptions.tabStopWidth)this.tabs[h]=!0}prevStop(h){for(h==null&&(h=this.x);!this.tabs[--h]&&h>0;);return h>=this._cols?this._cols-1:h<0?0:h}nextStop(h){for(h==null&&(h=this.x);!this.tabs[++h]&&h<this._cols;);return h>=this._cols?this._cols-1:h<0?0:h}clearMarkers(h){this._isClearing=!0;for(let d=0;d<this.markers.length;d++)this.markers[d].line===h&&(this.markers[d].dispose(),this.markers.splice(d--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let h=0;h<this.markers.length;h++)this.markers[h].dispose();this.markers.length=0,this._isClearing=!1}addMarker(h){let d=new i.Marker(h);return this.markers.push(d),d.register(this.lines.onTrim((u=>{d.line-=u,d.line<0&&d.dispose()}))),d.register(this.lines.onInsert((u=>{d.line>=u.index&&(d.line+=u.amount)}))),d.register(this.lines.onDelete((u=>{d.line>=u.index&&d.line<u.index+u.amount&&d.dispose(),d.line>u.index&&(d.line-=u.amount)}))),d.register(d.onDispose((()=>this._removeMarker(d)))),d}_removeMarker(h){this._isClearing||this.markers.splice(this.markers.indexOf(h),1)}}},6107:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferLine=n.DEFAULT_ATTR_DATA=void 0;let f=l(5451),k=l(3055),a=l(8938),w=l(726);n.DEFAULT_ATTR_DATA=Object.freeze(new f.AttributeData);let c=0;class g{constructor(i,p,h=!1){this.isWrapped=h,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*i);let d=p||k.CellData.fromCharData([0,a.NULL_CELL_CHAR,a.NULL_CELL_WIDTH,a.NULL_CELL_CODE]);for(let u=0;u<i;++u)this.setCell(u,d);this.length=i}get(i){let p=this._data[3*i+0],h=2097151&p;return[this._data[3*i+1],2097152&p?this._combined[i]:h?(0,w.stringFromCodePoint)(h):"",p>>22,2097152&p?this._combined[i].charCodeAt(this._combined[i].length-1):h]}set(i,p){this._data[3*i+1]=p[a.CHAR_DATA_ATTR_INDEX],p[a.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[i]=p[1],this._data[3*i+0]=2097152|i|p[a.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*i+0]=p[a.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|p[a.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(i){return this._data[3*i+0]>>22}hasWidth(i){return 12582912&this._data[3*i+0]}getFg(i){return this._data[3*i+1]}getBg(i){return this._data[3*i+2]}hasContent(i){return 4194303&this._data[3*i+0]}getCodePoint(i){let p=this._data[3*i+0];return 2097152&p?this._combined[i].charCodeAt(this._combined[i].length-1):2097151&p}isCombined(i){return 2097152&this._data[3*i+0]}getString(i){let p=this._data[3*i+0];return 2097152&p?this._combined[i]:2097151&p?(0,w.stringFromCodePoint)(2097151&p):""}isProtected(i){return 536870912&this._data[3*i+2]}loadCell(i,p){return c=3*i,p.content=this._data[c+0],p.fg=this._data[c+1],p.bg=this._data[c+2],2097152&p.content&&(p.combinedData=this._combined[i]),268435456&p.bg&&(p.extended=this._extendedAttrs[i]),p}setCell(i,p){2097152&p.content&&(this._combined[i]=p.combinedData),268435456&p.bg&&(this._extendedAttrs[i]=p.extended),this._data[3*i+0]=p.content,this._data[3*i+1]=p.fg,this._data[3*i+2]=p.bg}setCellFromCodepoint(i,p,h,d){268435456&d.bg&&(this._extendedAttrs[i]=d.extended),this._data[3*i+0]=p|h<<22,this._data[3*i+1]=d.fg,this._data[3*i+2]=d.bg}addCodepointToCell(i,p,h){let d=this._data[3*i+0];2097152&d?this._combined[i]+=(0,w.stringFromCodePoint)(p):2097151&d?(this._combined[i]=(0,w.stringFromCodePoint)(2097151&d)+(0,w.stringFromCodePoint)(p),d&=-2097152,d|=2097152):d=p|4194304,h&&(d&=-12582913,d|=h<<22),this._data[3*i+0]=d}insertCells(i,p,h){if((i%=this.length)&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length-i){let d=new k.CellData;for(let u=this.length-i-p-1;u>=0;--u)this.setCell(i+p+u,this.loadCell(i+u,d));for(let u=0;u<p;++u)this.setCell(i+u,h)}else for(let d=i;d<this.length;++d)this.setCell(d,h);this.getWidth(this.length-1)===2&&this.setCellFromCodepoint(this.length-1,0,1,h)}deleteCells(i,p,h){if(i%=this.length,p<this.length-i){let d=new k.CellData;for(let u=0;u<this.length-i-p;++u)this.setCell(i+u,this.loadCell(i+p+u,d));for(let u=this.length-p;u<this.length;++u)this.setCell(u,h)}else for(let d=i;d<this.length;++d)this.setCell(d,h);i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),this.getWidth(i)!==0||this.hasContent(i)||this.setCellFromCodepoint(i,0,1,h)}replaceCells(i,p,h,d=!1){if(d)for(i&&this.getWidth(i-1)===2&&!this.isProtected(i-1)&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length&&this.getWidth(p-1)===2&&!this.isProtected(p)&&this.setCellFromCodepoint(p,0,1,h);i<p&&i<this.length;)this.isProtected(i)||this.setCell(i,h),i++;else for(i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length&&this.getWidth(p-1)===2&&this.setCellFromCodepoint(p,0,1,h);i<p&&i<this.length;)this.setCell(i++,h)}resize(i,p){if(i===this.length)return 4*this._data.length*2<this._data.buffer.byteLength;let h=3*i;if(i>this.length){if(this._data.buffer.byteLength>=4*h)this._data=new Uint32Array(this._data.buffer,0,h);else{let d=new Uint32Array(h);d.set(this._data),this._data=d}for(let d=this.length;d<i;++d)this.setCell(d,p)}else{this._data=this._data.subarray(0,h);let d=Object.keys(this._combined);for(let b=0;b<d.length;b++){let S=parseInt(d[b],10);S>=i&&delete this._combined[S]}let u=Object.keys(this._extendedAttrs);for(let b=0;b<u.length;b++){let S=parseInt(u[b],10);S>=i&&delete this._extendedAttrs[S]}}return this.length=i,4*h*2<this._data.buffer.byteLength}cleanupMemory(){if(4*this._data.length*2<this._data.buffer.byteLength){let i=new Uint32Array(this._data.length);return i.set(this._data),this._data=i,1}return 0}fill(i,p=!1){if(p)for(let h=0;h<this.length;++h)this.isProtected(h)||this.setCell(h,i);else{this._combined={},this._extendedAttrs={};for(let h=0;h<this.length;++h)this.setCell(h,i)}}copyFrom(i){this.length!==i.length?this._data=new Uint32Array(i._data):this._data.set(i._data),this.length=i.length,this._combined={};for(let p in i._combined)this._combined[p]=i._combined[p];this._extendedAttrs={};for(let p in i._extendedAttrs)this._extendedAttrs[p]=i._extendedAttrs[p];this.isWrapped=i.isWrapped}clone(){let i=new g(0);i._data=new Uint32Array(this._data),i.length=this.length;for(let p in this._combined)i._combined[p]=this._combined[p];for(let p in this._extendedAttrs)i._extendedAttrs[p]=this._extendedAttrs[p];return i.isWrapped=this.isWrapped,i}getTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(4194303&this._data[3*i+0])return i+(this._data[3*i+0]>>22);return 0}getNoBgTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(4194303&this._data[3*i+0]||50331648&this._data[3*i+2])return i+(this._data[3*i+0]>>22);return 0}copyCellsFrom(i,p,h,d,u){let b=i._data;if(u)for(let P=d-1;P>=0;P--){for(let E=0;E<3;E++)this._data[3*(h+P)+E]=b[3*(p+P)+E];268435456&b[3*(p+P)+2]&&(this._extendedAttrs[h+P]=i._extendedAttrs[p+P])}else for(let P=0;P<d;P++){for(let E=0;E<3;E++)this._data[3*(h+P)+E]=b[3*(p+P)+E];268435456&b[3*(p+P)+2]&&(this._extendedAttrs[h+P]=i._extendedAttrs[p+P])}let S=Object.keys(i._combined);for(let P=0;P<S.length;P++){let E=parseInt(S[P],10);E>=p&&(this._combined[E-p+h]=i._combined[E])}}translateToString(i,p,h,d){p=p??0,h=h??this.length,i&&(h=Math.min(h,this.getTrimmedLength())),d&&(d.length=0);let u="";for(;p<h;){let b=this._data[3*p+0],S=2097151&b,P=2097152&b?this._combined[p]:S?(0,w.stringFromCodePoint)(S):a.WHITESPACE_CELL_CHAR;if(u+=P,d)for(let E=0;E<P.length;++E)d.push(p);p+=b>>22||1}return d&&d.push(p),u}}n.BufferLine=g},732:(y,n)=>{function l(f,k,a){if(k===f.length-1)return f[k].getTrimmedLength();let w=!f[k].hasContent(a-1)&&f[k].getWidth(a-1)===1,c=f[k+1].getWidth(0)===2;return w&&c?a-1:a}Object.defineProperty(n,"__esModule",{value:!0}),n.reflowLargerGetLinesToRemove=function(f,k,a,w,c,g){let _=[];for(let i=0;i<f.length-1;i++){let p=i,h=f.get(++p);if(!h.isWrapped)continue;let d=[f.get(i)];for(;p<f.length&&h.isWrapped;)d.push(h),h=f.get(++p);if(!g&&w>=i&&w<p){i+=d.length-1;continue}let u=0,b=l(d,u,k),S=1,P=0;for(;S<d.length;){let H=l(d,S,k),$=H-P,D=a-b,x=Math.min($,D);d[u].copyCellsFrom(d[S],P,b,x,!1),b+=x,b===a&&(u++,b=0),P+=x,P===H&&(S++,P=0),b===0&&u!==0&&d[u-1].getWidth(a-1)===2&&(d[u].copyCellsFrom(d[u-1],a-1,b++,1,!1),d[u-1].setCell(a-1,c))}d[u].replaceCells(b,a,c);let E=0;for(let H=d.length-1;H>0&&(H>u||d[H].getTrimmedLength()===0);H--)E++;E>0&&(_.push(i+d.length-E),_.push(E)),i+=d.length-1}return _},n.reflowLargerCreateNewLayout=function(f,k){let a=[],w=0,c=k[w],g=0;for(let _=0;_<f.length;_++)if(c===_){let i=k[++w];f.onDeleteEmitter.fire({index:_-g,amount:i}),_+=i-1,g+=i,c=k[++w]}else a.push(_);return{layout:a,countRemoved:g}},n.reflowLargerApplyNewLayout=function(f,k){let a=[];for(let w=0;w<k.length;w++)a.push(f.get(k[w]));for(let w=0;w<a.length;w++)f.set(w,a[w]);f.length=k.length},n.reflowSmallerGetNewLineLengths=function(f,k,a){let w=[],c=f.map(((p,h)=>l(f,h,k))).reduce(((p,h)=>p+h)),g=0,_=0,i=0;for(;i<c;){if(c-i<a){w.push(c-i);break}g+=a;let p=l(f,_,k);g>p&&(g-=p,_++);let h=f[_].getWidth(g-1)===2;h&&g--;let d=h?a-1:a;w.push(d),i+=d}return w},n.getWrappedLineTrimmedLength=l},4097:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferSet=void 0;let f=l(7150),k=l(1073),a=l(802);class w extends f.Disposable{constructor(g,_){super(),this._optionsService=g,this._bufferService=_,this._onBufferActivate=this._register(new a.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 k.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new k.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:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CellData=void 0;let f=l(726),k=l(8938),a=l(5451);class w extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.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,f.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(g){this.fg=g[k.CHAR_DATA_ATTR_INDEX],this.bg=0;let _=!1;if(g[k.CHAR_DATA_CHAR_INDEX].length>2)_=!0;else if(g[k.CHAR_DATA_CHAR_INDEX].length===2){let i=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){let p=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=p&&p<=57343?this.content=1024*(i-55296)+p-56320+65536|g[k.CHAR_DATA_WIDTH_INDEX]<<22:_=!0}else _=!0}else this.content=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|g[k.CHAR_DATA_WIDTH_INDEX]<<22;_&&(this.combinedData=g[k.CHAR_DATA_CHAR_INDEX],this.content=2097152|g[k.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}n.CellData=w},8938:(y,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:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Marker=void 0;let f=l(802),k=l(7150);class a{get id(){return this._id}constructor(c){this.line=c,this.isDisposed=!1,this._disposables=[],this._id=a._nextId++,this._onDispose=this.register(new f.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,k.dispose)(this._disposables),this._disposables.length=0)}register(c){return this._disposables.push(c),c}}n.Marker=a,a._nextId=1},6760:(y,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:(y,n)=>{var l,f,k;Object.defineProperty(n,"__esModule",{value:!0}),n.C1_ESCAPED=n.C1=n.C0=void 0,(function(a){a.NUL="\0",a.SOH="",a.STX="",a.ETX="",a.EOT="",a.ENQ="",a.ACK="",a.BEL="\x07",a.BS="\b",a.HT=" ",a.LF=`
2
+ var da=Object.create;var Dr=Object.defineProperty;var ua=Object.getOwnPropertyDescriptor;var ha=Object.getOwnPropertyNames;var fa=Object.getPrototypeOf,pa=Object.prototype.hasOwnProperty;var $e=(e,t)=>()=>(e&&(t=e(e=0)),t);var ga=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ma=(e,t)=>{for(var r in t)Dr(e,r,{get:t[r],enumerable:!0})},_a=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ha(t))!pa.call(e,o)&&o!==r&&Dr(e,o,{get:()=>t[o],enumerable:!(s=ua(t,o))||s.enumerable});return e};var wa=(e,t,r)=>(r=e!=null?da(fa(e)):{},_a(t||!e||!e.__esModule?Dr(r,"default",{value:e,enumerable:!0}):r,e));function be(e){return ka[e]}function Lr(e,t={}){let r=be(e),s=t.runners?.[e]?.path?.trim();return{...r,executable:s&&s.length>0?s:r.executable}}function mt(e={}){return ce.filter(t=>e.runners?.[t]?.enabled!==!1)}function it(e={}){let t=mt(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 zt(e,t={}){if(t.runners?.[e]?.enabled===!1)throw new Error(`Runner "${e}" is disabled in .craig/config.json.`)}function _t(e){return ce.includes(e)}function Ys(e){if(!e||e.length===0)return"codex";if(!_t(e))throw new Error(`Unsupported runner "${e}". Expected one of: ${ce.join(", ")}.`);return e}function Se(e){return be(e).displayName}function me(e,t,r={}){let s=[Lr(e,r).executable];return t&&t.length>0&&s.push(t),s}var ce,ka,Ae=$e(()=>{"use strict";ce=["codex","cursor","claude"],ka={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"}}});import{randomUUID as Ca}from"node:crypto";import{open as Pa,readFile as Gh,rename as Ia,rm as xa}from"node:fs/promises";import Mr from"node:path";async function le(e,t){let r=Mr.dirname(e),s=Mr.join(r,`.${Mr.basename(e)}.${process.pid}.${Date.now()}.${Ca()}.tmp`),o=await Pa(s,"w");try{let m=`${JSON.stringify(t,null,2)}
3
+ `;await o.writeFile(m,"utf8"),await o.sync(),await o.close(),await Ia(s,e)}catch(m){throw await o.close().catch(()=>{}),await xa(s,{force:!0}).catch(()=>{}),m}}var Fe=$e(()=>{"use strict"});import{readFile as Ba}from"node:fs/promises";async function Re(e){let t=await Ba(e.indexFile,"utf8"),r=JSON.parse(t);return Br(r,e.workspaceRoot,e.indexFile)}async function ot(e,t){let r={...t,workspaceRoot:e.workspaceRoot,updatedAt:new Date().toISOString()};await le(e.indexFile,r)}function Br(e,t,r){if(!$a(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 $a(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"}var at=$e(()=>{"use strict";Fe()});import{readFile as Fa}from"node:fs/promises";async function Ce(e,t){let r=await Fa($r(e,t),"utf8"),s=JSON.parse(r);return Wa(s,$r(e,t))}async function re(e,t){let r={...t,updatedAt:new Date().toISOString()};await le($r(e,t.id),r)}async function Fr(e,t){let r=await Re(e);r.taskIds.includes(t)||await ot(e,{...r,taskIds:[...r.taskIds,t]})}function $r(e,t){return`${e.tasksDir}/${t}.json`}function Wa(e,t){let r=Na(e);if(!Ha(r))throw new Error(`Craig task record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function Na(e){if(typeof e!="object"||e===null)return e;let t=e;return{...t,runner:Wr(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:Ka(t),bundlePath:typeof t.bundlePath=="string"||t.bundlePath===null?t.bundlePath:null,selectedRepoTargetId:typeof t.selectedRepoTargetId=="string"||t.selectedRepoTargetId===null?t.selectedRepoTargetId:null,repoTargets:Ua(t.repoTargets),runnerSession:t.runnerSession??ja(t),checks:Ya(t),lastCommit:t.lastCommit??null,pullRequest:Ja(t),artifacts:Za(t),cleanup:ec(t)}}function ja(e){if(typeof e.title!="string")return null;let t=Wr(e.runner);return{command:me(t,e.title),pid:null,startedAt:null,lastKnownState:e.status==="running"?"running":"starting",exitCode:null,exitedAt:null}}function Ha(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"||t.type==="project")&&typeof t.status=="string"&&_t(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"&&ti(t.ptyTabs)&&(t.bundlePath===void 0||t.bundlePath===null||typeof t.bundlePath=="string")&&(t.selectedRepoTargetId===void 0||t.selectedRepoTargetId===null||typeof t.selectedRepoTargetId=="string")&&(t.repoTargets===void 0||qa(t.repoTargets))&&Va(t.runnerSession)&&Ga(t.prompt)&&ri(t.checks)&&si(t.lastCommit)&&ii(t.pullRequest)&&Xa(t.artifacts)&&ni(t.cleanup)&&(t.lastFailureReason===void 0||t.lastFailureReason===null||typeof t.lastFailureReason=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"}function Ua(e){if(Array.isArray(e))return e.filter(ei)}function qa(e){return Array.isArray(e)&&e.every(ei)}function ei(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.repoId=="string"&&typeof t.branch=="string"&&typeof t.repoRoot=="string"&&typeof t.worktreePath=="string"&&(t.status==="ready"||t.status==="unavailable"||t.status==="merged"||t.status==="closed")&&(typeof t.failureReason=="string"||t.failureReason===null)&&ri(t.checks)&&si(t.lastCommit)&&ii(t.pullRequest)&&ni(t.cleanup)}function Ka(e){if(ti(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 za(e.id,e.title,t,Wr(e.runner))}function za(e,t,r,s){let o=be(s);return[{id:`${e}:agent`,kind:"agent",title:o.defaultAgentTitle,command:me(s),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function Wr(e){return e&&_t(e)?e:"codex"}function ti(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 Va(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 Ga(e){return typeof e=="object"&&e!==null&&(e.source==="inline"||e.source==="file")&&typeof e.value=="string"}function ri(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 si(e){return e===null||typeof e=="object"&&e!==null&&typeof e.sha=="string"&&typeof e.message=="string"&&typeof e.committedAt=="string"}function ii(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 Xa(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 ni(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 Ya(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 Ja(e){let t=e.pullRequest;return t?{...t,mergeStateStatus:t.mergeStateStatus??null,requiredChecks:Qa(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 Qa(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 Za(e){let t=e.artifacts;return t?{...t,checkSummaryPath:t.checkSummaryPath??null}:{logPath:null,checkSummaryPath:null,prDraftPath:null,prStatusPath:null}}function ec(e){return e.cleanup??{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}var _e=$e(()=>{"use strict";Fe();at();Ae()});import{readFile as tc}from"node:fs/promises";async function De(e){try{let t=await tc(e.uiStateFile,"utf8"),r=JSON.parse(t);return rc(r,e.uiStateFile)}catch(t){if(ic(t))return null;throw t}}async function Pe(e,t){await le(e.uiStateFile,{...t,updatedAt:new Date().toISOString()})}function We(){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 rc(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")||!wt(e,"inputMode")||!wt(e,"focusedRegion")||!wt(e,"activeTab")||!wt(e,"inspectorSection")||!wt(e,"inspectionMode")||!Vt(e,"openInspectionKind")||!Vt(e,"selectedFileTreePath")||!Vt(e,"selectedFilePath")||!Vt(e,"selectedDiffPath")||!sc(e,"collapsedFileTreePaths")||!wt(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 wt(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||typeof e[t]=="string")}function Vt(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||e[t]===null||typeof e[t]=="string")}function sc(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||Array.isArray(e[t])&&e[t].every(r=>typeof r=="string"))}function ic(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var kt=$e(()=>{"use strict";Fe()});import{execFile as nc}from"node:child_process";import{promisify as oc}from"node:util";async function Q(e,t,r={}){try{let s=await oi(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr}}catch(s){if(ai(s)){let o=s.stderr?.trim()||s.stdout?.trim()||s.message;throw new Error(`${e} ${t.join(" ")} failed: ${o}`)}throw s}}async function ae(e,t,r={}){try{let s=await oi(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr,exitCode:0}}catch(s){if(ai(s))return{stdout:s.stdout??"",stderr:s.stderr??"",exitCode:typeof s.code=="number"?s.code:null};throw s}}function ai(e){return e instanceof Error}var oi,Ie=$e(()=>{"use strict";oi=oc(nc)});import{readFile as Sc,readdir as Tc,rm as Rc}from"node:fs/promises";import wi from"node:path";async function Le(e,t){let r=await Sc(Yt(e,t),"utf8"),s=JSON.parse(r);return Cc(s,Yt(e,t))}async function Jt(e,t){await le(Yt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function dt(e){let t=await Tc(e.reposDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Le(e,wi.basename(s.name,".json"))))).sort((s,o)=>s.name.localeCompare(o.name)||s.id.localeCompare(o.id))}async function ki(e,t){await Rc(Yt(e,t),{force:!0})}function Yt(e,t){return wi.join(e.reposDir,`${t}.json`)}function Cc(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}var ut=$e(()=>{"use strict";Fe()});import{readFile as Pc,readdir as Ic,rm as xc}from"node:fs/promises";import bi from"node:path";async function Ct(e,t){let r=await Pc(Qt(e,t),"utf8"),s=JSON.parse(r);return Ec(s,Qt(e,t))}async function bt(e,t){await le(Qt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function Me(e){let t=await Ic(e.workspacesDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Ct(e,bi.basename(s.name,".json"))))).sort((s,o)=>s.id.localeCompare(o.id))}async function yi(e,t){await xc(Qt(e,t),{force:!0})}function Qt(e,t){return bi.join(e.workspacesDir,`${t}.json`)}function Ec(e,t){let r=Ac(e);if(typeof r!="object"||r===null||typeof r.id!="string"||r.kind!=="repo"&&r.kind!=="project"||typeof r.name!="string"||typeof r.rootPath!="string"||typeof r.primaryRepoId!="string"||typeof r.branch!="string"||r.status!=="active"&&r.status!=="archived"||!Array.isArray(r.linkedRepoIds)||!(r.linkedRepoIds??[]).every(s=>typeof s=="string")||!(r.repoId===void 0||typeof r.repoId=="string")||!Array.isArray(r.discoveredRepoIds)||!(r.discoveredRepoIds??[]).every(s=>typeof s=="string")||!(r.archivedAt===null||typeof r.archivedAt=="string")||typeof r.createdAt!="string"||typeof r.updatedAt!="string")throw new Error(`Craig workspace record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function Ac(e){if(typeof e!="object"||e===null)return e;let t=e,r=t.repoId??t.primaryRepoId;return{...t,kind:t.kind??"repo",name:t.name??r??t.id,rootPath:t.rootPath??"",primaryRepoId:t.primaryRepoId??r??"",repoId:t.kind==="project"?t.repoId:r,discoveredRepoIds:Array.isArray(t.discoveredRepoIds)?t.discoveredRepoIds.filter(s=>typeof s=="string"):t.kind==="project"?[]:r?[r]:[],linkedRepoIds:Array.isArray(t.linkedRepoIds)?t.linkedRepoIds.filter(s=>typeof s=="string"):[]}}var Pt=$e(()=>{"use strict";Fe()});async function Ne(e,t){let r=await Re(e),s=[],o=[];await Promise.all(r.taskIds.map(async n=>{try{s.push(await Ce(e,n))}catch(l){if(Fc(l)){o.push(n);return}throw l}}));let y=(t?.includeClosed?s:s.filter(n=>n.status!=="closed")).filter(n=>!(t?.workspaceId&&n.workspaceId!==t.workspaceId||t?.repoId&&n.repoId!==t.repoId&&!(n.repoTargets??[]).some(l=>l.repoId===t.repoId)));return y.sort((n,l)=>n.id.localeCompare(l.id)),o.sort(),{kind:"listTasks",tasks:y,missingTaskIds:o,repoId:t?.repoId??null}}function Fc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var At=$e(()=>{"use strict";at();_e()});var nn={};ma(nn,{addWorkspace:()=>Ot,archiveWorkspace:()=>Bt,listWorkspaces:()=>cs,removeWorkspace:()=>$t,removeWorkspaceRecord:()=>nr,restoreWorkspace:()=>ls});import{readdir as ul,realpath as Ji,stat as hl}from"node:fs/promises";import Qe from"node:path";async function Ot(e,t){let r=Qe.resolve(e.workspaceRoot,t);if(!(await hl(r).catch(()=>null))?.isDirectory())throw new Error(`Workspace path does not exist: ${r}`);return await tn(r)?fl(e,r):pl(e,r)}async function cs(e,t){return{kind:"listWorkspaces",workspaces:(await Me(e)).filter(s=>s.status===(t.archived?"archived":"active")),archivedOnly:t.archived}}async function Bt(e,t){let s={...await Ct(e,t),status:"archived",archivedAt:new Date().toISOString()};return await bt(e,s),await sn(e,t),{kind:"archiveWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function ls(e,t){let s={...await Ct(e,t),status:"active",archivedAt:null};await bt(e,s);let o=await De({uiStateFile:e.uiStateFile})??null;return await Pe({uiStateFile:e.uiStateFile},{...o??We(),selectedWorkspaceId:s.id,selectedRepoId:s.kind==="project"?s.discoveredRepoIds?.[0]??null:s.primaryRepoId,selectedTaskId:null}),{kind:"restoreWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function $t(e,t){let r=await Ct(e,t),s=await Ne(e,{workspaceId:t,includeClosed:!0});if(r.status==="active")throw new Error(`Cannot remove workspace ${t} while it is active. Archive it first.`);if(s.tasks.length>0)throw new Error(`Cannot remove workspace ${t} while task records still reference it.`);return await nr(e,t),await sn(e,t),{kind:"removeWorkspace",workspaceId:r.id,rootPath:r.rootPath??""}}async function fl(e,t){let r=await rn(t),s=await dt(e),o=s.find(a=>a.rootPath===t)??null,m=o??Qi(s,t,r),y=`workspace_${m.id}`,l=(await Me(e)).find(a=>a.id===y)??null,f=new Date().toISOString(),k=l??{id:y,kind:"repo",name:m.name,rootPath:t,primaryRepoId:m.id,repoId:m.id,discoveredRepoIds:[m.id],branch:r,status:"active",linkedRepoIds:[],archivedAt:null,createdAt:f,updatedAt:f};return o||await Jt(e,m),l||await bt(e,k),await Zi(e,{repoIds:[m.id],workspaceIds:[k.id]}),await en(e,k,m.id),{kind:"createWorkspace",workspace:k,repos:[m],created:!l}}async function pl(e,t){let r=await gl(e,t);if(r.length===0)throw new Error(`Workspace path does not contain direct child Git repos: ${t}`);let s=await Me(e),o=_l(s,Qe.basename(t)),m=s.find(f=>f.kind==="project"&&f.rootPath===t)??null,y=new Date().toISOString(),n=r.map(f=>f.id),l=m?{...m,discoveredRepoIds:n,primaryRepoId:n[0]??m.primaryRepoId,status:"active",archivedAt:null}:{id:o,kind:"project",name:Qe.basename(t),rootPath:t,primaryRepoId:n[0]??"",discoveredRepoIds:n,branch:"project",status:"active",linkedRepoIds:n,archivedAt:null,createdAt:y,updatedAt:y};return await Promise.all(r.map(f=>Jt(e,f))),await bt(e,l),await Zi(e,{repoIds:n,workspaceIds:[l.id]}),await en(e,l,n[0]??null),{kind:"createWorkspace",workspace:l,repos:r,created:!m}}async function gl(e,t){let r=await ul(t,{withFileTypes:!0}),s=await dt(e),o=[];for(let m of r){if(!m.isDirectory()||m.name.startsWith("."))continue;let y=Qe.join(t,m.name);if(!await tn(y))continue;let n=s.find(l=>l.rootPath===y)??o.find(l=>l.rootPath===y);o.push(n??Qi([...s,...o],y,await rn(y)))}return o.sort((m,y)=>m.name.localeCompare(y.name)||m.id.localeCompare(y.id))}function Qi(e,t,r){let s=new Date().toISOString();return{id:ml(e,Qe.basename(t)),name:Qe.basename(t),rootPath:t,defaultBranch:r,createdAt:s,updatedAt:s}}function ml(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"repo",s=`repo_${r}`,o=2;for(;e.some(m=>m.id===s);)s=`repo_${r}_${o}`,o+=1;return s}function _l(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"workspace",s=`workspace_${r}`,o=2;for(;e.some(m=>m.id===s);)s=`workspace_${r}_${o}`,o+=1;return s}async function Zi(e,t){let r=await Re(e);await ot(e,{...r,repoIds:[...new Set([...r.repoIds,...t.repoIds])],workspaceIds:[...new Set([...r.workspaceIds,...t.workspaceIds])]})}async function en(e,t,r){await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),selectedRepoId:r,selectedWorkspaceId:t.id,selectedTaskId:null})}async function tn(e){try{let r=(await Q("git",["rev-parse","--show-toplevel"],{cwd:e})).stdout.trim(),[s,o]=await Promise.all([Ji(r).catch(()=>Qe.resolve(r)),Ji(e).catch(()=>Qe.resolve(e))]);return s===o}catch{return!1}}async function rn(e){let r=(await Q("git",["branch","--show-current"],{cwd:e})).stdout.trim();return r.length>0?r:"HEAD"}async function nr(e,t){await yi(e,t);let r=await Re(e);await ot(e,{...r,workspaceIds:r.workspaceIds.filter(s=>s!==t)})}async function sn(e,t){let r=await De({uiStateFile:e.uiStateFile});!r||r.selectedWorkspaceId!==t||await Pe({uiStateFile:e.uiStateFile},{...r,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null})}var Ft=$e(()=>{"use strict";at();ut();Pt();kt();Ie();At()});var lo=ga(co=>{(()=>{"use strict";var e={5639:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CircularList=void 0;let f=l(7150),k=l(802);class a extends f.Disposable{constructor(c){super(),this._maxLength=c,this.onDeleteEmitter=this._register(new k.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new k.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new k.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 i=c;i<this._length-g;i++)this._array[this._getCyclicIndex(i)]=this._array[this._getCyclicIndex(i+g)];this._length-=g,this.onDeleteEmitter.fire({index:c,amount:g})}for(let i=this._length-1;i>=c;i--)this._array[this._getCyclicIndex(i+_.length)]=this._array[this._getCyclicIndex(i)];for(let i=0;i<_.length;i++)this._array[this._getCyclicIndex(c+i)]=_[i];if(_.length&&this.onInsertEmitter.fire({index:c,amount:_.length}),this._length+_.length>this._maxLength){let i=this._length+_.length-this._maxLength;this._startIndex+=i,this._length=this._maxLength,this.onTrimEmitter.fire(i)}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 p=g-1;p>=0;p--)this.set(c+p+_,this.get(c+p));let i=c+g+_-this._length;if(i>0)for(this._length+=i;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let i=0;i<g;i++)this.set(c+i+_,this.get(c+i))}}_getCyclicIndex(c){return(this._startIndex+c)%this._maxLength}}n.CircularList=a},7453:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.clone=function l(f,k=5){if(typeof f!="object")return f;let a=Array.isArray(f)?[]:{};for(let w in f)a[w]=k<=1?f[w]:f[w]&&l(f[w],k-1);return a}},5777:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CoreTerminal=void 0;let f=l(6501),k=l(6025),a=l(7276),w=l(9640),c=l(56),g=l(4071),_=l(7792),i=l(6415),p=l(5746),h=l(5882),d=l(2486),u=l(3562),b=l(8811),S=l(802),P=l(7150),E=!1;class H extends P.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new S.Emitter),this._onScroll.event((D=>{this._onScrollApi?.fire(D.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(D){for(let x in D)this.optionsService.options[x]=D[x]}constructor(D){super(),this._windowsWrappingHeuristics=this._register(new P.MutableDisposable),this._onBinary=this._register(new S.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new S.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new S.Emitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this._register(new S.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new S.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new S.Emitter),this._instantiationService=new k.InstantiationService,this.optionsService=this._register(new c.OptionsService(D)),this._instantiationService.setService(f.IOptionsService,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(w.BufferService)),this._instantiationService.setService(f.IBufferService,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(a.LogService)),this._instantiationService.setService(f.ILogService,this._logService),this.coreService=this._register(this._instantiationService.createInstance(g.CoreService)),this._instantiationService.setService(f.ICoreService,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(_.CoreMouseService)),this._instantiationService.setService(f.ICoreMouseService,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(i.UnicodeService)),this._instantiationService.setService(f.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(p.CharsetService),this._instantiationService.setService(f.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(b.OscLinkService),this._instantiationService.setService(f.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new d.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register(S.Event.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register(S.Event.forward(this._bufferService.onResize,this._onResize)),this._register(S.Event.forward(this.coreService.onData,this._onData)),this._register(S.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(((x,A)=>this._inputHandler.parse(x,A)))),this._register(S.Event.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(D,x){this._writeBuffer.write(D,x)}writeSync(D,x){this._logService.logLevel<=f.LogLevelEnum.WARN&&!E&&(this._logService.warn("writeSync is unreliable and will be removed soon."),E=!0),this._writeBuffer.writeSync(D,x)}input(D,x=!0){this.coreService.triggerDataEvent(D,x)}resize(D,x){isNaN(D)||isNaN(x)||(D=Math.max(D,w.MINIMUM_COLS),x=Math.max(x,w.MINIMUM_ROWS),this._bufferService.resize(D,x))}scroll(D,x=!1){this._bufferService.scroll(D,x)}scrollLines(D,x){this._bufferService.scrollLines(D,x)}scrollPages(D){this.scrollLines(D*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(D){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(D){let x=D-this._bufferService.buffer.ydisp;x!==0&&this.scrollLines(x)}registerEscHandler(D,x){return this._inputHandler.registerEscHandler(D,x)}registerDcsHandler(D,x){return this._inputHandler.registerDcsHandler(D,x)}registerCsiHandler(D,x){return this._inputHandler.registerCsiHandler(D,x)}registerOscHandler(D,x){return this._inputHandler.registerOscHandler(D,x)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let D=!1,x=this.optionsService.rawOptions.windowsPty;x&&x.buildNumber!==void 0&&x.buildNumber!==void 0?D=x.backend==="conpty"&&x.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(D=!0),D?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let D=[];D.push(this.onLineFeed(h.updateWindowsModeWrappedState.bind(null,this._bufferService))),D.push(this.registerCsiHandler({final:"H"},(()=>((0,h.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,P.toDisposable)((()=>{for(let x of D)x.dispose()}))}}}n.CoreTerminal=H},2486:function(y,n,l){var f=this&&this.__decorate||function(q,v,C,T){var R,F=arguments.length,j=F<3?v:T===null?T=Object.getOwnPropertyDescriptor(v,C):T;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")j=Reflect.decorate(q,v,C,T);else for(var U=q.length-1;U>=0;U--)(R=q[U])&&(j=(F<3?R(j):F>3?R(v,C,j):R(v,C))||j);return F>3&&j&&Object.defineProperty(v,C,j),j},k=this&&this.__param||function(q,v){return function(C,T){v(C,T,q)}};Object.defineProperty(n,"__esModule",{value:!0}),n.InputHandler=n.WindowsOptionsReportType=void 0,n.isValidColorIndex=N;let a=l(3534),w=l(6760),c=l(6717),g=l(7150),_=l(726),i=l(6107),p=l(8938),h=l(3055),d=l(5451),u=l(6501),b=l(6415),S=l(1346),P=l(9823),E=l(8693),H=l(802),$={"(":0,")":1,"*":2,"+":3,"-":1,".":2},D=131072;function x(q,v){if(q>24)return v.setWinLines||!1;switch(q){case 1:return!!v.restoreWin;case 2:return!!v.minimizeWin;case 3:return!!v.setWinPosition;case 4:return!!v.setWinSizePixels;case 5:return!!v.raiseWin;case 6:return!!v.lowerWin;case 7:return!!v.refreshWin;case 8:return!!v.setWinSizeChars;case 9:return!!v.maximizeWin;case 10:return!!v.fullscreenWin;case 11:return!!v.getWinState;case 13:return!!v.getWinPosition;case 14:return!!v.getWinSizePixels;case 15:return!!v.getScreenSizePixels;case 16:return!!v.getCellSizePixels;case 18:return!!v.getWinSizeChars;case 19:return!!v.getScreenSizeChars;case 20:return!!v.getIconTitle;case 21:return!!v.getWinTitle;case 22:return!!v.pushTitle;case 23:return!!v.popTitle;case 24:return!!v.setWinLines}return!1}var A;(function(q){q[q.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",q[q.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(A||(n.WindowsOptionsReportType=A={}));let L=0;class z extends g.Disposable{getAttrData(){return this._curAttrData}constructor(v,C,T,R,F,j,U,V,te=new c.EscapeSequenceParser){super(),this._bufferService=v,this._charsetService=C,this._coreService=T,this._logService=R,this._optionsService=F,this._oscLinkService=j,this._coreMouseService=U,this._unicodeService=V,this._parser=te,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new _.StringToUtf32,this._utf8Decoder=new _.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=i.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=i.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new H.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new H.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new H.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new H.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new H.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new H.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new H.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new H.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new H.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new H.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new H.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new H.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new H.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 X(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate((I=>this._activeBuffer=I.activeBuffer))),this._parser.setCsiHandlerFallback(((I,Z)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(I),params:Z.toArray()})})),this._parser.setEscHandlerFallback((I=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(I)})})),this._parser.setExecuteHandlerFallback((I=>{this._logService.debug("Unknown EXECUTE code: ",{code:I})})),this._parser.setOscHandlerFallback(((I,Z,Y)=>{this._logService.debug("Unknown OSC code: ",{identifier:I,action:Z,data:Y})})),this._parser.setDcsHandlerFallback(((I,Z,Y)=>{Z==="HOOK"&&(Y=Y.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(I),action:Z,payload:Y})})),this._parser.setPrintHandler(((I,Z,Y)=>this.print(I,Z,Y))),this._parser.registerCsiHandler({final:"@"},(I=>this.insertChars(I))),this._parser.registerCsiHandler({intermediates:" ",final:"@"},(I=>this.scrollLeft(I))),this._parser.registerCsiHandler({final:"A"},(I=>this.cursorUp(I))),this._parser.registerCsiHandler({intermediates:" ",final:"A"},(I=>this.scrollRight(I))),this._parser.registerCsiHandler({final:"B"},(I=>this.cursorDown(I))),this._parser.registerCsiHandler({final:"C"},(I=>this.cursorForward(I))),this._parser.registerCsiHandler({final:"D"},(I=>this.cursorBackward(I))),this._parser.registerCsiHandler({final:"E"},(I=>this.cursorNextLine(I))),this._parser.registerCsiHandler({final:"F"},(I=>this.cursorPrecedingLine(I))),this._parser.registerCsiHandler({final:"G"},(I=>this.cursorCharAbsolute(I))),this._parser.registerCsiHandler({final:"H"},(I=>this.cursorPosition(I))),this._parser.registerCsiHandler({final:"I"},(I=>this.cursorForwardTab(I))),this._parser.registerCsiHandler({final:"J"},(I=>this.eraseInDisplay(I,!1))),this._parser.registerCsiHandler({prefix:"?",final:"J"},(I=>this.eraseInDisplay(I,!0))),this._parser.registerCsiHandler({final:"K"},(I=>this.eraseInLine(I,!1))),this._parser.registerCsiHandler({prefix:"?",final:"K"},(I=>this.eraseInLine(I,!0))),this._parser.registerCsiHandler({final:"L"},(I=>this.insertLines(I))),this._parser.registerCsiHandler({final:"M"},(I=>this.deleteLines(I))),this._parser.registerCsiHandler({final:"P"},(I=>this.deleteChars(I))),this._parser.registerCsiHandler({final:"S"},(I=>this.scrollUp(I))),this._parser.registerCsiHandler({final:"T"},(I=>this.scrollDown(I))),this._parser.registerCsiHandler({final:"X"},(I=>this.eraseChars(I))),this._parser.registerCsiHandler({final:"Z"},(I=>this.cursorBackwardTab(I))),this._parser.registerCsiHandler({final:"`"},(I=>this.charPosAbsolute(I))),this._parser.registerCsiHandler({final:"a"},(I=>this.hPositionRelative(I))),this._parser.registerCsiHandler({final:"b"},(I=>this.repeatPrecedingCharacter(I))),this._parser.registerCsiHandler({final:"c"},(I=>this.sendDeviceAttributesPrimary(I))),this._parser.registerCsiHandler({prefix:">",final:"c"},(I=>this.sendDeviceAttributesSecondary(I))),this._parser.registerCsiHandler({final:"d"},(I=>this.linePosAbsolute(I))),this._parser.registerCsiHandler({final:"e"},(I=>this.vPositionRelative(I))),this._parser.registerCsiHandler({final:"f"},(I=>this.hVPosition(I))),this._parser.registerCsiHandler({final:"g"},(I=>this.tabClear(I))),this._parser.registerCsiHandler({final:"h"},(I=>this.setMode(I))),this._parser.registerCsiHandler({prefix:"?",final:"h"},(I=>this.setModePrivate(I))),this._parser.registerCsiHandler({final:"l"},(I=>this.resetMode(I))),this._parser.registerCsiHandler({prefix:"?",final:"l"},(I=>this.resetModePrivate(I))),this._parser.registerCsiHandler({final:"m"},(I=>this.charAttributes(I))),this._parser.registerCsiHandler({final:"n"},(I=>this.deviceStatus(I))),this._parser.registerCsiHandler({prefix:"?",final:"n"},(I=>this.deviceStatusPrivate(I))),this._parser.registerCsiHandler({intermediates:"!",final:"p"},(I=>this.softReset(I))),this._parser.registerCsiHandler({intermediates:" ",final:"q"},(I=>this.setCursorStyle(I))),this._parser.registerCsiHandler({final:"r"},(I=>this.setScrollRegion(I))),this._parser.registerCsiHandler({final:"s"},(I=>this.saveCursor(I))),this._parser.registerCsiHandler({final:"t"},(I=>this.windowOptions(I))),this._parser.registerCsiHandler({final:"u"},(I=>this.restoreCursor(I))),this._parser.registerCsiHandler({intermediates:"'",final:"}"},(I=>this.insertColumns(I))),this._parser.registerCsiHandler({intermediates:"'",final:"~"},(I=>this.deleteColumns(I))),this._parser.registerCsiHandler({intermediates:'"',final:"q"},(I=>this.selectProtected(I))),this._parser.registerCsiHandler({intermediates:"$",final:"p"},(I=>this.requestMode(I,!0))),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},(I=>this.requestMode(I,!1))),this._parser.setExecuteHandler(a.C0.BEL,(()=>this.bell())),this._parser.setExecuteHandler(a.C0.LF,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.VT,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.FF,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.CR,(()=>this.carriageReturn())),this._parser.setExecuteHandler(a.C0.BS,(()=>this.backspace())),this._parser.setExecuteHandler(a.C0.HT,(()=>this.tab())),this._parser.setExecuteHandler(a.C0.SO,(()=>this.shiftOut())),this._parser.setExecuteHandler(a.C0.SI,(()=>this.shiftIn())),this._parser.setExecuteHandler(a.C1.IND,(()=>this.index())),this._parser.setExecuteHandler(a.C1.NEL,(()=>this.nextLine())),this._parser.setExecuteHandler(a.C1.HTS,(()=>this.tabSet())),this._parser.registerOscHandler(0,new S.OscHandler((I=>(this.setTitle(I),this.setIconName(I),!0)))),this._parser.registerOscHandler(1,new S.OscHandler((I=>this.setIconName(I)))),this._parser.registerOscHandler(2,new S.OscHandler((I=>this.setTitle(I)))),this._parser.registerOscHandler(4,new S.OscHandler((I=>this.setOrReportIndexedColor(I)))),this._parser.registerOscHandler(8,new S.OscHandler((I=>this.setHyperlink(I)))),this._parser.registerOscHandler(10,new S.OscHandler((I=>this.setOrReportFgColor(I)))),this._parser.registerOscHandler(11,new S.OscHandler((I=>this.setOrReportBgColor(I)))),this._parser.registerOscHandler(12,new S.OscHandler((I=>this.setOrReportCursorColor(I)))),this._parser.registerOscHandler(104,new S.OscHandler((I=>this.restoreIndexedColor(I)))),this._parser.registerOscHandler(110,new S.OscHandler((I=>this.restoreFgColor(I)))),this._parser.registerOscHandler(111,new S.OscHandler((I=>this.restoreBgColor(I)))),this._parser.registerOscHandler(112,new S.OscHandler((I=>this.restoreCursorColor(I)))),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 I in w.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:I},(()=>this.selectCharset("("+I))),this._parser.registerEscHandler({intermediates:")",final:I},(()=>this.selectCharset(")"+I))),this._parser.registerEscHandler({intermediates:"*",final:I},(()=>this.selectCharset("*"+I))),this._parser.registerEscHandler({intermediates:"+",final:I},(()=>this.selectCharset("+"+I))),this._parser.registerEscHandler({intermediates:"-",final:I},(()=>this.selectCharset("-"+I))),this._parser.registerEscHandler({intermediates:".",final:I},(()=>this.selectCharset("."+I))),this._parser.registerEscHandler({intermediates:"/",final:I},(()=>this.selectCharset("/"+I)));this._parser.registerEscHandler({intermediates:"#",final:"8"},(()=>this.screenAlignmentPattern())),this._parser.setErrorHandler((I=>(this._logService.error("Parsing error: ",I),I))),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new P.DcsHandler(((I,Z)=>this.requestStatusString(I,Z))))}_preserveStack(v,C,T,R){this._parseStack.paused=!0,this._parseStack.cursorStartX=v,this._parseStack.cursorStartY=C,this._parseStack.decodedLength=T,this._parseStack.position=R}_logSlowResolvingAsync(v){this._logService.logLevel<=u.LogLevelEnum.WARN&&Promise.race([v,new Promise(((C,T)=>setTimeout((()=>T("#SLOW_TIMEOUT")),5e3)))]).catch((C=>{if(C!=="#SLOW_TIMEOUT")throw C;console.warn("async parser handler taking longer than 5000 ms")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(v,C){let T,R=this._activeBuffer.x,F=this._activeBuffer.y,j=0,U=this._parseStack.paused;if(U){if(T=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,C))return this._logSlowResolvingAsync(T),T;R=this._parseStack.cursorStartX,F=this._parseStack.cursorStartY,this._parseStack.paused=!1,v.length>D&&(j=this._parseStack.position+D)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+(typeof v=="string"?` "${v}"`:` "${Array.prototype.map.call(v,(I=>String.fromCharCode(I))).join("")}"`)),this._logService.logLevel===u.LogLevelEnum.TRACE&&this._logService.trace("parsing data (codes)",typeof v=="string"?v.split("").map((I=>I.charCodeAt(0))):v),this._parseBuffer.length<v.length&&this._parseBuffer.length<D&&(this._parseBuffer=new Uint32Array(Math.min(v.length,D))),U||this._dirtyRowTracker.clearRange(),v.length>D)for(let I=j;I<v.length;I+=D){let Z=I+D<v.length?I+D:v.length,Y=typeof v=="string"?this._stringDecoder.decode(v.substring(I,Z),this._parseBuffer):this._utf8Decoder.decode(v.subarray(I,Z),this._parseBuffer);if(T=this._parser.parse(this._parseBuffer,Y))return this._preserveStack(R,F,Y,I),this._logSlowResolvingAsync(T),T}else if(!U){let I=typeof v=="string"?this._stringDecoder.decode(v,this._parseBuffer):this._utf8Decoder.decode(v,this._parseBuffer);if(T=this._parser.parse(this._parseBuffer,I))return this._preserveStack(R,F,I,0),this._logSlowResolvingAsync(T),T}this._activeBuffer.x===R&&this._activeBuffer.y===F||this._onCursorMove.fire();let V=this._dirtyRowTracker.end+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp),te=this._dirtyRowTracker.start+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp);te<this._bufferService.rows&&this._onRequestRefreshRows.fire({start:Math.min(te,this._bufferService.rows-1),end:Math.min(V,this._bufferService.rows-1)})}print(v,C,T){let R,F,j=this._charsetService.charset,U=this._optionsService.rawOptions.screenReaderMode,V=this._bufferService.cols,te=this._coreService.decPrivateModes.wraparound,I=this._coreService.modes.insertMode,Z=this._curAttrData,Y=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._activeBuffer.x&&T-C>0&&Y.getWidth(this._activeBuffer.x-1)===2&&Y.setCellFromCodepoint(this._activeBuffer.x-1,0,1,Z);let ee=this._parser.precedingJoinState;for(let we=C;we<T;++we){if(R=v[we],R<127&&j){let Ue=j[String.fromCharCode(R)];Ue&&(R=Ue.charCodeAt(0))}let ke=this._unicodeService.charProperties(R,ee);F=b.UnicodeService.extractWidth(ke);let Xe=b.UnicodeService.extractShouldJoin(ke),xe=Xe?b.UnicodeService.extractWidth(ee):0;if(ee=ke,U&&this._onA11yChar.fire((0,_.stringFromCodePoint)(R)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+F-xe>V){if(te){let Ue=Y,st=this._activeBuffer.x-xe;for(this._activeBuffer.x=xe,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),xe>0&&Y instanceof i.BufferLine&&Y.copyCellsFrom(Ue,st,0,xe,!1);st<V;)Ue.setCellFromCodepoint(st++,0,1,Z)}else if(this._activeBuffer.x=V-1,F===2)continue}if(Xe&&this._activeBuffer.x){let Ue=Y.getWidth(this._activeBuffer.x-1)?1:2;Y.addCodepointToCell(this._activeBuffer.x-Ue,R,F);for(let st=F-xe;--st>=0;)Y.setCellFromCodepoint(this._activeBuffer.x++,0,0,Z)}else if(I&&(Y.insertCells(this._activeBuffer.x,F-xe,this._activeBuffer.getNullCell(Z)),Y.getWidth(V-1)===2&&Y.setCellFromCodepoint(V-1,p.NULL_CELL_CODE,p.NULL_CELL_WIDTH,Z)),Y.setCellFromCodepoint(this._activeBuffer.x++,R,F,Z),F>0)for(;--F;)Y.setCellFromCodepoint(this._activeBuffer.x++,0,0,Z)}this._parser.precedingJoinState=ee,this._activeBuffer.x<V&&T-C>0&&Y.getWidth(this._activeBuffer.x)===0&&!Y.hasContent(this._activeBuffer.x)&&Y.setCellFromCodepoint(this._activeBuffer.x,0,1,Z),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(v,C){return v.final!=="t"||v.prefix||v.intermediates?this._parser.registerCsiHandler(v,C):this._parser.registerCsiHandler(v,(T=>!x(T.params[0],this._optionsService.rawOptions.windowOptions)||C(T)))}registerDcsHandler(v,C){return this._parser.registerDcsHandler(v,new P.DcsHandler(C))}registerEscHandler(v,C){return this._parser.registerEscHandler(v,C)}registerOscHandler(v,C){return this._parser.registerOscHandler(v,new S.OscHandler(C))}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 v=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);v.hasWidth(this._activeBuffer.x)&&!v.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let v=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-v),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(v=this._bufferService.cols-1){this._activeBuffer.x=Math.min(v,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(v,C){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=v,this._activeBuffer.y=this._activeBuffer.scrollTop+C):(this._activeBuffer.x=v,this._activeBuffer.y=C),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(v,C){this._restrictCursor(),this._setCursor(this._activeBuffer.x+v,this._activeBuffer.y+C)}cursorUp(v){let C=this._activeBuffer.y-this._activeBuffer.scrollTop;return C>=0?this._moveCursor(0,-Math.min(C,v.params[0]||1)):this._moveCursor(0,-(v.params[0]||1)),!0}cursorDown(v){let C=this._activeBuffer.scrollBottom-this._activeBuffer.y;return C>=0?this._moveCursor(0,Math.min(C,v.params[0]||1)):this._moveCursor(0,v.params[0]||1),!0}cursorForward(v){return this._moveCursor(v.params[0]||1,0),!0}cursorBackward(v){return this._moveCursor(-(v.params[0]||1),0),!0}cursorNextLine(v){return this.cursorDown(v),this._activeBuffer.x=0,!0}cursorPrecedingLine(v){return this.cursorUp(v),this._activeBuffer.x=0,!0}cursorCharAbsolute(v){return this._setCursor((v.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(v){return this._setCursor(v.length>=2?(v.params[1]||1)-1:0,(v.params[0]||1)-1),!0}charPosAbsolute(v){return this._setCursor((v.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(v){return this._moveCursor(v.params[0]||1,0),!0}linePosAbsolute(v){return this._setCursor(this._activeBuffer.x,(v.params[0]||1)-1),!0}vPositionRelative(v){return this._moveCursor(0,v.params[0]||1),!0}hVPosition(v){return this.cursorPosition(v),!0}tabClear(v){let C=v.params[0];return C===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:C===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let C=v.params[0]||1;for(;C--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let C=v.params[0]||1;for(;C--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(v){let C=v.params[0];return C===1&&(this._curAttrData.bg|=536870912),C!==2&&C!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(v,C,T,R=!1,F=!1){let j=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);j.replaceCells(C,T,this._activeBuffer.getNullCell(this._eraseAttrData()),F),R&&(j.isWrapped=!1)}_resetBufferLine(v,C=!1){let T=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);T&&(T.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),C),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+v),T.isWrapped=!1)}eraseInDisplay(v,C=!1){let T;switch(this._restrictCursor(this._bufferService.cols),v.params[0]){case 0:for(T=this._activeBuffer.y,this._dirtyRowTracker.markDirty(T),this._eraseInBufferLine(T++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,C);T<this._bufferService.rows;T++)this._resetBufferLine(T,C);this._dirtyRowTracker.markDirty(T);break;case 1:for(T=this._activeBuffer.y,this._dirtyRowTracker.markDirty(T),this._eraseInBufferLine(T,0,this._activeBuffer.x+1,!0,C),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(T+1).isWrapped=!1);T--;)this._resetBufferLine(T,C);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(T=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,T-1);T--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+T)?.getTrimmedLength(););for(;T>=0;T--)this._bufferService.scroll(this._eraseAttrData())}else{for(T=this._bufferService.rows,this._dirtyRowTracker.markDirty(T-1);T--;)this._resetBufferLine(T,C);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(v,C=!1){switch(this._restrictCursor(this._bufferService.cols),v.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,C);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,C);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,C)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(v){this._restrictCursor();let C=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let T=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(;C--;)this._activeBuffer.lines.splice(F-1,1),this._activeBuffer.lines.splice(T,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}deleteLines(v){this._restrictCursor();let C=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let T=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;C--;)this._activeBuffer.lines.splice(T,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(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.insertCells(this._activeBuffer.x,v.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}deleteChars(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.deleteCells(this._activeBuffer.x,v.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(v){let C=v.params[0]||1;for(;C--;)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(v){let C=v.params[0]||1;for(;C--;)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(i.DEFAULT_ATTR_DATA));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollLeft(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.deleteCells(0,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollRight(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.insertCells(0,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}insertColumns(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.insertCells(this._activeBuffer.x,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.deleteCells(this._activeBuffer.x,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(v.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}repeatPrecedingCharacter(v){let C=this._parser.precedingJoinState;if(!C)return!0;let T=v.params[0]||1,R=b.UnicodeService.extractWidth(C),F=this._activeBuffer.x-R,j=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString(F),U=new Uint32Array(j.length*T),V=0;for(let I=0;I<j.length;){let Z=j.codePointAt(I)||0;U[V++]=Z,I+=Z>65535?2:1}let te=V;for(let I=1;I<T;++I)U.copyWithin(te,0,V),te+=V;return this.print(U,0,te),!0}sendDeviceAttributesPrimary(v){return v.params[0]>0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(a.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(a.C0.ESC+"[?6c")),!0}sendDeviceAttributesSecondary(v){return v.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(a.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(a.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(v.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(a.C0.ESC+"[>83;40003;0c")),!0}_is(v){return(this._optionsService.rawOptions.termName+"").indexOf(v)===0}setMode(v){for(let C=0;C<v.length;C++)switch(v.params[C]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0}return!0}setModePrivate(v){for(let C=0;C<v.length;C++)switch(v.params[C]){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(v){for(let C=0;C<v.length;C++)switch(v.params[C]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1}return!0}resetModePrivate(v){for(let C=0;C<v.length;C++)switch(v.params[C]){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(),v.params[C]===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(v,C){let T=this._coreService.decPrivateModes,{activeProtocol:R,activeEncoding:F}=this._coreMouseService,j=this._coreService,{buffers:U,cols:V}=this._bufferService,{active:te,alt:I}=U,Z=this._optionsService.rawOptions,Y=Xe=>Xe?1:2,ee=v.params[0];return we=ee,ke=C?ee===2?4:ee===4?Y(j.modes.insertMode):ee===12?3:ee===20?Y(Z.convertEol):0:ee===1?Y(T.applicationCursorKeys):ee===3?Z.windowOptions.setWinLines?V===80?2:V===132?1:0:0:ee===6?Y(T.origin):ee===7?Y(T.wraparound):ee===8?3:ee===9?Y(R==="X10"):ee===12?Y(Z.cursorBlink):ee===25?Y(!j.isCursorHidden):ee===45?Y(T.reverseWraparound):ee===66?Y(T.applicationKeypad):ee===67?4:ee===1e3?Y(R==="VT200"):ee===1002?Y(R==="DRAG"):ee===1003?Y(R==="ANY"):ee===1004?Y(T.sendFocus):ee===1005?4:ee===1006?Y(F==="SGR"):ee===1015?4:ee===1016?Y(F==="SGR_PIXELS"):ee===1048?1:ee===47||ee===1047||ee===1049?Y(te===I):ee===2004?Y(T.bracketedPasteMode):ee===2026?Y(T.synchronizedOutput):0,j.triggerDataEvent(`${a.C0.ESC}[${C?"":"?"}${we};${ke}$y`),!0;var we,ke}_updateAttrColor(v,C,T,R,F){return C===2?(v|=50331648,v&=-16777216,v|=d.AttributeData.fromColorRGB([T,R,F])):C===5&&(v&=-50331904,v|=33554432|255&T),v}_extractColor(v,C,T){let R=[0,0,-1,0,0,0],F=0,j=0;do{if(R[j+F]=v.params[C+j],v.hasSubParams(C+j)){let U=v.getSubParams(C+j),V=0;do R[1]===5&&(F=1),R[j+V+1+F]=U[V];while(++V<U.length&&V+j+1+F<R.length);break}if(R[1]===5&&j+F>=2||R[1]===2&&j+F>=5)break;R[1]&&(F=1)}while(++j+C<v.length&&j+F<R.length);for(let U=2;U<R.length;++U)R[U]===-1&&(R[U]=0);switch(R[0]){case 38:T.fg=this._updateAttrColor(T.fg,R[1],R[3],R[4],R[5]);break;case 48:T.bg=this._updateAttrColor(T.bg,R[1],R[3],R[4],R[5]);break;case 58:T.extended=T.extended.clone(),T.extended.underlineColor=this._updateAttrColor(T.extended.underlineColor,R[1],R[3],R[4],R[5])}return j}_processUnderline(v,C){C.extended=C.extended.clone(),(!~v||v>5)&&(v=1),C.extended.underlineStyle=v,C.fg|=268435456,v===0&&(C.fg&=-268435457),C.updateExtended()}_processSGR0(v){v.fg=i.DEFAULT_ATTR_DATA.fg,v.bg=i.DEFAULT_ATTR_DATA.bg,v.extended=v.extended.clone(),v.extended.underlineStyle=0,v.extended.underlineColor&=-67108864,v.updateExtended()}charAttributes(v){if(v.length===1&&v.params[0]===0)return this._processSGR0(this._curAttrData),!0;let C=v.length,T,R=this._curAttrData;for(let F=0;F<C;F++)T=v.params[F],T>=30&&T<=37?(R.fg&=-50331904,R.fg|=16777216|T-30):T>=40&&T<=47?(R.bg&=-50331904,R.bg|=16777216|T-40):T>=90&&T<=97?(R.fg&=-50331904,R.fg|=16777224|T-90):T>=100&&T<=107?(R.bg&=-50331904,R.bg|=16777224|T-100):T===0?this._processSGR0(R):T===1?R.fg|=134217728:T===3?R.bg|=67108864:T===4?(R.fg|=268435456,this._processUnderline(v.hasSubParams(F)?v.getSubParams(F)[0]:1,R)):T===5?R.fg|=536870912:T===7?R.fg|=67108864:T===8?R.fg|=1073741824:T===9?R.fg|=2147483648:T===2?R.bg|=134217728:T===21?this._processUnderline(2,R):T===22?(R.fg&=-134217729,R.bg&=-134217729):T===23?R.bg&=-67108865:T===24?(R.fg&=-268435457,this._processUnderline(0,R)):T===25?R.fg&=-536870913:T===27?R.fg&=-67108865:T===28?R.fg&=-1073741825:T===29?R.fg&=2147483647:T===39?(R.fg&=-67108864,R.fg|=16777215&i.DEFAULT_ATTR_DATA.fg):T===49?(R.bg&=-67108864,R.bg|=16777215&i.DEFAULT_ATTR_DATA.bg):T===38||T===48||T===58?F+=this._extractColor(v,F,R):T===53?R.bg|=1073741824:T===55?R.bg&=-1073741825:T===59?(R.extended=R.extended.clone(),R.extended.underlineColor=-1,R.updateExtended()):T===100?(R.fg&=-67108864,R.fg|=16777215&i.DEFAULT_ATTR_DATA.fg,R.bg&=-67108864,R.bg|=16777215&i.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",T);return!0}deviceStatus(v){switch(v.params[0]){case 5:this._coreService.triggerDataEvent(`${a.C0.ESC}[0n`);break;case 6:let C=this._activeBuffer.y+1,T=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[${C};${T}R`)}return!0}deviceStatusPrivate(v){if(v.params[0]===6){let C=this._activeBuffer.y+1,T=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[?${C};${T}R`)}return!0}softReset(v){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=i.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(v){let C=v.length===0?1:v.params[0];if(C===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(C){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 T=C%2==1;this._coreService.decPrivateModes.cursorBlink=T}return!0}setScrollRegion(v){let C=v.params[0]||1,T;return(v.length<2||(T=v.params[1])>this._bufferService.rows||T===0)&&(T=this._bufferService.rows),T>C&&(this._activeBuffer.scrollTop=C-1,this._activeBuffer.scrollBottom=T-1,this._setCursor(0,0)),!0}windowOptions(v){if(!x(v.params[0],this._optionsService.rawOptions.windowOptions))return!0;let C=v.length>1?v.params[1]:0;switch(v.params[0]){case 14:C!==2&&this._onRequestWindowsOptionsReport.fire(A.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(A.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${a.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:C!==0&&C!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),C!==0&&C!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:C!==0&&C!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),C!==0&&C!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(v){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(v){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(v){return this._windowTitle=v,this._onTitleChange.fire(v),!0}setIconName(v){return this._iconName=v,!0}setOrReportIndexedColor(v){let C=[],T=v.split(";");for(;T.length>1;){let R=T.shift(),F=T.shift();if(/^\d+$/.exec(R)){let j=parseInt(R);if(N(j))if(F==="?")C.push({type:0,index:j});else{let U=(0,E.parseColor)(F);U&&C.push({type:1,index:j,color:U})}}}return C.length&&this._onColor.fire(C),!0}setHyperlink(v){let C=v.indexOf(";");if(C===-1)return!0;let T=v.slice(0,C).trim(),R=v.slice(C+1);return R?this._createHyperlink(T,R):!T.trim()&&this._finishHyperlink()}_createHyperlink(v,C){this._getCurrentLinkId()&&this._finishHyperlink();let T=v.split(":"),R,F=T.findIndex((j=>j.startsWith("id=")));return F!==-1&&(R=T[F].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:R,uri:C}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(v,C){let T=v.split(";");for(let R=0;R<T.length&&!(C>=this._specialColors.length);++R,++C)if(T[R]==="?")this._onColor.fire([{type:0,index:this._specialColors[C]}]);else{let F=(0,E.parseColor)(T[R]);F&&this._onColor.fire([{type:1,index:this._specialColors[C],color:F}])}return!0}setOrReportFgColor(v){return this._setOrReportSpecialColor(v,0)}setOrReportBgColor(v){return this._setOrReportSpecialColor(v,1)}setOrReportCursorColor(v){return this._setOrReportSpecialColor(v,2)}restoreIndexedColor(v){if(!v)return this._onColor.fire([{type:2}]),!0;let C=[],T=v.split(";");for(let R=0;R<T.length;++R)if(/^\d+$/.exec(T[R])){let F=parseInt(T[R]);N(F)&&C.push({type:2,index:F})}return C.length&&this._onColor.fire(C),!0}restoreFgColor(v){return this._onColor.fire([{type:2,index:256}]),!0}restoreBgColor(v){return this._onColor.fire([{type:2,index:257}]),!0}restoreCursorColor(v){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(v){return v.length!==2?(this.selectDefaultCharset(),!0):(v[0]==="/"||this._charsetService.setgCharset($[v[0]],w.CHARSETS[v[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 v=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,v,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=i.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=i.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(v){return this._charsetService.setgLevel(v),!0}screenAlignmentPattern(){let v=new h.CellData;v.content=4194373,v.fg=this._curAttrData.fg,v.bg=this._curAttrData.bg,this._setCursor(0,0);for(let C=0;C<this._bufferService.rows;++C){let T=this._activeBuffer.ybase+this._activeBuffer.y+C,R=this._activeBuffer.lines.get(T);R&&(R.fill(v),R.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(v,C){let T=this._bufferService.buffer,R=this._optionsService.rawOptions;return(F=>(this._coreService.triggerDataEvent(`${a.C0.ESC}${F}${a.C0.ESC}\\`),!0))(v==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:v==='"p'?'P1$r61;1"p':v==="r"?`P1$r${T.scrollTop+1};${T.scrollBottom+1}r`:v==="m"?"P1$r0m":v===" q"?`P1$r${{block:2,underline:4,bar:6}[R.cursorStyle]-(R.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(v,C){this._dirtyRowTracker.markRangeDirty(v,C)}}n.InputHandler=z;let X=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,v){q>v&&(L=q,q=v,v=L),q<this.start&&(this.start=q),v>this.end&&(this.end=v)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function N(q){return 0<=q&&q<256}X=f([k(0,u.IBufferService)],X)},701:(y,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 k=l.match(/Version\/(\d+)/);return k===null||k.length<2?0:parseInt(k[1])},n.isNode=typeof process<"u"&&"title"in process;let l=n.isNode?"node":navigator.userAgent,f=n.isNode?"node":navigator.platform;n.isFirefox=l.includes("Firefox"),n.isLegacyEdge=l.includes("Edge"),n.isSafari=/^((?!chrome|android).)*safari/i.test(l),n.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(f),n.isIpad=f==="iPad",n.isIphone=f==="iPhone",n.isWindows=["Windows","Win16","Win32","WinCE"].includes(f),n.isLinux=f.indexOf("Linux")>=0,n.isChromeOS=/\bCrOS\b/.test(l)},6168:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DebouncedIdleTask=n.IdleTaskQueue=n.PriorityTaskQueue=void 0;let f=l(701);class k{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,i=c.timeRemaining(),p=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,_),p=c.timeRemaining(),1.5*_>p)return i-g<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(i-g))}ms`),void this._start();i=p}this.clear()}}class a extends k{_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=a,n.IdleTaskQueue=!f.isNode&&"requestIdleCallback"in window?class extends k{_requestCallback(w){return requestIdleCallback(w)}_cancelCallback(w){cancelIdleCallback(w)}}:a,n.DebouncedIdleTask=class{constructor(){this._queue=new n.IdleTaskQueue}set(w){this._queue.clear(),this._queue.enqueue(w)}flush(){this._queue.flush()}}},5882:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.updateWindowsModeWrappedState=function(k){let a=k.buffer.lines.get(k.buffer.ybase+k.buffer.y-1),w=a?.get(k.cols-1),c=k.buffer.lines.get(k.buffer.ybase+k.buffer.y);c&&w&&(c.isWrapped=w[f.CHAR_DATA_CODE_INDEX]!==f.NULL_CELL_CODE&&w[f.CHAR_DATA_CODE_INDEX]!==f.WHITESPACE_CELL_CODE)};let f=l(8938)},5451:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ExtendedAttrs=n.AttributeData=void 0;class l{constructor(){this.fg=0,this.bg=0,this.extended=new f}static toColorRGB(a){return[a>>>16&255,a>>>8&255,255&a]}static fromColorRGB(a){return(255&a[0])<<16|(255&a[1])<<8|255&a[2]}clone(){let a=new l;return a.fg=this.fg,a.bg=this.bg,a.extended=this.extended.clone(),a}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=l;class f{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(a){this._ext=a}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(a){this._ext&=-469762049,this._ext|=a<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(a){this._ext&=-67108864,this._ext|=67108863&a}get urlId(){return this._urlId}set urlId(a){this._urlId=a}get underlineVariantOffset(){let a=(3758096384&this._ext)>>29;return a<0?4294967288^a:a}set underlineVariantOffset(a){this._ext&=536870911,this._ext|=a<<29&3758096384}constructor(a=0,w=0){this._ext=0,this._urlId=0,this._ext=a,this._urlId=w}clone(){return new f(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}n.ExtendedAttrs=f},1073:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Buffer=n.MAX_BUFFER_SIZE=void 0;let f=l(5639),k=l(6168),a=l(5451),w=l(6107),c=l(732),g=l(3055),_=l(8938),i=l(8158),p=l(6760);n.MAX_BUFFER_SIZE=4294967295,n.Buffer=class{constructor(h,d,u){this._hasScrollback=h,this._optionsService=d,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=p.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 k.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new f.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(h){return h?(this._nullCell.fg=h.fg,this._nullCell.bg=h.bg,this._nullCell.extended=h.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new a.ExtendedAttrs),this._nullCell}getWhitespaceCell(h){return h?(this._whitespaceCell.fg=h.fg,this._whitespaceCell.bg=h.bg,this._whitespaceCell.extended=h.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new a.ExtendedAttrs),this._whitespaceCell}getBlankLine(h,d){return new w.BufferLine(this._bufferService.cols,this.getNullCell(h),d)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let h=this.ybase+this.y-this.ydisp;return h>=0&&h<this._rows}_getCorrectBufferLength(h){if(!this._hasScrollback)return h;let d=h+this._optionsService.rawOptions.scrollback;return d>n.MAX_BUFFER_SIZE?n.MAX_BUFFER_SIZE:d}fillViewportRows(h){if(this.lines.length===0){h===void 0&&(h=w.DEFAULT_ATTR_DATA);let d=this._rows;for(;d--;)this.lines.push(this.getBlankLine(h))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new f.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(h,d){let u=this.getNullCell(w.DEFAULT_ATTR_DATA),b=0,S=this._getCorrectBufferLength(d);if(S>this.lines.maxLength&&(this.lines.maxLength=S),this.lines.length>0){if(this._cols<h)for(let E=0;E<this.lines.length;E++)b+=+this.lines.get(E).resize(h,u);let P=0;if(this._rows<d)for(let E=this._rows;E<d;E++)this.lines.length<d+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(h,u)):this.ybase>0&&this.lines.length<=this.ybase+this.y+P+1?(this.ybase--,P++,this.ydisp>0&&this.ydisp--):this.lines.push(new w.BufferLine(h,u)));else for(let E=this._rows;E>d;E--)this.lines.length>d+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(S<this.lines.maxLength){let E=this.lines.length-S;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=S}this.x=Math.min(this.x,h-1),this.y=Math.min(this.y,d-1),P&&(this.y+=P),this.savedX=Math.min(this.savedX,h-1),this.scrollTop=0}if(this.scrollBottom=d-1,this._isReflowEnabled&&(this._reflow(h,d),this._cols>h))for(let P=0;P<this.lines.length;P++)b+=+this.lines.get(P).resize(h,u);this._cols=h,this._rows=d,this._memoryCleanupQueue.clear(),b>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let h=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,h=!1);let d=0;for(;this._memoryCleanupPosition<this.lines.length;)if(d+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),d>100)return!0;return h}get _isReflowEnabled(){let h=this._optionsService.rawOptions.windowsPty;return h&&h.buildNumber?this._hasScrollback&&h.backend==="conpty"&&h.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(h,d){this._cols!==h&&(h>this._cols?this._reflowLarger(h,d):this._reflowSmaller(h,d))}_reflowLarger(h,d){let u=this._optionsService.rawOptions.reflowCursorLine,b=(0,c.reflowLargerGetLinesToRemove)(this.lines,this._cols,h,this.ybase+this.y,this.getNullCell(w.DEFAULT_ATTR_DATA),u);if(b.length>0){let S=(0,c.reflowLargerCreateNewLayout)(this.lines,b);(0,c.reflowLargerApplyNewLayout)(this.lines,S.layout),this._reflowLargerAdjustViewport(h,d,S.countRemoved)}}_reflowLargerAdjustViewport(h,d,u){let b=this.getNullCell(w.DEFAULT_ATTR_DATA),S=u;for(;S-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length<d&&this.lines.push(new w.BufferLine(h,b))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-u,0)}_reflowSmaller(h,d){let u=this._optionsService.rawOptions.reflowCursorLine,b=this.getNullCell(w.DEFAULT_ATTR_DATA),S=[],P=0;for(let E=this.lines.length-1;E>=0;E--){let H=this.lines.get(E);if(!H||!H.isWrapped&&H.getTrimmedLength()<=h)continue;let $=[H];for(;H.isWrapped&&E>0;)H=this.lines.get(--E),$.unshift(H);if(!u){let T=this.ybase+this.y;if(T>=E&&T<E+$.length)continue}let D=$[$.length-1].getTrimmedLength(),x=(0,c.reflowSmallerGetNewLineLengths)($,this._cols,h),A=x.length-$.length,L;L=this.ybase===0&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+A):Math.max(0,this.lines.length-this.lines.maxLength+A);let z=[];for(let T=0;T<A;T++){let R=this.getBlankLine(w.DEFAULT_ATTR_DATA,!0);z.push(R)}z.length>0&&(S.push({start:E+$.length+P,newLines:z}),P+=z.length),$.push(...z);let X=x.length-1,N=x[X];N===0&&(X--,N=x[X]);let q=$.length-A-1,v=D;for(;q>=0;){let T=Math.min(v,N);if($[X]===void 0)break;if($[X].copyCellsFrom($[q],v-T,N-T,T,!0),N-=T,N===0&&(X--,N=x[X]),v-=T,v===0){q--;let R=Math.max(q,0);v=(0,c.getWrappedLineTrimmedLength)($,R,this._cols)}}for(let T=0;T<$.length;T++)x[T]<h&&$[T].setCell(x[T],b);let C=A-L;for(;C-- >0;)this.ybase===0?this.y<d-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+P)-d&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+A,this.ybase+d-1)}if(S.length>0){let E=[],H=[];for(let N=0;N<this.lines.length;N++)H.push(this.lines.get(N));let $=this.lines.length,D=$-1,x=0,A=S[x];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+P);let L=0;for(let N=Math.min(this.lines.maxLength-1,$+P-1);N>=0;N--)if(A&&A.start>D+L){for(let q=A.newLines.length-1;q>=0;q--)this.lines.set(N--,A.newLines[q]);N++,E.push({index:D+1,amount:A.newLines.length}),L+=A.newLines.length,A=S[++x]}else this.lines.set(N,H[D--]);let z=0;for(let N=E.length-1;N>=0;N--)E[N].index+=z,this.lines.onInsertEmitter.fire(E[N]),z+=E[N].amount;let X=Math.max(0,$+P-this.lines.maxLength);X>0&&this.lines.onTrimEmitter.fire(X)}}translateBufferLineToString(h,d,u=0,b){let S=this.lines.get(h);return S?S.translateToString(d,u,b):""}getWrappedRangeForLine(h){let d=h,u=h;for(;d>0&&this.lines.get(d).isWrapped;)d--;for(;u+1<this.lines.length&&this.lines.get(u+1).isWrapped;)u++;return{first:d,last:u}}setupTabStops(h){for(h!=null?this.tabs[h]||(h=this.prevStop(h)):(this.tabs={},h=0);h<this._cols;h+=this._optionsService.rawOptions.tabStopWidth)this.tabs[h]=!0}prevStop(h){for(h==null&&(h=this.x);!this.tabs[--h]&&h>0;);return h>=this._cols?this._cols-1:h<0?0:h}nextStop(h){for(h==null&&(h=this.x);!this.tabs[++h]&&h<this._cols;);return h>=this._cols?this._cols-1:h<0?0:h}clearMarkers(h){this._isClearing=!0;for(let d=0;d<this.markers.length;d++)this.markers[d].line===h&&(this.markers[d].dispose(),this.markers.splice(d--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let h=0;h<this.markers.length;h++)this.markers[h].dispose();this.markers.length=0,this._isClearing=!1}addMarker(h){let d=new i.Marker(h);return this.markers.push(d),d.register(this.lines.onTrim((u=>{d.line-=u,d.line<0&&d.dispose()}))),d.register(this.lines.onInsert((u=>{d.line>=u.index&&(d.line+=u.amount)}))),d.register(this.lines.onDelete((u=>{d.line>=u.index&&d.line<u.index+u.amount&&d.dispose(),d.line>u.index&&(d.line-=u.amount)}))),d.register(d.onDispose((()=>this._removeMarker(d)))),d}_removeMarker(h){this._isClearing||this.markers.splice(this.markers.indexOf(h),1)}}},6107:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferLine=n.DEFAULT_ATTR_DATA=void 0;let f=l(5451),k=l(3055),a=l(8938),w=l(726);n.DEFAULT_ATTR_DATA=Object.freeze(new f.AttributeData);let c=0;class g{constructor(i,p,h=!1){this.isWrapped=h,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*i);let d=p||k.CellData.fromCharData([0,a.NULL_CELL_CHAR,a.NULL_CELL_WIDTH,a.NULL_CELL_CODE]);for(let u=0;u<i;++u)this.setCell(u,d);this.length=i}get(i){let p=this._data[3*i+0],h=2097151&p;return[this._data[3*i+1],2097152&p?this._combined[i]:h?(0,w.stringFromCodePoint)(h):"",p>>22,2097152&p?this._combined[i].charCodeAt(this._combined[i].length-1):h]}set(i,p){this._data[3*i+1]=p[a.CHAR_DATA_ATTR_INDEX],p[a.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[i]=p[1],this._data[3*i+0]=2097152|i|p[a.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*i+0]=p[a.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|p[a.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(i){return this._data[3*i+0]>>22}hasWidth(i){return 12582912&this._data[3*i+0]}getFg(i){return this._data[3*i+1]}getBg(i){return this._data[3*i+2]}hasContent(i){return 4194303&this._data[3*i+0]}getCodePoint(i){let p=this._data[3*i+0];return 2097152&p?this._combined[i].charCodeAt(this._combined[i].length-1):2097151&p}isCombined(i){return 2097152&this._data[3*i+0]}getString(i){let p=this._data[3*i+0];return 2097152&p?this._combined[i]:2097151&p?(0,w.stringFromCodePoint)(2097151&p):""}isProtected(i){return 536870912&this._data[3*i+2]}loadCell(i,p){return c=3*i,p.content=this._data[c+0],p.fg=this._data[c+1],p.bg=this._data[c+2],2097152&p.content&&(p.combinedData=this._combined[i]),268435456&p.bg&&(p.extended=this._extendedAttrs[i]),p}setCell(i,p){2097152&p.content&&(this._combined[i]=p.combinedData),268435456&p.bg&&(this._extendedAttrs[i]=p.extended),this._data[3*i+0]=p.content,this._data[3*i+1]=p.fg,this._data[3*i+2]=p.bg}setCellFromCodepoint(i,p,h,d){268435456&d.bg&&(this._extendedAttrs[i]=d.extended),this._data[3*i+0]=p|h<<22,this._data[3*i+1]=d.fg,this._data[3*i+2]=d.bg}addCodepointToCell(i,p,h){let d=this._data[3*i+0];2097152&d?this._combined[i]+=(0,w.stringFromCodePoint)(p):2097151&d?(this._combined[i]=(0,w.stringFromCodePoint)(2097151&d)+(0,w.stringFromCodePoint)(p),d&=-2097152,d|=2097152):d=p|4194304,h&&(d&=-12582913,d|=h<<22),this._data[3*i+0]=d}insertCells(i,p,h){if((i%=this.length)&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length-i){let d=new k.CellData;for(let u=this.length-i-p-1;u>=0;--u)this.setCell(i+p+u,this.loadCell(i+u,d));for(let u=0;u<p;++u)this.setCell(i+u,h)}else for(let d=i;d<this.length;++d)this.setCell(d,h);this.getWidth(this.length-1)===2&&this.setCellFromCodepoint(this.length-1,0,1,h)}deleteCells(i,p,h){if(i%=this.length,p<this.length-i){let d=new k.CellData;for(let u=0;u<this.length-i-p;++u)this.setCell(i+u,this.loadCell(i+p+u,d));for(let u=this.length-p;u<this.length;++u)this.setCell(u,h)}else for(let d=i;d<this.length;++d)this.setCell(d,h);i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),this.getWidth(i)!==0||this.hasContent(i)||this.setCellFromCodepoint(i,0,1,h)}replaceCells(i,p,h,d=!1){if(d)for(i&&this.getWidth(i-1)===2&&!this.isProtected(i-1)&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length&&this.getWidth(p-1)===2&&!this.isProtected(p)&&this.setCellFromCodepoint(p,0,1,h);i<p&&i<this.length;)this.isProtected(i)||this.setCell(i,h),i++;else for(i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length&&this.getWidth(p-1)===2&&this.setCellFromCodepoint(p,0,1,h);i<p&&i<this.length;)this.setCell(i++,h)}resize(i,p){if(i===this.length)return 4*this._data.length*2<this._data.buffer.byteLength;let h=3*i;if(i>this.length){if(this._data.buffer.byteLength>=4*h)this._data=new Uint32Array(this._data.buffer,0,h);else{let d=new Uint32Array(h);d.set(this._data),this._data=d}for(let d=this.length;d<i;++d)this.setCell(d,p)}else{this._data=this._data.subarray(0,h);let d=Object.keys(this._combined);for(let b=0;b<d.length;b++){let S=parseInt(d[b],10);S>=i&&delete this._combined[S]}let u=Object.keys(this._extendedAttrs);for(let b=0;b<u.length;b++){let S=parseInt(u[b],10);S>=i&&delete this._extendedAttrs[S]}}return this.length=i,4*h*2<this._data.buffer.byteLength}cleanupMemory(){if(4*this._data.length*2<this._data.buffer.byteLength){let i=new Uint32Array(this._data.length);return i.set(this._data),this._data=i,1}return 0}fill(i,p=!1){if(p)for(let h=0;h<this.length;++h)this.isProtected(h)||this.setCell(h,i);else{this._combined={},this._extendedAttrs={};for(let h=0;h<this.length;++h)this.setCell(h,i)}}copyFrom(i){this.length!==i.length?this._data=new Uint32Array(i._data):this._data.set(i._data),this.length=i.length,this._combined={};for(let p in i._combined)this._combined[p]=i._combined[p];this._extendedAttrs={};for(let p in i._extendedAttrs)this._extendedAttrs[p]=i._extendedAttrs[p];this.isWrapped=i.isWrapped}clone(){let i=new g(0);i._data=new Uint32Array(this._data),i.length=this.length;for(let p in this._combined)i._combined[p]=this._combined[p];for(let p in this._extendedAttrs)i._extendedAttrs[p]=this._extendedAttrs[p];return i.isWrapped=this.isWrapped,i}getTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(4194303&this._data[3*i+0])return i+(this._data[3*i+0]>>22);return 0}getNoBgTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(4194303&this._data[3*i+0]||50331648&this._data[3*i+2])return i+(this._data[3*i+0]>>22);return 0}copyCellsFrom(i,p,h,d,u){let b=i._data;if(u)for(let P=d-1;P>=0;P--){for(let E=0;E<3;E++)this._data[3*(h+P)+E]=b[3*(p+P)+E];268435456&b[3*(p+P)+2]&&(this._extendedAttrs[h+P]=i._extendedAttrs[p+P])}else for(let P=0;P<d;P++){for(let E=0;E<3;E++)this._data[3*(h+P)+E]=b[3*(p+P)+E];268435456&b[3*(p+P)+2]&&(this._extendedAttrs[h+P]=i._extendedAttrs[p+P])}let S=Object.keys(i._combined);for(let P=0;P<S.length;P++){let E=parseInt(S[P],10);E>=p&&(this._combined[E-p+h]=i._combined[E])}}translateToString(i,p,h,d){p=p??0,h=h??this.length,i&&(h=Math.min(h,this.getTrimmedLength())),d&&(d.length=0);let u="";for(;p<h;){let b=this._data[3*p+0],S=2097151&b,P=2097152&b?this._combined[p]:S?(0,w.stringFromCodePoint)(S):a.WHITESPACE_CELL_CHAR;if(u+=P,d)for(let E=0;E<P.length;++E)d.push(p);p+=b>>22||1}return d&&d.push(p),u}}n.BufferLine=g},732:(y,n)=>{function l(f,k,a){if(k===f.length-1)return f[k].getTrimmedLength();let w=!f[k].hasContent(a-1)&&f[k].getWidth(a-1)===1,c=f[k+1].getWidth(0)===2;return w&&c?a-1:a}Object.defineProperty(n,"__esModule",{value:!0}),n.reflowLargerGetLinesToRemove=function(f,k,a,w,c,g){let _=[];for(let i=0;i<f.length-1;i++){let p=i,h=f.get(++p);if(!h.isWrapped)continue;let d=[f.get(i)];for(;p<f.length&&h.isWrapped;)d.push(h),h=f.get(++p);if(!g&&w>=i&&w<p){i+=d.length-1;continue}let u=0,b=l(d,u,k),S=1,P=0;for(;S<d.length;){let H=l(d,S,k),$=H-P,D=a-b,x=Math.min($,D);d[u].copyCellsFrom(d[S],P,b,x,!1),b+=x,b===a&&(u++,b=0),P+=x,P===H&&(S++,P=0),b===0&&u!==0&&d[u-1].getWidth(a-1)===2&&(d[u].copyCellsFrom(d[u-1],a-1,b++,1,!1),d[u-1].setCell(a-1,c))}d[u].replaceCells(b,a,c);let E=0;for(let H=d.length-1;H>0&&(H>u||d[H].getTrimmedLength()===0);H--)E++;E>0&&(_.push(i+d.length-E),_.push(E)),i+=d.length-1}return _},n.reflowLargerCreateNewLayout=function(f,k){let a=[],w=0,c=k[w],g=0;for(let _=0;_<f.length;_++)if(c===_){let i=k[++w];f.onDeleteEmitter.fire({index:_-g,amount:i}),_+=i-1,g+=i,c=k[++w]}else a.push(_);return{layout:a,countRemoved:g}},n.reflowLargerApplyNewLayout=function(f,k){let a=[];for(let w=0;w<k.length;w++)a.push(f.get(k[w]));for(let w=0;w<a.length;w++)f.set(w,a[w]);f.length=k.length},n.reflowSmallerGetNewLineLengths=function(f,k,a){let w=[],c=f.map(((p,h)=>l(f,h,k))).reduce(((p,h)=>p+h)),g=0,_=0,i=0;for(;i<c;){if(c-i<a){w.push(c-i);break}g+=a;let p=l(f,_,k);g>p&&(g-=p,_++);let h=f[_].getWidth(g-1)===2;h&&g--;let d=h?a-1:a;w.push(d),i+=d}return w},n.getWrappedLineTrimmedLength=l},4097:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferSet=void 0;let f=l(7150),k=l(1073),a=l(802);class w extends f.Disposable{constructor(g,_){super(),this._optionsService=g,this._bufferService=_,this._onBufferActivate=this._register(new a.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 k.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new k.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:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CellData=void 0;let f=l(726),k=l(8938),a=l(5451);class w extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.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,f.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(g){this.fg=g[k.CHAR_DATA_ATTR_INDEX],this.bg=0;let _=!1;if(g[k.CHAR_DATA_CHAR_INDEX].length>2)_=!0;else if(g[k.CHAR_DATA_CHAR_INDEX].length===2){let i=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){let p=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=p&&p<=57343?this.content=1024*(i-55296)+p-56320+65536|g[k.CHAR_DATA_WIDTH_INDEX]<<22:_=!0}else _=!0}else this.content=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|g[k.CHAR_DATA_WIDTH_INDEX]<<22;_&&(this.combinedData=g[k.CHAR_DATA_CHAR_INDEX],this.content=2097152|g[k.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}n.CellData=w},8938:(y,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:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Marker=void 0;let f=l(802),k=l(7150);class a{get id(){return this._id}constructor(c){this.line=c,this.isDisposed=!1,this._disposables=[],this._id=a._nextId++,this._onDispose=this.register(new f.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,k.dispose)(this._disposables),this._disposables.length=0)}register(c){return this._disposables.push(c),c}}n.Marker=a,a._nextId=1},6760:(y,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:(y,n)=>{var l,f,k;Object.defineProperty(n,"__esModule",{value:!0}),n.C1_ESCAPED=n.C1=n.C0=void 0,(function(a){a.NUL="\0",a.SOH="",a.STX="",a.ETX="",a.EOT="",a.ENQ="",a.ACK="",a.BEL="\x07",a.BS="\b",a.HT=" ",a.LF=`
4
4
  `,a.VT="\v",a.FF="\f",a.CR="\r",a.SO="",a.SI="",a.DLE="",a.DC1="",a.DC2="",a.DC3="",a.DC4="",a.NAK="",a.SYN="",a.ETB="",a.CAN="",a.EM="",a.SUB="",a.ESC="\x1B",a.FS="",a.GS="",a.RS="",a.US="",a.SP=" ",a.DEL="\x7F"})(l||(n.C0=l={})),(function(a){a.PAD="\x80",a.HOP="\x81",a.BPH="\x82",a.NBH="\x83",a.IND="\x84",a.NEL="\x85",a.SSA="\x86",a.ESA="\x87",a.HTS="\x88",a.HTJ="\x89",a.VTS="\x8A",a.PLD="\x8B",a.PLU="\x8C",a.RI="\x8D",a.SS2="\x8E",a.SS3="\x8F",a.DCS="\x90",a.PU1="\x91",a.PU2="\x92",a.STS="\x93",a.CCH="\x94",a.MW="\x95",a.SPA="\x96",a.EPA="\x97",a.SOS="\x98",a.SGCI="\x99",a.SCI="\x9A",a.CSI="\x9B",a.ST="\x9C",a.OSC="\x9D",a.PM="\x9E",a.APC="\x9F"})(f||(n.C1=f={})),(function(a){a.ST=`${l.ESC}\\`})(k||(n.C1_ESCAPED=k={}))},726:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Utf8ToUtf32=n.StringToUtf32=void 0,n.stringFromCodePoint=function(l){return l>65535?(l-=65536,String.fromCharCode(55296+(l>>10))+String.fromCharCode(l%1024+56320)):String.fromCharCode(l)},n.utf32ToString=function(l,f=0,k=l.length){let a="";for(let w=f;w<k;++w){let c=l[w];c>65535?(c-=65536,a+=String.fromCharCode(55296+(c>>10))+String.fromCharCode(c%1024+56320)):a+=String.fromCharCode(c)}return a},n.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(l,f){let k=l.length;if(!k)return 0;let a=0,w=0;if(this._interim){let c=l.charCodeAt(w++);56320<=c&&c<=57343?f[a++]=1024*(this._interim-55296)+c-56320+65536:(f[a++]=this._interim,f[a++]=c),this._interim=0}for(let c=w;c<k;++c){let g=l.charCodeAt(c);if(55296<=g&&g<=56319){if(++c>=k)return this._interim=g,a;let _=l.charCodeAt(c);56320<=_&&_<=57343?f[a++]=1024*(g-55296)+_-56320+65536:(f[a++]=g,f[a++]=_)}else g!==65279&&(f[a++]=g)}return a}},n.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(l,f){let k=l.length;if(!k)return 0;let a,w,c,g,_=0,i=0,p=0;if(this.interim[0]){let u=!1,b=this.interim[0];b&=(224&b)==192?31:(240&b)==224?15:7;let S,P=0;for(;(S=63&this.interim[++P])&&P<4;)b<<=6,b|=S;let E=(224&this.interim[0])==192?2:(240&this.interim[0])==224?3:4,H=E-P;for(;p<H;){if(p>=k)return 0;if(S=l[p++],(192&S)!=128){p--,u=!0;break}this.interim[P++]=S,b<<=6,b|=63&S}u||(E===2?b<128?p--:f[_++]=b:E===3?b<2048||b>=55296&&b<=57343||b===65279||(f[_++]=b):b<65536||b>1114111||(f[_++]=b)),this.interim.fill(0)}let h=k-4,d=p;for(;d<k;){for(;!(!(d<h)||128&(a=l[d])||128&(w=l[d+1])||128&(c=l[d+2])||128&(g=l[d+3]));)f[_++]=a,f[_++]=w,f[_++]=c,f[_++]=g,d+=4;if(a=l[d++],a<128)f[_++]=a;else if((224&a)==192){if(d>=k)return this.interim[0]=a,_;if(w=l[d++],(192&w)!=128){d--;continue}if(i=(31&a)<<6|63&w,i<128){d--;continue}f[_++]=i}else if((240&a)==224){if(d>=k)return this.interim[0]=a,_;if(w=l[d++],(192&w)!=128){d--;continue}if(d>=k)return this.interim[0]=a,this.interim[1]=w,_;if(c=l[d++],(192&c)!=128){d--;continue}if(i=(15&a)<<12|(63&w)<<6|63&c,i<2048||i>=55296&&i<=57343||i===65279)continue;f[_++]=i}else if((248&a)==240){if(d>=k)return this.interim[0]=a,_;if(w=l[d++],(192&w)!=128){d--;continue}if(d>=k)return this.interim[0]=a,this.interim[1]=w,_;if(c=l[d++],(192&c)!=128){d--;continue}if(d>=k)return this.interim[0]=a,this.interim[1]=w,this.interim[2]=c,_;if(g=l[d++],(192&g)!=128){d--;continue}if(i=(7&a)<<18|(63&w)<<12|(63&c)<<6|63&g,i<65536||i>1114111)continue;f[_++]=i}}return _}}},7428:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeV6=void 0;let f=l(6415),k=[[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]],a=[[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<k.length;++c)w.fill(0,k[c][0],k[c][1]+1)}}wcwidth(c){return c<32?0:c<127?1:c<65536?w[c]:(function(g,_){let i,p=0,h=_.length-1;if(g<_[0][0]||g>_[h][1])return!1;for(;h>=p;)if(i=p+h>>1,g>_[i][1])p=i+1;else{if(!(g<_[i][0]))return!0;h=i-1}return!1})(c,a)?0:c>=131072&&c<=196605||c>=196608&&c<=262141?2:1}charProperties(c,g){let _=this.wcwidth(c),i=_===0&&g!==0;if(i){let p=f.UnicodeService.extractWidth(g);p===0?i=!1:p>_&&(_=p)}return f.UnicodeService.createPropertyValue(0,_,i)}}},3562:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.WriteBuffer=void 0;let f=l(7150),k=l(802);class a extends f.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 k.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 i=this._callbacks.shift();i&&i()}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 i=this._writeBuffer[this._bufferOffset],p=this._action(i,g);if(p){let d=u=>performance.now()-_>=12?setTimeout((()=>this._innerWrite(0,u))):this._innerWrite(_,u);return void p.catch((u=>(queueMicrotask((()=>{throw u})),Promise.resolve(!1)))).then(d)}let h=this._callbacks[this._bufferOffset];if(h&&h(),this._bufferOffset++,this._pendingData-=i.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=a},8693:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.parseColor=function(a){if(!a)return;let w=a.toLowerCase();if(w.indexOf("rgb:")===0){w=w.slice(4);let c=l.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),f.exec(w)&&[3,6,9,12].includes(w.length))){let c=w.length/3,g=[0,0,0];for(let _=0;_<3;++_){let i=parseInt(w.slice(c*_,c*_+c),16);g[_]=c===1?i<<4:c===2?i:c===3?i>>4:i>>8}return g}},n.toRgbString=function(a,w=16){let[c,g,_]=a;return`rgb:${k(c,w)}/${k(g,w)}/${k(_,w)}`};let l=/^([\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})$/,f=/^[\da-f]+$/;function k(a,w){let c=a.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:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.PAYLOAD_LIMIT=void 0,n.PAYLOAD_LIMIT=1e7},9823:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DcsHandler=n.DcsParser=void 0;let f=l(726),k=l(7262),a=l(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 i=this._handlers[g];return i.push(_),{dispose:()=>{let p=i.indexOf(_);p!==-1&&i.splice(p,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 i=this._active.length-1;i>=0;i--)this._active[i].hook(_);else this._handlerFb(this._ident,"HOOK",_)}put(g,_,i){if(this._active.length)for(let p=this._active.length-1;p>=0;p--)this._active[p].put(g,_,i);else this._handlerFb(this._ident,"PUT",(0,f.utf32ToString)(g,_,i))}unhook(g,_=!0){if(this._active.length){let i=!1,p=this._active.length-1,h=!1;if(this._stack.paused&&(p=this._stack.loopPosition-1,i=_,h=this._stack.fallThrough,this._stack.paused=!1),!h&&i===!1){for(;p>=0&&(i=this._active[p].unhook(g),i!==!0);p--)if(i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=p,this._stack.fallThrough=!1,i;p--}for(;p>=0;p--)if(i=this._active[p].unhook(!1),i instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=p,this._stack.fallThrough=!0,i}else this._handlerFb(this._ident,"UNHOOK",g);this._active=w,this._ident=0}};let c=new k.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,_,i){this._hitLimit||(this._data+=(0,f.utf32ToString)(g,_,i),this._data.length>a.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((i=>(this._params=c,this._data="",this._hitLimit=!1,i)));return this._params=c,this._data="",this._hitLimit=!1,_}}},6717:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.EscapeSequenceParser=n.VT500_TRANSITION_TABLE=n.TransitionTable=void 0;let f=l(7150),k=l(7262),a=l(1346),w=l(9823);class c{constructor(p){this.table=new Uint8Array(p)}setDefault(p,h){this.table.fill(p<<4|h)}add(p,h,d,u){this.table[h<<8|p]=d<<4|u}addMany(p,h,d,u){for(let b=0;b<p.length;b++)this.table[h<<8|p[b]]=d<<4|u}}n.TransitionTable=c;let g=160;n.VT500_TRANSITION_TABLE=(function(){let i=new c(4095),p=Array.apply(null,Array(256)).map(((P,E)=>E)),h=(P,E)=>p.slice(P,E),d=h(32,127),u=h(0,24);u.push(25),u.push.apply(u,h(28,32));let b=h(0,14),S;for(S in i.setDefault(1,0),i.addMany(d,0,2,0),b)i.addMany([24,26,153,154],S,3,0),i.addMany(h(128,144),S,3,0),i.addMany(h(144,152),S,3,0),i.add(156,S,0,0),i.add(27,S,11,1),i.add(157,S,4,8),i.addMany([152,158,159],S,0,7),i.add(155,S,11,3),i.add(144,S,11,9);return i.addMany(u,0,3,0),i.addMany(u,1,3,1),i.add(127,1,0,1),i.addMany(u,8,0,8),i.addMany(u,3,3,3),i.add(127,3,0,3),i.addMany(u,4,3,4),i.add(127,4,0,4),i.addMany(u,6,3,6),i.addMany(u,5,3,5),i.add(127,5,0,5),i.addMany(u,2,3,2),i.add(127,2,0,2),i.add(93,1,4,8),i.addMany(d,8,5,8),i.add(127,8,5,8),i.addMany([156,27,24,26,7],8,6,0),i.addMany(h(28,32),8,0,8),i.addMany([88,94,95],1,0,7),i.addMany(d,7,0,7),i.addMany(u,7,0,7),i.add(156,7,0,0),i.add(127,7,0,7),i.add(91,1,11,3),i.addMany(h(64,127),3,7,0),i.addMany(h(48,60),3,8,4),i.addMany([60,61,62,63],3,9,4),i.addMany(h(48,60),4,8,4),i.addMany(h(64,127),4,7,0),i.addMany([60,61,62,63],4,0,6),i.addMany(h(32,64),6,0,6),i.add(127,6,0,6),i.addMany(h(64,127),6,0,0),i.addMany(h(32,48),3,9,5),i.addMany(h(32,48),5,9,5),i.addMany(h(48,64),5,0,6),i.addMany(h(64,127),5,7,0),i.addMany(h(32,48),4,9,5),i.addMany(h(32,48),1,9,2),i.addMany(h(32,48),2,9,2),i.addMany(h(48,127),2,10,0),i.addMany(h(48,80),1,10,0),i.addMany(h(81,88),1,10,0),i.addMany([89,90,92],1,10,0),i.addMany(h(96,127),1,10,0),i.add(80,1,11,9),i.addMany(u,9,0,9),i.add(127,9,0,9),i.addMany(h(28,32),9,0,9),i.addMany(h(32,48),9,9,12),i.addMany(h(48,60),9,8,10),i.addMany([60,61,62,63],9,9,10),i.addMany(u,11,0,11),i.addMany(h(32,128),11,0,11),i.addMany(h(28,32),11,0,11),i.addMany(u,10,0,10),i.add(127,10,0,10),i.addMany(h(28,32),10,0,10),i.addMany(h(48,60),10,8,10),i.addMany([60,61,62,63],10,0,11),i.addMany(h(32,48),10,9,12),i.addMany(u,12,0,12),i.add(127,12,0,12),i.addMany(h(28,32),12,0,12),i.addMany(h(32,48),12,9,12),i.addMany(h(48,64),12,0,11),i.addMany(h(64,127),12,12,13),i.addMany(h(64,127),10,12,13),i.addMany(h(64,127),9,12,13),i.addMany(u,13,13,13),i.addMany(d,13,13,13),i.add(127,13,0,13),i.addMany([27,156,24,26],13,14,0),i.add(g,0,2,0),i.add(g,8,5,8),i.add(g,6,0,6),i.add(g,11,0,11),i.add(g,13,13,13),i})();class _ extends f.Disposable{constructor(p=n.VT500_TRANSITION_TABLE){super(),this._transitions=p,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new k.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(h,d,u)=>{},this._executeHandlerFb=h=>{},this._csiHandlerFb=(h,d)=>{},this._escHandlerFb=h=>{},this._errorHandlerFb=h=>h,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register((0,f.toDisposable)((()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)}))),this._oscParser=this._register(new a.OscParser),this._dcsParser=this._register(new w.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},(()=>!0))}_identifier(p,h=[64,126]){let d=0;if(p.prefix){if(p.prefix.length>1)throw new Error("only one byte as prefix supported");if(d=p.prefix.charCodeAt(0),d&&60>d||d>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(p.intermediates){if(p.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let b=0;b<p.intermediates.length;++b){let S=p.intermediates.charCodeAt(b);if(32>S||S>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");d<<=8,d|=S}}if(p.final.length!==1)throw new Error("final must be a single byte");let u=p.final.charCodeAt(0);if(h[0]>u||u>h[1])throw new Error(`final must be in range ${h[0]} .. ${h[1]}`);return d<<=8,d|=u,d}identToString(p){let h=[];for(;p;)h.push(String.fromCharCode(255&p)),p>>=8;return h.reverse().join("")}setPrintHandler(p){this._printHandler=p}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(p,h){let d=this._identifier(p,[48,126]);this._escHandlers[d]===void 0&&(this._escHandlers[d]=[]);let u=this._escHandlers[d];return u.push(h),{dispose:()=>{let b=u.indexOf(h);b!==-1&&u.splice(b,1)}}}clearEscHandler(p){this._escHandlers[this._identifier(p,[48,126])]&&delete this._escHandlers[this._identifier(p,[48,126])]}setEscHandlerFallback(p){this._escHandlerFb=p}setExecuteHandler(p,h){this._executeHandlers[p.charCodeAt(0)]=h}clearExecuteHandler(p){this._executeHandlers[p.charCodeAt(0)]&&delete this._executeHandlers[p.charCodeAt(0)]}setExecuteHandlerFallback(p){this._executeHandlerFb=p}registerCsiHandler(p,h){let d=this._identifier(p);this._csiHandlers[d]===void 0&&(this._csiHandlers[d]=[]);let u=this._csiHandlers[d];return u.push(h),{dispose:()=>{let b=u.indexOf(h);b!==-1&&u.splice(b,1)}}}clearCsiHandler(p){this._csiHandlers[this._identifier(p)]&&delete this._csiHandlers[this._identifier(p)]}setCsiHandlerFallback(p){this._csiHandlerFb=p}registerDcsHandler(p,h){return this._dcsParser.registerHandler(this._identifier(p),h)}clearDcsHandler(p){this._dcsParser.clearHandler(this._identifier(p))}setDcsHandlerFallback(p){this._dcsParser.setHandlerFallback(p)}registerOscHandler(p,h){return this._oscParser.registerHandler(p,h)}clearOscHandler(p){this._oscParser.clearHandler(p)}setOscHandlerFallback(p){this._oscParser.setHandlerFallback(p)}setErrorHandler(p){this._errorHandler=p}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(p,h,d,u,b){this._parseStack.state=p,this._parseStack.handlers=h,this._parseStack.handlerPos=d,this._parseStack.transition=u,this._parseStack.chunkPos=b}parse(p,h,d){let u,b=0,S=0,P=0;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,P=this._parseStack.chunkPos+1;else{if(d===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,H=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(d===!1&&H>-1){for(;H>=0&&(u=E[H](this._params),u!==!0);H--)if(u instanceof Promise)return this._parseStack.handlerPos=H,u}this._parseStack.handlers=[];break;case 4:if(d===!1&&H>-1){for(;H>=0&&(u=E[H](),u!==!0);H--)if(u instanceof Promise)return this._parseStack.handlerPos=H,u}this._parseStack.handlers=[];break;case 6:if(b=p[this._parseStack.chunkPos],u=this._dcsParser.unhook(b!==24&&b!==26,d),u)return u;b===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(b=p[this._parseStack.chunkPos],u=this._oscParser.end(b!==24&&b!==26,d),u)return u;b===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,P=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=15&this._parseStack.transition}for(let E=P;E<h;++E){switch(b=p[E],S=this._transitions.table[this.currentState<<8|(b<160?b:g)],S>>4){case 2:for(let A=E+1;;++A){if(A>=h||(b=p[A])<32||b>126&&b<g){this._printHandler(p,E,A),E=A-1;break}if(++A>=h||(b=p[A])<32||b>126&&b<g){this._printHandler(p,E,A),E=A-1;break}if(++A>=h||(b=p[A])<32||b>126&&b<g){this._printHandler(p,E,A),E=A-1;break}if(++A>=h||(b=p[A])<32||b>126&&b<g){this._printHandler(p,E,A),E=A-1;break}}break;case 3:this._executeHandlers[b]?this._executeHandlers[b]():this._executeHandlerFb(b),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:E,code:b,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let H=this._csiHandlers[this._collect<<8|b],$=H?H.length-1:-1;for(;$>=0&&(u=H[$](this._params),u!==!0);$--)if(u instanceof Promise)return this._preserveStack(3,H,$,S,E),u;$<0&&this._csiHandlerFb(this._collect<<8|b,this._params),this.precedingJoinState=0;break;case 8:do switch(b){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(b-48)}while(++E<h&&(b=p[E])>47&&b<60);E--;break;case 9:this._collect<<=8,this._collect|=b;break;case 10:let D=this._escHandlers[this._collect<<8|b],x=D?D.length-1:-1;for(;x>=0&&(u=D[x](),u!==!0);x--)if(u instanceof Promise)return this._preserveStack(4,D,x,S,E),u;x<0&&this._escHandlerFb(this._collect<<8|b),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|b,this._params);break;case 13:for(let A=E+1;;++A)if(A>=h||(b=p[A])===24||b===26||b===27||b>127&&b<g){this._dcsParser.put(p,E,A),E=A-1;break}break;case 14:if(u=this._dcsParser.unhook(b!==24&&b!==26),u)return this._preserveStack(6,[],0,S,E),u;b===27&&(S|=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 A=E+1;;A++)if(A>=h||(b=p[A])<32||b>127&&b<g){this._oscParser.put(p,E,A),E=A-1;break}break;case 6:if(u=this._oscParser.end(b!==24&&b!==26),u)return this._preserveStack(5,[],0,S,E),u;b===27&&(S|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0}this.currentState=15&S}}}n.EscapeSequenceParser=_},1346:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.OscHandler=n.OscParser=void 0;let f=l(1263),k=l(726),a=[];n.OscParser=class{constructor(){this._state=0,this._active=a,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=a}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=a,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||a,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,k.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,i=!1;if(this._stack.paused&&(_=this._stack.loopPosition-1,g=c,i=this._stack.fallThrough,this._stack.paused=!1),!i&&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=a,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,k.utf32ToString)(w,c,g),this._data.length>f.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:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Params=void 0;let l=2147483647;class f{static fromArray(a){let w=new f;if(!a.length)return w;for(let c=Array.isArray(a[0])?1:0;c<a.length;++c){let g=a[c];if(Array.isArray(g))for(let _=0;_<g.length;++_)w.addSubParam(g[_]);else w.addParam(g)}return w}constructor(a=32,w=32){if(this.maxLength=a,this.maxSubParamsLength=w,w>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(a),this.length=0,this._subParams=new Int32Array(w),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(a),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){let a=new f(this.maxLength,this.maxSubParamsLength);return a.params.set(this.params),a.length=this.length,a._subParams.set(this._subParams),a._subParamsLength=this._subParamsLength,a._subParamsIdx.set(this._subParamsIdx),a._rejectDigits=this._rejectDigits,a._rejectSubDigits=this._rejectSubDigits,a._digitIsSub=this._digitIsSub,a}toArray(){let a=[];for(let w=0;w<this.length;++w){a.push(this.params[w]);let c=this._subParamsIdx[w]>>8,g=255&this._subParamsIdx[w];g-c>0&&a.push(Array.prototype.slice.call(this._subParams,c,g))}return a}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(a){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(a<-1)throw new Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=a>l?l:a}}addSubParam(a){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(a<-1)throw new Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]=a>l?l:a,this._subParamsIdx[this.length-1]++}}hasSubParams(a){return(255&this._subParamsIdx[a])-(this._subParamsIdx[a]>>8)>0}getSubParams(a){let w=this._subParamsIdx[a]>>8,c=255&this._subParamsIdx[a];return c-w>0?this._subParams.subarray(w,c):null}getSubParamsAll(){let a={};for(let w=0;w<this.length;++w){let c=this._subParamsIdx[w]>>8,g=255&this._subParamsIdx[w];g-c>0&&(a[w]=this._subParams.slice(c,g))}return a}addDigit(a){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+a,l):a}}n.Params=f},3027:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.AddonManager=void 0,n.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let l=this._addons.length-1;l>=0;l--)this._addons[l].instance.dispose()}loadAddon(l,f){let k={instance:f,dispose:f.dispose,isDisposed:!1};this._addons.push(k),f.dispose=()=>this._wrappedAddonDispose(k),f.activate(l)}_wrappedAddonDispose(l){if(l.isDisposed)return;let f=-1;for(let k=0;k<this._addons.length;k++)if(this._addons[k]===l){f=k;break}if(f===-1)throw new Error("Could not dispose an addon that has not been loaded");l.isDisposed=!0,l.dispose.apply(l.instance),this._addons.splice(f,1)}}},3235:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferApiView=void 0;let f=l(793),k=l(3055);n.BufferApiView=class{constructor(a,w){this._buffer=a,this.type=w}init(a){return this._buffer=a,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(a){let w=this._buffer.lines.get(a);if(w)return new f.BufferLineApiView(w)}getNullCell(){return new k.CellData}}},793:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferLineApiView=void 0;let f=l(3055);n.BufferLineApiView=class{constructor(k){this._line=k}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(k,a){if(!(k<0||k>=this._line.length))return a?(this._line.loadCell(k,a),a):this._line.loadCell(k,new f.CellData)}translateToString(k,a,w){return this._line.translateToString(k,a,w)}}},5101:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferNamespaceApi=void 0;let f=l(3235),k=l(7150),a=l(802);class w extends k.Disposable{constructor(g){super(),this._core=g,this._onBufferChange=this._register(new a.Emitter),this.onBufferChange=this._onBufferChange.event,this._normal=new f.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new f.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:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ParserApi=void 0,n.ParserApi=class{constructor(l){this._core=l}registerCsiHandler(l,f){return this._core.registerCsiHandler(l,(k=>f(k.toArray())))}addCsiHandler(l,f){return this.registerCsiHandler(l,f)}registerDcsHandler(l,f){return this._core.registerDcsHandler(l,((k,a)=>f(k,a.toArray())))}addDcsHandler(l,f){return this.registerDcsHandler(l,f)}registerEscHandler(l,f){return this._core.registerEscHandler(l,f)}addEscHandler(l,f){return this.registerEscHandler(l,f)}registerOscHandler(l,f){return this._core.registerOscHandler(l,f)}addOscHandler(l,f){return this.registerOscHandler(l,f)}}},4335:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeApi=void 0,n.UnicodeApi=class{constructor(l){this._core=l}register(l){this._core.unicodeService.register(l)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(l){this._core.unicodeService.activeVersion=l}}},9640:function(y,n,l){var f=this&&this.__decorate||function(i,p,h,d){var u,b=arguments.length,S=b<3?p:d===null?d=Object.getOwnPropertyDescriptor(p,h):d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")S=Reflect.decorate(i,p,h,d);else for(var P=i.length-1;P>=0;P--)(u=i[P])&&(S=(b<3?u(S):b>3?u(p,h,S):u(p,h))||S);return b>3&&S&&Object.defineProperty(p,h,S),S},k=this&&this.__param||function(i,p){return function(h,d){p(h,d,i)}};Object.defineProperty(n,"__esModule",{value:!0}),n.BufferService=n.MINIMUM_ROWS=n.MINIMUM_COLS=void 0;let a=l(7150),w=l(4097),c=l(6501),g=l(802);n.MINIMUM_COLS=2,n.MINIMUM_ROWS=1;let _=class extends a.Disposable{get buffer(){return this.buffers.active}constructor(i){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(i.rawOptions.cols||0,n.MINIMUM_COLS),this.rows=Math.max(i.rawOptions.rows||0,n.MINIMUM_ROWS),this.buffers=this._register(new w.BufferSet(i,this)),this._register(this.buffers.onBufferActivate((p=>{this._onScroll.fire(p.activeBuffer.ydisp)})))}resize(i,p){let h=this.cols!==i,d=this.rows!==p;this.cols=i,this.rows=p,this.buffers.resize(i,p),this._onResize.fire({cols:i,rows:p,colsChanged:h,rowsChanged:d})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(i,p=!1){let h=this.buffer,d;d=this._cachedBlankLine,d&&d.length===this.cols&&d.getFg(0)===i.fg&&d.getBg(0)===i.bg||(d=h.getBlankLine(i,p),this._cachedBlankLine=d),d.isWrapped=p;let u=h.ybase+h.scrollTop,b=h.ybase+h.scrollBottom;if(h.scrollTop===0){let S=h.lines.isFull;b===h.lines.length-1?S?h.lines.recycle().copyFrom(d):h.lines.push(d.clone()):h.lines.splice(b+1,0,d.clone()),S?this.isUserScrolling&&(h.ydisp=Math.max(h.ydisp-1,0)):(h.ybase++,this.isUserScrolling||h.ydisp++)}else{let S=b-u+1;h.lines.shiftElements(u+1,S-1,-1),h.lines.set(b,d.clone())}this.isUserScrolling||(h.ydisp=h.ybase),this._onScroll.fire(h.ydisp)}scrollLines(i,p){let h=this.buffer;if(i<0){if(h.ydisp===0)return;this.isUserScrolling=!0}else i+h.ydisp>=h.ybase&&(this.isUserScrolling=!1);let d=h.ydisp;h.ydisp=Math.max(Math.min(h.ydisp+i,h.ybase),0),d!==h.ydisp&&(p||this._onScroll.fire(h.ydisp))}};n.BufferService=_,n.BufferService=_=f([k(0,c.IOptionsService)],_)},5746:(y,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(l){this.glevel=l,this.charset=this._charsets[l]}setgCharset(l,f){this._charsets[l]=f,this.glevel===l&&(this.charset=f)}}},7792:function(y,n,l){var f=this&&this.__decorate||function(d,u,b,S){var P,E=arguments.length,H=E<3?u:S===null?S=Object.getOwnPropertyDescriptor(u,b):S;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")H=Reflect.decorate(d,u,b,S);else for(var $=d.length-1;$>=0;$--)(P=d[$])&&(H=(E<3?P(H):E>3?P(u,b,H):P(u,b))||H);return E>3&&H&&Object.defineProperty(u,b,H),H},k=this&&this.__param||function(d,u){return function(b,S){u(b,S,d)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CoreMouseService=void 0;let a=l(6501),w=l(7150),c=l(802),g={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:d=>d.button!==4&&d.action===1&&(d.ctrl=!1,d.alt=!1,d.shift=!1,!0)},VT200:{events:19,restrict:d=>d.action!==32},DRAG:{events:23,restrict:d=>d.action!==32||d.button!==3},ANY:{events:31,restrict:d=>!0}};function _(d,u){let b=(d.ctrl?16:0)|(d.shift?4:0)|(d.alt?8:0);return d.button===4?(b|=64,b|=d.action):(b|=3&d.button,4&d.button&&(b|=64),8&d.button&&(b|=128),d.action===32?b|=32:d.action!==0||u||(b|=3)),b}let i=String.fromCharCode,p={DEFAULT:d=>{let u=[_(d,!1)+32,d.col+32,d.row+32];return u[0]>255||u[1]>255||u[2]>255?"":`\x1B[M${i(u[0])}${i(u[1])}${i(u[2])}`},SGR:d=>{let u=d.action===0&&d.button!==4?"m":"M";return`\x1B[<${_(d,!0)};${d.col};${d.row}${u}`},SGR_PIXELS:d=>{let u=d.action===0&&d.button!==4?"m":"M";return`\x1B[<${_(d,!0)};${d.x};${d.y}${u}`}},h=class extends w.Disposable{constructor(d,u,b){super(),this._bufferService=d,this._coreService=u,this._optionsService=b,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 S of Object.keys(g))this.addProtocol(S,g[S]);for(let S of Object.keys(p))this.addEncoding(S,p[S]);this.reset()}addProtocol(d,u){this._protocols[d]=u}addEncoding(d,u){this._encodings[d]=u}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(d){if(!this._protocols[d])throw new Error(`unknown protocol "${d}"`);this._activeProtocol=d,this._onProtocolChange.fire(this._protocols[d].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(d){if(!this._encodings[d])throw new Error(`unknown encoding "${d}"`);this._activeEncoding=d}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT",this._lastEvent=null,this._wheelPartialScroll=0}consumeWheelEvent(d,u,b){if(d.deltaY===0||d.shiftKey||u===void 0||b===void 0)return 0;let S=u/b,P=this._applyScrollModifier(d.deltaY,d);return d.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(P/=S+0,Math.abs(d.deltaY)<50&&(P*=.3),this._wheelPartialScroll+=P,P=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):d.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(P*=this._bufferService.rows),P}_applyScrollModifier(d,u){return u.altKey||u.ctrlKey||u.shiftKey?d*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:d*this._optionsService.rawOptions.scrollSensitivity}triggerMouseEvent(d){if(d.col<0||d.col>=this._bufferService.cols||d.row<0||d.row>=this._bufferService.rows||d.button===4&&d.action===32||d.button===3&&d.action!==32||d.button!==4&&(d.action===2||d.action===3)||(d.col++,d.row++,d.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,d,this._activeEncoding==="SGR_PIXELS"))||!this._protocols[this._activeProtocol].restrict(d))return!1;let u=this._encodings[this._activeEncoding](d);return u&&(this._activeEncoding==="DEFAULT"?this._coreService.triggerBinaryEvent(u):this._coreService.triggerDataEvent(u,!0)),this._lastEvent=d,!0}explainEvents(d){return{down:!!(1&d),up:!!(2&d),drag:!!(4&d),move:!!(8&d),wheel:!!(16&d)}}_equalEvents(d,u,b){if(b){if(d.x!==u.x||d.y!==u.y)return!1}else if(d.col!==u.col||d.row!==u.row)return!1;return d.button===u.button&&d.action===u.action&&d.ctrl===u.ctrl&&d.alt===u.alt&&d.shift===u.shift}};n.CoreMouseService=h,n.CoreMouseService=h=f([k(0,a.IBufferService),k(1,a.ICoreService),k(2,a.IOptionsService)],h)},4071:function(y,n,l){var f=this&&this.__decorate||function(h,d,u,b){var S,P=arguments.length,E=P<3?d:b===null?b=Object.getOwnPropertyDescriptor(d,u):b;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")E=Reflect.decorate(h,d,u,b);else for(var H=h.length-1;H>=0;H--)(S=h[H])&&(E=(P<3?S(E):P>3?S(d,u,E):S(d,u))||E);return P>3&&E&&Object.defineProperty(d,u,E),E},k=this&&this.__param||function(h,d){return function(u,b){d(u,b,h)}};Object.defineProperty(n,"__esModule",{value:!0}),n.CoreService=void 0;let a=l(7453),w=l(7150),c=l(6501),g=l(802),_=Object.freeze({insertMode:!1}),i=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,wraparound:!0}),p=class extends w.Disposable{constructor(h,d,u){super(),this._bufferService=h,this._logService=d,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,a.clone)(_),this.decPrivateModes=(0,a.clone)(i)}reset(){this.modes=(0,a.clone)(_),this.decPrivateModes=(0,a.clone)(i)}triggerDataEvent(h,d=!1){if(this._optionsService.rawOptions.disableStdin)return;let u=this._bufferService.buffer;d&&this._optionsService.rawOptions.scrollOnUserInput&&u.ybase!==u.ydisp&&this._onRequestScrollToBottom.fire(),d&&this._onUserInput.fire(),this._logService.debug(`sending data "${h}"`),this._logService.trace("sending data (codes)",(()=>h.split("").map((b=>b.charCodeAt(0))))),this._onData.fire(h)}triggerBinaryEvent(h){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${h}"`),this._logService.trace("sending binary (codes)",(()=>h.split("").map((d=>d.charCodeAt(0))))),this._onBinary.fire(h))}};n.CoreService=p,n.CoreService=p=f([k(0,c.IBufferService),k(1,c.ILogService),k(2,c.IOptionsService)],p)},6025:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.InstantiationService=n.ServiceCollection=void 0;let f=l(6501),k=l(6201);class a{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=a,n.InstantiationService=class{constructor(){this._services=new a,this._services.set(f.IInstantiationService,this)}setService(w,c){this._services.set(w,c)}getService(w){return this._services.get(w)}createInstance(w,...c){let g=(0,k.getServiceDependencies)(w).sort(((p,h)=>p.index-h.index)),_=[];for(let p of g){let h=this._services.get(p.id);if(!h)throw new Error(`[createInstance] ${w.name} depends on UNKNOWN service ${p.id._id}.`);_.push(h)}let i=g.length>0?g[0].index:c.length;if(c.length!==i)throw new Error(`[createInstance] First service dependency of ${w.name} at position ${i+1} conflicts with ${c.length} static arguments`);return new w(...c,..._)}}},7276:function(y,n,l){var f=this&&this.__decorate||function(i,p,h,d){var u,b=arguments.length,S=b<3?p:d===null?d=Object.getOwnPropertyDescriptor(p,h):d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")S=Reflect.decorate(i,p,h,d);else for(var P=i.length-1;P>=0;P--)(u=i[P])&&(S=(b<3?u(S):b>3?u(p,h,S):u(p,h))||S);return b>3&&S&&Object.defineProperty(p,h,S),S},k=this&&this.__param||function(i,p){return function(h,d){p(h,d,i)}};Object.defineProperty(n,"__esModule",{value:!0}),n.LogService=void 0,n.setTraceLogger=function(i){g=i},n.traceCall=function(i,p,h){if(typeof h.value!="function")throw new Error("not supported");let d=h.value;h.value=function(...u){if(g.logLevel!==w.LogLevelEnum.TRACE)return d.apply(this,u);g.trace(`GlyphRenderer#${d.name}(${u.map((S=>JSON.stringify(S))).join(", ")})`);let b=d.apply(this,u);return g.trace(`GlyphRenderer#${d.name} return`,b),b}};let a=l(7150),w=l(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 a.Disposable{get logLevel(){return this._logLevel}constructor(i){super(),this._optionsService=i,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(i){for(let p=0;p<i.length;p++)typeof i[p]=="function"&&(i[p]=i[p]())}_log(i,p,h){this._evalLazyOptionalParams(h),i.call(console,(this._optionsService.options.logger?"":"xterm.js: ")+p,...h)}trace(i,...p){this._logLevel<=w.LogLevelEnum.TRACE&&this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger)??console.log,i,p)}debug(i,...p){this._logLevel<=w.LogLevelEnum.DEBUG&&this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger)??console.log,i,p)}info(i,...p){this._logLevel<=w.LogLevelEnum.INFO&&this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger)??console.info,i,p)}warn(i,...p){this._logLevel<=w.LogLevelEnum.WARN&&this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger)??console.warn,i,p)}error(i,...p){this._logLevel<=w.LogLevelEnum.ERROR&&this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger)??console.error,i,p)}};n.LogService=_,n.LogService=_=f([k(0,w.IOptionsService)],_)},56:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.OptionsService=n.DEFAULT_OPTIONS=void 0;let f=l(7150),k=l(701),a=l(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:k.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 f.Disposable{constructor(_){super(),this._onOptionChange=this._register(new a.Emitter),this.onOptionChange=this._onOptionChange.event;let i={...n.DEFAULT_OPTIONS};for(let p in _)if(p in i)try{let h=_[p];i[p]=this._sanitizeAndValidateOption(p,h)}catch(h){console.error(h)}this.rawOptions=i,this.options={...i},this._setupOptions(),this._register((0,f.toDisposable)((()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null})))}onSpecificOptionChange(_,i){return this.onOptionChange((p=>{p===_&&i(this.rawOptions[_])}))}onMultipleOptionChange(_,i){return this.onOptionChange((p=>{_.indexOf(p)!==-1&&i()}))}_setupOptions(){let _=p=>{if(!(p in n.DEFAULT_OPTIONS))throw new Error(`No option with key "${p}"`);return this.rawOptions[p]},i=(p,h)=>{if(!(p in n.DEFAULT_OPTIONS))throw new Error(`No option with key "${p}"`);h=this._sanitizeAndValidateOption(p,h),this.rawOptions[p]!==h&&(this.rawOptions[p]=h,this._onOptionChange.fire(p))};for(let p in this.rawOptions){let h={get:_.bind(this,p),set:i.bind(this,p)};Object.defineProperty(this.options,p,h)}}_sanitizeAndValidateOption(_,i){switch(_){case"cursorStyle":if(i||(i=n.DEFAULT_OPTIONS[_]),!(function(p){return p==="block"||p==="underline"||p==="bar"})(i))throw new Error(`"${i}" is not a valid value for ${_}`);break;case"wordSeparator":i||(i=n.DEFAULT_OPTIONS[_]);break;case"fontWeight":case"fontWeightBold":if(typeof i=="number"&&1<=i&&i<=1e3)break;i=w.includes(i)?i:n.DEFAULT_OPTIONS[_];break;case"cursorWidth":i=Math.floor(i);case"lineHeight":case"tabStopWidth":if(i<1)throw new Error(`${_} cannot be less than 1, value: ${i}`);break;case"minimumContrastRatio":i=Math.max(1,Math.min(21,Math.round(10*i)/10));break;case"scrollback":if((i=Math.min(i,4294967295))<0)throw new Error(`${_} cannot be less than 0, value: ${i}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(i<=0)throw new Error(`${_} cannot be less than or equal to 0, value: ${i}`);break;case"rows":case"cols":if(!i&&i!==0)throw new Error(`${_} must be numeric, value: ${i}`);break;case"windowsPty":i=i??{}}return i}}n.OptionsService=c},8811:function(y,n,l){var f=this&&this.__decorate||function(c,g,_,i){var p,h=arguments.length,d=h<3?g:i===null?i=Object.getOwnPropertyDescriptor(g,_):i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")d=Reflect.decorate(c,g,_,i);else for(var u=c.length-1;u>=0;u--)(p=c[u])&&(d=(h<3?p(d):h>3?p(g,_,d):p(g,_))||d);return h>3&&d&&Object.defineProperty(g,_,d),d},k=this&&this.__param||function(c,g){return function(_,i){g(_,i,c)}};Object.defineProperty(n,"__esModule",{value:!0}),n.OscLinkService=void 0;let a=l(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),b={data:c,id:this._nextId++,lines:[u]};return u.onDispose((()=>this._removeMarkerFromLink(b,u))),this._dataByLinkId.set(b.id,b),b.id}let _=c,i=this._getEntryIdKey(_),p=this._entriesWithId.get(i);if(p)return this.addLineToLink(p.id,g.ybase+g.y),p.id;let h=g.addMarker(g.ybase+g.y),d={id:this._nextId++,key:this._getEntryIdKey(_),data:_,lines:[h]};return h.onDispose((()=>this._removeMarkerFromLink(d,h))),this._entriesWithId.set(d.key,d),this._dataByLinkId.set(d.id,d),d.id}addLineToLink(c,g){let _=this._dataByLinkId.get(c);if(_&&_.lines.every((i=>i.line!==g))){let i=this._bufferService.buffer.addMarker(g);_.lines.push(i),i.onDispose((()=>this._removeMarkerFromLink(_,i)))}}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=f([k(0,a.IBufferService)],w)},6201:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.serviceRegistry=void 0,n.getServiceDependencies=function(k){return k[f]||[]},n.createDecorator=function(k){if(n.serviceRegistry.has(k))return n.serviceRegistry.get(k);let a=function(w,c,g){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");(function(_,i,p){i[l]===i?i[f].push({id:_,index:p}):(i[f]=[{id:_,index:p}],i[l]=i)})(a,w,g)};return a._id=k,n.serviceRegistry.set(k,a),a};let l="di$target",f="di$dependencies";n.serviceRegistry=new Map},6501:(y,n,l)=>{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 f=l(6201);var k;n.IBufferService=(0,f.createDecorator)("BufferService"),n.ICoreMouseService=(0,f.createDecorator)("CoreMouseService"),n.ICoreService=(0,f.createDecorator)("CoreService"),n.ICharsetService=(0,f.createDecorator)("CharsetService"),n.IInstantiationService=(0,f.createDecorator)("InstantiationService"),(function(a){a[a.TRACE=0]="TRACE",a[a.DEBUG=1]="DEBUG",a[a.INFO=2]="INFO",a[a.WARN=3]="WARN",a[a.ERROR=4]="ERROR",a[a.OFF=5]="OFF"})(k||(n.LogLevelEnum=k={})),n.ILogService=(0,f.createDecorator)("LogService"),n.IOptionsService=(0,f.createDecorator)("OptionsService"),n.IOscLinkService=(0,f.createDecorator)("OscLinkService"),n.IUnicodeService=(0,f.createDecorator)("UnicodeService"),n.IDecorationService=(0,f.createDecorator)("DecorationService")},6415:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.UnicodeService=void 0;let f=l(7428),k=l(802);class a{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 k.Emitter,this.onChange=this._onChange.event;let c=new f.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,i=c.length;for(let p=0;p<i;++p){let h=c.charCodeAt(p);if(55296<=h&&h<=56319){if(++p>=i)return g+this.wcwidth(h);let b=c.charCodeAt(p);56320<=b&&b<=57343?h=1024*(h-55296)+b-56320+65536:g+=this.wcwidth(b)}let d=this.charProperties(h,_),u=a.extractWidth(d);a.extractShouldJoin(d)&&(u-=a.extractWidth(_)),g+=u,_=d}return g}charProperties(c,g){return this._activeProvider.charProperties(c,g)}}n.UnicodeService=a},5856:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Terminal=void 0;let f=l(6107),k=l(5777),a=l(802);class w extends k.CoreTerminal{constructor(g={}){super(g),this._onBell=this._register(new a.Emitter),this.onBell=this._onBell.event,this._onCursorMove=this._register(new a.Emitter),this.onCursorMove=this._onCursorMove.event,this._onTitleChange=this._register(new a.Emitter),this.onTitleChange=this._onTitleChange.event,this._onA11yCharEmitter=this._register(new a.Emitter),this.onA11yChar=this._onA11yCharEmitter.event,this._onA11yTabEmitter=this._register(new a.Emitter),this.onA11yTab=this._onA11yTabEmitter.event,this._setup(),this._register(this._inputHandler.onRequestBell((()=>this.bell()))),this._register(this._inputHandler.onRequestReset((()=>this.reset()))),this._register(a.Event.forward(this._inputHandler.onCursorMove,this._onCursorMove)),this._register(a.Event.forward(this._inputHandler.onTitleChange,this._onTitleChange)),this._register(a.Event.forward(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this._register(a.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(f.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:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Permutation=n.CallbackIterable=n.ArrayQueue=n.booleanComparator=n.numberComparator=n.CompareResult=void 0,n.tail=function(u,b=0){return u[u.length-(1+b)]},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,b,S=(P,E)=>P===E){if(u===b)return!0;if(!u||!b||u.length!==b.length)return!1;for(let P=0,E=u.length;P<E;P++)if(!S(u[P],b[P]))return!1;return!0},n.removeFastWithoutKeepingOrder=function(u,b){let S=u.length-1;b<S&&(u[b]=u[S]),u.pop()},n.binarySearch=function(u,b,S){return a(u.length,(P=>S(u[P],b)))},n.binarySearch2=a,n.quickSelect=function u(b,S,P){if((b|=0)>=S.length)throw new TypeError("invalid index");let E=S[Math.floor(S.length*Math.random())],H=[],$=[],D=[];for(let x of S){let A=P(x,E);A<0?H.push(x):A>0?$.push(x):D.push(x)}return b<H.length?u(b,H,P):b<H.length+D.length?D[0]:u(b-(H.length+D.length),$,P)},n.groupBy=function(u,b){let S=[],P;for(let E of u.slice(0).sort(b))P&&b(P[0],E)===0?P.push(E):(P=[E],S.push(P));return S},n.groupAdjacentBy=function*(u,b){let S,P;for(let E of u)P!==void 0&&b(P,E)?S.push(E):(S&&(yield S),S=[E]),P=E;S&&(yield S)},n.forEachAdjacent=function(u,b){for(let S=0;S<=u.length;S++)b(S===0?void 0:u[S-1],S===u.length?void 0:u[S])},n.forEachWithNeighbors=function(u,b){for(let S=0;S<u.length;S++)b(S===0?void 0:u[S-1],u[S],S+1===u.length?void 0:u[S+1])},n.sortedDiff=w,n.delta=function(u,b,S){let P=w(u,b,S),E=[],H=[];for(let $ of P)E.push(...u.slice($.start,$.start+$.deleteCount)),H.push(...$.toInsert);return{removed:E,added:H}},n.top=function(u,b,S){if(S===0)return[];let P=u.slice(0,S).sort(b);return c(u,b,P,S,u.length),P},n.topAsync=function(u,b,S,P,E){return S===0?Promise.resolve([]):new Promise(((H,$)=>{(async()=>{let D=u.length,x=u.slice(0,S).sort(b);for(let A=S,L=Math.min(S+P,D);A<D;A=L,L=Math.min(L+P,D)){if(A>S&&await new Promise((z=>setTimeout(z))),E&&E.isCancellationRequested)throw new f.CancellationError;c(u,b,x,A,L)}return x})().then(H,$)}))},n.coalesce=function(u){return u.filter((b=>!!b))},n.coalesceInPlace=function(u){let b=0;for(let S=0;S<u.length;S++)u[S]&&(u[b]=u[S],b+=1);u.length=b},n.move=function(u,b,S){u.splice(S,0,u.splice(b,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,b=S=>S){let S=new Set;return u.filter((P=>{let E=b(P);return!S.has(E)&&(S.add(E),!0)}))},n.uniqueFilter=function(u){let b=new Set;return S=>{let P=u(S);return!b.has(P)&&(b.add(P),!0)}},n.firstOrDefault=function(u,b){return u.length>0?u[0]:b},n.lastOrDefault=function(u,b){return u.length>0?u[u.length-1]:b},n.commonPrefixLength=function(u,b,S=(P,E)=>P===E){let P=0;for(let E=0,H=Math.min(u.length,b.length);E<H&&S(u[E],b[E]);E++)P++;return P},n.range=function(u,b){let S=typeof b=="number"?u:0;typeof b=="number"?S=u:(S=0,b=u);let P=[];if(S<=b)for(let E=S;E<b;E++)P.push(E);else for(let E=S;E>b;E--)P.push(E);return P},n.index=function(u,b,S){return u.reduce(((P,E)=>(P[b(E)]=S?S(E):E,P)),Object.create(null))},n.insert=function(u,b){return u.push(b),()=>g(u,b)},n.remove=g,n.arrayInsert=function(u,b,S){let P=u.slice(0,b),E=u.slice(b);return P.concat(S,E)},n.shuffle=function(u,b){let S;if(typeof b=="number"){let P=b;S=()=>{let E=179426549*Math.sin(P++);return E-Math.floor(E)}}else S=Math.random;for(let P=u.length-1;P>0;P-=1){let E=Math.floor(S()*(P+1)),H=u[P];u[P]=u[E],u[E]=H}},n.pushToStart=function(u,b){let S=u.indexOf(b);S>-1&&(u.splice(S,1),u.unshift(b))},n.pushToEnd=function(u,b){let S=u.indexOf(b);S>-1&&(u.splice(S,1),u.push(b))},n.pushMany=function(u,b){for(let S of b)u.push(S)},n.mapArrayOrNot=function(u,b){return Array.isArray(u)?u.map(b):b(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,b,S,P){let E=i(u,b),H=u.splice(E,S);return H===void 0&&(H=[]),_(u,E,P),H},n.compareBy=function(u,b){return(S,P)=>b(u(S),u(P))},n.tieBreakComparators=function(...u){return(b,S)=>{for(let P of u){let E=P(b,S);if(!p.isNeitherLessOrGreaterThan(E))return E}return p.neitherLessOrGreaterThan}},n.reverseOrder=function(u){return(b,S)=>-u(b,S)};let f=l(9807),k=l(8297);function a(u,b){let S=0,P=u-1;for(;S<=P;){let E=(S+P)/2|0,H=b(E);if(H<0)S=E+1;else{if(!(H>0))return E;P=E-1}}return-(S+1)}function w(u,b,S){let P=[];function E(D,x,A){if(x===0&&A.length===0)return;let L=P[P.length-1];L&&L.start+L.deleteCount===D?(L.deleteCount+=x,L.toInsert.push(...A)):P.push({start:D,deleteCount:x,toInsert:A})}let H=0,$=0;for(;;){if(H===u.length){E(H,0,b.slice($));break}if($===b.length){E(H,u.length-H,[]);break}let D=u[H],x=b[$],A=S(D,x);A===0?(H+=1,$+=1):A<0?(E(H,1,[]),H+=1):A>0&&(E(H,0,[x]),$+=1)}return P}function c(u,b,S,P,E){for(let H=S.length;P<E;P++){let $=u[P];if(b($,S[H-1])<0){S.pop();let D=(0,k.findFirstIdxMonotonousOrArrLen)(S,(x=>b($,x)<0));S.splice(D,0,$)}}}function g(u,b){let S=u.indexOf(b);if(S>-1)return u.splice(S,1),b}function _(u,b,S){let P=i(u,b),E=u.length,H=S.length;u.length=E+H;for(let $=E-1;$>=P;$--)u[$+H]=u[$];for(let $=0;$<H;$++)u[$+P]=S[$]}function i(u,b){return b<0?Math.max(b+u.length,0):Math.min(b,u.length)}var p;(function(u){u.isLessThan=function(b){return b<0},u.isLessThanOrEqual=function(b){return b<=0},u.isGreaterThan=function(b){return b>0},u.isNeitherLessOrGreaterThan=function(b){return b===0},u.greaterThan=1,u.lessThan=-1,u.neitherLessOrGreaterThan=0})(p||(n.CompareResult=p={})),n.numberComparator=(u,b)=>u-b,n.booleanComparator=(u,b)=>(0,n.numberComparator)(u?1:0,b?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 b=this.firstIdx;for(;b<this.items.length&&u(this.items[b]);)b++;let S=b===this.firstIdx?null:this.items.slice(this.firstIdx,b);return this.firstIdx=b,S}takeFromEndWhile(u){let b=this.lastIdx;for(;b>=0&&u(this.items[b]);)b--;let S=b===this.lastIdx?null:this.items.slice(b+1,this.lastIdx+1);return this.lastIdx=b,S}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 b=this.items.slice(this.firstIdx,this.firstIdx+u);return this.firstIdx+=u,b}};class h{static{this.empty=new h((b=>{}))}constructor(b){this.iterate=b}forEach(b){this.iterate((S=>(b(S),!0)))}toArray(){let b=[];return this.iterate((S=>(b.push(S),!0))),b}filter(b){return new h((S=>this.iterate((P=>!b(P)||S(P)))))}map(b){return new h((S=>this.iterate((P=>S(b(P))))))}some(b){let S=!1;return this.iterate((P=>(S=b(P),!S))),S}findFirst(b){let S;return this.iterate((P=>!b(P)||(S=P,!1))),S}findLast(b){let S;return this.iterate((P=>(b(P)&&(S=P),!0))),S}findLastMaxBy(b){let S,P=!0;return this.iterate((E=>((P||p.isGreaterThan(b(E,S)))&&(P=!1,S=E),!0))),S}}n.CallbackIterable=h;class d{constructor(b){this._indexMap=b}static createSortPermutation(b,S){let P=Array.from(b.keys()).sort(((E,H)=>S(b[E],b[H])));return new d(P)}apply(b){return b.map(((S,P)=>b[this._indexMap[P]]))}inverse(){let b=this._indexMap.slice();for(let S=0;S<this._indexMap.length;S++)b[this._indexMap[S]]=S;return new d(b)}}n.Permutation=d},8297:(y,n)=>{function l(c,g,_=c.length-1){for(let i=_;i>=0;i--)if(g(c[i]))return i;return-1}function f(c,g,_=0,i=c.length){let p=_,h=i;for(;p<h;){let d=Math.floor((p+h)/2);g(c[d])?p=d+1:h=d}return p-1}function k(c,g,_=0,i=c.length){let p=_,h=i;for(;p<h;){let d=Math.floor((p+h)/2);g(c[d])?h=d:p=d+1}return p}Object.defineProperty(n,"__esModule",{value:!0}),n.MonotonousArray=void 0,n.findLast=function(c,g){let _=l(c,g);if(_!==-1)return c[_]},n.findLastIdx=l,n.findLastMonotonous=function(c,g){let _=f(c,g);return _===-1?void 0:c[_]},n.findLastIdxMonotonous=f,n.findFirstMonotonous=function(c,g){let _=k(c,g);return _===c.length?void 0:c[_]},n.findFirstIdxMonotonousOrArrLen=k,n.findFirstIdxMonotonous=function(c,g,_=0,i=c.length){let p=k(c,g,_,i);return p===c.length?-1:p},n.findFirstMax=w,n.findLastMax=function(c,g){if(c.length===0)return;let _=c[0];for(let i=1;i<c.length;i++){let p=c[i];g(p,_)>=0&&(_=p)}return _},n.findFirstMin=function(c,g){return w(c,((_,i)=>-g(_,i)))},n.findMaxIdx=function(c,g){if(c.length===0)return-1;let _=0;for(let i=1;i<c.length;i++)g(c[i],c[_])>0&&(_=i);return _},n.mapFindFirst=function(c,g){for(let _ of c){let i=g(_);if(i!==void 0)return i}};class a{static{this.assertInvariants=!1}constructor(g){this._array=g,this._findLastMonotonousLastIdx=0}findLastMonotonous(g){if(a.assertInvariants){if(this._prevFindLastPredicate){for(let i of this._array)if(this._prevFindLastPredicate(i)&&!g(i))throw new Error("MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.")}this._prevFindLastPredicate=g}let _=f(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 i=1;i<c.length;i++){let p=c[i];g(p,_)>0&&(_=p)}return _}n.MonotonousArray=a},9087:(y,n)=>{var l;Object.defineProperty(n,"__esModule",{value:!0}),n.SetWithKey=void 0,n.groupBy=function(k,a){let w=Object.create(null);for(let c of k){let g=a(c),_=w[g];_||(_=w[g]=[]),_.push(c)}return w},n.diffSets=function(k,a){let w=[],c=[];for(let g of k)a.has(g)||w.push(g);for(let g of a)k.has(g)||c.push(g);return{removed:w,added:c}},n.diffMaps=function(k,a){let w=[],c=[];for(let[g,_]of k)a.has(g)||w.push(_);for(let[g,_]of a)k.has(g)||c.push(_);return{removed:w,added:c}},n.intersection=function(k,a){let w=new Set;for(let c of a)k.has(c)&&w.add(c);return w};class f{static{l=Symbol.toStringTag}constructor(a,w){this.toKey=w,this._map=new Map,this[l]="SetWithKey";for(let c of a)this.add(c)}get size(){return this._map.size}add(a){let w=this.toKey(a);return this._map.set(w,a),this}delete(a){return this._map.delete(this.toKey(a))}has(a){return this._map.has(this.toKey(a))}*entries(){for(let a of this._map.values())yield[a,a]}keys(){return this.values()}*values(){for(let a of this._map.values())yield a}clear(){this._map.clear()}forEach(a,w){this._map.forEach((c=>a.call(w,c,c,this)))}[Symbol.iterator](){return this.values()}}n.SetWithKey=f},9807:(y,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(h){n.errorHandler.setUnexpectedErrorHandler(h)},n.isSigPipeError=function(h){if(!h||typeof h!="object")return!1;let d=h;return d.code==="EPIPE"&&d.syscall?.toUpperCase()==="WRITE"},n.onUnexpectedError=function(h){k(h)||n.errorHandler.onUnexpectedError(h)},n.onUnexpectedExternalError=function(h){k(h)||n.errorHandler.onUnexpectedExternalError(h)},n.transformErrorForSerialization=function(h){if(h instanceof Error){let{name:d,message:u}=h;return{$isError:!0,name:d,message:u,stack:h.stacktrace||h.stack,noTelemetry:i.isErrorNoTelemetry(h)}}return h},n.transformErrorFromSerialization=function(h){let d;return h.noTelemetry?d=new i:(d=new Error,d.name=h.name),d.message=h.message,d.stack=h.stack,d},n.isCancellationError=k,n.canceled=function(){let h=new Error(f);return h.name=h.message,h},n.illegalArgument=function(h){return h?new Error(`Illegal argument: ${h}`):new Error("Illegal argument")},n.illegalState=function(h){return h?new Error(`Illegal state: ${h}`):new Error("Illegal state")},n.getErrorMessage=function(h){return h?h.message?h.message:h.stack?h.stack.split(`
5
5
  `)[0]:String(h):"Error"};class l{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(d){setTimeout((()=>{throw d.stack?i.isErrorNoTelemetry(d)?new i(d.message+`
6
6
 
7
7
  `+d.stack):new Error(d.message+`
8
8
 
9
- `+d.stack):d}),0)}}addListener(d){return this.listeners.push(d),()=>{this._removeListener(d)}}emit(d){this.listeners.forEach((u=>{u(d)}))}_removeListener(d){this.listeners.splice(this.listeners.indexOf(d),1)}setUnexpectedErrorHandler(d){this.unexpectedErrorHandler=d}getUnexpectedErrorHandler(){return this.unexpectedErrorHandler}onUnexpectedError(d){this.unexpectedErrorHandler(d),this.emit(d)}onUnexpectedExternalError(d){this.unexpectedErrorHandler(d)}}n.ErrorHandler=l,n.errorHandler=new l;let f="Canceled";function k(h){return h instanceof a||h instanceof Error&&h.name===f&&h.message===f}class a extends Error{constructor(){super(f),this.name=this.message}}n.CancellationError=a;class w extends TypeError{constructor(d){super(d?`${d} is read-only and cannot be changed`:"Cannot change read-only property")}}n.ReadonlyError=w;class c extends Error{constructor(d){super("NotImplemented"),d&&(this.message=d)}}n.NotImplementedError=c;class g extends Error{constructor(d){super("NotSupported"),d&&(this.message=d)}}n.NotSupportedError=g;class _ extends Error{constructor(){super(...arguments),this.isExpected=!0}}n.ExpectedError=_;class i extends Error{constructor(d){super(d),this.name="CodeExpectedError"}static fromError(d){if(d instanceof i)return d;let u=new i;return u.message=d.message,u.stack=d.stack,u}static isErrorNoTelemetry(d){return d.name==="CodeExpectedError"}}n.ErrorNoTelemetry=i;class p extends Error{constructor(d){super(d||"An unexpected bug occurred."),Object.setPrototypeOf(this,p.prototype)}}n.BugIndicatingError=p},802:(y,n,l)=>{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(x){let A=i;return i=x,{dispose(){i=A}}};let f=l(9807),k=l(8841),a=l(7150),w=l(6317),c=l(9725);var g;(function(x){function A(T){return(R,F=null,j)=>{let U,V=!1;return U=T((te=>{if(!V)return U?U.dispose():V=!0,R.call(F,te)}),null,j),V&&U.dispose(),U}}function L(T,R,F){return X(((j,U=null,V)=>T((te=>j.call(U,R(te))),null,V)),F)}function z(T,R,F){return X(((j,U=null,V)=>T((te=>R(te)&&j.call(U,te)),null,V)),F)}function X(T,R){let F,j=new P({onWillAddFirstListener(){F=T(j.fire,j)},onDidRemoveLastListener(){F?.dispose()}});return R?.add(j),j.event}function W(T,R,F=100,j=!1,U=!1,V,te){let I,Q,Y,Z,we=0,ke=new P({leakWarningThreshold:V,onWillAddFirstListener(){I=T((Xe=>{we++,Q=R(Q,Xe),j&&!Y&&(ke.fire(Q),Q=void 0),Z=()=>{let xe=Q;Q=void 0,Y=void 0,(!j||we>1)&&ke.fire(xe),we=0},typeof F=="number"?(clearTimeout(Y),Y=setTimeout(Z,F)):Y===void 0&&(Y=0,queueMicrotask(Z))}))},onWillRemoveListener(){U&&we>0&&Z?.()},onDidRemoveLastListener(){Z=void 0,I.dispose()}});return te?.add(ke),ke.event}x.None=()=>a.Disposable.None,x.defer=function(T,R){return W(T,(()=>{}),0,void 0,!0,void 0,R)},x.once=A,x.map=L,x.forEach=function(T,R,F){return X(((j,U=null,V)=>T((te=>{R(te),j.call(U,te)}),null,V)),F)},x.filter=z,x.signal=function(T){return T},x.any=function(...T){return(R,F=null,j)=>{return U=(0,a.combinedDisposable)(...T.map((te=>te((I=>R.call(F,I)))))),(V=j)instanceof Array?V.push(U):V&&V.add(U),U;var U,V}},x.reduce=function(T,R,F,j){let U=F;return L(T,(V=>(U=R(U,V),U)),j)},x.debounce=W,x.accumulate=function(T,R=0,F){return x.debounce(T,((j,U)=>j?(j.push(U),j):[U]),R,void 0,!0,void 0,F)},x.latch=function(T,R=(j,U)=>j===U,F){let j,U=!0;return z(T,(V=>{let te=U||!R(V,j);return U=!1,j=V,te}),F)},x.split=function(T,R,F){return[x.filter(T,R,F),x.filter(T,(j=>!R(j)),F)]},x.buffer=function(T,R=!1,F=[],j){let U=F.slice(),V=T((Q=>{U?U.push(Q):I.fire(Q)}));j&&j.add(V);let te=()=>{U?.forEach((Q=>I.fire(Q))),U=null},I=new P({onWillAddFirstListener(){V||(V=T((Q=>I.fire(Q))),j&&j.add(V))},onDidAddFirstListener(){U&&(R?setTimeout(te):te())},onDidRemoveLastListener(){V&&V.dispose(),V=null}});return j&&j.add(I),I.event},x.chain=function(T,R){return(F,j,U)=>{let V=R(new v);return T((function(te){let I=V.evaluate(te);I!==q&&F.call(j,I)}),void 0,U)}};let q=Symbol("HaltChainable");class v{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 j=F;return this.steps.push((U=>(j=R(j,U),j))),this}latch(R=(F,j)=>F===j){let F,j=!0;return this.steps.push((U=>{let V=j||!R(U,F);return j=!1,F=U,V?U:q})),this}evaluate(R){for(let F of this.steps)if((R=F(R))===q)break;return R}}x.fromNodeEventEmitter=function(T,R,F=j=>j){let j=(...V)=>U.fire(F(...V)),U=new P({onWillAddFirstListener:()=>T.on(R,j),onDidRemoveLastListener:()=>T.removeListener(R,j)});return U.event},x.fromDOMEventEmitter=function(T,R,F=j=>j){let j=(...V)=>U.fire(F(...V)),U=new P({onWillAddFirstListener:()=>T.addEventListener(R,j),onDidRemoveLastListener:()=>T.removeEventListener(R,j)});return U.event},x.toPromise=function(T){return new Promise((R=>A(T)(R)))},x.fromPromise=function(T){let R=new P;return T.then((F=>{R.fire(F)}),(()=>{R.fire(void 0)})).finally((()=>{R.dispose()})),R.event},x.forward=function(T,R){return T((F=>R.fire(F)))},x.runAndSubscribe=function(T,R,F){return R(F),T((j=>R(j)))};class C{constructor(R,F){this._observable=R,this._counter=0,this._hasChanged=!1;let j={onWillAddFirstListener:()=>{R.addObserver(this)},onDidRemoveLastListener:()=>{R.removeObserver(this)}};this.emitter=new P(j),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())))}}x.fromObservable=function(T,R){return new C(T,R).emitter.event},x.fromObservableLight=function(T){return(R,F,j)=>{let U=0,V=!1,te={beginUpdate(){U++},endUpdate(){U--,U===0&&(T.reportChanges(),V&&(V=!1,R.call(F)))},handlePossibleChange(){},handleChange(){V=!0}};T.addObserver(te),T.reportChanges();let I={dispose(){T.removeObserver(te)}};return j instanceof a.DisposableStore?j.add(I):Array.isArray(j)&&j.push(I),I}}})(g||(n.Event=g={}));class _{static{this.all=new Set}static{this._idPool=0}constructor(A){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${A}_${_._idPool++}`,_.all.add(this)}start(A){this._stopWatch=new c.StopWatch,this.listenerCount=A}stop(){if(this._stopWatch){let A=this._stopWatch.elapsed();this.durations.push(A),this.elapsedOverall+=A,this.invocationCount+=1,this._stopWatch=void 0}}}n.EventProfiling=_;let i=-1;class p{static{this._idPool=1}constructor(A,L,z=(p._idPool++).toString(16).padStart(3,"0")){this._errorHandler=A,this.threshold=L,this.name=z,this._warnCountdown=0}dispose(){this._stacks?.clear()}check(A,L){let z=this.threshold;if(z<=0||L<z)return;this._stacks||(this._stacks=new Map);let X=this._stacks.get(A.value)||0;if(this._stacks.set(A.value,X+1),this._warnCountdown-=1,this._warnCountdown<=0){this._warnCountdown=.5*z;let[W,q]=this.getMostFrequentStack(),v=`[${this.name}] potential listener LEAK detected, having ${L} listeners already. MOST frequent listener (${q}):`;console.warn(v),console.warn(W);let C=new d(v,W);this._errorHandler(C)}return()=>{let W=this._stacks.get(A.value)||0;this._stacks.set(A.value,W-1)}}getMostFrequentStack(){if(!this._stacks)return;let A,L=0;for(let[z,X]of this._stacks)(!A||L<X)&&(A=[z,X],L=X);return A}}class h{static create(){let A=new Error;return new h(A.stack??"")}constructor(A){this.value=A}print(){console.warn(this.value.split(`
9
+ `+d.stack):d}),0)}}addListener(d){return this.listeners.push(d),()=>{this._removeListener(d)}}emit(d){this.listeners.forEach((u=>{u(d)}))}_removeListener(d){this.listeners.splice(this.listeners.indexOf(d),1)}setUnexpectedErrorHandler(d){this.unexpectedErrorHandler=d}getUnexpectedErrorHandler(){return this.unexpectedErrorHandler}onUnexpectedError(d){this.unexpectedErrorHandler(d),this.emit(d)}onUnexpectedExternalError(d){this.unexpectedErrorHandler(d)}}n.ErrorHandler=l,n.errorHandler=new l;let f="Canceled";function k(h){return h instanceof a||h instanceof Error&&h.name===f&&h.message===f}class a extends Error{constructor(){super(f),this.name=this.message}}n.CancellationError=a;class w extends TypeError{constructor(d){super(d?`${d} is read-only and cannot be changed`:"Cannot change read-only property")}}n.ReadonlyError=w;class c extends Error{constructor(d){super("NotImplemented"),d&&(this.message=d)}}n.NotImplementedError=c;class g extends Error{constructor(d){super("NotSupported"),d&&(this.message=d)}}n.NotSupportedError=g;class _ extends Error{constructor(){super(...arguments),this.isExpected=!0}}n.ExpectedError=_;class i extends Error{constructor(d){super(d),this.name="CodeExpectedError"}static fromError(d){if(d instanceof i)return d;let u=new i;return u.message=d.message,u.stack=d.stack,u}static isErrorNoTelemetry(d){return d.name==="CodeExpectedError"}}n.ErrorNoTelemetry=i;class p extends Error{constructor(d){super(d||"An unexpected bug occurred."),Object.setPrototypeOf(this,p.prototype)}}n.BugIndicatingError=p},802:(y,n,l)=>{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(x){let A=i;return i=x,{dispose(){i=A}}};let f=l(9807),k=l(8841),a=l(7150),w=l(6317),c=l(9725);var g;(function(x){function A(T){return(R,F=null,j)=>{let U,V=!1;return U=T((te=>{if(!V)return U?U.dispose():V=!0,R.call(F,te)}),null,j),V&&U.dispose(),U}}function L(T,R,F){return X(((j,U=null,V)=>T((te=>j.call(U,R(te))),null,V)),F)}function z(T,R,F){return X(((j,U=null,V)=>T((te=>R(te)&&j.call(U,te)),null,V)),F)}function X(T,R){let F,j=new P({onWillAddFirstListener(){F=T(j.fire,j)},onDidRemoveLastListener(){F?.dispose()}});return R?.add(j),j.event}function N(T,R,F=100,j=!1,U=!1,V,te){let I,Z,Y,ee,we=0,ke=new P({leakWarningThreshold:V,onWillAddFirstListener(){I=T((Xe=>{we++,Z=R(Z,Xe),j&&!Y&&(ke.fire(Z),Z=void 0),ee=()=>{let xe=Z;Z=void 0,Y=void 0,(!j||we>1)&&ke.fire(xe),we=0},typeof F=="number"?(clearTimeout(Y),Y=setTimeout(ee,F)):Y===void 0&&(Y=0,queueMicrotask(ee))}))},onWillRemoveListener(){U&&we>0&&ee?.()},onDidRemoveLastListener(){ee=void 0,I.dispose()}});return te?.add(ke),ke.event}x.None=()=>a.Disposable.None,x.defer=function(T,R){return N(T,(()=>{}),0,void 0,!0,void 0,R)},x.once=A,x.map=L,x.forEach=function(T,R,F){return X(((j,U=null,V)=>T((te=>{R(te),j.call(U,te)}),null,V)),F)},x.filter=z,x.signal=function(T){return T},x.any=function(...T){return(R,F=null,j)=>{return U=(0,a.combinedDisposable)(...T.map((te=>te((I=>R.call(F,I)))))),(V=j)instanceof Array?V.push(U):V&&V.add(U),U;var U,V}},x.reduce=function(T,R,F,j){let U=F;return L(T,(V=>(U=R(U,V),U)),j)},x.debounce=N,x.accumulate=function(T,R=0,F){return x.debounce(T,((j,U)=>j?(j.push(U),j):[U]),R,void 0,!0,void 0,F)},x.latch=function(T,R=(j,U)=>j===U,F){let j,U=!0;return z(T,(V=>{let te=U||!R(V,j);return U=!1,j=V,te}),F)},x.split=function(T,R,F){return[x.filter(T,R,F),x.filter(T,(j=>!R(j)),F)]},x.buffer=function(T,R=!1,F=[],j){let U=F.slice(),V=T((Z=>{U?U.push(Z):I.fire(Z)}));j&&j.add(V);let te=()=>{U?.forEach((Z=>I.fire(Z))),U=null},I=new P({onWillAddFirstListener(){V||(V=T((Z=>I.fire(Z))),j&&j.add(V))},onDidAddFirstListener(){U&&(R?setTimeout(te):te())},onDidRemoveLastListener(){V&&V.dispose(),V=null}});return j&&j.add(I),I.event},x.chain=function(T,R){return(F,j,U)=>{let V=R(new v);return T((function(te){let I=V.evaluate(te);I!==q&&F.call(j,I)}),void 0,U)}};let q=Symbol("HaltChainable");class v{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 j=F;return this.steps.push((U=>(j=R(j,U),j))),this}latch(R=(F,j)=>F===j){let F,j=!0;return this.steps.push((U=>{let V=j||!R(U,F);return j=!1,F=U,V?U:q})),this}evaluate(R){for(let F of this.steps)if((R=F(R))===q)break;return R}}x.fromNodeEventEmitter=function(T,R,F=j=>j){let j=(...V)=>U.fire(F(...V)),U=new P({onWillAddFirstListener:()=>T.on(R,j),onDidRemoveLastListener:()=>T.removeListener(R,j)});return U.event},x.fromDOMEventEmitter=function(T,R,F=j=>j){let j=(...V)=>U.fire(F(...V)),U=new P({onWillAddFirstListener:()=>T.addEventListener(R,j),onDidRemoveLastListener:()=>T.removeEventListener(R,j)});return U.event},x.toPromise=function(T){return new Promise((R=>A(T)(R)))},x.fromPromise=function(T){let R=new P;return T.then((F=>{R.fire(F)}),(()=>{R.fire(void 0)})).finally((()=>{R.dispose()})),R.event},x.forward=function(T,R){return T((F=>R.fire(F)))},x.runAndSubscribe=function(T,R,F){return R(F),T((j=>R(j)))};class C{constructor(R,F){this._observable=R,this._counter=0,this._hasChanged=!1;let j={onWillAddFirstListener:()=>{R.addObserver(this)},onDidRemoveLastListener:()=>{R.removeObserver(this)}};this.emitter=new P(j),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())))}}x.fromObservable=function(T,R){return new C(T,R).emitter.event},x.fromObservableLight=function(T){return(R,F,j)=>{let U=0,V=!1,te={beginUpdate(){U++},endUpdate(){U--,U===0&&(T.reportChanges(),V&&(V=!1,R.call(F)))},handlePossibleChange(){},handleChange(){V=!0}};T.addObserver(te),T.reportChanges();let I={dispose(){T.removeObserver(te)}};return j instanceof a.DisposableStore?j.add(I):Array.isArray(j)&&j.push(I),I}}})(g||(n.Event=g={}));class _{static{this.all=new Set}static{this._idPool=0}constructor(A){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${A}_${_._idPool++}`,_.all.add(this)}start(A){this._stopWatch=new c.StopWatch,this.listenerCount=A}stop(){if(this._stopWatch){let A=this._stopWatch.elapsed();this.durations.push(A),this.elapsedOverall+=A,this.invocationCount+=1,this._stopWatch=void 0}}}n.EventProfiling=_;let i=-1;class p{static{this._idPool=1}constructor(A,L,z=(p._idPool++).toString(16).padStart(3,"0")){this._errorHandler=A,this.threshold=L,this.name=z,this._warnCountdown=0}dispose(){this._stacks?.clear()}check(A,L){let z=this.threshold;if(z<=0||L<z)return;this._stacks||(this._stacks=new Map);let X=this._stacks.get(A.value)||0;if(this._stacks.set(A.value,X+1),this._warnCountdown-=1,this._warnCountdown<=0){this._warnCountdown=.5*z;let[N,q]=this.getMostFrequentStack(),v=`[${this.name}] potential listener LEAK detected, having ${L} listeners already. MOST frequent listener (${q}):`;console.warn(v),console.warn(N);let C=new d(v,N);this._errorHandler(C)}return()=>{let N=this._stacks.get(A.value)||0;this._stacks.set(A.value,N-1)}}getMostFrequentStack(){if(!this._stacks)return;let A,L=0;for(let[z,X]of this._stacks)(!A||L<X)&&(A=[z,X],L=X);return A}}class h{static create(){let A=new Error;return new h(A.stack??"")}constructor(A){this.value=A}print(){console.warn(this.value.split(`
10
10
  `).slice(2).join(`
11
- `))}}class d extends Error{constructor(A,L){super(A),this.name="ListenerLeakError",this.stack=L}}n.ListenerLeakError=d;class u extends Error{constructor(A,L){super(A),this.name="ListenerRefusalError",this.stack=L}}n.ListenerRefusalError=u;let b=0;class S{constructor(A){this.value=A,this.id=b++}}class P{constructor(A){this._size=0,this._options=A,this._leakageMon=i>0||this._options?.leakWarningThreshold?new p(A?.onListenerError??f.onUnexpectedError,this._options?.leakWarningThreshold??i):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??=(A,L,z)=>{if(this._leakageMon&&this._size>this._leakageMon.threshold**2){let v=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(v);let C=this._leakageMon.getMostFrequentStack()??["UNKNOWN stack",-1],T=new u(`${v}. HINT: Stack shows most frequent listener (${C[1]}-times)`,C[0]);return(this._options?.onListenerError||f.onUnexpectedError)(T),a.Disposable.None}if(this._disposed)return a.Disposable.None;L&&(A=A.bind(L));let X=new S(A),W;this._leakageMon&&this._size>=Math.ceil(.2*this._leakageMon.threshold)&&(X.stack=h.create(),W=this._leakageMon.check(X.stack,this._size+1)),this._listeners?this._listeners instanceof S?(this._deliveryQueue??=new E,this._listeners=[this._listeners,X]):this._listeners.push(X):(this._options?.onWillAddFirstListener?.(this),this._listeners=X,this._options?.onDidAddFirstListener?.(this)),this._size++;let q=(0,a.toDisposable)((()=>{W?.(),this._removeListener(X)}));return z instanceof a.DisposableStore?z.add(q):Array.isArray(z)&&z.push(q),q},this._event}_removeListener(A){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 L=this._listeners,z=L.indexOf(A);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--,L[z]=void 0;let X=this._deliveryQueue.current===this;if(2*this._size<=L.length){let W=0;for(let q=0;q<L.length;q++)L[q]?L[W++]=L[q]:X&&(this._deliveryQueue.end--,W<this._deliveryQueue.i&&this._deliveryQueue.i--);L.length=W}}_deliver(A,L){if(!A)return;let z=this._options?.onListenerError||f.onUnexpectedError;if(z)try{A.value(L)}catch(X){z(X)}else A.value(L)}_deliverQueue(A){let L=A.current._listeners;for(;A.i<A.end;)this._deliver(L[A.i++],A.value);A.reset()}fire(A){if(this._deliveryQueue?.current&&(this._deliverQueue(this._deliveryQueue),this._perfMon?.stop()),this._perfMon?.start(this._size),this._listeners)if(this._listeners instanceof S)this._deliver(this._listeners,A);else{let L=this._deliveryQueue;L.enqueue(this,A,this._listeners.length),this._deliverQueue(L)}this._perfMon?.stop()}hasListeners(){return this._size>0}}n.Emitter=P,n.createEventDeliveryQueue=()=>new E;class E{constructor(){this.i=-1,this.end=0}enqueue(A,L,z){this.i=0,this.end=z,this.current=A,this.value=L}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}n.AsyncEmitter=class extends P{async fireAsync(x,A,L){if(this._listeners)for(this._asyncDeliveryQueue||(this._asyncDeliveryQueue=new w.LinkedList),((z,X)=>{if(z instanceof S)X(z);else for(let W=0;W<z.length;W++){let q=z[W];q&&X(q)}})(this._listeners,(z=>this._asyncDeliveryQueue.push([z.value,x])));this._asyncDeliveryQueue.size>0&&!A.isCancellationRequested;){let[z,X]=this._asyncDeliveryQueue.shift(),W=[],q={...X,token:A,waitUntil:v=>{if(Object.isFrozen(W))throw new Error("waitUntil can NOT be called asynchronous");L&&(v=L(v,z)),W.push(v)}};try{z(q)}catch(v){(0,f.onUnexpectedError)(v);continue}Object.freeze(W),await Promise.allSettled(W).then((v=>{for(let C of v)C.status==="rejected"&&(0,f.onUnexpectedError)(C.reason)}))}}};class H extends P{get isPaused(){return this._isPaused!==0}constructor(A){super(A),this._isPaused=0,this._eventQueue=new w.LinkedList,this._mergeFn=A?.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused==0)if(this._mergeFn){if(this._eventQueue.size>0){let A=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(A))}}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(A){this._size&&(this._isPaused!==0?this._eventQueue.push(A):super.fire(A))}}n.PauseableEmitter=H,n.DebounceEmitter=class extends H{constructor(x){super(x),this._delay=x.delay??100}fire(x){this._handle||(this.pause(),this._handle=setTimeout((()=>{this._handle=void 0,this.resume()}),this._delay)),super.fire(x)}},n.MicrotaskEmitter=class extends P{constructor(x){super(x),this._queuedEvents=[],this._mergeFn=x?.merge}fire(x){this.hasListeners()&&(this._queuedEvents.push(x),this._queuedEvents.length===1&&queueMicrotask((()=>{this._mergeFn?super.fire(this._mergeFn(this._queuedEvents)):this._queuedEvents.forEach((A=>super.fire(A))),this._queuedEvents=[]})))}};class ${constructor(){this.hasListeners=!1,this.events=[],this.emitter=new P({onWillAddFirstListener:()=>this.onFirstListenerAdd(),onDidRemoveLastListener:()=>this.onLastListenerRemove()})}get event(){return this.emitter.event}add(A){let L={event:A,listener:null};return this.events.push(L),this.hasListeners&&this.hook(L),(0,a.toDisposable)((0,k.createSingleCallFunction)((()=>{this.hasListeners&&this.unhook(L);let z=this.events.indexOf(L);this.events.splice(z,1)})))}onFirstListenerAdd(){this.hasListeners=!0,this.events.forEach((A=>this.hook(A)))}onLastListenerRemove(){this.hasListeners=!1,this.events.forEach((A=>this.unhook(A)))}hook(A){A.listener=A.event((L=>this.emitter.fire(L)))}unhook(A){A.listener?.dispose(),A.listener=null}dispose(){this.emitter.dispose();for(let A of this.events)A.listener?.dispose();this.events=[]}}n.EventMultiplexer=$,n.DynamicListEventMultiplexer=class{constructor(x,A,L,z){this._store=new a.DisposableStore;let X=this._store.add(new $),W=this._store.add(new a.DisposableMap);function q(v){W.set(v,X.add(z(v)))}for(let v of x)q(v);this._store.add(A((v=>{q(v)}))),this._store.add(L((v=>{W.deleteAndDispose(v)}))),this.event=X.event}dispose(){this._store.dispose()}},n.EventBufferer=class{constructor(){this.data=[]}wrapEvent(x,A,L){return(z,X,W)=>x((q=>{let v=this.data[this.data.length-1];if(!A)return void(v?v.buffers.push((()=>z.call(X,q))):z.call(X,q));let C=v;C?(C.items??=[],C.items.push(q),C.buffers.length===0&&v.buffers.push((()=>{C.reducedResult??=L?C.items.reduce(A,L):C.items.reduce(A),z.call(X,C.reducedResult)}))):z.call(X,A(L,q))}),void 0,W)}bufferEvents(x){let A={buffers:new Array};this.data.push(A);let L=x();return this.data.pop(),A.buffers.forEach((z=>z())),L}},n.Relay=class{constructor(){this.listening=!1,this.inputEvent=g.None,this.inputEventListener=a.Disposable.None,this.emitter=new P({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(x){this.inputEvent=x,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=x(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}},n.ValueWithChangeEvent=class{static const(x){return new D(x)}constructor(x){this._value=x,this._onDidChange=new P,this.onDidChange=this._onDidChange.event}get value(){return this._value}set value(x){x!==this._value&&(this._value=x,this._onDidChange.fire(void 0))}};class D{constructor(A){this.value=A,this.onDidChange=g.None}}},8841:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createSingleCallFunction=function(l,f){let k=this,a,w=!1;return function(){if(w)return a;if(w=!0,f)try{a=l.apply(k,arguments)}finally{f()}else a=l.apply(k,arguments);return a}}},4218:(y,n)=>{var l;Object.defineProperty(n,"__esModule",{value:!0}),n.Iterable=void 0,(function(f){function k(c){return c&&typeof c=="object"&&typeof c[Symbol.iterator]=="function"}f.is=k;let a=Object.freeze([]);function*w(c){yield c}f.empty=function(){return a},f.single=w,f.wrap=function(c){return k(c)?c:w(c)},f.from=function(c){return c||a},f.reverse=function*(c){for(let g=c.length-1;g>=0;g--)yield c[g]},f.isEmpty=function(c){return!c||c[Symbol.iterator]().next().done===!0},f.first=function(c){return c[Symbol.iterator]().next().value},f.some=function(c,g){let _=0;for(let i of c)if(g(i,_++))return!0;return!1},f.find=function(c,g){for(let _ of c)if(g(_))return _},f.filter=function*(c,g){for(let _ of c)g(_)&&(yield _)},f.map=function*(c,g){let _=0;for(let i of c)yield g(i,_++)},f.flatMap=function*(c,g){let _=0;for(let i of c)yield*g(i,_++)},f.concat=function*(...c){for(let g of c)yield*g},f.reduce=function(c,g,_){let i=_;for(let p of c)i=g(i,p);return i},f.slice=function*(c,g,_=c.length){for(g<0&&(g+=c.length),_<0?_+=c.length:_>c.length&&(_=c.length);g<_;g++)yield c[g]},f.consume=function(c,g=Number.POSITIVE_INFINITY){let _=[];if(g===0)return[_,c];let i=c[Symbol.iterator]();for(let p=0;p<g;p++){let h=i.next();if(h.done)return[_,f.empty()];_.push(h.value)}return[_,{[Symbol.iterator]:()=>i}]},f.asyncToArray=async function(c){let g=[];for await(let _ of c)g.push(_);return Promise.resolve(g)}})(l||(n.Iterable=l={}))},7150:(y,n,l)=>{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($){g=$},n.trackDisposable=i,n.markAsDisposed=p,n.markAsSingleton=function($){return g?.markAsSingleton($),$},n.isDisposable=d,n.dispose=u,n.disposeIfDisposable=function($){for(let D of $)d(D)&&D.dispose();return[]},n.combinedDisposable=function(...$){let D=b((()=>u($)));return(function(x,A){if(g)for(let L of x)g.setParent(L,A)})($,D),D},n.toDisposable=b,n.disposeOnReturn=function($){let D=new S;try{$(D)}finally{D.dispose()}};let f=l(3058),k=l(9087),a=l(2608),w=l(8841),c=l(4218),g=null;class _{constructor(){this.livingDisposables=new Map}static{this.idx=0}getDisposableData(D){let x=this.livingDisposables.get(D);return x||(x={parent:null,source:null,isSingleton:!1,value:D,idx:_.idx++},this.livingDisposables.set(D,x)),x}trackDisposable(D){let x=this.getDisposableData(D);x.source||(x.source=new Error().stack)}setParent(D,x){this.getDisposableData(D).parent=x}markAsDisposed(D){this.livingDisposables.delete(D)}markAsSingleton(D){this.getDisposableData(D).isSingleton=!0}getRootParent(D,x){let A=x.get(D);if(A)return A;let L=D.parent?this.getRootParent(this.getDisposableData(D.parent),x):D;return x.set(D,L),L}getTrackedDisposables(){let D=new Map;return[...this.livingDisposables.entries()].filter((([,x])=>x.source!==null&&!this.getRootParent(x,D).isSingleton)).flatMap((([x])=>x))}computeLeakingDisposables(D=10,x){let A;if(x)A=x;else{let q=new Map,v=[...this.livingDisposables.values()].filter((T=>T.source!==null&&!this.getRootParent(T,q).isSingleton));if(v.length===0)return;let C=new Set(v.map((T=>T.value)));if(A=v.filter((T=>!(T.parent&&C.has(T.parent)))),A.length===0)throw new Error("There are cyclic diposable chains!")}if(!A)return;function L(q){let v=q.source.split(`
11
+ `))}}class d extends Error{constructor(A,L){super(A),this.name="ListenerLeakError",this.stack=L}}n.ListenerLeakError=d;class u extends Error{constructor(A,L){super(A),this.name="ListenerRefusalError",this.stack=L}}n.ListenerRefusalError=u;let b=0;class S{constructor(A){this.value=A,this.id=b++}}class P{constructor(A){this._size=0,this._options=A,this._leakageMon=i>0||this._options?.leakWarningThreshold?new p(A?.onListenerError??f.onUnexpectedError,this._options?.leakWarningThreshold??i):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??=(A,L,z)=>{if(this._leakageMon&&this._size>this._leakageMon.threshold**2){let v=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(v);let C=this._leakageMon.getMostFrequentStack()??["UNKNOWN stack",-1],T=new u(`${v}. HINT: Stack shows most frequent listener (${C[1]}-times)`,C[0]);return(this._options?.onListenerError||f.onUnexpectedError)(T),a.Disposable.None}if(this._disposed)return a.Disposable.None;L&&(A=A.bind(L));let X=new S(A),N;this._leakageMon&&this._size>=Math.ceil(.2*this._leakageMon.threshold)&&(X.stack=h.create(),N=this._leakageMon.check(X.stack,this._size+1)),this._listeners?this._listeners instanceof S?(this._deliveryQueue??=new E,this._listeners=[this._listeners,X]):this._listeners.push(X):(this._options?.onWillAddFirstListener?.(this),this._listeners=X,this._options?.onDidAddFirstListener?.(this)),this._size++;let q=(0,a.toDisposable)((()=>{N?.(),this._removeListener(X)}));return z instanceof a.DisposableStore?z.add(q):Array.isArray(z)&&z.push(q),q},this._event}_removeListener(A){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 L=this._listeners,z=L.indexOf(A);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--,L[z]=void 0;let X=this._deliveryQueue.current===this;if(2*this._size<=L.length){let N=0;for(let q=0;q<L.length;q++)L[q]?L[N++]=L[q]:X&&(this._deliveryQueue.end--,N<this._deliveryQueue.i&&this._deliveryQueue.i--);L.length=N}}_deliver(A,L){if(!A)return;let z=this._options?.onListenerError||f.onUnexpectedError;if(z)try{A.value(L)}catch(X){z(X)}else A.value(L)}_deliverQueue(A){let L=A.current._listeners;for(;A.i<A.end;)this._deliver(L[A.i++],A.value);A.reset()}fire(A){if(this._deliveryQueue?.current&&(this._deliverQueue(this._deliveryQueue),this._perfMon?.stop()),this._perfMon?.start(this._size),this._listeners)if(this._listeners instanceof S)this._deliver(this._listeners,A);else{let L=this._deliveryQueue;L.enqueue(this,A,this._listeners.length),this._deliverQueue(L)}this._perfMon?.stop()}hasListeners(){return this._size>0}}n.Emitter=P,n.createEventDeliveryQueue=()=>new E;class E{constructor(){this.i=-1,this.end=0}enqueue(A,L,z){this.i=0,this.end=z,this.current=A,this.value=L}reset(){this.i=this.end,this.current=void 0,this.value=void 0}}n.AsyncEmitter=class extends P{async fireAsync(x,A,L){if(this._listeners)for(this._asyncDeliveryQueue||(this._asyncDeliveryQueue=new w.LinkedList),((z,X)=>{if(z instanceof S)X(z);else for(let N=0;N<z.length;N++){let q=z[N];q&&X(q)}})(this._listeners,(z=>this._asyncDeliveryQueue.push([z.value,x])));this._asyncDeliveryQueue.size>0&&!A.isCancellationRequested;){let[z,X]=this._asyncDeliveryQueue.shift(),N=[],q={...X,token:A,waitUntil:v=>{if(Object.isFrozen(N))throw new Error("waitUntil can NOT be called asynchronous");L&&(v=L(v,z)),N.push(v)}};try{z(q)}catch(v){(0,f.onUnexpectedError)(v);continue}Object.freeze(N),await Promise.allSettled(N).then((v=>{for(let C of v)C.status==="rejected"&&(0,f.onUnexpectedError)(C.reason)}))}}};class H extends P{get isPaused(){return this._isPaused!==0}constructor(A){super(A),this._isPaused=0,this._eventQueue=new w.LinkedList,this._mergeFn=A?.merge}pause(){this._isPaused++}resume(){if(this._isPaused!==0&&--this._isPaused==0)if(this._mergeFn){if(this._eventQueue.size>0){let A=Array.from(this._eventQueue);this._eventQueue.clear(),super.fire(this._mergeFn(A))}}else for(;!this._isPaused&&this._eventQueue.size!==0;)super.fire(this._eventQueue.shift())}fire(A){this._size&&(this._isPaused!==0?this._eventQueue.push(A):super.fire(A))}}n.PauseableEmitter=H,n.DebounceEmitter=class extends H{constructor(x){super(x),this._delay=x.delay??100}fire(x){this._handle||(this.pause(),this._handle=setTimeout((()=>{this._handle=void 0,this.resume()}),this._delay)),super.fire(x)}},n.MicrotaskEmitter=class extends P{constructor(x){super(x),this._queuedEvents=[],this._mergeFn=x?.merge}fire(x){this.hasListeners()&&(this._queuedEvents.push(x),this._queuedEvents.length===1&&queueMicrotask((()=>{this._mergeFn?super.fire(this._mergeFn(this._queuedEvents)):this._queuedEvents.forEach((A=>super.fire(A))),this._queuedEvents=[]})))}};class ${constructor(){this.hasListeners=!1,this.events=[],this.emitter=new P({onWillAddFirstListener:()=>this.onFirstListenerAdd(),onDidRemoveLastListener:()=>this.onLastListenerRemove()})}get event(){return this.emitter.event}add(A){let L={event:A,listener:null};return this.events.push(L),this.hasListeners&&this.hook(L),(0,a.toDisposable)((0,k.createSingleCallFunction)((()=>{this.hasListeners&&this.unhook(L);let z=this.events.indexOf(L);this.events.splice(z,1)})))}onFirstListenerAdd(){this.hasListeners=!0,this.events.forEach((A=>this.hook(A)))}onLastListenerRemove(){this.hasListeners=!1,this.events.forEach((A=>this.unhook(A)))}hook(A){A.listener=A.event((L=>this.emitter.fire(L)))}unhook(A){A.listener?.dispose(),A.listener=null}dispose(){this.emitter.dispose();for(let A of this.events)A.listener?.dispose();this.events=[]}}n.EventMultiplexer=$,n.DynamicListEventMultiplexer=class{constructor(x,A,L,z){this._store=new a.DisposableStore;let X=this._store.add(new $),N=this._store.add(new a.DisposableMap);function q(v){N.set(v,X.add(z(v)))}for(let v of x)q(v);this._store.add(A((v=>{q(v)}))),this._store.add(L((v=>{N.deleteAndDispose(v)}))),this.event=X.event}dispose(){this._store.dispose()}},n.EventBufferer=class{constructor(){this.data=[]}wrapEvent(x,A,L){return(z,X,N)=>x((q=>{let v=this.data[this.data.length-1];if(!A)return void(v?v.buffers.push((()=>z.call(X,q))):z.call(X,q));let C=v;C?(C.items??=[],C.items.push(q),C.buffers.length===0&&v.buffers.push((()=>{C.reducedResult??=L?C.items.reduce(A,L):C.items.reduce(A),z.call(X,C.reducedResult)}))):z.call(X,A(L,q))}),void 0,N)}bufferEvents(x){let A={buffers:new Array};this.data.push(A);let L=x();return this.data.pop(),A.buffers.forEach((z=>z())),L}},n.Relay=class{constructor(){this.listening=!1,this.inputEvent=g.None,this.inputEventListener=a.Disposable.None,this.emitter=new P({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(x){this.inputEvent=x,this.listening&&(this.inputEventListener.dispose(),this.inputEventListener=x(this.emitter.fire,this.emitter))}dispose(){this.inputEventListener.dispose(),this.emitter.dispose()}},n.ValueWithChangeEvent=class{static const(x){return new D(x)}constructor(x){this._value=x,this._onDidChange=new P,this.onDidChange=this._onDidChange.event}get value(){return this._value}set value(x){x!==this._value&&(this._value=x,this._onDidChange.fire(void 0))}};class D{constructor(A){this.value=A,this.onDidChange=g.None}}},8841:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.createSingleCallFunction=function(l,f){let k=this,a,w=!1;return function(){if(w)return a;if(w=!0,f)try{a=l.apply(k,arguments)}finally{f()}else a=l.apply(k,arguments);return a}}},4218:(y,n)=>{var l;Object.defineProperty(n,"__esModule",{value:!0}),n.Iterable=void 0,(function(f){function k(c){return c&&typeof c=="object"&&typeof c[Symbol.iterator]=="function"}f.is=k;let a=Object.freeze([]);function*w(c){yield c}f.empty=function(){return a},f.single=w,f.wrap=function(c){return k(c)?c:w(c)},f.from=function(c){return c||a},f.reverse=function*(c){for(let g=c.length-1;g>=0;g--)yield c[g]},f.isEmpty=function(c){return!c||c[Symbol.iterator]().next().done===!0},f.first=function(c){return c[Symbol.iterator]().next().value},f.some=function(c,g){let _=0;for(let i of c)if(g(i,_++))return!0;return!1},f.find=function(c,g){for(let _ of c)if(g(_))return _},f.filter=function*(c,g){for(let _ of c)g(_)&&(yield _)},f.map=function*(c,g){let _=0;for(let i of c)yield g(i,_++)},f.flatMap=function*(c,g){let _=0;for(let i of c)yield*g(i,_++)},f.concat=function*(...c){for(let g of c)yield*g},f.reduce=function(c,g,_){let i=_;for(let p of c)i=g(i,p);return i},f.slice=function*(c,g,_=c.length){for(g<0&&(g+=c.length),_<0?_+=c.length:_>c.length&&(_=c.length);g<_;g++)yield c[g]},f.consume=function(c,g=Number.POSITIVE_INFINITY){let _=[];if(g===0)return[_,c];let i=c[Symbol.iterator]();for(let p=0;p<g;p++){let h=i.next();if(h.done)return[_,f.empty()];_.push(h.value)}return[_,{[Symbol.iterator]:()=>i}]},f.asyncToArray=async function(c){let g=[];for await(let _ of c)g.push(_);return Promise.resolve(g)}})(l||(n.Iterable=l={}))},7150:(y,n,l)=>{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($){g=$},n.trackDisposable=i,n.markAsDisposed=p,n.markAsSingleton=function($){return g?.markAsSingleton($),$},n.isDisposable=d,n.dispose=u,n.disposeIfDisposable=function($){for(let D of $)d(D)&&D.dispose();return[]},n.combinedDisposable=function(...$){let D=b((()=>u($)));return(function(x,A){if(g)for(let L of x)g.setParent(L,A)})($,D),D},n.toDisposable=b,n.disposeOnReturn=function($){let D=new S;try{$(D)}finally{D.dispose()}};let f=l(3058),k=l(9087),a=l(2608),w=l(8841),c=l(4218),g=null;class _{constructor(){this.livingDisposables=new Map}static{this.idx=0}getDisposableData(D){let x=this.livingDisposables.get(D);return x||(x={parent:null,source:null,isSingleton:!1,value:D,idx:_.idx++},this.livingDisposables.set(D,x)),x}trackDisposable(D){let x=this.getDisposableData(D);x.source||(x.source=new Error().stack)}setParent(D,x){this.getDisposableData(D).parent=x}markAsDisposed(D){this.livingDisposables.delete(D)}markAsSingleton(D){this.getDisposableData(D).isSingleton=!0}getRootParent(D,x){let A=x.get(D);if(A)return A;let L=D.parent?this.getRootParent(this.getDisposableData(D.parent),x):D;return x.set(D,L),L}getTrackedDisposables(){let D=new Map;return[...this.livingDisposables.entries()].filter((([,x])=>x.source!==null&&!this.getRootParent(x,D).isSingleton)).flatMap((([x])=>x))}computeLeakingDisposables(D=10,x){let A;if(x)A=x;else{let q=new Map,v=[...this.livingDisposables.values()].filter((T=>T.source!==null&&!this.getRootParent(T,q).isSingleton));if(v.length===0)return;let C=new Set(v.map((T=>T.value)));if(A=v.filter((T=>!(T.parent&&C.has(T.parent)))),A.length===0)throw new Error("There are cyclic diposable chains!")}if(!A)return;function L(q){let v=q.source.split(`
12
12
  `).map((C=>C.trim().replace("at ",""))).filter((C=>C!==""));return(function(C,T){for(;C.length>0&&T.some((R=>typeof R=="string"?R===C[0]:C[0].match(R)));)C.shift()})(v,["Error",/^trackDisposable \(.*\)$/,/^DisposableTracker.trackDisposable \(.*\)$/]),v.reverse()}let z=new a.SetMap;for(let q of A){let v=L(q);for(let C=0;C<=v.length;C++)z.add(v.slice(0,C).join(`
13
- `),q)}A.sort((0,f.compareBy)((q=>q.idx),f.numberComparator));let X="",W=0;for(let q of A.slice(0,D)){W++;let v=L(q),C=[];for(let T=0;T<v.length;T++){let R=v[T];R=`(shared with ${z.get(v.slice(0,T+1).join(`
13
+ `),q)}A.sort((0,f.compareBy)((q=>q.idx),f.numberComparator));let X="",N=0;for(let q of A.slice(0,D)){N++;let v=L(q),C=[];for(let T=0;T<v.length;T++){let R=v[T];R=`(shared with ${z.get(v.slice(0,T+1).join(`
14
14
  `)).size}/${A.length} leaks) at ${R}`;let F=z.get(v.slice(0,T).join(`
15
15
  `)),j=(0,k.groupBy)([...F].map((U=>L(U)[T])),(U=>U));delete j[v[T]];for(let[U,V]of Object.entries(j))C.unshift(` - stacktraces of ${V.length} other leaks continue with ${U}`);C.unshift(R)}X+=`
16
16
 
17
17
 
18
- ==================== Leaking disposable ${W}/${A.length}: ${q.value.constructor.name} ====================
18
+ ==================== Leaking disposable ${N}/${A.length}: ${q.value.constructor.name} ====================
19
19
  ${C.join(`
20
20
  `)}
21
21
  ============================================================
@@ -26,85 +26,85 @@ ${C.join(`
26
26
  ... and ${A.length-D} more leaking disposables
27
27
 
28
28
  `),{leaks:A,details:X}}}function i($){return g?.trackDisposable($),$}function p($){g?.markAsDisposed($)}function h($,D){g?.setParent($,D)}function d($){return typeof $=="object"&&$!==null&&typeof $.dispose=="function"&&$.dispose.length===0}function u($){if(c.Iterable.is($)){let D=[];for(let x of $)if(x)try{x.dispose()}catch(A){D.push(A)}if(D.length===1)throw D[0];if(D.length>1)throw new AggregateError(D,"Encountered errors while disposing of store");return Array.isArray($)?[]:$}if($)return $.dispose(),$}function b($){let D=i({dispose:(0,w.createSingleCallFunction)((()=>{p(D),$()}))});return D}n.DisposableTracker=_;class S{static{this.DISABLE_DISPOSED_WARNING=!1}constructor(){this._toDispose=new Set,this._isDisposed=!1,i(this)}dispose(){this._isDisposed||(p(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(D){if(!D)return D;if(D===this)throw new Error("Cannot register a disposable on itself!");return h(D,this),this._isDisposed?S.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(D),D}delete(D){if(D){if(D===this)throw new Error("Cannot dispose a disposable on itself!");this._toDispose.delete(D),D.dispose()}}deleteAndLeak(D){D&&this._toDispose.has(D)&&(this._toDispose.delete(D),h(D,null))}}n.DisposableStore=S;class P{static{this.None=Object.freeze({dispose(){}})}constructor(){this._store=new S,i(this),h(this._store,this)}dispose(){p(this),this._store.dispose()}_register(D){if(D===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(D)}}n.Disposable=P;class E{constructor(){this._isDisposed=!1,i(this)}get value(){return this._isDisposed?void 0:this._value}set value(D){this._isDisposed||D===this._value||(this._value?.dispose(),D&&h(D,this),this._value=D)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,p(this),this._value?.dispose(),this._value=void 0}clearAndLeak(){let D=this._value;return this._value=void 0,D&&h(D,null),D}}n.MutableDisposable=E,n.MandatoryMutableDisposable=class{constructor($){this._disposable=new E,this._isDisposed=!1,this._disposable.value=$}get value(){return this._disposable.value}set value($){this._isDisposed||$===this._disposable.value||(this._disposable.value=$)}dispose(){this._isDisposed=!0,this._disposable.dispose()}},n.RefCountedDisposable=class{constructor($){this._disposable=$,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,i(this)}set($){let D=$;return this.unset=()=>D=void 0,this.isset=()=>D!==void 0,this.dispose=()=>{D&&(D(),D=void 0,p(this))},this}},n.ReferenceCollection=class{constructor(){this.references=new Map}acquire($,...D){let x=this.references.get($);x||(x={counter:0,object:this.createReferencedObject($,...D)},this.references.set($,x));let{object:A}=x,L=(0,w.createSingleCallFunction)((()=>{--x.counter==0&&(this.destroyReferencedObject($,x.object),this.references.delete($))}));return x.counter++,{object:A,dispose:L}}},n.AsyncReferenceCollection=class{constructor($){this.referenceCollection=$}async acquire($,...D){let x=this.referenceCollection.acquire($,...D);try{return{object:await x.object,dispose:()=>x.dispose()}}catch(A){throw x.dispose(),A}}},n.ImmortalReference=class{constructor($){this.object=$}dispose(){}};class H{constructor(){this._store=new Map,this._isDisposed=!1,i(this)}dispose(){p(this),this._isDisposed=!0,this.clearAndDisposeAll()}clearAndDisposeAll(){if(this._store.size)try{u(this._store.values())}finally{this._store.clear()}}has(D){return this._store.has(D)}get size(){return this._store.size}get(D){return this._store.get(D)}set(D,x,A=!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),A||this._store.get(D)?.dispose(),this._store.set(D,x)}deleteAndDispose(D){this._store.get(D)?.dispose(),this._store.delete(D)}deleteAndLeak(D){let x=this._store.get(D);return this._store.delete(D),x}keys(){return this._store.keys()}values(){return this._store.values()}[Symbol.iterator](){return this._store[Symbol.iterator]()}}n.DisposableMap=H},6317:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.LinkedList=void 0;class l{static{this.Undefined=new l(void 0)}constructor(a){this.element=a,this.next=l.Undefined,this.prev=l.Undefined}}class f{constructor(){this._first=l.Undefined,this._last=l.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===l.Undefined}clear(){let a=this._first;for(;a!==l.Undefined;){let w=a.next;a.prev=l.Undefined,a.next=l.Undefined,a=w}this._first=l.Undefined,this._last=l.Undefined,this._size=0}unshift(a){return this._insert(a,!1)}push(a){return this._insert(a,!0)}_insert(a,w){let c=new l(a);if(this._first===l.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!==l.Undefined){let a=this._first.element;return this._remove(this._first),a}}pop(){if(this._last!==l.Undefined){let a=this._last.element;return this._remove(this._last),a}}_remove(a){if(a.prev!==l.Undefined&&a.next!==l.Undefined){let w=a.prev;w.next=a.next,a.next.prev=w}else a.prev===l.Undefined&&a.next===l.Undefined?(this._first=l.Undefined,this._last=l.Undefined):a.next===l.Undefined?(this._last=this._last.prev,this._last.next=l.Undefined):a.prev===l.Undefined&&(this._first=this._first.next,this._first.prev=l.Undefined);this._size-=1}*[Symbol.iterator](){let a=this._first;for(;a!==l.Undefined;)yield a.element,a=a.next}}n.LinkedList=f},2608:(y,n)=>{var l;Object.defineProperty(n,"__esModule",{value:!0}),n.SetMap=n.BidirectionalMap=n.CounterSet=n.Touch=void 0,n.getOrSet=function(f,k,a){let w=f.get(k);return w===void 0&&(w=a,f.set(k,w)),w},n.mapToString=function(f){let k=[];return f.forEach(((a,w)=>{k.push(`${w} => ${a}`)})),`Map(${f.size}) {${k.join(", ")}}`},n.setToString=function(f){let k=[];return f.forEach((a=>{k.push(a)})),`Set(${f.size}) {${k.join(", ")}}`},n.mapsStrictEqualIgnoreOrder=function(f,k){if(f===k)return!0;if(f.size!==k.size)return!1;for(let[a,w]of f)if(!k.has(a)||k.get(a)!==w)return!1;for(let[a]of k)if(!f.has(a))return!1;return!0},(function(f){f[f.None=0]="None",f[f.AsOld=1]="AsOld",f[f.AsNew=2]="AsNew"})(l||(n.Touch=l={})),n.CounterSet=class{constructor(){this.map=new Map}add(f){return this.map.set(f,(this.map.get(f)||0)+1),this}delete(f){let k=this.map.get(f)||0;return k!==0&&(k--,k===0?this.map.delete(f):this.map.set(f,k),!0)}has(f){return this.map.has(f)}},n.BidirectionalMap=class{constructor(f){if(this._m1=new Map,this._m2=new Map,f)for(let[k,a]of f)this.set(k,a)}clear(){this._m1.clear(),this._m2.clear()}set(f,k){this._m1.set(f,k),this._m2.set(k,f)}get(f){return this._m1.get(f)}getKey(f){return this._m2.get(f)}delete(f){let k=this._m1.get(f);return k!==void 0&&(this._m1.delete(f),this._m2.delete(k),!0)}forEach(f,k){this._m1.forEach(((a,w)=>{f.call(k,a,w,this)}))}keys(){return this._m1.keys()}values(){return this._m1.values()}},n.SetMap=class{constructor(){this.map=new Map}add(f,k){let a=this.map.get(f);a||(a=new Set,this.map.set(f,a)),a.add(k)}delete(f,k){let a=this.map.get(f);a&&(a.delete(k),a.size===0&&this.map.delete(f))}forEach(f,k){let a=this.map.get(f);a&&a.forEach(k)}get(f){return this.map.get(f)||new Set}}},9725:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.StopWatch=void 0;let l=globalThis.performance&&typeof globalThis.performance.now=="function";class f{static create(a){return new f(a)}constructor(a){this._now=l&&a===!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=f}},t={};function r(y){var n=t[y];if(n!==void 0)return n.exports;var l=t[y]={exports:{}};return e[y].call(l.exports,l,l.exports,r),l.exports}var s={};(()=>{var y=s;Object.defineProperty(y,"__esModule",{value:!0}),y.Terminal=void 0;let n=r(5101),l=r(6097),f=r(4335),k=r(5856),a=r(3027),w=r(7150),c=["cols","rows"];class g extends w.Disposable{constructor(i){super(),this._core=this._register(new k.Terminal(i)),this._addonManager=this._register(new a.AddonManager),this._publicOptions={...this._core.options};let p=d=>this._core.options[d],h=(d,u)=>{this._checkReadonlyOptions(d),this._core.options[d]=u};for(let d in this._core.options){Object.defineProperty(this._publicOptions,d,{get:()=>this._core.options[d],set:b=>{this._checkReadonlyOptions(d),this._core.options[d]=b}});let u={get:p.bind(this,d),set:h.bind(this,d)};Object.defineProperty(this._publicOptions,d,u)}}_checkReadonlyOptions(i){if(c.includes(i))throw new Error(`Option "${i}" 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 l.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new f.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 i=this._core.coreService.decPrivateModes,p="none";switch(this._core.coreMouseService.activeProtocol){case"X10":p="x10";break;case"VT200":p="vt200";break;case"DRAG":p="drag";break;case"ANY":p="any"}return{applicationCursorKeysMode:i.applicationCursorKeys,applicationKeypadMode:i.applicationKeypad,bracketedPasteMode:i.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:p,originMode:i.origin,reverseWraparoundMode:i.reverseWraparound,sendFocusMode:i.sendFocus,synchronizedOutputMode:i.synchronizedOutput,wraparoundMode:i.wraparound}}get options(){return this._publicOptions}set options(i){for(let p in i)this._publicOptions[p]=i[p]}input(i,p=!0){this._core.input(i,p)}resize(i,p){this._verifyIntegers(i,p),this._core.resize(i,p)}registerMarker(i=0){return this._checkProposedApi(),this._verifyIntegers(i),this._core.addMarker(i)}addMarker(i){return this.registerMarker(i)}dispose(){super.dispose()}scrollLines(i){this._verifyIntegers(i),this._core.scrollLines(i)}scrollPages(i){this._verifyIntegers(i),this._core.scrollPages(i)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(i){this._verifyIntegers(i),this._core.scrollToLine(i)}clear(){this._core.clear()}write(i,p){this._core.write(i,p)}writeln(i,p){this._core.write(i),this._core.write(`\r
29
- `,p)}reset(){this._core.reset()}loadAddon(i){this._addonManager.loadAddon(this,i)}_verifyIntegers(...i){for(let p of i)if(p===1/0||isNaN(p)||p%1!=0)throw new Error("This API only accepts integers")}}y.Terminal=g})();var o=oo;for(var m in s)o[m]=s[m];s.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})()});Ae();function Xs(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
+ `,p)}reset(){this._core.reset()}loadAddon(i){this._addonManager.loadAddon(this,i)}_verifyIntegers(...i){for(let p of i)if(p===1/0||isNaN(p)||p%1!=0)throw new Error("This API only accepts integers")}}y.Terminal=g})();var o=co;for(var m in s)o[m]=s[m];s.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})()});Ae();function Js(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.
30
30
 
31
- `+he());return{mode:"command",command:{kind:"addRepo",path:r}}}if(t.length>=3&&t[0]==="workspace"&&t[1]==="add"){let r=t.slice(2).join(" ").trim();if(r.length===0)throw new Error(`Workspace path cannot be empty.
31
+ `+fe());return{mode:"command",command:{kind:"addRepo",path:r}}}if(t.length>=3&&t[0]==="workspace"&&t[1]==="add"){let r=t.slice(2).join(" ").trim();if(r.length===0)throw new Error(`Workspace path cannot be empty.
32
32
 
33
- `+he());return{mode:"command",command:{kind:"addWorkspace",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(" ")}
33
+ `+fe());return{mode:"command",command:{kind:"addWorkspace",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(" ")}
34
34
 
35
- ${he()}`);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===3&&t[0]==="workspace"&&t[1]==="remove")return{mode:"command",command:{kind:"removeWorkspace",workspaceId:t[2].trim()}};if(t.length>=2&&t[0]==="task"&&t[1]==="new"){let r=t.indexOf("--repo"),s=t.indexOf("--workspace"),o=t.indexOf("--runner");if(r===-1&&s===-1)throw new Error(`Task creation now requires '--repo <repo-id>' or '--workspace <workspace-id>'.
35
+ ${fe()}`);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===3&&t[0]==="workspace"&&t[1]==="remove")return{mode:"command",command:{kind:"removeWorkspace",workspaceId:t[2].trim()}};if(t.length>=2&&t[0]==="task"&&t[1]==="new"){let r=t.indexOf("--repo"),s=t.indexOf("--workspace"),o=t.indexOf("--runner");if(r===-1&&s===-1)throw new Error(`Task creation now requires '--repo <repo-id>' or '--workspace <workspace-id>'.
36
36
 
37
- `+he());if(r!==-1&&s!==-1)throw new Error(`Task creation accepts either '--repo' or '--workspace', not both.
37
+ `+fe());if(r!==-1&&s!==-1)throw new Error(`Task creation accepts either '--repo' or '--workspace', not both.
38
38
 
39
- `+he());let m=r===-1?void 0:t[r+1]?.trim()??"",y=s===-1?void 0:t[s+1]?.trim()??"",n=o===-1?void 0:Gs(t[o+1]?.trim()??""),f=t.filter((k,a)=>a>1&&a!==r&&a!==r+1&&a!==s&&a!==s+1&&a!==o&&a!==o+1).join(" ").trim();if(m!==void 0&&m.length===0)throw new Error(`Repo id cannot be empty.
39
+ `+fe());let m=r===-1?void 0:t[r+1]?.trim()??"",y=s===-1?void 0:t[s+1]?.trim()??"",n=o===-1?void 0:Ys(t[o+1]?.trim()??""),f=t.filter((k,a)=>a>1&&a!==r&&a!==r+1&&a!==s&&a!==s+1&&a!==o&&a!==o+1).join(" ").trim();if(m!==void 0&&m.length===0)throw new Error(`Repo id cannot be empty.
40
40
 
41
- `+he());if(y!==void 0&&y.length===0)throw new Error(`Workspace id cannot be empty.
41
+ `+fe());if(y!==void 0&&y.length===0)throw new Error(`Workspace id cannot be empty.
42
42
 
43
- `+he());if(f.length===0)throw new Error(`Task prompt cannot be empty.
43
+ `+fe());if(f.length===0)throw new Error(`Task prompt cannot be empty.
44
44
 
45
- `+he());return{mode:"command",command:{kind:"createTask",...m?{repoId:m}:{},...y?{workspaceId:y}:{},prompt:f,...n?{runner:n}:{}}}}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(" ")}
45
+ `+fe());return{mode:"command",command:{kind:"createTask",...m?{repoId:m}:{},...y?{workspaceId:y}:{},prompt:f,...n?{runner:n}:{}}}}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(" ")}
46
46
 
47
- ${he()}`)}if(t.length===3&&t[0]==="task"&&t[1]==="attach")return{mode:"command",command:{kind:"attachTask",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="show")return{mode:"command",command:{kind:"showTask",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="logs")return{mode:"command",command:{kind:"streamTaskLogs",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="diff")return{mode:"command",command:{kind:"showTaskDiff",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="focus")return{mode:"command",command:{kind:"focusTask",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="open")return{mode:"command",command:{kind:"openTask",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="check")return{mode:"command",command:{kind:"runChecks",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="commit")return{mode:"command",command:{kind:"commitTask",taskId:Te(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(" ")}
47
+ ${fe()}`)}if(t.length===3&&t[0]==="task"&&t[1]==="attach")return{mode:"command",command:{kind:"attachTask",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="show")return{mode:"command",command:{kind:"showTask",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="logs")return{mode:"command",command:{kind:"streamTaskLogs",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="diff")return{mode:"command",command:{kind:"showTaskDiff",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="focus")return{mode:"command",command:{kind:"focusTask",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="open")return{mode:"command",command:{kind:"openTask",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="check")return{mode:"command",command:{kind:"runChecks",taskId:Te(t[2])}};if(t.length===3&&t[0]==="task"&&t[1]==="commit")return{mode:"command",command:{kind:"commitTask",taskId:Te(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(" ")}
48
48
 
49
- ${he()}`);return{mode:"command",command:{kind:"openPullRequest",taskId:Te(t[2]),watch:r}}}if(t.length===4&&t[0]==="link"&&t[1]==="add")return{mode:"command",command:{kind:"addTaskLink",taskId:Te(t[2]),repoId:wa(t[3])}};if(t.length===3&&t[0]==="link"&&t[1]==="list")return{mode:"command",command:{kind:"listTaskLinks",taskId:Te(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(" ")}
49
+ ${fe()}`);return{mode:"command",command:{kind:"openPullRequest",taskId:Te(t[2]),watch:r}}}if(t.length===4&&t[0]==="link"&&t[1]==="add")return{mode:"command",command:{kind:"addTaskLink",taskId:Te(t[2]),repoId:ba(t[3])}};if(t.length===3&&t[0]==="link"&&t[1]==="list")return{mode:"command",command:{kind:"listTaskLinks",taskId:Te(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(" ")}
50
50
 
51
- ${he()}`);return{mode:"command",command:{kind:"mergeTask",taskId:Te(t[2]),preserveWorktree:r}}}throw new Error(`Unsupported command: ${t.join(" ")}
51
+ ${fe()}`);return{mode:"command",command:{kind:"mergeTask",taskId:Te(t[2]),preserveWorktree:r}}}throw new Error(`Unsupported command: ${t.join(" ")}
52
52
 
53
- ${he()}`)}function he(){return["Craig commands:"," craig Show the Craig phase 0 placeholder"," craig repo add Register a repo in the current Craig workspace"," craig workspace add <path> Register a repo or parent-directory 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 workspace remove Remove an archived workspace"," craig task new --repo <repo-id> [--runner codex|cursor|claude] <prompt> Create a new Craig repo task"," craig task new --workspace <workspace-id> [--runner codex|cursor|claude] <prompt> Create a new Craig workspace 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(`
53
+ ${fe()}`)}function fe(){return["Craig commands:"," craig Show the Craig phase 0 placeholder"," craig repo add Register a repo in the current Craig workspace"," craig workspace add <path> Register a repo or parent-directory 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 workspace remove Remove an archived workspace"," craig task new --repo <repo-id> [--runner codex|cursor|claude] <prompt> Create a new Craig repo task"," craig task new --workspace <workspace-id> [--runner codex|cursor|claude] <prompt> Create a new Craig workspace 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(`
54
54
  `)}function Te(e){let t=e.trim();if(t.length===0)throw new Error(`Task id cannot be empty.
55
55
 
56
- ${he()}`);return t}function wa(e){let t=e.trim();if(t.length===0)throw new Error(`Repo id cannot be empty.
56
+ ${fe()}`);return t}function ba(e){let t=e.trim();if(t.length===0)throw new Error(`Repo id cannot be empty.
57
57
 
58
- ${he()}`);return t}import Di from"node:path";Ae();import{mkdir as ka,readFile as ba,writeFile as ya}from"node:fs/promises";import va from"node:path";async function ye(e){try{let t=await ba(e.configFile,"utf8"),r=JSON.parse(t);return Js(r,e.configFile)}catch(t){if(Sa(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 Ys(e,t){Js(t,e.configFile),await ka(va.dirname(e.configFile),{recursive:!0}),await ya(e.configFile,`${JSON.stringify(t,null,2)}
59
- `,"utf8")}function Js(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[s,o]of Object.entries(r.runners)){if(!ce.includes(s))throw new Error(`Craig config at ${t} is invalid. "runners.${s}" is not supported. Expected one of: ${ce.join(", ")}.`);if(typeof o!="object"||o===null||Array.isArray(o))throw new Error(`Craig config at ${t} is invalid. "runners.${s}" must be an object.`);let m=o;if(m.enabled!==void 0&&typeof m.enabled!="boolean")throw new Error(`Craig config at ${t} is invalid. "runners.${s}.enabled" must be a boolean.`);if(m.path!==void 0&&(typeof m.path!="string"||m.path.trim().length===0))throw new Error(`Craig config at ${t} is invalid. "runners.${s}.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(s=>typeof s=="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(s=>typeof s=="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 Sa(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}Fe();import{readFile as Ia,readdir as zh,rm as Vh}from"node:fs/promises";import xa from"node:path";async function Ye(e,t){let r=await Ia(Or(e,t),"utf8"),s=JSON.parse(r);return Ea(s,Or(e,t))}async function nt(e,t){await le(Or(e,t.id),{...t,updatedAt:new Date().toISOString()})}function Or(e,t){return xa.join(e.sessionsDir,`${t}.json`)}function Ea(e,t){let r=La(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(s=>typeof s=="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")||!Da(r.attach)||!Aa(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 Aa(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 Da(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 La(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??""}}_e();kt();Ie();function Gt(e){return`'${e.replace(/'/g,"'\\''")}'`}import{accessSync as nc,constants as oc}from"node:fs";import{homedir as oi}from"node:os";import Je from"node:path";var ac=[Je.join(oi(),".local","bin"),Je.join(oi(),".cursor","bin"),"/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin"];function ci(e=process.env){return lc([...(e.PATH??"").split(Je.delimiter).filter(t=>t.length>0),...e.CRAIG_DISABLE_COMMAND_PATH_FALLBACKS==="1"?[]:ac])}function ct(e=process.env){return{...e,PATH:ci(e).join(Je.delimiter)}}function cc(e,t={}){if(e.includes(Je.sep)){let r=Je.isAbsolute(e)?e:Je.resolve(t.cwd??process.cwd(),e);return ai(r)?r:null}for(let r of ci(t.env)){let s=Je.join(r,e);if(ai(s))return s}return null}function lt(e,t={}){let r=cc(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 ai(e){try{return nc(e,oc.X_OK),!0}catch{return!1}}function lc(e){return[...new Set(e)]}Ae();Ie();import{spawn as dc}from"node:child_process";import{createHash as uc}from"node:crypto";import hc from"node:path";var fc="craig";async function li(e,t,r){let s=Nr(e,t),o=gc(),m=await J("tmux",["new-session","-d","-P","-F","#{session_name} #{window_id} #{pane_id}","-s",s,"-n","runner",...o,"-c",r],{cwd:e}),y=_c(m.stdout);return await pc(e,s),y}async function pc(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 s of r)await J("tmux",s,{cwd:e})}async function di(e,t,r){await J("tmux",["resize-window","-t",t,"-x",`${r.columns}`,"-y",`${r.rows}`],{cwd:e})}async function ui(e,t,r){await J("tmux",["send-keys","-t",e,t,"C-m"],{cwd:r})}async function hi(e,t,r){await J("tmux",["pipe-pane","-o","-t",e,`cat >> ${Gt(t)}`],{cwd:r})}async function Xt(e,t,r,s){let o=s??pi(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",o],{cwd:e});return}await kc(e,["attach-session","-t",o])}async function fi(e,t){await J("tmux",["kill-session","-t",t],{cwd:e})}function pi(e){let r=hc.basename(e).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"repo",s=uc("sha1").update(e).digest("hex").slice(0,8);return`${fc}-${r}-${s}`}function Nr(e,t){return`${pi(e)}-${t.toLowerCase()}`}function gc(){let e=mc();return e?["-x",`${e.columns}`,"-y",`${e.rows}`]:[]}function mc(){let e=[process.stdout,process.stderr,process.stdin];for(let t of e){let r="columns"in t?t.columns:void 0,s="rows"in t?t.rows:void 0;if(typeof r=="number"&&r>0&&typeof s=="number"&&s>0)return{columns:r,rows:s}}return null}function _c(e){let t=wc(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 wc(e){return e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0)}async function kc(e,t){await new Promise((r,s)=>{let o=dc("tmux",t,{cwd:e,stdio:"inherit"});o.on("error",s),o.on("exit",m=>{if(m===0){r();return}s(new Error(`tmux ${t.join(" ")} failed with exit code ${m??"unknown"}.`))})})}var jr={async prepare(e,t){let r=e.runnerSession.command[0]??me(e.runner)[0],s=ct();await J(lt(r,{cwd:t.repoRoot,env:s}),["--help"],{cwd:t.repoRoot,env:s})},async launch(e,t){let r=e.runnerSession.command.length>0?e.runnerSession.command:me(e.runner,e.prompt.value),s=lt(r[0],{cwd:e.worktreePath,env:ct()});await ui(t.session.paneId,[s,...r.slice(1)].map(o=>Gt(o)).join(" "),t.repoRoot)},async status(e){return e.runnerSession.lastKnownState},async stop(){},async collectArtifacts(){}};Ae();Ie();var Rt={async create(e,t){let r=await li(t.repoRoot,t.taskId,t.worktreePath);t.logPath&&await hi(r.paneId,t.logPath,t.repoRoot);let s=await gi({paneId:r.paneId,windowTarget:r.windowTarget,alive:!0}),o={id:t.sessionId,taskId:t.taskId,repoId:t.repoId,workspaceId:t.workspaceId,substrate:"tmux",sessionName:r.sessionName||Nr(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:s,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return await nt(e,o),o},async attach(e,t,r){let s=await Rt.snapshot(t,r);if(!s.alive)throw new Error(`Session ${t.id} is no longer live and cannot be attached.`);await Xt(r,t.paneId,t.windowTarget,t.sessionName);let o={...t,status:"running",lastAttachedAt:new Date().toISOString(),snapshot:s};return await nt(e,o),o},async resize(e,t,r,s){await di(s,t.sessionName,r);let o={...t,attach:{...t.attach,lastSize:r}};return await nt(e,o),o},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 s={...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 nt(e,s),s},async snapshot(e,t){return bc(e,t)}};async function bc(e,t){let r=await ae("tmux",["list-panes","-F","#{pane_id}","-t",e.paneId],{cwd:t});return gi({paneId:e.paneId,windowTarget:e.windowTarget,alive:r.exitCode===0&&r.stdout.split(/\s+/).some(s=>s.trim()===e.paneId)})}async function gi(e){return{paneId:e.paneId,windowTarget:e.windowTarget,alive:e.alive,capturedAt:new Date().toISOString()}}ut();_e();Pt();import{mkdir as xt,rm as Ac,writeFile as Ur}from"node:fs/promises";import oe from"node:path";Ie();async function bi(e,t){let r=await ae("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 Hr(e,t,r,s="main"){let o=s.trim()||"main";if((await ae("git",["show-ref","--verify","--quiet",`refs/heads/${o}`],{cwd:e})).exitCode!==0)throw new Error(`Base branch '${o}' does not exist locally.`);let y=await Ec(e,o);await J("git",["worktree","add","-b",t,r,y],{cwd:e})}async function Ec(e,t){return(await ae("git",["remote","get-url","origin"],{cwd:e})).exitCode!==0||(await ae("git",["fetch","origin",t],{cwd:e})).exitCode!==0?t:(await ae("git",["show-ref","--verify","--quiet",`refs/remotes/origin/${t}`],{cwd:e})).exitCode===0?`refs/remotes/origin/${t}`:t}async function It(e){let t=await ae("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 yi(e){await J("git",["add","-A"],{cwd:e})}async function vi(e,t){await J("git",["commit","-m",t],{cwd:e})}async function Zt(e){let t=await J("git",["show","-s","--format=%H%n%s","HEAD"],{cwd:e}),[r="",s=""]=t.stdout.trim().split(`
60
- `);if(!r||!s)throw new Error("Unable to read git HEAD commit metadata.");return{sha:r,message:s}}async function er(e){return!await It(e)}async function Si(e){await J("git",["remote","get-url","origin"],{cwd:e})}async function Ti(e,t){await J("git",["push","-u","origin",t],{cwd:e})}async function Ri(e,t){await J("git",["worktree","remove","--force",t],{cwd:e})}Ae();at();async function Ci(e,t){let r=await Re(e),s=Ii(new Date),o=xi(r.taskIds,s);for(;;){let m=`task_${s}_${String(o).padStart(2,"0")}`,y=`craig/${m}`;if(!await bi(t,y))return m;o+=1}}async function Pi(e){let t=await Re(e),r=Ii(new Date),s=xi(t.taskIds,r);return`task_${r}_${String(s).padStart(2,"0")}`}function Ii(e){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${t}${r}${s}`}function xi(e,t){let r=e.filter(s=>s.startsWith(`task_${t}_`)).map(s=>Number.parseInt(s.slice(-2),10)).filter(s=>Number.isInteger(s));return r.length===0?1:Math.max(...r)+1}async function Et(e,t,r,s={}){let o=await Le(e,t),m=await Oc(e,o.id),y=await Ci(e,o.rootPath),n=s.sessionId??null,l=`craig/${y}`,f=oe.join(e.worktreesDir,o.id,y),k=oe.join(e.logsDir,`${y}.log`),a=oe.join(e.artifactsDir,y);await xt(oe.dirname(f),{recursive:!0}),await xt(a,{recursive:!0}),await Ur(k,"","utf8");let w=Dc(e,{taskId:y,repoId:o.id,workspaceId:m.id,sessionId:n,repoRoot:o.rootPath,prompt:r,runner:s.runner??"codex",config:s.config??{},branch:l,worktreePath:f});return await re(e,w),await Fr(e,y),await Hr(o.rootPath,l,f,o.defaultBranch),{repoId:o.id,repoRoot:o.rootPath,sessionId:n,workspaceId:m.id,task:w}}async function rr(e,t,r,s={}){let o=(await Me(e)).find(u=>u.id===t&&u.status==="active");if(!o)throw new Error(`Workspace ${t} does not exist or is archived.`);if(o.kind!=="project"){if(!o.primaryRepoId)throw new Error(`Workspace ${t} is not task-capable.`);let u=await Et(e,o.primaryRepoId,r,s);return{...u,bundlePath:u.task.worktreePath,repoTargets:[]}}let m=o.discoveredRepoIds??[];if(m.length===0)throw new Error(`Project workspace ${t} has no discovered repos.`);let y=await Pi(e),n=new Date().toISOString(),l=s.runner??"codex",f=s.sessionId??null,k=`craig/${y}`,a=oe.join(e.craigDir,"task-bundles",y),w=oe.join(e.logsDir,`${y}.log`),c=oe.join(e.artifactsDir,y);await xt(a,{recursive:!0}),await xt(c,{recursive:!0}),await Ur(w,"","utf8");let g=await Promise.all(m.map(u=>Le(e,u))),_=Mc(g),i=await Promise.all(g.map(u=>Lc(e,u,y,k,oe.join(a,_.get(u.id))))),p=i.find(u=>u.status==="ready")??i[0];if(!i.some(u=>u.status==="ready"))throw await Ac(a,{recursive:!0,force:!0}),new Error(`No project repo targets could be provisioned for ${t}: ${i.map(u=>`${u.repoId}: ${u.failureReason??"unknown error"}`).join("; ")}`);await Ur(oe.join(a,"manifest.json"),JSON.stringify({taskId:y,workspaceId:t,prompt:r,repos:i.map(u=>({repoId:u.repoId,repoName:g.find(b=>b.id===u.repoId)?.name??u.repoId,path:oe.relative(a,u.worktreePath),status:u.status,worktreePath:u.worktreePath,failureReason:u.failureReason}))},null,2),"utf8");let h=Ei(y,r,n,l,s.config??{}),d={id:y,title:r,slug:Ai(r),type:"project",status:"draft",runner:l,repoId:p.repoId,workspaceId:o.id,sessionId:f,selectedPtyTabId:h[0]?.id??null,linkedRepoIds:m.filter(u=>u!==p.repoId),repoRoot:a,worktreePath:a,branch:k,bundlePath:a,selectedRepoTargetId:p.repoId,repoTargets:i,ptyTabs:h,runnerSession:{command:me(l,r,s.config??{}),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:r},checks:p.checks,lastCommit:null,pullRequest:p.pullRequest,artifacts:{logPath:oe.relative(e.workspaceRoot,w),checkSummaryPath:oe.relative(e.workspaceRoot,oe.join(c,"check-summary.json")),prDraftPath:null,prStatusPath:oe.relative(e.workspaceRoot,oe.join(c,"pr-status.json"))},cleanup:tr(),lastFailureReason:i.every(u=>u.status==="unavailable")?"No project repo targets could be provisioned.":null,createdAt:n,updatedAt:n};return await re(e,d),await Fr(e,y),{repoId:p.repoId,repoRoot:a,sessionId:f,workspaceId:o.id,task:d,bundlePath:a,repoTargets:i}}function Ei(e,t,r,s="codex",o={}){let m=be(s);return[{id:`${e}:agent`,kind:"agent",title:m.defaultAgentTitle,command:me(s,void 0,o),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function Dc(e,t){let r=new Date().toISOString(),s=Ei(t.taskId,t.prompt,r,t.runner,t.config);return{id:t.taskId,title:t.prompt,slug:Ai(t.prompt),type:"repo",status:"draft",runner:t.runner,repoId:t.repoId,workspaceId:t.workspaceId,sessionId:t.sessionId,selectedPtyTabId:s[0]?.id??null,linkedRepoIds:[],repoRoot:t.repoRoot,worktreePath:t.worktreePath,branch:t.branch,ptyTabs:s,runnerSession:{command:me(t.runner,t.prompt,t.config),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:t.prompt},checks:{...qr(oe.relative(e.workspaceRoot,e.configFile))},lastCommit:null,pullRequest:Kr(),artifacts:{logPath:oe.relative(e.workspaceRoot,oe.join(e.logsDir,`${t.taskId}.log`)),checkSummaryPath:oe.relative(e.workspaceRoot,oe.join(e.artifactsDir,t.taskId,"check-summary.json")),prDraftPath:null,prStatusPath:oe.relative(e.workspaceRoot,oe.join(e.artifactsDir,t.taskId,"pr-status.json"))},cleanup:tr(),lastFailureReason:null,createdAt:r,updatedAt:r}}async function Lc(e,t,r,s,o){await xt(oe.dirname(o),{recursive:!0});try{return await Hr(t.rootPath,s,o,t.defaultBranch),{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"ready",failureReason:null,checks:qr(oe.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Kr(),cleanup:tr()}}catch(m){return{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"unavailable",failureReason:m instanceof Error?m.message:"Failed to create worktree.",checks:qr(oe.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Kr(),cleanup:tr()}}}function Mc(e){let t=new Set(["manifest.json"]),r=new Map;for(let s of e){let o=s.name==="manifest.json"?`${s.name}-repo`:s.name,m=o,y=2;for(;t.has(m);)m=`${o}-${y}`,y+=1;t.add(m),r.set(s.id,m)}return r}function qr(e){return{source:{type:"repo_config",path:e},lastRunAt:null,status:"not_run",commands:[],results:[]}}function Kr(){return{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,mergeable:!1,mergeStateStatus:null,requiredChecks:[],lastSyncedAt:null,lastSyncedHeadSha:null}}function tr(){return{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}async function Oc(e,t){let s=(await Me(e)).find(o=>o.kind!=="project"&&o.primaryRepoId===t&&o.status==="active");if(!s)throw new Error(`Repo ${t} does not have an active workspace.`);return s}function Ai(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}async function Li(e,t,r,s={}){let o=r.trim(),m=await ye(e),y=s.runner??it(m);if(zt(y,m),t.trim().length===0)throw new Error(s.workspaceId?"Workspace id cannot be empty.":"Repo id cannot be empty.");if(o.length===0)throw new Error("Task prompt cannot be empty.");let n=s.workspaceId?await rr(e,s.workspaceId,o,{runner:y,config:m}):await Et(e,t,o,{runner:y,config:m}),l=n.task,f=me(y,o,m),k=`session_${l.id}`,a=l.artifacts.logPath?Di.resolve(e.workspaceRoot,l.artifacts.logPath):Di.join(e.logsDir,`${l.id}.log`);try{await jr.prepare(l,{repoRoot:n.repoRoot});let w=await Rt.create(e,{sessionId:k,taskId:l.id,repoId:n.repoId,workspaceId:n.workspaceId,repoRoot:n.repoRoot,worktreePath:l.worktreePath,logPath:a,command:f});await jr.launch(l,{repoRoot:n.repoRoot,session:w});let c=new Date().toISOString();w={...w,status:"running",startedAt:c,command:f};let g={...l,status:"running",runner:y,sessionId:w.id,selectedPtyTabId:l.selectedPtyTabId,runnerSession:{command:w.command,pid:null,startedAt:c,lastKnownState:"running",exitCode:null,exitedAt:null}};return await re(e,g),await nt(e,w),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),selectedRepoId:g.repoId,selectedWorkspaceId:g.workspaceId,selectedTaskId:g.id,selectedPtyTabId:g.selectedPtyTabId}),{kind:"createTask",taskId:g.id,repoId:g.repoId,workspaceId:g.workspaceId,sessionId:w.id,status:g.status,branch:g.branch,worktreePath:g.worktreePath,runner:g.runner}}catch(w){let c={...l,sessionId:null,status:"draft",runnerSession:{...l.runnerSession,lastKnownState:"failed"},lastFailureReason:w instanceof Error?w.message:"Unknown Craig error"};throw await re(e,c),w}}At();ut();_e();import{access as $c}from"node:fs/promises";import Mi from"node:path";async function ie(e,t){try{return await Ce(e,t)}catch(r){throw Hc(r)?new Error(`Craig task "${t}" was not found.`):r}}async function fe(e){if(!await zr(e.worktreePath))throw new Error(`Task ${e.id} worktree does not exist at ${e.worktreePath}. Repair or recreate the task before retrying.`)}function Vr(e,t){return t.artifacts.logPath?Mi.isAbsolute(t.artifacts.logPath)?t.artifacts.logPath:Mi.join(e.workspaceRoot,t.artifacts.logPath):null}async function Oi(e,t){let r=await zr(t.worktreePath),s=Vr(e,t),o=s?await zr(s):!1;return{worktreeExists:r,logExists:o,recentFailureReason:t.lastFailureReason??null,runnerCommandText:t.runnerSession.command.join(" "),checksSummary:Fc(t),lastCommitSummary:Wc(t),prSummary:Nc(t),cleanupSummary:jc(t)}}async function zr(e){try{return await $c(e),!0}catch{return!1}}function Fc(e){let t=e.checks.commands.length,r=t===1?"command":"commands",s=e.checks.lastRunAt?` at ${e.checks.lastRunAt}`:"";return`${e.checks.status} (${t} ${r})${s}`}function Wc(e){return e.lastCommit?`${e.lastCommit.sha.slice(0,7)} ${e.lastCommit.message}`:"not committed"}function Nc(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 jc(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 Hc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}async function Bi(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[s,o]=await Promise.all([Le(e,r.repoId),Ye(e,r.sessionId)]),m=await Rt.attach(e,o,s.rootPath);return{kind:"attachTask",taskId:r.id,sessionId:m.id,disposition:"attached"}}_e();Fe();_e();import{mkdir as Fi,readFile as Uc,writeFile as qc}from"node:fs/promises";import sr from"node:path";Ie();import $i from"node:path";function Dt(e,t){return t?$i.isAbsolute(t)?t:$i.join(e.repoRoot,t):null}async function ht(e){let t=await ae("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 Wi(e,t){let r=Dt(t,e.artifacts.prDraftPath??sr.join(".craig","artifacts",e.id,"pr.md"));if(!r)throw new Error(`Task ${e.id} is missing a PR draft artifact path.`);await Fi(sr.dirname(r),{recursive:!0});try{await Uc(r,"utf8")}catch{await qc(r,`## Summary
58
+ ${fe()}`);return t}import Mi from"node:path";Ae();import{mkdir as ya,readFile as va,writeFile as Sa}from"node:fs/promises";import Ta from"node:path";async function ye(e){try{let t=await va(e.configFile,"utf8"),r=JSON.parse(t);return Zs(r,e.configFile)}catch(t){if(Ra(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 Qs(e,t){Zs(t,e.configFile),await ya(Ta.dirname(e.configFile),{recursive:!0}),await Sa(e.configFile,`${JSON.stringify(t,null,2)}
59
+ `,"utf8")}function Zs(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[s,o]of Object.entries(r.runners)){if(!ce.includes(s))throw new Error(`Craig config at ${t} is invalid. "runners.${s}" is not supported. Expected one of: ${ce.join(", ")}.`);if(typeof o!="object"||o===null||Array.isArray(o))throw new Error(`Craig config at ${t} is invalid. "runners.${s}" must be an object.`);let m=o;if(m.enabled!==void 0&&typeof m.enabled!="boolean")throw new Error(`Craig config at ${t} is invalid. "runners.${s}.enabled" must be a boolean.`);if(m.path!==void 0&&(typeof m.path!="string"||m.path.trim().length===0))throw new Error(`Craig config at ${t} is invalid. "runners.${s}.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(s=>typeof s=="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(s=>typeof s=="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 Ra(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}Fe();import{readFile as Ea,readdir as Qh,rm as Zh}from"node:fs/promises";import Aa from"node:path";async function Ye(e,t){let r=await Ea(Or(e,t),"utf8"),s=JSON.parse(r);return Da(s,Or(e,t))}async function nt(e,t){await le(Or(e,t.id),{...t,updatedAt:new Date().toISOString()})}function Or(e,t){return Aa.join(e.sessionsDir,`${t}.json`)}function Da(e,t){let r=Oa(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(s=>typeof s=="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")||!Ma(r.attach)||!La(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 La(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 Ma(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 Oa(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??""}}_e();kt();Ie();function Gt(e){return`'${e.replace(/'/g,"'\\''")}'`}import{accessSync as ac,constants as cc}from"node:fs";import{homedir as ci}from"node:os";import Je from"node:path";var lc=[Je.join(ci(),".local","bin"),Je.join(ci(),".cursor","bin"),"/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin"];function di(e=process.env){return uc([...(e.PATH??"").split(Je.delimiter).filter(t=>t.length>0),...e.CRAIG_DISABLE_COMMAND_PATH_FALLBACKS==="1"?[]:lc])}function ct(e=process.env){return{...e,PATH:di(e).join(Je.delimiter)}}function dc(e,t={}){if(e.includes(Je.sep)){let r=Je.isAbsolute(e)?e:Je.resolve(t.cwd??process.cwd(),e);return li(r)?r:null}for(let r of di(t.env)){let s=Je.join(r,e);if(li(s))return s}return null}function lt(e,t={}){let r=dc(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 li(e){try{return ac(e,cc.X_OK),!0}catch{return!1}}function uc(e){return[...new Set(e)]}Ae();Ie();import{spawn as hc}from"node:child_process";import{createHash as fc}from"node:crypto";import pc from"node:path";var gc="craig";async function ui(e,t,r){let s=Nr(e,t),o=_c(),m=await Q("tmux",["new-session","-d","-P","-F","#{session_name} #{window_id} #{pane_id}","-s",s,"-n","runner",...o,"-c",r],{cwd:e}),y=kc(m.stdout);return await mc(e,s),y}async function mc(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 s of r)await Q("tmux",s,{cwd:e})}async function hi(e,t,r){await Q("tmux",["resize-window","-t",t,"-x",`${r.columns}`,"-y",`${r.rows}`],{cwd:e})}async function fi(e,t,r){await Q("tmux",["send-keys","-t",e,t,"C-m"],{cwd:r})}async function pi(e,t,r){await Q("tmux",["pipe-pane","-o","-t",e,`cat >> ${Gt(t)}`],{cwd:r})}async function Xt(e,t,r,s){let o=s??mi(e);if(r?await Q("tmux",["select-window","-t",r],{cwd:e}):await Q("tmux",["select-window","-t",t],{cwd:e}),await Q("tmux",["select-pane","-t",t],{cwd:e}),process.env.TMUX){await Q("tmux",["switch-client","-t",o],{cwd:e});return}await yc(e,["attach-session","-t",o])}async function gi(e,t){await Q("tmux",["kill-session","-t",t],{cwd:e})}function mi(e){let r=pc.basename(e).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"repo",s=fc("sha1").update(e).digest("hex").slice(0,8);return`${gc}-${r}-${s}`}function Nr(e,t){return`${mi(e)}-${t.toLowerCase()}`}function _c(){let e=wc();return e?["-x",`${e.columns}`,"-y",`${e.rows}`]:[]}function wc(){let e=[process.stdout,process.stderr,process.stdin];for(let t of e){let r="columns"in t?t.columns:void 0,s="rows"in t?t.rows:void 0;if(typeof r=="number"&&r>0&&typeof s=="number"&&s>0)return{columns:r,rows:s}}return null}function kc(e){let t=bc(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 bc(e){return e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0)}async function yc(e,t){await new Promise((r,s)=>{let o=hc("tmux",t,{cwd:e,stdio:"inherit"});o.on("error",s),o.on("exit",m=>{if(m===0){r();return}s(new Error(`tmux ${t.join(" ")} failed with exit code ${m??"unknown"}.`))})})}var jr={async prepare(e,t){let r=e.runnerSession.command[0]??me(e.runner)[0],s=ct();await Q(lt(r,{cwd:t.repoRoot,env:s}),["--help"],{cwd:t.repoRoot,env:s})},async launch(e,t){let r=e.runnerSession.command.length>0?e.runnerSession.command:me(e.runner,e.prompt.value),s=lt(r[0],{cwd:e.worktreePath,env:ct()});await fi(t.session.paneId,[s,...r.slice(1)].map(o=>Gt(o)).join(" "),t.repoRoot)},async status(e){return e.runnerSession.lastKnownState},async stop(){},async collectArtifacts(){}};Ae();Ie();var Rt={async create(e,t){let r=await ui(t.repoRoot,t.taskId,t.worktreePath);t.logPath&&await pi(r.paneId,t.logPath,t.repoRoot);let s=await _i({paneId:r.paneId,windowTarget:r.windowTarget,alive:!0}),o={id:t.sessionId,taskId:t.taskId,repoId:t.repoId,workspaceId:t.workspaceId,substrate:"tmux",sessionName:r.sessionName||Nr(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:s,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return await nt(e,o),o},async attach(e,t,r){let s=await Rt.snapshot(t,r);if(!s.alive)throw new Error(`Session ${t.id} is no longer live and cannot be attached.`);await Xt(r,t.paneId,t.windowTarget,t.sessionName);let o={...t,status:"running",lastAttachedAt:new Date().toISOString(),snapshot:s};return await nt(e,o),o},async resize(e,t,r,s){await hi(s,t.sessionName,r);let o={...t,attach:{...t.attach,lastSize:r}};return await nt(e,o),o},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 s={...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 nt(e,s),s},async snapshot(e,t){return vc(e,t)}};async function vc(e,t){let r=await ae("tmux",["list-panes","-F","#{pane_id}","-t",e.paneId],{cwd:t});return _i({paneId:e.paneId,windowTarget:e.windowTarget,alive:r.exitCode===0&&r.stdout.split(/\s+/).some(s=>s.trim()===e.paneId)})}async function _i(e){return{paneId:e.paneId,windowTarget:e.windowTarget,alive:e.alive,capturedAt:new Date().toISOString()}}ut();_e();Pt();import{mkdir as xt,rm as Lc,writeFile as Ur}from"node:fs/promises";import oe from"node:path";Ie();async function vi(e,t){let r=await ae("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 Hr(e,t,r,s="main"){let o=s.trim()||"main";if((await ae("git",["show-ref","--verify","--quiet",`refs/heads/${o}`],{cwd:e})).exitCode!==0)throw new Error(`Base branch '${o}' does not exist locally.`);let y=await Dc(e,o);await Q("git",["worktree","add","-b",t,r,y],{cwd:e})}async function Dc(e,t){return(await ae("git",["remote","get-url","origin"],{cwd:e})).exitCode!==0||(await ae("git",["fetch","origin",t],{cwd:e})).exitCode!==0?t:(await ae("git",["show-ref","--verify","--quiet",`refs/remotes/origin/${t}`],{cwd:e})).exitCode===0?`refs/remotes/origin/${t}`:t}async function It(e){let t=await ae("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 Si(e){await Q("git",["add","-A"],{cwd:e})}async function Ti(e,t){await Q("git",["commit","-m",t],{cwd:e})}async function Zt(e){let t=await Q("git",["show","-s","--format=%H%n%s","HEAD"],{cwd:e}),[r="",s=""]=t.stdout.trim().split(`
60
+ `);if(!r||!s)throw new Error("Unable to read git HEAD commit metadata.");return{sha:r,message:s}}async function er(e){return!await It(e)}async function Ri(e){await Q("git",["remote","get-url","origin"],{cwd:e})}async function Ci(e,t){await Q("git",["push","-u","origin",t],{cwd:e})}async function Pi(e,t){await Q("git",["worktree","remove","--force",t],{cwd:e})}Ae();at();async function Ii(e,t){let r=await Re(e),s=Ei(new Date),o=Ai(r.taskIds,s);for(;;){let m=`task_${s}_${String(o).padStart(2,"0")}`,y=`craig/${m}`;if(!await vi(t,y))return m;o+=1}}async function xi(e){let t=await Re(e),r=Ei(new Date),s=Ai(t.taskIds,r);return`task_${r}_${String(s).padStart(2,"0")}`}function Ei(e){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${t}${r}${s}`}function Ai(e,t){let r=e.filter(s=>s.startsWith(`task_${t}_`)).map(s=>Number.parseInt(s.slice(-2),10)).filter(s=>Number.isInteger(s));return r.length===0?1:Math.max(...r)+1}async function Et(e,t,r,s={}){let o=await Le(e,t),m=await $c(e,o.id),y=await Ii(e,o.rootPath),n=s.sessionId??null,l=`craig/${y}`,f=oe.join(e.worktreesDir,o.id,y),k=oe.join(e.logsDir,`${y}.log`),a=oe.join(e.artifactsDir,y);await xt(oe.dirname(f),{recursive:!0}),await xt(a,{recursive:!0}),await Ur(k,"","utf8");let w=Mc(e,{taskId:y,repoId:o.id,workspaceId:m.id,sessionId:n,repoRoot:o.rootPath,prompt:r,runner:s.runner??"codex",config:s.config??{},branch:l,worktreePath:f});return await re(e,w),await Fr(e,y),await Hr(o.rootPath,l,f,o.defaultBranch),{repoId:o.id,repoRoot:o.rootPath,sessionId:n,workspaceId:m.id,task:w}}async function rr(e,t,r,s={}){let o=(await Me(e)).find(u=>u.id===t&&u.status==="active");if(!o)throw new Error(`Workspace ${t} does not exist or is archived.`);if(o.kind!=="project"){if(!o.primaryRepoId)throw new Error(`Workspace ${t} is not task-capable.`);let u=await Et(e,o.primaryRepoId,r,s);return{...u,bundlePath:u.task.worktreePath,repoTargets:[]}}let m=o.discoveredRepoIds??[];if(m.length===0)throw new Error(`Project workspace ${t} has no discovered repos.`);let y=await xi(e),n=new Date().toISOString(),l=s.runner??"codex",f=s.sessionId??null,k=`craig/${y}`,a=oe.join(e.craigDir,"task-bundles",y),w=oe.join(e.logsDir,`${y}.log`),c=oe.join(e.artifactsDir,y);await xt(a,{recursive:!0}),await xt(c,{recursive:!0}),await Ur(w,"","utf8");let g=await Promise.all(m.map(u=>Le(e,u))),_=Bc(g),i=await Promise.all(g.map(u=>Oc(e,u,y,k,oe.join(a,_.get(u.id))))),p=i.find(u=>u.status==="ready")??i[0];if(!i.some(u=>u.status==="ready"))throw await Lc(a,{recursive:!0,force:!0}),new Error(`No project repo targets could be provisioned for ${t}: ${i.map(u=>`${u.repoId}: ${u.failureReason??"unknown error"}`).join("; ")}`);await Ur(oe.join(a,"manifest.json"),JSON.stringify({taskId:y,workspaceId:t,prompt:r,repos:i.map(u=>({repoId:u.repoId,repoName:g.find(b=>b.id===u.repoId)?.name??u.repoId,path:oe.relative(a,u.worktreePath),status:u.status,worktreePath:u.worktreePath,failureReason:u.failureReason}))},null,2),"utf8");let h=Di(y,r,n,l,s.config??{}),d={id:y,title:r,slug:Li(r),type:"project",status:"draft",runner:l,repoId:p.repoId,workspaceId:o.id,sessionId:f,selectedPtyTabId:h[0]?.id??null,linkedRepoIds:m.filter(u=>u!==p.repoId),repoRoot:a,worktreePath:a,branch:k,bundlePath:a,selectedRepoTargetId:p.repoId,repoTargets:i,ptyTabs:h,runnerSession:{command:me(l,r,s.config??{}),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:r},checks:p.checks,lastCommit:null,pullRequest:p.pullRequest,artifacts:{logPath:oe.relative(e.workspaceRoot,w),checkSummaryPath:oe.relative(e.workspaceRoot,oe.join(c,"check-summary.json")),prDraftPath:null,prStatusPath:oe.relative(e.workspaceRoot,oe.join(c,"pr-status.json"))},cleanup:tr(),lastFailureReason:i.every(u=>u.status==="unavailable")?"No project repo targets could be provisioned.":null,createdAt:n,updatedAt:n};return await re(e,d),await Fr(e,y),{repoId:p.repoId,repoRoot:a,sessionId:f,workspaceId:o.id,task:d,bundlePath:a,repoTargets:i}}function Di(e,t,r,s="codex",o={}){let m=be(s);return[{id:`${e}:agent`,kind:"agent",title:m.defaultAgentTitle,command:me(s,void 0,o),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function Mc(e,t){let r=new Date().toISOString(),s=Di(t.taskId,t.prompt,r,t.runner,t.config);return{id:t.taskId,title:t.prompt,slug:Li(t.prompt),type:"repo",status:"draft",runner:t.runner,repoId:t.repoId,workspaceId:t.workspaceId,sessionId:t.sessionId,selectedPtyTabId:s[0]?.id??null,linkedRepoIds:[],repoRoot:t.repoRoot,worktreePath:t.worktreePath,branch:t.branch,ptyTabs:s,runnerSession:{command:me(t.runner,t.prompt,t.config),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:t.prompt},checks:{...qr(oe.relative(e.workspaceRoot,e.configFile))},lastCommit:null,pullRequest:Kr(),artifacts:{logPath:oe.relative(e.workspaceRoot,oe.join(e.logsDir,`${t.taskId}.log`)),checkSummaryPath:oe.relative(e.workspaceRoot,oe.join(e.artifactsDir,t.taskId,"check-summary.json")),prDraftPath:null,prStatusPath:oe.relative(e.workspaceRoot,oe.join(e.artifactsDir,t.taskId,"pr-status.json"))},cleanup:tr(),lastFailureReason:null,createdAt:r,updatedAt:r}}async function Oc(e,t,r,s,o){await xt(oe.dirname(o),{recursive:!0});try{return await Hr(t.rootPath,s,o,t.defaultBranch),{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"ready",failureReason:null,checks:qr(oe.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Kr(),cleanup:tr()}}catch(m){return{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"unavailable",failureReason:m instanceof Error?m.message:"Failed to create worktree.",checks:qr(oe.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Kr(),cleanup:tr()}}}function Bc(e){let t=new Set(["manifest.json"]),r=new Map;for(let s of e){let o=s.name==="manifest.json"?`${s.name}-repo`:s.name,m=o,y=2;for(;t.has(m);)m=`${o}-${y}`,y+=1;t.add(m),r.set(s.id,m)}return r}function qr(e){return{source:{type:"repo_config",path:e},lastRunAt:null,status:"not_run",commands:[],results:[]}}function Kr(){return{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,mergeable:!1,mergeStateStatus:null,requiredChecks:[],lastSyncedAt:null,lastSyncedHeadSha:null}}function tr(){return{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}async function $c(e,t){let s=(await Me(e)).find(o=>o.kind!=="project"&&o.primaryRepoId===t&&o.status==="active");if(!s)throw new Error(`Repo ${t} does not have an active workspace.`);return s}function Li(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}async function Oi(e,t,r,s={}){let o=r.trim(),m=await ye(e),y=s.runner??it(m);if(zt(y,m),t.trim().length===0)throw new Error(s.workspaceId?"Workspace id cannot be empty.":"Repo id cannot be empty.");if(o.length===0)throw new Error("Task prompt cannot be empty.");let n=s.workspaceId?await rr(e,s.workspaceId,o,{runner:y,config:m}):await Et(e,t,o,{runner:y,config:m}),l=n.task,f=me(y,o,m),k=`session_${l.id}`,a=l.artifacts.logPath?Mi.resolve(e.workspaceRoot,l.artifacts.logPath):Mi.join(e.logsDir,`${l.id}.log`);try{await jr.prepare(l,{repoRoot:n.repoRoot});let w=await Rt.create(e,{sessionId:k,taskId:l.id,repoId:n.repoId,workspaceId:n.workspaceId,repoRoot:n.repoRoot,worktreePath:l.worktreePath,logPath:a,command:f});await jr.launch(l,{repoRoot:n.repoRoot,session:w});let c=new Date().toISOString();w={...w,status:"running",startedAt:c,command:f};let g={...l,status:"running",runner:y,sessionId:w.id,selectedPtyTabId:l.selectedPtyTabId,runnerSession:{command:w.command,pid:null,startedAt:c,lastKnownState:"running",exitCode:null,exitedAt:null}};return await re(e,g),await nt(e,w),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),selectedRepoId:g.repoId,selectedWorkspaceId:g.workspaceId,selectedTaskId:g.id,selectedPtyTabId:g.selectedPtyTabId}),{kind:"createTask",taskId:g.id,repoId:g.repoId,workspaceId:g.workspaceId,sessionId:w.id,status:g.status,branch:g.branch,worktreePath:g.worktreePath,runner:g.runner}}catch(w){let c={...l,sessionId:null,status:"draft",runnerSession:{...l.runnerSession,lastKnownState:"failed"},lastFailureReason:w instanceof Error?w.message:"Unknown Craig error"};throw await re(e,c),w}}At();ut();_e();import{access as Wc}from"node:fs/promises";import Bi from"node:path";async function ie(e,t){try{return await Ce(e,t)}catch(r){throw qc(r)?new Error(`Craig task "${t}" was not found.`):r}}async function pe(e){if(!await zr(e.worktreePath))throw new Error(`Task ${e.id} worktree does not exist at ${e.worktreePath}. Repair or recreate the task before retrying.`)}function Vr(e,t){return t.artifacts.logPath?Bi.isAbsolute(t.artifacts.logPath)?t.artifacts.logPath:Bi.join(e.workspaceRoot,t.artifacts.logPath):null}async function $i(e,t){let r=await zr(t.worktreePath),s=Vr(e,t),o=s?await zr(s):!1;return{worktreeExists:r,logExists:o,recentFailureReason:t.lastFailureReason??null,runnerCommandText:t.runnerSession.command.join(" "),checksSummary:Nc(t),lastCommitSummary:jc(t),prSummary:Hc(t),cleanupSummary:Uc(t)}}async function zr(e){try{return await Wc(e),!0}catch{return!1}}function Nc(e){let t=e.checks.commands.length,r=t===1?"command":"commands",s=e.checks.lastRunAt?` at ${e.checks.lastRunAt}`:"";return`${e.checks.status} (${t} ${r})${s}`}function jc(e){return e.lastCommit?`${e.lastCommit.sha.slice(0,7)} ${e.lastCommit.message}`:"not committed"}function Hc(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 Uc(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 qc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}async function Fi(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[s,o]=await Promise.all([Le(e,r.repoId),Ye(e,r.sessionId)]),m=await Rt.attach(e,o,s.rootPath);return{kind:"attachTask",taskId:r.id,sessionId:m.id,disposition:"attached"}}_e();Fe();_e();import{mkdir as Ni,readFile as Kc,writeFile as zc}from"node:fs/promises";import sr from"node:path";Ie();import Wi from"node:path";function Dt(e,t){return t?Wi.isAbsolute(t)?t:Wi.join(e.repoRoot,t):null}async function ht(e){let t=await ae("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 ji(e,t){let r=Dt(t,e.artifacts.prDraftPath??sr.join(".craig","artifacts",e.id,"pr.md"));if(!r)throw new Error(`Task ${e.id} is missing a PR draft artifact path.`);await Ni(sr.dirname(r),{recursive:!0});try{await Kc(r,"utf8")}catch{await zc(r,`## Summary
61
61
 
62
62
  - ${e.title}
63
- `,"utf8")}return e.artifacts.prDraftPath=sr.relative(t.repoRoot,r),r}async function Ni(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 ji(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 ft(e,t){let r=await J("gh",ir(t.pullRequest.number?String(t.pullRequest.number):t.branch),{cwd:t.worktreePath}),s=JSON.parse(r.stdout);return qi(e,t,s)}async function Xr(e,t){let r=await ae("gh",ir(t.branch),{cwd:t.worktreePath});if(r.exitCode!==0)return{discovered:!1,task:t};let s=JSON.parse(r.stdout);return await qi(e,t,s),{discovered:!0,task:t}}async function Hi(e,t,r){let s=r.pullRequest.number?String(r.pullRequest.number):r.branch;if(r.pullRequest.number){let m=await J("gh",ir(s),{cwd:r.worktreePath});return r.pullRequest=Gr(JSON.parse(m.stdout)),await re(e,t),"synced"}let o=await ae("gh",ir(s),{cwd:r.worktreePath});return o.exitCode!==0?"not_found":(r.pullRequest=Gr(JSON.parse(o.stdout)),await re(e,t),"discovered")}async function Yr(e,t){let s=((await ye(e)).github?.watchIntervalSeconds??10)*1e3;for(;;){if(await ft(e,t),zc(t.pullRequest))return t;await new Promise(o=>setTimeout(o,s))}}async function Jr(e,t){let r=Dt(e,t.artifacts.prStatusPath);r&&(await Fi(sr.dirname(r),{recursive:!0}),await le(r,{taskId:t.id,pullRequest:t.pullRequest}))}function Ui(e){return e.requiredChecks.length===0?"no required checks":e.requiredChecks.map(t=>`${t.name}:${t.status}`).join(", ")}function pt(e){return e.mergeable&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}function Kc(e){return e.requiredChecks.some(t=>t.status==="failed")}function zc(e){return pt(e)||Kc(e)||e.status==="closed"||e.status==="merged"}function Vc(e){return pt(e)?"merge_ready":e.status==="merged"?"merged":e.status==="open"?"pr_open":"checked"}function ir(e){return["pr","view",e,"--json","number,url,baseRefName,headRefName,headRefOid,state,mergeable,mergeStateStatus,statusCheckRollup"]}async function qi(e,t,r){let s=Gr(r);return t.pullRequest=s,t.status=Vc(s),await Jr(e,t),await re(e,t),t}function Gr(e){return{provider:"github",number:e.number,url:e.url,baseBranch:e.baseRefName,headBranch:e.headRefName,status:Gc(e.state),mergeable:e.mergeable==="MERGEABLE",mergeStateStatus:e.mergeStateStatus,requiredChecks:Xc(e.statusCheckRollup),lastSyncedAt:new Date().toISOString(),lastSyncedHeadSha:e.headRefOid??null}}function Gc(e){return e==="OPEN"?"open":e==="MERGED"?"merged":e==="CLOSED"?"closed":null}function Xc(e){return e.map(t=>Yc(t)).filter(t=>t!==null)}function Yc(e){if(typeof e!="object"||e===null)return null;let t=e,r=t.name??t.context,s=t.state??t.status??t.conclusion;return r?{name:r,status:Ki(s??null,t.conclusion??null),conclusion:t.conclusion??null}:null}function Ki(e,t){let r=e?.toUpperCase()??null,s=t?.toUpperCase()??null;return s==="SKIPPED"||r==="SKIPPED"?"skipped":r==="SUCCESS"||s==="SUCCESS"||s==="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"||s==="FAILURE"||s==="FAILED"||s==="ERROR"||s==="TIMED_OUT"||s==="CANCELLED"||s==="ACTION_REQUIRED"||s==="STARTUP_FAILURE"?"failed":r==="COMPLETED"&&s===null?"unknown":r==="COMPLETED"&&s!==null?Ki(s,s):"unknown"}async function Lt(e,t,r){let s=await ie(e,t);await fe(s),await Si(s.worktreePath),await ht(s.worktreePath);let o=!!s.pullRequest.number;if(!o&&(await Xr(e,s)).discovered)return r.watch&&s.pullRequest.status!=="merged"&&!pt(s.pullRequest)&&await Yr(e,s),zi(s,r.watch,"discovered");if(s.status!=="checked"&&s.status!=="pr_open"&&s.status!=="merge_ready")throw new Error(`Task ${s.id} cannot open a pull request from status "${s.status}".`);if(!s.lastCommit)throw new Error(`Task ${s.id} must be committed before opening a pull request.`);if(!await er(s.worktreePath))throw new Error(`Task ${s.id} worktree must be clean before opening a pull request.`);let m=await Wi(s,e);return await re(e,s),await Ti(s.worktreePath,s.branch),s.pullRequest.number||await Ni(s,m),await ft(e,s),r.watch&&s.pullRequest.status!=="merged"&&!pt(s.pullRequest)&&await Yr(e,s),await Jr(e,s),zi(s,r.watch,o?"synced":"created")}async function Vi(e,t){let r=await ie(e,t);return r.pullRequest.number&&(await ht(r.worktreePath),await ft(e,r)),r}async function Gi(e,t){let r=await ie(e,t),s=(r.repoTargets??[]).filter(m=>m.status==="ready");await ht(r.worktreePath);let o={synced:0,discovered:0,notFound:0};for(let m of s){let y=await Hi(e,r,m).catch(()=>"not_found");o[y==="not_found"?"notFound":y]++}return o}async function Qr(e,t){let r=await ie(e,t);return await fe(r),await ht(r.worktreePath),r.pullRequest.number?(await ft(e,r),{disposition:"synced",task:r}):{disposition:(await Xr(e,r)).discovered?"discovered":"not_found",task:r}}function zi(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:Ui(e.pullRequest)}}async function Zr(e,t){let r=await ie(e,t);if(r.pullRequest.number)try{r=await Vi(e,t)}catch{}let s=await Oi(e,r),o=r.sessionId?await Ye(e,r.sessionId).catch(()=>null):null;return{kind:"showTask",task:r,inspection:s,session:o}}import{access as Jc}from"node:fs/promises";async function es(e,t){let r=await ie(e,t),s=Vr(e,r);if(!s)throw new Error(`Task ${r.id} does not have a Craig-managed log path.`);try{await Jc(s)}catch{throw new Error(`Task ${r.id} log file does not exist yet at ${s}.`)}return{kind:"streamTaskLogs",taskId:r.id,logPath:s}}Ie();async function ts(e,t){let r=await ie(e,t);if(await fe(r),(await J("git",["status","--short"],{cwd:r.worktreePath})).stdout.trim().length===0)return{kind:"showTaskDiff",taskId:r.id,diffText:"",isEmpty:!0};let o=await Qc(r.worktreePath);return{kind:"showTaskDiff",taskId:r.id,diffText:o,isEmpty:!1}}async function Qc(e){let t=[],r=await J("git",["diff","--stat","--patch","HEAD"],{cwd:e});r.stdout.trim().length>0&&t.push(r.stdout.trimEnd());let s=await Zc(e);for(let o of s){let m=await ae("git",["diff","--no-index","--stat","--patch","--","/dev/null",o],{cwd:e});t.push(m.stdout.trimEnd())}return t.join(`
63
+ `,"utf8")}return e.artifacts.prDraftPath=sr.relative(t.repoRoot,r),r}async function Hi(e,t){await Q("gh",["pr","create","--base","main","--head",e.branch,"--title",e.lastCommit?.message??e.title,"--body-file",t],{cwd:e.worktreePath})}async function Ui(e,t){let r=t==="merge"?"--merge":t==="rebase"?"--rebase":"--squash";await Q("gh",["pr","merge",String(e.pullRequest.number),r,"--delete-branch=false"],{cwd:e.worktreePath})}async function ft(e,t){let r=await Q("gh",ir(t.pullRequest.number?String(t.pullRequest.number):t.branch),{cwd:t.worktreePath}),s=JSON.parse(r.stdout);return Ki(e,t,s)}async function Xr(e,t){let r=await ae("gh",ir(t.branch),{cwd:t.worktreePath});if(r.exitCode!==0)return{discovered:!1,task:t};let s=JSON.parse(r.stdout);return await Ki(e,t,s),{discovered:!0,task:t}}async function Yr(e,t,r){let s=r.pullRequest.number?String(r.pullRequest.number):r.branch;if(r.pullRequest.number){let m=await Q("gh",ir(s),{cwd:r.worktreePath});return r.pullRequest=Gr(JSON.parse(m.stdout)),await re(e,t),"synced"}let o=await ae("gh",ir(s),{cwd:r.worktreePath});return o.exitCode!==0?"not_found":(r.pullRequest=Gr(JSON.parse(o.stdout)),await re(e,t),"discovered")}async function Jr(e,t){let s=((await ye(e)).github?.watchIntervalSeconds??5)*1e3;for(;;){if(await ft(e,t),Gc(t.pullRequest))return t;await new Promise(o=>setTimeout(o,s))}}async function Qr(e,t){let r=Dt(e,t.artifacts.prStatusPath);r&&(await Ni(sr.dirname(r),{recursive:!0}),await le(r,{taskId:t.id,pullRequest:t.pullRequest}))}function qi(e){return e.requiredChecks.length===0?"no required checks":e.requiredChecks.map(t=>`${t.name}:${t.status}`).join(", ")}function pt(e){return e.mergeable&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}function Vc(e){return e.requiredChecks.some(t=>t.status==="failed")}function Gc(e){return pt(e)||Vc(e)||e.status==="closed"||e.status==="merged"}function Xc(e){return pt(e)?"merge_ready":e.status==="merged"?"merged":e.status==="open"?"pr_open":"checked"}function ir(e){return["pr","view",e,"--json","number,url,baseRefName,headRefName,headRefOid,state,mergeable,mergeStateStatus,statusCheckRollup"]}async function Ki(e,t,r){let s=Gr(r);return t.pullRequest=s,t.status=Xc(s),await Qr(e,t),await re(e,t),t}function Gr(e){return{provider:"github",number:e.number,url:e.url,baseBranch:e.baseRefName,headBranch:e.headRefName,status:Yc(e.state),mergeable:e.mergeable==="MERGEABLE",mergeStateStatus:e.mergeStateStatus,requiredChecks:Jc(e.statusCheckRollup),lastSyncedAt:new Date().toISOString(),lastSyncedHeadSha:e.headRefOid??null}}function Yc(e){return e==="OPEN"?"open":e==="MERGED"?"merged":e==="CLOSED"?"closed":null}function Jc(e){return e.map(t=>Qc(t)).filter(t=>t!==null)}function Qc(e){if(typeof e!="object"||e===null)return null;let t=e,r=t.name??t.context,s=t.state??t.status??t.conclusion;return r?{name:r,status:zi(s??null,t.conclusion??null),conclusion:t.conclusion??null}:null}function zi(e,t){let r=e?.toUpperCase()??null,s=t?.toUpperCase()??null;return s==="SKIPPED"||r==="SKIPPED"?"skipped":r==="SUCCESS"||s==="SUCCESS"||s==="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"||s==="FAILURE"||s==="FAILED"||s==="ERROR"||s==="TIMED_OUT"||s==="CANCELLED"||s==="ACTION_REQUIRED"||s==="STARTUP_FAILURE"?"failed":r==="COMPLETED"&&s===null?"unknown":r==="COMPLETED"&&s!==null?zi(s,s):"unknown"}async function Lt(e,t,r){let s=await ie(e,t);await pe(s),await Ri(s.worktreePath),await ht(s.worktreePath);let o=!!s.pullRequest.number;if(!o&&(await Xr(e,s)).discovered)return r.watch&&s.pullRequest.status!=="merged"&&!pt(s.pullRequest)&&await Jr(e,s),Vi(s,r.watch,"discovered");if(s.status!=="checked"&&s.status!=="pr_open"&&s.status!=="merge_ready")throw new Error(`Task ${s.id} cannot open a pull request from status "${s.status}".`);if(!s.lastCommit)throw new Error(`Task ${s.id} must be committed before opening a pull request.`);if(!await er(s.worktreePath))throw new Error(`Task ${s.id} worktree must be clean before opening a pull request.`);let m=await ji(s,e);return await re(e,s),await Ci(s.worktreePath,s.branch),s.pullRequest.number||await Hi(s,m),await ft(e,s),r.watch&&s.pullRequest.status!=="merged"&&!pt(s.pullRequest)&&await Jr(e,s),await Qr(e,s),Vi(s,r.watch,o?"synced":"created")}async function Gi(e,t){let r=await ie(e,t);return r.pullRequest.number&&(await ht(r.worktreePath),await ft(e,r)),r}async function Zr(e,t){let r=await ie(e,t),s=(r.repoTargets??[]).filter(m=>m.status==="ready"),o={synced:0,discovered:0,notFound:0};for(let m of s){await ht(m.worktreePath);let y=m.pullRequest.number?await Yr(e,r,m):await Yr(e,r,m).catch(()=>"not_found");o[y==="not_found"?"notFound":y]++}return r.status=Zc(r),r.pullRequest=el(r),await re(e,r),o}async function es(e,t){let r=await ie(e,t);return await pe(r),await ht(r.worktreePath),r.pullRequest.number?(await ft(e,r),{disposition:"synced",task:r}):{disposition:(await Xr(e,r)).discovered?"discovered":"not_found",task:r}}function Vi(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:qi(e.pullRequest)}}function Zc(e){let t=(e.repoTargets??[]).filter(s=>s.status==="ready"),r=t.map(s=>s.pullRequest).filter(s=>!!s.number);return r.length===0?e.status:r.every(s=>s.status==="merged")?"merged":r.length===t.length&&r.every(tl)?"merge_ready":r.some(s=>s.status==="open")?"pr_open":"checked"}function el(e){let t=(e.repoTargets??[]).filter(s=>s.status==="ready"),r=t.find(s=>s.repoId===e.selectedRepoTargetId);return r?.pullRequest.number?r.pullRequest:t.find(s=>s.pullRequest.number)?.pullRequest??e.pullRequest}function tl(e){return e.mergeable&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}async function ts(e,t){let r=await ie(e,t);if(r.pullRequest.number)try{r=await Gi(e,t)}catch{}let s=await $i(e,r),o=r.sessionId?await Ye(e,r.sessionId).catch(()=>null):null;return{kind:"showTask",task:r,inspection:s,session:o}}import{access as rl}from"node:fs/promises";async function rs(e,t){let r=await ie(e,t),s=Vr(e,r);if(!s)throw new Error(`Task ${r.id} does not have a Craig-managed log path.`);try{await rl(s)}catch{throw new Error(`Task ${r.id} log file does not exist yet at ${s}.`)}return{kind:"streamTaskLogs",taskId:r.id,logPath:s}}Ie();async function ss(e,t){let r=await ie(e,t);if(await pe(r),(await Q("git",["status","--short"],{cwd:r.worktreePath})).stdout.trim().length===0)return{kind:"showTaskDiff",taskId:r.id,diffText:"",isEmpty:!0};let o=await sl(r.worktreePath);return{kind:"showTaskDiff",taskId:r.id,diffText:o,isEmpty:!1}}async function sl(e){let t=[],r=await Q("git",["diff","--stat","--patch","HEAD"],{cwd:e});r.stdout.trim().length>0&&t.push(r.stdout.trimEnd());let s=await il(e);for(let o of s){let m=await ae("git",["diff","--no-index","--stat","--patch","--","/dev/null",o],{cwd:e});t.push(m.stdout.trimEnd())}return t.join(`
64
64
 
65
- `)}async function Zc(e){return(await J("git",["ls-files","--others","--exclude-standard"],{cwd:e})).stdout.split(`
66
- `).map(r=>r.trim()).filter(r=>r.length>0)}async function rs(e,t){let r=await ie(e,t);if(!r.sessionId)throw new Error(`Task ${r.id} does not have a Craig session.`);let s=await Ye(e,r.sessionId).catch(o=>{throw el(o)?new Error(`Task ${r.id} does not have a Craig session.`):o});if(!s.paneId)throw new Error(`Task ${r.id} does not have a tmux target.`);return await Xt(e.repoRoot,s.paneId,s.windowTarget,s.sessionName),{kind:"focusTask",taskId:r.id,tmuxTarget:s.paneId}}function el(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as tl}from"node:child_process";async function ss(e,t){let r=await ie(e,t);await fe(r);let o=(await ye(e)).open?.command??[];if(o.length===0)return{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!1,command:null};let m=[...o,r.worktreePath];return await rl(m,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:m}}async function rl(e,t){await new Promise((r,s)=>{let[o,...m]=e,y=tl(o,m,{cwd:t,stdio:"inherit"});y.on("error",s),y.on("exit",n=>{if(n===0){r();return}s(new Error(`${e.join(" ")} failed with exit code ${n??"unknown"}.`))})})}Fe();import{mkdir as sl}from"node:fs/promises";import il from"node:path";_e();Ie();async function is(e,t){let r=await ie(e,t);if(await fe(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 It(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 o=(await ye(e)).checks?.commands??[];if(o.length===0)throw new Error(`Craig config at ${e.configFile} does not define any "checks.commands".`);r.checks.status="running",r.checks.commands=[...o],r.checks.results=[],await re(e,r);let m=[];for(let y of o){let n=new Date().toISOString(),l=await ae("sh",["-lc",y],{cwd:r.worktreePath}),f=new Date().toISOString(),k=l.exitCode??1;if(m.push({command:y,startedAt:n,finishedAt:f,exitCode:k}),k!==0)return r.checks.results=m,r.checks.status="failed",r.checks.lastRunAt=f,r.status="review",r.lastFailureReason=l.stderr.trim()||l.stdout.trim()||`Check command failed: ${y}`,await Xi(e,r),await re(e,r),{kind:"runChecks",taskId:r.id,status:"failed",commands:o}}return r.checks.results=m,r.checks.status="passed",r.checks.lastRunAt=new Date().toISOString(),r.status="checked",r.lastFailureReason=null,await Xi(e,r),await re(e,r),{kind:"runChecks",taskId:r.id,status:"passed",commands:o}}async function Xi(e,t){let r=Dt(e,t.artifacts.checkSummaryPath);r&&(await sl(il.dirname(r),{recursive:!0}),await le(r,{taskId:t.id,status:t.checks.status,lastRunAt:t.checks.lastRunAt,commands:t.checks.commands,results:t.checks.results}))}_e();async function ns(e,t){let r=await ie(e,t);await fe(r);let s=await It(r.worktreePath);if(r.status==="running"&&s&&(r.status="review"),r.status!=="review"&&r.status!=="checked")throw new Error(`Task ${r.id} cannot commit from status "${r.status}".`);if(!s)throw new Error(`Task ${r.id} has no uncommitted diff to commit.`);let o=r.prompt.value.trim();await yi(r.worktreePath),await vi(r.worktreePath,o);let m=await Zt(r.worktreePath);return r.lastCommit={sha:m.sha,message:m.message,committedAt:new Date().toISOString()},r.lastFailureReason=null,await re(e,r),{kind:"commitTask",taskId:r.id,status:r.status,commitSha:m.sha,message:m.message}}_e();_e();async function Yi(e,t,r){let s=[];try{if(t.sessionId){let o=await Ye(e,t.sessionId);await fi(e.repoRoot,o.sessionName),t.cleanup.paneClosedAt=new Date().toISOString()}}catch(o){s.push(o instanceof Error?o.message:"Failed to close tmux session.")}if(t.cleanup.preservedWorktree=r.preserveWorktree,!r.preserveWorktree)try{await Ri(e.repoRoot,t.worktreePath),t.cleanup.worktreeRemovedAt=new Date().toISOString()}catch(o){s.push(o instanceof Error?o.message:"Failed to remove worktree.")}t.cleanup.warning=s.length>0?s.join(" "):null,await re(e,t)}async function Mt(e,t,r){let s=await ie(e,t);if(await fe(s),s.status!=="pr_open"&&s.status!=="merge_ready")throw new Error(`Task ${s.id} cannot merge from status "${s.status}".`);if(!s.pullRequest.number)throw new Error(`Task ${s.id} does not have a tracked pull request.`);if(!s.lastCommit)throw new Error(`Task ${s.id} must be committed before merging.`);if(!await er(s.worktreePath))throw new Error(`Task ${s.id} worktree must be clean before merging.`);if((await Zt(s.worktreePath)).sha!==s.lastCommit.sha)throw new Error(`Task ${s.id} local HEAD does not match the tracked task commit. Sync or commit before merging.`);await ht(s.worktreePath),await ft(e,s);let m=nl(s);if(m.length>0)throw new Error(`Task ${s.id} pull request is not merge-ready: ${m.join("; ")}.`);let n=(await ye(e)).github?.mergeMethod??"squash";return await ji(s,n),s.pullRequest.status="merged",s.status="merged",s.lastFailureReason=null,await re(e,s),await Yi(e,s,r),{kind:"mergeTask",taskId:s.id,status:s.status,prNumber:s.pullRequest.number,preservedWorktree:r.preserveWorktree,cleanupWarning:s.cleanup.warning}}function nl(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 s of["failed","pending","unknown"]){let o=r.requiredChecks.filter(m=>m.status===s).map(m=>m.name);o.length>0&&t.push(`${s} checks: ${o.join(", ")}`)}return pt(r)||t.push("required checks are not passing"),[...new Set(t)]}at();ut();Pt();kt();At();Ft();Ie();import fl from"node:path";import{stat as pl}from"node:fs/promises";async function on(e,t){let r=fl.resolve(e.workspaceRoot,t);if(!(await pl(r).catch(()=>null))?.isDirectory())throw new Error(`Repo path does not exist: ${r}`);let o=await Promise.resolve().then(()=>(Ft(),nn)).then(({addWorkspace:y})=>y(e,t)),m=o.repos[0];if(!m||o.workspace.kind==="project")throw new Error(`Repo path is not a git repository: ${r}`);return{kind:"createRepo",repo:m,workspaceId:o.workspace.id,created:o.created}}async function an(e){return{kind:"listRepos",repos:await dt(e)}}async function cn(e,t){let r=await Le(e,t),o=(await Me(e)).filter(f=>f.primaryRepoId===t),m=o.filter(f=>f.status==="active"),y=await Ne(e,{repoId:t});if(m.length>0)throw new Error(`Cannot remove repo ${t} while active workspace records still reference it.`);if(y.tasks.length>0)throw new Error(`Cannot remove repo ${t} while task records still reference it.`);await Promise.all(o.map(f=>nr(e,f.id))),await _i(e,t);let n=await Re(e);await ot(e,{...n,repoIds:n.repoIds.filter(f=>f!==t)});let l=await De({uiStateFile:e.uiStateFile});return l?.selectedRepoId===t&&await Pe({uiStateFile:e.uiStateFile},{...l,selectedRepoId:null,selectedWorkspaceId:null,selectedTaskId:null}),{kind:"removeRepo",repoId:r.id,rootPath:r.rootPath}}ut();_e();async function ln(e,t,r){let[s,o]=await Promise.all([ie(e,t),Le(e,r)]);if(s.repoId===o.id)throw new Error(`Repo ${o.id} is already the primary repo for task ${s.id}.`);let m=s.linkedRepoIds.includes(o.id)?s.linkedRepoIds:[...s.linkedRepoIds,o.id];return await re(e,{...s,linkedRepoIds:m}),{kind:"addTaskLink",taskId:s.id,repoId:o.id,linkedRepoIds:m}}async function dn(e,t){let r=await ie(e,t),s=await Promise.all(r.linkedRepoIds.map(o=>Le(e,o)));return{kind:"listTaskLinks",taskId:r.id,repos:s}}Ft();async function un(e,t){switch(e.kind){case"addWorkspace":return Ot(t.paths,e.path);case"addRepo":return on(t.paths,e.path);case"listRepos":return an(t.paths);case"removeRepo":return cn(t.paths,e.repoId);case"listWorkspaces":return os(t.paths,{archived:e.archived});case"archiveWorkspace":return Bt(t.paths,e.workspaceId);case"restoreWorkspace":return as(t.paths,e.workspaceId);case"removeWorkspace":return $t(t.paths,e.workspaceId);case"createTask":return Li(t.paths,e.repoId??e.workspaceId??"",e.prompt,{...e.runner?{runner:e.runner}:{},...e.workspaceId?{workspaceId:e.workspaceId}:{}});case"listTasks":return e.repoId||e.workspaceId?Ne(t.paths,{...e.repoId?{repoId:e.repoId}:{},...e.workspaceId?{workspaceId:e.workspaceId}:{}}):Ne(t.paths);case"attachTask":return Bi(t.paths,e.taskId);case"addTaskLink":return ln(t.paths,e.taskId,e.repoId);case"listTaskLinks":return dn(t.paths,e.taskId);case"refreshInteractiveState":throw new Error("Interactive refresh should be handled by the interactive app.");case"showTask":return Zr(t.paths,e.taskId);case"showSelectedTask":return Zr(t.paths,qe(t,"show"));case"streamTaskLogs":return es(t.paths,e.taskId);case"streamSelectedTaskLogs":return es(t.paths,qe(t,"logs"));case"showTaskDiff":return ts(t.paths,e.taskId);case"showSelectedTaskDiff":return ts(t.paths,qe(t,"diff"));case"focusTask":return rs(t.paths,e.taskId);case"focusSelectedTask":return rs(t.paths,qe(t,"focus"));case"openTask":return ss(t.paths,e.taskId);case"openSelectedTask":return ss(t.paths,qe(t,"open"));case"runChecks":return is(t.paths,e.taskId);case"runSelectedTaskChecks":return is(t.paths,qe(t,"check"));case"commitTask":return ns(t.paths,e.taskId);case"commitSelectedTask":return ns(t.paths,qe(t,"commit"));case"openPullRequest":return Lt(t.paths,e.taskId,{watch:e.watch});case"openSelectedTaskPullRequest":return Lt(t.paths,qe(t,"pr"),{watch:e.watch});case"mergeTask":return Mt(t.paths,e.taskId,{preserveWorktree:e.preserveWorktree});case"mergeSelectedTask":return Mt(t.paths,qe(t,"merge"),{preserveWorktree:e.preserveWorktree});case"help":return{kind:"help",text:he()};case"exit":return{kind:"exit"};default:return gl(e)}}function gl(e){throw new Error(`Unsupported command: ${JSON.stringify(e)}`)}function qe(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>'.`)}Fe();import{mkdir as je,readFile as ml}from"node:fs/promises";import ve from"node:path";function Ke(e){let t=ve.join(e,".craig");return{workspaceRoot:e,repoRoot:e,craigDir:t,indexFile:ve.join(t,"index.json"),reposDir:ve.join(t,"repos"),workspacesDir:ve.join(t,"workspaces"),sessionsDir:ve.join(t,"sessions"),runtimeDir:ve.join(t,"runtime"),uiStateFile:ve.join(t,"runtime","ui-state.json"),tasksDir:ve.join(t,"tasks"),jobsDir:ve.join(t,"jobs"),logsDir:ve.join(t,"logs"),artifactsDir:ve.join(t,"artifacts"),worktreesDir:ve.join(t,"worktrees"),configFile:ve.join(t,"config.json")}}at();async function yt(e){let t=Ke(e);await je(t.craigDir,{recursive:!0}),await Promise.all([je(t.reposDir,{recursive:!0}),je(t.workspacesDir,{recursive:!0}),je(t.sessionsDir,{recursive:!0}),je(t.runtimeDir,{recursive:!0}),je(t.tasksDir,{recursive:!0}),je(t.jobsDir,{recursive:!0}),je(t.logsDir,{recursive:!0}),je(t.artifactsDir,{recursive:!0}),je(t.worktreesDir,{recursive:!0})]);try{let o=await ml(t.indexFile,"utf8"),m=JSON.parse(o);return Br(m,e,t.indexFile)}catch(o){if(!_l(o))throw o instanceof SyntaxError?new Error(`Craig index at ${t.indexFile} is malformed. Remove or repair the file before rerunning Craig.`):o}let r=new Date().toISOString(),s={version:2,workspaceRoot:e,repoIds:[],workspaceIds:[],taskIds:[],jobIds:[],createdAt:r,updatedAt:r};return await le(t.indexFile,s),s}function _l(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}function hn(e){switch(e.kind){case"createWorkspace":return[`${e.created?"Registered":"Updated"} ${e.workspace.kind??"repo"} workspace ${e.workspace.id}`,`Path: ${e.workspace.rootPath??""}`,`Repos: ${e.repos.map(t=>t.id).join(", ")}`].join(`
65
+ `)}async function il(e){return(await Q("git",["ls-files","--others","--exclude-standard"],{cwd:e})).stdout.split(`
66
+ `).map(r=>r.trim()).filter(r=>r.length>0)}async function is(e,t){let r=await ie(e,t);if(!r.sessionId)throw new Error(`Task ${r.id} does not have a Craig session.`);let s=await Ye(e,r.sessionId).catch(o=>{throw nl(o)?new Error(`Task ${r.id} does not have a Craig session.`):o});if(!s.paneId)throw new Error(`Task ${r.id} does not have a tmux target.`);return await Xt(e.repoRoot,s.paneId,s.windowTarget,s.sessionName),{kind:"focusTask",taskId:r.id,tmuxTarget:s.paneId}}function nl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as ol}from"node:child_process";async function ns(e,t){let r=await ie(e,t);await pe(r);let o=(await ye(e)).open?.command??[];if(o.length===0)return{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!1,command:null};let m=[...o,r.worktreePath];return await al(m,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:m}}async function al(e,t){await new Promise((r,s)=>{let[o,...m]=e,y=ol(o,m,{cwd:t,stdio:"inherit"});y.on("error",s),y.on("exit",n=>{if(n===0){r();return}s(new Error(`${e.join(" ")} failed with exit code ${n??"unknown"}.`))})})}Fe();import{mkdir as cl}from"node:fs/promises";import ll from"node:path";_e();Ie();async function os(e,t){let r=await ie(e,t);if(await pe(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 It(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 o=(await ye(e)).checks?.commands??[];if(o.length===0)throw new Error(`Craig config at ${e.configFile} does not define any "checks.commands".`);r.checks.status="running",r.checks.commands=[...o],r.checks.results=[],await re(e,r);let m=[];for(let y of o){let n=new Date().toISOString(),l=await ae("sh",["-lc",y],{cwd:r.worktreePath}),f=new Date().toISOString(),k=l.exitCode??1;if(m.push({command:y,startedAt:n,finishedAt:f,exitCode:k}),k!==0)return r.checks.results=m,r.checks.status="failed",r.checks.lastRunAt=f,r.status="review",r.lastFailureReason=l.stderr.trim()||l.stdout.trim()||`Check command failed: ${y}`,await Xi(e,r),await re(e,r),{kind:"runChecks",taskId:r.id,status:"failed",commands:o}}return r.checks.results=m,r.checks.status="passed",r.checks.lastRunAt=new Date().toISOString(),r.status="checked",r.lastFailureReason=null,await Xi(e,r),await re(e,r),{kind:"runChecks",taskId:r.id,status:"passed",commands:o}}async function Xi(e,t){let r=Dt(e,t.artifacts.checkSummaryPath);r&&(await cl(ll.dirname(r),{recursive:!0}),await le(r,{taskId:t.id,status:t.checks.status,lastRunAt:t.checks.lastRunAt,commands:t.checks.commands,results:t.checks.results}))}_e();async function as(e,t){let r=await ie(e,t);await pe(r);let s=await It(r.worktreePath);if(r.status==="running"&&s&&(r.status="review"),r.status!=="review"&&r.status!=="checked")throw new Error(`Task ${r.id} cannot commit from status "${r.status}".`);if(!s)throw new Error(`Task ${r.id} has no uncommitted diff to commit.`);let o=r.prompt.value.trim();await Si(r.worktreePath),await Ti(r.worktreePath,o);let m=await Zt(r.worktreePath);return r.lastCommit={sha:m.sha,message:m.message,committedAt:new Date().toISOString()},r.lastFailureReason=null,await re(e,r),{kind:"commitTask",taskId:r.id,status:r.status,commitSha:m.sha,message:m.message}}_e();_e();async function Yi(e,t,r){let s=[];try{if(t.sessionId){let o=await Ye(e,t.sessionId);await gi(e.repoRoot,o.sessionName),t.cleanup.paneClosedAt=new Date().toISOString()}}catch(o){s.push(o instanceof Error?o.message:"Failed to close tmux session.")}if(t.cleanup.preservedWorktree=r.preserveWorktree,!r.preserveWorktree)try{await Pi(e.repoRoot,t.worktreePath),t.cleanup.worktreeRemovedAt=new Date().toISOString()}catch(o){s.push(o instanceof Error?o.message:"Failed to remove worktree.")}t.cleanup.warning=s.length>0?s.join(" "):null,await re(e,t)}async function Mt(e,t,r){let s=await ie(e,t);if(await pe(s),s.status!=="pr_open"&&s.status!=="merge_ready")throw new Error(`Task ${s.id} cannot merge from status "${s.status}".`);if(!s.pullRequest.number)throw new Error(`Task ${s.id} does not have a tracked pull request.`);if(!s.lastCommit)throw new Error(`Task ${s.id} must be committed before merging.`);if(!await er(s.worktreePath))throw new Error(`Task ${s.id} worktree must be clean before merging.`);if((await Zt(s.worktreePath)).sha!==s.lastCommit.sha)throw new Error(`Task ${s.id} local HEAD does not match the tracked task commit. Sync or commit before merging.`);await ht(s.worktreePath),await ft(e,s);let m=dl(s);if(m.length>0)throw new Error(`Task ${s.id} pull request is not merge-ready: ${m.join("; ")}.`);let n=(await ye(e)).github?.mergeMethod??"squash";return await Ui(s,n),s.pullRequest.status="merged",s.status="merged",s.lastFailureReason=null,await re(e,s),await Yi(e,s,r),{kind:"mergeTask",taskId:s.id,status:s.status,prNumber:s.pullRequest.number,preservedWorktree:r.preserveWorktree,cleanupWarning:s.cleanup.warning}}function dl(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 s of["failed","pending","unknown"]){let o=r.requiredChecks.filter(m=>m.status===s).map(m=>m.name);o.length>0&&t.push(`${s} checks: ${o.join(", ")}`)}return pt(r)||t.push("required checks are not passing"),[...new Set(t)]}at();ut();Pt();kt();At();Ft();Ie();import wl from"node:path";import{stat as kl}from"node:fs/promises";async function on(e,t){let r=wl.resolve(e.workspaceRoot,t);if(!(await kl(r).catch(()=>null))?.isDirectory())throw new Error(`Repo path does not exist: ${r}`);let o=await Promise.resolve().then(()=>(Ft(),nn)).then(({addWorkspace:y})=>y(e,t)),m=o.repos[0];if(!m||o.workspace.kind==="project")throw new Error(`Repo path is not a git repository: ${r}`);return{kind:"createRepo",repo:m,workspaceId:o.workspace.id,created:o.created}}async function an(e){return{kind:"listRepos",repos:await dt(e)}}async function cn(e,t){let r=await Le(e,t),o=(await Me(e)).filter(f=>f.primaryRepoId===t),m=o.filter(f=>f.status==="active"),y=await Ne(e,{repoId:t});if(m.length>0)throw new Error(`Cannot remove repo ${t} while active workspace records still reference it.`);if(y.tasks.length>0)throw new Error(`Cannot remove repo ${t} while task records still reference it.`);await Promise.all(o.map(f=>nr(e,f.id))),await ki(e,t);let n=await Re(e);await ot(e,{...n,repoIds:n.repoIds.filter(f=>f!==t)});let l=await De({uiStateFile:e.uiStateFile});return l?.selectedRepoId===t&&await Pe({uiStateFile:e.uiStateFile},{...l,selectedRepoId:null,selectedWorkspaceId:null,selectedTaskId:null}),{kind:"removeRepo",repoId:r.id,rootPath:r.rootPath}}ut();_e();async function ln(e,t,r){let[s,o]=await Promise.all([ie(e,t),Le(e,r)]);if(s.repoId===o.id)throw new Error(`Repo ${o.id} is already the primary repo for task ${s.id}.`);let m=s.linkedRepoIds.includes(o.id)?s.linkedRepoIds:[...s.linkedRepoIds,o.id];return await re(e,{...s,linkedRepoIds:m}),{kind:"addTaskLink",taskId:s.id,repoId:o.id,linkedRepoIds:m}}async function dn(e,t){let r=await ie(e,t),s=await Promise.all(r.linkedRepoIds.map(o=>Le(e,o)));return{kind:"listTaskLinks",taskId:r.id,repos:s}}Ft();async function un(e,t){switch(e.kind){case"addWorkspace":return Ot(t.paths,e.path);case"addRepo":return on(t.paths,e.path);case"listRepos":return an(t.paths);case"removeRepo":return cn(t.paths,e.repoId);case"listWorkspaces":return cs(t.paths,{archived:e.archived});case"archiveWorkspace":return Bt(t.paths,e.workspaceId);case"restoreWorkspace":return ls(t.paths,e.workspaceId);case"removeWorkspace":return $t(t.paths,e.workspaceId);case"createTask":return Oi(t.paths,e.repoId??e.workspaceId??"",e.prompt,{...e.runner?{runner:e.runner}:{},...e.workspaceId?{workspaceId:e.workspaceId}:{}});case"listTasks":return e.repoId||e.workspaceId?Ne(t.paths,{...e.repoId?{repoId:e.repoId}:{},...e.workspaceId?{workspaceId:e.workspaceId}:{}}):Ne(t.paths);case"attachTask":return Fi(t.paths,e.taskId);case"addTaskLink":return ln(t.paths,e.taskId,e.repoId);case"listTaskLinks":return dn(t.paths,e.taskId);case"refreshInteractiveState":throw new Error("Interactive refresh should be handled by the interactive app.");case"showTask":return ts(t.paths,e.taskId);case"showSelectedTask":return ts(t.paths,qe(t,"show"));case"streamTaskLogs":return rs(t.paths,e.taskId);case"streamSelectedTaskLogs":return rs(t.paths,qe(t,"logs"));case"showTaskDiff":return ss(t.paths,e.taskId);case"showSelectedTaskDiff":return ss(t.paths,qe(t,"diff"));case"focusTask":return is(t.paths,e.taskId);case"focusSelectedTask":return is(t.paths,qe(t,"focus"));case"openTask":return ns(t.paths,e.taskId);case"openSelectedTask":return ns(t.paths,qe(t,"open"));case"runChecks":return os(t.paths,e.taskId);case"runSelectedTaskChecks":return os(t.paths,qe(t,"check"));case"commitTask":return as(t.paths,e.taskId);case"commitSelectedTask":return as(t.paths,qe(t,"commit"));case"openPullRequest":return Lt(t.paths,e.taskId,{watch:e.watch});case"openSelectedTaskPullRequest":return Lt(t.paths,qe(t,"pr"),{watch:e.watch});case"mergeTask":return Mt(t.paths,e.taskId,{preserveWorktree:e.preserveWorktree});case"mergeSelectedTask":return Mt(t.paths,qe(t,"merge"),{preserveWorktree:e.preserveWorktree});case"help":return{kind:"help",text:fe()};case"exit":return{kind:"exit"};default:return bl(e)}}function bl(e){throw new Error(`Unsupported command: ${JSON.stringify(e)}`)}function qe(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>'.`)}Fe();import{mkdir as je,readFile as yl}from"node:fs/promises";import ve from"node:path";function Ke(e){let t=ve.join(e,".craig");return{workspaceRoot:e,repoRoot:e,craigDir:t,indexFile:ve.join(t,"index.json"),reposDir:ve.join(t,"repos"),workspacesDir:ve.join(t,"workspaces"),sessionsDir:ve.join(t,"sessions"),runtimeDir:ve.join(t,"runtime"),uiStateFile:ve.join(t,"runtime","ui-state.json"),tasksDir:ve.join(t,"tasks"),jobsDir:ve.join(t,"jobs"),logsDir:ve.join(t,"logs"),artifactsDir:ve.join(t,"artifacts"),worktreesDir:ve.join(t,"worktrees"),configFile:ve.join(t,"config.json")}}at();async function yt(e){let t=Ke(e);await je(t.craigDir,{recursive:!0}),await Promise.all([je(t.reposDir,{recursive:!0}),je(t.workspacesDir,{recursive:!0}),je(t.sessionsDir,{recursive:!0}),je(t.runtimeDir,{recursive:!0}),je(t.tasksDir,{recursive:!0}),je(t.jobsDir,{recursive:!0}),je(t.logsDir,{recursive:!0}),je(t.artifactsDir,{recursive:!0}),je(t.worktreesDir,{recursive:!0})]);try{let o=await yl(t.indexFile,"utf8"),m=JSON.parse(o);return Br(m,e,t.indexFile)}catch(o){if(!vl(o))throw o instanceof SyntaxError?new Error(`Craig index at ${t.indexFile} is malformed. Remove or repair the file before rerunning Craig.`):o}let r=new Date().toISOString(),s={version:2,workspaceRoot:e,repoIds:[],workspaceIds:[],taskIds:[],jobIds:[],createdAt:r,updatedAt:r};return await le(t.indexFile,s),s}function vl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}function hn(e){switch(e.kind){case"createWorkspace":return[`${e.created?"Registered":"Updated"} ${e.workspace.kind??"repo"} workspace ${e.workspace.id}`,`Path: ${e.workspace.rootPath??""}`,`Repos: ${e.repos.map(t=>t.id).join(", ")}`].join(`
67
67
  `);case"createRepo":return[`${e.created?"Registered":"Already registered"} repo ${e.repo.id}`,`Path: ${e.repo.rootPath}`,`Branch: ${e.repo.defaultBranch}`,`Workspace: ${e.workspaceId}`].join(`
68
68
  `);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(`
69
69
  `);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 one with 'craig workspace add <path>'.":["ID KIND STATUS REPOS PATH",...e.workspaces.map(t=>`${t.id} ${t.kind??"repo"} ${t.status} ${(t.discoveredRepoIds??[t.primaryRepoId]).join(",")} ${t.rootPath??""}`)].join(`
70
70
  `);case"archiveWorkspace":return`Archived workspace ${e.workspaceId} on branch ${e.branch}`;case"restoreWorkspace":return`Restored workspace ${e.workspaceId} on branch ${e.branch}`;case"removeWorkspace":return`Removed workspace ${e.workspaceId} (${e.rootPath})`;case"createTask":return[`Created task ${e.taskId}`,`Repo: ${e.repoId}`,`Workspace: ${e.workspaceId}`,`Session: ${e.sessionId}`,`Status: ${e.status}`,`Branch: ${e.branch}`,`Worktree: ${e.worktreePath}`,`Runner: ${e.runner}`].join(`
71
71
  `);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(`
72
- `);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} ${yl(t)} ${vl(t)} ${t.title}`)].join(`
73
- `);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}`,...kl(e)].join(`
72
+ `);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} ${Cl(t)} ${Pl(t)} ${t.title}`)].join(`
73
+ `);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}`,...Tl(e)].join(`
74
74
  `);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(`
75
- `);case"openPullRequest":return[`${wl(e.disposition,e.watch)} PR for ${e.taskId}`,`PR: #${e.prNumber} ${e.url}`,`Status: ${e.status}`,`Mergeable: ${e.mergeable}`,`Checks: ${e.requiredChecksSummary}`].join(`
75
+ `);case"openPullRequest":return[`${Sl(e.disposition,e.watch)} PR for ${e.taskId}`,`PR: #${e.prNumber} ${e.url}`,`Status: ${e.status}`,`Mergeable: ${e.mergeable}`,`Checks: ${e.requiredChecksSummary}`].join(`
76
76
  `);case"mergeTask":return[`Merged task ${e.taskId} from PR #${e.prNumber}`,`Status: ${e.status}`,`Preserved worktree: ${e.preservedWorktree}`,`Cleanup warning: ${e.cleanupWarning??"none"}`].join(`
77
- `);default:return bl(e)}}function wl(e,t){return t?"Watched":e==="created"?"Created":e==="discovered"?"Discovered":"Synced"}function kl(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 bl(e){throw new Error(`Unsupported result: ${JSON.stringify(e)}`)}function yl(e){return e.checks.status}function vl(e){return e.pullRequest.number?`#${e.pullRequest.number}:${e.pullRequest.status??"unknown"}`:"-"}ut();Pt();kt();import{createRequire as lh}from"node:module";import{readdir as dh,stat as uh}from"node:fs/promises";import Hs from"node:path";_e();At();Ft();Ie();import{readFile as Sl,stat as Tl}from"node:fs/promises";import cs from"node:path";var Rl=200*1024,Cl=500*1024,or="100000";async function pn(e,t,r){if(e.type==="project"&&e.repoTargets?.length)return Pl(e,t,r);try{let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),m=o?await Wt(e.worktreePath):null,[y,n]=await Promise.all([cr(e.worktreePath,s),o?ls(e.worktreePath,o,t.diffRows,m):Promise.resolve(pe("No diff selected","No local changes found.","empty"))]),l=o?{[o]:n}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:l,selectedFile:y,selectedDiff:n,error:null}}catch(s){let o=s instanceof Error?s.message:"Unable to inspect task worktree.";return{...t,error:o}}}async function Pl(e,t,r){let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),[m,y]=await Promise.all([mn(e,s),(async()=>{if(!o)return pe("No diff selected","No local changes found.","empty");let l=ar(e,o),f=l?await Wt(l.target.worktreePath).catch(()=>null):null;return _n(e,o,t.diffRows,f)})()]),n=o?{[o]:y}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:n,selectedFile:m,selectedDiff:y}}async function gn(e,t={}){if(e.type==="project"&&e.repoTargets?.length)return Il(e,t);try{await fe(e);let r=await Wt(e.worktreePath),[s,o]=await Promise.all([wn(e.worktreePath),kn(e.worktreePath,r)]),m=[...new Set(o.map(a=>a.path))],y=Ze(t.selectedFilePath??null,s),n=Ze(t.selectedDiffPath??null,m),[l,f]=await Promise.all([cr(e.worktreePath,y),n?ls(e.worktreePath,n,o,r):Promise.resolve(pe("No diff selected","No local changes found.","empty"))]),k=n?{[n]:f}:{};return{taskId:e.id,fileRows:vn(s),filePaths:s,diffRows:o,diffPaths:m,diffContents:k,selectedFilePath:y,selectedDiffPath:n,selectedFile:l,selectedDiff:f,error:null}}catch(r){let s=r instanceof Error?r.message:"Unable to inspect task worktree.";return{taskId:e.id,fileRows:[],filePaths:[],diffRows:[],diffPaths:[],diffContents:{},selectedFilePath:null,selectedDiffPath:null,selectedFile:pe("Files unavailable",s,"error"),selectedDiff:pe("Diff unavailable",s,"error"),error:s}}}async function Il(e,t){let r=(e.repoTargets??[]).filter(w=>w.status==="ready"),s=await Promise.all(r.map(async w=>{let c=await Wt(w.worktreePath).catch(()=>null),[g,_]=await Promise.all([wn(w.worktreePath).catch(()=>[]),kn(w.worktreePath,c).catch(()=>[])]);return{target:w,baseRef:c,targetFiles:g,targetDiffRows:_}})),o=[],m=[];for(let{target:w,targetFiles:c,targetDiffRows:g}of s)o.push(...c.map(_=>`${w.repoId}/${_}`)),m.push(...g.map(_=>({..._,path:`${w.repoId}/${_.path}`})));let y=[...new Set(m.map(w=>w.path))].sort(),n=Ze(t.selectedFilePath??null,o),l=Ze(t.selectedDiffPath??null,y),[f,k]=await Promise.all([mn(e,n),(async()=>{if(!l)return pe("No diff selected","No local changes found.","empty");let w=ar(e,l),c=w?s.find(g=>g.target.repoId===w.target.repoId):null;return _n(e,l,m,c?.baseRef??null)})()]),a=l?{[l]:k}:{};return{taskId:e.id,fileRows:vn(o),filePaths:o,diffRows:m,diffPaths:y,diffContents:a,selectedFilePath:n,selectedDiffPath:l,selectedFile:f,selectedDiff:k,error:null}}async function mn(e,t){let r=ar(e,t);if(!r)return pe("No file selected","No Git-visible files found.","empty");let s=await cr(r.target.worktreePath,r.relativePath);return{...s,path:t,title:t??s.title}}async function _n(e,t,r,s=null){let o=ar(e,t);return o?{...await ls(o.target.worktreePath,o.relativePath,r.filter(y=>y.path.startsWith(`${o.target.repoId}/`)).map(y=>({...y,path:y.path.slice(o.target.repoId.length+1)})),s),path:t,title:t}:pe(t,"Repo target is unavailable.","error",t)}function ar(e,t){if(!t)return null;let[r,...s]=t.split("/"),o=s.join("/"),m=(e.repoTargets??[]).find(y=>y.repoId===r&&y.status==="ready")??null;return!m||o.length===0?null:{target:m,relativePath:o}}async function wn(e){let t=await J("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e});return Sn(t.stdout)}async function kn(e,t){let[r,s,o,m]=await Promise.all([xl(e,t),fn(e,"staged"),fn(e,"unstaged"),El(e)]);return[...r,...s,...o,...m]}async function xl(e,t){if(!t)return[];let[r,s]=await Promise.all([J("git",["diff","--name-status",`${t}...HEAD`],{cwd:e}),J("git",["diff","--numstat",`${t}...HEAD`],{cwd:e})]),o=bn(r.stdout),m=yn(s.stdout);return o.map(y=>{let n=m.get(y.path)??{additions:null,deletions:null};return{group:"branch",path:y.path,status:y.status,additions:n.additions,deletions:n.deletions}}).sort((y,n)=>y.path.localeCompare(n.path))}async function fn(e,t){let r=t==="staged"?["diff","--cached"]:["diff"],[s,o]=await Promise.all([J("git",[...r,"--name-status"],{cwd:e}),J("git",[...r,"--numstat"],{cwd:e})]),m=bn(s.stdout),y=yn(o.stdout);return m.map(n=>{let l=y.get(n.path)??{additions:null,deletions:null};return{group:t,path:n.path,status:n.status,additions:l.additions,deletions:l.deletions}}).sort((n,l)=>n.path.localeCompare(l.path))}async function El(e){let t=await J("git",["ls-files","--others","--exclude-standard"],{cwd:e}),r=Sn(t.stdout);return await Promise.all(r.map(async o=>{let m=await cr(e,o),y=m.status==="ready"?Al(m.lines):null;return{group:"untracked",path:o,status:"A",additions:y,deletions:0}}))}function bn(e){return e.split(`
77
+ `);default:return Rl(e)}}function Sl(e,t){return t?"Watched":e==="created"?"Created":e==="discovered"?"Discovered":"Synced"}function Tl(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 Rl(e){throw new Error(`Unsupported result: ${JSON.stringify(e)}`)}function Cl(e){return e.checks.status}function Pl(e){return e.pullRequest.number?`#${e.pullRequest.number}:${e.pullRequest.status??"unknown"}`:"-"}ut();Pt();kt();import{createRequire as gh}from"node:module";import{readdir as mh,stat as _h}from"node:fs/promises";import qs from"node:path";_e();At();Ft();Ie();import{readFile as Il,stat as xl}from"node:fs/promises";import ds from"node:path";var El=200*1024,Al=500*1024,or="100000";async function pn(e,t,r){if(e.type==="project"&&e.repoTargets?.length)return Dl(e,t,r);try{let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),m=o?await Wt(e.worktreePath):null,[y,n]=await Promise.all([cr(e.worktreePath,s),o?us(e.worktreePath,o,t.diffRows,m):Promise.resolve(ge("No diff selected","No local changes found.","empty"))]),l=o?{[o]:n}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:l,selectedFile:y,selectedDiff:n,error:null}}catch(s){let o=s instanceof Error?s.message:"Unable to inspect task worktree.";return{...t,error:o}}}async function Dl(e,t,r){let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),[m,y]=await Promise.all([mn(e,s),(async()=>{if(!o)return ge("No diff selected","No local changes found.","empty");let l=ar(e,o),f=l?await Wt(l.target.worktreePath).catch(()=>null):null;return _n(e,o,t.diffRows,f)})()]),n=o?{[o]:y}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:n,selectedFile:m,selectedDiff:y}}async function gn(e,t={}){if(e.type==="project"&&e.repoTargets?.length)return Ll(e,t);try{await pe(e);let r=await Wt(e.worktreePath),[s,o]=await Promise.all([wn(e.worktreePath),kn(e.worktreePath,r)]),m=[...new Set(o.map(a=>a.path))],y=Ze(t.selectedFilePath??null,s),n=Ze(t.selectedDiffPath??null,m),[l,f]=await Promise.all([cr(e.worktreePath,y),n?us(e.worktreePath,n,o,r):Promise.resolve(ge("No diff selected","No local changes found.","empty"))]),k=n?{[n]:f}:{};return{taskId:e.id,fileRows:vn(s),filePaths:s,diffRows:o,diffPaths:m,diffContents:k,selectedFilePath:y,selectedDiffPath:n,selectedFile:l,selectedDiff:f,error:null}}catch(r){let s=r instanceof Error?r.message:"Unable to inspect task worktree.";return{taskId:e.id,fileRows:[],filePaths:[],diffRows:[],diffPaths:[],diffContents:{},selectedFilePath:null,selectedDiffPath:null,selectedFile:ge("Files unavailable",s,"error"),selectedDiff:ge("Diff unavailable",s,"error"),error:s}}}async function Ll(e,t){let r=(e.repoTargets??[]).filter(w=>w.status==="ready"),s=await Promise.all(r.map(async w=>{let c=await Wt(w.worktreePath).catch(()=>null),[g,_]=await Promise.all([wn(w.worktreePath).catch(()=>[]),kn(w.worktreePath,c).catch(()=>[])]);return{target:w,baseRef:c,targetFiles:g,targetDiffRows:_}})),o=[],m=[];for(let{target:w,targetFiles:c,targetDiffRows:g}of s)o.push(...c.map(_=>`${w.repoId}/${_}`)),m.push(...g.map(_=>({..._,path:`${w.repoId}/${_.path}`})));let y=[...new Set(m.map(w=>w.path))].sort(),n=Ze(t.selectedFilePath??null,o),l=Ze(t.selectedDiffPath??null,y),[f,k]=await Promise.all([mn(e,n),(async()=>{if(!l)return ge("No diff selected","No local changes found.","empty");let w=ar(e,l),c=w?s.find(g=>g.target.repoId===w.target.repoId):null;return _n(e,l,m,c?.baseRef??null)})()]),a=l?{[l]:k}:{};return{taskId:e.id,fileRows:vn(o),filePaths:o,diffRows:m,diffPaths:y,diffContents:a,selectedFilePath:n,selectedDiffPath:l,selectedFile:f,selectedDiff:k,error:null}}async function mn(e,t){let r=ar(e,t);if(!r)return ge("No file selected","No Git-visible files found.","empty");let s=await cr(r.target.worktreePath,r.relativePath);return{...s,path:t,title:t??s.title}}async function _n(e,t,r,s=null){let o=ar(e,t);return o?{...await us(o.target.worktreePath,o.relativePath,r.filter(y=>y.path.startsWith(`${o.target.repoId}/`)).map(y=>({...y,path:y.path.slice(o.target.repoId.length+1)})),s),path:t,title:t}:ge(t,"Repo target is unavailable.","error",t)}function ar(e,t){if(!t)return null;let[r,...s]=t.split("/"),o=s.join("/"),m=(e.repoTargets??[]).find(y=>y.repoId===r&&y.status==="ready")??null;return!m||o.length===0?null:{target:m,relativePath:o}}async function wn(e){let t=await Q("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e});return Sn(t.stdout)}async function kn(e,t){let[r,s,o,m]=await Promise.all([Ml(e,t),fn(e,"staged"),fn(e,"unstaged"),Ol(e)]);return[...r,...s,...o,...m]}async function Ml(e,t){if(!t)return[];let[r,s]=await Promise.all([Q("git",["diff","--name-status",`${t}...HEAD`],{cwd:e}),Q("git",["diff","--numstat",`${t}...HEAD`],{cwd:e})]),o=bn(r.stdout),m=yn(s.stdout);return o.map(y=>{let n=m.get(y.path)??{additions:null,deletions:null};return{group:"branch",path:y.path,status:y.status,additions:n.additions,deletions:n.deletions}}).sort((y,n)=>y.path.localeCompare(n.path))}async function fn(e,t){let r=t==="staged"?["diff","--cached"]:["diff"],[s,o]=await Promise.all([Q("git",[...r,"--name-status"],{cwd:e}),Q("git",[...r,"--numstat"],{cwd:e})]),m=bn(s.stdout),y=yn(o.stdout);return m.map(n=>{let l=y.get(n.path)??{additions:null,deletions:null};return{group:t,path:n.path,status:n.status,additions:l.additions,deletions:l.deletions}}).sort((n,l)=>n.path.localeCompare(l.path))}async function Ol(e){let t=await Q("git",["ls-files","--others","--exclude-standard"],{cwd:e}),r=Sn(t.stdout);return await Promise.all(r.map(async o=>{let m=await cr(e,o),y=m.status==="ready"?Bl(m.lines):null;return{group:"untracked",path:o,status:"A",additions:y,deletions:0}}))}function bn(e){return e.split(`
78
78
  `).map(t=>t.trim()).filter(t=>t.length>0).map(t=>{let[r="M",...s]=t.split(" ");return{status:r,path:s.at(-1)??""}}).filter(t=>t.path.length>0)}function yn(e){let t=new Map;for(let r of e.split(`
79
- `)){let s=r.trim();if(!s)continue;let[o="-",m="-",...y]=s.split(" "),n=y.join(" ");n&&t.set(n,{additions:o==="-"?null:Number(o),deletions:m==="-"?null:Number(m)})}return t}async function Wt(e){return(await ae("git",["show-ref","--verify","--quiet","refs/remotes/origin/main"],{cwd:e})).exitCode===0?"origin/main":(await ae("git",["show-ref","--verify","--quiet","refs/heads/main"],{cwd:e})).exitCode===0?"main":null}async function cr(e,t){if(!t)return pe("No file selected","No Git-visible files found.","empty");let r=Dl(e,t);try{let s=await Tl(r);if(s.size>Rl)return pe(t,`File is ${s.size} bytes, above the 200 KB inline preview limit.`,"too_large",t,s.size);let o=await Sl(r);return Ll(o)?pe(t,"Binary file preview is not available in Craig.","binary",t,o.byteLength):{path:t,status:"ready",title:t,lines:o.toString("utf8").split(`
80
- `),byteLength:o.byteLength}}catch(s){let o=s instanceof Error?s.message:"Unable to read file.";return pe(t,o,"missing",t,null)}}async function ls(e,t,r,s=null){if(!t)return pe("No diff selected","No local changes found.","empty");let o=[],m=r.filter(n=>n.path===t).map(n=>n.group);if(m.includes("branch")){let n=s??await Wt(e);if(n){let l=await J("git",["diff","--stat","--patch",`--unified=${or}`,`${n}...HEAD`,"--",t],{cwd:e});l.stdout.trim().length>0&&o.push(`branch
81
- ${l.stdout.trimEnd()}`)}}if(m.includes("staged")){let n=await J("git",["diff","--cached","--stat","--patch",`--unified=${or}`,"--",t],{cwd:e});n.stdout.trim().length>0&&o.push(`staged
82
- ${n.stdout.trimEnd()}`)}if(m.includes("unstaged")){let n=await J("git",["diff","--stat","--patch",`--unified=${or}`,"--",t],{cwd:e});n.stdout.trim().length>0&&o.push(`unstaged
79
+ `)){let s=r.trim();if(!s)continue;let[o="-",m="-",...y]=s.split(" "),n=y.join(" ");n&&t.set(n,{additions:o==="-"?null:Number(o),deletions:m==="-"?null:Number(m)})}return t}async function Wt(e){return(await ae("git",["show-ref","--verify","--quiet","refs/remotes/origin/main"],{cwd:e})).exitCode===0?"origin/main":(await ae("git",["show-ref","--verify","--quiet","refs/heads/main"],{cwd:e})).exitCode===0?"main":null}async function cr(e,t){if(!t)return ge("No file selected","No Git-visible files found.","empty");let r=$l(e,t);try{let s=await xl(r);if(s.size>El)return ge(t,`File is ${s.size} bytes, above the 200 KB inline preview limit.`,"too_large",t,s.size);let o=await Il(r);return Fl(o)?ge(t,"Binary file preview is not available in Craig.","binary",t,o.byteLength):{path:t,status:"ready",title:t,lines:o.toString("utf8").split(`
80
+ `),byteLength:o.byteLength}}catch(s){let o=s instanceof Error?s.message:"Unable to read file.";return ge(t,o,"missing",t,null)}}async function us(e,t,r,s=null){if(!t)return ge("No diff selected","No local changes found.","empty");let o=[],m=r.filter(n=>n.path===t).map(n=>n.group);if(m.includes("branch")){let n=s??await Wt(e);if(n){let l=await Q("git",["diff","--stat","--patch",`--unified=${or}`,`${n}...HEAD`,"--",t],{cwd:e});l.stdout.trim().length>0&&o.push(`branch
81
+ ${l.stdout.trimEnd()}`)}}if(m.includes("staged")){let n=await Q("git",["diff","--cached","--stat","--patch",`--unified=${or}`,"--",t],{cwd:e});n.stdout.trim().length>0&&o.push(`staged
82
+ ${n.stdout.trimEnd()}`)}if(m.includes("unstaged")){let n=await Q("git",["diff","--stat","--patch",`--unified=${or}`,"--",t],{cwd:e});n.stdout.trim().length>0&&o.push(`unstaged
83
83
  ${n.stdout.trimEnd()}`)}if(m.includes("untracked")){let n=await ae("git",["diff","--no-index","--stat","--patch",`--unified=${or}`,"--","/dev/null",t],{cwd:e});n.stdout.trim().length>0&&o.push(`untracked
84
84
  ${n.stdout.trimEnd()}`)}let y=o.join(`
85
85
 
86
- `);return y.length>Cl?pe(t,"Diff is above the 500 KB inline preview limit.","too_large",t,y.length):y.includes("\0")?pe(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(`
87
- `):["No diff for this file."],byteLength:y.length}}function vn(e){let t=[],r=new Set;for(let s of e){let o=s.split("/");for(let m=0;m<o.length-1;m+=1){let y=o.slice(0,m+1).join("/");r.has(y)||(r.add(y),t.push({kind:"directory",path:y,depth:m,label:o[m]??y}))}t.push({kind:"file",path:s,depth:o.length-1,label:o.at(-1)??s})}return t}function Ze(e,t){return e&&t.includes(e)?e:t[0]??null}function Al(e){return e.length===1&&e[0]===""?0:e.at(-1)===""?e.length-1:e.length}function Sn(e){return[...new Set(e.split(`
88
- `).map(t=>t.trim()).filter(t=>t.length>0))].sort((t,r)=>t.localeCompare(r))}function Dl(e,t){let r=cs.resolve(e,t),s=cs.resolve(e);if(r!==s&&!r.startsWith(`${s}${cs.sep}`))throw new Error(`File path escapes task worktree: ${t}`);return r}function Ll(e){return e.subarray(0,Math.min(e.byteLength,8e3)).includes(0)}function pe(e,t,r,s=null,o=null){return{path:s,status:r,title:e,lines:[t],byteLength:o}}_e();import{access as Ml}from"node:fs/promises";async function Tn(e,t){let r=await ie(e,t),s=await Ol(r.worktreePath),o={...r,status:"closed",cleanup:{...r.cleanup,preservedWorktree:s&&r.cleanup.worktreeRemovedAt===null,warning:null},lastFailureReason:null};return await re(e,o),o}async function Ol(e){try{return await Ml(e),!0}catch{return!1}}Ae();Ie();import Ht from"node:path";function Rn(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 Cn="\u{F024B} ",Pn="\u{F0DCF} ",In="\u25CB",xn="\uEA64",En="\uEAFE",An="\uEBDA",ds="\u25CB",us="\u25CF",hs="\u2713",fs="\u2715";function Dn(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}}Ae();kt();Ae();var Bl=["tasks","center","inspector","actions"],$n=["agent","terminal"],Fn=[],ne="inspection",Lm=[...$n,...Fn],Wn=["commit","push","create-pr","refresh-checks","merge","close-task"],$l=["refresh-checks","close-task"],Nn=["task","checks","pr","setup-run","actions","next-action"],jn=["diff","files","review"];function Hn(e,t={}){let r=e?.activeTab==="files"?"file":e?.activeTab==="diff"?"diff":null,s=ed(e?.openInspectionKind)??r,o=mt(t);return{inputMode:rd(e?.inputMode),focusedRegion:Ql(e?.focusedRegion),selectedRepoId:ze(e?.selectedRepoId),selectedWorkspaceId:ze(e?.selectedWorkspaceId),selectedTaskId:ze(e?.selectedTaskId),selectedPtyTabId:ze(e?.selectedPtyTabId),selectedLeftItemId:ud(ze(e?.selectedTaskId)),activeTab:r?ne:ze(e?.activeTab)??"agent",preferredPtyTabKind:td(e?.preferredPtyTabKind),inspectorSection:Nt(e?.inspectorSection,Nn,"task"),inspectionMode:Zl(e?.inspectionMode,r==="diff"?"diff":"files"),openInspectionKind:s,selectedFileTreePath:ze(e?.selectedFileTreePath),selectedFilePath:ze(e?.selectedFilePath),selectedDiffPath:ze(e?.selectedDiffPath),collapsedFileTreePaths:Array.isArray(e?.collapsedFileTreePaths)?e.collapsedFileTreePaths:[],fileScrollOffset:0,diffScrollOffset:0,selectedActionId:Nt(e?.selectedActionId,Wn,"commit"),selectedProjectTargetId:null,selectedRunner:sd(e?.selectedRunner,o,it(t)),centerTabRunner:null,actionMessage:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:Fl(),centerZoomed:!1}}function Fl(){return{status:"idle",rows:[],error:null,scrolledBack:!1}}function Un(e,t){return{...e??We(),selectedRepoId:t.selectedRepoId,selectedWorkspaceId:t.selectedWorkspaceId,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 hr(e,t,r={}){let s=ld(e,t),o=Jn(s),m=(o?.kind==="workspace"?t.workspaces?.find(k=>k.id===o.id)??null:null)??(o?.kind==="task"?t.workspaces?.find(k=>k.id===t.tasks.find(a=>a.id===o.id)?.workspaceId)??null:null)??t.workspaces?.find(k=>k.id===e.selectedWorkspaceId)??t.workspaces?.[0]??null,n=((o?.kind==="repo"?t.repos.find(k=>k.id===o.id)??null:o?.kind==="task"?t.repos.find(k=>k.id===t.tasks.find(a=>a.id===o.id)?.repoId)??null:null)??(m?.kind==="project"?t.repos.find(k=>k.id===e.selectedRepoId&&m.discoveredRepoIds?.includes(k.id))??null:null)??(m?.kind!=="project"?t.repos.find(k=>k.id===m?.primaryRepoId)??null:null)??t.repos.find(k=>k.id===e.selectedRepoId)??t.repos[0]??null)?.id??null,l=m?t.tasks.filter(k=>k.workspaceId===m.id):n?t.tasks.filter(k=>k.repoId===n):[],f=(o?.kind==="task"?l.find(k=>k.id===o.id)??null:null)??l.find(k=>k.id===e.selectedTaskId)??l[0]??null;return{...e,inputMode:r.resetInputMode?"control":e.inputMode,selectedLeftItemId:s,selectedWorkspaceId:m?.id??null,selectedRepoId:n,selectedTaskId:f?.id??null,...nd(f,e.activeTab,e.selectedPtyTabId),selectedFilePath:Xl(e,t,f?.id??null),...od(e,t,f?.id??null),selectedDiffPath:Gl(e,t,f?.id??null),inspectorSection:Nt(e.inspectorSection,Nn,"task")}}function qn(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return Wl(t)?G({state:{...e,inputMode:"control",centerZoomed:!1,actionMessage:null},changed:!0,detachTerminal:!0}):G({state:e});if(t==="q"||t==="Q")return G({state:e,exit:!0});if(t==="ESCAPE")return G({state:{...e,actionMessage:null},changed:e.actionMessage!==null,pause:!0});if(t==="n"||t==="N")return G({state:{...e,focusedRegion:"tasks",actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0});if((t==="r"||t==="R")&&e.focusedRegion==="tasks"&&(gs(e.selectedLeftItemId)||ms(e.selectedLeftItemId)))return G({state:{...e,selectedRunner:_s(e.selectedRunner,r.enabledRunnerIds),actionMessage:null,taskPromptError:null},changed:!0});if(t==="TAB"||t==="]")return Ln(e,1);if(t==="SHIFT_TAB"||t==="[")return Ln(e,-1);if(t==="z"||t==="Z")return G({state:{...e,centerZoomed:!e.centerZoomed,actionMessage:null},changed:!0});if(t==="UP"||t==="k")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,-1,r):Mn(e,-1,r);if(t==="DOWN"||t==="j")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,1,r):Mn(e,1,r);if(t==="PAGE_UP")return et(e,-(r.pageRows??10),r);if(t==="PAGE_DOWN")return et(e,r.pageRows??10,r);if(t==="MOUSE_WHEEL_UP")return et(e,-3,r);if(t==="MOUSE_WHEEL_DOWN")return et(e,3,r);if(t==="r"&&e.focusedRegion==="center"&&e.selectedTaskId){let s=r.enabledRunnerIds??ce,o=e.centerTabRunner?s.indexOf(e.centerTabRunner):-1,m=o===s.length-1?null:s[o+1];return G({state:{...e,centerTabRunner:m,actionMessage:null},changed:!0})}if((t==="+"||t==="a"||t==="A"||t==="t"||t==="T")&&e.focusedRegion==="center"&&e.selectedTaskId){let s=id(e,t);return G({state:{...e,preferredPtyTabKind:s,actionMessage:null},changed:!0,createPtyTab:!0,createPtyTabKind:s,createPtyTabRunner:s==="agent"?e.centerTabRunner:null})}if((t==="R"||t==="r")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return G({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0});if((t==="X"||t==="x")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return G({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&ur(e.selectedLeftItemId)&&e.selectedTaskId)return G({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&hd(e.selectedLeftItemId)&&e.selectedWorkspaceId)return G({state:{...e,actionMessage:null},changed:!0,removeWorkspace:!0});if(t==="x"&&e.focusedRegion==="center"&&Bn(e.activeTab,r.ptyTabIds??[]))return G({state:{...e,actionMessage:null},changed:!0,closePtyTab:!0});if(t==="LEFT"||t==="h"){if(e.focusedRegion==="center")return ps(e,-1,r.centerTabIds);if(e.focusedRegion==="inspector")return On(e,-1)}if(t==="RIGHT"||t==="l"){if(e.focusedRegion==="center")return ps(e,1,r.centerTabIds);if(e.focusedRegion==="inspector")return On(e,1)}if(tt(t)){if(e.focusedRegion==="tasks"&&(gs(e.selectedLeftItemId)||ms(e.selectedLeftItemId))){let s=Qn(e.selectedLeftItemId),o=Zn(e.selectedLeftItemId);return G({state:{...e,selectedRepoId:s??e.selectedRepoId,selectedWorkspaceId:o??e.selectedWorkspaceId,actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0})}if(e.focusedRegion==="tasks"&&e.selectedLeftItemId==="new-workspace")return G({state:{...e,actionMessage:null},changed:!0,openWorkspaceBrowser:!0});if(e.focusedRegion==="tasks"&&ur(e.selectedLeftItemId)&&e.selectedTaskId)return G({state:{...e,inputMode:"terminal",activeTab:e.selectedPtyTabId??e.activeTab,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&Bn(e.activeTab,r.ptyTabIds??[])&&e.selectedTaskId)return G({state:{...e,inputMode:"terminal",selectedPtyTabId:e.activeTab,preferredPtyTabKind:fr(e.activeTab)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&e.activeTab===ne)return G({state:{...e,actionMessage:null},changed:!0,refreshInspection:!0});if(e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="files"){let s=e.selectedFileTreePath??e.selectedFilePath;if(s&&(r.fileTreeDirectoryIds??[]).includes(s))return G({state:ql({...e,selectedFileTreePath:s}),changed:!0});let o=s&&(r.fileTreeFileIds??[]).includes(s)?s:e.selectedFilePath;return G({state:{...e,selectedFileTreePath:o,selectedFilePath:o,activeTab:ne,openInspectionKind:"file",fileScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0})}return e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="diff"?G({state:{...e,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.focusedRegion==="inspector"&&e.inspectionMode==="review"?e.selectedActionId==="refresh-checks"?G({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?G({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):G({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.focusedRegion!=="actions"?G({state:e}):e.selectedActionId==="create-pr"?G({state:{...e,actionMessage:null},changed:!0,syncPullRequest:!0}):e.selectedActionId==="refresh-checks"?G({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="merge"?G({state:{...e,actionMessage:null},changed:!0,mergeTask:!0}):e.selectedActionId==="close-task"?G({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):G({state:{...e,actionMessage:`Action queued: ${e.selectedActionId} (inspection surfaces land in phase 4.1).`},changed:!0})}return G({state:e})}function jt(e,t){return{...e,terminal:t}}function Kn(e,t){return{...e,inputMode:"control",terminal:{status:"failed",rows:[],error:t}}}function Wl(e){return e===""||e==="CTRL_]"||e==="CTRL_RIGHT_BRACKET"}function tt(e){return e==="ENTER"||e==="KP_ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
89
- `}function zn(e){return e.length===1&&e>=" "&&e!=="\x7F"}function Vn(e){return Gn(e)||fr(e)!==null}function Nl(e){return Fn.includes(e)}function Gn(e){return $n.includes(e)}function Xn(e,t){return[...e?.ptyTabs.map(r=>r.id)??[],...t?.openInspectionKind?[ne]:[]]}var jl=["tasks","center","inspector"];function Ln(e,t){return lr(e,"focusedRegion",jl,t)}function ps(e,t,r){let s=lr(e,"activeTab",r&&r.length>0?r:cd(e),t);return!s.changed||Nl(s.state.activeTab)?s:{...s,state:{...s.state,selectedPtyTabId:s.state.activeTab,preferredPtyTabKind:fr(s.state.activeTab)??s.state.preferredPtyTabKind}}}function Mn(e,t,r){if(e.focusedRegion==="tasks")return Hl(e,t,r.leftItemIds);if(e.focusedRegion==="center")return ps(e,t,r.centerTabIds);if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Yn(e,t,r);if(e.inspectionMode==="diff"){let s=dr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0},refreshInspection:!0}:s}return r.projectTargetIds?.length?dr(e,"selectedProjectTargetId",r.projectTargetIds,t):lr(e,"selectedActionId",$l,t)}return lr(e,"selectedActionId",Wn,t)}function Hl(e,t,r){let s=dr(e,"selectedLeftItemId",r,t);if(!s.changed)return s;let o=Jn(s.state.selectedLeftItemId);if(o?.kind==="workspace")return{...s,state:{...s.state,selectedWorkspaceId:o.id,selectedTaskId:null,selectedPtyTabId:null,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};if(o?.kind==="task")return{...s,state:{...s.state,selectedTaskId:o.id,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};if(o?.kind==="repo")return{...s,state:{...s.state,selectedRepoId:o.id,selectedTaskId:null,selectedPtyTabId:null,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};let m=Qn(s.state.selectedLeftItemId);if(m)return{...s,state:{...s.state,selectedRepoId:m}};let y=Zn(s.state.selectedLeftItemId);return y?{...s,state:{...s.state,selectedWorkspaceId:y}}:s}function et(e,t,r){if(t===0)return G({state:e});if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Yn(e,t,r);if(e.inspectionMode==="diff"){let s=dr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,diffScrollOffset:0}}:s}return G({state:e})}if(e.focusedRegion==="center"&&e.activeTab===ne){if(e.openInspectionKind==="file")return Kl(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return zl(e,t,r)}return G({state:e})}function Ul(e,t){if(e.inspectionMode===t)return G({state:e});let r=t==="diff"?"diff":t==="files"?"file":e.openInspectionKind,s=t==="diff"||t==="files"?ne:e.activeTab;return G({state:{...e,inspectionMode:t,activeTab:s,openInspectionKind:r,fileScrollOffset:t==="files"?0:e.fileScrollOffset,diffScrollOffset:t==="diff"?0:e.diffScrollOffset,actionMessage:null},changed:!0,refreshInspection:!0})}function On(e,t){return Ul(e,Jl(e.inspectionMode,jn,t))}function Yn(e,t,r){let s=r.fileTreeRowIds&&r.fileTreeRowIds.length>0?r.fileTreeRowIds:r.filePathIds??[];if(s.length===0)return G({state:e});let o=e.selectedFileTreePath??e.selectedFilePath??s[0]??null,m=s.indexOf(o??""),y=Ve(m===-1?0:m+t,0,s.length-1),n=s[y]??null;if(n===e.selectedFileTreePath)return G({state:e});let l=n!==null&&(r.fileTreeFileIds??r.filePathIds??[]).includes(n);return G({state:{...e,selectedFileTreePath:n,selectedFilePath:l?n:e.selectedFilePath,activeTab:l?ne:e.activeTab,openInspectionKind:l?"file":e.openInspectionKind,fileScrollOffset:l?0:e.fileScrollOffset,actionMessage:null},changed:!0,refreshInspection:l})}function ql(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,s)=>r.localeCompare(s)),actionMessage:null}}function Kl(e,t,r,s,o=10){let m=Math.max(0,s-Math.max(1,o)),y=Ve(e[t]+r,0,m);return y===e[t]?G({state:e}):G({state:{...e,[t]:y,actionMessage:null},changed:!0})}function zl(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return Vl(e,t,r);let s=r.diffLineCount??0,o=r.pageRows??10,m=Math.max(0,s-Math.max(1,o)),y=e.diffScrollOffset+t,n=r.diffPathIds??[];if(n.length===0||!e.selectedDiffPath){let k=Ve(y,0,m);return k===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:k,actionMessage:null},changed:!0})}let l=n.indexOf(e.selectedDiffPath);if(l===-1){let k=Ve(y,0,m);return k===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:k,actionMessage:null},changed:!0})}if(t>0&&y>m){let k=n[l+1]??null;return k?G({state:{...e,selectedDiffPath:k,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===m?G({state:e}):G({state:{...e,diffScrollOffset:m,actionMessage:null},changed:!0})}if(t<0&&y<0){let k=n[l-1]??null;return k?G({state:{...e,selectedDiffPath:k,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:Number.MAX_SAFE_INTEGER,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===0?G({state:e}):G({state:{...e,diffScrollOffset:0,actionMessage:null},changed:!0})}let f=Ve(y,0,m);return f===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:f,actionMessage:null},changed:!0})}function Vl(e,t,r){let s=r.diffLineCount??0,o=r.pageRows??10,m=Math.max(0,s-Math.max(1,o)),y=Ve(e.diffScrollOffset+t,0,m),n=Yl(r.diffPathRanges??[],y)??e.selectedDiffPath;return y===e.diffScrollOffset&&n===e.selectedDiffPath?G({state:e}):G({state:{...e,diffScrollOffset:y,selectedDiffPath:n,actionMessage:null},changed:!0})}function Gl(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function Xl(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedFilePath&&(t.inspection.filePaths??[]).includes(e.selectedFilePath)?e.selectedFilePath:t.inspection.selectedFilePath}function Yl(e,t){return e.find(r=>t>=r.start&&t<r.end)?.path??e.at(-1)?.path??null}function lr(e,t,r,s){let o=r.indexOf(e[t]),m=Ve(o+s,0,r.length-1),y=r[m];return!y||y===e[t]?G({state:e}):G({state:{...e,[t]:y,actionMessage:null},changed:!0})}function dr(e,t,r,s,o=!1){if(r.length===0)return G({state:e});let m=r.indexOf(e[t]??r[0]??""),y=Ve(m===-1?0:m+s,0,r.length-1),n=r[y]??null;return n===e[t]?G({state:e}):G({state:{...e,[t]:n,actionMessage:null},changed:!0,refreshInspection:o})}function Jl(e,t,r){let s=t.indexOf(e);return t[Ve(s+r,0,t.length-1)]??e}function G(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,createWorkspaceTask:e.createWorkspaceTask??!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,removeWorkspace:e.removeWorkspace??!1,refreshInspection:e.refreshInspection??!1}}function Nt(e,t,r){return t.includes(e??"")?e:r}function Ql(e){return e==="tabs"?"center":Nt(e,Bl,"tasks")}function Zl(e,t){return e==="checks"||e==="actions"||e==="review"?"review":Nt(e,jn,t)}function ed(e){return e==="file"||e==="diff"?e:null}function td(e){return e==="terminal"?"terminal":"agent"}function rd(e){return e==="terminal"?"terminal":"control"}function sd(e,t=[...ce],r="codex"){return e&&_t(e)&&t.includes(e)?e:r}function _s(e,t=ce){let r=t.length>0?t:ce,s=r.indexOf(e);return r[(s+1)%r.length]??r[0]??"codex"}function fr(e){let t=ce.join("|");return new RegExp(`:(?:agent|${t})(?:-\\d+)?$`).test(e)?"agent":/:terminal(?:-\d+)?$/.test(e)?"terminal":null}function id(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":fr(e.activeTab)??e.preferredPtyTabKind}function nd(e,t,r){if(!e)return{activeTab:t===ne?t:"agent",selectedPtyTabId:null};let s=e.ptyTabs.find(n=>n.id===r)??null,o=e.selectedPtyTabId?e.ptyTabs.find(n=>n.id===e.selectedPtyTabId)??null:null,m=e.ptyTabs.find(n=>n.id===t)??null;if(m)return{activeTab:m.id,selectedPtyTabId:m.id};if(Gn(t)){let l=e.ptyTabs.find(f=>f.kind===t)??null??o??s??e.ptyTabs[0]??null;return{activeTab:l?.id??ne,selectedPtyTabId:l?.id??null}}if(t===ne)return{activeTab:ne,selectedPtyTabId:s?.id??o?.id??e.ptyTabs[0]?.id??null};let y=o??s??e.ptyTabs[0]??null;return{activeTab:y?.id??ne,selectedPtyTabId:y?.id??null}}function od(e,t,r){if(!t.inspection||t.inspection.taskId!==r)return{selectedFileTreePath:e.selectedFileTreePath,collapsedFileTreePaths:e.collapsedFileTreePaths};let s=e.selectedFileTreePath??t.inspection.selectedFilePath,o=e.selectedFileTreePath===null&&e.collapsedFileTreePaths.length===0?ad(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:s,collapsedFileTreePaths:o}}function ad(e,t){let r=new Set;if(t){let s=t.split("/");for(let o=1;o<s.length;o+=1)r.add(s.slice(0,o).join("/"))}return e.filter(s=>s.kind==="directory"&&!s.path.includes("/")&&!r.has(s.path)).map(s=>s.path).sort((s,o)=>s.localeCompare(o))}function cd(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function Bn(e,t){return t.includes(e)}function ld(e,t){let r=dd(t);return e.selectedLeftItemId&&r.includes(e.selectedLeftItemId)?e.selectedLeftItemId:e.selectedWorkspaceId&&r.includes(`workspace:${e.selectedWorkspaceId}`)?`workspace:${e.selectedWorkspaceId}`:e.selectedTaskId&&r.includes(`task:${e.selectedTaskId}`)?`task:${e.selectedTaskId}`:e.selectedRepoId&&r.includes(`repo:${e.selectedRepoId}`)?`repo:${e.selectedRepoId}`:r[0]??null}function dd(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`),r.kind==="project"&&t.push(`new-task-workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="repo"&&t.push(`new-task:${r.primaryRepoId}`)}else for(let r of e.repos){t.push(`repo:${r.id}`);for(let s of e.tasks.filter(o=>o.repoId===r.id))t.push(`task:${s.id}`);t.push(`new-task:${r.id}`)}return t.push("new-workspace"),t}function Jn(e){return e?e.startsWith("workspace:")?{kind:"workspace",id:e.slice(10)}:e.startsWith("repo:")?{kind:"repo",id:e.slice(5)}:e.startsWith("task:")?{kind:"task",id:e.slice(5)}:null:null}function ze(e){return typeof e=="string"?e:null}function ud(e){return e?`task:${e}`:null}function ur(e){return typeof e=="string"&&e.startsWith("task:")}function gs(e){return typeof e=="string"&&e.startsWith("new-task:")}function ms(e){return typeof e=="string"&&e.startsWith("new-task-workspace:")}function hd(e){return typeof e=="string"&&e.startsWith("workspace:")}function Qn(e){return gs(e)?e.slice(9):null}function Zn(e){return ms(e)?e.slice(19):null}function Ve(e,t,r){return Math.min(r,Math.max(t,e))}var gr="empty",de={lineNumber:"3b4261",gutter:"3b4261",keyword:"9d7cd8",string:"9ece6a",literal:"ff9e64",comment:"565f89",markup:"f7768e",diffAdd:"9ece6a",diffDelete:"f7768e",diffMeta:"565f89",diffHunk:"565f89"};function to(e,t){let r=gd(t,e),s=t.repos.find(_=>_.id===e.selectedRepoId)??t.repos[0]??null,o=r?t.tasks.filter(_=>_.workspaceId===r.id):t.tasks,m=r?.kind==="project"?o:s?o.filter(_=>_.repoId===s.id):[],y=m.find(_=>_.id===e.selectedTaskId)??m[0]??null,n=y?.type==="project",l=Kd(t.tasks),f=wd(e,y),k=_d(e,y,f),a=k.find(_=>_.id===f)??k[0]??{id:"agent",label:"CODEX"},w=t.inspection?.taskId===y?.id?t.inspection:null,c=s?.name??"no repo",g=y?Se(y.runner):Se(e.selectedRunner);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 Esc cancel`:e.taskPromptInput!==null?`NEW TASK ${s?`[${s.name}]`:"[no repo]"} \xB7 ${Se(e.selectedRunner)} Ctrl+R switch runner Enter create Esc cancel \u203A ${e.taskPromptInput}${e.taskPromptError?` \u2717 ${e.taskPromptError}`:""}`:e.inputMode==="terminal"?"TERMINAL \u2191\u2193/PgUp/PgDn scroll Ctrl+] return to control":e.focusedRegion==="tasks"?e.selectedLeftItemId?.startsWith("new-task:")||e.selectedLeftItemId?.startsWith("new-task-workspace:")?`r runner [${Se(e.selectedRunner)}] Enter create task Esc pause ? help`:ur(e.selectedLeftItemId)?"n new task Enter attach X close task Esc pause ? help":e.selectedLeftItemId?.startsWith("workspace:")?"n new task Enter select X remove workspace Esc pause ? help":"n new task Enter select Esc pause ? help":e.focusedRegion==="center"?y===null?"n new task Tab tasks Esc pause ? help":f===ne?"\u2191\u2193/wheel/PgUp/PgDn scroll \u2190/\u2192 switch Tab inspector Esc pause ? help":`+ new tab a ${Se(e.centerTabRunner??y?.runner??e.selectedRunner)} r runner t terminal x close Enter attach Esc pause ? help`:e.inspectionMode==="review"?n?"\u2191\u2193 navigate targets R refresh checks X close task \u2190/\u2192 mode Esc pause ? help":"R refresh checks X close task \u2190/\u2192 mode Esc pause ? help":e.inspectionMode==="files"?"\u2191\u2193 navigate Enter open file \u2190/\u2192 mode Esc pause ? help":"\u2191\u2193 navigate \u2190/\u2192 mode Esc pause ? help",topRail:{workspacePath:Ht.relative(process.env.HOME??"",t.workspaceRoot).length>0?`~/${Ht.relative(process.env.HOME??"",t.workspaceRoot)}`:t.workspaceRoot,agent:g,liveLabel:y?.status==="running"?"live":"idle"},leftTree:fd(e,t),runners:(t.enabledRunnerIds??["codex","cursor","claude"]).map(_=>zd(_,l[_])),centerHeader:{tabLabel:e.workspaceBrowser?"BROWSER":a.label,taskId:e.workspaceBrowser?"new workspace":y?.id??"no task",repo:c,agent:g},centerTranscript:md(f,e,s,y,e.workspaceBrowser,w,r),tabs:k,rightContext:qd(s,y),rightInspection:Ad(e,y,w)}}function fd(e,t){let r=[{text:"WORKSPACES",muted:!0,focused:e.focusedRegion==="tasks"}];if(!t.workspaces)return pd(r,e,t.repos,t.tasks);let s=t.workspaces;if(s.length===0)r.push({text:"No workspaces registered.",indent:2,muted:!0});else for(let m of s){let y=e.selectedLeftItemId===`workspace:${m.id}`;r.push({id:`workspace:${m.id}`,text:`${m.kind==="project"?"\u25A6":"\u25BE"} ${m.name??m.id}`,selected:y,focused:y&&e.focusedRegion==="tasks"});let n=m.kind==="project"?m.discoveredRepoIds??[]:[m.primaryRepoId];if(m.kind==="project"){let f=`new-task-workspace:${m.id}`,k=e.selectedLeftItemId===f;r.push({id:f,text:`+ New Project Task [${Se(e.selectedRunner)}]`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks",muted:!k})}let l=t.tasks.filter(f=>f.workspaceId===m.id);if(l.length===0)r.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let f of l){let k=e.selectedLeftItemId===`task:${f.id}`,a=k?"\u25B8":"\u2022",w=f.title.length>28?`${f.title.slice(0,25)}\u2026`:f.title,c={id:`task:${f.id}`,taskId:f.id,text:`${a} ${w}`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks"};f.pullRequest.number&&(c.prBadge=so(f.pullRequest)),r.push(c)}if(m.kind==="repo"){let f=`new-task:${m.primaryRepoId}`,k=e.selectedLeftItemId===f;r.push({id:f,text:`+ New Task [${Se(e.selectedRunner)}]`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks",muted:!k})}else{r.push({text:` Repos (${n.length})`,indent:0,muted:!0});for(let f of n.slice(0,6)){let k=t.repos.find(a=>a.id===f);r.push({text:` \xB7 ${k?.name??f}`,indent:0,muted:!0})}n.length>6&&r.push({text:` \xB7 ${n.length-6} more`,indent:0,muted:!0})}}let o=e.selectedLeftItemId==="new-workspace";return r.push({text:"",muted:!0}),r.push({id:"new-workspace",text:"+ New Workspace",selected:o,focused:o&&e.focusedRegion==="tasks"}),r}function pd(e,t,r,s){if(r.length===0)e.push({text:"No repos registered.",indent:2,muted:!0});else for(let m of r){let y=t.selectedLeftItemId===`repo:${m.id}`;e.push({id:`repo:${m.id}`,text:`\u25BE ${m.name}`,selected:y,focused:y&&t.focusedRegion==="tasks"});let n=s.filter(k=>k.repoId===m.id);if(n.length===0)e.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let k of n){let a=t.selectedLeftItemId===`task:${k.id}`,w=a?"\u25B8":"\u2022",c=k.title.length>28?`${k.title.slice(0,25)}\u2026`:k.title,g={id:`task:${k.id}`,taskId:k.id,text:`${w} ${c}`,indent:2,selected:a,focused:a&&t.focusedRegion==="tasks"};k.pullRequest.number&&(g.prBadge=so(k.pullRequest)),e.push(g)}let l=`new-task:${m.id}`,f=t.selectedLeftItemId===l;e.push({id:l,text:`+ New Task [${Se(t.selectedRunner)}]`,indent:2,selected:f,focused:f&&t.focusedRegion==="tasks",muted:!f})}let o=t.selectedLeftItemId==="new-workspace";return e.push({text:"",muted:!0}),e.push({id:"new-workspace",text:"+ New Workspace",selected:o,focused:o&&t.focusedRegion==="tasks"}),e}function gd(e,t){let r=e.workspaces??[];if(!e.workspaces)return null;let s=e.tasks.find(o=>o.id===t.selectedTaskId)??null;return s?r.find(o=>o.id===s.workspaceId)??null:t.selectedWorkspaceId?r.find(o=>o.id===t.selectedWorkspaceId)??null:r[0]??null}function md(e,t,r,s,o,m=null,y=null){if(o){let l=o.entries.length===0?["No directories or git repos here."]:o.entries.map((f,k)=>{let a=k===o.selectedIndex?"\u25B8":" ",w=f.kind==="repo"?" [git repo]":"/";return`${a} ${f.name}${w}`});return Oe(["Browse for a workspace to register.",o.cwd,"",...l,"",o.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 Oe(["No repos registered yet.","","Run `craig repo add <path>` in command mode, then reopen the shell."]);if(!s){let l=y?.kind==="project",f=l?y.name??"this workspace":r.name,k=l?"Project Task":"Task";return Oe([`No tasks in ${f}.`,"",`Press n or choose + New ${k} to create one with ${Se(t.selectedRunner)}.`])}let n=s.ptyTabs.find(l=>l.id===e)??null;return n?n.kind==="agent"?Oe([`${n.title} tab ready for ${s.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."]):Oe([`${n.title} tab ready for ${s.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"?yd(s,m,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?vd(s,m,t.diffScrollOffset):s.ptyTabs.length===0&&!t.openInspectionKind?Oe(["No task tabs open.","","Press a to create an agent tab, t to create a Terminal tab, or + to create the preferred tab kind."]):Oe(["No center tab selected.","","Choose a task PTY tab or open an inspection item from the right panel."])}function _d(e,t,r){let s=t?.ptyTabs.map(m=>({id:m.id,label:kd(m)}))??[];if(!t)return[{id:gr,label:"EMPTY",active:r===gr,focused:e.focusedRegion==="center"&&r===gr}];let o=e.openInspectionKind||r===ne?[{id:ne,label:bd(e)}]:[];return[...s,...o].map(m=>({...m,active:m.id===r,focused:e.focusedRegion==="center"&&m.id===r}))}function wd(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:gr}function kd(e){return e.title.toUpperCase()}function bd(e){let t=e.openInspectionKind==="diff"?e.selectedDiffPath:e.selectedFilePath,r=t?Ht.basename(t):e.inspectionMode.toUpperCase();return e.openInspectionKind==="diff"?`${r} \u0394`:r}function yd(e,t,r){if(!e)return Oe(["No task selected.","","Select or create a task to inspect files."]);if(!t||t.error)return Oe(["Files unavailable.","",t?.error??"Craig has not loaded file inspection for this task yet."]);let s=t.selectedFile,o=ro(s.path??s.title);return[{text:s.title},{text:`${s.byteLength===null?"size unknown":`${s.byteLength} bytes`} \xB7 ${s.lines.length} lines \xB7 PgUp/PgDn or wheel scroll`,tone:"muted"},{text:""},...Sd(s.lines,r,o)]}function vd(e,t,r){if(!e)return Oe(["No task selected.","","Select or create a task to inspect diffs."]);if(!t||t.error)return Oe(["Diff unavailable.","",t?.error??"Craig has not loaded diff inspection for this task yet."]);let s=t.selectedDiff,o=ro(s.path??s.title);return[{text:s.title},{text:`${t.diffPaths.length} changed files \xB7 ${s.lines.length} rows \xB7 PgUp/PgDn or wheel scroll`,tone:"muted"},{text:""},...Td(s.lines,r,o)]}function Oe(e){return e.map(t=>({text:t}))}function Sd(e,t,r){let s=Math.max(3,String(e.length).length),o=Math.max(0,Math.min(t,Math.max(0,e.length-1)));return e.slice(o).map((m,y)=>{let n=o+y+1;return{text:`${`${String(n).padStart(s," ")} \u2502 `}${m}`,segments:[{text:String(n).padStart(s," "),style:{fg:de.lineNumber}},{text:" \u2502 ",style:{fg:de.gutter}},...ws(m,r)],tone:"default"}})}function Td(e,t,r){let s=Rd(e),o=Math.max(0,Math.min(t,Math.max(0,s.length-1)));return s.slice(o).map(m=>Cd(m,r))}function Rd(e){let t=[],r=0,s=0;for(let o of e){let m=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(o);if(m){r=Number.parseInt(m[1]??"0",10),s=Number.parseInt(m[2]??"0",10);continue}if(!(o.startsWith("diff --git")||o.startsWith("index ")||o.startsWith("+++ ")||o.startsWith("--- "))&&!(o==="staged"||o==="unstaged"||o==="untracked")){if(o.startsWith("-")&&!o.startsWith("---")){t.push({oldNumber:r,newNumber:null,marker:"-",text:o.slice(1),kind:"delete"}),r+=1;continue}if(o.startsWith("+")&&!o.startsWith("+++")){t.push({oldNumber:null,newNumber:s,marker:"+",text:o.slice(1),kind:"add"}),s+=1;continue}if(o.startsWith(" ")){if(r===0&&s===0)continue;t.push({oldNumber:r,newNumber:s,marker:" ",text:o.slice(1),kind:"context"}),r+=1,s+=1;continue}}}return t}function Cd(e,t){let r=eo(e.oldNumber),s=eo(e.newNumber),o=e.kind==="delete"?r:s,m=e.kind==="delete"?{bg:"2a1111",fallbackFg:de.diffDelete}:e.kind==="add"?{bg:"10210f",fallbackFg:de.diffAdd}:null,y=`${o} \u2502 ${e.text}`,n=m?Id(ws(e.text,t),m.bg,m.fallbackFg):ws(e.text,t),l=m?{fg:de.lineNumber,bg:m.bg}:{fg:de.lineNumber},f=m?{fg:de.gutter,bg:m.bg}:{fg:de.gutter};return{text:y,segments:[{text:o,style:l},{text:" \u2502 ",style:f},...n],fullBleed:m!==null}}function eo(e){return e===null?" ":String(e).padStart(4," ")}function ro(e){let t=Ht.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 ws(e,t){return t==="diff"?Pd(e):t==="markdown"?xd(e):t==="json"?ks(e,/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|-?\b\d+(?:\.\d+)?\b/g):t==="javascript"||t==="css"?ks(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 Pd(e){return e.startsWith("+")&&!e.startsWith("+++")?[{text:e,style:{fg:de.diffAdd}}]:e.startsWith("-")&&!e.startsWith("---")?[{text:e,style:{fg:de.diffDelete}}]:e.startsWith("@@")?[{text:e,style:{fg:de.diffHunk}}]:e.startsWith("diff --git")||e.startsWith("index ")||e.startsWith("+++ ")||e.startsWith("--- ")?[{text:e,style:{fg:de.diffMeta}}]:[{text:e}]}function Id(e,t,r){return e.map(s=>({text:s.text,style:{...s.style??{fg:r},bg:t}}))}function xd(e){return/^#{1,6}\s/.test(e)?[{text:e,style:{fg:de.markup,bold:!0}}]:ks(e,/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)]+\))/g)}function ks(e,t){let r=[],s=0;for(let o of e.matchAll(t)){let m=o[0],y=o.index??0;y>s&&r.push({text:e.slice(s,y)}),r.push({text:m,style:Ed(m)}),s=y+m.length}return s<e.length&&r.push({text:e.slice(s)}),r.length>0?r:[{text:e}]}function Ed(e){return e.startsWith("//")||e.startsWith("/*")?{fg:de.comment,italic:!0}:e.startsWith('"')||e.startsWith("'")||e.startsWith("`")?{fg:de.string}:/^-?\d/.test(e)||e==="true"||e==="false"||e==="null"||e==="undefined"?{fg:de.literal}:e.startsWith("**")||e.startsWith("[")||e.startsWith("`")?{fg:de.markup}:{fg:de.keyword}}function Ad(e,t,r){let s=e.selectedProjectTargetId??t?.repoTargets?.[0]?.repoId??null,m=(t?.type==="project"&&s?t.repoTargets?.find(n=>n.repoId===s)??null:null)?.pullRequest??t?.pullRequest??null,y=[Dd(e,m),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...y,...Ld(e,t)]}:e.inspectionMode==="files"?{title:"",rows:[...y,...Wd(e,r)]}:{title:"",rows:[...y,...jd(e,r)]}}function Dd(e,t){let r=e.inspectionMode,s=[{label:"CHANGES",active:r==="diff"},{label:"FILES",active:r==="files"},{label:"REVIEW",active:r==="review"}],o=[];for(let l=0;l<s.length;l++){let f=s[l];l>0&&o.push({text:" "}),o.push({text:f.label,style:{fg:f.active?"7aa2f7":"565f89"}})}let m=bs(t),y=ys(t?.requiredChecks??null);return o.push({text:" "},m,{text:" "},y),{id:"inspection-mode",text:o.map(l=>l.text).join(""),segments:o}}function so(e){return[{text:" "},bs(e),{text:" "},ys(e.requiredChecks??null)]}function bs(e){return!e||!e.number?{text:In,style:{fg:"565f89"}}:e.status==="merged"?{text:En,style:{fg:"9d7cd8"}}:e.status==="closed"?{text:An,style:{fg:"f7768e"}}:{text:xn,style:{fg:"9ece6a"}}}function ys(e){return!e||e.length===0?{text:ds,style:{fg:"565f89"}}:e.some(t=>t.status==="failed")?{text:fs,style:{fg:"f7768e"}}:e.every(t=>t.status==="success")?{text:hs,style:{fg:"9ece6a"}}:{text:us,style:{fg:"e0af68"}}}function Ld(e,t){return t?t.type==="project"&&t.repoTargets?.length?Md(e,t):io("pr",t.title,t.branch,t.pullRequest):[{id:"review-empty",text:"No task selected.",muted:!0}]}var pr=32;function Md(e,t){let r=[],s=t.repoTargets??[],o=e.selectedProjectTargetId??s[0]?.repoId??null;for(let y of s){let n=o===y.repoId,l=e.focusedRegion==="inspector"&&n,f=y.repoId.startsWith("repo_")?y.repoId.slice(5):y.repoId;if(y.status!=="ready"){let a=y.failureReason?y.failureReason.slice(0,14):y.status,w=pr-a.length-1,c=f.length>w?f.slice(0,w-1)+"\u2026":f,g=pr-c.length-a.length;r.push({id:`project-review:${y.repoId}`,text:c+" ".repeat(Math.max(1,g))+a,selected:n,focused:l,muted:!0})}else{let k=bs(y.pullRequest),a=ys(y.pullRequest.requiredChecks),w=`${k.text} ${a.text}`,c=pr-w.length-1,g=f.length>c?f.slice(0,c-1)+"\u2026":f,_=pr-g.length-w.length,i=g+" ".repeat(Math.max(1,_));r.push({id:`project-review:${y.repoId}`,text:i+w,selected:n,focused:l,segments:[{text:i},{...k,text:k.text},{text:" "},{...a,text:a.text}]})}}let m=s.find(y=>y.repoId===o)??null;return m?.status==="ready"&&m.pullRequest.number&&(r.push({id:"target-detail-spacer",text:""}),r.push(...io("target",null,m.branch,m.pullRequest))),r}function io(e,t,r,s){let o=k=>`${e}-${k}`;if(!s.number)return[{id:o("no-pr"),text:r,muted:!0}];let m=[],y=`#${s.number} ${s.status??"open"}`;if(m.push(s.url?{id:o("pr-number"),text:`${y} Open in GitHub \u2197`,segments:[{text:y},{text:" Open in GitHub \u2197",style:{fg:"7aa2f7",underline:!0},href:s.url}]}:{id:o("pr-number"),text:y}),t){let k=t.length>34?`${t.slice(0,31)}\u2026`:t;m.push({id:o("pr-title"),text:k})}let n=s.baseBranch??"?",l=s.headBranch??r;m.push({id:o("pr-branches"),text:`\u2190 ${n} \u2192 ${l}`,muted:!0});let f=s.mergeable?"merge ready":s.mergeStateStatus?`merge ${s.mergeStateStatus}`:"merge unknown";return m.push({id:o("pr-meta"),text:`${f} \xB7 synced ${Od(s.lastSyncedAt)}`,muted:!0}),m.push({id:o("checks-spacer"),text:""}),m.push({id:o("checks-header"),text:"Checks",muted:!0}),s.requiredChecks.length?m.push(...s.requiredChecks.map(Bd)):m.push({id:o("checks-none"),text:s.number?"No GitHub checks reported.":"No checks \u2014 sync after creating a PR.",muted:!0}),m}function Od(e){if(!e)return"--";let t=Date.now()-new Date(e).getTime(),r=Math.floor(t/1e3);if(r<60)return`${r}s ago`;let s=Math.floor(r/60);if(s<60)return`${s}m ago`;let o=Math.floor(s/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`}function Bd(e){let{icon:t,color:r}=$d(e.status),s=e.name.length>22?`${e.name.slice(0,21)}\u2026`:e.name;return{id:`pr-check:${e.name}`,text:`${t} ${s.padEnd(22," ")} ${Fd(e.status)}`,color:r,muted:!1}}function $d(e){switch(e){case"success":return{icon:hs,color:"9ece6a"};case"pending":return{icon:us,color:"e0af68"};case"failed":return{icon:fs,color:"f7768e"};case"skipped":return{icon:ds,color:"565f89"};default:return{icon:"?",color:"565f89"}}}function Fd(e){return e==="success"?"passing":e==="failed"?"failing":e}function Wd(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(m=>[m.path,m.status])),s=Nd(t.fileRows,e.collapsedFileTreePaths),o=e.selectedFileTreePath??t.selectedFilePath;return s.map(m=>{let y=m.kind==="file"?r.get(m.path):void 0,n=y==="A"?"9ece6a":y==="M"?"e0af68":y==="D"?"f7768e":y==="??"?"565f89":void 0,l=m.kind==="directory"?e.collapsedFileTreePaths.includes(m.path)?Cn:Pn:Rn(m.label),f=m.kind==="file"?Dn(m.label):void 0,k=" ".repeat(m.depth),a=f?{text:l,style:{fg:f}}:{text:l},w=n?{text:m.label,style:{fg:n}}:{text:m.label},c=[{text:k},a,w];return{id:m.path,text:`${k}${l}${m.label}`,selected:m.path===o,focused:m.path===o&&e.focusedRegion==="inspector",muted:m.kind==="directory",segments:c}})}function Nd(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let m=1;m<o.length;m+=1)if(r.has(o.slice(0,m).join("/")))return!1;return!0})}function jd(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:t.filePaths.some(o=>o.startsWith("repo_"))?"No changes in project task worktrees. Edits in the original repos are outside this task.":"No local changes.",muted:!0}];if(Hd(t))return Ud(e,t);let r=[];for(let s of["branch","staged","unstaged","untracked"]){let o=t.diffRows.filter(m=>m.group===s);o.length!==0&&(r.push({id:s,text:s.toUpperCase(),muted:!0}),r.push(...o.map(m=>no(m,e,t))))}return r}function Hd(e){return e.filePaths.some(t=>t.startsWith("repo_"))||e.diffRows.some(t=>t.path.startsWith("repo_"))}function Ud(e,t){let r=[],s=[...new Set(t.diffRows.map(o=>o.path.split("/")[0]).filter(o=>typeof o=="string"&&o.length>0))].sort();for(let o of s){let m=t.diffRows.filter(n=>n.path.startsWith(`${o}/`)),y=o.startsWith("repo_")?o.slice(5):o;r.push({id:`repo-diff:${o}`,text:y,muted:!0});for(let n of["branch","staged","unstaged","untracked"]){let l=m.filter(f=>f.group===n);l.length!==0&&(r.push({id:`repo-diff:${o}:${n}`,text:` ${n}`,muted:!0}),r.push(...l.map(f=>no(f,e,t,o.length+1))))}}return r}function no(e,t,r,s=0){let o=e.additions===null?"-":`+${e.additions}`,m=e.deletions===null?"-":`-${e.deletions}`,y=e.status==="A"||e.group==="untracked"?"9ece6a":e.status==="D"?"f7768e":"e0af68",n=s>0?e.path.slice(s):e.path;return{id:`${e.group}:${e.path}`,text:` ${e.status.padEnd(2," ")} ${n} ${o}/${m}`,selected:e.path===(t.selectedDiffPath??r.selectedDiffPath),focused:e.path===(t.selectedDiffPath??r.selectedDiffPath)&&t.focusedRegion==="inspector",color:y}}function qd(e,t){return e?t?[{label:"Task",value:t.id},{label:"Repo",value:e.name},{label:"Agent",value:Se(t.runner)},{label:"Branch",value:t.branch},{label:"Status",value:t.status},{label:"Worktree",value:Ht.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 Kd(e){return e.reduce((t,r)=>(t[r.runner]+=1,t),{codex:0,cursor:0,claude:0})}function zd(e,t){return{name:Se(e).toLowerCase(),health:t>0?1:0,count:String(t)}}var mr={width:120,height:36},Be={leftWidth:42,rightWidth:36,dividerWidth:1,topRailHeight:1};function vt(e,t){return{width:Math.max(e??mr.width,mr.width),height:Math.max(t??mr.height,mr.height)}}import{spawn as pu}from"node:child_process";import{createHash as gu}from"node:crypto";import{createServer as mu,createConnection as wo}from"node:net";import{openSync as _u}from"node:fs";import{mkdir as wu,readFile as Is,rm as gt,writeFile as ku}from"node:fs/promises";import{tmpdir as bu}from"node:os";import St from"node:path";import{createRequire as tu}from"node:module";var lo=ma(ao(),1),Vd=1e3,Gd=["000000","cd3131","0dbc79","e5e510","2472c8","bc3fbc","11a8cd","e5e5e5","666666","f14c4c","23d18b","f5f543","3b8eea","d670d6","29b8db","ffffff"];function uo(e){return new lo.default.Terminal({allowProposedApi:!0,cols:e.columns,rows:e.rows,scrollback:Vd,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function ho(e,t){(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function Ss(e,t){return new Promise(r=>{e.write(t,r)})}function fo(e,t=0){let r=e.buffer.active,s=[],o=r.getNullCell(),m=r.baseY+r.cursorY,y=Math.max(0,r.baseY-t);for(let n=0;n<e.rows;n+=1){let l=r.getLine(y+n);if(!l){s.push({segments:[]});continue}let f=[];for(let k=0;k<e.cols;k+=1){let a=l.getCell(k,o);!a||a.getWidth()===0||f.push({text:a.getChars()||" ",style:Jd(a,y+n===m&&k===r.cursorX)})}s.push({segments:Xd(Yd(f))})}return s}function Xd(e){let t=[];for(let r of e){let s=t.at(-1);if(s&&eu(s.style,r.style)){s.text+=r.text;continue}let o={text:r.text};po(r.style)||(o.style=r.style),t.push(o)}return t}function Yd(e){let t=e.length;for(;t>0;){let r=e[t-1];if(!r||r.text!==" "||!po(r.style))break;t-=1}return e.slice(0,t)}function Jd(e,t){let r={},s=co(e,"fg"),o=co(e,"bg");return s&&(r.fg=s),o&&(r.bg=o),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 co(e,t){if(t==="fg"?e.isFgDefault():e.isBgDefault())return;let s=t==="fg"?e.isFgRGB():e.isBgRGB(),o=t==="fg"?e.getFgColor():e.getBgColor();return s?o.toString(16).padStart(6,"0"):Gd[o]??Qd(o)}function Qd(e){if(e>=16&&e<=231){let t=e-16,r=Math.floor(t/36),s=Math.floor(t%36/6),o=t%6;return[r,s,o].map(Zd).map(m=>m.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 Zd(e){return e===0?0:55+e*40}function eu(e,t){return vs(e)===vs(t)}function vs(e){return e?[e.fg??"",e.bg??"",e.bold?"b":"",e.dim?"d":"",e.italic?"i":"",e.underline?"u":"",e.inverse?"v":""].join("|"):""}function po(e){return vs(e)===""}var ru=tu(import.meta.url),su=/^CTRL_([A-Z])$/,iu="\x1B[6n",nu="\x1B[c",ou="\x1B[?u",au={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:""},_r=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,s,o){let m=this.sessions.get(r);if(m)if(m.status!=="running")Ts(m),this.sessions.delete(r);else return this.attachedTabId=r,m.scrollbackLines=0,go(m,s),this.getViewState(r);let y=this.createSession(t,r,s,o);return this.sessions.set(r,y),this.attachedTabId=r,this.getViewState(r)}write(t){let r=this.getAttachedSession();!r||r.status!=="running"||r.pty.write(t)}writeKey(t){let r=cu(t);r!==null&&this.write(r)}scrollViewport(t){let r=this.getAttachedSession();if(!r||t===0)return;let s=r.terminal.buffer.active.baseY;r.scrollbackLines=Math.max(0,Math.min(s,r.scrollbackLines-t))}resize(t){let r=this.getAttachedSession();r&&go(r,t)}detach(){this.attachedTabId=null}disposeSession(t){let r=this.sessions.get(t);r&&(Ts(r),this.sessions.delete(t),this.attachedTabId===t&&(this.attachedTabId=null))}disposeAll(){for(let t of this.sessions.values())Ts(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:fo(r.terminal,r.scrollbackLines),error:r.error,scrolledBack:r.scrollbackLines>0}:{status:"idle",rows:[],error:null,scrolledBack:!1}}createSession(t,r,s,o){let m=this.spawn??du().spawn,y=uo(s),n=o??this.resolveSessionSpec(t,r),l=ct(this.env),{executable:f,args:k}=uu(this.shell,n.command,{cwd:n.cwd,env:l}),a=m(f,k,{name:"xterm-256color",cols:s.columns,rows:s.rows,cwd:n.cwd,env:hu(l)}),w={taskId:t,tabId:r,pty:a,terminal:y,status:"running",error:null,disposables:[],scrollbackLines:0};return w.disposables.push(a.onData(c=>{fu(a,c),Ss(w.terminal,c).then(()=>{this.onUpdate?.(w.tabId)})})),w.disposables.push(a.onExit(c=>{w.status="exited",Ss(w.terminal,`\r
90
- [process exited ${c.exitCode}]`).then(()=>{this.onUpdate?.(w.tabId)})})),w}getAttachedSession(){return this.attachedTabId?this.sessions.get(this.attachedTabId)??null:null}};function cu(e){if(e.length===1)return e;let t=au[e];if(t!==void 0)return t;let r=su.exec(e);return r?.[1]?String.fromCharCode(r[1].charCodeAt(0)-64):null}function go(e,t){lu(e.pty,t),ho(e.terminal,t)}function Ts(e){for(let t of e.disposables)t.dispose();e.terminal.dispose(),e.pty.kill()}function lu(e,t){t.columns>0&&t.rows>0&&(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function du(){return ru("node-pty")}function uu(e,t,r){if(t.length===0)return{executable:e,args:[]};let o=`${[lt(t[0],r),...t.slice(1)].map(mo).join(" ")}; exec ${mo(e)} -l`;return{executable:e,args:["-lc",o]}}function mo(e){return`'${e.replaceAll("'","'\\''")}'`}function hu(e){let t={};for(let[r,s]of Object.entries(e))typeof s=="string"&&(t[r]=s);return t.TERM=t.TERM??"xterm-256color",t}function fu(e,t){for(let r=0;r<Rs(t,iu);r+=1)e.write("\x1B[1;1R");for(let r=0;r<Rs(t,nu);r+=1)e.write("\x1B[?1;2c");for(let r=0;r<Rs(t,ou);r+=1)e.write("\x1B[?0u")}function Rs(e,t){if(t.length===0)return 0;let r=0,s=e.indexOf(t);for(;s!==-1;)r+=1,s=e.indexOf(t,s+t.length);return r}var xs=3;async function ko(e){let t=Es(e.paths);await yu(t,e.paths,e.spawnDaemon);let r=await Ro(t.socketPath),s=new Cs(r,e);return await s.ready(),s}async function bo(e,t={}){let r=Es(e);await wu(e.runtimeDir,{recursive:!0}),await gt(r.socketPath,{force:!0});let s=new Ps(e,t),o=mu(m=>s.handleConnection(m));await Pu(o,r.socketPath),await ku(r.pidPath,String(process.pid),"utf8"),await new Promise(m=>{let y=()=>{s.closeClients(),o.close(()=>m())};s.onShutdown=y,process.once("SIGTERM",y),process.once("SIGINT",y)}),await gt(r.socketPath,{force:!0}),await gt(r.pidPath,{force:!0}),s.disposeAll()}async function yo(e){let t=Es(e);return await kr(t.socketPath)?(await So(t.socketPath),!0):!1}var Cs=class{constructor(t,r){this.socket=t;this.options=r,t.setEncoding("utf8"),t.on("data",s=>this.handleData(String(s))),t.on("error",s=>this.rejectAll(s instanceof Error?s:new Error(String(s)))),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!==xs)throw new Error("Craig PTY daemon protocol mismatch.")}async ensureSession(t,r,s){let o=await this.send({type:"ensureSession",taskId:t,tabId:r,size:s,spec:this.options.resolveSessionSpec?.(t,r)??{cwd:this.options.workspaceRoot,command:[]}});this.attachedTabId=r;let m=o.view??{status:"idle",rows:[],error:null};return this.viewCache.set(r,m),m}async hydrateSessions(t){for(let r of t)try{let s=await this.send({type:"hydrateSession",tabId:r});s.view&&this.viewCache.set(r,s.view)}catch(s){let o=s instanceof Error?s.message:String(s);this.viewCache.set(r,{status:"failed",rows:[],error:o})}}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 s={...t,id:r},o=new Promise((y,n)=>{this.pending.set(r,{resolve:y,reject:n})});if(this.socket.destroyed)throw this.pending.delete(r),new Error("Craig PTY daemon connection is closed.");this.socket.write(`${JSON.stringify(s)}
86
+ `);return y.length>Al?ge(t,"Diff is above the 500 KB inline preview limit.","too_large",t,y.length):y.includes("\0")?ge(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(`
87
+ `):["No diff for this file."],byteLength:y.length}}function vn(e){let t=[],r=new Set;for(let s of e){let o=s.split("/");for(let m=0;m<o.length-1;m+=1){let y=o.slice(0,m+1).join("/");r.has(y)||(r.add(y),t.push({kind:"directory",path:y,depth:m,label:o[m]??y}))}t.push({kind:"file",path:s,depth:o.length-1,label:o.at(-1)??s})}return t}function Ze(e,t){return e&&t.includes(e)?e:t[0]??null}function Bl(e){return e.length===1&&e[0]===""?0:e.at(-1)===""?e.length-1:e.length}function Sn(e){return[...new Set(e.split(`
88
+ `).map(t=>t.trim()).filter(t=>t.length>0))].sort((t,r)=>t.localeCompare(r))}function $l(e,t){let r=ds.resolve(e,t),s=ds.resolve(e);if(r!==s&&!r.startsWith(`${s}${ds.sep}`))throw new Error(`File path escapes task worktree: ${t}`);return r}function Fl(e){return e.subarray(0,Math.min(e.byteLength,8e3)).includes(0)}function ge(e,t,r,s=null,o=null){return{path:s,status:r,title:e,lines:[t],byteLength:o}}_e();import{access as Wl}from"node:fs/promises";async function Tn(e,t){let r=await ie(e,t),s=await Nl(r.worktreePath),o={...r,status:"closed",cleanup:{...r.cleanup,preservedWorktree:s&&r.cleanup.worktreeRemovedAt===null,warning:null},lastFailureReason:null};return await re(e,o),o}async function Nl(e){try{return await Wl(e),!0}catch{return!1}}Ae();Ie();import Ht from"node:path";function Rn(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 Cn="\u{F024B} ",Pn="\u{F0DCF} ",In="\u25CB",xn="\uEA64",En="\uEAFE",An="\uEBDA",hs="\u25CB",fs="\u25CF",ps="\u2713",gs="\u2715";function Dn(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}}Ae();kt();Ae();var jl=["tasks","center","inspector","actions"],$n=["agent","terminal"],Fn=[],ne="inspection",Wm=[...$n,...Fn],Wn=["commit","push","create-pr","refresh-checks","merge","close-task"],Hl=["refresh-checks","close-task"],Nn=["task","checks","pr","setup-run","actions","next-action"],jn=["diff","files","review"];function Hn(e,t={}){let r=e?.activeTab==="files"?"file":e?.activeTab==="diff"?"diff":null,s=nd(e?.openInspectionKind)??r,o=mt(t);return{inputMode:ad(e?.inputMode),focusedRegion:sd(e?.focusedRegion),selectedRepoId:ze(e?.selectedRepoId),selectedWorkspaceId:ze(e?.selectedWorkspaceId),selectedTaskId:ze(e?.selectedTaskId),selectedPtyTabId:ze(e?.selectedPtyTabId),selectedLeftItemId:md(ze(e?.selectedTaskId)),activeTab:r?ne:ze(e?.activeTab)??"agent",preferredPtyTabKind:od(e?.preferredPtyTabKind),inspectorSection:Nt(e?.inspectorSection,Nn,"task"),inspectionMode:id(e?.inspectionMode,r==="diff"?"diff":"files"),openInspectionKind:s,selectedFileTreePath:ze(e?.selectedFileTreePath),selectedFilePath:ze(e?.selectedFilePath),selectedDiffPath:ze(e?.selectedDiffPath),collapsedFileTreePaths:Array.isArray(e?.collapsedFileTreePaths)?e.collapsedFileTreePaths:[],fileScrollOffset:0,diffScrollOffset:0,selectedActionId:Nt(e?.selectedActionId,Wn,"commit"),selectedProjectTargetId:null,selectedRunner:cd(e?.selectedRunner,o,it(t)),centerTabRunner:null,actionMessage:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:Ul(),centerZoomed:!1}}function Ul(){return{status:"idle",rows:[],error:null,scrolledBack:!1}}function Un(e,t){return{...e??We(),selectedRepoId:t.selectedRepoId,selectedWorkspaceId:t.selectedWorkspaceId,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 hr(e,t,r={}){let s=pd(e,t),o=Jn(s),m=(o?.kind==="workspace"?t.workspaces?.find(k=>k.id===o.id)??null:null)??(o?.kind==="task"?t.workspaces?.find(k=>k.id===t.tasks.find(a=>a.id===o.id)?.workspaceId)??null:null)??t.workspaces?.find(k=>k.id===e.selectedWorkspaceId)??t.workspaces?.[0]??null,n=((o?.kind==="repo"?t.repos.find(k=>k.id===o.id)??null:o?.kind==="task"?t.repos.find(k=>k.id===t.tasks.find(a=>a.id===o.id)?.repoId)??null:null)??(m?.kind==="project"?t.repos.find(k=>k.id===e.selectedRepoId&&m.discoveredRepoIds?.includes(k.id))??null:null)??(m?.kind!=="project"?t.repos.find(k=>k.id===m?.primaryRepoId)??null:null)??t.repos.find(k=>k.id===e.selectedRepoId)??t.repos[0]??null)?.id??null,l=m?t.tasks.filter(k=>k.workspaceId===m.id):n?t.tasks.filter(k=>k.repoId===n):[],f=(o?.kind==="task"?l.find(k=>k.id===o.id)??null:null)??l.find(k=>k.id===e.selectedTaskId)??l[0]??null;return{...e,inputMode:r.resetInputMode?"control":e.inputMode,selectedLeftItemId:s,selectedWorkspaceId:m?.id??null,selectedRepoId:n,selectedTaskId:f?.id??null,...dd(f,e.activeTab,e.selectedPtyTabId),selectedFilePath:ed(e,t,f?.id??null),...ud(e,t,f?.id??null),selectedDiffPath:Zl(e,t,f?.id??null),inspectorSection:Nt(e.inspectorSection,Nn,"task")}}function qn(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return ql(t)?G({state:{...e,inputMode:"control",centerZoomed:!1,actionMessage:null},changed:!0,detachTerminal:!0}):G({state:e});if(t==="q"||t==="Q")return G({state:e,exit:!0});if(t==="ESCAPE")return G({state:{...e,actionMessage:null},changed:e.actionMessage!==null,pause:!0});if(t==="n"||t==="N")return G({state:{...e,focusedRegion:"tasks",actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0});if((t==="r"||t==="R")&&e.focusedRegion==="tasks"&&(_s(e.selectedLeftItemId)||ws(e.selectedLeftItemId)))return G({state:{...e,selectedRunner:ks(e.selectedRunner,r.enabledRunnerIds),actionMessage:null,taskPromptError:null},changed:!0});if(t==="TAB"||t==="]")return Ln(e,1);if(t==="SHIFT_TAB"||t==="[")return Ln(e,-1);if(t==="z"||t==="Z")return G({state:{...e,centerZoomed:!e.centerZoomed,actionMessage:null},changed:!0});if(t==="UP"||t==="k")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,-1,r):Mn(e,-1,r);if(t==="DOWN"||t==="j")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,1,r):Mn(e,1,r);if(t==="PAGE_UP")return et(e,-(r.pageRows??10),r);if(t==="PAGE_DOWN")return et(e,r.pageRows??10,r);if(t==="MOUSE_WHEEL_UP")return et(e,-3,r);if(t==="MOUSE_WHEEL_DOWN")return et(e,3,r);if(t==="r"&&e.focusedRegion==="center"&&e.selectedTaskId){let s=r.enabledRunnerIds??ce,o=e.centerTabRunner?s.indexOf(e.centerTabRunner):-1,m=o===s.length-1?null:s[o+1];return G({state:{...e,centerTabRunner:m,actionMessage:null},changed:!0})}if((t==="+"||t==="a"||t==="A"||t==="t"||t==="T")&&e.focusedRegion==="center"&&e.selectedTaskId){let s=ld(e,t);return G({state:{...e,preferredPtyTabKind:s,actionMessage:null},changed:!0,createPtyTab:!0,createPtyTabKind:s,createPtyTabRunner:s==="agent"?e.centerTabRunner:null})}if((t==="R"||t==="r")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return G({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0});if((t==="X"||t==="x")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return G({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&ur(e.selectedLeftItemId)&&e.selectedTaskId)return G({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&_d(e.selectedLeftItemId)&&e.selectedWorkspaceId)return G({state:{...e,actionMessage:null},changed:!0,removeWorkspace:!0});if(t==="x"&&e.focusedRegion==="center"&&Bn(e.activeTab,r.ptyTabIds??[]))return G({state:{...e,actionMessage:null},changed:!0,closePtyTab:!0});if(t==="LEFT"||t==="h"){if(e.focusedRegion==="center")return ms(e,-1,r.centerTabIds);if(e.focusedRegion==="inspector")return On(e,-1)}if(t==="RIGHT"||t==="l"){if(e.focusedRegion==="center")return ms(e,1,r.centerTabIds);if(e.focusedRegion==="inspector")return On(e,1)}if(tt(t)){if(e.focusedRegion==="tasks"&&(_s(e.selectedLeftItemId)||ws(e.selectedLeftItemId))){let s=Qn(e.selectedLeftItemId),o=Zn(e.selectedLeftItemId);return G({state:{...e,selectedRepoId:s??e.selectedRepoId,selectedWorkspaceId:o??e.selectedWorkspaceId,actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0})}if(e.focusedRegion==="tasks"&&e.selectedLeftItemId==="new-workspace")return G({state:{...e,actionMessage:null},changed:!0,openWorkspaceBrowser:!0});if(e.focusedRegion==="tasks"&&ur(e.selectedLeftItemId)&&e.selectedTaskId)return G({state:{...e,inputMode:"terminal",activeTab:e.selectedPtyTabId??e.activeTab,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&Bn(e.activeTab,r.ptyTabIds??[])&&e.selectedTaskId)return G({state:{...e,inputMode:"terminal",selectedPtyTabId:e.activeTab,preferredPtyTabKind:fr(e.activeTab)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&e.activeTab===ne)return G({state:{...e,actionMessage:null},changed:!0,refreshInspection:!0});if(e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="files"){let s=e.selectedFileTreePath??e.selectedFilePath;if(s&&(r.fileTreeDirectoryIds??[]).includes(s))return G({state:Xl({...e,selectedFileTreePath:s}),changed:!0});let o=s&&(r.fileTreeFileIds??[]).includes(s)?s:e.selectedFilePath;return G({state:{...e,selectedFileTreePath:o,selectedFilePath:o,activeTab:ne,openInspectionKind:"file",fileScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0})}return e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="diff"?G({state:{...e,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.focusedRegion==="inspector"&&e.inspectionMode==="review"?e.selectedActionId==="refresh-checks"?G({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?G({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):G({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.focusedRegion!=="actions"?G({state:e}):e.selectedActionId==="create-pr"?G({state:{...e,actionMessage:null},changed:!0,syncPullRequest:!0}):e.selectedActionId==="refresh-checks"?G({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="merge"?G({state:{...e,actionMessage:null},changed:!0,mergeTask:!0}):e.selectedActionId==="close-task"?G({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):G({state:{...e,actionMessage:`Action queued: ${e.selectedActionId} (inspection surfaces land in phase 4.1).`},changed:!0})}return G({state:e})}function jt(e,t){return{...e,terminal:t}}function Kn(e,t){return{...e,inputMode:"control",terminal:{status:"failed",rows:[],error:t}}}function ql(e){return e===""||e==="CTRL_]"||e==="CTRL_RIGHT_BRACKET"}function tt(e){return e==="ENTER"||e==="KP_ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
89
+ `}function zn(e){return e.length===1&&e>=" "&&e!=="\x7F"}function Vn(e){return Gn(e)||fr(e)!==null}function Kl(e){return Fn.includes(e)}function Gn(e){return $n.includes(e)}function Xn(e,t){return[...e?.ptyTabs.map(r=>r.id)??[],...t?.openInspectionKind?[ne]:[]]}var zl=["tasks","center","inspector"];function Ln(e,t){return lr(e,"focusedRegion",zl,t)}function ms(e,t,r){let s=lr(e,"activeTab",r&&r.length>0?r:fd(e),t);return!s.changed||Kl(s.state.activeTab)?s:{...s,state:{...s.state,selectedPtyTabId:s.state.activeTab,preferredPtyTabKind:fr(s.state.activeTab)??s.state.preferredPtyTabKind}}}function Mn(e,t,r){if(e.focusedRegion==="tasks")return Vl(e,t,r.leftItemIds);if(e.focusedRegion==="center")return ms(e,t,r.centerTabIds);if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Yn(e,t,r);if(e.inspectionMode==="diff"){let s=dr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0},refreshInspection:!0}:s}return r.projectTargetIds?.length?dr(e,"selectedProjectTargetId",r.projectTargetIds,t):lr(e,"selectedActionId",Hl,t)}return lr(e,"selectedActionId",Wn,t)}function Vl(e,t,r){let s=dr(e,"selectedLeftItemId",r,t);if(!s.changed)return s;let o=Jn(s.state.selectedLeftItemId);if(o?.kind==="workspace")return{...s,state:{...s.state,selectedWorkspaceId:o.id,selectedTaskId:null,selectedPtyTabId:null,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};if(o?.kind==="task")return{...s,state:{...s.state,selectedTaskId:o.id,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};if(o?.kind==="repo")return{...s,state:{...s.state,selectedRepoId:o.id,selectedTaskId:null,selectedPtyTabId:null,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};let m=Qn(s.state.selectedLeftItemId);if(m)return{...s,state:{...s.state,selectedRepoId:m}};let y=Zn(s.state.selectedLeftItemId);return y?{...s,state:{...s.state,selectedWorkspaceId:y}}:s}function et(e,t,r){if(t===0)return G({state:e});if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Yn(e,t,r);if(e.inspectionMode==="diff"){let s=dr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,diffScrollOffset:0}}:s}return G({state:e})}if(e.focusedRegion==="center"&&e.activeTab===ne){if(e.openInspectionKind==="file")return Yl(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return Jl(e,t,r)}return G({state:e})}function Gl(e,t){if(e.inspectionMode===t)return G({state:e});let r=t==="diff"?"diff":t==="files"?"file":e.openInspectionKind,s=t==="diff"||t==="files"?ne:e.activeTab;return G({state:{...e,inspectionMode:t,activeTab:s,openInspectionKind:r,fileScrollOffset:t==="files"?0:e.fileScrollOffset,diffScrollOffset:t==="diff"?0:e.diffScrollOffset,actionMessage:null},changed:!0,refreshInspection:!0})}function On(e,t){return Gl(e,rd(e.inspectionMode,jn,t))}function Yn(e,t,r){let s=r.fileTreeRowIds&&r.fileTreeRowIds.length>0?r.fileTreeRowIds:r.filePathIds??[];if(s.length===0)return G({state:e});let o=e.selectedFileTreePath??e.selectedFilePath??s[0]??null,m=s.indexOf(o??""),y=Ve(m===-1?0:m+t,0,s.length-1),n=s[y]??null;if(n===e.selectedFileTreePath)return G({state:e});let l=n!==null&&(r.fileTreeFileIds??r.filePathIds??[]).includes(n);return G({state:{...e,selectedFileTreePath:n,selectedFilePath:l?n:e.selectedFilePath,activeTab:l?ne:e.activeTab,openInspectionKind:l?"file":e.openInspectionKind,fileScrollOffset:l?0:e.fileScrollOffset,actionMessage:null},changed:!0,refreshInspection:l})}function Xl(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,s)=>r.localeCompare(s)),actionMessage:null}}function Yl(e,t,r,s,o=10){let m=Math.max(0,s-Math.max(1,o)),y=Ve(e[t]+r,0,m);return y===e[t]?G({state:e}):G({state:{...e,[t]:y,actionMessage:null},changed:!0})}function Jl(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return Ql(e,t,r);let s=r.diffLineCount??0,o=r.pageRows??10,m=Math.max(0,s-Math.max(1,o)),y=e.diffScrollOffset+t,n=r.diffPathIds??[];if(n.length===0||!e.selectedDiffPath){let k=Ve(y,0,m);return k===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:k,actionMessage:null},changed:!0})}let l=n.indexOf(e.selectedDiffPath);if(l===-1){let k=Ve(y,0,m);return k===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:k,actionMessage:null},changed:!0})}if(t>0&&y>m){let k=n[l+1]??null;return k?G({state:{...e,selectedDiffPath:k,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===m?G({state:e}):G({state:{...e,diffScrollOffset:m,actionMessage:null},changed:!0})}if(t<0&&y<0){let k=n[l-1]??null;return k?G({state:{...e,selectedDiffPath:k,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:Number.MAX_SAFE_INTEGER,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===0?G({state:e}):G({state:{...e,diffScrollOffset:0,actionMessage:null},changed:!0})}let f=Ve(y,0,m);return f===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:f,actionMessage:null},changed:!0})}function Ql(e,t,r){let s=r.diffLineCount??0,o=r.pageRows??10,m=Math.max(0,s-Math.max(1,o)),y=Ve(e.diffScrollOffset+t,0,m),n=td(r.diffPathRanges??[],y)??e.selectedDiffPath;return y===e.diffScrollOffset&&n===e.selectedDiffPath?G({state:e}):G({state:{...e,diffScrollOffset:y,selectedDiffPath:n,actionMessage:null},changed:!0})}function Zl(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function ed(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedFilePath&&(t.inspection.filePaths??[]).includes(e.selectedFilePath)?e.selectedFilePath:t.inspection.selectedFilePath}function td(e,t){return e.find(r=>t>=r.start&&t<r.end)?.path??e.at(-1)?.path??null}function lr(e,t,r,s){let o=r.indexOf(e[t]),m=Ve(o+s,0,r.length-1),y=r[m];return!y||y===e[t]?G({state:e}):G({state:{...e,[t]:y,actionMessage:null},changed:!0})}function dr(e,t,r,s,o=!1){if(r.length===0)return G({state:e});let m=r.indexOf(e[t]??r[0]??""),y=Ve(m===-1?0:m+s,0,r.length-1),n=r[y]??null;return n===e[t]?G({state:e}):G({state:{...e,[t]:n,actionMessage:null},changed:!0,refreshInspection:o})}function rd(e,t,r){let s=t.indexOf(e);return t[Ve(s+r,0,t.length-1)]??e}function G(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,createWorkspaceTask:e.createWorkspaceTask??!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,removeWorkspace:e.removeWorkspace??!1,refreshInspection:e.refreshInspection??!1}}function Nt(e,t,r){return t.includes(e??"")?e:r}function sd(e){return e==="tabs"?"center":Nt(e,jl,"tasks")}function id(e,t){return e==="checks"||e==="actions"||e==="review"?"review":Nt(e,jn,t)}function nd(e){return e==="file"||e==="diff"?e:null}function od(e){return e==="terminal"?"terminal":"agent"}function ad(e){return e==="terminal"?"terminal":"control"}function cd(e,t=[...ce],r="codex"){return e&&_t(e)&&t.includes(e)?e:r}function ks(e,t=ce){let r=t.length>0?t:ce,s=r.indexOf(e);return r[(s+1)%r.length]??r[0]??"codex"}function fr(e){let t=ce.join("|");return new RegExp(`:(?:agent|${t})(?:-\\d+)?$`).test(e)?"agent":/:terminal(?:-\d+)?$/.test(e)?"terminal":null}function ld(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":fr(e.activeTab)??e.preferredPtyTabKind}function dd(e,t,r){if(!e)return{activeTab:t===ne?t:"agent",selectedPtyTabId:null};let s=e.ptyTabs.find(n=>n.id===r)??null,o=e.selectedPtyTabId?e.ptyTabs.find(n=>n.id===e.selectedPtyTabId)??null:null,m=e.ptyTabs.find(n=>n.id===t)??null;if(m)return{activeTab:m.id,selectedPtyTabId:m.id};if(Gn(t)){let l=e.ptyTabs.find(f=>f.kind===t)??null??o??s??e.ptyTabs[0]??null;return{activeTab:l?.id??ne,selectedPtyTabId:l?.id??null}}if(t===ne)return{activeTab:ne,selectedPtyTabId:s?.id??o?.id??e.ptyTabs[0]?.id??null};let y=o??s??e.ptyTabs[0]??null;return{activeTab:y?.id??ne,selectedPtyTabId:y?.id??null}}function ud(e,t,r){if(!t.inspection||t.inspection.taskId!==r)return{selectedFileTreePath:e.selectedFileTreePath,collapsedFileTreePaths:e.collapsedFileTreePaths};let s=e.selectedFileTreePath??t.inspection.selectedFilePath,o=e.selectedFileTreePath===null&&e.collapsedFileTreePaths.length===0?hd(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:s,collapsedFileTreePaths:o}}function hd(e,t){let r=new Set;if(t){let s=t.split("/");for(let o=1;o<s.length;o+=1)r.add(s.slice(0,o).join("/"))}return e.filter(s=>s.kind==="directory"&&!s.path.includes("/")&&!r.has(s.path)).map(s=>s.path).sort((s,o)=>s.localeCompare(o))}function fd(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function Bn(e,t){return t.includes(e)}function pd(e,t){let r=gd(t);return e.selectedLeftItemId&&r.includes(e.selectedLeftItemId)?e.selectedLeftItemId:e.selectedWorkspaceId&&r.includes(`workspace:${e.selectedWorkspaceId}`)?`workspace:${e.selectedWorkspaceId}`:e.selectedTaskId&&r.includes(`task:${e.selectedTaskId}`)?`task:${e.selectedTaskId}`:e.selectedRepoId&&r.includes(`repo:${e.selectedRepoId}`)?`repo:${e.selectedRepoId}`:r[0]??null}function gd(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`),r.kind==="project"&&t.push(`new-task-workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="repo"&&t.push(`new-task:${r.primaryRepoId}`)}else for(let r of e.repos){t.push(`repo:${r.id}`);for(let s of e.tasks.filter(o=>o.repoId===r.id))t.push(`task:${s.id}`);t.push(`new-task:${r.id}`)}return t.push("new-workspace"),t}function Jn(e){return e?e.startsWith("workspace:")?{kind:"workspace",id:e.slice(10)}:e.startsWith("repo:")?{kind:"repo",id:e.slice(5)}:e.startsWith("task:")?{kind:"task",id:e.slice(5)}:null:null}function ze(e){return typeof e=="string"?e:null}function md(e){return e?`task:${e}`:null}function ur(e){return typeof e=="string"&&e.startsWith("task:")}function _s(e){return typeof e=="string"&&e.startsWith("new-task:")}function ws(e){return typeof e=="string"&&e.startsWith("new-task-workspace:")}function _d(e){return typeof e=="string"&&e.startsWith("workspace:")}function Qn(e){return _s(e)?e.slice(9):null}function Zn(e){return ws(e)?e.slice(19):null}function Ve(e,t,r){return Math.min(r,Math.max(t,e))}var gr="empty",de={lineNumber:"3b4261",gutter:"3b4261",keyword:"9d7cd8",string:"9ece6a",literal:"ff9e64",comment:"565f89",markup:"f7768e",diffAdd:"9ece6a",diffDelete:"f7768e",diffMeta:"565f89",diffHunk:"565f89"};function ro(e,t){let r=bd(t,e),s=t.repos.find(_=>_.id===e.selectedRepoId)??t.repos[0]??null,o=r?t.tasks.filter(_=>_.workspaceId===r.id):t.tasks,m=r?.kind==="project"?o:s?o.filter(_=>_.repoId===s.id):[],y=m.find(_=>_.id===e.selectedTaskId)??m[0]??null,n=y?.type==="project",l=Jd(t.tasks),f=Sd(e,y),k=vd(e,y,f),a=k.find(_=>_.id===f)??k[0]??{id:"agent",label:"CODEX"},w=t.inspection?.taskId===y?.id?t.inspection:null,c=s?.name??"no repo",g=y?Se(y.runner):Se(e.selectedRunner);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 Esc cancel`:e.taskPromptInput!==null?`NEW TASK ${s?`[${s.name}]`:"[no repo]"} \xB7 ${Se(e.selectedRunner)} Ctrl+R switch runner Enter create Esc cancel \u203A ${e.taskPromptInput}${e.taskPromptError?` \u2717 ${e.taskPromptError}`:""}`:e.inputMode==="terminal"?"TERMINAL \u2191\u2193/PgUp/PgDn scroll Ctrl+] return to control":e.focusedRegion==="tasks"?e.selectedLeftItemId?.startsWith("new-task:")||e.selectedLeftItemId?.startsWith("new-task-workspace:")?`r runner [${Se(e.selectedRunner)}] Enter create task Esc pause ? help`:ur(e.selectedLeftItemId)?"n new task Enter attach X close task Esc pause ? help":e.selectedLeftItemId?.startsWith("workspace:")?"n new task Enter select X remove workspace Esc pause ? help":"n new task Enter select Esc pause ? help":e.focusedRegion==="center"?y===null?"n new task Tab tasks Esc pause ? help":f===ne?"\u2191\u2193/wheel/PgUp/PgDn scroll \u2190/\u2192 switch Tab inspector Esc pause ? help":`+ new tab a ${Se(e.centerTabRunner??y?.runner??e.selectedRunner)} r runner t terminal x close Enter attach Esc pause ? help`:e.inspectionMode==="review"?n?"\u2191\u2193 navigate targets R refresh checks X close task \u2190/\u2192 mode Esc pause ? help":"R refresh checks X close task \u2190/\u2192 mode Esc pause ? help":e.inspectionMode==="files"?"\u2191\u2193 navigate Enter open file \u2190/\u2192 mode Esc pause ? help":"\u2191\u2193 navigate \u2190/\u2192 mode Esc pause ? help",topRail:{workspacePath:Ht.relative(process.env.HOME??"",t.workspaceRoot).length>0?`~/${Ht.relative(process.env.HOME??"",t.workspaceRoot)}`:t.workspaceRoot,agent:g,liveLabel:y?.status==="running"?"live":"idle"},leftTree:wd(e,t),runners:(t.enabledRunnerIds??["codex","cursor","claude"]).map(_=>Qd(_,l[_])),centerHeader:{tabLabel:e.workspaceBrowser?"BROWSER":a.label,taskId:e.workspaceBrowser?"new workspace":y?.id??"no task",repo:c,agent:g},centerTranscript:yd(f,e,s,y,e.workspaceBrowser,w,r),tabs:k,rightContext:Yd(s,y),rightInspection:Bd(e,y,w)}}function wd(e,t){let r=[{text:"WORKSPACES",muted:!0,focused:e.focusedRegion==="tasks"}];if(!t.workspaces)return kd(r,e,t.repos,t.tasks);let s=t.workspaces;if(s.length===0)r.push({text:"No workspaces registered.",indent:2,muted:!0});else for(let m of s){let y=e.selectedLeftItemId===`workspace:${m.id}`;r.push({id:`workspace:${m.id}`,text:`${m.kind==="project"?"\u25A6":"\u25BE"} ${m.name??m.id}`,selected:y,focused:y&&e.focusedRegion==="tasks"});let n=m.kind==="project"?m.discoveredRepoIds??[]:[m.primaryRepoId];if(m.kind==="project"){let f=`new-task-workspace:${m.id}`,k=e.selectedLeftItemId===f;r.push({id:f,text:`+ New Project Task [${Se(e.selectedRunner)}]`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks",muted:!k})}let l=t.tasks.filter(f=>f.workspaceId===m.id);if(l.length===0)r.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let f of l){let k=e.selectedLeftItemId===`task:${f.id}`,a=k?"\u25B8":"\u2022",w=f.title.length>28?`${f.title.slice(0,25)}\u2026`:f.title,c={id:`task:${f.id}`,taskId:f.id,text:`${a} ${w}`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks"},g=io(f);g&&(c.prBadge=g),r.push(c)}if(m.kind==="repo"){let f=`new-task:${m.primaryRepoId}`,k=e.selectedLeftItemId===f;r.push({id:f,text:`+ New Task [${Se(e.selectedRunner)}]`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks",muted:!k})}else{r.push({text:` Repos (${n.length})`,indent:0,muted:!0});for(let f of n.slice(0,6)){let k=t.repos.find(a=>a.id===f);r.push({text:` \xB7 ${k?.name??f}`,indent:0,muted:!0})}n.length>6&&r.push({text:` \xB7 ${n.length-6} more`,indent:0,muted:!0})}}let o=e.selectedLeftItemId==="new-workspace";return r.push({text:"",muted:!0}),r.push({id:"new-workspace",text:"+ New Workspace",selected:o,focused:o&&e.focusedRegion==="tasks"}),r}function kd(e,t,r,s){if(r.length===0)e.push({text:"No repos registered.",indent:2,muted:!0});else for(let m of r){let y=t.selectedLeftItemId===`repo:${m.id}`;e.push({id:`repo:${m.id}`,text:`\u25BE ${m.name}`,selected:y,focused:y&&t.focusedRegion==="tasks"});let n=s.filter(k=>k.repoId===m.id);if(n.length===0)e.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let k of n){let a=t.selectedLeftItemId===`task:${k.id}`,w=a?"\u25B8":"\u2022",c=k.title.length>28?`${k.title.slice(0,25)}\u2026`:k.title,g={id:`task:${k.id}`,taskId:k.id,text:`${w} ${c}`,indent:2,selected:a,focused:a&&t.focusedRegion==="tasks"},_=io(k);_&&(g.prBadge=_),e.push(g)}let l=`new-task:${m.id}`,f=t.selectedLeftItemId===l;e.push({id:l,text:`+ New Task [${Se(t.selectedRunner)}]`,indent:2,selected:f,focused:f&&t.focusedRegion==="tasks",muted:!f})}let o=t.selectedLeftItemId==="new-workspace";return e.push({text:"",muted:!0}),e.push({id:"new-workspace",text:"+ New Workspace",selected:o,focused:o&&t.focusedRegion==="tasks"}),e}function bd(e,t){let r=e.workspaces??[];if(!e.workspaces)return null;let s=e.tasks.find(o=>o.id===t.selectedTaskId)??null;return s?r.find(o=>o.id===s.workspaceId)??null:t.selectedWorkspaceId?r.find(o=>o.id===t.selectedWorkspaceId)??null:r[0]??null}function yd(e,t,r,s,o,m=null,y=null){if(o){let l=o.entries.length===0?["No directories or git repos here."]:o.entries.map((f,k)=>{let a=k===o.selectedIndex?"\u25B8":" ",w=f.kind==="repo"?" [git repo]":"/";return`${a} ${f.name}${w}`});return Oe(["Browse for a workspace to register.",o.cwd,"",...l,"",o.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 Oe(["No repos registered yet.","","Run `craig repo add <path>` in command mode, then reopen the shell."]);if(!s){let l=y?.kind==="project",f=l?y.name??"this workspace":r.name,k=l?"Project Task":"Task";return Oe([`No tasks in ${f}.`,"",`Press n or choose + New ${k} to create one with ${Se(t.selectedRunner)}.`])}let n=s.ptyTabs.find(l=>l.id===e)??null;return n?n.kind==="agent"?Oe([`${n.title} tab ready for ${s.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."]):Oe([`${n.title} tab ready for ${s.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"?Cd(s,m,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?Pd(s,m,t.diffScrollOffset):s.ptyTabs.length===0&&!t.openInspectionKind?Oe(["No task tabs open.","","Press a to create an agent tab, t to create a Terminal tab, or + to create the preferred tab kind."]):Oe(["No center tab selected.","","Choose a task PTY tab or open an inspection item from the right panel."])}function vd(e,t,r){let s=t?.ptyTabs.map(m=>({id:m.id,label:Td(m)}))??[];if(!t)return[{id:gr,label:"EMPTY",active:r===gr,focused:e.focusedRegion==="center"&&r===gr}];let o=e.openInspectionKind||r===ne?[{id:ne,label:Rd(e)}]:[];return[...s,...o].map(m=>({...m,active:m.id===r,focused:e.focusedRegion==="center"&&m.id===r}))}function Sd(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:gr}function Td(e){return e.title.toUpperCase()}function Rd(e){let t=e.openInspectionKind==="diff"?e.selectedDiffPath:e.selectedFilePath,r=t?Ht.basename(t):e.inspectionMode.toUpperCase();return e.openInspectionKind==="diff"?`${r} \u0394`:r}function Cd(e,t,r){if(!e)return Oe(["No task selected.","","Select or create a task to inspect files."]);if(!t||t.error)return Oe(["Files unavailable.","",t?.error??"Craig has not loaded file inspection for this task yet."]);let s=t.selectedFile,o=so(s.path??s.title);return[{text:s.title},{text:`${s.byteLength===null?"size unknown":`${s.byteLength} bytes`} \xB7 ${s.lines.length} lines \xB7 PgUp/PgDn or wheel scroll`,tone:"muted"},{text:""},...Id(s.lines,r,o)]}function Pd(e,t,r){if(!e)return Oe(["No task selected.","","Select or create a task to inspect diffs."]);if(!t||t.error)return Oe(["Diff unavailable.","",t?.error??"Craig has not loaded diff inspection for this task yet."]);let s=t.selectedDiff,o=so(s.path??s.title);return[{text:s.title},{text:`${t.diffPaths.length} changed files \xB7 ${s.lines.length} rows \xB7 PgUp/PgDn or wheel scroll`,tone:"muted"},{text:""},...xd(s.lines,r,o)]}function Oe(e){return e.map(t=>({text:t}))}function Id(e,t,r){let s=Math.max(3,String(e.length).length),o=Math.max(0,Math.min(t,Math.max(0,e.length-1)));return e.slice(o).map((m,y)=>{let n=o+y+1;return{text:`${`${String(n).padStart(s," ")} \u2502 `}${m}`,segments:[{text:String(n).padStart(s," "),style:{fg:de.lineNumber}},{text:" \u2502 ",style:{fg:de.gutter}},...bs(m,r)],tone:"default"}})}function xd(e,t,r){let s=Ed(e),o=Math.max(0,Math.min(t,Math.max(0,s.length-1)));return s.slice(o).map(m=>Ad(m,r))}function Ed(e){let t=[],r=0,s=0;for(let o of e){let m=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(o);if(m){r=Number.parseInt(m[1]??"0",10),s=Number.parseInt(m[2]??"0",10);continue}if(!(o.startsWith("diff --git")||o.startsWith("index ")||o.startsWith("+++ ")||o.startsWith("--- "))&&!(o==="staged"||o==="unstaged"||o==="untracked")){if(o.startsWith("-")&&!o.startsWith("---")){t.push({oldNumber:r,newNumber:null,marker:"-",text:o.slice(1),kind:"delete"}),r+=1;continue}if(o.startsWith("+")&&!o.startsWith("+++")){t.push({oldNumber:null,newNumber:s,marker:"+",text:o.slice(1),kind:"add"}),s+=1;continue}if(o.startsWith(" ")){if(r===0&&s===0)continue;t.push({oldNumber:r,newNumber:s,marker:" ",text:o.slice(1),kind:"context"}),r+=1,s+=1;continue}}}return t}function Ad(e,t){let r=eo(e.oldNumber),s=eo(e.newNumber),o=e.kind==="delete"?r:s,m=e.kind==="delete"?{bg:"2a1111",fallbackFg:de.diffDelete}:e.kind==="add"?{bg:"10210f",fallbackFg:de.diffAdd}:null,y=`${o} \u2502 ${e.text}`,n=m?Ld(bs(e.text,t),m.bg,m.fallbackFg):bs(e.text,t),l=m?{fg:de.lineNumber,bg:m.bg}:{fg:de.lineNumber},f=m?{fg:de.gutter,bg:m.bg}:{fg:de.gutter};return{text:y,segments:[{text:o,style:l},{text:" \u2502 ",style:f},...n],fullBleed:m!==null}}function eo(e){return e===null?" ":String(e).padStart(4," ")}function so(e){let t=Ht.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 bs(e,t){return t==="diff"?Dd(e):t==="markdown"?Md(e):t==="json"?ys(e,/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|-?\b\d+(?:\.\d+)?\b/g):t==="javascript"||t==="css"?ys(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 Dd(e){return e.startsWith("+")&&!e.startsWith("+++")?[{text:e,style:{fg:de.diffAdd}}]:e.startsWith("-")&&!e.startsWith("---")?[{text:e,style:{fg:de.diffDelete}}]:e.startsWith("@@")?[{text:e,style:{fg:de.diffHunk}}]:e.startsWith("diff --git")||e.startsWith("index ")||e.startsWith("+++ ")||e.startsWith("--- ")?[{text:e,style:{fg:de.diffMeta}}]:[{text:e}]}function Ld(e,t,r){return e.map(s=>({text:s.text,style:{...s.style??{fg:r},bg:t}}))}function Md(e){return/^#{1,6}\s/.test(e)?[{text:e,style:{fg:de.markup,bold:!0}}]:ys(e,/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)]+\))/g)}function ys(e,t){let r=[],s=0;for(let o of e.matchAll(t)){let m=o[0],y=o.index??0;y>s&&r.push({text:e.slice(s,y)}),r.push({text:m,style:Od(m)}),s=y+m.length}return s<e.length&&r.push({text:e.slice(s)}),r.length>0?r:[{text:e}]}function Od(e){return e.startsWith("//")||e.startsWith("/*")?{fg:de.comment,italic:!0}:e.startsWith('"')||e.startsWith("'")||e.startsWith("`")?{fg:de.string}:/^-?\d/.test(e)||e==="true"||e==="false"||e==="null"||e==="undefined"?{fg:de.literal}:e.startsWith("**")||e.startsWith("[")||e.startsWith("`")?{fg:de.markup}:{fg:de.keyword}}function Bd(e,t,r){let s=e.selectedProjectTargetId??t?.repoTargets?.[0]?.repoId??null,o=t?.type==="project"&&s?t.repoTargets?.find(n=>n.repoId===s)??null:null,m=t?.type==="project"?no(t.repoTargets??[]):o?.pullRequest??t?.pullRequest??null,y=[$d(e,m),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...y,...Wd(e,t)]}:e.inspectionMode==="files"?{title:"",rows:[...y,...Kd(e,r)]}:{title:"",rows:[...y,...Vd(e,r)]}}function $d(e,t){let r=e.inspectionMode,s=[{label:"CHANGES",active:r==="diff"},{label:"FILES",active:r==="files"},{label:"REVIEW",active:r==="review"}],o=[];for(let l=0;l<s.length;l++){let f=s[l];l>0&&o.push({text:" "}),o.push({text:f.label,style:{fg:f.active?"7aa2f7":"565f89"}})}let m=vs(t),y=Ss(t?.requiredChecks??null);return o.push({text:" "},m,{text:" "},y),{id:"inspection-mode",text:o.map(l=>l.text).join(""),segments:o}}function to(e){return[{text:" "},vs(e),{text:" "},Ss(e.requiredChecks??null)]}function io(e){if(e.type==="project"&&e.repoTargets?.length){let t=no(e.repoTargets);return t?to(t):null}return e.pullRequest.number?to(e.pullRequest):null}function no(e){let t=e.filter(s=>s.status==="ready"),r=t.map(s=>s.pullRequest).filter(s=>!!s.number);return r.length===0?null:{provider:"github",number:-1,url:null,baseBranch:null,headBranch:null,status:Fd(r),mergeable:r.length===t.length&&r.every(s=>s.mergeable),mergeStateStatus:null,requiredChecks:r.flatMap(s=>s.requiredChecks),lastSyncedAt:r.map(s=>s.lastSyncedAt).filter(s=>!!s).sort().at(-1)??null,lastSyncedHeadSha:null}}function Fd(e){return e.some(t=>t.status==="open")?"open":e.every(t=>t.status==="merged")?"merged":e.some(t=>t.status==="closed")?"closed":e[0]?.status??null}function vs(e){return!e||!e.number?{text:In,style:{fg:"565f89"}}:e.status==="merged"?{text:En,style:{fg:"9d7cd8"}}:e.status==="closed"?{text:An,style:{fg:"f7768e"}}:{text:xn,style:{fg:"9ece6a"}}}function Ss(e){return!e||e.length===0?{text:hs,style:{fg:"565f89"}}:e.some(t=>t.status==="failed")?{text:gs,style:{fg:"f7768e"}}:e.every(t=>t.status==="success"||t.status==="skipped")?{text:ps,style:{fg:"9ece6a"}}:{text:fs,style:{fg:"e0af68"}}}function Wd(e,t){return t?t.type==="project"&&t.repoTargets?.length?Nd(e,t):oo("pr",t.title,t.branch,t.pullRequest):[{id:"review-empty",text:"No task selected.",muted:!0}]}var pr=32;function Nd(e,t){let r=[],s=t.repoTargets??[],o=e.selectedProjectTargetId??s[0]?.repoId??null;for(let y of s){let n=o===y.repoId,l=e.focusedRegion==="inspector"&&n,f=y.repoId.startsWith("repo_")?y.repoId.slice(5):y.repoId;if(y.status!=="ready"){let a=y.failureReason?y.failureReason.slice(0,14):y.status,w=pr-a.length-1,c=f.length>w?f.slice(0,w-1)+"\u2026":f,g=pr-c.length-a.length;r.push({id:`project-review:${y.repoId}`,text:c+" ".repeat(Math.max(1,g))+a,selected:n,focused:l,muted:!0})}else{let k=vs(y.pullRequest),a=Ss(y.pullRequest.requiredChecks),w=`${k.text} ${a.text}`,c=pr-w.length-1,g=f.length>c?f.slice(0,c-1)+"\u2026":f,_=pr-g.length-w.length,i=g+" ".repeat(Math.max(1,_));r.push({id:`project-review:${y.repoId}`,text:i+w,selected:n,focused:l,segments:[{text:i},{...k,text:k.text},{text:" "},{...a,text:a.text}]})}}let m=s.find(y=>y.repoId===o)??null;return m?.status==="ready"&&m.pullRequest.number&&(r.push({id:"target-detail-spacer",text:""}),r.push(...oo("target",null,m.branch,m.pullRequest))),r}function oo(e,t,r,s){let o=k=>`${e}-${k}`;if(!s.number)return[{id:o("no-pr"),text:r,muted:!0}];let m=[],y=`#${s.number} ${s.status??"open"}`;if(m.push(s.url?{id:o("pr-number"),text:`${y} Open in GitHub \u2197`,segments:[{text:y},{text:" Open in GitHub \u2197",style:{fg:"7aa2f7",underline:!0},href:s.url}]}:{id:o("pr-number"),text:y}),t){let k=t.length>34?`${t.slice(0,31)}\u2026`:t;m.push({id:o("pr-title"),text:k})}let n=s.baseBranch??"?",l=s.headBranch??r;m.push({id:o("pr-branches"),text:`\u2190 ${n} \u2192 ${l}`,muted:!0});let f=s.mergeable?"merge ready":s.mergeStateStatus?`merge ${s.mergeStateStatus}`:"merge unknown";return m.push({id:o("pr-meta"),text:`${f} \xB7 synced ${jd(s.lastSyncedAt)}`,muted:!0}),m.push({id:o("checks-spacer"),text:""}),m.push({id:o("checks-header"),text:"Checks",muted:!0}),s.requiredChecks.length?m.push(...s.requiredChecks.map(Hd)):m.push({id:o("checks-none"),text:s.number?"No GitHub checks reported.":"No checks \u2014 sync after creating a PR.",muted:!0}),m}function jd(e){if(!e)return"--";let t=Date.now()-new Date(e).getTime(),r=Math.floor(t/1e3);if(r<60)return`${r}s ago`;let s=Math.floor(r/60);if(s<60)return`${s}m ago`;let o=Math.floor(s/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`}function Hd(e){let{icon:t,color:r}=Ud(e.status),s=e.name.length>22?`${e.name.slice(0,21)}\u2026`:e.name;return{id:`pr-check:${e.name}`,text:`${t} ${s.padEnd(22," ")} ${qd(e.status)}`,color:r,muted:!1}}function Ud(e){switch(e){case"success":return{icon:ps,color:"9ece6a"};case"pending":return{icon:fs,color:"e0af68"};case"failed":return{icon:gs,color:"f7768e"};case"skipped":return{icon:hs,color:"565f89"};default:return{icon:"?",color:"565f89"}}}function qd(e){return e==="success"?"passing":e==="failed"?"failing":e}function Kd(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(m=>[m.path,m.status])),s=zd(t.fileRows,e.collapsedFileTreePaths),o=e.selectedFileTreePath??t.selectedFilePath;return s.map(m=>{let y=m.kind==="file"?r.get(m.path):void 0,n=y==="A"?"9ece6a":y==="M"?"e0af68":y==="D"?"f7768e":y==="??"?"565f89":void 0,l=m.kind==="directory"?e.collapsedFileTreePaths.includes(m.path)?Cn:Pn:Rn(m.label),f=m.kind==="file"?Dn(m.label):void 0,k=" ".repeat(m.depth),a=f?{text:l,style:{fg:f}}:{text:l},w=n?{text:m.label,style:{fg:n}}:{text:m.label},c=[{text:k},a,w];return{id:m.path,text:`${k}${l}${m.label}`,selected:m.path===o,focused:m.path===o&&e.focusedRegion==="inspector",muted:m.kind==="directory",segments:c}})}function zd(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let m=1;m<o.length;m+=1)if(r.has(o.slice(0,m).join("/")))return!1;return!0})}function Vd(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:t.filePaths.some(o=>o.startsWith("repo_"))?"No changes in project task worktrees. Edits in the original repos are outside this task.":"No local changes.",muted:!0}];if(Gd(t))return Xd(e,t);let r=[];for(let s of["branch","staged","unstaged","untracked"]){let o=t.diffRows.filter(m=>m.group===s);o.length!==0&&(r.push({id:s,text:s.toUpperCase(),muted:!0}),r.push(...o.map(m=>ao(m,e,t))))}return r}function Gd(e){return e.filePaths.some(t=>t.startsWith("repo_"))||e.diffRows.some(t=>t.path.startsWith("repo_"))}function Xd(e,t){let r=[],s=[...new Set(t.diffRows.map(o=>o.path.split("/")[0]).filter(o=>typeof o=="string"&&o.length>0))].sort();for(let o of s){let m=t.diffRows.filter(n=>n.path.startsWith(`${o}/`)),y=o.startsWith("repo_")?o.slice(5):o;r.push({id:`repo-diff:${o}`,text:y,muted:!0});for(let n of["branch","staged","unstaged","untracked"]){let l=m.filter(f=>f.group===n);l.length!==0&&(r.push({id:`repo-diff:${o}:${n}`,text:` ${n}`,muted:!0}),r.push(...l.map(f=>ao(f,e,t,o.length+1))))}}return r}function ao(e,t,r,s=0){let o=e.additions===null?"-":`+${e.additions}`,m=e.deletions===null?"-":`-${e.deletions}`,y=e.status==="A"||e.group==="untracked"?"9ece6a":e.status==="D"?"f7768e":"e0af68",n=s>0?e.path.slice(s):e.path;return{id:`${e.group}:${e.path}`,text:` ${e.status.padEnd(2," ")} ${n} ${o}/${m}`,selected:e.path===(t.selectedDiffPath??r.selectedDiffPath),focused:e.path===(t.selectedDiffPath??r.selectedDiffPath)&&t.focusedRegion==="inspector",color:y}}function Yd(e,t){return e?t?[{label:"Task",value:t.id},{label:"Repo",value:e.name},{label:"Agent",value:Se(t.runner)},{label:"Branch",value:t.branch},{label:"Status",value:t.status},{label:"Worktree",value:Ht.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 Jd(e){return e.reduce((t,r)=>(t[r.runner]+=1,t),{codex:0,cursor:0,claude:0})}function Qd(e,t){return{name:Se(e).toLowerCase(),health:t>0?1:0,count:String(t)}}var mr={width:120,height:36},Be={leftWidth:42,rightWidth:36,dividerWidth:1,topRailHeight:1};function vt(e,t){return{width:Math.max(e??mr.width,mr.width),height:Math.max(t??mr.height,mr.height)}}import{spawn as bu}from"node:child_process";import{createHash as yu}from"node:crypto";import{createServer as vu,createConnection as bo}from"node:net";import{openSync as Su}from"node:fs";import{mkdir as Tu,readFile as Es,rm as gt,writeFile as Ru}from"node:fs/promises";import{tmpdir as Cu}from"node:os";import St from"node:path";import{createRequire as au}from"node:module";var ho=wa(lo(),1),Zd=1e3,eu=["000000","cd3131","0dbc79","e5e510","2472c8","bc3fbc","11a8cd","e5e5e5","666666","f14c4c","23d18b","f5f543","3b8eea","d670d6","29b8db","ffffff"];function fo(e){return new ho.default.Terminal({allowProposedApi:!0,cols:e.columns,rows:e.rows,scrollback:Zd,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function po(e,t){(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function Rs(e,t){return new Promise(r=>{e.write(t,r)})}function go(e,t=0){let r=e.buffer.active,s=[],o=r.getNullCell(),m=r.baseY+r.cursorY,y=Math.max(0,r.baseY-t);for(let n=0;n<e.rows;n+=1){let l=r.getLine(y+n);if(!l){s.push({segments:[]});continue}let f=[];for(let k=0;k<e.cols;k+=1){let a=l.getCell(k,o);!a||a.getWidth()===0||f.push({text:a.getChars()||" ",style:su(a,y+n===m&&k===r.cursorX)})}s.push({segments:tu(ru(f))})}return s}function tu(e){let t=[];for(let r of e){let s=t.at(-1);if(s&&ou(s.style,r.style)){s.text+=r.text;continue}let o={text:r.text};mo(r.style)||(o.style=r.style),t.push(o)}return t}function ru(e){let t=e.length;for(;t>0;){let r=e[t-1];if(!r||r.text!==" "||!mo(r.style))break;t-=1}return e.slice(0,t)}function su(e,t){let r={},s=uo(e,"fg"),o=uo(e,"bg");return s&&(r.fg=s),o&&(r.bg=o),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 uo(e,t){if(t==="fg"?e.isFgDefault():e.isBgDefault())return;let s=t==="fg"?e.isFgRGB():e.isBgRGB(),o=t==="fg"?e.getFgColor():e.getBgColor();return s?o.toString(16).padStart(6,"0"):eu[o]??iu(o)}function iu(e){if(e>=16&&e<=231){let t=e-16,r=Math.floor(t/36),s=Math.floor(t%36/6),o=t%6;return[r,s,o].map(nu).map(m=>m.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 nu(e){return e===0?0:55+e*40}function ou(e,t){return Ts(e)===Ts(t)}function Ts(e){return e?[e.fg??"",e.bg??"",e.bold?"b":"",e.dim?"d":"",e.italic?"i":"",e.underline?"u":"",e.inverse?"v":""].join("|"):""}function mo(e){return Ts(e)===""}var cu=au(import.meta.url),lu=/^CTRL_([A-Z])$/,du="\x1B[6n",uu="\x1B[c",hu="\x1B[?u",fu={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:""},_r=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,s,o){let m=this.sessions.get(r);if(m)if(m.status!=="running")Cs(m),this.sessions.delete(r);else return this.attachedTabId=r,m.scrollbackLines=0,_o(m,s),this.getViewState(r);let y=this.createSession(t,r,s,o);return this.sessions.set(r,y),this.attachedTabId=r,this.getViewState(r)}write(t){let r=this.getAttachedSession();!r||r.status!=="running"||r.pty.write(t)}writeKey(t){let r=pu(t);r!==null&&this.write(r)}scrollViewport(t){let r=this.getAttachedSession();if(!r||t===0)return;let s=r.terminal.buffer.active.baseY;r.scrollbackLines=Math.max(0,Math.min(s,r.scrollbackLines-t))}resize(t){let r=this.getAttachedSession();r&&_o(r,t)}detach(){this.attachedTabId=null}disposeSession(t){let r=this.sessions.get(t);r&&(Cs(r),this.sessions.delete(t),this.attachedTabId===t&&(this.attachedTabId=null))}disposeAll(){for(let t of this.sessions.values())Cs(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:go(r.terminal,r.scrollbackLines),error:r.error,scrolledBack:r.scrollbackLines>0}:{status:"idle",rows:[],error:null,scrolledBack:!1}}createSession(t,r,s,o){let m=this.spawn??mu().spawn,y=fo(s),n=o??this.resolveSessionSpec(t,r),l=ct(this.env),{executable:f,args:k}=_u(this.shell,n.command,{cwd:n.cwd,env:l}),a=m(f,k,{name:"xterm-256color",cols:s.columns,rows:s.rows,cwd:n.cwd,env:wu(l)}),w={taskId:t,tabId:r,pty:a,terminal:y,status:"running",error:null,disposables:[],scrollbackLines:0};return w.disposables.push(a.onData(c=>{ku(a,c),Rs(w.terminal,c).then(()=>{this.onUpdate?.(w.tabId)})})),w.disposables.push(a.onExit(c=>{w.status="exited",Rs(w.terminal,`\r
90
+ [process exited ${c.exitCode}]`).then(()=>{this.onUpdate?.(w.tabId)})})),w}getAttachedSession(){return this.attachedTabId?this.sessions.get(this.attachedTabId)??null:null}};function pu(e){if(e.length===1)return e;let t=fu[e];if(t!==void 0)return t;let r=lu.exec(e);return r?.[1]?String.fromCharCode(r[1].charCodeAt(0)-64):null}function _o(e,t){gu(e.pty,t),po(e.terminal,t)}function Cs(e){for(let t of e.disposables)t.dispose();e.terminal.dispose(),e.pty.kill()}function gu(e,t){t.columns>0&&t.rows>0&&(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function mu(){return cu("node-pty")}function _u(e,t,r){if(t.length===0)return{executable:e,args:[]};let o=`${[lt(t[0],r),...t.slice(1)].map(wo).join(" ")}; exec ${wo(e)} -l`;return{executable:e,args:["-lc",o]}}function wo(e){return`'${e.replaceAll("'","'\\''")}'`}function wu(e){let t={};for(let[r,s]of Object.entries(e))typeof s=="string"&&(t[r]=s);return t.TERM=t.TERM??"xterm-256color",t}function ku(e,t){for(let r=0;r<Ps(t,du);r+=1)e.write("\x1B[1;1R");for(let r=0;r<Ps(t,uu);r+=1)e.write("\x1B[?1;2c");for(let r=0;r<Ps(t,hu);r+=1)e.write("\x1B[?0u")}function Ps(e,t){if(t.length===0)return 0;let r=0,s=e.indexOf(t);for(;s!==-1;)r+=1,s=e.indexOf(t,s+t.length);return r}var As=3;async function yo(e){let t=Ds(e.paths);await Pu(t,e.paths,e.spawnDaemon);let r=await Po(t.socketPath),s=new Is(r,e);return await s.ready(),s}async function vo(e,t={}){let r=Ds(e);await Tu(e.runtimeDir,{recursive:!0}),await gt(r.socketPath,{force:!0});let s=new xs(e,t),o=vu(m=>s.handleConnection(m));await Lu(o,r.socketPath),await Ru(r.pidPath,String(process.pid),"utf8"),await new Promise(m=>{let y=()=>{s.closeClients(),o.close(()=>m())};s.onShutdown=y,process.once("SIGTERM",y),process.once("SIGINT",y)}),await gt(r.socketPath,{force:!0}),await gt(r.pidPath,{force:!0}),s.disposeAll()}async function So(e){let t=Ds(e);return await kr(t.socketPath)?(await Ro(t.socketPath),!0):!1}var Is=class{constructor(t,r){this.socket=t;this.options=r,t.setEncoding("utf8"),t.on("data",s=>this.handleData(String(s))),t.on("error",s=>this.rejectAll(s instanceof Error?s:new Error(String(s)))),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!==As)throw new Error("Craig PTY daemon protocol mismatch.")}async ensureSession(t,r,s){let o=await this.send({type:"ensureSession",taskId:t,tabId:r,size:s,spec:this.options.resolveSessionSpec?.(t,r)??{cwd:this.options.workspaceRoot,command:[]}});this.attachedTabId=r;let m=o.view??{status:"idle",rows:[],error:null};return this.viewCache.set(r,m),m}async hydrateSessions(t){for(let r of t)try{let s=await this.send({type:"hydrateSession",tabId:r});s.view&&this.viewCache.set(r,s.view)}catch(s){let o=s instanceof Error?s.message:String(s);this.viewCache.set(r,{status:"failed",rows:[],error:o})}}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 s={...t,id:r},o=new Promise((y,n)=>{this.pending.set(r,{resolve:y,reject:n})});if(this.socket.destroyed)throw this.pending.delete(r),new Error("Craig PTY daemon connection is closed.");this.socket.write(`${JSON.stringify(s)}
91
91
  `);let m=await o;if(!m.ok)throw new Error(m.error);return m}handleData(t){this.buffer+=t;let r=this.buffer.indexOf(`
92
92
  `);for(;r!==-1;){let s=this.buffer.slice(0,r);this.buffer=this.buffer.slice(r+1),this.handleMessage(s),r=this.buffer.indexOf(`
93
- `)}}handleMessage(t){if(t.trim().length===0)return;let r;try{r=JSON.parse(t)}catch{return}if("id"in r){let s=this.pending.get(r.id);if(!s)return;this.pending.delete(r.id),s.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()}},Ps=class{onShutdown=null;clients=new Set;runtime;attachedTabId=null;constructor(t,r){this.runtime=new _r({...r,workspaceRoot:t.workspaceRoot,onUpdate:s=>this.broadcastUpdate(s)})}handleConnection(t){let r="";this.clients.add(t),t.setEncoding("utf8"),t.on("data",s=>{r+=String(s);let o=r.indexOf(`
93
+ `)}}handleMessage(t){if(t.trim().length===0)return;let r;try{r=JSON.parse(t)}catch{return}if("id"in r){let s=this.pending.get(r.id);if(!s)return;this.pending.delete(r.id),s.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()}},xs=class{onShutdown=null;clients=new Set;runtime;attachedTabId=null;constructor(t,r){this.runtime=new _r({...r,workspaceRoot:t.workspaceRoot,onUpdate:s=>this.broadcastUpdate(s)})}handleConnection(t){let r="";this.clients.add(t),t.setEncoding("utf8"),t.on("data",s=>{r+=String(s);let o=r.indexOf(`
94
94
  `);for(;o!==-1;){let m=r.slice(0,o);r=r.slice(o+1),this.handleLine(t,m),o=r.indexOf(`
95
- `)}}),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 s;try{s=JSON.parse(r)}catch{wr(t,{id:-1,ok:!1,error:"Malformed daemon request."});return}try{let o=this.handleRequest(s);wr(t,{id:s.id,ok:!0,...s.type==="ping"?{protocolVersion:xs}:{},...o?{view:o}:{}})}catch(o){let m=o instanceof Error?o.message:String(o);wr(t,{id:s.id,ok:!1,error:m})}}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 Iu(t)}}broadcastUpdate(t){let r=this.runtime.getViewState(t);for(let s of this.clients)wr(s,{type:"update",tabId:t,view:r})}};function Es(e){let t=gu("sha256").update(e.workspaceRoot).digest("hex").slice(0,16);return{socketPath:St.join(bu(),`craig-${t}.sock`),pidPath:St.join(e.runtimeDir,"pty-daemon.pid")}}async function yu(e,t,r){if(await vu(e.socketPath,1e3))return;await kr(e.socketPath)&&(await So(e.socketPath),await _o(e.socketPath,1e3)),await kr(e.socketPath)&&(await Ru(e),await _o(e.socketPath,1e3)),await Tu(e);let s=t.workspaceRoot;if(r)r(s);else{let{command:y,args:n}=Su(s),l=_u(St.join(t.runtimeDir,"pty-daemon.log"),"a");pu(y,n,{cwd:s,detached:!0,stdio:["ignore",l,l],env:process.env}).unref()}let o=Date.now();for(;Date.now()-o<5e3;){if(await vo(e.socketPath))return;await As(50)}let m=await Is(St.join(t.runtimeDir,"pty-daemon.log"),"utf8").catch(()=>"");throw new Error(`Craig PTY daemon did not start.${m?`
96
- ${m.slice(-2e3)}`:""}`)}async function vo(e){let t=await Cu(e).catch(()=>null);return t?.ok===!0&&t.protocolVersion===xs}async function vu(e,t){let r=Date.now();for(;Date.now()-r<t;){if(await vo(e))return!0;await As(50)}return!1}function Su(e){let t=process.argv[1];if(t?.endsWith(".ts"))return{command:St.resolve(St.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 Tu(e){let t=await Is(e.pidPath,"utf8").catch(()=>null);if(t){let r=Number(t.trim());if(Number.isInteger(r)&&r>0&&Co(r))return}await gt(e.socketPath,{force:!0}),await gt(e.pidPath,{force:!0})}async function kr(e){let t=await Ro(e).catch(()=>null);return t?(t.end(),!0):!1}async function So(e){await To(e,{id:1,type:"shutdown"}).catch(()=>null)}async function Ru(e){let t=await Is(e.pidPath,"utf8").catch(()=>null),r=Number(t?.trim());if(!Number.isInteger(r)||r<=0||!Co(r)){await gt(e.socketPath,{force:!0});return}try{process.kill(r,"SIGTERM")}catch{await gt(e.socketPath,{force:!0})}}async function Cu(e){return To(e,{id:1,type:"ping"})}function To(e,t){return new Promise((r,s)=>{let o=wo(e),m="",y=setTimeout(()=>{o.destroy(),s(new Error("Craig PTY daemon request timed out."))},500),n=()=>clearTimeout(y);o.setEncoding("utf8"),o.once("connect",()=>o.write(`${JSON.stringify(t)}
95
+ `)}}),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 s;try{s=JSON.parse(r)}catch{wr(t,{id:-1,ok:!1,error:"Malformed daemon request."});return}try{let o=this.handleRequest(s);wr(t,{id:s.id,ok:!0,...s.type==="ping"?{protocolVersion:As}:{},...o?{view:o}:{}})}catch(o){let m=o instanceof Error?o.message:String(o);wr(t,{id:s.id,ok:!1,error:m})}}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 Mu(t)}}broadcastUpdate(t){let r=this.runtime.getViewState(t);for(let s of this.clients)wr(s,{type:"update",tabId:t,view:r})}};function Ds(e){let t=yu("sha256").update(e.workspaceRoot).digest("hex").slice(0,16);return{socketPath:St.join(Cu(),`craig-${t}.sock`),pidPath:St.join(e.runtimeDir,"pty-daemon.pid")}}async function Pu(e,t,r){if(await Iu(e.socketPath,1e3))return;await kr(e.socketPath)&&(await Ro(e.socketPath),await ko(e.socketPath,1e3)),await kr(e.socketPath)&&(await Au(e),await ko(e.socketPath,1e3)),await Eu(e);let s=t.workspaceRoot;if(r)r(s);else{let{command:y,args:n}=xu(s),l=Su(St.join(t.runtimeDir,"pty-daemon.log"),"a");bu(y,n,{cwd:s,detached:!0,stdio:["ignore",l,l],env:process.env}).unref()}let o=Date.now();for(;Date.now()-o<5e3;){if(await To(e.socketPath))return;await Ls(50)}let m=await Es(St.join(t.runtimeDir,"pty-daemon.log"),"utf8").catch(()=>"");throw new Error(`Craig PTY daemon did not start.${m?`
96
+ ${m.slice(-2e3)}`:""}`)}async function To(e){let t=await Du(e).catch(()=>null);return t?.ok===!0&&t.protocolVersion===As}async function Iu(e,t){let r=Date.now();for(;Date.now()-r<t;){if(await To(e))return!0;await Ls(50)}return!1}function xu(e){let t=process.argv[1];if(t?.endsWith(".ts"))return{command:St.resolve(St.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 Eu(e){let t=await Es(e.pidPath,"utf8").catch(()=>null);if(t){let r=Number(t.trim());if(Number.isInteger(r)&&r>0&&Io(r))return}await gt(e.socketPath,{force:!0}),await gt(e.pidPath,{force:!0})}async function kr(e){let t=await Po(e).catch(()=>null);return t?(t.end(),!0):!1}async function Ro(e){await Co(e,{id:1,type:"shutdown"}).catch(()=>null)}async function Au(e){let t=await Es(e.pidPath,"utf8").catch(()=>null),r=Number(t?.trim());if(!Number.isInteger(r)||r<=0||!Io(r)){await gt(e.socketPath,{force:!0});return}try{process.kill(r,"SIGTERM")}catch{await gt(e.socketPath,{force:!0})}}async function Du(e){return Co(e,{id:1,type:"ping"})}function Co(e,t){return new Promise((r,s)=>{let o=bo(e),m="",y=setTimeout(()=>{o.destroy(),s(new Error("Craig PTY daemon request timed out."))},500),n=()=>clearTimeout(y);o.setEncoding("utf8"),o.once("connect",()=>o.write(`${JSON.stringify(t)}
97
97
  `)),o.once("error",l=>{n(),s(l)}),o.on("data",l=>{m+=String(l);let f=m.indexOf(`
98
- `);if(f===-1)return;let k=m.slice(0,f);n(),o.end();try{r(JSON.parse(k))}catch(a){s(a instanceof Error?a:new Error(String(a)))}}),o.once("close",()=>n())})}async function _o(e,t){let r=Date.now();for(;Date.now()-r<t;){if(!await kr(e))return;await As(50)}}function Ro(e){return new Promise((t,r)=>{let s=wo(e);s.once("connect",()=>t(s)),s.once("error",r)})}function Pu(e,t){return new Promise((r,s)=>{e.once("error",s),e.listen(t,r)})}function wr(e,t){if(!e.destroyed)try{e.write(`${JSON.stringify(t)}
99
- `)}catch{}}function Co(e){try{return process.kill(e,0),!0}catch{return!1}}function As(e){return new Promise(t=>setTimeout(t,e))}function Iu(e){throw new Error(`Unhandled daemon request: ${JSON.stringify(e)}`)}var xu=[" \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 Ds(){return[...xu]}var Eu=["Start","Options","Exit"],Au=["Resume","Options","Exit"],vr=2,Sr=2,Tr=2,Du=new RegExp("\x1B\\[[0-?]*[ -/]*[@-~]","g"),Lu=new RegExp("\x1B\\[(?:0)?m","g"),Mu=new RegExp("\x1B\\]8;;[^\x1B]*\x1B\\\\","g"),Ou=/https?:\/\/[^\s<>"']+/g,Ls="\x1B[0m",xo="\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 Eo(e,t={}){return Os(e,{subtitle:"crAIg is that you?",menuItems:Eu,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Ao(e,t={}){return Os(e,{subtitle:"Control mode is paused.",menuItems:Au,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}var br=[" 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."],Bu=["Help"];function Ms(e,t={}){return Os(e,{subtitle:t.optionsSubtitle??"Configuration",menuItems:t.optionsMenuItems??Bu,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Do(e,t={}){let r=t.color??!0,s=se.overlay,o=new Array(e.height).fill(ue(" ".repeat(e.width),r,s)),m=Ds(),y=Math.max(1,Math.floor((e.height-m.length-2-br.length)/2));for(let k=0;k<m.length&&!(y+k>=e.height);k+=1)o[y+k]=ue($o(m[k]??"",e.width),r,se.overlayLogo);let n=Math.max(...br.map(k=>k.length)),l=Math.max(0,Math.floor((e.width-n)/2)),f=y+m.length+2;for(let k=0;k<br.length;k+=1){let a=f+k;if(a>=e.height)break;let w=br[k]??"";o[a]=ue(rt(" ".repeat(l)+w,e.width),r,s)}return o.join(`
100
- `)}function Lo(e,t,r={}){let s=r.color??!0,o=Be.leftWidth,m=Be.rightWidth,y=Be.dividerWidth,n=r.centerOnly??!1,l=n?e.width:e.width-o-m-y*2,f=e.height-Be.topRailHeight-1,k=`CRAIG | ${t.topRail.workspacePath} | ${t.topRail.agent} ${Ho(`\u25CF ${t.topRail.liveLabel}`,s,se.rail)}`,a=ue(rt(k,e.width),s,se.rail),w=$u(t,o-vr-Sr,f,s),c=Fu(t,l,f,s),g=Nu(t,m,f,s),_=[];for(let p=0;p<f;p+=1){if(n){_.push(yr(c[p]??He(),l,s,"center"));continue}let h=yr(w[p]??He(),o,s,"left"),d=ue("\u2502",s,se.divider),u=yr(c[p]??He(),l,s,"center"),b=ue("\u2502",s,se.divider),S=yr(g[p]??He(),m,s,"right");_.push(`${h}${d}${u}${b}${S}`)}let i=ue(rt(` ${t.footerText}`,e.width),s,se.panelMuted);return[a,..._,i].join(`
101
- `)}function Os(e,t){let r=new Array(e.height).fill(ue(" ".repeat(e.width),t.color,se.overlay)),s=Ds(),o=Math.max(...t.menuItems.map(f=>f.length)),m=t.menuItems.map((f,k)=>`${k===t.menuIndex?">":" "} ${f.padEnd(o)}`),y=t.optionsMessage?["",t.optionsMessage]:[],n=[...s,"",t.subtitle,"",...m,...y],l=Math.max(1,Math.floor((e.height-n.length)/2));for(let f=0;f<n.length;f+=1){let k=$o(n[f]??"",e.width);if(f<s.length){r[l+f]=ue(k,t.color,se.overlayLogo);continue}if(f===s.length+1){r[l+f]=ue(k,t.color,se.overlaySubtitle);continue}let a=f-(s.length+3),c=a>=0&&a<t.menuItems.length&&a===t.menuIndex?se.overlayMenuSelected:se.overlay;r[l+f]=ue(k,t.color,c)}return r.join(`
102
- `)}function $u(e,t,r,s){let o=Uu(e.runners),m=1,y=e.leftTree.map(l=>Hu(l,t,s));return[...Rr(y,r-m),o]}function Fu(e,t,r,s){let o=e.tabs.find(a=>a.active)?.label??"AGENT",m=rh(e.tabs),y=`${" ".repeat(m)}${Cr("\u2500".repeat(o.length+1),s,se.panelMuted)}`,n=[`${Cr(e.centerHeader.tabLabel,s,se.panelBg)} ${e.centerHeader.taskId}`,e.centerHeader.repo].join(" \xB7 "),l=e.tabs.find(a=>a.active)?.id??"agent",f=e.centerHeader.tabLabel==="BROWSER"||!Vn(l)?e.centerTranscript.map(a=>({...a})):Wu(e),k=[{text:qu(e.tabs,s)},{text:y,tone:"muted"},{text:n},He(),...f];return Rr(k,r)}function Wu(e){if(e.terminal.error)return[{text:"terminal \u25B8 PTY unavailable"},He(),{text:e.terminal.error},He(),{text:"Fix the native dependency setup, then re-enter terminal mode."}];let t=e.tabs.find(s=>s.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(s=>({text:jo(s.segments),segments:s.segments,fullBleed:!0}))}function Nu(e,t,r,s){let o=e.rightInspection?ju(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):Rr([{text:Mo("CONTEXT",e.focusedRegion==="tasks",s,se.panelBg)},He(),...e.rightContext.map(m=>Ku(m,s)),...e.actionMessage?[He(),{text:e.actionMessage}]:[]],r);return Rr(o,r)}function ju(e,t){let r=e.slice(0,2),s=e.slice(2),o=Math.max(0,t-r.length),m=s.findIndex(n=>n.focused||n.selected),y=m===-1?0:ih(m-Math.floor(o/2),0,Math.max(0,s.length-o));return[...r.map(n=>Po(n)),...s.slice(y,y+o).map(n=>Po(n))]}function Po(e){let t=e.focused?"\u25B8 ":e.selected?"\u2022 ":" ",r=e.focused||e.selected?"selected":e.muted?"muted":"default",s=`${t}${e.text}`;if(e.segments)return{text:s,segments:[{text:t},...e.segments],tone:r};if(e.accentPrefix&&!e.muted){let o=e.text.indexOf(" "),m=o===-1?e.text:e.text.slice(0,o),y=o===-1?"":e.text.slice(o);return{text:s,segments:[{text:t},{text:m,style:{fg:"7aa2f7"}},{text:y}],tone:r}}return e.color?{text:s,segments:[{text:t},{text:e.text,style:{fg:e.color}}],tone:r}:{text:s,tone:r}}function Hu(e,t,r){let s=" ".repeat(e.indent??0),o=e.accentDot?" \u25CF":"",m=e.status?` ${e.status}`:"",y=e.accentDot?` ${Ho("\u25CF",r,e.selected?se.panelSelected:se.panelBg)}`:"",n=e.prBadge?e.prBadge.reduce((c,g)=>c+Ge(g.text),0):0,l=t-Ge(m)-Ge(o)-n,f=e.focused&&!e.selected?Mo(e.text,!0,r,se.panelBg):e.text,k=rt(`${s}${f}`,Math.max(0,l)),a=e.selected?"selected":e.muted?"muted":"default";if(e.prBadge){let c=[{text:`${k}${m}${y}`},...e.prBadge];return{text:`${k}${m}${e.prBadge.map(_=>_.text).join("")}`,segments:c,tone:a}}return{text:`${k}${m}${y}`,tone:a}}function Uu(e){let t=e.map(s=>{let o=s.health>=1,m=parseInt(s.count,10),y=m>1?` (${m})`:"";return{text:`${o?"\u25CF":"\u25CB"} ${s.name}${y}`,active:o}}),r=[];for(let s=0;s<t.length;s++){let o=t[s];s>0&&r.push({text:" "}),o.active?r.push({text:o.text,style:{fg:se.success.fg}}):r.push({text:o.text,style:{fg:se.panelMuted.fg}})}return{text:t.map(s=>s.text).join(" "),segments:r,tone:"muted"}}function qu(e,t){return e.map(r=>r.active?Cr(r.label,t,se.panelBg):Uo(r.label,t,se.panelBg)).join(" ")}function Ku(e,t){return{text:`${e.label.padEnd(8," ")} ${e.mutedValue?Uo(e.value,t,se.panelBg):e.value}`}}function Mo(e,t,r,s){return t?Cr(e,r,s):e}function yr(e,t,r,s){let o=zu(s,e.tone??"default"),m=Vu(e,r,o);if(s==="left"){if(e.fullBleed)return ue(rt(m,t),r,o);let n=t-vr-Sr;if(e.rightAlign){let f=Ge(m),k=Math.max(0,n-f),a=`${" ".repeat(vr)}${" ".repeat(k)}${m}${" ".repeat(Sr)}`;return ue(a,r,o)}let l=`${" ".repeat(vr)}${rt(m,n)}${" ".repeat(Sr)}`;return ue(l,r,o)}return s==="center"&&e.fullBleed?Gu(e,t,r,o):ue(rt(` ${m}`,t),r,o)}function zu(e,t){return t==="selected"||t==="focused"?se.panelSelected:t==="muted"?se.panelMuted:se.panelBg}function Rr(e,t){let r=e.slice(0,t);for(;r.length<t;)r.push(He());return r}function He(){return{text:""}}function Vu(e,t,r){return e.segments?e.segments.map(s=>Oo(s,t,r)).join(""):e.text}function Gu(e,t,r,s){let o=" ".repeat(Tr),m=Math.max(0,t-Tr*2);if(!e.segments)return ue(`${o}${rt(e.text,m)}${o}`,r,s);let y=Ju(e.segments,m),n=`${o}${y.map(l=>Oo(l,r,s)).join("")}${o}`;return ue(n,r,s)}function Oo(e,t,r){let s=e.href?`${Bo(e.href)}${e.text}${xo}`:Xu(e.text);return!t||!e.style?s:`${Ut(eh(e.style,r))}${th(e.style)}${s}${Ls}${Ut(r)}`}function Xu(e){return e.replace(Ou,t=>{let[r,s]=Yu(t);return`${Bo(r)}${r}${xo}${s}`})}function Yu(e){let t=e.length;for(;t>0&&".,;:!?)]}".includes(e[t-1]??"");)t-=1;return[e.slice(0,t),e.slice(t)]}function Bo(e){return`\x1B]8;;${e}\x1B\\`}function Ju(e,t){let r=Qu(e,t);return Zu(r,t)}function Qu(e,t){let r=[],s=t;for(let o of e){if(s<=0)break;let m=Ge(o.text);if(m<=s){r.push(o),s-=m;continue}let y=Fo(o.text,s);y.length>0&&r.push({...o,text:y}),s=0}return r}function Zu(e,t){let r=Ge(jo(e));if(r>=t)return e;let s=e.at(-1)?.style;return s?.bg?[...e,{text:" ".repeat(t-r),style:s}]:[...e,{text:" ".repeat(t-r)}]}function eh(e,t){let r=e.inverse?e.bg??t.bg:e.fg,s=e.inverse?e.fg??t.fg:e.bg,o={},m=r??t.fg,y=s??t.bg;return m&&(o.fg=m),y&&(o.bg=y),o}function th(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 rh(e){let t=0;for(let r of e){if(r.active)return t;t+=r.label.length+3}return 0}function $o(e,t){let r=Math.max(0,t-Ge(e)),s=Math.floor(r/2),o=r-s;return`${" ".repeat(s)}${e}${" ".repeat(o)}`}function rt(e,t){let r=Ge(e);return r>=t?sh(e,t):e+" ".repeat(t-r)}function sh(e,t){if(t<=0)return"";if(Ge(e)<=t)return e;let r=No(e);return Fo(r,Math.max(0,t-1))+"\u2026"}function Ge(e){let t=0;for(let r of Array.from(No(e)))t+=Wo(r);return t}function Fo(e,t){let r="",s=0;for(let o of Array.from(e)){let m=Wo(o);if(s+m>t)break;r+=o,s+=m}return r}function Wo(e){let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||t>=768&&t<=879||t>=6832&&t<=6911||t>=7616&&t<=7679||t>=8400&&t<=8447||t>=65024&&t<=65039?0:t>=4352&&(t<=4447||t===9001||t===9002||t>=11904&&t<=42191&&t!==12351||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65135||t>=65280&&t<=65376||t>=65504&&t<=65510||t>=127744&&t<=129791||t>=131072&&t<=262141)?2:1}function ih(e,t,r){return Math.min(Math.max(e,t),r)}function No(e){return e.replace(Mu,"").replace(Du,"")}function jo(e){return e.map(t=>t.text).join("")}function ue(e,t,r){if(!t)return e;let s=Ut(r),o=e.replace(Lu,`${Ls}${s}`);return`${s}${o}${Ls}`}function Ut(e){let t=[];return e.fg&&t.push(`38;2;${Io(e.fg).join(";")}`),e.bg&&t.push(`48;2;${Io(e.bg).join(";")}`),`\x1B[${t.join(";")}m`}function Io(e){return[Number.parseInt(e.slice(0,2),16),Number.parseInt(e.slice(2,4),16),Number.parseInt(e.slice(4,6),16)]}function Ho(e,t,r){return Bs(e,t,se.success.fg,r)}function Cr(e,t,r){return Bs(e,t,se.accent.fg,r)}function Uo(e,t,r){return Bs(e,t,se.mutedfg.fg,r)}function Bs(e,t,r,s){if(!t)return e;let o=s.bg?{fg:r,bg:s.bg}:{fg:r};return`${Ut(o)}${e}${Ut(s)}`}Ae();var $s=["Runners","Help"];function Fs(e,t){return ce.map(r=>{let s=be(r),o=e.runners?.[r]?.enabled!==!1,m=e.runners?.[r]?.path?.trim(),y=t.pathEdit?.runner===r?`${t.pathEdit.value}_`:m&&m.length>0?m:`default (${s.executable})`;return`${s.displayName} ${o?"enabled":"disabled"} ${y}`})}function Ko(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 zo(e,t){return t==="UP"||t==="k"?{kind:"render",menuIndex:Math.max(0,e-1)}:t==="DOWN"||t==="j"?{kind:"render",menuIndex:Math.min($s.length-1,e+1)}:t==="ESCAPE"?{kind:"back"}:Ws(t)?e===0?{kind:"runners"}:{kind:"help"}:{kind:"noop",menuIndex:e}}function Vo(e,t,r,s){if(e.pathEdit)return nh({...e,pathEdit:e.pathEdit},t,r);let o=Fs(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(o-1,e.menuIndex+1),message:null}};if(r==="ESCAPE")return{kind:"back",state:e};if(r==="e"){let n=ce[e.menuIndex]??"codex";return{kind:"render",state:{...e,message:null,pathEdit:{runner:n,value:t.runners?.[n]?.path??""}}}}if(!Ws(r))return{kind:"noop",state:e};let m=ce[e.menuIndex]??"codex",y=t.runners?.[m]?.enabled!==!1;return y&&s.length<=1?{kind:"render",state:{...e,message:"At least one runner must stay enabled."}}:{kind:"save",config:oh(t,m,!y),state:{...e,message:`${be(m).displayName} ${y?"disabled":"enabled"}.`}}}function nh(e,t,r){if(r==="ESCAPE")return{kind:"render",state:qo({...e,message:null})};if(r==="BACKSPACE")return{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:e.pathEdit.value.slice(0,-1)}}};if(Ws(r)){let s=e.pathEdit.runner,o=e.pathEdit.value.trim();return{kind:"save",config:ah(t,s,o.length>0?o:null),state:qo({...e,message:o.length>0?`${be(s).displayName} executable saved.`:`${be(s).displayName} executable reset to default.`})}}return ch(r)?{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:`${e.pathEdit.value}${r}`}}}:{kind:"noop",state:e}}function oh(e,t,r){return{...e,runners:{...e.runners??{},[t]:{...e.runners?.[t]??{},enabled:r}}}}function ah(e,t,r){let s={...e.runners?.[t]??{},...r?{path:r}:{}};return r||delete s.path,{...e,runners:{...e.runners??{},[t]:s}}}function qo(e){let t={...e};return delete t.pathEdit,t}function Ws(e){return e==="ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
103
- `}function ch(e){return e.length===1&&e>=" "&&e!=="\x7F"}var hh=lh(import.meta.url),fh=hh("terminal-kit"),ph=fh.terminal;async function Yo(e={}){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("Craig terminal shell requires a TTY.");let t=e.workspaceRoot??process.cwd(),r=Ke(t);await yt(t);let s=await ye(r),o=mt(s),m=e.uiStateFile?await De({uiStateFile:e.uiStateFile}):null,y=Promise.resolve(),n=Promise.resolve(),l=await qt(t,void 0,o),f=hr(Hn(m,s),l);l=await qt(t,f,o);let k=()=>{},a={workspaceRoot:t,onUpdate:()=>k(),resolveSessionSpec:(g,_)=>wh(l,_,t)},w=e.ptyRuntime??await ko({...a,paths:r}),c=g=>{if(!e.uiStateFile)return;m=Un(m,g);let _=m;y=y.then(()=>Pe({uiStateFile:e.uiStateFile},_),()=>Pe({uiStateFile:e.uiStateFile},_)),y.catch(()=>{})};return new Promise(g=>{let _=e.terminal??ph,i={mode:"overlay",variant:"boot",menuIndex:0,optionsMessage:null,shell:hr(f,l)},p=!1,h=!1,d=null,u=0,b=0,S=null,P=null,E=null,H=null,$=!1,D=0,x=!0,A=null,L=()=>{},z=w;k=()=>{i.mode==="main"&&(i={mode:"main",shell:X(i.shell)},E||(E=setTimeout(()=>{E=null,i.mode==="main"&&L()},50)))};function X(B){return jt(B,z.getViewState(B.selectedPtyTabId))}function W(B){return X(gh(B,l))}function q(B){return l.tasks.find(M=>M.id===B.selectedTaskId)??null}async function v(){await z.hydrateSessions?.(l.tasks.flatMap(B=>B.ptyTabs.map(M=>M.id)))}function C(){v().catch(()=>{}).then(()=>{i.mode==="main"&&(i={mode:"main",shell:X(i.shell)},L())})}function T(B){let M=n.then(B,B);return n=M.then(()=>{},()=>{}),M}function R(B){let M=q(B),O=l.inspection,N=O&&O.taskId===M?.id?O:null,K=mh(N?.fileRows??[],B.collapsedFileTreePaths);return{leftItemIds:_h(l),centerTabIds:Xn(M,B),ptyTabIds:M?.ptyTabs.map(ee=>ee.id)??[],filePathIds:N?.filePaths??[],fileTreeRowIds:K.map(ee=>ee.path),fileTreeFileIds:K.filter(ee=>ee.kind==="file").map(ee=>ee.path),fileTreeDirectoryIds:K.filter(ee=>ee.kind==="directory").map(ee=>ee.path),diffPathIds:N?.diffPaths??[],diffPathRanges:[],fileLineCount:N?.selectedFile.lines.length??0,diffLineCount:N?.selectedDiff.lines.length??0,pageRows:Math.max(5,vt(_.width,_.height).height-Be.topRailHeight-9),enabledRunnerIds:o,projectTargetIds:M?.repoTargets?.map(ee=>ee.repoId)??[]}}async function F(B){await Ys(r,B),s=B,o=mt(s),l={...l,enabledRunnerIds:o},i.mode==="main"?i={mode:"main",shell:W({...i.shell,selectedRunner:o.includes(i.shell.selectedRunner)?i.shell.selectedRunner:it(s)})}:i={...i,shell:W({...i.shell,selectedRunner:o.includes(i.shell.selectedRunner)?i.shell.selectedRunner:it(s)})}}async function j(B){let M=B.selectedTaskId;M&&await T(async()=>{let O=await Ce(r,M);!O.ptyTabs.some(N=>N.id===B.activeTab)||O.selectedPtyTabId===B.activeTab||await re(r,{...O,selectedPtyTabId:B.activeTab})})}async function U(){let B=(i.mode==="main",i.shell);l=await qt(t,B,o),i.mode==="main"?i={mode:"main",shell:W(i.shell)}:i={...i,shell:W(i.shell)}}async function V(B){let M=++D,O=Jo(l.tasks,B),N=l.inspection,K;if(O&&N?.taskId===O.id){let ee={selectedFilePath:B.selectedFilePath,selectedDiffPath:B.selectedDiffPath},ge=await pn(O,N,ee);if(M!==D)return;K={...l,inspection:ge}}else if(K=await qt(t,B,o),M!==D)return;l=K,i.mode==="main"&&(i={mode:"main",shell:W(i.shell)},c(i.shell),L())}async function te(B){let M=await Ih(B);i.mode==="main"&&(i={mode:"main",shell:W({...i.shell,workspaceBrowser:M,activeTab:i.shell.selectedPtyTabId??i.shell.activeTab,actionMessage:null})},L())}async function I(B){try{let M=W(B),O=q(M),N=M.selectedPtyTabId;if(O&&M.focusedRegion==="tasks"){let ge=O.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ge?N=ge.id:(O=await Us(O),await U(),N=O.selectedPtyTabId)}O&&!N&&(O=await Us(O),await U(),N=O.selectedPtyTabId);let K=W({...M,activeTab:N??M.activeTab,selectedPtyTabId:N});if(!K.selectedTaskId||!N){i={mode:"main",shell:K},L();return}i={mode:"main",shell:jt({...K,inputMode:"terminal"},z.getViewState(N))},c(i.shell);let ee=await z.ensureSession(K.selectedTaskId,N,Ns(vt(_.width,_.height)));h=js(N),d=null,i={mode:"main",shell:jt({...K,inputMode:"terminal"},ee)},c(i.shell)}catch(M){let O=M instanceof Error?M.message:"Failed to start PTY.";B.selectedTaskId&&B.selectedPtyTabId&&js(B.selectedPtyTabId)&&(await Q(B.selectedTaskId,O).catch(()=>{}),await U().catch(()=>{})),i={mode:"main",shell:Kn(W(B),O)},c(i.shell)}L()}async function Q(B,M){await T(async()=>{let O=await Ce(r,B);await re(r,{...O,status:O.status==="running"?"draft":O.status,runnerSession:{...O.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:M})})}async function Y(B,M,O){let N=W(B);if(!N.selectedTaskId)throw new Error("Select a task before creating a tab.");let K=await T(async()=>{let ee=await Ce(r,N.selectedTaskId),ge=M??bh(ee,N.activeTab,N.preferredPtyTabKind),Ee=Go(ee,ge,O??void 0,s),Tt={...ee,ptyTabs:[...ee.ptyTabs,Ee],selectedPtyTabId:Ee.id};return await re(r,Tt),Tt});return await U(),W({...N,activeTab:K.selectedPtyTabId??N.activeTab,selectedPtyTabId:K.selectedPtyTabId,preferredPtyTabKind:K.ptyTabs.at(-1)?.kind??N.preferredPtyTabKind,focusedRegion:"center",actionMessage:`Created tab: ${K.ptyTabs.at(-1)?.title??"tab"}`})}async function Z(B){let M=W(B);if(!M.selectedTaskId)throw new Error("Select a task before closing a tab.");let{closedTab:O,nextSelectedTab:N}=await T(async()=>{let K=await Ce(r,M.selectedTaskId),ee=K.ptyTabs.findIndex(Ar=>Ar.id===M.activeTab);if(ee===-1)throw new Error("Only PTY tabs can be closed.");let ge=K.ptyTabs[ee],Ee=K.ptyTabs.filter(Ar=>Ar.id!==ge.id),Tt=Ee[Math.min(ee,Ee.length-1)]??Ee[ee-1]??null;return await re(r,{...K,ptyTabs:Ee,selectedPtyTabId:Tt?.id??null}),{closedTab:ge,nextSelectedTab:Tt}});return z.disposeSession(O.id),await U(),W({...M,activeTab:N?.id??(M.openInspectionKind?"inspection":M.activeTab),selectedPtyTabId:N?.id??null,focusedRegion:"center",actionMessage:`Closed tab: ${O.title}`})}async function we(B){let M=W(B);if(!M.selectedTaskId)throw new Error("Select a task before creating or syncing a PR.");let O=await Lt(r,M.selectedTaskId,{watch:!1});await U();let N=O.disposition==="created"?"Created PR":O.disposition==="discovered"?"Discovered PR":"Synced PR";return W({...M,focusedRegion:"inspector",inspectionMode:"review",actionMessage:`${N}: #${O.prNumber} ${O.url}`})}async function ke(B){let M=W(B);if(!M.selectedTaskId)throw new Error("Select a task before refreshing PR checks.");let O=q(M),N;if(O?.type==="project"&&O.repoTargets?.length){let K=await Gi(r,M.selectedTaskId);await U();let ee=K.synced+K.discovered+K.notFound;N=K.discovered>0?`Discovered ${K.discovered} PR${K.discovered!==1?"s":""} \xB7 ${K.synced} refreshed`:`Refreshed ${K.synced}/${ee} targets`}else{let{disposition:K,task:ee}=await Qr(r,M.selectedTaskId);await U(),N=K==="not_found"?`No PR found for ${ee.branch}`:K==="discovered"?`Discovered PR: #${ee.pullRequest.number} ${ee.pullRequest.url??""}`:`Refreshed checks: ${ee.pullRequest.requiredChecks.length} reported`}return W({...M,focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"refresh-checks",actionMessage:N})}async function Xe(){if($||i.mode!=="main"||!i.shell.selectedTaskId)return;let B=i.shell.selectedTaskId,O=!!(l.tasks.find(N=>N.id===B)??null)?.pullRequest.number;$=!0;try{let{disposition:N,task:K}=await Qr(r,B);if(i.mode!=="main"||i.shell.selectedTaskId!==B)return;l=await qt(t,i.shell,o),i={mode:"main",shell:W({...i.shell,actionMessage:N==="discovered"&&!O?`Discovered PR: #${K.pullRequest.number} ${K.pullRequest.url??""}`:i.shell.actionMessage})},L()}catch{}finally{$=!1}}async function xe(B){let M=W(B);if(!M.selectedTaskId)throw new Error("Select a task before merging a PR.");let O=await Mt(r,M.selectedTaskId,{preserveWorktree:!0});return await U(),W({...M,focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"merge",actionMessage:`Merged PR #${O.prNumber}; worktree preserved`})}async function Ue(B){let M=W(B);if(!M.selectedTaskId)throw new Error("Select a task before closing it.");let{taskBeforeClose:O,task:N}=await T(async()=>{let K=await Ce(r,M.selectedTaskId),ee=await Tn(r,M.selectedTaskId);return{taskBeforeClose:K,task:ee}});for(let K of O.ptyTabs)z.disposeSession(K.id);return await U(),W({...M,selectedActionId:"close-task",actionMessage:N.cleanup.preservedWorktree?`Archived task ${N.id}; worktree preserved`:`Archived task ${N.id}`})}async function st(B){let M=W(B);if(!M.selectedWorkspaceId)throw new Error("Select a workspace before removing it.");if((await Ne(r,{workspaceId:M.selectedWorkspaceId,includeClosed:!0})).tasks.length>0)throw new Error(`Cannot remove workspace ${M.selectedWorkspaceId} while task records still reference it.`);await Bt(r,M.selectedWorkspaceId);let N=await $t(r,M.selectedWorkspaceId);return await U(),W({...M,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null,selectedPtyTabId:null,selectedLeftItemId:null,actionMessage:`Removed workspace ${N.workspaceId}`})}async function Us(B){let M=B.ptyTabs.find(K=>K.kind==="agent")??null;if(M){let K={...B,selectedPtyTabId:M.id};return await T(async()=>{let ee=await Ce(r,B.id),ge=ee.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ge&&await re(r,{...ee,selectedPtyTabId:ge.id})}),K}let O=Go(B,"agent",void 0,s),N={...B,ptyTabs:[...B.ptyTabs,O],selectedPtyTabId:O.id};return await T(async()=>{let K=await Ce(r,B.id),ee=K.ptyTabs.find(ge=>ge.kind==="agent")??null;if(ee){await re(r,{...K,selectedPtyTabId:ee.id});return}await re(r,{...K,ptyTabs:[...K.ptyTabs,O],selectedPtyTabId:O.id})}),N}L=()=>{Zo();let B=vt(_.width,_.height),M=i.mode==="main"?Lo(B,to(W(i.shell),l),{centerOnly:i.shell.centerZoomed}):i.variant==="boot"?Eo(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="pause"?Ao(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="options"?Ms(B,{menuIndex:i.menuIndex,optionsMenuItems:$s}):i.variant==="runners"?Ms(B,{menuIndex:Kt(i).menuIndex,optionsMenuItems:Fs(s,Kt(i)),optionsMessage:Ko(Kt(i)),optionsSubtitle:"Runners"}):Do(B);x&&(_.moveTo(1,1),_.eraseDisplayBelow(),x=!1),_.noFormat(vh(M)),_.hideCursor(!0)};function Zo(){let B=i.mode==="main"&&i.shell.inputMode==="terminal"?"terminal":"control";B!==A&&(A=B,_.grabInput(B==="terminal"?{mouse:"button"}:!0))}let ea=()=>{process.stdout.off("resize",Vs),_.removeListener("key",qs),_.removeListener("unknown",Ks),_.removeListener("mouse",zs),S&&(clearTimeout(S),S=null),P&&(clearTimeout(P),P=null),E&&(clearTimeout(E),E=null),H&&(clearInterval(H),H=null),z.disposeAll(),_.grabInput(!1),_.hideCursor(!1),_.fullscreen(!1)},xr=B=>{ea(),g(B)},ta=async()=>{if(i.mode!=="main"||p)return;let B=i.shell,M=B.taskPromptInput?.trim()??"";if(!B.selectedRepoId&&!B.selectedWorkspaceId){i={mode:"main",shell:W({...B,taskPromptError:"Select a workspace first."})},L();return}if(M.length===0){i={mode:"main",shell:W({...B,taskPromptError:"Task prompt cannot be empty."})},L();return}p=!0,i={mode:"main",shell:W({...B,actionMessage:`Creating ${B.selectedRunner} task in ${B.selectedWorkspaceId??B.selectedRepoId}...`})},L();let O=null;try{O=await yh(r,B.selectedRepoId,B.selectedWorkspaceId,M,B.selectedRunner),await U();let N=W({...i.shell,selectedRepoId:O.repoId,selectedWorkspaceId:O.workspaceId,selectedTaskId:O.id,selectedPtyTabId:O.selectedPtyTabId,selectedLeftItemId:`task:${O.id}`,activeTab:O.selectedPtyTabId??"agent",inputMode:"terminal",taskPromptInput:null,taskPromptError:null,actionMessage:null}),K=await z.ensureSession(O.id,N.selectedPtyTabId??Qo(O,"agent"),Ns(vt(_.width,_.height)));h=js(N.selectedPtyTabId),i={mode:"main",shell:jt(N,K)},c(i.shell)}catch(N){N instanceof Pr&&(O=N.task);let K=N instanceof Error?N.message:"Failed to create task.";O&&(await re(r,{...O,status:"draft",runnerSession:{...O.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:K}).catch(()=>{}),await U().catch(()=>{})),i={mode:"main",shell:W({...i.shell,inputMode:"control",selectedTaskId:O?.id??i.shell.selectedTaskId,selectedPtyTabId:O?.selectedPtyTabId??i.shell.selectedPtyTabId,selectedLeftItemId:O?`task:${O.id}`:i.shell.selectedLeftItemId,activeTab:O?.selectedPtyTabId??i.shell.activeTab,taskPromptInput:O?null:"",taskPromptError:K,actionMessage:null})}}finally{p=!1,L()}},ra=B=>{if(i.mode!=="main")return;let M=i.shell;if(M.taskPromptInput!==null){if(B==="ESCAPE"){i={mode:"main",shell:W({...M,taskPromptInput:null,taskPromptError:null,actionMessage:null})},L();return}if(tt(B)){ta();return}if(B==="BACKSPACE"){i={mode:"main",shell:W({...M,taskPromptInput:M.taskPromptInput.slice(0,-1),taskPromptError:null})},L();return}if(B==="CTRL_R"){i={mode:"main",shell:W({...M,selectedRunner:_s(M.selectedRunner,o),taskPromptError:null})},L();return}zn(B)&&(i={mode:"main",shell:W({...M,taskPromptInput:`${M.taskPromptInput}${B}`,taskPromptError:null})},L())}},sa=B=>{if(i.mode!=="main")return;let M=i.shell.workspaceBrowser;if(M){if(B==="ESCAPE"){i={mode:"main",shell:W({...i.shell,workspaceBrowser:null,actionMessage:null})},L();return}if(B==="UP"||B==="k"){i={mode:"main",shell:W({...i.shell,workspaceBrowser:{...M,selectedIndex:Math.max(0,M.selectedIndex-1),error:null}})},L();return}if(B==="DOWN"||B==="j"){let O=Math.max(0,M.entries.length-1);i={mode:"main",shell:W({...i.shell,workspaceBrowser:{...M,selectedIndex:Math.min(O,M.selectedIndex+1),error:null}})},L();return}if(B==="LEFT"||B==="h"){te(Hs.dirname(M.cwd)).catch(O=>{let N=O instanceof Error?O.message:"Failed to open parent directory.";i={mode:"main",shell:W({...i.shell,workspaceBrowser:{...M,error:N}})},L()});return}if(B==="RIGHT"||B==="l"||tt(B)){let O=M.entries[M.selectedIndex]??null;if(!O)return;if((B==="RIGHT"||B==="l")&&(O.kind==="directory"||O.kind==="repo")){te(O.path).catch(N=>{let K=N instanceof Error?N.message:"Failed to open directory.";i={mode:"main",shell:W({...i.shell,workspaceBrowser:{...M,error:K}})},L()});return}Ot(r,O.path).then(async N=>{await U();let K=N.repos[0]??null;i={mode:"main",shell:W({...i.shell,workspaceBrowser:null,selectedLeftItemId:`workspace:${N.workspace.id}`,selectedWorkspaceId:N.workspace.id,selectedRepoId:K?.id??null,selectedTaskId:null,selectedPtyTabId:null,actionMessage:`Registered workspace: ${N.workspace.name??N.workspace.id}`})},c(i.shell),L()}).catch(N=>{let K=N instanceof Error?N.message:"Failed to add workspace.";i={mode:"main",shell:W({...i.shell,workspaceBrowser:{...M,error:K}})},L()})}}},qs=B=>{let M=typeof B=="string"?B:"";if(i.mode==="main"&&i.shell.taskPromptInput!==null){ra(M);return}if(i.mode==="main"&&i.shell.workspaceBrowser!==null){sa(M);return}if(i.mode==="main"){let O=qn(i.shell,M,R(i.shell));if(O.exit){xr(0);return}if(O.detachTerminal){z.detach(),i={mode:"main",shell:W(O.state)},c(i.shell),L();return}if(i.shell.inputMode==="terminal"){if(O.changed){i={mode:"main",shell:W(O.state)},c(i.shell),L();return}if(h&&tt(M)){h=!1;return}h&&(h=!1),d=Th(M)?{key:M,at:Date.now()}:null;let N=Rh(M,i.shell.terminal.scrolledBack??!1);if(N!==0){Er(N);return}z.writeKey(M);return}if(M==="CTRL_C"){xr(0);return}if(M==="?"&&i.shell.inputMode==="control"){i={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:i.shell},x=!0,L();return}if(O.pause){i={mode:"overlay",variant:"pause",menuIndex:0,optionsMessage:null,shell:W(O.state)},x=!0,L();return}if(O.beginTaskPrompt){i={mode:"main",shell:W(O.state)},c(i.shell),L();return}if(O.openWorkspaceBrowser){te(t).catch(N=>{let K=N instanceof Error?N.message:"Failed to browse workspaces.";i={mode:"main",shell:W({...O.state,workspaceBrowser:{cwd:t,entries:[],selectedIndex:0,error:K}})},L()});return}if(O.createPtyTab){Y(O.state,O.createPtyTabKind,O.createPtyTabRunner).then(N=>{I(N)}).catch(N=>{let K=N instanceof Error?N.message:"Failed to create tab.";i={mode:"main",shell:W({...O.state,actionMessage:K})},L()});return}if(O.closePtyTab){Z(O.state).then(N=>{i={mode:"main",shell:N},c(i.shell),L()}).catch(N=>{let K=N instanceof Error?N.message:"Failed to close tab.";i={mode:"main",shell:W({...O.state,actionMessage:K})},L()});return}if(O.syncPullRequest){we(O.state).then(N=>{i={mode:"main",shell:N},c(i.shell),L()}).catch(N=>{let K=N instanceof Error?N.message:"Failed to create or sync PR.";i={mode:"main",shell:W({...O.state,actionMessage:K})},L()});return}if(O.refreshPullRequestChecks){ke(O.state).then(N=>{i={mode:"main",shell:N},c(i.shell),L()}).catch(N=>{let K=N instanceof Error?N.message:"Failed to refresh PR checks.";i={mode:"main",shell:W({...O.state,actionMessage:K})},L()});return}if(O.mergeTask){xe(O.state).then(N=>{i={mode:"main",shell:N},c(i.shell),L()}).catch(N=>{let K=N instanceof Error?N.message:"Failed to merge PR.";i={mode:"main",shell:W({...O.state,actionMessage:K})},L()});return}if(O.closeTask){Ue(O.state).then(N=>{i={mode:"main",shell:N},c(i.shell),L()}).catch(N=>{let K=N instanceof Error?N.message:"Failed to close task.";i={mode:"main",shell:W({...O.state,actionMessage:K})},L()});return}if(O.removeWorkspace){st(O.state).then(N=>{i={mode:"main",shell:N},c(i.shell),L()}).catch(N=>{let K=N instanceof Error?N.message:"Failed to remove workspace.";i={mode:"main",shell:W({...O.state,actionMessage:K})},L()});return}if(O.attachTerminal){I(O.state);return}if(O.refreshInspection){i={mode:"main",shell:W(O.state)},c(i.shell),L(),V(i.shell).catch(N=>{let K=N instanceof Error?N.message:"Failed to refresh inspection.";i={mode:"main",shell:W({...i.shell,actionMessage:K})},L()});return}O.changed&&(i={mode:"main",shell:W(O.state)},j(i.shell).catch(()=>{}),c(i.shell),L());return}if(i.variant==="help"){i.viaOptions&&i.parentVariant?i={mode:"overlay",variant:"options",menuIndex:1,optionsMessage:null,shell:i.shell,parentVariant:i.parentVariant}:i.parentVariant?i={mode:"overlay",variant:i.parentVariant,menuIndex:1,optionsMessage:null,shell:i.shell}:i={mode:"main",shell:W(i.shell)},x=!0,L();return}if(i.variant==="options"){ia(M);return}if(i.variant==="runners"){na(M);return}if(i.optionsMessage){(M==="ESCAPE"||tt(M))&&(i={...i,optionsMessage:null},L());return}if(M==="UP"||M==="k"){i={...i,menuIndex:Math.max(0,i.menuIndex-1)},L();return}if(M==="DOWN"||M==="j"){i={...i,menuIndex:Math.min(2,i.menuIndex+1)},L();return}if(M==="ESCAPE"){i.variant==="pause"&&(i={mode:"main",shell:W(i.shell)},x=!0,L());return}if(tt(M)){if(i.menuIndex===0){i={mode:"main",shell:W({...i.shell,inputMode:"control"})},x=!0,L(),C();return}if(i.menuIndex===1){let O=i.variant==="boot"||i.variant==="pause"?i.variant:void 0;i={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:i.shell,...O!==void 0?{parentVariant:O}:{}},x=!0,L();return}xr(0)}};function ia(B){if(i.mode!=="overlay"||i.variant!=="options")return;let M=zo(i.menuIndex,B);if(M.kind!=="noop"){if(M.kind==="render"){i={...i,menuIndex:M.menuIndex},L();return}if(M.kind==="back"){i.parentVariant&&(i={mode:"overlay",variant:i.parentVariant,menuIndex:1,optionsMessage:null,shell:i.shell},x=!0,L());return}if(M.kind==="help"){let O=i.parentVariant;i={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:i.shell,viaOptions:!0,...O!==void 0?{parentVariant:O}:{}},x=!0,L();return}if(M.kind==="runners"){let O=i.parentVariant;i={mode:"overlay",variant:"runners",menuIndex:0,optionsMessage:null,shell:i.shell,...O!==void 0?{parentVariant:O}:{}},x=!0,L()}}}function na(B){if(i.mode!=="overlay"||i.variant!=="runners")return;let M=Vo(Kt(i),s,B,o);if(M.kind!=="noop"){if(M.kind==="back"){let O=i.parentVariant;i={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:i.shell,...O!==void 0?{parentVariant:O}:{}},x=!0,L();return}if(M.kind==="render"){i={...i,runnerOptions:M.state},L();return}F(M.config).then(()=>{i.mode!=="overlay"||i.variant!=="runners"||(i={...i,runnerOptions:M.state},L())}).catch(O=>{if(i.mode!=="overlay"||i.variant!=="runners")return;let N=O instanceof Error?O.message:"Failed to save runner option.";i={...i,runnerOptions:{...Kt(i),message:N}},L()})}}let Ks=B=>{let M=Sh(B);if(i.mode!=="main"||i.shell.inputMode!=="terminal"||M.length===0)return;if(M.includes("")){z.detach(),h=!1,d=null,i={mode:"main",shell:W({...i.shell,inputMode:"control",actionMessage:null})},c(i.shell),L();return}let O=Ch(M);if(O!==0){Er(O);return}if(h&&M!=="\r"&&M!==`
104
- `&&M!==`\r
105
- `&&(h=!1),Ph(h,d,M)){h=!1;return}z.write(M)},zs=B=>{if(i.mode!=="main")return;if(i.shell.inputMode==="control"){aa(Xo(B));return}let M=Xo(B);M!==0&&Er(M)};function Er(B){u+=B,!S&&(S=setTimeout(()=>{S=null;let M=u;u=0,M!==0&&(oa(M),L())},16))}function oa(B){z.scrollViewport(B),i={mode:"main",shell:X(i.shell)}}function aa(B){B!==0&&(b+=B,!P&&(P=setTimeout(()=>{P=null;let M=b;if(b=0,M===0||i.mode!=="main"||i.shell.inputMode!=="control")return;let O=et(i.shell,M,R(i.shell));if(O.changed){if(O.refreshInspection){i={mode:"main",shell:W(O.state)},c(i.shell),L(),V(i.shell).catch(N=>{let K=N instanceof Error?N.message:"Failed to refresh inspection.";i={mode:"main",shell:W({...i.shell,actionMessage:K})},L()});return}i={mode:"main",shell:W(O.state)},c(i.shell),L()}},16)))}let Vs=()=>{x=!0,i.mode==="main"&&i.shell.inputMode==="terminal"&&(z.resize(Ns(vt(_.width,_.height))),i={mode:"main",shell:X(i.shell)}),L()};process.stdout.on("resize",Vs),_.grabInput(!0),A="control",_.hideCursor(!0),_.fullscreen(!0),_.on("key",qs),_.on("unknown",Ks),_.on("mouse",zs),H=setInterval(()=>{Xe()},(s.github?.watchIntervalSeconds??10)*1e3),L()})}async function qt(e,t,r){let s=Ke(e),[o,m,y]=await Promise.all([dt(s),Me(s),Ne(s)]),n=Jo(y.tasks,t),l=t?{selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath}:{},f=n?await gn(n,l):null;return{workspaceRoot:e,workspaces:m.filter(k=>k.status==="active"),repos:o,tasks:y.tasks,inspection:f,...r?{enabledRunnerIds:r}:{}}}function Jo(e,t){return t?.selectedTaskId?e.find(r=>r.id===t.selectedTaskId)??null:null}function gh(e,t){return hr(e,t)}function mh(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let m=1;m<o.length;m+=1)if(r.has(o.slice(0,m).join("/")))return!1;return!0})}function _h(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`),r.kind==="project"&&t.push(`new-task-workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="repo"&&t.push(`new-task:${r.primaryRepoId}`)}else for(let r of e.repos){t.push(`repo:${r.id}`);for(let s of e.tasks.filter(o=>o.repoId===r.id))t.push(`task:${s.id}`);t.push(`new-task:${r.id}`)}return t.push("new-workspace"),t}function wh(e,t,r){let s=e.tasks.find(m=>m.ptyTabs.some(y=>y.id===t))??null,o=s?.ptyTabs.find(m=>m.id===t)??null;return{cwd:s?.worktreePath??r,command:o?.kind==="agent"?kh(o):[]}}function kh(e){return e.command.length>0?e.command:["codex"]}function Kt(e){return e.runnerOptions??{menuIndex:e.menuIndex,message:e.optionsMessage}}function bh(e,t,r){return e.ptyTabs.find(s=>s.id===t)?.kind??r}function Go(e,t,r,s={}){let o=r??e.runner,m=be(o),y=t==="agent"?m.defaultAgentTitle:"Terminal",n=t==="agent"&&r&&r!==e.runner?`${e.id}:${r}`:`${e.id}:${t}`,l=new Set(e.ptyTabs.map(c=>c.id)),f=1,k=n;for(;l.has(k);)f+=1,k=`${n}-${f}`;let a=new Date().toISOString(),w=r&&r!==e.runner?r:void 0;return{id:k,kind:t,...w?{runner:w}:{},title:f===1?y:`${y} ${f}`,command:t==="agent"?me(o,void 0,s):[],createdAt:a,updatedAt:a}}async function yh(e,t,r,s,o){let m=await ye(e);zt(o,m);let y=r?await rr(e,r,s,{runner:o,config:m}):await Et(e,t??"",s,{runner:o,config:m});try{let f=ct();await J(lt(Lr(o,m).executable,{cwd:y.repoRoot,env:f}),["--help"],{cwd:y.repoRoot,env:f})}catch(f){let k=f instanceof Error?f.message:"Failed to start runner.",a={...y.task,status:"draft",runnerSession:{...y.task.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:k};throw await re(e,a),new Pr(k,a)}let n=Qo(y.task,"agent"),l={...y.task,status:"running",selectedPtyTabId:n,runnerSession:{...y.task.runnerSession,startedAt:new Date().toISOString(),lastKnownState:"running"}};return await re(e,l),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),version:1,selectedRepoId:l.repoId,selectedWorkspaceId:l.workspaceId,selectedTaskId:l.id,selectedPtyTabId:l.selectedPtyTabId,inputMode:"control",focusedRegion:"center",activeTab:l.selectedPtyTabId??"agent",selectedActionId:"commit",updatedAt:new Date().toISOString()}),l}var Pr=class extends Error{task;constructor(t,r){super(t),this.name="InteractiveTaskStartupError",this.task=r}};function Qo(e,t){let r=e.ptyTabs.find(s=>s.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-Be.leftWidth-Be.rightWidth-Be.dividerWidth-Tr*2),rows:Math.max(5,e.height-Be.topRailHeight-5)}}function vh(e){return e.split(`
106
- `).map((t,r)=>`\x1B[${r+1};1H${t}`).join("")}function Sh(e){return typeof e=="string"?e:Buffer.isBuffer(e)?e.toString("utf8"):""}function Th(e){return e.length===1||tt(e)||e==="BACKSPACE"||e==="TAB"}function js(e){return typeof e=="string"&&new RegExp(`:(?:agent|${ce.join("|")})(?:-\\d+)?$`).test(e)}function Rh(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 Xo(e){return e==="MOUSE_WHEEL_UP"?-3:e==="MOUSE_WHEEL_DOWN"?3:0}function Ch(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 Ph(e,t,r){return r.length===0?!1:e&&(r==="\r"||r===`
98
+ `);if(f===-1)return;let k=m.slice(0,f);n(),o.end();try{r(JSON.parse(k))}catch(a){s(a instanceof Error?a:new Error(String(a)))}}),o.once("close",()=>n())})}async function ko(e,t){let r=Date.now();for(;Date.now()-r<t;){if(!await kr(e))return;await Ls(50)}}function Po(e){return new Promise((t,r)=>{let s=bo(e);s.once("connect",()=>t(s)),s.once("error",r)})}function Lu(e,t){return new Promise((r,s)=>{e.once("error",s),e.listen(t,r)})}function wr(e,t){if(!e.destroyed)try{e.write(`${JSON.stringify(t)}
99
+ `)}catch{}}function Io(e){try{return process.kill(e,0),!0}catch{return!1}}function Ls(e){return new Promise(t=>setTimeout(t,e))}function Mu(e){throw new Error(`Unhandled daemon request: ${JSON.stringify(e)}`)}var Ou=[" \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 Ms(){return[...Ou]}var Bu=["Start","Options","Exit"],$u=["Resume","Options","Exit"],vr=2,Sr=2,Tr=2,Fu=new RegExp("\x1B\\[[0-?]*[ -/]*[@-~]","g"),Wu=new RegExp("\x1B\\[(?:0)?m","g"),Nu=new RegExp("\x1B\\]8;;[^\x1B]*\x1B\\\\","g"),ju=/https?:\/\/[^\s<>"']+/g,Os="\x1B[0m",Ao="\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 Do(e,t={}){return $s(e,{subtitle:"crAIg is that you?",menuItems:Bu,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Lo(e,t={}){return $s(e,{subtitle:"Control mode is paused.",menuItems:$u,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}var br=[" 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."],Hu=["Help"];function Bs(e,t={}){return $s(e,{subtitle:t.optionsSubtitle??"Configuration",menuItems:t.optionsMenuItems??Hu,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Mo(e,t={}){let r=t.color??!0,s=se.overlay,o=new Array(e.height).fill(he(" ".repeat(e.width),r,s)),m=Ms(),y=Math.max(1,Math.floor((e.height-m.length-2-br.length)/2));for(let k=0;k<m.length&&!(y+k>=e.height);k+=1)o[y+k]=he(Wo(m[k]??"",e.width),r,se.overlayLogo);let n=Math.max(...br.map(k=>k.length)),l=Math.max(0,Math.floor((e.width-n)/2)),f=y+m.length+2;for(let k=0;k<br.length;k+=1){let a=f+k;if(a>=e.height)break;let w=br[k]??"";o[a]=he(rt(" ".repeat(l)+w,e.width),r,s)}return o.join(`
100
+ `)}function Oo(e,t,r={}){let s=r.color??!0,o=Be.leftWidth,m=Be.rightWidth,y=Be.dividerWidth,n=r.centerOnly??!1,l=n?e.width:e.width-o-m-y*2,f=e.height-Be.topRailHeight-1,k=`CRAIG | ${t.topRail.workspacePath} | ${t.topRail.agent} ${qo(`\u25CF ${t.topRail.liveLabel}`,s,se.rail)}`,a=he(rt(k,e.width),s,se.rail),w=Uu(t,o-vr-Sr,f,s),c=qu(t,l,f,s),g=zu(t,m,f,s),_=[];for(let p=0;p<f;p+=1){if(n){_.push(yr(c[p]??He(),l,s,"center"));continue}let h=yr(w[p]??He(),o,s,"left"),d=he("\u2502",s,se.divider),u=yr(c[p]??He(),l,s,"center"),b=he("\u2502",s,se.divider),S=yr(g[p]??He(),m,s,"right");_.push(`${h}${d}${u}${b}${S}`)}let i=he(rt(` ${t.footerText}`,e.width),s,se.panelMuted);return[a,..._,i].join(`
101
+ `)}function $s(e,t){let r=new Array(e.height).fill(he(" ".repeat(e.width),t.color,se.overlay)),s=Ms(),o=Math.max(...t.menuItems.map(f=>f.length)),m=t.menuItems.map((f,k)=>`${k===t.menuIndex?">":" "} ${f.padEnd(o)}`),y=t.optionsMessage?["",t.optionsMessage]:[],n=[...s,"",t.subtitle,"",...m,...y],l=Math.max(1,Math.floor((e.height-n.length)/2));for(let f=0;f<n.length;f+=1){let k=Wo(n[f]??"",e.width);if(f<s.length){r[l+f]=he(k,t.color,se.overlayLogo);continue}if(f===s.length+1){r[l+f]=he(k,t.color,se.overlaySubtitle);continue}let a=f-(s.length+3),c=a>=0&&a<t.menuItems.length&&a===t.menuIndex?se.overlayMenuSelected:se.overlay;r[l+f]=he(k,t.color,c)}return r.join(`
102
+ `)}function Uu(e,t,r,s){let o=Xu(e.runners),m=1,y=e.leftTree.map(l=>Gu(l,t,s));return[...Rr(y,r-m),o]}function qu(e,t,r,s){let o=e.tabs.find(a=>a.active)?.label??"AGENT",m=ch(e.tabs),y=`${" ".repeat(m)}${Cr("\u2500".repeat(o.length+1),s,se.panelMuted)}`,n=[`${Cr(e.centerHeader.tabLabel,s,se.panelBg)} ${e.centerHeader.taskId}`,e.centerHeader.repo].join(" \xB7 "),l=e.tabs.find(a=>a.active)?.id??"agent",f=e.centerHeader.tabLabel==="BROWSER"||!Vn(l)?e.centerTranscript.map(a=>({...a})):Ku(e),k=[{text:Yu(e.tabs,s)},{text:y,tone:"muted"},{text:n},He(),...f];return Rr(k,r)}function Ku(e){if(e.terminal.error)return[{text:"terminal \u25B8 PTY unavailable"},He(),{text:e.terminal.error},He(),{text:"Fix the native dependency setup, then re-enter terminal mode."}];let t=e.tabs.find(s=>s.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(s=>({text:Uo(s.segments),segments:s.segments,fullBleed:!0}))}function zu(e,t,r,s){let o=e.rightInspection?Vu(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):Rr([{text:Bo("CONTEXT",e.focusedRegion==="tasks",s,se.panelBg)},He(),...e.rightContext.map(m=>Ju(m,s)),...e.actionMessage?[He(),{text:e.actionMessage}]:[]],r);return Rr(o,r)}function Vu(e,t){let r=e.slice(0,2),s=e.slice(2),o=Math.max(0,t-r.length),m=s.findIndex(n=>n.focused||n.selected),y=m===-1?0:dh(m-Math.floor(o/2),0,Math.max(0,s.length-o));return[...r.map(n=>xo(n)),...s.slice(y,y+o).map(n=>xo(n))]}function xo(e){let t=e.focused?"\u25B8 ":e.selected?"\u2022 ":" ",r=e.focused||e.selected?"selected":e.muted?"muted":"default",s=`${t}${e.text}`;if(e.segments)return{text:s,segments:[{text:t},...e.segments],tone:r};if(e.accentPrefix&&!e.muted){let o=e.text.indexOf(" "),m=o===-1?e.text:e.text.slice(0,o),y=o===-1?"":e.text.slice(o);return{text:s,segments:[{text:t},{text:m,style:{fg:"7aa2f7"}},{text:y}],tone:r}}return e.color?{text:s,segments:[{text:t},{text:e.text,style:{fg:e.color}}],tone:r}:{text:s,tone:r}}function Gu(e,t,r){let s=" ".repeat(e.indent??0),o=e.accentDot?" \u25CF":"",m=e.status?` ${e.status}`:"",y=e.accentDot?` ${qo("\u25CF",r,e.selected?se.panelSelected:se.panelBg)}`:"",n=e.prBadge?e.prBadge.reduce((c,g)=>c+Ge(g.text),0):0,l=t-Ge(m)-Ge(o)-n,f=e.focused&&!e.selected?Bo(e.text,!0,r,se.panelBg):e.text,k=rt(`${s}${f}`,Math.max(0,l)),a=e.selected?"selected":e.muted?"muted":"default";if(e.prBadge){let c=[{text:`${k}${m}${y}`},...e.prBadge];return{text:`${k}${m}${e.prBadge.map(_=>_.text).join("")}`,segments:c,tone:a}}return{text:`${k}${m}${y}`,tone:a}}function Xu(e){let t=e.map(s=>{let o=s.health>=1,m=parseInt(s.count,10),y=m>1?` (${m})`:"";return{text:`${o?"\u25CF":"\u25CB"} ${s.name}${y}`,active:o}}),r=[];for(let s=0;s<t.length;s++){let o=t[s];s>0&&r.push({text:" "}),o.active?r.push({text:o.text,style:{fg:se.success.fg}}):r.push({text:o.text,style:{fg:se.panelMuted.fg}})}return{text:t.map(s=>s.text).join(" "),segments:r,tone:"muted"}}function Yu(e,t){return e.map(r=>r.active?Cr(r.label,t,se.panelBg):Ko(r.label,t,se.panelBg)).join(" ")}function Ju(e,t){return{text:`${e.label.padEnd(8," ")} ${e.mutedValue?Ko(e.value,t,se.panelBg):e.value}`}}function Bo(e,t,r,s){return t?Cr(e,r,s):e}function yr(e,t,r,s){let o=Qu(s,e.tone??"default"),m=Zu(e,r,o);if(s==="left"){if(e.fullBleed)return he(rt(m,t),r,o);let n=t-vr-Sr;if(e.rightAlign){let f=Ge(m),k=Math.max(0,n-f),a=`${" ".repeat(vr)}${" ".repeat(k)}${m}${" ".repeat(Sr)}`;return he(a,r,o)}let l=`${" ".repeat(vr)}${rt(m,n)}${" ".repeat(Sr)}`;return he(l,r,o)}return s==="center"&&e.fullBleed?eh(e,t,r,o):he(rt(` ${m}`,t),r,o)}function Qu(e,t){return t==="selected"||t==="focused"?se.panelSelected:t==="muted"?se.panelMuted:se.panelBg}function Rr(e,t){let r=e.slice(0,t);for(;r.length<t;)r.push(He());return r}function He(){return{text:""}}function Zu(e,t,r){return e.segments?e.segments.map(s=>$o(s,t,r)).join(""):e.text}function eh(e,t,r,s){let o=" ".repeat(Tr),m=Math.max(0,t-Tr*2);if(!e.segments)return he(`${o}${rt(e.text,m)}${o}`,r,s);let y=sh(e.segments,m),n=`${o}${y.map(l=>$o(l,r,s)).join("")}${o}`;return he(n,r,s)}function $o(e,t,r){let s=e.href?`${Fo(e.href)}${e.text}${Ao}`:th(e.text);return!t||!e.style?s:`${Ut(oh(e.style,r))}${ah(e.style)}${s}${Os}${Ut(r)}`}function th(e){return e.replace(ju,t=>{let[r,s]=rh(t);return`${Fo(r)}${r}${Ao}${s}`})}function rh(e){let t=e.length;for(;t>0&&".,;:!?)]}".includes(e[t-1]??"");)t-=1;return[e.slice(0,t),e.slice(t)]}function Fo(e){return`\x1B]8;;${e}\x1B\\`}function sh(e,t){let r=ih(e,t);return nh(r,t)}function ih(e,t){let r=[],s=t;for(let o of e){if(s<=0)break;let m=Ge(o.text);if(m<=s){r.push(o),s-=m;continue}let y=No(o.text,s);y.length>0&&r.push({...o,text:y}),s=0}return r}function nh(e,t){let r=Ge(Uo(e));if(r>=t)return e;let s=e.at(-1)?.style;return s?.bg?[...e,{text:" ".repeat(t-r),style:s}]:[...e,{text:" ".repeat(t-r)}]}function oh(e,t){let r=e.inverse?e.bg??t.bg:e.fg,s=e.inverse?e.fg??t.fg:e.bg,o={},m=r??t.fg,y=s??t.bg;return m&&(o.fg=m),y&&(o.bg=y),o}function ah(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 ch(e){let t=0;for(let r of e){if(r.active)return t;t+=r.label.length+3}return 0}function Wo(e,t){let r=Math.max(0,t-Ge(e)),s=Math.floor(r/2),o=r-s;return`${" ".repeat(s)}${e}${" ".repeat(o)}`}function rt(e,t){let r=Ge(e);return r>=t?lh(e,t):e+" ".repeat(t-r)}function lh(e,t){if(t<=0)return"";if(Ge(e)<=t)return e;let r=Ho(e);return No(r,Math.max(0,t-1))+"\u2026"}function Ge(e){let t=0;for(let r of Array.from(Ho(e)))t+=jo(r);return t}function No(e,t){let r="",s=0;for(let o of Array.from(e)){let m=jo(o);if(s+m>t)break;r+=o,s+=m}return r}function jo(e){let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||t>=768&&t<=879||t>=6832&&t<=6911||t>=7616&&t<=7679||t>=8400&&t<=8447||t>=65024&&t<=65039?0:t>=4352&&(t<=4447||t===9001||t===9002||t>=11904&&t<=42191&&t!==12351||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65135||t>=65280&&t<=65376||t>=65504&&t<=65510||t>=127744&&t<=129791||t>=131072&&t<=262141)?2:1}function dh(e,t,r){return Math.min(Math.max(e,t),r)}function Ho(e){return e.replace(Nu,"").replace(Fu,"")}function Uo(e){return e.map(t=>t.text).join("")}function he(e,t,r){if(!t)return e;let s=Ut(r),o=e.replace(Wu,`${Os}${s}`);return`${s}${o}${Os}`}function Ut(e){let t=[];return e.fg&&t.push(`38;2;${Eo(e.fg).join(";")}`),e.bg&&t.push(`48;2;${Eo(e.bg).join(";")}`),`\x1B[${t.join(";")}m`}function Eo(e){return[Number.parseInt(e.slice(0,2),16),Number.parseInt(e.slice(2,4),16),Number.parseInt(e.slice(4,6),16)]}function qo(e,t,r){return Fs(e,t,se.success.fg,r)}function Cr(e,t,r){return Fs(e,t,se.accent.fg,r)}function Ko(e,t,r){return Fs(e,t,se.mutedfg.fg,r)}function Fs(e,t,r,s){if(!t)return e;let o=s.bg?{fg:r,bg:s.bg}:{fg:r};return`${Ut(o)}${e}${Ut(s)}`}Ae();var Ws=["Runners","Help"];function Ns(e,t){return ce.map(r=>{let s=be(r),o=e.runners?.[r]?.enabled!==!1,m=e.runners?.[r]?.path?.trim(),y=t.pathEdit?.runner===r?`${t.pathEdit.value}_`:m&&m.length>0?m:`default (${s.executable})`;return`${s.displayName} ${o?"enabled":"disabled"} ${y}`})}function Vo(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 Go(e,t){return t==="UP"||t==="k"?{kind:"render",menuIndex:Math.max(0,e-1)}:t==="DOWN"||t==="j"?{kind:"render",menuIndex:Math.min(Ws.length-1,e+1)}:t==="ESCAPE"?{kind:"back"}:js(t)?e===0?{kind:"runners"}:{kind:"help"}:{kind:"noop",menuIndex:e}}function Xo(e,t,r,s){if(e.pathEdit)return uh({...e,pathEdit:e.pathEdit},t,r);let o=Ns(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(o-1,e.menuIndex+1),message:null}};if(r==="ESCAPE")return{kind:"back",state:e};if(r==="e"){let n=ce[e.menuIndex]??"codex";return{kind:"render",state:{...e,message:null,pathEdit:{runner:n,value:t.runners?.[n]?.path??""}}}}if(!js(r))return{kind:"noop",state:e};let m=ce[e.menuIndex]??"codex",y=t.runners?.[m]?.enabled!==!1;return y&&s.length<=1?{kind:"render",state:{...e,message:"At least one runner must stay enabled."}}:{kind:"save",config:hh(t,m,!y),state:{...e,message:`${be(m).displayName} ${y?"disabled":"enabled"}.`}}}function uh(e,t,r){if(r==="ESCAPE")return{kind:"render",state:zo({...e,message:null})};if(r==="BACKSPACE")return{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:e.pathEdit.value.slice(0,-1)}}};if(js(r)){let s=e.pathEdit.runner,o=e.pathEdit.value.trim();return{kind:"save",config:fh(t,s,o.length>0?o:null),state:zo({...e,message:o.length>0?`${be(s).displayName} executable saved.`:`${be(s).displayName} executable reset to default.`})}}return ph(r)?{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:`${e.pathEdit.value}${r}`}}}:{kind:"noop",state:e}}function hh(e,t,r){return{...e,runners:{...e.runners??{},[t]:{...e.runners?.[t]??{},enabled:r}}}}function fh(e,t,r){let s={...e.runners?.[t]??{},...r?{path:r}:{}};return r||delete s.path,{...e,runners:{...e.runners??{},[t]:s}}}function zo(e){let t={...e};return delete t.pathEdit,t}function js(e){return e==="ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
103
+ `}function ph(e){return e.length===1&&e>=" "&&e!=="\x7F"}var wh=gh(import.meta.url),kh=wh("terminal-kit"),bh=kh.terminal;async function Qo(e={}){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("Craig terminal shell requires a TTY.");let t=e.workspaceRoot??process.cwd(),r=Ke(t);await yt(t);let s=await ye(r),o=mt(s),m=e.uiStateFile?await De({uiStateFile:e.uiStateFile}):null,y=Promise.resolve(),n=Promise.resolve(),l=await qt(t,void 0,o),f=hr(Hn(m,s),l);l=await qt(t,f,o);let k=()=>{},a={workspaceRoot:t,onUpdate:()=>k(),resolveSessionSpec:(g,_)=>Th(l,_,t)},w=e.ptyRuntime??await yo({...a,paths:r}),c=g=>{if(!e.uiStateFile)return;m=Un(m,g);let _=m;y=y.then(()=>Pe({uiStateFile:e.uiStateFile},_),()=>Pe({uiStateFile:e.uiStateFile},_)),y.catch(()=>{})};return new Promise(g=>{let _=e.terminal??bh,i={mode:"overlay",variant:"boot",menuIndex:0,optionsMessage:null,shell:hr(f,l)},p=!1,h=!1,d=null,u=0,b=0,S=null,P=null,E=null,H=null,$=!1,D=0,x=!0,A=null,L=()=>{},z=w;k=()=>{i.mode==="main"&&(i={mode:"main",shell:X(i.shell)},E||(E=setTimeout(()=>{E=null,i.mode==="main"&&L()},50)))};function X(B){return jt(B,z.getViewState(B.selectedPtyTabId))}function N(B){return X(yh(B,l))}function q(B){return l.tasks.find(O=>O.id===B.selectedTaskId)??null}async function v(){await z.hydrateSessions?.(l.tasks.flatMap(B=>B.ptyTabs.map(O=>O.id)))}function C(){v().catch(()=>{}).then(()=>{i.mode==="main"&&(i={mode:"main",shell:X(i.shell)},L())})}function T(B){let O=n.then(B,B);return n=O.then(()=>{},()=>{}),O}function R(B){let O=q(B),M=l.inspection,W=M&&M.taskId===O?.id?M:null,K=vh(W?.fileRows??[],B.collapsedFileTreePaths);return{leftItemIds:Sh(l),centerTabIds:Xn(O,B),ptyTabIds:O?.ptyTabs.map(J=>J.id)??[],filePathIds:W?.filePaths??[],fileTreeRowIds:K.map(J=>J.path),fileTreeFileIds:K.filter(J=>J.kind==="file").map(J=>J.path),fileTreeDirectoryIds:K.filter(J=>J.kind==="directory").map(J=>J.path),diffPathIds:W?.diffPaths??[],diffPathRanges:[],fileLineCount:W?.selectedFile.lines.length??0,diffLineCount:W?.selectedDiff.lines.length??0,pageRows:Math.max(5,vt(_.width,_.height).height-Be.topRailHeight-9),enabledRunnerIds:o,projectTargetIds:O?.repoTargets?.map(J=>J.repoId)??[]}}async function F(B){await Qs(r,B),s=B,o=mt(s),l={...l,enabledRunnerIds:o},i.mode==="main"?i={mode:"main",shell:N({...i.shell,selectedRunner:o.includes(i.shell.selectedRunner)?i.shell.selectedRunner:it(s)})}:i={...i,shell:N({...i.shell,selectedRunner:o.includes(i.shell.selectedRunner)?i.shell.selectedRunner:it(s)})}}async function j(B){let O=B.selectedTaskId;O&&await T(async()=>{let M=await Ce(r,O);!M.ptyTabs.some(W=>W.id===B.activeTab)||M.selectedPtyTabId===B.activeTab||await re(r,{...M,selectedPtyTabId:B.activeTab})})}async function U(){let B=(i.mode==="main",i.shell);l=await qt(t,B,o),i.mode==="main"?i={mode:"main",shell:N(i.shell)}:i={...i,shell:N(i.shell)}}async function V(B){let O=++D,M=Zo(l.tasks,B),W=l.inspection,K;if(M&&W?.taskId===M.id){let J={selectedFilePath:B.selectedFilePath,selectedDiffPath:B.selectedDiffPath},ue=await pn(M,W,J);if(O!==D)return;K={...l,inspection:ue}}else if(K=await qt(t,B,o),O!==D)return;l=K,i.mode==="main"&&(i={mode:"main",shell:N(i.shell)},c(i.shell),L())}async function te(B){let O=await Mh(B);i.mode==="main"&&(i={mode:"main",shell:N({...i.shell,workspaceBrowser:O,activeTab:i.shell.selectedPtyTabId??i.shell.activeTab,actionMessage:null})},L())}async function I(B){try{let O=N(B),M=q(O),W=O.selectedPtyTabId;if(M&&O.focusedRegion==="tasks"){let ue=M.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ue?W=ue.id:(M=await Ks(M),await U(),W=M.selectedPtyTabId)}M&&!W&&(M=await Ks(M),await U(),W=M.selectedPtyTabId);let K=N({...O,activeTab:W??O.activeTab,selectedPtyTabId:W});if(!K.selectedTaskId||!W){i={mode:"main",shell:K},L();return}i={mode:"main",shell:jt({...K,inputMode:"terminal"},z.getViewState(W))},c(i.shell);let J=await z.ensureSession(K.selectedTaskId,W,Hs(vt(_.width,_.height)));h=Us(W),d=null,i={mode:"main",shell:jt({...K,inputMode:"terminal"},J)},c(i.shell)}catch(O){let M=O instanceof Error?O.message:"Failed to start PTY.";B.selectedTaskId&&B.selectedPtyTabId&&Us(B.selectedPtyTabId)&&(await Z(B.selectedTaskId,M).catch(()=>{}),await U().catch(()=>{})),i={mode:"main",shell:Kn(N(B),M)},c(i.shell)}L()}async function Z(B,O){await T(async()=>{let M=await Ce(r,B);await re(r,{...M,status:M.status==="running"?"draft":M.status,runnerSession:{...M.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:O})})}async function Y(B,O,M){let W=N(B);if(!W.selectedTaskId)throw new Error("Select a task before creating a tab.");let K=await T(async()=>{let J=await Ce(r,W.selectedTaskId),ue=O??Ch(J,W.activeTab,W.preferredPtyTabKind),Ee=Yo(J,ue,M??void 0,s),Tt={...J,ptyTabs:[...J.ptyTabs,Ee],selectedPtyTabId:Ee.id};return await re(r,Tt),Tt});return await U(),N({...W,activeTab:K.selectedPtyTabId??W.activeTab,selectedPtyTabId:K.selectedPtyTabId,preferredPtyTabKind:K.ptyTabs.at(-1)?.kind??W.preferredPtyTabKind,focusedRegion:"center",actionMessage:`Created tab: ${K.ptyTabs.at(-1)?.title??"tab"}`})}async function ee(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before closing a tab.");let{closedTab:M,nextSelectedTab:W}=await T(async()=>{let K=await Ce(r,O.selectedTaskId),J=K.ptyTabs.findIndex(Ar=>Ar.id===O.activeTab);if(J===-1)throw new Error("Only PTY tabs can be closed.");let ue=K.ptyTabs[J],Ee=K.ptyTabs.filter(Ar=>Ar.id!==ue.id),Tt=Ee[Math.min(J,Ee.length-1)]??Ee[J-1]??null;return await re(r,{...K,ptyTabs:Ee,selectedPtyTabId:Tt?.id??null}),{closedTab:ue,nextSelectedTab:Tt}});return z.disposeSession(M.id),await U(),N({...O,activeTab:W?.id??(O.openInspectionKind?"inspection":O.activeTab),selectedPtyTabId:W?.id??null,focusedRegion:"center",actionMessage:`Closed tab: ${M.title}`})}async function we(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before creating or syncing a PR.");let M=await Lt(r,O.selectedTaskId,{watch:!1});await U();let W=M.disposition==="created"?"Created PR":M.disposition==="discovered"?"Discovered PR":"Synced PR";return N({...O,focusedRegion:"inspector",inspectionMode:"review",actionMessage:`${W}: #${M.prNumber} ${M.url}`})}async function ke(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before refreshing PR checks.");let M=q(O),W;if(M?.type==="project"&&M.repoTargets?.length){let K=await Zr(r,O.selectedTaskId);await U();let J=K.synced+K.discovered+K.notFound;W=K.discovered>0?`Discovered ${K.discovered} PR${K.discovered!==1?"s":""} \xB7 ${K.synced} refreshed`:`Refreshed ${K.synced}/${J} targets`}else{let{disposition:K,task:J}=await es(r,O.selectedTaskId);await U(),W=K==="not_found"?`No PR found for ${J.branch}`:K==="discovered"?`Discovered PR: #${J.pullRequest.number} ${J.pullRequest.url??""}`:`Refreshed checks: ${J.pullRequest.requiredChecks.length} reported`}return N({...O,focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"refresh-checks",actionMessage:W})}async function Xe(){if($||i.mode!=="main")return;let B=i.shell.selectedTaskId,O=l.tasks;$=!0;try{let M=i.shell.actionMessage;for(let W of O)try{let K=W.type==="project"?!!W.repoTargets?.some(J=>J.pullRequest.number):!!W.pullRequest.number;if(W.type==="project"&&W.repoTargets?.length){let J=await Zr(r,W.id);W.id===B&&!K&&J.discovered>0&&(M=`Discovered ${J.discovered} PR${J.discovered!==1?"s":""}`)}else{let{disposition:J,task:ue}=await es(r,W.id);W.id===B&&J==="discovered"&&!K&&(M=`Discovered PR: #${ue.pullRequest.number} ${ue.pullRequest.url??""}`)}}catch{}if(i.mode!=="main")return;l=await qt(t,i.shell,o),i={mode:"main",shell:N({...i.shell,actionMessage:M})},L()}catch{}finally{$=!1}}async function xe(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before merging a PR.");let M=await Mt(r,O.selectedTaskId,{preserveWorktree:!0});return await U(),N({...O,focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"merge",actionMessage:`Merged PR #${M.prNumber}; worktree preserved`})}async function Ue(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before closing it.");let{taskBeforeClose:M,task:W}=await T(async()=>{let K=await Ce(r,O.selectedTaskId),J=await Tn(r,O.selectedTaskId);return{taskBeforeClose:K,task:J}});for(let K of M.ptyTabs)z.disposeSession(K.id);return await U(),N({...O,selectedActionId:"close-task",actionMessage:W.cleanup.preservedWorktree?`Archived task ${W.id}; worktree preserved`:`Archived task ${W.id}`})}async function st(B){let O=N(B);if(!O.selectedWorkspaceId)throw new Error("Select a workspace before removing it.");if((await Ne(r,{workspaceId:O.selectedWorkspaceId,includeClosed:!0})).tasks.length>0)throw new Error(`Cannot remove workspace ${O.selectedWorkspaceId} while task records still reference it.`);await Bt(r,O.selectedWorkspaceId);let W=await $t(r,O.selectedWorkspaceId);return await U(),N({...O,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null,selectedPtyTabId:null,selectedLeftItemId:null,actionMessage:`Removed workspace ${W.workspaceId}`})}async function Ks(B){let O=B.ptyTabs.find(K=>K.kind==="agent")??null;if(O){let K={...B,selectedPtyTabId:O.id};return await T(async()=>{let J=await Ce(r,B.id),ue=J.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ue&&await re(r,{...J,selectedPtyTabId:ue.id})}),K}let M=Yo(B,"agent",void 0,s),W={...B,ptyTabs:[...B.ptyTabs,M],selectedPtyTabId:M.id};return await T(async()=>{let K=await Ce(r,B.id),J=K.ptyTabs.find(ue=>ue.kind==="agent")??null;if(J){await re(r,{...K,selectedPtyTabId:J.id});return}await re(r,{...K,ptyTabs:[...K.ptyTabs,M],selectedPtyTabId:M.id})}),W}L=()=>{ta();let B=vt(_.width,_.height),O=i.mode==="main"?Oo(B,ro(N(i.shell),l),{centerOnly:i.shell.centerZoomed}):i.variant==="boot"?Do(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="pause"?Lo(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="options"?Bs(B,{menuIndex:i.menuIndex,optionsMenuItems:Ws}):i.variant==="runners"?Bs(B,{menuIndex:Kt(i).menuIndex,optionsMenuItems:Ns(s,Kt(i)),optionsMessage:Vo(Kt(i)),optionsSubtitle:"Runners"}):Mo(B);x&&(_.moveTo(1,1),_.eraseDisplayBelow(),x=!1),_.noFormat(Ih(O)),_.hideCursor(!0)};function ta(){let B=i.mode==="main"&&i.shell.inputMode==="terminal"?"terminal":"control";B!==A&&(A=B,_.grabInput(B==="terminal"?{mouse:"button"}:!0))}let ra=()=>{process.stdout.off("resize",Xs),_.removeListener("key",zs),_.removeListener("unknown",Vs),_.removeListener("mouse",Gs),S&&(clearTimeout(S),S=null),P&&(clearTimeout(P),P=null),E&&(clearTimeout(E),E=null),H&&(clearInterval(H),H=null),z.disposeAll(),_.grabInput(!1),_.hideCursor(!1),_.fullscreen(!1)},xr=B=>{ra(),g(B)},sa=async()=>{if(i.mode!=="main"||p)return;let B=i.shell,O=B.taskPromptInput?.trim()??"";if(!B.selectedRepoId&&!B.selectedWorkspaceId){i={mode:"main",shell:N({...B,taskPromptError:"Select a workspace first."})},L();return}if(O.length===0){i={mode:"main",shell:N({...B,taskPromptError:"Task prompt cannot be empty."})},L();return}p=!0,i={mode:"main",shell:N({...B,actionMessage:`Creating ${B.selectedRunner} task in ${B.selectedWorkspaceId??B.selectedRepoId}...`})},L();let M=null;try{M=await Ph(r,B.selectedRepoId,B.selectedWorkspaceId,O,B.selectedRunner),await U();let W=N({...i.shell,selectedRepoId:M.repoId,selectedWorkspaceId:M.workspaceId,selectedTaskId:M.id,selectedPtyTabId:M.selectedPtyTabId,selectedLeftItemId:`task:${M.id}`,activeTab:M.selectedPtyTabId??"agent",inputMode:"terminal",taskPromptInput:null,taskPromptError:null,actionMessage:null}),K=await z.ensureSession(M.id,W.selectedPtyTabId??ea(M,"agent"),Hs(vt(_.width,_.height)));h=Us(W.selectedPtyTabId),i={mode:"main",shell:jt(W,K)},c(i.shell)}catch(W){W instanceof Pr&&(M=W.task);let K=W instanceof Error?W.message:"Failed to create task.";M&&(await re(r,{...M,status:"draft",runnerSession:{...M.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:K}).catch(()=>{}),await U().catch(()=>{})),i={mode:"main",shell:N({...i.shell,inputMode:"control",selectedTaskId:M?.id??i.shell.selectedTaskId,selectedPtyTabId:M?.selectedPtyTabId??i.shell.selectedPtyTabId,selectedLeftItemId:M?`task:${M.id}`:i.shell.selectedLeftItemId,activeTab:M?.selectedPtyTabId??i.shell.activeTab,taskPromptInput:M?null:"",taskPromptError:K,actionMessage:null})}}finally{p=!1,L()}},ia=B=>{if(i.mode!=="main")return;let O=i.shell;if(O.taskPromptInput!==null){if(B==="ESCAPE"){i={mode:"main",shell:N({...O,taskPromptInput:null,taskPromptError:null,actionMessage:null})},L();return}if(tt(B)){sa();return}if(B==="BACKSPACE"){i={mode:"main",shell:N({...O,taskPromptInput:O.taskPromptInput.slice(0,-1),taskPromptError:null})},L();return}if(B==="CTRL_R"){i={mode:"main",shell:N({...O,selectedRunner:ks(O.selectedRunner,o),taskPromptError:null})},L();return}zn(B)&&(i={mode:"main",shell:N({...O,taskPromptInput:`${O.taskPromptInput}${B}`,taskPromptError:null})},L())}},na=B=>{if(i.mode!=="main")return;let O=i.shell.workspaceBrowser;if(O){if(B==="ESCAPE"){i={mode:"main",shell:N({...i.shell,workspaceBrowser:null,actionMessage:null})},L();return}if(B==="UP"||B==="k"){i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,selectedIndex:Math.max(0,O.selectedIndex-1),error:null}})},L();return}if(B==="DOWN"||B==="j"){let M=Math.max(0,O.entries.length-1);i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,selectedIndex:Math.min(M,O.selectedIndex+1),error:null}})},L();return}if(B==="LEFT"||B==="h"){te(qs.dirname(O.cwd)).catch(M=>{let W=M instanceof Error?M.message:"Failed to open parent directory.";i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,error:W}})},L()});return}if(B==="RIGHT"||B==="l"||tt(B)){let M=O.entries[O.selectedIndex]??null;if(!M)return;if((B==="RIGHT"||B==="l")&&(M.kind==="directory"||M.kind==="repo")){te(M.path).catch(W=>{let K=W instanceof Error?W.message:"Failed to open directory.";i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,error:K}})},L()});return}Ot(r,M.path).then(async W=>{await U();let K=W.repos[0]??null;i={mode:"main",shell:N({...i.shell,workspaceBrowser:null,selectedLeftItemId:`workspace:${W.workspace.id}`,selectedWorkspaceId:W.workspace.id,selectedRepoId:K?.id??null,selectedTaskId:null,selectedPtyTabId:null,actionMessage:`Registered workspace: ${W.workspace.name??W.workspace.id}`})},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to add workspace.";i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,error:K}})},L()})}}},zs=B=>{let O=typeof B=="string"?B:"";if(i.mode==="main"&&i.shell.taskPromptInput!==null){ia(O);return}if(i.mode==="main"&&i.shell.workspaceBrowser!==null){na(O);return}if(i.mode==="main"){let M=qn(i.shell,O,R(i.shell));if(M.exit){xr(0);return}if(M.detachTerminal){z.detach(),i={mode:"main",shell:N(M.state)},c(i.shell),L();return}if(i.shell.inputMode==="terminal"){if(M.changed){i={mode:"main",shell:N(M.state)},c(i.shell),L();return}if(h&&tt(O)){h=!1;return}h&&(h=!1),d=Eh(O)?{key:O,at:Date.now()}:null;let W=Ah(O,i.shell.terminal.scrolledBack??!1);if(W!==0){Er(W);return}z.writeKey(O);return}if(O==="CTRL_C"){xr(0);return}if(O==="?"&&i.shell.inputMode==="control"){i={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:i.shell},x=!0,L();return}if(M.pause){i={mode:"overlay",variant:"pause",menuIndex:0,optionsMessage:null,shell:N(M.state)},x=!0,L();return}if(M.beginTaskPrompt){i={mode:"main",shell:N(M.state)},c(i.shell),L();return}if(M.openWorkspaceBrowser){te(t).catch(W=>{let K=W instanceof Error?W.message:"Failed to browse workspaces.";i={mode:"main",shell:N({...M.state,workspaceBrowser:{cwd:t,entries:[],selectedIndex:0,error:K}})},L()});return}if(M.createPtyTab){Y(M.state,M.createPtyTabKind,M.createPtyTabRunner).then(W=>{I(W)}).catch(W=>{let K=W instanceof Error?W.message:"Failed to create tab.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.closePtyTab){ee(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to close tab.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.syncPullRequest){we(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to create or sync PR.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.refreshPullRequestChecks){ke(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to refresh PR checks.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.mergeTask){xe(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to merge PR.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.closeTask){Ue(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to close task.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.removeWorkspace){st(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to remove workspace.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.attachTerminal){I(M.state);return}if(M.refreshInspection){i={mode:"main",shell:N(M.state)},c(i.shell),L(),V(i.shell).catch(W=>{let K=W instanceof Error?W.message:"Failed to refresh inspection.";i={mode:"main",shell:N({...i.shell,actionMessage:K})},L()});return}M.changed&&(i={mode:"main",shell:N(M.state)},j(i.shell).catch(()=>{}),c(i.shell),L());return}if(i.variant==="help"){i.viaOptions&&i.parentVariant?i={mode:"overlay",variant:"options",menuIndex:1,optionsMessage:null,shell:i.shell,parentVariant:i.parentVariant}:i.parentVariant?i={mode:"overlay",variant:i.parentVariant,menuIndex:1,optionsMessage:null,shell:i.shell}:i={mode:"main",shell:N(i.shell)},x=!0,L();return}if(i.variant==="options"){oa(O);return}if(i.variant==="runners"){aa(O);return}if(i.optionsMessage){(O==="ESCAPE"||tt(O))&&(i={...i,optionsMessage:null},L());return}if(O==="UP"||O==="k"){i={...i,menuIndex:Math.max(0,i.menuIndex-1)},L();return}if(O==="DOWN"||O==="j"){i={...i,menuIndex:Math.min(2,i.menuIndex+1)},L();return}if(O==="ESCAPE"){i.variant==="pause"&&(i={mode:"main",shell:N(i.shell)},x=!0,L());return}if(tt(O)){if(i.menuIndex===0){i={mode:"main",shell:N({...i.shell,inputMode:"control"})},x=!0,L(),C();return}if(i.menuIndex===1){let M=i.variant==="boot"||i.variant==="pause"?i.variant:void 0;i={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:i.shell,...M!==void 0?{parentVariant:M}:{}},x=!0,L();return}xr(0)}};function oa(B){if(i.mode!=="overlay"||i.variant!=="options")return;let O=Go(i.menuIndex,B);if(O.kind!=="noop"){if(O.kind==="render"){i={...i,menuIndex:O.menuIndex},L();return}if(O.kind==="back"){i.parentVariant&&(i={mode:"overlay",variant:i.parentVariant,menuIndex:1,optionsMessage:null,shell:i.shell},x=!0,L());return}if(O.kind==="help"){let M=i.parentVariant;i={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:i.shell,viaOptions:!0,...M!==void 0?{parentVariant:M}:{}},x=!0,L();return}if(O.kind==="runners"){let M=i.parentVariant;i={mode:"overlay",variant:"runners",menuIndex:0,optionsMessage:null,shell:i.shell,...M!==void 0?{parentVariant:M}:{}},x=!0,L()}}}function aa(B){if(i.mode!=="overlay"||i.variant!=="runners")return;let O=Xo(Kt(i),s,B,o);if(O.kind!=="noop"){if(O.kind==="back"){let M=i.parentVariant;i={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:i.shell,...M!==void 0?{parentVariant:M}:{}},x=!0,L();return}if(O.kind==="render"){i={...i,runnerOptions:O.state},L();return}F(O.config).then(()=>{i.mode!=="overlay"||i.variant!=="runners"||(i={...i,runnerOptions:O.state},L())}).catch(M=>{if(i.mode!=="overlay"||i.variant!=="runners")return;let W=M instanceof Error?M.message:"Failed to save runner option.";i={...i,runnerOptions:{...Kt(i),message:W}},L()})}}let Vs=B=>{let O=xh(B);if(i.mode!=="main"||i.shell.inputMode!=="terminal"||O.length===0)return;if(O.includes("")){z.detach(),h=!1,d=null,i={mode:"main",shell:N({...i.shell,inputMode:"control",actionMessage:null})},c(i.shell),L();return}let M=Dh(O);if(M!==0){Er(M);return}if(h&&O!=="\r"&&O!==`
104
+ `&&O!==`\r
105
+ `&&(h=!1),Lh(h,d,O)){h=!1;return}z.write(O)},Gs=B=>{if(i.mode!=="main")return;if(i.shell.inputMode==="control"){la(Jo(B));return}let O=Jo(B);O!==0&&Er(O)};function Er(B){u+=B,!S&&(S=setTimeout(()=>{S=null;let O=u;u=0,O!==0&&(ca(O),L())},16))}function ca(B){z.scrollViewport(B),i={mode:"main",shell:X(i.shell)}}function la(B){B!==0&&(b+=B,!P&&(P=setTimeout(()=>{P=null;let O=b;if(b=0,O===0||i.mode!=="main"||i.shell.inputMode!=="control")return;let M=et(i.shell,O,R(i.shell));if(M.changed){if(M.refreshInspection){i={mode:"main",shell:N(M.state)},c(i.shell),L(),V(i.shell).catch(W=>{let K=W instanceof Error?W.message:"Failed to refresh inspection.";i={mode:"main",shell:N({...i.shell,actionMessage:K})},L()});return}i={mode:"main",shell:N(M.state)},c(i.shell),L()}},16)))}let Xs=()=>{x=!0,i.mode==="main"&&i.shell.inputMode==="terminal"&&(z.resize(Hs(vt(_.width,_.height))),i={mode:"main",shell:X(i.shell)}),L()};process.stdout.on("resize",Xs),_.grabInput(!0),A="control",_.hideCursor(!0),_.fullscreen(!0),_.on("key",zs),_.on("unknown",Vs),_.on("mouse",Gs),H=setInterval(()=>{Xe()},(s.github?.watchIntervalSeconds??5)*1e3),L()})}async function qt(e,t,r){let s=Ke(e),[o,m,y]=await Promise.all([dt(s),Me(s),Ne(s)]),n=Zo(y.tasks,t),l=t?{selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath}:{},f=n?await gn(n,l):null;return{workspaceRoot:e,workspaces:m.filter(k=>k.status==="active"),repos:o,tasks:y.tasks,inspection:f,...r?{enabledRunnerIds:r}:{}}}function Zo(e,t){return t?.selectedTaskId?e.find(r=>r.id===t.selectedTaskId)??null:null}function yh(e,t){return hr(e,t)}function vh(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let m=1;m<o.length;m+=1)if(r.has(o.slice(0,m).join("/")))return!1;return!0})}function Sh(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`),r.kind==="project"&&t.push(`new-task-workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="repo"&&t.push(`new-task:${r.primaryRepoId}`)}else for(let r of e.repos){t.push(`repo:${r.id}`);for(let s of e.tasks.filter(o=>o.repoId===r.id))t.push(`task:${s.id}`);t.push(`new-task:${r.id}`)}return t.push("new-workspace"),t}function Th(e,t,r){let s=e.tasks.find(m=>m.ptyTabs.some(y=>y.id===t))??null,o=s?.ptyTabs.find(m=>m.id===t)??null;return{cwd:s?.worktreePath??r,command:o?.kind==="agent"?Rh(o):[]}}function Rh(e){return e.command.length>0?e.command:["codex"]}function Kt(e){return e.runnerOptions??{menuIndex:e.menuIndex,message:e.optionsMessage}}function Ch(e,t,r){return e.ptyTabs.find(s=>s.id===t)?.kind??r}function Yo(e,t,r,s={}){let o=r??e.runner,m=be(o),y=t==="agent"?m.defaultAgentTitle:"Terminal",n=t==="agent"&&r&&r!==e.runner?`${e.id}:${r}`:`${e.id}:${t}`,l=new Set(e.ptyTabs.map(c=>c.id)),f=1,k=n;for(;l.has(k);)f+=1,k=`${n}-${f}`;let a=new Date().toISOString(),w=r&&r!==e.runner?r:void 0;return{id:k,kind:t,...w?{runner:w}:{},title:f===1?y:`${y} ${f}`,command:t==="agent"?me(o,void 0,s):[],createdAt:a,updatedAt:a}}async function Ph(e,t,r,s,o){let m=await ye(e);zt(o,m);let y=r?await rr(e,r,s,{runner:o,config:m}):await Et(e,t??"",s,{runner:o,config:m});try{let f=ct();await Q(lt(Lr(o,m).executable,{cwd:y.repoRoot,env:f}),["--help"],{cwd:y.repoRoot,env:f})}catch(f){let k=f instanceof Error?f.message:"Failed to start runner.",a={...y.task,status:"draft",runnerSession:{...y.task.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:k};throw await re(e,a),new Pr(k,a)}let n=ea(y.task,"agent"),l={...y.task,status:"running",selectedPtyTabId:n,runnerSession:{...y.task.runnerSession,startedAt:new Date().toISOString(),lastKnownState:"running"}};return await re(e,l),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),version:1,selectedRepoId:l.repoId,selectedWorkspaceId:l.workspaceId,selectedTaskId:l.id,selectedPtyTabId:l.selectedPtyTabId,inputMode:"control",focusedRegion:"center",activeTab:l.selectedPtyTabId??"agent",selectedActionId:"commit",updatedAt:new Date().toISOString()}),l}var Pr=class extends Error{task;constructor(t,r){super(t),this.name="InteractiveTaskStartupError",this.task=r}};function ea(e,t){let r=e.ptyTabs.find(s=>s.kind===t);if(!r)throw new Error(`Task ${e.id} is missing its ${t} PTY tab.`);return r.id}function Hs(e){return{columns:Math.max(20,e.width-Be.leftWidth-Be.rightWidth-Be.dividerWidth-Tr*2),rows:Math.max(5,e.height-Be.topRailHeight-5)}}function Ih(e){return e.split(`
106
+ `).map((t,r)=>`\x1B[${r+1};1H${t}`).join("")}function xh(e){return typeof e=="string"?e:Buffer.isBuffer(e)?e.toString("utf8"):""}function Eh(e){return e.length===1||tt(e)||e==="BACKSPACE"||e==="TAB"}function Us(e){return typeof e=="string"&&new RegExp(`:(?:agent|${ce.join("|")})(?:-\\d+)?$`).test(e)}function Ah(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 Jo(e){return e==="MOUSE_WHEEL_UP"?-3:e==="MOUSE_WHEEL_DOWN"?3:0}function Dh(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 Lh(e,t,r){return r.length===0?!1:e&&(r==="\r"||r===`
107
107
  `||r===`\r
108
- `)?!0:!t||Date.now()-t.at>=30?!1:r===t.key?!0:r.length<=4&&r.split("").every(s=>s===t.key)}async function Ih(e){let t=await dh(e,{withFileTypes:!0}),r=[];for(let s of t){if(!s.isDirectory())continue;let o=Hs.join(e,s.name);r.push({name:s.name,path:o,kind:await xh(o)?"repo":"directory"})}return r.sort((s,o)=>s.kind!==o.kind?s.kind==="repo"?-1:1:s.name.localeCompare(o.name)),{cwd:e,entries:r,selectedIndex:0,error:null}}async function xh(e){let t=Hs.join(e,".git");return await uh(t).catch(()=>null)!==null}function Ir(){return process.cwd()}async function Eh(){try{if(process.argv[2]==="__craig-daemon"){let n=process.argv[3]??Ir(),l=Ke(n);return await yt(n),await bo(l),0}if(process.argv[2]==="__craig-daemon-shutdown"){let n=process.argv[3]??Ir(),l=Ke(n);return await yt(n),await yo(l),0}let e=Xs(process.argv.slice(2)),t=Ir(),r=Ke(t),s=await yt(t),o={paths:r};if(e.mode==="interactive")return await Yo({uiStateFile:r.uiStateFile,workspaceRoot:r.workspaceRoot});if(!e.command)throw new Error("Command mode requires a command.");let m=await un(e.command,o),y=hn(m);return y.length>0&&process.stdout.write(`${y}
108
+ `)?!0:!t||Date.now()-t.at>=30?!1:r===t.key?!0:r.length<=4&&r.split("").every(s=>s===t.key)}async function Mh(e){let t=await mh(e,{withFileTypes:!0}),r=[];for(let s of t){if(!s.isDirectory())continue;let o=qs.join(e,s.name);r.push({name:s.name,path:o,kind:await Oh(o)?"repo":"directory"})}return r.sort((s,o)=>s.kind!==o.kind?s.kind==="repo"?-1:1:s.name.localeCompare(o.name)),{cwd:e,entries:r,selectedIndex:0,error:null}}async function Oh(e){let t=qs.join(e,".git");return await _h(t).catch(()=>null)!==null}function Ir(){return process.cwd()}async function Bh(){try{if(process.argv[2]==="__craig-daemon"){let n=process.argv[3]??Ir(),l=Ke(n);return await yt(n),await vo(l),0}if(process.argv[2]==="__craig-daemon-shutdown"){let n=process.argv[3]??Ir(),l=Ke(n);return await yt(n),await So(l),0}let e=Js(process.argv.slice(2)),t=Ir(),r=Ke(t),s=await yt(t),o={paths:r};if(e.mode==="interactive")return await Qo({uiStateFile:r.uiStateFile,workspaceRoot:r.workspaceRoot});if(!e.command)throw new Error("Command mode requires a command.");let m=await un(e.command,o),y=hn(m);return y.length>0&&process.stdout.write(`${y}
109
109
  `),0}catch(e){let t=e instanceof Error?e.message:"Unknown Craig error";return process.stderr.write(`${t}
110
- `),1}}var Ah=await Eh();process.exit(Ah);
110
+ `),1}}var $h=await Bh();process.exit($h);