craig-cli 0.4.7 → 0.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +40 -40
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
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"&&ei(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)&&ti(t.checks)&&ri(t.lastCommit)&&si(t.pullRequest)&&Xa(t.artifacts)&&ii(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(Zs)}function qa(e){return Array.isArray(e)&&e.every(Zs)}function Zs(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)&&ti(t.checks)&&ri(t.lastCommit)&&si(t.pullRequest)&&ii(t.cleanup)}function Ka(e){if(ei(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 ei(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 ti(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 ri(e){return e===null||typeof e=="object"&&e!==null&&typeof e.sha=="string"&&typeof e.message=="string"&&typeof e.committedAt=="string"}function si(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 ii(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 ni(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr}}catch(s){if(oi(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 ni(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr,exitCode:0}}catch(s){if(oi(s))return{stdout:s.stdout??"",stderr:s.stderr??"",exitCode:typeof s.code=="number"?s.code:null};throw s}}function oi(e){return e instanceof Error}var ni,Ie=$e(()=>{"use strict";ni=oc(nc)});import{readFile as Sc,readdir as Tc,rm as Rc}from"node:fs/promises";import _i 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,_i.basename(s.name,".json"))))).sort((s,o)=>s.name.localeCompare(o.name)||s.id.localeCompare(o.id))}async function wi(e,t){await Rc(Yt(e,t),{force:!0})}function Yt(e,t){return _i.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 ki 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,ki.basename(s.name,".json"))))).sort((s,o)=>s.id.localeCompare(o.id))}async function bi(e,t){await xc(Qt(e,t),{force:!0})}function Qt(e,t){return ki.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:()=>as,removeWorkspace:()=>$t,removeWorkspaceRecord:()=>nr,restoreWorkspace:()=>cs});import{readdir as dl,realpath as Ji,stat as ul}from"node:fs/promises";import Qe from"node:path";async function Ot(e,t){let r=Qe.resolve(e.workspaceRoot,t);if(!(await ul(r).catch(()=>null))?.isDirectory())throw new Error(`Workspace path does not exist: ${r}`);return await tn(r)?hl(e,r):fl(e,r)}async function as(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 cs(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 hl(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 fl(e,t){let r=await pl(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=ml(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 pl(e,t){let r=await dl(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:gl(e,Qe.basename(t)),name:Qe.basename(t),rootPath:t,defaultBranch:r,createdAt:s,updatedAt:s}}function gl(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 ml(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 bi(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=`
|
|
2
|
+
var ua=Object.create;var Lr=Object.defineProperty;var ha=Object.getOwnPropertyDescriptor;var fa=Object.getOwnPropertyNames;var pa=Object.getPrototypeOf,ga=Object.prototype.hasOwnProperty;var $e=(e,t)=>()=>(e&&(t=e(e=0)),t);var ma=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),_a=(e,t)=>{for(var r in t)Lr(e,r,{get:t[r],enumerable:!0})},wa=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of fa(t))!ga.call(e,o)&&o!==r&&Lr(e,o,{get:()=>t[o],enumerable:!(s=ha(t,o))||s.enumerable});return e};var ka=(e,t,r)=>(r=e!=null?ua(pa(e)):{},wa(t||!e||!e.__esModule?Lr(r,"default",{value:e,enumerable:!0}):r,e));function be(e){return ba[e]}function Mr(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 Vt(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=[Mr(e,r).executable];return t&&t.length>0&&s.push(t),s}var ce,ba,Ae=$e(()=>{"use strict";ce=["codex","cursor","claude"],ba={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 Pa}from"node:crypto";import{open as Ia,readFile as Yh,rename as xa,rm as Ea}from"node:fs/promises";import Or from"node:path";async function le(e,t){let r=Or.dirname(e),s=Or.join(r,`.${Or.basename(e)}.${process.pid}.${Date.now()}.${Pa()}.tmp`),o=await Ia(s,"w");try{let m=`${JSON.stringify(t,null,2)}
|
|
3
|
+
`;await o.writeFile(m,"utf8"),await o.sync(),await o.close(),await xa(s,e)}catch(m){throw await o.close().catch(()=>{}),await Ea(s,{force:!0}).catch(()=>{}),m}}var Fe=$e(()=>{"use strict"});import{readFile as $a}from"node:fs/promises";async function Re(e){let t=await $a(e.indexFile,"utf8"),r=JSON.parse(t);return $r(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 $r(e,t,r){if(!Fa(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 Fa(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 Wa}from"node:fs/promises";async function Ce(e,t){let r=await Wa(Fr(e,t),"utf8"),s=JSON.parse(r);return Na(s,Fr(e,t))}async function re(e,t){let r={...t,updatedAt:new Date().toISOString()};await le(Fr(e,t.id),r)}async function Wr(e,t){let r=await Re(e);r.taskIds.includes(t)||await ot(e,{...r,taskIds:[...r.taskIds,t]})}function Fr(e,t){return`${e.tasksDir}/${t}.json`}function Na(e,t){let r=ja(e);if(!Ua(r))throw new Error(`Craig task record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function ja(e){if(typeof e!="object"||e===null)return e;let t=e;return{...t,runner:Nr(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:za(t),bundlePath:typeof t.bundlePath=="string"||t.bundlePath===null?t.bundlePath:null,selectedRepoTargetId:typeof t.selectedRepoTargetId=="string"||t.selectedRepoTargetId===null?t.selectedRepoTargetId:null,repoTargets:qa(t.repoTargets),runnerSession:t.runnerSession??Ha(t),checks:Ja(t),lastCommit:t.lastCommit??null,pullRequest:Qa(t),artifacts:ec(t),cleanup:tc(t)}}function Ha(e){if(typeof e.title!="string")return null;let t=Nr(e.runner);return{command:me(t,e.title),pid:null,startedAt:null,lastKnownState:e.status==="running"?"running":"starting",exitCode:null,exitedAt:null}}function Ua(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||Ka(t.repoTargets))&&Ga(t.runnerSession)&&Xa(t.prompt)&&ri(t.checks)&&si(t.lastCommit)&&ii(t.pullRequest)&&Ya(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 qa(e){if(Array.isArray(e))return e.filter(ei)}function Ka(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 za(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 Va(e.id,e.title,t,Nr(e.runner))}function Va(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 Nr(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 Ga(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 Xa(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 Ya(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 Ja(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 Qa(e){let t=e.pullRequest;return t?{...t,mergeStateStatus:t.mergeStateStatus??null,requiredChecks:Za(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 Za(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 ec(e){let t=e.artifacts;return t?{...t,checkSummaryPath:t.checkSummaryPath??null}:{logPath:null,checkSummaryPath:null,prDraftPath:null,prStatusPath:null}}function tc(e){return e.cleanup??{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}var _e=$e(()=>{"use strict";Fe();at();Ae()});import{readFile as rc}from"node:fs/promises";async function De(e){try{let t=await rc(e.uiStateFile,"utf8"),r=JSON.parse(t);return sc(r,e.uiStateFile)}catch(t){if(nc(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 sc(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")||!Gt(e,"openInspectionKind")||!Gt(e,"selectedFileTreePath")||!Gt(e,"selectedFilePath")||!Gt(e,"selectedDiffPath")||!ic(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 Gt(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||e[t]===null||typeof e[t]=="string")}function ic(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||Array.isArray(e[t])&&e[t].every(r=>typeof r=="string"))}function nc(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 oc}from"node:child_process";import{promisify as ac}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 oe(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=ac(oc)});import{readFile as Tc,readdir as Rc,rm as Cc}from"node:fs/promises";import wi from"node:path";async function Le(e,t){let r=await Tc(Jt(e,t),"utf8"),s=JSON.parse(r);return Pc(s,Jt(e,t))}async function Qt(e,t){await le(Jt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function dt(e){let t=await Rc(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 Cc(Jt(e,t),{force:!0})}function Jt(e,t){return wi.join(e.reposDir,`${t}.json`)}function Pc(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 Ic,readdir as xc,rm as Ec}from"node:fs/promises";import bi from"node:path";async function Pt(e,t){let r=await Ic(Zt(e,t),"utf8"),s=JSON.parse(r);return Ac(s,Zt(e,t))}async function bt(e,t){await le(Zt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function Me(e){let t=await xc(e.workspacesDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Pt(e,bi.basename(s.name,".json"))))).sort((s,o)=>s.id.localeCompare(o.id))}async function yi(e,t){await Ec(Zt(e,t),{force:!0})}function Zt(e,t){return bi.join(e.workspacesDir,`${t}.json`)}function Ac(e,t){let r=Dc(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 Dc(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 It=$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(Wc(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 Wc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var Dt=$e(()=>{"use strict";at();_e()});var on={};_a(on,{addWorkspace:()=>Bt,archiveWorkspace:()=>$t,listWorkspaces:()=>ls,removeWorkspace:()=>Ft,removeWorkspaceRecord:()=>or,restoreWorkspace:()=>ds});import{readdir as hl,realpath as Ji,stat as fl}from"node:fs/promises";import Qe from"node:path";async function Bt(e,t){let r=Qe.resolve(e.workspaceRoot,t);if(!(await fl(r).catch(()=>null))?.isDirectory())throw new Error(`Workspace path does not exist: ${r}`);return await rn(r)?pl(e,r):gl(e,r)}async function ls(e,t){return{kind:"listWorkspaces",workspaces:(await Me(e)).filter(s=>s.status===(t.archived?"archived":"active")),archivedOnly:t.archived}}async function $t(e,t){let s={...await Pt(e,t),status:"archived",archivedAt:new Date().toISOString()};return await bt(e,s),await nn(e,t),{kind:"archiveWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function ds(e,t){let s={...await Pt(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 Ft(e,t){let r=await Pt(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 or(e,t),await nn(e,t),{kind:"removeWorkspace",workspaceId:r.id,rootPath:r.rootPath??""}}async function pl(e,t){let r=await sn(t),s=await dt(e),o=s.find(a=>a.rootPath===t)??null,m=o?Zi(o,r):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 await Qt(e,m),l||await bt(e,k),await en(e,{repoIds:[m.id],workspaceIds:[k.id]}),await tn(e,k,m.id),{kind:"createWorkspace",workspace:k,repos:[m],created:!l}}async function gl(e,t){let r=await ml(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=wl(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=>Qt(e,f))),await bt(e,l),await en(e,{repoIds:n,workspaceIds:[l.id]}),await tn(e,l,n[0]??null),{kind:"createWorkspace",workspace:l,repos:r,created:!m}}async function ml(e,t){let r=await hl(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 rn(y))continue;let n=s.find(f=>f.rootPath===y)??o.find(f=>f.rootPath===y),l=await sn(y);o.push(n?Zi(n,l):Qi([...s,...o],y,l))}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:_l(e,Qe.basename(t)),name:Qe.basename(t),rootPath:t,defaultBranch:r,createdAt:s,updatedAt:s}}function Zi(e,t){return e.defaultBranch===t?e:{...e,defaultBranch:t,updatedAt:new Date().toISOString()}}function _l(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 wl(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 en(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 tn(e,t,r){await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),selectedRepoId:r,selectedWorkspaceId:t.id,selectedTaskId:null})}async function rn(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 sn(e){let t=await oe("git",["symbolic-ref","--quiet","--short","refs/remotes/origin/HEAD"],{cwd:e}),r=t.stdout.trim().replace(/^origin\//,"");if(t.exitCode===0&&r.length>0)return r;for(let m of["main","master","trunk"])if((await oe("git",["show-ref","--verify","--quiet",`refs/heads/${m}`],{cwd:e})).exitCode===0)return m;let o=(await Q("git",["branch","--show-current"],{cwd:e})).stdout.trim();return o.length>0?o:"HEAD"}async function or(e,t){await yi(e,t);let r=await Re(e);await ot(e,{...r,workspaceIds:r.workspaceIds.filter(s=>s!==t)})}async function nn(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 Wt=$e(()=>{"use strict";at();ut();It();kt();Ie();Dt()});var uo=ma(lo=>{(()=>{"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
|
|
|
@@ -26,7 +26,7 @@ ${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=
|
|
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=lo;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
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
|
|
|
@@ -36,7 +36,7 @@ ${fe()}`);return{mode:"command",command:{kind:"listWorkspaces",archived:r}}}if(t
|
|
|
36
36
|
|
|
37
37
|
`+fe());if(r!==-1&&s!==-1)throw new Error(`Task creation accepts either '--repo' or '--workspace', not both.
|
|
38
38
|
|
|
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:
|
|
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
41
|
`+fe());if(y!==void 0&&y.length===0)throw new Error(`Workspace id cannot be empty.
|
|
42
42
|
|
|
@@ -46,65 +46,65 @@ ${fe()}`);return{mode:"command",command:{kind:"listWorkspaces",archived:r}}}if(t
|
|
|
46
46
|
|
|
47
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
|
-
${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:
|
|
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:ya(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
51
|
${fe()}`);return{mode:"command",command:{kind:"mergeTask",taskId:Te(t[2]),preserveWorktree:r}}}throw new Error(`Unsupported command: ${t.join(" ")}
|
|
52
52
|
|
|
53
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
|
-
${fe()}`);return t}function
|
|
56
|
+
${fe()}`);return t}function ya(e){let t=e.trim();if(t.length===0)throw new Error(`Repo id cannot be empty.
|
|
57
57
|
|
|
58
|
-
${fe()}`);return t}import
|
|
59
|
-
`,"utf8")}function Qs(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 Jh,rm as Qh}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 ai}from"node:os";import Je from"node:path";var lc=[Je.join(ai(),".local","bin"),Je.join(ai(),".cursor","bin"),"/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin"];function li(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:li(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 ci(r)?r:null}for(let r of li(t.env)){let s=Je.join(r,e);if(ci(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 ci(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 di(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 ui(e,t,r){await Q("tmux",["resize-window","-t",t,"-x",`${r.columns}`,"-y",`${r.rows}`],{cwd:e})}async function hi(e,t,r){await Q("tmux",["send-keys","-t",e,t,"C-m"],{cwd:r})}async function fi(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??gi(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 pi(e,t){await Q("tmux",["kill-session","-t",t],{cwd:e})}function gi(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`${gi(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 hi(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 di(t.repoRoot,t.taskId,t.worktreePath);t.logPath&&await fi(r.paneId,t.logPath,t.repoRoot);let s=await mi({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 ui(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 mi({paneId:e.paneId,windowTarget:e.windowTarget,alive:r.exitCode===0&&r.stdout.split(/\s+/).some(s=>s.trim()===e.paneId)})}async function mi(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 yi(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 vi(e){await Q("git",["add","-A"],{cwd:e})}async function Si(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 Ti(e){await Q("git",["remote","get-url","origin"],{cwd:e})}async function Ri(e,t){await Q("git",["push","-u","origin",t],{cwd:e})}async function Ci(e,t){await Q("git",["worktree","remove","--force",t],{cwd:e})}Ae();at();async function Pi(e,t){let r=await Re(e),s=xi(new Date),o=Ei(r.taskIds,s);for(;;){let m=`task_${s}_${String(o).padStart(2,"0")}`,y=`craig/${m}`;if(!await yi(t,y))return m;o+=1}}async function Ii(e){let t=await Re(e),r=xi(new Date),s=Ei(t.taskIds,r);return`task_${r}_${String(s).padStart(2,"0")}`}function xi(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 Ei(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 Pi(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 Ii(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=Ai(y,r,n,l,s.config??{}),d={id:y,title:r,slug:Di(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 Ai(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=Ai(t.taskId,t.prompt,r,t.runner,t.config);return{id:t.taskId,title:t.prompt,slug:Di(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 Di(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}async function Mi(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?Li.resolve(e.workspaceRoot,l.artifacts.logPath):Li.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 Oi 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?Oi.isAbsolute(t.artifacts.logPath)?t.artifacts.logPath:Oi.join(e.workspaceRoot,t.artifacts.logPath):null}async function Bi(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 $i(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 Wi,readFile as Kc,writeFile as zc}from"node:fs/promises";import sr from"node:path";Ie();import Fi from"node:path";function Dt(e,t){return t?Fi.isAbsolute(t)?t:Fi.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 Ni(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 Wi(sr.dirname(r),{recursive:!0});try{await Kc(r,"utf8")}catch{await zc(r,`## Summary
|
|
58
|
+
${fe()}`);return t}import Mi from"node:path";Ae();import{mkdir as va,readFile as Sa,writeFile as Ta}from"node:fs/promises";import Ra from"node:path";async function ye(e){try{let t=await Sa(e.configFile,"utf8"),r=JSON.parse(t);return Zs(r,e.configFile)}catch(t){if(Ca(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 va(Ra.dirname(e.configFile),{recursive:!0}),await Ta(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 Ca(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}Fe();import{readFile as Aa,readdir as ef,rm as tf}from"node:fs/promises";import Da from"node:path";async function Ye(e,t){let r=await Aa(Br(e,t),"utf8"),s=JSON.parse(r);return La(s,Br(e,t))}async function nt(e,t){await le(Br(e,t.id),{...t,updatedAt:new Date().toISOString()})}function Br(e,t){return Da.join(e.sessionsDir,`${t}.json`)}function La(e,t){let r=Ba(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")||!Oa(r.attach)||!Ma(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 Ma(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 Oa(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 Ba(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 Xt(e){return`'${e.replace(/'/g,"'\\''")}'`}import{accessSync as cc,constants as lc}from"node:fs";import{homedir as ci}from"node:os";import Je from"node:path";var dc=[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 hc([...(e.PATH??"").split(Je.delimiter).filter(t=>t.length>0),...e.CRAIG_DISABLE_COMMAND_PATH_FALLBACKS==="1"?[]:dc])}function ct(e=process.env){return{...e,PATH:di(e).join(Je.delimiter)}}function uc(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=uc(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 cc(e,lc.X_OK),!0}catch{return!1}}function hc(e){return[...new Set(e)]}Ae();Ie();import{spawn as fc}from"node:child_process";import{createHash as pc}from"node:crypto";import gc from"node:path";var mc="craig";async function ui(e,t,r){let s=jr(e,t),o=wc(),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=bc(m.stdout);return await _c(e,s),y}async function _c(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 >> ${Xt(t)}`],{cwd:r})}async function Yt(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 vc(e,["attach-session","-t",o])}async function gi(e,t){await Q("tmux",["kill-session","-t",t],{cwd:e})}function mi(e){let r=gc.basename(e).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"repo",s=pc("sha1").update(e).digest("hex").slice(0,8);return`${mc}-${r}-${s}`}function jr(e,t){return`${mi(e)}-${t.toLowerCase()}`}function wc(){let e=kc();return e?["-x",`${e.columns}`,"-y",`${e.rows}`]:[]}function kc(){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 bc(e){let t=yc(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 yc(e){return e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0)}async function vc(e,t){await new Promise((r,s)=>{let o=fc("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 Hr={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=>Xt(o)).join(" "),t.repoRoot)},async status(e){return e.runnerSession.lastKnownState},async stop(){},async collectArtifacts(){}};Ae();Ie();var Ct={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||jr(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 Ct.snapshot(t,r);if(!s.alive)throw new Error(`Session ${t.id} is no longer live and cannot be attached.`);await Yt(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 Sc(e,t)}};async function Sc(e,t){let r=await oe("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();It();import{mkdir as Et,rm as Mc,writeFile as qr}from"node:fs/promises";import ae from"node:path";Ie();async function vi(e,t){let r=await oe("git",["show-ref","--verify","--quiet",`refs/heads/${t}`],{cwd:e});if(r.exitCode===0)return!0;if(r.exitCode===1)return!1;throw new Error(r.stderr.trim()||r.stdout.trim()||"Unable to check git branch state.")}async function Ur(e,t,r,s="main"){let o=s.trim()||"main";if((await oe("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 Lc(e,o);await Q("git",["worktree","add","-b",t,r,y],{cwd:e})}async function Lc(e,t){return(await oe("git",["remote","get-url","origin"],{cwd:e})).exitCode!==0||(await oe("git",["fetch","origin",t],{cwd:e})).exitCode!==0?t:(await oe("git",["show-ref","--verify","--quiet",`refs/remotes/origin/${t}`],{cwd:e})).exitCode===0?`refs/remotes/origin/${t}`:t}async function xt(e){let t=await oe("git",["status","--short"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"Unable to inspect git status.");return t.stdout.trim().length>0}async function Si(e){await Q("git",["add","-A"],{cwd:e})}async function Ti(e,t){await Q("git",["commit","-m",t],{cwd:e})}async function er(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 tr(e){return!await xt(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 At(e,t,r,s={}){let o=await Le(e,t),m=await Fc(e,o.id),y=await Ii(e,o.rootPath),n=s.sessionId??null,l=`craig/${y}`,f=ae.join(e.worktreesDir,o.id,y),k=ae.join(e.logsDir,`${y}.log`),a=ae.join(e.artifactsDir,y);await Et(ae.dirname(f),{recursive:!0}),await Et(a,{recursive:!0}),await qr(k,"","utf8");let w=Oc(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 Wr(e,y),await Ur(o.rootPath,l,f,o.defaultBranch),{repoId:o.id,repoRoot:o.rootPath,sessionId:n,workspaceId:m.id,task:w}}async function sr(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 At(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=ae.join(e.craigDir,"task-bundles",y),w=ae.join(e.logsDir,`${y}.log`),c=ae.join(e.artifactsDir,y);await Et(a,{recursive:!0}),await Et(c,{recursive:!0}),await qr(w,"","utf8");let g=await Promise.all(m.map(u=>Le(e,u))),_=$c(g),i=await Promise.all(g.map(u=>Bc(e,u,y,k,ae.join(a,_.get(u.id))))),p=i.find(u=>u.status==="ready")??i[0];if(!i.some(u=>u.status==="ready"))throw await Mc(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 qr(ae.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:ae.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:ae.relative(e.workspaceRoot,w),checkSummaryPath:ae.relative(e.workspaceRoot,ae.join(c,"check-summary.json")),prDraftPath:null,prStatusPath:ae.relative(e.workspaceRoot,ae.join(c,"pr-status.json"))},cleanup:rr(),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 Wr(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 Oc(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:{...Kr(ae.relative(e.workspaceRoot,e.configFile))},lastCommit:null,pullRequest:zr(),artifacts:{logPath:ae.relative(e.workspaceRoot,ae.join(e.logsDir,`${t.taskId}.log`)),checkSummaryPath:ae.relative(e.workspaceRoot,ae.join(e.artifactsDir,t.taskId,"check-summary.json")),prDraftPath:null,prStatusPath:ae.relative(e.workspaceRoot,ae.join(e.artifactsDir,t.taskId,"pr-status.json"))},cleanup:rr(),lastFailureReason:null,createdAt:r,updatedAt:r}}async function Bc(e,t,r,s,o){await Et(ae.dirname(o),{recursive:!0});try{return await Ur(t.rootPath,s,o,t.defaultBranch),{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"ready",failureReason:null,checks:Kr(ae.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:zr(),cleanup:rr()}}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:Kr(ae.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:zr(),cleanup:rr()}}}function $c(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 Kr(e){return{source:{type:"repo_config",path:e},lastRunAt:null,status:"not_run",commands:[],results:[]}}function zr(){return{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,mergeable:!1,mergeStateStatus:null,requiredChecks:[],lastSyncedAt:null,lastSyncedHeadSha:null}}function rr(){return{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}async function Fc(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(Vt(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 sr(e,s.workspaceId,o,{runner:y,config:m}):await At(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 Hr.prepare(l,{repoRoot:n.repoRoot});let w=await Ct.create(e,{sessionId:k,taskId:l.id,repoId:n.repoId,workspaceId:n.workspaceId,repoRoot:n.repoRoot,worktreePath:l.worktreePath,logPath:a,command:f});await Hr.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}}Dt();ut();_e();import{access as Nc}from"node:fs/promises";import Bi from"node:path";async function ie(e,t){try{return await Ce(e,t)}catch(r){throw Kc(r)?new Error(`Craig task "${t}" was not found.`):r}}async function pe(e){if(!await Vr(e.worktreePath))throw new Error(`Task ${e.id} worktree does not exist at ${e.worktreePath}. Repair or recreate the task before retrying.`)}function Gr(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 Vr(t.worktreePath),s=Gr(e,t),o=s?await Vr(s):!1;return{worktreeExists:r,logExists:o,recentFailureReason:t.lastFailureReason??null,runnerCommandText:t.runnerSession.command.join(" "),checksSummary:jc(t),lastCommitSummary:Hc(t),prSummary:Uc(t),cleanupSummary:qc(t)}}async function Vr(e){try{return await Nc(e),!0}catch{return!1}}function jc(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 Hc(e){return e.lastCommit?`${e.lastCommit.sha.slice(0,7)} ${e.lastCommit.message}`:"not committed"}function Uc(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 qc(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 Kc(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 Ct.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 zc,writeFile as Vc}from"node:fs/promises";import ir from"node:path";Ie();import Wi from"node:path";function Lt(e,t){return t?Wi.isAbsolute(t)?t:Wi.join(e.repoRoot,t):null}async function ht(e){let t=await oe("gh",["auth","status"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"GitHub CLI auth is required.")}async function ji(e,t){let r=Lt(t,e.artifacts.prDraftPath??ir.join(".craig","artifacts",e.id,"pr.md"));if(!r)throw new Error(`Task ${e.id} is missing a PR draft artifact path.`);await Ni(ir.dirname(r),{recursive:!0});try{await zc(r,"utf8")}catch{await Vc(r,`## Summary
|
|
61
61
|
|
|
62
62
|
- ${e.title}
|
|
63
|
-
`,"utf8")}return e.artifacts.prDraftPath=
|
|
63
|
+
`,"utf8")}return e.artifacts.prDraftPath=ir.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",nr(t.pullRequest.number?String(t.pullRequest.number):t.branch),{cwd:t.worktreePath}),s=JSON.parse(r.stdout);return Ki(e,t,s)}async function Yr(e,t){let r=await oe("gh",nr(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 Jr(e,t,r){let s=r.pullRequest.number?String(r.pullRequest.number):r.branch;if(r.pullRequest.number){let m=await Q("gh",nr(s),{cwd:r.worktreePath});return r.pullRequest=Xr(JSON.parse(m.stdout)),await re(e,t),"synced"}let o=await oe("gh",nr(s),{cwd:r.worktreePath});return o.exitCode!==0?"not_found":(r.pullRequest=Xr(JSON.parse(o.stdout)),await re(e,t),"discovered")}async function Qr(e,t){let s=((await ye(e)).github?.watchIntervalSeconds??5)*1e3;for(;;){if(await ft(e,t),Xc(t.pullRequest))return t;await new Promise(o=>setTimeout(o,s))}}async function Zr(e,t){let r=Lt(e,t.artifacts.prStatusPath);r&&(await Ni(ir.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 Gc(e){return e.requiredChecks.some(t=>t.status==="failed")}function Xc(e){return pt(e)||Gc(e)||e.status==="closed"||e.status==="merged"}function Yc(e){return pt(e)?"merge_ready":e.status==="merged"?"merged":e.status==="open"?"pr_open":"checked"}function nr(e){return["pr","view",e,"--json","number,url,baseRefName,headRefName,headRefOid,state,mergeable,mergeStateStatus,statusCheckRollup"]}async function Ki(e,t,r){let s=Xr(r);return t.pullRequest=s,t.status=Yc(s),await Zr(e,t),await re(e,t),t}function Xr(e){return{provider:"github",number:e.number,url:e.url,baseBranch:e.baseRefName,headBranch:e.headRefName,status:Jc(e.state),mergeable:e.mergeable==="MERGEABLE",mergeStateStatus:e.mergeStateStatus,requiredChecks:Qc(e.statusCheckRollup),lastSyncedAt:new Date().toISOString(),lastSyncedHeadSha:e.headRefOid??null}}function Jc(e){return e==="OPEN"?"open":e==="MERGED"?"merged":e==="CLOSED"?"closed":null}function Qc(e){return e.map(t=>Zc(t)).filter(t=>t!==null)}function Zc(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 Mt(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 Yr(e,s)).discovered)return r.watch&&s.pullRequest.status!=="merged"&&!pt(s.pullRequest)&&await Qr(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 tr(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 Qr(e,s),await Zr(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 es(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 Jr(e,r,m):await Jr(e,r,m).catch(()=>"not_found");o[y==="not_found"?"notFound":y]++}return r.status=el(r),r.pullRequest=tl(r),await re(e,r),o}async function ts(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 Yr(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 el(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(rl)?"merge_ready":r.some(s=>s.status==="open")?"pr_open":"checked"}function tl(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 rl(e){return e.mergeable&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}async function rs(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 sl}from"node:fs/promises";async function ss(e,t){let r=await ie(e,t),s=Gr(e,r);if(!s)throw new Error(`Task ${r.id} does not have a Craig-managed log path.`);try{await sl(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 is(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 il(r.worktreePath);return{kind:"showTaskDiff",taskId:r.id,diffText:o,isEmpty:!1}}async function il(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 nl(e);for(let o of s){let m=await oe("git",["diff","--no-index","--stat","--patch","--","/dev/null",o],{cwd:e});t.push(m.stdout.trimEnd())}return t.join(`
|
|
64
64
|
|
|
65
|
-
`)}async function
|
|
66
|
-
`).map(r=>r.trim()).filter(r=>r.length>0)}async function ss(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 il(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 il(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as nl}from"node:child_process";async function is(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 ol(m,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:m}}async function ol(e,t){await new Promise((r,s)=>{let[o,...m]=e,y=nl(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 al}from"node:fs/promises";import cl from"node:path";_e();Ie();async function ns(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 al(cl.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 os(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 vi(r.worktreePath),await Si(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 pi(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 Ci(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=ll(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 Hi(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 ll(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 _l from"node:path";import{stat as wl}from"node:fs/promises";async function on(e,t){let r=_l.resolve(e.workspaceRoot,t);if(!(await wl(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 wi(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 as(t.paths,{archived:e.archived});case"archiveWorkspace":return Bt(t.paths,e.workspaceId);case"restoreWorkspace":return cs(t.paths,e.workspaceId);case"removeWorkspace":return $t(t.paths,e.workspaceId);case"createTask":return Mi(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 $i(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 es(t.paths,e.taskId);case"showSelectedTask":return es(t.paths,qe(t,"show"));case"streamTaskLogs":return ts(t.paths,e.taskId);case"streamSelectedTaskLogs":return ts(t.paths,qe(t,"logs"));case"showTaskDiff":return rs(t.paths,e.taskId);case"showSelectedTaskDiff":return rs(t.paths,qe(t,"diff"));case"focusTask":return ss(t.paths,e.taskId);case"focusSelectedTask":return ss(t.paths,qe(t,"focus"));case"openTask":return is(t.paths,e.taskId);case"openSelectedTask":return is(t.paths,qe(t,"open"));case"runChecks":return ns(t.paths,e.taskId);case"runSelectedTaskChecks":return ns(t.paths,qe(t,"check"));case"commitTask":return os(t.paths,e.taskId);case"commitSelectedTask":return os(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 kl(e)}}function kl(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 bl}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 bl(t.indexFile,"utf8"),m=JSON.parse(o);return Br(m,e,t.indexFile)}catch(o){if(!yl(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 yl(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 nl(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 ns(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 ol(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 Yt(e.repoRoot,s.paneId,s.windowTarget,s.sessionName),{kind:"focusTask",taskId:r.id,tmuxTarget:s.paneId}}function ol(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as al}from"node:child_process";async function os(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 cl(m,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:m}}async function cl(e,t){await new Promise((r,s)=>{let[o,...m]=e,y=al(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 ll}from"node:fs/promises";import dl from"node:path";_e();Ie();async function as(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 xt(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 oe("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=Lt(e,t.artifacts.checkSummaryPath);r&&(await ll(dl.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 cs(e,t){let r=await ie(e,t);await pe(r);let s=await xt(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 er(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 Ot(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 tr(s.worktreePath))throw new Error(`Task ${s.id} worktree must be clean before merging.`);if((await er(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=ul(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 ul(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();It();kt();Dt();Wt();Ie();import kl from"node:path";import{stat as bl}from"node:fs/promises";async function an(e,t){let r=kl.resolve(e.workspaceRoot,t);if(!(await bl(r).catch(()=>null))?.isDirectory())throw new Error(`Repo path does not exist: ${r}`);let o=await Promise.resolve().then(()=>(Wt(),on)).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 cn(e){return{kind:"listRepos",repos:await dt(e)}}async function ln(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=>or(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 dn(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 un(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}}Wt();async function hn(e,t){switch(e.kind){case"addWorkspace":return Bt(t.paths,e.path);case"addRepo":return an(t.paths,e.path);case"listRepos":return cn(t.paths);case"removeRepo":return ln(t.paths,e.repoId);case"listWorkspaces":return ls(t.paths,{archived:e.archived});case"archiveWorkspace":return $t(t.paths,e.workspaceId);case"restoreWorkspace":return ds(t.paths,e.workspaceId);case"removeWorkspace":return Ft(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 dn(t.paths,e.taskId,e.repoId);case"listTaskLinks":return un(t.paths,e.taskId);case"refreshInteractiveState":throw new Error("Interactive refresh should be handled by the interactive app.");case"showTask":return rs(t.paths,e.taskId);case"showSelectedTask":return rs(t.paths,qe(t,"show"));case"streamTaskLogs":return ss(t.paths,e.taskId);case"streamSelectedTaskLogs":return ss(t.paths,qe(t,"logs"));case"showTaskDiff":return is(t.paths,e.taskId);case"showSelectedTaskDiff":return is(t.paths,qe(t,"diff"));case"focusTask":return ns(t.paths,e.taskId);case"focusSelectedTask":return ns(t.paths,qe(t,"focus"));case"openTask":return os(t.paths,e.taskId);case"openSelectedTask":return os(t.paths,qe(t,"open"));case"runChecks":return as(t.paths,e.taskId);case"runSelectedTaskChecks":return as(t.paths,qe(t,"check"));case"commitTask":return cs(t.paths,e.taskId);case"commitSelectedTask":return cs(t.paths,qe(t,"commit"));case"openPullRequest":return Mt(t.paths,e.taskId,{watch:e.watch});case"openSelectedTaskPullRequest":return Mt(t.paths,qe(t,"pr"),{watch:e.watch});case"mergeTask":return Ot(t.paths,e.taskId,{preserveWorktree:e.preserveWorktree});case"mergeSelectedTask":return Ot(t.paths,qe(t,"merge"),{preserveWorktree:e.preserveWorktree});case"help":return{kind:"help",text:fe()};case"exit":return{kind:"exit"};default:return yl(e)}}function yl(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 vl}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 vl(t.indexFile,"utf8"),m=JSON.parse(o);return $r(m,e,t.indexFile)}catch(o){if(!Sl(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 Sl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}function fn(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} ${
|
|
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}`,...
|
|
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} ${Pl(t)} ${Il(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}`,...Rl(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[`${
|
|
75
|
+
`);case"openPullRequest":return[`${Tl(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
|
|
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
|
|
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
|
|
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
|
|
81
|
-
${l.stdout.trimEnd()}`)}}if(m.includes("staged")){let n=await Q("git",["diff","--cached","--stat","--patch",`--unified=${
|
|
82
|
-
${n.stdout.trimEnd()}`)}if(m.includes("unstaged")){let n=await Q("git",["diff","--stat","--patch",`--unified=${
|
|
83
|
-
${n.stdout.trimEnd()}`)}if(m.includes("untracked")){let n=await
|
|
77
|
+
`);default:return Cl(e)}}function Tl(e,t){return t?"Watched":e==="created"?"Created":e==="discovered"?"Discovered":"Synced"}function Rl(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 Cl(e){throw new Error(`Unsupported result: ${JSON.stringify(e)}`)}function Pl(e){return e.checks.status}function Il(e){return e.pullRequest.number?`#${e.pullRequest.number}:${e.pullRequest.status??"unknown"}`:"-"}ut();It();kt();import{createRequire as mh}from"node:module";import{readdir as _h,stat as wh}from"node:fs/promises";import Tt from"node:path";_e();Dt();Wt();Ie();import{readFile as xl,stat as El}from"node:fs/promises";import us from"node:path";var Al=200*1024,Dl=500*1024,ar="100000";async function gn(e,t,r){if(e.type==="project"&&e.repoTargets?.length)return Ll(e,t,r);try{let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),m=o?await Nt(e.worktreePath):null,[y,n]=await Promise.all([lr(e.worktreePath,s),o?hs(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 Ll(e,t,r){let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),[m,y]=await Promise.all([_n(e,s),(async()=>{if(!o)return ge("No diff selected","No local changes found.","empty");let l=cr(e,o),f=l?await Nt(l.target.worktreePath).catch(()=>null):null;return wn(e,o,t.diffRows,f)})()]),n=o?{[o]:y}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:n,selectedFile:m,selectedDiff:y}}async function mn(e,t={}){if(e.type==="project"&&e.repoTargets?.length)return Ml(e,t);try{await pe(e);let r=await Nt(e.worktreePath),[s,o]=await Promise.all([kn(e.worktreePath),bn(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([lr(e.worktreePath,y),n?hs(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:Sn(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 Ml(e,t){let r=(e.repoTargets??[]).filter(w=>w.status==="ready"),s=await Promise.all(r.map(async w=>{let c=await Nt(w.worktreePath).catch(()=>null),[g,_]=await Promise.all([kn(w.worktreePath).catch(()=>[]),bn(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([_n(e,n),(async()=>{if(!l)return ge("No diff selected","No local changes found.","empty");let w=cr(e,l),c=w?s.find(g=>g.target.repoId===w.target.repoId):null;return wn(e,l,m,c?.baseRef??null)})()]),a=l?{[l]:k}:{};return{taskId:e.id,fileRows:Sn(o),filePaths:o,diffRows:m,diffPaths:y,diffContents:a,selectedFilePath:n,selectedDiffPath:l,selectedFile:f,selectedDiff:k,error:null}}async function _n(e,t){let r=cr(e,t);if(!r)return ge("No file selected","No Git-visible files found.","empty");let s=await lr(r.target.worktreePath,r.relativePath);return{...s,path:t,title:t??s.title}}async function wn(e,t,r,s=null){let o=cr(e,t);return o?{...await hs(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 cr(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 kn(e){let t=await Q("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e});return Tn(t.stdout)}async function bn(e,t){let[r,s,o,m]=await Promise.all([Ol(e,t),pn(e,"staged"),pn(e,"unstaged"),Bl(e)]);return[...r,...s,...o,...m]}async function Ol(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=yn(r.stdout),m=vn(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 pn(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=yn(s.stdout),y=vn(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 Bl(e){let t=await Q("git",["ls-files","--others","--exclude-standard"],{cwd:e}),r=Tn(t.stdout);return await Promise.all(r.map(async o=>{let m=await lr(e,o),y=m.status==="ready"?$l(m.lines):null;return{group:"untracked",path:o,status:"A",additions:y,deletions:0}}))}function yn(e){return e.split(`
|
|
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 vn(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 Nt(e){return(await oe("git",["show-ref","--verify","--quiet","refs/remotes/origin/main"],{cwd:e})).exitCode===0?"origin/main":(await oe("git",["show-ref","--verify","--quiet","refs/heads/main"],{cwd:e})).exitCode===0?"main":null}async function lr(e,t){if(!t)return ge("No file selected","No Git-visible files found.","empty");let r=Fl(e,t);try{let s=await El(r);if(s.size>Al)return ge(t,`File is ${s.size} bytes, above the 200 KB inline preview limit.`,"too_large",t,s.size);let o=await xl(r);return Wl(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 hs(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 Nt(e);if(n){let l=await Q("git",["diff","--stat","--patch",`--unified=${ar}`,`${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=${ar}`,"--",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=${ar}`,"--",t],{cwd:e});n.stdout.trim().length>0&&o.push(`unstaged
|
|
83
|
+
${n.stdout.trimEnd()}`)}if(m.includes("untracked")){let n=await oe("git",["diff","--no-index","--stat","--patch",`--unified=${ar}`,"--","/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>
|
|
87
|
-
`):["No diff for this file."],byteLength:y.length}}function
|
|
88
|
-
`).map(t=>t.trim()).filter(t=>t.length>0))].sort((t,r)=>t.localeCompare(r))}function Bl(e,t){let r=ls.resolve(e,t),s=ls.resolve(e);if(r!==s&&!r.startsWith(`${s}${ls.sep}`))throw new Error(`File path escapes task worktree: ${t}`);return r}function $l(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 Fl}from"node:fs/promises";async function Tn(e,t){let r=await ie(e,t),s=await Wl(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 Wl(e){try{return await Fl(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",us="\u25CB",hs="\u25CF",fs="\u2713",ps="\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 Nl=["tasks","center","inspector","actions"],$n=["agent","terminal"],Fn=[],ne="inspection",Fm=[...$n,...Fn],Wn=["commit","push","create-pr","refresh-checks","merge","close-task"],jl=["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=id(e?.openInspectionKind)??r,o=mt(t);return{inputMode:od(e?.inputMode),focusedRegion:rd(e?.focusedRegion),selectedRepoId:ze(e?.selectedRepoId),selectedWorkspaceId:ze(e?.selectedWorkspaceId),selectedTaskId:ze(e?.selectedTaskId),selectedPtyTabId:ze(e?.selectedPtyTabId),selectedLeftItemId:gd(ze(e?.selectedTaskId)),activeTab:r?ne:ze(e?.activeTab)??"agent",preferredPtyTabKind:nd(e?.preferredPtyTabKind),inspectorSection:Nt(e?.inspectorSection,Nn,"task"),inspectionMode:sd(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:ad(e?.selectedRunner,o,it(t)),centerTabRunner:null,actionMessage:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:Hl(),centerZoomed:!1}}function Hl(){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=fd(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,...ld(f,e.activeTab,e.selectedPtyTabId),selectedFilePath:Zl(e,t,f?.id??null),...dd(e,t,f?.id??null),selectedDiffPath:Ql(e,t,f?.id??null),inspectorSection:Nt(e.inspectorSection,Nn,"task")}}function qn(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return Ul(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"&&(ms(e.selectedLeftItemId)||_s(e.selectedLeftItemId)))return G({state:{...e,selectedRunner:ws(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=cd(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"&&md(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 gs(e,-1,r.centerTabIds);if(e.focusedRegion==="inspector")return On(e,-1)}if(t==="RIGHT"||t==="l"){if(e.focusedRegion==="center")return gs(e,1,r.centerTabIds);if(e.focusedRegion==="inspector")return On(e,1)}if(tt(t)){if(e.focusedRegion==="tasks"&&(ms(e.selectedLeftItemId)||_s(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:Gl({...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 Ul(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 ql(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 Kl=["tasks","center","inspector"];function Ln(e,t){return lr(e,"focusedRegion",Kl,t)}function gs(e,t,r){let s=lr(e,"activeTab",r&&r.length>0?r:hd(e),t);return!s.changed||ql(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 zl(e,t,r.leftItemIds);if(e.focusedRegion==="center")return gs(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",jl,t)}return lr(e,"selectedActionId",Wn,t)}function zl(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 Xl(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return Yl(e,t,r)}return G({state:e})}function Vl(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 Vl(e,td(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 Gl(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 Xl(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 Yl(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return Jl(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 Jl(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=ed(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 Ql(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function Zl(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedFilePath&&(t.inspection.filePaths??[]).includes(e.selectedFilePath)?e.selectedFilePath:t.inspection.selectedFilePath}function ed(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 td(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 rd(e){return e==="tabs"?"center":Nt(e,Nl,"tasks")}function sd(e,t){return e==="checks"||e==="actions"||e==="review"?"review":Nt(e,jn,t)}function id(e){return e==="file"||e==="diff"?e:null}function nd(e){return e==="terminal"?"terminal":"agent"}function od(e){return e==="terminal"?"terminal":"control"}function ad(e,t=[...ce],r="codex"){return e&&_t(e)&&t.includes(e)?e:r}function ws(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 cd(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":fr(e.activeTab)??e.preferredPtyTabKind}function ld(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 dd(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?ud(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:s,collapsedFileTreePaths:o}}function ud(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 hd(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function Bn(e,t){return t.includes(e)}function fd(e,t){let r=pd(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 pd(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 gd(e){return e?`task:${e}`:null}function ur(e){return typeof e=="string"&&e.startsWith("task:")}function ms(e){return typeof e=="string"&&e.startsWith("new-task:")}function _s(e){return typeof e=="string"&&e.startsWith("new-task-workspace:")}function md(e){return typeof e=="string"&&e.startsWith("workspace:")}function Qn(e){return ms(e)?e.slice(9):null}function Zn(e){return _s(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=kd(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=Yd(t.tasks),f=vd(e,y),k=yd(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:_d(e,t),runners:(t.enabledRunnerIds??["codex","cursor","claude"]).map(_=>Jd(_,l[_])),centerHeader:{tabLabel:e.workspaceBrowser?"BROWSER":a.label,taskId:e.workspaceBrowser?"new workspace":y?.id??"no task",repo:c,agent:g},centerTranscript:bd(f,e,s,y,e.workspaceBrowser,w,r),tabs:k,rightContext:Xd(s,y),rightInspection:Od(e,y,w)}}function _d(e,t){let r=[{text:"WORKSPACES",muted:!0,focused:e.focusedRegion==="tasks"}];if(!t.workspaces)return wd(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 wd(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 kd(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 bd(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"?Rd(s,m,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?Cd(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 yd(e,t,r){let s=t?.ptyTabs.map(m=>({id:m.id,label:Sd(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:Td(e)}]:[];return[...s,...o].map(m=>({...m,active:m.id===r,focused:e.focusedRegion==="center"&&m.id===r}))}function vd(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 Sd(e){return e.title.toUpperCase()}function Td(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 Rd(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:""},...Pd(s.lines,r,o)]}function Cd(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:""},...Id(s.lines,r,o)]}function Oe(e){return e.map(t=>({text:t}))}function Pd(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}},...ks(m,r)],tone:"default"}})}function Id(e,t,r){let s=xd(e),o=Math.max(0,Math.min(t,Math.max(0,s.length-1)));return s.slice(o).map(m=>Ed(m,r))}function xd(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 Ed(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?Dd(ks(e.text,t),m.bg,m.fallbackFg):ks(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 ks(e,t){return t==="diff"?Ad(e):t==="markdown"?Ld(e):t==="json"?bs(e,/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|-?\b\d+(?:\.\d+)?\b/g):t==="javascript"||t==="css"?bs(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 Ad(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 Dd(e,t,r){return e.map(s=>({text:s.text,style:{...s.style??{fg:r},bg:t}}))}function Ld(e){return/^#{1,6}\s/.test(e)?[{text:e,style:{fg:de.markup,bold:!0}}]:bs(e,/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)]+\))/g)}function bs(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:Md(m)}),s=y+m.length}return s<e.length&&r.push({text:e.slice(s)}),r.length>0?r:[{text:e}]}function Md(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 Od(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=[Bd(e,m),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...y,...Fd(e,t)]}:e.inspectionMode==="files"?{title:"",rows:[...y,...qd(e,r)]}:{title:"",rows:[...y,...zd(e,r)]}}function Bd(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=ys(t),y=vs(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:" "},ys(e),{text:" "},vs(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:$d(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 $d(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 ys(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 vs(e){return!e||e.length===0?{text:us,style:{fg:"565f89"}}:e.some(t=>t.status==="failed")?{text:ps,style:{fg:"f7768e"}}:e.every(t=>t.status==="success"||t.status==="skipped")?{text:fs,style:{fg:"9ece6a"}}:{text:hs,style:{fg:"e0af68"}}}function Fd(e,t){return t?t.type==="project"&&t.repoTargets?.length?Wd(e,t):oo("pr",t.title,t.branch,t.pullRequest):[{id:"review-empty",text:"No task selected.",muted:!0}]}var pr=32;function Wd(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=ys(y.pullRequest),a=vs(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 ${Nd(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(jd)):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 Nd(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 jd(e){let{icon:t,color:r}=Hd(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," ")} ${Ud(e.status)}`,color:r,muted:!1}}function Hd(e){switch(e){case"success":return{icon:fs,color:"9ece6a"};case"pending":return{icon:hs,color:"e0af68"};case"failed":return{icon:ps,color:"f7768e"};case"skipped":return{icon:us,color:"565f89"};default:return{icon:"?",color:"565f89"}}}function Ud(e){return e==="success"?"passing":e==="failed"?"failing":e}function qd(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=Kd(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 Kd(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 zd(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(Vd(t))return Gd(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 Vd(e){return e.filePaths.some(t=>t.startsWith("repo_"))||e.diffRows.some(t=>t.path.startsWith("repo_"))}function Gd(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 Xd(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 Yd(e){return e.reduce((t,r)=>(t[r.runner]+=1,t),{codex:0,cursor:0,claude:0})}function Jd(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 ku}from"node:child_process";import{createHash as bu}from"node:crypto";import{createServer as yu,createConnection as bo}from"node:net";import{openSync as vu}from"node:fs";import{mkdir as Su,readFile as xs,rm as gt,writeFile as Tu}from"node:fs/promises";import{tmpdir as Ru}from"node:os";import St from"node:path";import{createRequire as ou}from"node:module";var ho=wa(lo(),1),Qd=1e3,Zd=["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:Qd,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function po(e,t){(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function Ts(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:ru(a,y+n===m&&k===r.cursorX)})}s.push({segments:eu(tu(f))})}return s}function eu(e){let t=[];for(let r of e){let s=t.at(-1);if(s&&nu(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 tu(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 ru(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"):Zd[o]??su(o)}function su(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(iu).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 iu(e){return e===0?0:55+e*40}function nu(e,t){return Ss(e)===Ss(t)}function Ss(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 Ss(e)===""}var au=ou(import.meta.url),cu=/^CTRL_([A-Z])$/,lu="\x1B[6n",du="\x1B[c",uu="\x1B[?u",hu={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")Rs(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=fu(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&&(Rs(r),this.sessions.delete(t),this.attachedTabId===t&&(this.attachedTabId=null))}disposeAll(){for(let t of this.sessions.values())Rs(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??gu().spawn,y=fo(s),n=o??this.resolveSessionSpec(t,r),l=ct(this.env),{executable:f,args:k}=mu(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:_u(l)}),w={taskId:t,tabId:r,pty:a,terminal:y,status:"running",error:null,disposables:[],scrollbackLines:0};return w.disposables.push(a.onData(c=>{wu(a,c),Ts(w.terminal,c).then(()=>{this.onUpdate?.(w.tabId)})})),w.disposables.push(a.onExit(c=>{w.status="exited",Ts(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
|
|
86
|
+
`);return y.length>Dl?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 Sn(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 $l(e){return e.length===1&&e[0]===""?0:e.at(-1)===""?e.length-1:e.length}function Tn(e){return[...new Set(e.split(`
|
|
88
|
+
`).map(t=>t.trim()).filter(t=>t.length>0))].sort((t,r)=>t.localeCompare(r))}function Fl(e,t){let r=us.resolve(e,t),s=us.resolve(e);if(r!==s&&!r.startsWith(`${s}${us.sep}`))throw new Error(`File path escapes task worktree: ${t}`);return r}function Wl(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 Nl}from"node:fs/promises";async function Rn(e,t){let r=await ie(e,t),s=await jl(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 jl(e){try{return await Nl(e),!0}catch{return!1}}Ae();Ie();import Ut from"node:path";function Cn(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 Pn="\u{F024B} ",In="\u{F0DCF} ",xn="\u25CB",En="\uEA64",An="\uEAFE",Dn="\uEBDA",fs="\u25CB",ps="\u25CF",gs="\u2713",ms="\u2715";function Ln(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 Hl=["tasks","center","inspector","actions"],Fn=["agent","terminal"],Wn=[],ne="inspection",jm=[...Fn,...Wn],Nn=["commit","push","create-pr","refresh-checks","merge","close-task"],Ul=["refresh-checks","close-task"],jn=["task","checks","pr","setup-run","actions","next-action"],Hn=["diff","files","review"];function Un(e,t={}){let r=e?.activeTab==="files"?"file":e?.activeTab==="diff"?"diff":null,s=od(e?.openInspectionKind)??r,o=mt(t);return{inputMode:cd(e?.inputMode),focusedRegion:id(e?.focusedRegion),selectedRepoId:ze(e?.selectedRepoId),selectedWorkspaceId:ze(e?.selectedWorkspaceId),selectedTaskId:ze(e?.selectedTaskId),selectedPtyTabId:ze(e?.selectedPtyTabId),selectedLeftItemId:_d(ze(e?.selectedTaskId)),activeTab:r?ne:ze(e?.activeTab)??"agent",preferredPtyTabKind:ad(e?.preferredPtyTabKind),inspectorSection:jt(e?.inspectorSection,jn,"task"),inspectionMode:nd(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:jt(e?.selectedActionId,Nn,"commit"),selectedProjectTargetId:null,selectedRunner:ld(e?.selectedRunner,o,it(t)),centerTabRunner:null,actionMessage:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:ql(),centerZoomed:!1}}function ql(){return{status:"idle",rows:[],error:null,scrolledBack:!1}}function qn(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 fr(e,t,r={}){let s=gd(e,t),o=Qn(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,...ud(f,e.activeTab,e.selectedPtyTabId),selectedFilePath:td(e,t,f?.id??null),...hd(e,t,f?.id??null),selectedDiffPath:ed(e,t,f?.id??null),inspectorSection:jt(e.inspectorSection,jn,"task")}}function Kn(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return Kl(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"&&(ws(e.selectedLeftItemId)||ks(e.selectedLeftItemId)))return G({state:{...e,selectedRunner:bs(e.selectedRunner,r.enabledRunnerIds),actionMessage:null,taskPromptError:null},changed:!0});if(t==="TAB"||t==="]")return Mn(e,1);if(t==="SHIFT_TAB"||t==="[")return Mn(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):On(e,-1,r);if(t==="DOWN"||t==="j")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,1,r):On(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=dd(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"&&hr(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"&&wd(e.selectedLeftItemId)&&e.selectedWorkspaceId)return G({state:{...e,actionMessage:null},changed:!0,removeWorkspace:!0});if(t==="x"&&e.focusedRegion==="center"&&$n(e.activeTab,r.ptyTabIds??[]))return G({state:{...e,actionMessage:null},changed:!0,closePtyTab:!0});if(t==="LEFT"||t==="h"){if(e.focusedRegion==="center")return _s(e,-1,r.centerTabIds);if(e.focusedRegion==="inspector")return Bn(e,-1)}if(t==="RIGHT"||t==="l"){if(e.focusedRegion==="center")return _s(e,1,r.centerTabIds);if(e.focusedRegion==="inspector")return Bn(e,1)}if(tt(t)){if(e.focusedRegion==="tasks"&&(ws(e.selectedLeftItemId)||ks(e.selectedLeftItemId))){let s=Zn(e.selectedLeftItemId),o=eo(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"&&hr(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"&&$n(e.activeTab,r.ptyTabIds??[])&&e.selectedTaskId)return G({state:{...e,inputMode:"terminal",selectedPtyTabId:e.activeTab,preferredPtyTabKind:pr(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:Yl({...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 Ht(e,t){return{...e,terminal:t}}function zn(e,t){return{...e,inputMode:"control",terminal:{status:"failed",rows:[],error:t}}}function Kl(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 Vn(e){return e.length===1&&e>=" "&&e!=="\x7F"}function Gn(e){return Xn(e)||pr(e)!==null}function zl(e){return Wn.includes(e)}function Xn(e){return Fn.includes(e)}function Yn(e,t){return[...e?.ptyTabs.map(r=>r.id)??[],...t?.openInspectionKind?[ne]:[]]}var Vl=["tasks","center","inspector"];function Mn(e,t){return dr(e,"focusedRegion",Vl,t)}function _s(e,t,r){let s=dr(e,"activeTab",r&&r.length>0?r:pd(e),t);return!s.changed||zl(s.state.activeTab)?s:{...s,state:{...s.state,selectedPtyTabId:s.state.activeTab,preferredPtyTabKind:pr(s.state.activeTab)??s.state.preferredPtyTabKind}}}function On(e,t,r){if(e.focusedRegion==="tasks")return Gl(e,t,r.leftItemIds);if(e.focusedRegion==="center")return _s(e,t,r.centerTabIds);if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Jn(e,t,r);if(e.inspectionMode==="diff"){let s=ur(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?ur(e,"selectedProjectTargetId",r.projectTargetIds,t):dr(e,"selectedActionId",Ul,t)}return dr(e,"selectedActionId",Nn,t)}function Gl(e,t,r){let s=ur(e,"selectedLeftItemId",r,t);if(!s.changed)return s;let o=Qn(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=Zn(s.state.selectedLeftItemId);if(m)return{...s,state:{...s.state,selectedRepoId:m}};let y=eo(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 Jn(e,t,r);if(e.inspectionMode==="diff"){let s=ur(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 Jl(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return Ql(e,t,r)}return G({state:e})}function Xl(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 Bn(e,t){return Xl(e,sd(e.inspectionMode,Hn,t))}function Jn(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 Yl(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 Jl(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 Ql(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return Zl(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 Zl(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=rd(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 ed(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function td(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedFilePath&&(t.inspection.filePaths??[]).includes(e.selectedFilePath)?e.selectedFilePath:t.inspection.selectedFilePath}function rd(e,t){return e.find(r=>t>=r.start&&t<r.end)?.path??e.at(-1)?.path??null}function dr(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 ur(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 sd(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 jt(e,t,r){return t.includes(e??"")?e:r}function id(e){return e==="tabs"?"center":jt(e,Hl,"tasks")}function nd(e,t){return e==="checks"||e==="actions"||e==="review"?"review":jt(e,Hn,t)}function od(e){return e==="file"||e==="diff"?e:null}function ad(e){return e==="terminal"?"terminal":"agent"}function cd(e){return e==="terminal"?"terminal":"control"}function ld(e,t=[...ce],r="codex"){return e&&_t(e)&&t.includes(e)?e:r}function bs(e,t=ce){let r=t.length>0?t:ce,s=r.indexOf(e);return r[(s+1)%r.length]??r[0]??"codex"}function pr(e){let t=ce.join("|");return new RegExp(`:(?:agent|${t})(?:-\\d+)?$`).test(e)?"agent":/:terminal(?:-\d+)?$/.test(e)?"terminal":null}function dd(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":pr(e.activeTab)??e.preferredPtyTabKind}function ud(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(Xn(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 hd(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?fd(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:s,collapsedFileTreePaths:o}}function fd(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 pd(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function $n(e,t){return t.includes(e)}function gd(e,t){let r=md(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 md(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 Qn(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 _d(e){return e?`task:${e}`:null}function hr(e){return typeof e=="string"&&e.startsWith("task:")}function ws(e){return typeof e=="string"&&e.startsWith("new-task:")}function ks(e){return typeof e=="string"&&e.startsWith("new-task-workspace:")}function wd(e){return typeof e=="string"&&e.startsWith("workspace:")}function Zn(e){return ws(e)?e.slice(9):null}function eo(e){return ks(e)?e.slice(19):null}function Ve(e,t,r){return Math.min(r,Math.max(t,e))}var mr="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 so(e,t){let r=yd(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=Qd(t.tasks),f=Td(e,y),k=Sd(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`:hr(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:Ut.relative(process.env.HOME??"",t.workspaceRoot).length>0?`~/${Ut.relative(process.env.HOME??"",t.workspaceRoot)}`:t.workspaceRoot,agent:g,liveLabel:y?.status==="running"?"live":"idle"},leftTree:kd(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:vd(f,e,s,y,e.workspaceBrowser,w,r),tabs:k,rightContext:Jd(s,y),rightInspection:$d(e,y,w)}}function kd(e,t){let r=[{text:"WORKSPACES",muted:!0,focused:e.focusedRegion==="tasks"}];if(!t.workspaces)return bd(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=no(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 bd(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"},_=no(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 yd(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 vd(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"?Pd(s,m,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?Id(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 Sd(e,t,r){let s=t?.ptyTabs.map(m=>({id:m.id,label:Rd(m)}))??[];if(!t)return[{id:mr,label:"EMPTY",active:r===mr,focused:e.focusedRegion==="center"&&r===mr}];let o=e.openInspectionKind||r===ne?[{id:ne,label:Cd(e)}]:[];return[...s,...o].map(m=>({...m,active:m.id===r,focused:e.focusedRegion==="center"&&m.id===r}))}function Td(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:mr}function Rd(e){return e.title.toUpperCase()}function Cd(e){let t=e.openInspectionKind==="diff"?e.selectedDiffPath:e.selectedFilePath,r=t?Ut.basename(t):e.inspectionMode.toUpperCase();return e.openInspectionKind==="diff"?`${r} \u0394`:r}function Pd(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=io(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:""},...xd(s.lines,r,o)]}function Id(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=io(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:""},...Ed(s.lines,r,o)]}function Oe(e){return e.map(t=>({text:t}))}function xd(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}},...ys(m,r)],tone:"default"}})}function Ed(e,t,r){let s=Ad(e),o=Math.max(0,Math.min(t,Math.max(0,s.length-1)));return s.slice(o).map(m=>Dd(m,r))}function Ad(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 Dd(e,t){let r=to(e.oldNumber),s=to(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?Md(ys(e.text,t),m.bg,m.fallbackFg):ys(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 to(e){return e===null?" ":String(e).padStart(4," ")}function io(e){let t=Ut.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 ys(e,t){return t==="diff"?Ld(e):t==="markdown"?Od(e):t==="json"?vs(e,/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|-?\b\d+(?:\.\d+)?\b/g):t==="javascript"||t==="css"?vs(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 Ld(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 Md(e,t,r){return e.map(s=>({text:s.text,style:{...s.style??{fg:r},bg:t}}))}function Od(e){return/^#{1,6}\s/.test(e)?[{text:e,style:{fg:de.markup,bold:!0}}]:vs(e,/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)]+\))/g)}function vs(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:Bd(m)}),s=y+m.length}return s<e.length&&r.push({text:e.slice(s)}),r.length>0?r:[{text:e}]}function Bd(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 $d(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"?oo(t.repoTargets??[]):o?.pullRequest??t?.pullRequest??null,y=[Fd(e,m),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...y,...Nd(e,t)]}:e.inspectionMode==="files"?{title:"",rows:[...y,...zd(e,r)]}:{title:"",rows:[...y,...Gd(e,r)]}}function Fd(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=Ss(t),y=Ts(t?.requiredChecks??null);return o.push({text:" "},m,{text:" "},y),{id:"inspection-mode",text:o.map(l=>l.text).join(""),segments:o}}function ro(e){return[{text:" "},Ss(e),{text:" "},Ts(e.requiredChecks??null)]}function no(e){if(e.type==="project"&&e.repoTargets?.length){let t=oo(e.repoTargets);return t?ro(t):null}return e.pullRequest.number?ro(e.pullRequest):null}function oo(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:Wd(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 Wd(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 Ss(e){return!e||!e.number?{text:xn,style:{fg:"565f89"}}:e.status==="merged"?{text:An,style:{fg:"9d7cd8"}}:e.status==="closed"?{text:Dn,style:{fg:"f7768e"}}:{text:En,style:{fg:"9ece6a"}}}function Ts(e){return!e||e.length===0?{text:fs,style:{fg:"565f89"}}:e.some(t=>t.status==="failed")?{text:ms,style:{fg:"f7768e"}}:e.every(t=>t.status==="success"||t.status==="skipped")?{text:gs,style:{fg:"9ece6a"}}:{text:ps,style:{fg:"e0af68"}}}function Nd(e,t){return t?t.type==="project"&&t.repoTargets?.length?jd(e,t):ao("pr",t.title,t.branch,t.pullRequest):[{id:"review-empty",text:"No task selected.",muted:!0}]}var gr=32;function jd(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=gr-a.length-1,c=f.length>w?f.slice(0,w-1)+"\u2026":f,g=gr-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=Ss(y.pullRequest),a=Ts(y.pullRequest.requiredChecks),w=`${k.text} ${a.text}`,c=gr-w.length-1,g=f.length>c?f.slice(0,c-1)+"\u2026":f,_=gr-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(...ao("target",null,m.branch,m.pullRequest))),r}function ao(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 ${Hd(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(Ud)):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 Hd(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 Ud(e){let{icon:t,color:r}=qd(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," ")} ${Kd(e.status)}`,color:r,muted:!1}}function qd(e){switch(e){case"success":return{icon:gs,color:"9ece6a"};case"pending":return{icon:ps,color:"e0af68"};case"failed":return{icon:ms,color:"f7768e"};case"skipped":return{icon:fs,color:"565f89"};default:return{icon:"?",color:"565f89"}}}function Kd(e){return e==="success"?"passing":e==="failed"?"failing":e}function zd(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=Vd(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)?Pn:In:Cn(m.label),f=m.kind==="file"?Ln(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 Vd(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 Gd(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(Xd(t))return Yd(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=>co(m,e,t))))}return r}function Xd(e){return e.filePaths.some(t=>t.startsWith("repo_"))||e.diffRows.some(t=>t.path.startsWith("repo_"))}function Yd(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=>co(f,e,t,o.length+1))))}}return r}function co(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 Jd(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:Ut.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 Qd(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 _r={width:120,height:36},Be={leftWidth:42,rightWidth:36,dividerWidth:1,topRailHeight:1};function vt(e,t){return{width:Math.max(e??_r.width,_r.width),height:Math.max(t??_r.height,_r.height)}}import{spawn as yu}from"node:child_process";import{createHash as vu}from"node:crypto";import{createServer as Su,createConnection as yo}from"node:net";import{openSync as Tu}from"node:fs";import{mkdir as Ru,readFile as As,rm as gt,writeFile as Cu}from"node:fs/promises";import{tmpdir as Pu}from"node:os";import St from"node:path";import{createRequire as cu}from"node:module";var fo=ka(uo(),1),eu=1e3,tu=["000000","cd3131","0dbc79","e5e510","2472c8","bc3fbc","11a8cd","e5e5e5","666666","f14c4c","23d18b","f5f543","3b8eea","d670d6","29b8db","ffffff"];function po(e){return new fo.default.Terminal({allowProposedApi:!0,cols:e.columns,rows:e.rows,scrollback:eu,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function go(e,t){(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function Cs(e,t){return new Promise(r=>{e.write(t,r)})}function mo(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:iu(a,y+n===m&&k===r.cursorX)})}s.push({segments:ru(su(f))})}return s}function ru(e){let t=[];for(let r of e){let s=t.at(-1);if(s&&au(s.style,r.style)){s.text+=r.text;continue}let o={text:r.text};_o(r.style)||(o.style=r.style),t.push(o)}return t}function su(e){let t=e.length;for(;t>0;){let r=e[t-1];if(!r||r.text!==" "||!_o(r.style))break;t-=1}return e.slice(0,t)}function iu(e,t){let r={},s=ho(e,"fg"),o=ho(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 ho(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"):tu[o]??nu(o)}function nu(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(ou).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 ou(e){return e===0?0:55+e*40}function au(e,t){return Rs(e)===Rs(t)}function Rs(e){return e?[e.fg??"",e.bg??"",e.bold?"b":"",e.dim?"d":"",e.italic?"i":"",e.underline?"u":"",e.inverse?"v":""].join("|"):""}function _o(e){return Rs(e)===""}var lu=cu(import.meta.url),du=/^CTRL_([A-Z])$/,uu="\x1B[6n",hu="\x1B[c",fu="\x1B[?u",pu={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:""},wr=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")Ps(m),this.sessions.delete(r);else return this.attachedTabId=r,m.scrollbackLines=0,wo(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=gu(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&&wo(r,t)}detach(){this.attachedTabId=null}disposeSession(t){let r=this.sessions.get(t);r&&(Ps(r),this.sessions.delete(t),this.attachedTabId===t&&(this.attachedTabId=null))}disposeAll(){for(let t of this.sessions.values())Ps(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:mo(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??_u().spawn,y=po(s),n=o??this.resolveSessionSpec(t,r),l=ct({...this.env,...n.env??{}}),{executable:f,args:k}=wu(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:ku(l)}),w={taskId:t,tabId:r,pty:a,terminal:y,status:"running",error:null,disposables:[],scrollbackLines:0};return w.disposables.push(a.onData(c=>{bu(a,c),Cs(w.terminal,c).then(()=>{this.onUpdate?.(w.tabId)})})),w.disposables.push(a.onExit(c=>{w.status="exited",Cs(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 gu(e){if(e.length===1)return e;let t=pu[e];if(t!==void 0)return t;let r=du.exec(e);return r?.[1]?String.fromCharCode(r[1].charCodeAt(0)-64):null}function wo(e,t){mu(e.pty,t),go(e.terminal,t)}function Ps(e){for(let t of e.disposables)t.dispose();e.terminal.dispose(),e.pty.kill()}function mu(e,t){t.columns>0&&t.rows>0&&(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function _u(){return lu("node-pty")}function wu(e,t,r){if(t.length===0)return{executable:e,args:[]};let o=`${[lt(t[0],r),...t.slice(1)].map(ko).join(" ")}; exec ${ko(e)} -l`;return{executable:e,args:["-lc",o]}}function ko(e){return`'${e.replaceAll("'","'\\''")}'`}function ku(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 bu(e,t){for(let r=0;r<Is(t,uu);r+=1)e.write("\x1B[1;1R");for(let r=0;r<Is(t,hu);r+=1)e.write("\x1B[?1;2c");for(let r=0;r<Is(t,fu);r+=1)e.write("\x1B[?0u")}function Is(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 Ds=3;async function vo(e){let t=Ls(e.paths);await Iu(t,e.paths,e.spawnDaemon);let r=await Io(t.socketPath),s=new xs(r,e);return await s.ready(),s}async function So(e,t={}){let r=Ls(e);await Ru(e.runtimeDir,{recursive:!0}),await gt(r.socketPath,{force:!0});let s=new Es(e,t),o=Su(m=>s.handleConnection(m));await Mu(o,r.socketPath),await Cu(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 To(e){let t=Ls(e);return await br(t.socketPath)?(await Co(t.socketPath),!0):!1}var xs=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!==Ds)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()}},
|
|
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()}},Es=class{onShutdown=null;clients=new Set;runtime;attachedTabId=null;constructor(t,r){this.runtime=new wr({...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{
|
|
96
|
-
${m.slice(-2e3)}`:""}`)}async function
|
|
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{kr(t,{id:-1,ok:!1,error:"Malformed daemon request."});return}try{let o=this.handleRequest(s);kr(t,{id:s.id,ok:!0,...s.type==="ping"?{protocolVersion:Ds}:{},...o?{view:o}:{}})}catch(o){let m=o instanceof Error?o.message:String(o);kr(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 Ou(t)}}broadcastUpdate(t){let r=this.runtime.getViewState(t);for(let s of this.clients)kr(s,{type:"update",tabId:t,view:r})}};function Ls(e){let t=vu("sha256").update(e.workspaceRoot).digest("hex").slice(0,16);return{socketPath:St.join(Pu(),`craig-${t}.sock`),pidPath:St.join(e.runtimeDir,"pty-daemon.pid")}}async function Iu(e,t,r){if(await xu(e.socketPath,1e3))return;await br(e.socketPath)&&(await Co(e.socketPath),await bo(e.socketPath,1e3)),await br(e.socketPath)&&(await Du(e),await bo(e.socketPath,1e3)),await Au(e);let s=t.workspaceRoot;if(r)r(s);else{let{command:y,args:n}=Eu(s),l=Tu(St.join(t.runtimeDir,"pty-daemon.log"),"a");yu(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 Ro(e.socketPath))return;await Ms(50)}let m=await As(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 Ro(e){let t=await Lu(e).catch(()=>null);return t?.ok===!0&&t.protocolVersion===Ds}async function xu(e,t){let r=Date.now();for(;Date.now()-r<t;){if(await Ro(e))return!0;await Ms(50)}return!1}function Eu(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 Au(e){let t=await As(e.pidPath,"utf8").catch(()=>null);if(t){let r=Number(t.trim());if(Number.isInteger(r)&&r>0&&xo(r))return}await gt(e.socketPath,{force:!0}),await gt(e.pidPath,{force:!0})}async function br(e){let t=await Io(e).catch(()=>null);return t?(t.end(),!0):!1}async function Co(e){await Po(e,{id:1,type:"shutdown"}).catch(()=>null)}async function Du(e){let t=await As(e.pidPath,"utf8").catch(()=>null),r=Number(t?.trim());if(!Number.isInteger(r)||r<=0||!xo(r)){await gt(e.socketPath,{force:!0});return}try{process.kill(r,"SIGTERM")}catch{await gt(e.socketPath,{force:!0})}}async function Lu(e){return Po(e,{id:1,type:"ping"})}function Po(e,t){return new Promise((r,s)=>{let o=yo(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
|
|
99
|
-
`)}catch{}}function
|
|
100
|
-
`)}function
|
|
101
|
-
`)}function
|
|
102
|
-
`)}function
|
|
103
|
-
`}function fh(e){return e.length===1&&e>=" "&&e!=="\x7F"}var _h=ph(import.meta.url),wh=_h("terminal-kit"),kh=wh.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,_)=>Sh(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??kh,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(bh(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=yh(W?.fileRows??[],B.collapsedFileTreePaths);return{leftItemIds:vh(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 Js(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 Lh(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 qs(M),await U(),W=M.selectedPtyTabId)}M&&!W&&(M=await qs(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,js(vt(_.width,_.height)));h=Hs(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&&Hs(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??Rh(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 Qr(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 Zr(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 Qr(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 Zr(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 qs(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"?Os(B,{menuIndex:i.menuIndex,optionsMenuItems:Fs}):i.variant==="runners"?Os(B,{menuIndex:Kt(i).menuIndex,optionsMenuItems:Ws(s,Kt(i)),optionsMessage:Vo(Kt(i)),optionsSubtitle:"Runners"}):Mo(B);x&&(_.moveTo(1,1),_.eraseDisplayBelow(),x=!1),_.noFormat(Ph(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",Gs),_.removeListener("key",Ks),_.removeListener("unknown",zs),_.removeListener("mouse",Vs),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 Ch(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"),js(vt(_.width,_.height)));h=Hs(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:ws(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(Us.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()})}}},Ks=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=xh(O)?{key:O,at:Date.now()}:null;let W=Eh(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 zs=B=>{let O=Ih(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=Ah(O);if(M!==0){Er(M);return}if(h&&O!=="\r"&&O!==`
|
|
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 bo(e,t){let r=Date.now();for(;Date.now()-r<t;){if(!await br(e))return;await Ms(50)}}function Io(e){return new Promise((t,r)=>{let s=yo(e);s.once("connect",()=>t(s)),s.once("error",r)})}function Mu(e,t){return new Promise((r,s)=>{e.once("error",s),e.listen(t,r)})}function kr(e,t){if(!e.destroyed)try{e.write(`${JSON.stringify(t)}
|
|
99
|
+
`)}catch{}}function xo(e){try{return process.kill(e,0),!0}catch{return!1}}function Ms(e){return new Promise(t=>setTimeout(t,e))}function Ou(e){throw new Error(`Unhandled daemon request: ${JSON.stringify(e)}`)}var Bu=[" \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 Os(){return[...Bu]}var $u=["Start","Options","Exit"],Fu=["Resume","Options","Exit"],Sr=2,Tr=2,Rr=2,Wu=new RegExp("\x1B\\[[0-?]*[ -/]*[@-~]","g"),Nu=new RegExp("\x1B\\[(?:0)?m","g"),ju=new RegExp("\x1B\\]8;;[^\x1B]*\x1B\\\\","g"),Hu=/https?:\/\/[^\s<>"']+/g,Bs="\x1B[0m",Do="\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 Lo(e,t={}){return Fs(e,{subtitle:"crAIg is that you?",menuItems:$u,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Mo(e,t={}){return Fs(e,{subtitle:"Control mode is paused.",menuItems:Fu,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}var yr=[" 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."],Uu=["Help"];function $s(e,t={}){return Fs(e,{subtitle:t.optionsSubtitle??"Configuration",menuItems:t.optionsMenuItems??Uu,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Oo(e,t={}){let r=t.color??!0,s=se.overlay,o=new Array(e.height).fill(he(" ".repeat(e.width),r,s)),m=Os(),y=Math.max(1,Math.floor((e.height-m.length-2-yr.length)/2));for(let k=0;k<m.length&&!(y+k>=e.height);k+=1)o[y+k]=he(No(m[k]??"",e.width),r,se.overlayLogo);let n=Math.max(...yr.map(k=>k.length)),l=Math.max(0,Math.floor((e.width-n)/2)),f=y+m.length+2;for(let k=0;k<yr.length;k+=1){let a=f+k;if(a>=e.height)break;let w=yr[k]??"";o[a]=he(rt(" ".repeat(l)+w,e.width),r,s)}return o.join(`
|
|
100
|
+
`)}function Bo(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} ${Ko(`\u25CF ${t.topRail.liveLabel}`,s,se.rail)}`,a=he(rt(k,e.width),s,se.rail),w=qu(t,o-Sr-Tr,f,s),c=Ku(t,l,f,s),g=Vu(t,m,f,s),_=[];for(let p=0;p<f;p+=1){if(n){_.push(vr(c[p]??He(),l,s,"center"));continue}let h=vr(w[p]??He(),o,s,"left"),d=he("\u2502",s,se.divider),u=vr(c[p]??He(),l,s,"center"),b=he("\u2502",s,se.divider),S=vr(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 Fs(e,t){let r=new Array(e.height).fill(he(" ".repeat(e.width),t.color,se.overlay)),s=Os(),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=No(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 qu(e,t,r,s){let o=Yu(e.runners),m=1,y=e.leftTree.map(l=>Xu(l,t,s));return[...Cr(y,r-m),o]}function Ku(e,t,r,s){let o=e.tabs.find(a=>a.active)?.label??"AGENT",m=lh(e.tabs),y=`${" ".repeat(m)}${Pr("\u2500".repeat(o.length+1),s,se.panelMuted)}`,n=[`${Pr(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"||!Gn(l)?e.centerTranscript.map(a=>({...a})):zu(e),k=[{text:Ju(e.tabs,s)},{text:y,tone:"muted"},{text:n},He(),...f];return Cr(k,r)}function zu(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:qo(s.segments),segments:s.segments,fullBleed:!0}))}function Vu(e,t,r,s){let o=e.rightInspection?Gu(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):Cr([{text:$o("CONTEXT",e.focusedRegion==="tasks",s,se.panelBg)},He(),...e.rightContext.map(m=>Qu(m,s)),...e.actionMessage?[He(),{text:e.actionMessage}]:[]],r);return Cr(o,r)}function Gu(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:uh(m-Math.floor(o/2),0,Math.max(0,s.length-o));return[...r.map(n=>Eo(n)),...s.slice(y,y+o).map(n=>Eo(n))]}function Eo(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 Xu(e,t,r){let s=" ".repeat(e.indent??0),o=e.accentDot?" \u25CF":"",m=e.status?` ${e.status}`:"",y=e.accentDot?` ${Ko("\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?$o(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 Yu(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 Ju(e,t){return e.map(r=>r.active?Pr(r.label,t,se.panelBg):zo(r.label,t,se.panelBg)).join(" ")}function Qu(e,t){return{text:`${e.label.padEnd(8," ")} ${e.mutedValue?zo(e.value,t,se.panelBg):e.value}`}}function $o(e,t,r,s){return t?Pr(e,r,s):e}function vr(e,t,r,s){let o=Zu(s,e.tone??"default"),m=eh(e,r,o);if(s==="left"){if(e.fullBleed)return he(rt(m,t),r,o);let n=t-Sr-Tr;if(e.rightAlign){let f=Ge(m),k=Math.max(0,n-f),a=`${" ".repeat(Sr)}${" ".repeat(k)}${m}${" ".repeat(Tr)}`;return he(a,r,o)}let l=`${" ".repeat(Sr)}${rt(m,n)}${" ".repeat(Tr)}`;return he(l,r,o)}return s==="center"&&e.fullBleed?th(e,t,r,o):he(rt(` ${m}`,t),r,o)}function Zu(e,t){return t==="selected"||t==="focused"?se.panelSelected:t==="muted"?se.panelMuted:se.panelBg}function Cr(e,t){let r=e.slice(0,t);for(;r.length<t;)r.push(He());return r}function He(){return{text:""}}function eh(e,t,r){return e.segments?e.segments.map(s=>Fo(s,t,r)).join(""):e.text}function th(e,t,r,s){let o=" ".repeat(Rr),m=Math.max(0,t-Rr*2);if(!e.segments)return he(`${o}${rt(e.text,m)}${o}`,r,s);let y=ih(e.segments,m),n=`${o}${y.map(l=>Fo(l,r,s)).join("")}${o}`;return he(n,r,s)}function Fo(e,t,r){let s=e.href?`${Wo(e.href)}${e.text}${Do}`:rh(e.text);return!t||!e.style?s:`${qt(ah(e.style,r))}${ch(e.style)}${s}${Bs}${qt(r)}`}function rh(e){return e.replace(Hu,t=>{let[r,s]=sh(t);return`${Wo(r)}${r}${Do}${s}`})}function sh(e){let t=e.length;for(;t>0&&".,;:!?)]}".includes(e[t-1]??"");)t-=1;return[e.slice(0,t),e.slice(t)]}function Wo(e){return`\x1B]8;;${e}\x1B\\`}function ih(e,t){let r=nh(e,t);return oh(r,t)}function nh(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=jo(o.text,s);y.length>0&&r.push({...o,text:y}),s=0}return r}function oh(e,t){let r=Ge(qo(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 ah(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 ch(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 lh(e){let t=0;for(let r of e){if(r.active)return t;t+=r.label.length+3}return 0}function No(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?dh(e,t):e+" ".repeat(t-r)}function dh(e,t){if(t<=0)return"";if(Ge(e)<=t)return e;let r=Uo(e);return jo(r,Math.max(0,t-1))+"\u2026"}function Ge(e){let t=0;for(let r of Array.from(Uo(e)))t+=Ho(r);return t}function jo(e,t){let r="",s=0;for(let o of Array.from(e)){let m=Ho(o);if(s+m>t)break;r+=o,s+=m}return r}function Ho(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 uh(e,t,r){return Math.min(Math.max(e,t),r)}function Uo(e){return e.replace(ju,"").replace(Wu,"")}function qo(e){return e.map(t=>t.text).join("")}function he(e,t,r){if(!t)return e;let s=qt(r),o=e.replace(Nu,`${Bs}${s}`);return`${s}${o}${Bs}`}function qt(e){let t=[];return e.fg&&t.push(`38;2;${Ao(e.fg).join(";")}`),e.bg&&t.push(`48;2;${Ao(e.bg).join(";")}`),`\x1B[${t.join(";")}m`}function Ao(e){return[Number.parseInt(e.slice(0,2),16),Number.parseInt(e.slice(2,4),16),Number.parseInt(e.slice(4,6),16)]}function Ko(e,t,r){return Ws(e,t,se.success.fg,r)}function Pr(e,t,r){return Ws(e,t,se.accent.fg,r)}function zo(e,t,r){return Ws(e,t,se.mutedfg.fg,r)}function Ws(e,t,r,s){if(!t)return e;let o=s.bg?{fg:r,bg:s.bg}:{fg:r};return`${qt(o)}${e}${qt(s)}`}Ae();var Ns=["Runners","Help"];function js(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 Go(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 Xo(e,t){return t==="UP"||t==="k"?{kind:"render",menuIndex:Math.max(0,e-1)}:t==="DOWN"||t==="j"?{kind:"render",menuIndex:Math.min(Ns.length-1,e+1)}:t==="ESCAPE"?{kind:"back"}:Hs(t)?e===0?{kind:"runners"}:{kind:"help"}:{kind:"noop",menuIndex:e}}function Yo(e,t,r,s){if(e.pathEdit)return hh({...e,pathEdit:e.pathEdit},t,r);let o=js(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(!Hs(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:fh(t,m,!y),state:{...e,message:`${be(m).displayName} ${y?"disabled":"enabled"}.`}}}function hh(e,t,r){if(r==="ESCAPE")return{kind:"render",state:Vo({...e,message:null})};if(r==="BACKSPACE")return{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:e.pathEdit.value.slice(0,-1)}}};if(Hs(r)){let s=e.pathEdit.runner,o=e.pathEdit.value.trim();return{kind:"save",config:ph(t,s,o.length>0?o:null),state:Vo({...e,message:o.length>0?`${be(s).displayName} executable saved.`:`${be(s).displayName} executable reset to default.`})}}return gh(r)?{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:`${e.pathEdit.value}${r}`}}}:{kind:"noop",state:e}}function fh(e,t,r){return{...e,runners:{...e.runners??{},[t]:{...e.runners?.[t]??{},enabled:r}}}}function ph(e,t,r){let s={...e.runners?.[t]??{},...r?{path:r}:{}};return r||delete s.path,{...e,runners:{...e.runners??{},[t]:s}}}function Vo(e){let t={...e};return delete t.pathEdit,t}function Hs(e){return e==="ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
|
|
103
|
+
`}function gh(e){return e.length===1&&e>=" "&&e!=="\x7F"}var kh=mh(import.meta.url),bh=kh("terminal-kit"),yh=bh.terminal;async function Zo(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 Kt(t,void 0,o),f=fr(Un(m,s),l);l=await Kt(t,f,o);let k=()=>{},a={workspaceRoot:t,onUpdate:()=>k(),resolveSessionSpec:(g,_)=>Rh(l,_,t)},w=e.ptyRuntime??await vo({...a,paths:r}),c=g=>{if(!e.uiStateFile)return;m=qn(m,g);let _=m;y=y.then(()=>Pe({uiStateFile:e.uiStateFile},_),()=>Pe({uiStateFile:e.uiStateFile},_)),y.catch(()=>{})};return new Promise(g=>{let _=e.terminal??yh,i={mode:"overlay",variant:"boot",menuIndex:0,optionsMessage:null,shell:fr(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 Ht(B,z.getViewState(B.selectedPtyTabId))}function N(B){return X(vh(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=Sh(W?.fileRows??[],B.collapsedFileTreePaths);return{leftItemIds:Th(l),centerTabIds:Yn(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 Kt(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=ea(l.tasks,B),W=l.inspection,K;if(M&&W?.taskId===M.id){let J={selectedFilePath:B.selectedFilePath,selectedDiffPath:B.selectedDiffPath},ue=await gn(M,W,J);if(O!==D)return;K={...l,inspection:ue}}else if(K=await Kt(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 Bh(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:Ht({...K,inputMode:"terminal"},z.getViewState(W))},c(i.shell);let J=await z.ensureSession(K.selectedTaskId,W,Us(vt(_.width,_.height)));h=qs(W),d=null,i={mode:"main",shell:Ht({...K,inputMode:"terminal"},J)},c(i.shell)}catch(O){let M=O instanceof Error?O.message:"Failed to start PTY.";B.selectedTaskId&&B.selectedPtyTabId&&qs(B.selectedPtyTabId)&&(await Z(B.selectedTaskId,M).catch(()=>{}),await U().catch(()=>{})),i={mode:"main",shell:zn(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??Ih(J,W.activeTab,W.preferredPtyTabKind),Ee=Jo(J,ue,M??void 0,s),Rt={...J,ptyTabs:[...J.ptyTabs,Ee],selectedPtyTabId:Ee.id};return await re(r,Rt),Rt});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(Dr=>Dr.id===O.activeTab);if(J===-1)throw new Error("Only PTY tabs can be closed.");let ue=K.ptyTabs[J],Ee=K.ptyTabs.filter(Dr=>Dr.id!==ue.id),Rt=Ee[Math.min(J,Ee.length-1)]??Ee[J-1]??null;return await re(r,{...K,ptyTabs:Ee,selectedPtyTabId:Rt?.id??null}),{closedTab:ue,nextSelectedTab:Rt}});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 Mt(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 es(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 ts(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 es(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 ts(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 Kt(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 Ot(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 Rn(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 $t(r,O.selectedWorkspaceId);let W=await Ft(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=Jo(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=()=>{ra();let B=vt(_.width,_.height),O=i.mode==="main"?Bo(B,so(N(i.shell),l),{centerOnly:i.shell.centerZoomed}):i.variant==="boot"?Lo(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="pause"?Mo(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="options"?$s(B,{menuIndex:i.menuIndex,optionsMenuItems:Ns}):i.variant==="runners"?$s(B,{menuIndex:zt(i).menuIndex,optionsMenuItems:js(s,zt(i)),optionsMessage:Go(zt(i)),optionsSubtitle:"Runners"}):Oo(B);x&&(_.moveTo(1,1),_.eraseDisplayBelow(),x=!1),_.noFormat(Eh(O)),_.hideCursor(!0)};function ra(){let B=i.mode==="main"&&i.shell.inputMode==="terminal"?"terminal":"control";B!==A&&(A=B,_.grabInput(B==="terminal"?{mouse:"button"}:!0))}let sa=()=>{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)},Er=B=>{sa(),g(B)},ia=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 xh(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??ta(M,"agent"),Us(vt(_.width,_.height)));h=qs(W.selectedPtyTabId),i={mode:"main",shell:Ht(W,K)},c(i.shell)}catch(W){W instanceof Ir&&(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()}},na=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)){ia();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:bs(O.selectedRunner,o),taskPromptError:null})},L();return}Vn(B)&&(i={mode:"main",shell:N({...O,taskPromptInput:`${O.taskPromptInput}${B}`,taskPromptError:null})},L())}},oa=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(Tt.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}Bt(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){na(O);return}if(i.mode==="main"&&i.shell.workspaceBrowser!==null){oa(O);return}if(i.mode==="main"){let M=Kn(i.shell,O,R(i.shell));if(M.exit){Er(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=Dh(O)?{key:O,at:Date.now()}:null;let W=Lh(O,i.shell.terminal.scrolledBack??!1);if(W!==0){Ar(W);return}z.writeKey(O);return}if(O==="CTRL_C"){Er(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"){aa(O);return}if(i.variant==="runners"){ca(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}Er(0)}};function aa(B){if(i.mode!=="overlay"||i.variant!=="options")return;let O=Xo(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 ca(B){if(i.mode!=="overlay"||i.variant!=="runners")return;let O=Yo(zt(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:{...zt(i),message:W}},L()})}}let Vs=B=>{let O=Ah(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=Mh(O);if(M!==0){Ar(M);return}if(h&&O!=="\r"&&O!==`
|
|
104
104
|
`&&O!==`\r
|
|
105
|
-
`&&(h=!1),
|
|
106
|
-
`).map((t,r)=>`\x1B[${r+1};1H${t}`).join("")}function
|
|
105
|
+
`&&(h=!1),Oh(h,d,O)){h=!1;return}z.write(O)},Gs=B=>{if(i.mode!=="main")return;if(i.shell.inputMode==="control"){da(Qo(B));return}let O=Qo(B);O!==0&&Ar(O)};function Ar(B){u+=B,!S&&(S=setTimeout(()=>{S=null;let O=u;u=0,O!==0&&(la(O),L())},16))}function la(B){z.scrollViewport(B),i={mode:"main",shell:X(i.shell)}}function da(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(Us(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 Kt(e,t,r){let s=Ke(e),[o,m,y]=await Promise.all([dt(s),Me(s),Ne(s)]),n=ea(y.tasks,t),l=t?{selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath}:{},f=n?await mn(n,l):null;return{workspaceRoot:e,workspaces:m.filter(k=>k.status==="active"),repos:o,tasks:y.tasks,inspection:f,...r?{enabledRunnerIds:r}:{}}}function ea(e,t){return t?.selectedTaskId?e.find(r=>r.id===t.selectedTaskId)??null:null}function vh(e,t){return fr(e,t)}function Sh(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 Th(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 Rh(e,t,r){let s=e.tasks.find(n=>n.ptyTabs.some(l=>l.id===t))??null,o=s?.ptyTabs.find(n=>n.id===t)??null,m=s?.worktreePath??r,y=o?.kind==="agent"?Ph(o):[];return s?.type==="project"?{cwd:m,command:y,env:{GIT_CEILING_DIRECTORIES:Ch(process.env.GIT_CEILING_DIRECTORIES,m)}}:{cwd:m,command:y}}function Ch(e,t){let r=(e??"").split(Tt.delimiter).filter(s=>s.length>0);return r.includes(t)?r.join(Tt.delimiter):[...r,t].join(Tt.delimiter)}function Ph(e){return e.command.length>0?e.command:["codex"]}function zt(e){return e.runnerOptions??{menuIndex:e.menuIndex,message:e.optionsMessage}}function Ih(e,t,r){return e.ptyTabs.find(s=>s.id===t)?.kind??r}function Jo(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 xh(e,t,r,s,o){let m=await ye(e);Vt(o,m);let y=r?await sr(e,r,s,{runner:o,config:m}):await At(e,t??"",s,{runner:o,config:m});try{let f=ct();await Q(lt(Mr(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 Ir(k,a)}let n=ta(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 Ir=class extends Error{task;constructor(t,r){super(t),this.name="InteractiveTaskStartupError",this.task=r}};function ta(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 Us(e){return{columns:Math.max(20,e.width-Be.leftWidth-Be.rightWidth-Be.dividerWidth-Rr*2),rows:Math.max(5,e.height-Be.topRailHeight-5)}}function Eh(e){return e.split(`
|
|
106
|
+
`).map((t,r)=>`\x1B[${r+1};1H${t}`).join("")}function Ah(e){return typeof e=="string"?e:Buffer.isBuffer(e)?e.toString("utf8"):""}function Dh(e){return e.length===1||tt(e)||e==="BACKSPACE"||e==="TAB"}function qs(e){return typeof e=="string"&&new RegExp(`:(?:agent|${ce.join("|")})(?:-\\d+)?$`).test(e)}function Lh(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 Qo(e){return e==="MOUSE_WHEEL_UP"?-3:e==="MOUSE_WHEEL_DOWN"?3:0}function Mh(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 Oh(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
|
|
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 Bh(e){let t=await _h(e,{withFileTypes:!0}),r=[];for(let s of t){if(!s.isDirectory())continue;let o=Tt.join(e,s.name);r.push({name:s.name,path:o,kind:await $h(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 $h(e){let t=Tt.join(e,".git");return await wh(t).catch(()=>null)!==null}function xr(){return process.cwd()}async function Fh(){try{if(process.argv[2]==="__craig-daemon"){let n=process.argv[3]??xr(),l=Ke(n);return await yt(n),await So(l),0}if(process.argv[2]==="__craig-daemon-shutdown"){let n=process.argv[3]??xr(),l=Ke(n);return await yt(n),await To(l),0}let e=Js(process.argv.slice(2)),t=xr(),r=Ke(t),s=await yt(t),o={paths:r};if(e.mode==="interactive")return await Zo({uiStateFile:r.uiStateFile,workspaceRoot:r.workspaceRoot});if(!e.command)throw new Error("Command mode requires a command.");let m=await hn(e.command,o),y=fn(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
|
|
110
|
+
`),1}}var Wh=await Fh();process.exit(Wh);
|