craig-cli 0.4.8 → 0.4.10
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 +41 -39
- 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"&&ti(t.ptyTabs)&&(t.bundlePath===void 0||t.bundlePath===null||typeof t.bundlePath=="string")&&(t.selectedRepoTargetId===void 0||t.selectedRepoTargetId===null||typeof t.selectedRepoTargetId=="string")&&(t.repoTargets===void 0||qa(t.repoTargets))&&Va(t.runnerSession)&&Ga(t.prompt)&&ri(t.checks)&&si(t.lastCommit)&&ii(t.pullRequest)&&Xa(t.artifacts)&&ni(t.cleanup)&&(t.lastFailureReason===void 0||t.lastFailureReason===null||typeof t.lastFailureReason=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"}function Ua(e){if(Array.isArray(e))return e.filter(ei)}function qa(e){return Array.isArray(e)&&e.every(ei)}function ei(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.repoId=="string"&&typeof t.branch=="string"&&typeof t.repoRoot=="string"&&typeof t.worktreePath=="string"&&(t.status==="ready"||t.status==="unavailable"||t.status==="merged"||t.status==="closed")&&(typeof t.failureReason=="string"||t.failureReason===null)&&ri(t.checks)&&si(t.lastCommit)&&ii(t.pullRequest)&&ni(t.cleanup)}function Ka(e){if(ti(e.ptyTabs))return e.ptyTabs;if(typeof e.id!="string"||typeof e.title!="string")return[];let t=typeof e.updatedAt=="string"?e.updatedAt:new Date().toISOString();return za(e.id,e.title,t,Wr(e.runner))}function za(e,t,r,s){let o=be(s);return[{id:`${e}:agent`,kind:"agent",title:o.defaultAgentTitle,command:me(s),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function Wr(e){return e&&_t(e)?e:"codex"}function ti(e){return Array.isArray(e)&&e.every(t=>typeof t=="object"&&t!==null&&typeof t.id=="string"&&(t.kind==="agent"||t.kind==="terminal")&&typeof t.title=="string"&&Array.isArray(t.command)&&t.command.every(r=>typeof r=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string")}function Va(e){return typeof e=="object"&&e!==null&&Array.isArray(e.command)&&e.command.every(t=>typeof t=="string")&&(typeof e.pid=="number"||e.pid===null)&&(typeof e.startedAt=="string"||e.startedAt===null)&&(e.lastKnownState==="starting"||e.lastKnownState==="running"||e.lastKnownState==="exited"||e.lastKnownState==="failed")&&(typeof e.exitCode=="number"||e.exitCode===null)&&(typeof e.exitedAt=="string"||e.exitedAt===null)}function Ga(e){return typeof e=="object"&&e!==null&&(e.source==="inline"||e.source==="file")&&typeof e.value=="string"}function ri(e){return typeof e=="object"&&e!==null&&typeof e.source=="object"&&e.source!==null&&e.source.type==="repo_config"&&typeof e.source.path=="string"&&(typeof e.lastRunAt=="string"||e.lastRunAt===null)&&(e.status==="not_run"||e.status==="running"||e.status==="passed"||e.status==="failed")&&Array.isArray(e.commands)&&e.commands.every(t=>typeof t=="string")&&Array.isArray(e.results)&&e.results.every(t=>typeof t=="object"&&t!==null&&typeof t.command=="string"&&typeof t.startedAt=="string"&&typeof t.finishedAt=="string"&&typeof t.exitCode=="number")}function si(e){return e===null||typeof e=="object"&&e!==null&&typeof e.sha=="string"&&typeof e.message=="string"&&typeof e.committedAt=="string"}function ii(e){return typeof e=="object"&&e!==null&&e.provider==="github"&&(typeof e.number=="number"||e.number===null)&&(typeof e.url=="string"||e.url===null)&&(typeof e.baseBranch=="string"||e.baseBranch===null)&&(typeof e.headBranch=="string"||e.headBranch===null)&&(e.status==="open"||e.status==="closed"||e.status==="merged"||e.status===null)&&typeof e.mergeable=="boolean"&&(typeof e.mergeStateStatus=="string"||e.mergeStateStatus===null)&&Array.isArray(e.requiredChecks)&&e.requiredChecks.every(t=>typeof t=="object"&&t!==null&&typeof t.name=="string"&&(t.status==="pending"||t.status==="success"||t.status==="failed"||t.status==="skipped"||t.status==="unknown")&&(typeof t.conclusion=="string"||t.conclusion===null))&&(typeof e.lastSyncedAt=="string"||e.lastSyncedAt===null)&&(typeof e.lastSyncedHeadSha=="string"||e.lastSyncedHeadSha===null||e.lastSyncedHeadSha===void 0)}function Xa(e){return typeof e=="object"&&e!==null&&(typeof e.logPath=="string"||e.logPath===null)&&(typeof e.checkSummaryPath=="string"||e.checkSummaryPath===null)&&(typeof e.prDraftPath=="string"||e.prDraftPath===null)&&(typeof e.prStatusPath=="string"||e.prStatusPath===null)}function ni(e){return typeof e=="object"&&e!==null&&(typeof e.paneClosedAt=="string"||e.paneClosedAt===null)&&(typeof e.worktreeRemovedAt=="string"||e.worktreeRemovedAt===null)&&typeof e.preservedWorktree=="boolean"&&(typeof e.warning=="string"||e.warning===null)}function Ya(e){return e.checks?{...e.checks,results:e.checks.results??[]}:{source:{type:"repo_config",path:".craig/config.json"},lastRunAt:null,status:"not_run",commands:[],results:[]}}function Ja(e){let t=e.pullRequest;return t?{...t,mergeStateStatus:t.mergeStateStatus??null,requiredChecks:Qa(t.requiredChecks),lastSyncedHeadSha:t.lastSyncedHeadSha??null}:{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,mergeable:!1,mergeStateStatus:null,requiredChecks:[],lastSyncedAt:null,lastSyncedHeadSha:null}}function Qa(e){return Array.isArray(e)?e.map(t=>({...t,status:t.status==="pending"||t.status==="success"||t.status==="failed"||t.status==="skipped"||t.status==="unknown"?t.status:"unknown",conclusion:t.conclusion??null})):[]}function Za(e){let t=e.artifacts;return t?{...t,checkSummaryPath:t.checkSummaryPath??null}:{logPath:null,checkSummaryPath:null,prDraftPath:null,prStatusPath:null}}function ec(e){return e.cleanup??{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}var _e=$e(()=>{"use strict";Fe();at();Ae()});import{readFile as tc}from"node:fs/promises";async function De(e){try{let t=await tc(e.uiStateFile,"utf8"),r=JSON.parse(t);return rc(r,e.uiStateFile)}catch(t){if(ic(t))return null;throw t}}async function Pe(e,t){await le(e.uiStateFile,{...t,updatedAt:new Date().toISOString()})}function We(){return{version:1,selectedRepoId:null,selectedWorkspaceId:null,selectedTaskId:null,selectedPtyTabId:null,inputMode:"control",focusedRegion:"tasks",activeTab:"agent",inspectorSection:"task",inspectionMode:"files",openInspectionKind:null,selectedFileTreePath:null,selectedFilePath:null,selectedDiffPath:null,collapsedFileTreePaths:[],selectedActionId:"commit",updatedAt:new Date().toISOString()}}function rc(e,t){if(typeof e!="object"||e===null||e.version!==1||!(e.selectedRepoId===null||typeof e.selectedRepoId=="string")||!(e.selectedWorkspaceId===null||typeof e.selectedWorkspaceId=="string")||!(e.selectedTaskId===null||typeof e.selectedTaskId=="string")||!(e.selectedPtyTabId===void 0||e.selectedPtyTabId===null||typeof e.selectedPtyTabId=="string")||!wt(e,"inputMode")||!wt(e,"focusedRegion")||!wt(e,"activeTab")||!wt(e,"inspectorSection")||!wt(e,"inspectionMode")||!Vt(e,"openInspectionKind")||!Vt(e,"selectedFileTreePath")||!Vt(e,"selectedFilePath")||!Vt(e,"selectedDiffPath")||!sc(e,"collapsedFileTreePaths")||!wt(e,"selectedActionId")||typeof e.updatedAt!="string")throw new Error(`Craig UI state at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return e}function wt(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||typeof e[t]=="string")}function Vt(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||e[t]===null||typeof e[t]=="string")}function sc(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||Array.isArray(e[t])&&e[t].every(r=>typeof r=="string"))}function ic(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var kt=$e(()=>{"use strict";Fe()});import{execFile as nc}from"node:child_process";import{promisify as oc}from"node:util";async function Q(e,t,r={}){try{let s=await oi(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr}}catch(s){if(ai(s)){let o=s.stderr?.trim()||s.stdout?.trim()||s.message;throw new Error(`${e} ${t.join(" ")} failed: ${o}`)}throw s}}async function ae(e,t,r={}){try{let s=await oi(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr,exitCode:0}}catch(s){if(ai(s))return{stdout:s.stdout??"",stderr:s.stderr??"",exitCode:typeof s.code=="number"?s.code:null};throw s}}function ai(e){return e instanceof Error}var oi,Ie=$e(()=>{"use strict";oi=oc(nc)});import{readFile as Sc,readdir as Tc,rm as Rc}from"node:fs/promises";import wi from"node:path";async function Le(e,t){let r=await Sc(Yt(e,t),"utf8"),s=JSON.parse(r);return Cc(s,Yt(e,t))}async function Jt(e,t){await le(Yt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function dt(e){let t=await Tc(e.reposDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Le(e,wi.basename(s.name,".json"))))).sort((s,o)=>s.name.localeCompare(o.name)||s.id.localeCompare(o.id))}async function ki(e,t){await Rc(Yt(e,t),{force:!0})}function Yt(e,t){return wi.join(e.reposDir,`${t}.json`)}function Cc(e,t){if(typeof e!="object"||e===null||typeof e.id!="string"||typeof e.name!="string"||typeof e.rootPath!="string"||typeof e.defaultBranch!="string"||typeof e.createdAt!="string"||typeof e.updatedAt!="string")throw new Error(`Craig repo record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return e}var ut=$e(()=>{"use strict";Fe()});import{readFile as Pc,readdir as Ic,rm as xc}from"node:fs/promises";import bi from"node:path";async function Ct(e,t){let r=await Pc(Qt(e,t),"utf8"),s=JSON.parse(r);return Ec(s,Qt(e,t))}async function bt(e,t){await le(Qt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function Me(e){let t=await Ic(e.workspacesDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Ct(e,bi.basename(s.name,".json"))))).sort((s,o)=>s.id.localeCompare(o.id))}async function yi(e,t){await xc(Qt(e,t),{force:!0})}function Qt(e,t){return bi.join(e.workspacesDir,`${t}.json`)}function Ec(e,t){let r=Ac(e);if(typeof r!="object"||r===null||typeof r.id!="string"||r.kind!=="repo"&&r.kind!=="project"||typeof r.name!="string"||typeof r.rootPath!="string"||typeof r.primaryRepoId!="string"||typeof r.branch!="string"||r.status!=="active"&&r.status!=="archived"||!Array.isArray(r.linkedRepoIds)||!(r.linkedRepoIds??[]).every(s=>typeof s=="string")||!(r.repoId===void 0||typeof r.repoId=="string")||!Array.isArray(r.discoveredRepoIds)||!(r.discoveredRepoIds??[]).every(s=>typeof s=="string")||!(r.archivedAt===null||typeof r.archivedAt=="string")||typeof r.createdAt!="string"||typeof r.updatedAt!="string")throw new Error(`Craig workspace record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function Ac(e){if(typeof e!="object"||e===null)return e;let t=e,r=t.repoId??t.primaryRepoId;return{...t,kind:t.kind??"repo",name:t.name??r??t.id,rootPath:t.rootPath??"",primaryRepoId:t.primaryRepoId??r??"",repoId:t.kind==="project"?t.repoId:r,discoveredRepoIds:Array.isArray(t.discoveredRepoIds)?t.discoveredRepoIds.filter(s=>typeof s=="string"):t.kind==="project"?[]:r?[r]:[],linkedRepoIds:Array.isArray(t.linkedRepoIds)?t.linkedRepoIds.filter(s=>typeof s=="string"):[]}}var Pt=$e(()=>{"use strict";Fe()});async function Ne(e,t){let r=await Re(e),s=[],o=[];await Promise.all(r.taskIds.map(async n=>{try{s.push(await Ce(e,n))}catch(l){if(Fc(l)){o.push(n);return}throw l}}));let y=(t?.includeClosed?s:s.filter(n=>n.status!=="closed")).filter(n=>!(t?.workspaceId&&n.workspaceId!==t.workspaceId||t?.repoId&&n.repoId!==t.repoId&&!(n.repoTargets??[]).some(l=>l.repoId===t.repoId)));return y.sort((n,l)=>n.id.localeCompare(l.id)),o.sort(),{kind:"listTasks",tasks:y,missingTaskIds:o,repoId:t?.repoId??null}}function Fc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var At=$e(()=>{"use strict";at();_e()});var nn={};ma(nn,{addWorkspace:()=>Ot,archiveWorkspace:()=>Bt,listWorkspaces:()=>cs,removeWorkspace:()=>$t,removeWorkspaceRecord:()=>nr,restoreWorkspace:()=>ls});import{readdir as ul,realpath as Ji,stat as hl}from"node:fs/promises";import Qe from"node:path";async function Ot(e,t){let r=Qe.resolve(e.workspaceRoot,t);if(!(await hl(r).catch(()=>null))?.isDirectory())throw new Error(`Workspace path does not exist: ${r}`);return await tn(r)?fl(e,r):pl(e,r)}async function cs(e,t){return{kind:"listWorkspaces",workspaces:(await Me(e)).filter(s=>s.status===(t.archived?"archived":"active")),archivedOnly:t.archived}}async function Bt(e,t){let s={...await Ct(e,t),status:"archived",archivedAt:new Date().toISOString()};return await bt(e,s),await sn(e,t),{kind:"archiveWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function ls(e,t){let s={...await Ct(e,t),status:"active",archivedAt:null};await bt(e,s);let o=await De({uiStateFile:e.uiStateFile})??null;return await Pe({uiStateFile:e.uiStateFile},{...o??We(),selectedWorkspaceId:s.id,selectedRepoId:s.kind==="project"?s.discoveredRepoIds?.[0]??null:s.primaryRepoId,selectedTaskId:null}),{kind:"restoreWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function $t(e,t){let r=await Ct(e,t),s=await Ne(e,{workspaceId:t,includeClosed:!0});if(r.status==="active")throw new Error(`Cannot remove workspace ${t} while it is active. Archive it first.`);if(s.tasks.length>0)throw new Error(`Cannot remove workspace ${t} while task records still reference it.`);return await nr(e,t),await sn(e,t),{kind:"removeWorkspace",workspaceId:r.id,rootPath:r.rootPath??""}}async function fl(e,t){let r=await rn(t),s=await dt(e),o=s.find(a=>a.rootPath===t)??null,m=o??Qi(s,t,r),y=`workspace_${m.id}`,l=(await Me(e)).find(a=>a.id===y)??null,f=new Date().toISOString(),k=l??{id:y,kind:"repo",name:m.name,rootPath:t,primaryRepoId:m.id,repoId:m.id,discoveredRepoIds:[m.id],branch:r,status:"active",linkedRepoIds:[],archivedAt:null,createdAt:f,updatedAt:f};return o||await Jt(e,m),l||await bt(e,k),await Zi(e,{repoIds:[m.id],workspaceIds:[k.id]}),await en(e,k,m.id),{kind:"createWorkspace",workspace:k,repos:[m],created:!l}}async function pl(e,t){let r=await gl(e,t);if(r.length===0)throw new Error(`Workspace path does not contain direct child Git repos: ${t}`);let s=await Me(e),o=_l(s,Qe.basename(t)),m=s.find(f=>f.kind==="project"&&f.rootPath===t)??null,y=new Date().toISOString(),n=r.map(f=>f.id),l=m?{...m,discoveredRepoIds:n,primaryRepoId:n[0]??m.primaryRepoId,status:"active",archivedAt:null}:{id:o,kind:"project",name:Qe.basename(t),rootPath:t,primaryRepoId:n[0]??"",discoveredRepoIds:n,branch:"project",status:"active",linkedRepoIds:n,archivedAt:null,createdAt:y,updatedAt:y};return await Promise.all(r.map(f=>Jt(e,f))),await bt(e,l),await Zi(e,{repoIds:n,workspaceIds:[l.id]}),await en(e,l,n[0]??null),{kind:"createWorkspace",workspace:l,repos:r,created:!m}}async function gl(e,t){let r=await ul(t,{withFileTypes:!0}),s=await dt(e),o=[];for(let m of r){if(!m.isDirectory()||m.name.startsWith("."))continue;let y=Qe.join(t,m.name);if(!await tn(y))continue;let n=s.find(l=>l.rootPath===y)??o.find(l=>l.rootPath===y);o.push(n??Qi([...s,...o],y,await rn(y)))}return o.sort((m,y)=>m.name.localeCompare(y.name)||m.id.localeCompare(y.id))}function Qi(e,t,r){let s=new Date().toISOString();return{id:ml(e,Qe.basename(t)),name:Qe.basename(t),rootPath:t,defaultBranch:r,createdAt:s,updatedAt:s}}function ml(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"repo",s=`repo_${r}`,o=2;for(;e.some(m=>m.id===s);)s=`repo_${r}_${o}`,o+=1;return s}function _l(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"workspace",s=`workspace_${r}`,o=2;for(;e.some(m=>m.id===s);)s=`workspace_${r}_${o}`,o+=1;return s}async function Zi(e,t){let r=await Re(e);await ot(e,{...r,repoIds:[...new Set([...r.repoIds,...t.repoIds])],workspaceIds:[...new Set([...r.workspaceIds,...t.workspaceIds])]})}async function en(e,t,r){await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),selectedRepoId:r,selectedWorkspaceId:t.id,selectedTaskId:null})}async function tn(e){try{let r=(await Q("git",["rev-parse","--show-toplevel"],{cwd:e})).stdout.trim(),[s,o]=await Promise.all([Ji(r).catch(()=>Qe.resolve(r)),Ji(e).catch(()=>Qe.resolve(e))]);return s===o}catch{return!1}}async function rn(e){let r=(await Q("git",["branch","--show-current"],{cwd:e})).stdout.trim();return r.length>0?r:"HEAD"}async function nr(e,t){await yi(e,t);let r=await Re(e);await ot(e,{...r,workspaceIds:r.workspaceIds.filter(s=>s!==t)})}async function sn(e,t){let r=await De({uiStateFile:e.uiStateFile});!r||r.selectedWorkspaceId!==t||await Pe({uiStateFile:e.uiStateFile},{...r,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null})}var Ft=$e(()=>{"use strict";at();ut();Pt();kt();Ie();At()});var lo=ga(co=>{(()=>{"use strict";var e={5639:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CircularList=void 0;let f=l(7150),k=l(802);class a extends f.Disposable{constructor(c){super(),this._maxLength=c,this.onDeleteEmitter=this._register(new k.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new k.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new k.Emitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(c){if(this._maxLength===c)return;let g=new Array(c);for(let _=0;_<Math.min(c,this.length);_++)g[_]=this._array[this._getCyclicIndex(_)];this._array=g,this._maxLength=c,this._startIndex=0}get length(){return this._length}set length(c){if(c>this._length)for(let g=this._length;g<c;g++)this._array[g]=void 0;this._length=c}get(c){return this._array[this._getCyclicIndex(c)]}set(c,g){this._array[this._getCyclicIndex(c)]=g}push(c){this._array[this._getCyclicIndex(this._length)]=c,this._length===this._maxLength?(this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1)):this._length++}recycle(){if(this._length!==this._maxLength)throw new Error("Can only recycle when the buffer is full");return this._startIndex=++this._startIndex%this._maxLength,this.onTrimEmitter.fire(1),this._array[this._getCyclicIndex(this._length-1)]}get isFull(){return this._length===this._maxLength}pop(){return this._array[this._getCyclicIndex(this._length---1)]}splice(c,g,..._){if(g){for(let i=c;i<this._length-g;i++)this._array[this._getCyclicIndex(i)]=this._array[this._getCyclicIndex(i+g)];this._length-=g,this.onDeleteEmitter.fire({index:c,amount:g})}for(let i=this._length-1;i>=c;i--)this._array[this._getCyclicIndex(i+_.length)]=this._array[this._getCyclicIndex(i)];for(let i=0;i<_.length;i++)this._array[this._getCyclicIndex(c+i)]=_[i];if(_.length&&this.onInsertEmitter.fire({index:c,amount:_.length}),this._length+_.length>this._maxLength){let i=this._length+_.length-this._maxLength;this._startIndex+=i,this._length=this._maxLength,this.onTrimEmitter.fire(i)}else this._length+=_.length}trimStart(c){c>this._length&&(c=this._length),this._startIndex+=c,this._length-=c,this.onTrimEmitter.fire(c)}shiftElements(c,g,_){if(!(g<=0)){if(c<0||c>=this._length)throw new Error("start argument out of range");if(c+_<0)throw new Error("Cannot shift elements in list beyond index 0");if(_>0){for(let p=g-1;p>=0;p--)this.set(c+p+_,this.get(c+p));let i=c+g+_-this._length;if(i>0)for(this._length+=i;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let i=0;i<g;i++)this.set(c+i+_,this.get(c+i))}}_getCyclicIndex(c){return(this._startIndex+c)%this._maxLength}}n.CircularList=a},7453:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.clone=function l(f,k=5){if(typeof f!="object")return f;let a=Array.isArray(f)?[]:{};for(let w in f)a[w]=k<=1?f[w]:f[w]&&l(f[w],k-1);return a}},5777:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CoreTerminal=void 0;let f=l(6501),k=l(6025),a=l(7276),w=l(9640),c=l(56),g=l(4071),_=l(7792),i=l(6415),p=l(5746),h=l(5882),d=l(2486),u=l(3562),b=l(8811),S=l(802),P=l(7150),E=!1;class H extends P.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new S.Emitter),this._onScroll.event((D=>{this._onScrollApi?.fire(D.position)}))),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(D){for(let x in D)this.optionsService.options[x]=D[x]}constructor(D){super(),this._windowsWrappingHeuristics=this._register(new P.MutableDisposable),this._onBinary=this._register(new S.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new S.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new S.Emitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this._register(new S.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new S.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new S.Emitter),this._instantiationService=new k.InstantiationService,this.optionsService=this._register(new c.OptionsService(D)),this._instantiationService.setService(f.IOptionsService,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(w.BufferService)),this._instantiationService.setService(f.IBufferService,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(a.LogService)),this._instantiationService.setService(f.ILogService,this._logService),this.coreService=this._register(this._instantiationService.createInstance(g.CoreService)),this._instantiationService.setService(f.ICoreService,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(_.CoreMouseService)),this._instantiationService.setService(f.ICoreMouseService,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(i.UnicodeService)),this._instantiationService.setService(f.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(p.CharsetService),this._instantiationService.setService(f.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(b.OscLinkService),this._instantiationService.setService(f.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new d.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register(S.Event.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register(S.Event.forward(this._bufferService.onResize,this._onResize)),this._register(S.Event.forward(this.coreService.onData,this._onData)),this._register(S.Event.forward(this.coreService.onBinary,this._onBinary)),this._register(this.coreService.onRequestScrollToBottom((()=>this.scrollToBottom(!0)))),this._register(this.coreService.onUserInput((()=>this._writeBuffer.handleUserInput()))),this._register(this.optionsService.onMultipleOptionChange(["windowsMode","windowsPty"],(()=>this._handleWindowsPtyOptionChange()))),this._register(this._bufferService.onScroll((()=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this._writeBuffer=this._register(new u.WriteBuffer(((x,A)=>this._inputHandler.parse(x,A)))),this._register(S.Event.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(D,x){this._writeBuffer.write(D,x)}writeSync(D,x){this._logService.logLevel<=f.LogLevelEnum.WARN&&!E&&(this._logService.warn("writeSync is unreliable and will be removed soon."),E=!0),this._writeBuffer.writeSync(D,x)}input(D,x=!0){this.coreService.triggerDataEvent(D,x)}resize(D,x){isNaN(D)||isNaN(x)||(D=Math.max(D,w.MINIMUM_COLS),x=Math.max(x,w.MINIMUM_ROWS),this._bufferService.resize(D,x))}scroll(D,x=!1){this._bufferService.scroll(D,x)}scrollLines(D,x){this._bufferService.scrollLines(D,x)}scrollPages(D){this.scrollLines(D*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(D){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(D){let x=D-this._bufferService.buffer.ydisp;x!==0&&this.scrollLines(x)}registerEscHandler(D,x){return this._inputHandler.registerEscHandler(D,x)}registerDcsHandler(D,x){return this._inputHandler.registerDcsHandler(D,x)}registerCsiHandler(D,x){return this._inputHandler.registerCsiHandler(D,x)}registerOscHandler(D,x){return this._inputHandler.registerOscHandler(D,x)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let D=!1,x=this.optionsService.rawOptions.windowsPty;x&&x.buildNumber!==void 0&&x.buildNumber!==void 0?D=x.backend==="conpty"&&x.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(D=!0),D?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){let D=[];D.push(this.onLineFeed(h.updateWindowsModeWrappedState.bind(null,this._bufferService))),D.push(this.registerCsiHandler({final:"H"},(()=>((0,h.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,P.toDisposable)((()=>{for(let x of D)x.dispose()}))}}}n.CoreTerminal=H},2486:function(y,n,l){var f=this&&this.__decorate||function(q,v,C,T){var R,F=arguments.length,j=F<3?v:T===null?T=Object.getOwnPropertyDescriptor(v,C):T;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")j=Reflect.decorate(q,v,C,T);else for(var U=q.length-1;U>=0;U--)(R=q[U])&&(j=(F<3?R(j):F>3?R(v,C,j):R(v,C))||j);return F>3&&j&&Object.defineProperty(v,C,j),j},k=this&&this.__param||function(q,v){return function(C,T){v(C,T,q)}};Object.defineProperty(n,"__esModule",{value:!0}),n.InputHandler=n.WindowsOptionsReportType=void 0,n.isValidColorIndex=N;let a=l(3534),w=l(6760),c=l(6717),g=l(7150),_=l(726),i=l(6107),p=l(8938),h=l(3055),d=l(5451),u=l(6501),b=l(6415),S=l(1346),P=l(9823),E=l(8693),H=l(802),$={"(":0,")":1,"*":2,"+":3,"-":1,".":2},D=131072;function x(q,v){if(q>24)return v.setWinLines||!1;switch(q){case 1:return!!v.restoreWin;case 2:return!!v.minimizeWin;case 3:return!!v.setWinPosition;case 4:return!!v.setWinSizePixels;case 5:return!!v.raiseWin;case 6:return!!v.lowerWin;case 7:return!!v.refreshWin;case 8:return!!v.setWinSizeChars;case 9:return!!v.maximizeWin;case 10:return!!v.fullscreenWin;case 11:return!!v.getWinState;case 13:return!!v.getWinPosition;case 14:return!!v.getWinSizePixels;case 15:return!!v.getScreenSizePixels;case 16:return!!v.getCellSizePixels;case 18:return!!v.getWinSizeChars;case 19:return!!v.getScreenSizeChars;case 20:return!!v.getIconTitle;case 21:return!!v.getWinTitle;case 22:return!!v.pushTitle;case 23:return!!v.popTitle;case 24:return!!v.setWinLines}return!1}var A;(function(q){q[q.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",q[q.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(A||(n.WindowsOptionsReportType=A={}));let L=0;class z extends g.Disposable{getAttrData(){return this._curAttrData}constructor(v,C,T,R,F,j,U,V,te=new c.EscapeSequenceParser){super(),this._bufferService=v,this._charsetService=C,this._coreService=T,this._logService=R,this._optionsService=F,this._oscLinkService=j,this._coreMouseService=U,this._unicodeService=V,this._parser=te,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new _.StringToUtf32,this._utf8Decoder=new _.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=i.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=i.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new H.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new H.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new H.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new H.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new H.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new H.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new H.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new H.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new H.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new H.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new H.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new H.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new H.Emitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new X(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate((I=>this._activeBuffer=I.activeBuffer))),this._parser.setCsiHandlerFallback(((I,Z)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(I),params:Z.toArray()})})),this._parser.setEscHandlerFallback((I=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(I)})})),this._parser.setExecuteHandlerFallback((I=>{this._logService.debug("Unknown EXECUTE code: ",{code:I})})),this._parser.setOscHandlerFallback(((I,Z,Y)=>{this._logService.debug("Unknown OSC code: ",{identifier:I,action:Z,data:Y})})),this._parser.setDcsHandlerFallback(((I,Z,Y)=>{Z==="HOOK"&&(Y=Y.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(I),action:Z,payload:Y})})),this._parser.setPrintHandler(((I,Z,Y)=>this.print(I,Z,Y))),this._parser.registerCsiHandler({final:"@"},(I=>this.insertChars(I))),this._parser.registerCsiHandler({intermediates:" ",final:"@"},(I=>this.scrollLeft(I))),this._parser.registerCsiHandler({final:"A"},(I=>this.cursorUp(I))),this._parser.registerCsiHandler({intermediates:" ",final:"A"},(I=>this.scrollRight(I))),this._parser.registerCsiHandler({final:"B"},(I=>this.cursorDown(I))),this._parser.registerCsiHandler({final:"C"},(I=>this.cursorForward(I))),this._parser.registerCsiHandler({final:"D"},(I=>this.cursorBackward(I))),this._parser.registerCsiHandler({final:"E"},(I=>this.cursorNextLine(I))),this._parser.registerCsiHandler({final:"F"},(I=>this.cursorPrecedingLine(I))),this._parser.registerCsiHandler({final:"G"},(I=>this.cursorCharAbsolute(I))),this._parser.registerCsiHandler({final:"H"},(I=>this.cursorPosition(I))),this._parser.registerCsiHandler({final:"I"},(I=>this.cursorForwardTab(I))),this._parser.registerCsiHandler({final:"J"},(I=>this.eraseInDisplay(I,!1))),this._parser.registerCsiHandler({prefix:"?",final:"J"},(I=>this.eraseInDisplay(I,!0))),this._parser.registerCsiHandler({final:"K"},(I=>this.eraseInLine(I,!1))),this._parser.registerCsiHandler({prefix:"?",final:"K"},(I=>this.eraseInLine(I,!0))),this._parser.registerCsiHandler({final:"L"},(I=>this.insertLines(I))),this._parser.registerCsiHandler({final:"M"},(I=>this.deleteLines(I))),this._parser.registerCsiHandler({final:"P"},(I=>this.deleteChars(I))),this._parser.registerCsiHandler({final:"S"},(I=>this.scrollUp(I))),this._parser.registerCsiHandler({final:"T"},(I=>this.scrollDown(I))),this._parser.registerCsiHandler({final:"X"},(I=>this.eraseChars(I))),this._parser.registerCsiHandler({final:"Z"},(I=>this.cursorBackwardTab(I))),this._parser.registerCsiHandler({final:"`"},(I=>this.charPosAbsolute(I))),this._parser.registerCsiHandler({final:"a"},(I=>this.hPositionRelative(I))),this._parser.registerCsiHandler({final:"b"},(I=>this.repeatPrecedingCharacter(I))),this._parser.registerCsiHandler({final:"c"},(I=>this.sendDeviceAttributesPrimary(I))),this._parser.registerCsiHandler({prefix:">",final:"c"},(I=>this.sendDeviceAttributesSecondary(I))),this._parser.registerCsiHandler({final:"d"},(I=>this.linePosAbsolute(I))),this._parser.registerCsiHandler({final:"e"},(I=>this.vPositionRelative(I))),this._parser.registerCsiHandler({final:"f"},(I=>this.hVPosition(I))),this._parser.registerCsiHandler({final:"g"},(I=>this.tabClear(I))),this._parser.registerCsiHandler({final:"h"},(I=>this.setMode(I))),this._parser.registerCsiHandler({prefix:"?",final:"h"},(I=>this.setModePrivate(I))),this._parser.registerCsiHandler({final:"l"},(I=>this.resetMode(I))),this._parser.registerCsiHandler({prefix:"?",final:"l"},(I=>this.resetModePrivate(I))),this._parser.registerCsiHandler({final:"m"},(I=>this.charAttributes(I))),this._parser.registerCsiHandler({final:"n"},(I=>this.deviceStatus(I))),this._parser.registerCsiHandler({prefix:"?",final:"n"},(I=>this.deviceStatusPrivate(I))),this._parser.registerCsiHandler({intermediates:"!",final:"p"},(I=>this.softReset(I))),this._parser.registerCsiHandler({intermediates:" ",final:"q"},(I=>this.setCursorStyle(I))),this._parser.registerCsiHandler({final:"r"},(I=>this.setScrollRegion(I))),this._parser.registerCsiHandler({final:"s"},(I=>this.saveCursor(I))),this._parser.registerCsiHandler({final:"t"},(I=>this.windowOptions(I))),this._parser.registerCsiHandler({final:"u"},(I=>this.restoreCursor(I))),this._parser.registerCsiHandler({intermediates:"'",final:"}"},(I=>this.insertColumns(I))),this._parser.registerCsiHandler({intermediates:"'",final:"~"},(I=>this.deleteColumns(I))),this._parser.registerCsiHandler({intermediates:'"',final:"q"},(I=>this.selectProtected(I))),this._parser.registerCsiHandler({intermediates:"$",final:"p"},(I=>this.requestMode(I,!0))),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},(I=>this.requestMode(I,!1))),this._parser.setExecuteHandler(a.C0.BEL,(()=>this.bell())),this._parser.setExecuteHandler(a.C0.LF,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.VT,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.FF,(()=>this.lineFeed())),this._parser.setExecuteHandler(a.C0.CR,(()=>this.carriageReturn())),this._parser.setExecuteHandler(a.C0.BS,(()=>this.backspace())),this._parser.setExecuteHandler(a.C0.HT,(()=>this.tab())),this._parser.setExecuteHandler(a.C0.SO,(()=>this.shiftOut())),this._parser.setExecuteHandler(a.C0.SI,(()=>this.shiftIn())),this._parser.setExecuteHandler(a.C1.IND,(()=>this.index())),this._parser.setExecuteHandler(a.C1.NEL,(()=>this.nextLine())),this._parser.setExecuteHandler(a.C1.HTS,(()=>this.tabSet())),this._parser.registerOscHandler(0,new S.OscHandler((I=>(this.setTitle(I),this.setIconName(I),!0)))),this._parser.registerOscHandler(1,new S.OscHandler((I=>this.setIconName(I)))),this._parser.registerOscHandler(2,new S.OscHandler((I=>this.setTitle(I)))),this._parser.registerOscHandler(4,new S.OscHandler((I=>this.setOrReportIndexedColor(I)))),this._parser.registerOscHandler(8,new S.OscHandler((I=>this.setHyperlink(I)))),this._parser.registerOscHandler(10,new S.OscHandler((I=>this.setOrReportFgColor(I)))),this._parser.registerOscHandler(11,new S.OscHandler((I=>this.setOrReportBgColor(I)))),this._parser.registerOscHandler(12,new S.OscHandler((I=>this.setOrReportCursorColor(I)))),this._parser.registerOscHandler(104,new S.OscHandler((I=>this.restoreIndexedColor(I)))),this._parser.registerOscHandler(110,new S.OscHandler((I=>this.restoreFgColor(I)))),this._parser.registerOscHandler(111,new S.OscHandler((I=>this.restoreBgColor(I)))),this._parser.registerOscHandler(112,new S.OscHandler((I=>this.restoreCursorColor(I)))),this._parser.registerEscHandler({final:"7"},(()=>this.saveCursor())),this._parser.registerEscHandler({final:"8"},(()=>this.restoreCursor())),this._parser.registerEscHandler({final:"D"},(()=>this.index())),this._parser.registerEscHandler({final:"E"},(()=>this.nextLine())),this._parser.registerEscHandler({final:"H"},(()=>this.tabSet())),this._parser.registerEscHandler({final:"M"},(()=>this.reverseIndex())),this._parser.registerEscHandler({final:"="},(()=>this.keypadApplicationMode())),this._parser.registerEscHandler({final:">"},(()=>this.keypadNumericMode())),this._parser.registerEscHandler({final:"c"},(()=>this.fullReset())),this._parser.registerEscHandler({final:"n"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:"o"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:"|"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:"}"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:"~"},(()=>this.setgLevel(1))),this._parser.registerEscHandler({intermediates:"%",final:"@"},(()=>this.selectDefaultCharset())),this._parser.registerEscHandler({intermediates:"%",final:"G"},(()=>this.selectDefaultCharset()));for(let I in w.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:I},(()=>this.selectCharset("("+I))),this._parser.registerEscHandler({intermediates:")",final:I},(()=>this.selectCharset(")"+I))),this._parser.registerEscHandler({intermediates:"*",final:I},(()=>this.selectCharset("*"+I))),this._parser.registerEscHandler({intermediates:"+",final:I},(()=>this.selectCharset("+"+I))),this._parser.registerEscHandler({intermediates:"-",final:I},(()=>this.selectCharset("-"+I))),this._parser.registerEscHandler({intermediates:".",final:I},(()=>this.selectCharset("."+I))),this._parser.registerEscHandler({intermediates:"/",final:I},(()=>this.selectCharset("/"+I)));this._parser.registerEscHandler({intermediates:"#",final:"8"},(()=>this.screenAlignmentPattern())),this._parser.setErrorHandler((I=>(this._logService.error("Parsing error: ",I),I))),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new P.DcsHandler(((I,Z)=>this.requestStatusString(I,Z))))}_preserveStack(v,C,T,R){this._parseStack.paused=!0,this._parseStack.cursorStartX=v,this._parseStack.cursorStartY=C,this._parseStack.decodedLength=T,this._parseStack.position=R}_logSlowResolvingAsync(v){this._logService.logLevel<=u.LogLevelEnum.WARN&&Promise.race([v,new Promise(((C,T)=>setTimeout((()=>T("#SLOW_TIMEOUT")),5e3)))]).catch((C=>{if(C!=="#SLOW_TIMEOUT")throw C;console.warn("async parser handler taking longer than 5000 ms")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(v,C){let T,R=this._activeBuffer.x,F=this._activeBuffer.y,j=0,U=this._parseStack.paused;if(U){if(T=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,C))return this._logSlowResolvingAsync(T),T;R=this._parseStack.cursorStartX,F=this._parseStack.cursorStartY,this._parseStack.paused=!1,v.length>D&&(j=this._parseStack.position+D)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+(typeof v=="string"?` "${v}"`:` "${Array.prototype.map.call(v,(I=>String.fromCharCode(I))).join("")}"`)),this._logService.logLevel===u.LogLevelEnum.TRACE&&this._logService.trace("parsing data (codes)",typeof v=="string"?v.split("").map((I=>I.charCodeAt(0))):v),this._parseBuffer.length<v.length&&this._parseBuffer.length<D&&(this._parseBuffer=new Uint32Array(Math.min(v.length,D))),U||this._dirtyRowTracker.clearRange(),v.length>D)for(let I=j;I<v.length;I+=D){let Z=I+D<v.length?I+D:v.length,Y=typeof v=="string"?this._stringDecoder.decode(v.substring(I,Z),this._parseBuffer):this._utf8Decoder.decode(v.subarray(I,Z),this._parseBuffer);if(T=this._parser.parse(this._parseBuffer,Y))return this._preserveStack(R,F,Y,I),this._logSlowResolvingAsync(T),T}else if(!U){let I=typeof v=="string"?this._stringDecoder.decode(v,this._parseBuffer):this._utf8Decoder.decode(v,this._parseBuffer);if(T=this._parser.parse(this._parseBuffer,I))return this._preserveStack(R,F,I,0),this._logSlowResolvingAsync(T),T}this._activeBuffer.x===R&&this._activeBuffer.y===F||this._onCursorMove.fire();let V=this._dirtyRowTracker.end+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp),te=this._dirtyRowTracker.start+(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp);te<this._bufferService.rows&&this._onRequestRefreshRows.fire({start:Math.min(te,this._bufferService.rows-1),end:Math.min(V,this._bufferService.rows-1)})}print(v,C,T){let R,F,j=this._charsetService.charset,U=this._optionsService.rawOptions.screenReaderMode,V=this._bufferService.cols,te=this._coreService.decPrivateModes.wraparound,I=this._coreService.modes.insertMode,Z=this._curAttrData,Y=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._activeBuffer.x&&T-C>0&&Y.getWidth(this._activeBuffer.x-1)===2&&Y.setCellFromCodepoint(this._activeBuffer.x-1,0,1,Z);let ee=this._parser.precedingJoinState;for(let we=C;we<T;++we){if(R=v[we],R<127&&j){let Ue=j[String.fromCharCode(R)];Ue&&(R=Ue.charCodeAt(0))}let ke=this._unicodeService.charProperties(R,ee);F=b.UnicodeService.extractWidth(ke);let Xe=b.UnicodeService.extractShouldJoin(ke),xe=Xe?b.UnicodeService.extractWidth(ee):0;if(ee=ke,U&&this._onA11yChar.fire((0,_.stringFromCodePoint)(R)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+F-xe>V){if(te){let Ue=Y,st=this._activeBuffer.x-xe;for(this._activeBuffer.x=xe,this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData(),!0)):(this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),Y=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),xe>0&&Y instanceof i.BufferLine&&Y.copyCellsFrom(Ue,st,0,xe,!1);st<V;)Ue.setCellFromCodepoint(st++,0,1,Z)}else if(this._activeBuffer.x=V-1,F===2)continue}if(Xe&&this._activeBuffer.x){let Ue=Y.getWidth(this._activeBuffer.x-1)?1:2;Y.addCodepointToCell(this._activeBuffer.x-Ue,R,F);for(let st=F-xe;--st>=0;)Y.setCellFromCodepoint(this._activeBuffer.x++,0,0,Z)}else if(I&&(Y.insertCells(this._activeBuffer.x,F-xe,this._activeBuffer.getNullCell(Z)),Y.getWidth(V-1)===2&&Y.setCellFromCodepoint(V-1,p.NULL_CELL_CODE,p.NULL_CELL_WIDTH,Z)),Y.setCellFromCodepoint(this._activeBuffer.x++,R,F,Z),F>0)for(;--F;)Y.setCellFromCodepoint(this._activeBuffer.x++,0,0,Z)}this._parser.precedingJoinState=ee,this._activeBuffer.x<V&&T-C>0&&Y.getWidth(this._activeBuffer.x)===0&&!Y.hasContent(this._activeBuffer.x)&&Y.setCellFromCodepoint(this._activeBuffer.x,0,1,Z),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(v,C){return v.final!=="t"||v.prefix||v.intermediates?this._parser.registerCsiHandler(v,C):this._parser.registerCsiHandler(v,(T=>!x(T.params[0],this._optionsService.rawOptions.windowOptions)||C(T)))}registerDcsHandler(v,C){return this._parser.registerDcsHandler(v,new P.DcsHandler(C))}registerEscHandler(v,C){return this._parser.registerEscHandler(v,C)}registerOscHandler(v,C){return this._parser.registerOscHandler(v,new S.OscHandler(C))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let v=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);v.hasWidth(this._activeBuffer.x)&&!v.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let v=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-v),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(v=this._bufferService.cols-1){this._activeBuffer.x=Math.min(v,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(v,C){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=v,this._activeBuffer.y=this._activeBuffer.scrollTop+C):(this._activeBuffer.x=v,this._activeBuffer.y=C),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(v,C){this._restrictCursor(),this._setCursor(this._activeBuffer.x+v,this._activeBuffer.y+C)}cursorUp(v){let C=this._activeBuffer.y-this._activeBuffer.scrollTop;return C>=0?this._moveCursor(0,-Math.min(C,v.params[0]||1)):this._moveCursor(0,-(v.params[0]||1)),!0}cursorDown(v){let C=this._activeBuffer.scrollBottom-this._activeBuffer.y;return C>=0?this._moveCursor(0,Math.min(C,v.params[0]||1)):this._moveCursor(0,v.params[0]||1),!0}cursorForward(v){return this._moveCursor(v.params[0]||1,0),!0}cursorBackward(v){return this._moveCursor(-(v.params[0]||1),0),!0}cursorNextLine(v){return this.cursorDown(v),this._activeBuffer.x=0,!0}cursorPrecedingLine(v){return this.cursorUp(v),this._activeBuffer.x=0,!0}cursorCharAbsolute(v){return this._setCursor((v.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(v){return this._setCursor(v.length>=2?(v.params[1]||1)-1:0,(v.params[0]||1)-1),!0}charPosAbsolute(v){return this._setCursor((v.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(v){return this._moveCursor(v.params[0]||1,0),!0}linePosAbsolute(v){return this._setCursor(this._activeBuffer.x,(v.params[0]||1)-1),!0}vPositionRelative(v){return this._moveCursor(0,v.params[0]||1),!0}hVPosition(v){return this.cursorPosition(v),!0}tabClear(v){let C=v.params[0];return C===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:C===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let C=v.params[0]||1;for(;C--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let C=v.params[0]||1;for(;C--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(v){let C=v.params[0];return C===1&&(this._curAttrData.bg|=536870912),C!==2&&C!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(v,C,T,R=!1,F=!1){let j=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);j.replaceCells(C,T,this._activeBuffer.getNullCell(this._eraseAttrData()),F),R&&(j.isWrapped=!1)}_resetBufferLine(v,C=!1){let T=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);T&&(T.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),C),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+v),T.isWrapped=!1)}eraseInDisplay(v,C=!1){let T;switch(this._restrictCursor(this._bufferService.cols),v.params[0]){case 0:for(T=this._activeBuffer.y,this._dirtyRowTracker.markDirty(T),this._eraseInBufferLine(T++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,C);T<this._bufferService.rows;T++)this._resetBufferLine(T,C);this._dirtyRowTracker.markDirty(T);break;case 1:for(T=this._activeBuffer.y,this._dirtyRowTracker.markDirty(T),this._eraseInBufferLine(T,0,this._activeBuffer.x+1,!0,C),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(T+1).isWrapped=!1);T--;)this._resetBufferLine(T,C);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(T=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,T-1);T--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+T)?.getTrimmedLength(););for(;T>=0;T--)this._bufferService.scroll(this._eraseAttrData())}else{for(T=this._bufferService.rows,this._dirtyRowTracker.markDirty(T-1);T--;)this._resetBufferLine(T,C);this._dirtyRowTracker.markDirty(0)}break;case 3:let R=this._activeBuffer.lines.length-this._bufferService.rows;R>0&&(this._activeBuffer.lines.trimStart(R),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-R,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-R,0),this._onScroll.fire(0))}return!0}eraseInLine(v,C=!1){switch(this._restrictCursor(this._bufferService.cols),v.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,C);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,C);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,C)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(v){this._restrictCursor();let C=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let T=this._activeBuffer.ybase+this._activeBuffer.y,R=this._bufferService.rows-1-this._activeBuffer.scrollBottom,F=this._bufferService.rows-1+this._activeBuffer.ybase-R+1;for(;C--;)this._activeBuffer.lines.splice(F-1,1),this._activeBuffer.lines.splice(T,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}deleteLines(v){this._restrictCursor();let C=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let T=this._activeBuffer.ybase+this._activeBuffer.y,R;for(R=this._bufferService.rows-1-this._activeBuffer.scrollBottom,R=this._bufferService.rows-1+this._activeBuffer.ybase-R;C--;)this._activeBuffer.lines.splice(T,1),this._activeBuffer.lines.splice(R,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.y,this._activeBuffer.scrollBottom),this._activeBuffer.x=0,!0}insertChars(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.insertCells(this._activeBuffer.x,v.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}deleteChars(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.deleteCells(this._activeBuffer.x,v.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(v){let C=v.params[0]||1;for(;C--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollDown(v){let C=v.params[0]||1;for(;C--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(i.DEFAULT_ATTR_DATA));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollLeft(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.deleteCells(0,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollRight(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.insertCells(0,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}insertColumns(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.insertCells(this._activeBuffer.x,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let C=v.params[0]||1;for(let T=this._activeBuffer.scrollTop;T<=this._activeBuffer.scrollBottom;++T){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+T);R.deleteCells(this._activeBuffer.x,C,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(v){this._restrictCursor();let C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return C&&(C.replaceCells(this._activeBuffer.x,this._activeBuffer.x+(v.params[0]||1),this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}repeatPrecedingCharacter(v){let C=this._parser.precedingJoinState;if(!C)return!0;let T=v.params[0]||1,R=b.UnicodeService.extractWidth(C),F=this._activeBuffer.x-R,j=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString(F),U=new Uint32Array(j.length*T),V=0;for(let I=0;I<j.length;){let Z=j.codePointAt(I)||0;U[V++]=Z,I+=Z>65535?2:1}let te=V;for(let I=1;I<T;++I)U.copyWithin(te,0,V),te+=V;return this.print(U,0,te),!0}sendDeviceAttributesPrimary(v){return v.params[0]>0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(a.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(a.C0.ESC+"[?6c")),!0}sendDeviceAttributesSecondary(v){return v.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(a.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(a.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(v.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(a.C0.ESC+"[>83;40003;0c")),!0}_is(v){return(this._optionsService.rawOptions.termName+"").indexOf(v)===0}setMode(v){for(let C=0;C<v.length;C++)switch(v.params[C]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0}return!0}setModePrivate(v){for(let C=0;C<v.length;C++)switch(v.params[C]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,w.DEFAULT_CHARSET),this._charsetService.setgCharset(1,w.DEFAULT_CHARSET),this._charsetService.setgCharset(2,w.DEFAULT_CHARSET),this._charsetService.setgCharset(3,w.DEFAULT_CHARSET);break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(132,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!0,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!0;break;case 12:this._optionsService.options.cursorBlink=!0;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!0;break;case 66:this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire();break;case 9:this._coreMouseService.activeProtocol="X10";break;case 1e3:this._coreMouseService.activeProtocol="VT200";break;case 1002:this._coreMouseService.activeProtocol="DRAG";break;case 1003:this._coreMouseService.activeProtocol="ANY";break;case 1004:this._coreService.decPrivateModes.sendFocus=!0,this._onRequestSendFocus.fire();break;case 1005:this._logService.debug("DECSET 1005 not supported (see #2507)");break;case 1006:this._coreMouseService.activeEncoding="SGR";break;case 1015:this._logService.debug("DECSET 1015 not supported (see #2507)");break;case 1016:this._coreMouseService.activeEncoding="SGR_PIXELS";break;case 25:this._coreService.isCursorHidden=!1;break;case 1048:this.saveCursor();break;case 1049:this.saveCursor();case 47:case 1047:this._bufferService.buffers.activateAltBuffer(this._eraseAttrData()),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(void 0),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!0;break;case 2026:this._coreService.decPrivateModes.synchronizedOutput=!0}return!0}resetMode(v){for(let C=0;C<v.length;C++)switch(v.params[C]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1}return!0}resetModePrivate(v){for(let C=0;C<v.length;C++)switch(v.params[C]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:this._optionsService.options.cursorBlink=!1;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol="NONE";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug("DECRST 1005 not supported (see #2507)");break;case 1006:case 1016:this._coreMouseService.activeEncoding="DEFAULT";break;case 1015:this._logService.debug("DECRST 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),v.params[C]===1049&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(void 0),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1;break;case 2026:this._coreService.decPrivateModes.synchronizedOutput=!1,this._onRequestRefreshRows.fire(void 0)}return!0}requestMode(v,C){let T=this._coreService.decPrivateModes,{activeProtocol:R,activeEncoding:F}=this._coreMouseService,j=this._coreService,{buffers:U,cols:V}=this._bufferService,{active:te,alt:I}=U,Z=this._optionsService.rawOptions,Y=Xe=>Xe?1:2,ee=v.params[0];return we=ee,ke=C?ee===2?4:ee===4?Y(j.modes.insertMode):ee===12?3:ee===20?Y(Z.convertEol):0:ee===1?Y(T.applicationCursorKeys):ee===3?Z.windowOptions.setWinLines?V===80?2:V===132?1:0:0:ee===6?Y(T.origin):ee===7?Y(T.wraparound):ee===8?3:ee===9?Y(R==="X10"):ee===12?Y(Z.cursorBlink):ee===25?Y(!j.isCursorHidden):ee===45?Y(T.reverseWraparound):ee===66?Y(T.applicationKeypad):ee===67?4:ee===1e3?Y(R==="VT200"):ee===1002?Y(R==="DRAG"):ee===1003?Y(R==="ANY"):ee===1004?Y(T.sendFocus):ee===1005?4:ee===1006?Y(F==="SGR"):ee===1015?4:ee===1016?Y(F==="SGR_PIXELS"):ee===1048?1:ee===47||ee===1047||ee===1049?Y(te===I):ee===2004?Y(T.bracketedPasteMode):ee===2026?Y(T.synchronizedOutput):0,j.triggerDataEvent(`${a.C0.ESC}[${C?"":"?"}${we};${ke}$y`),!0;var we,ke}_updateAttrColor(v,C,T,R,F){return C===2?(v|=50331648,v&=-16777216,v|=d.AttributeData.fromColorRGB([T,R,F])):C===5&&(v&=-50331904,v|=33554432|255&T),v}_extractColor(v,C,T){let R=[0,0,-1,0,0,0],F=0,j=0;do{if(R[j+F]=v.params[C+j],v.hasSubParams(C+j)){let U=v.getSubParams(C+j),V=0;do R[1]===5&&(F=1),R[j+V+1+F]=U[V];while(++V<U.length&&V+j+1+F<R.length);break}if(R[1]===5&&j+F>=2||R[1]===2&&j+F>=5)break;R[1]&&(F=1)}while(++j+C<v.length&&j+F<R.length);for(let U=2;U<R.length;++U)R[U]===-1&&(R[U]=0);switch(R[0]){case 38:T.fg=this._updateAttrColor(T.fg,R[1],R[3],R[4],R[5]);break;case 48:T.bg=this._updateAttrColor(T.bg,R[1],R[3],R[4],R[5]);break;case 58:T.extended=T.extended.clone(),T.extended.underlineColor=this._updateAttrColor(T.extended.underlineColor,R[1],R[3],R[4],R[5])}return j}_processUnderline(v,C){C.extended=C.extended.clone(),(!~v||v>5)&&(v=1),C.extended.underlineStyle=v,C.fg|=268435456,v===0&&(C.fg&=-268435457),C.updateExtended()}_processSGR0(v){v.fg=i.DEFAULT_ATTR_DATA.fg,v.bg=i.DEFAULT_ATTR_DATA.bg,v.extended=v.extended.clone(),v.extended.underlineStyle=0,v.extended.underlineColor&=-67108864,v.updateExtended()}charAttributes(v){if(v.length===1&&v.params[0]===0)return this._processSGR0(this._curAttrData),!0;let C=v.length,T,R=this._curAttrData;for(let F=0;F<C;F++)T=v.params[F],T>=30&&T<=37?(R.fg&=-50331904,R.fg|=16777216|T-30):T>=40&&T<=47?(R.bg&=-50331904,R.bg|=16777216|T-40):T>=90&&T<=97?(R.fg&=-50331904,R.fg|=16777224|T-90):T>=100&&T<=107?(R.bg&=-50331904,R.bg|=16777224|T-100):T===0?this._processSGR0(R):T===1?R.fg|=134217728:T===3?R.bg|=67108864:T===4?(R.fg|=268435456,this._processUnderline(v.hasSubParams(F)?v.getSubParams(F)[0]:1,R)):T===5?R.fg|=536870912:T===7?R.fg|=67108864:T===8?R.fg|=1073741824:T===9?R.fg|=2147483648:T===2?R.bg|=134217728:T===21?this._processUnderline(2,R):T===22?(R.fg&=-134217729,R.bg&=-134217729):T===23?R.bg&=-67108865:T===24?(R.fg&=-268435457,this._processUnderline(0,R)):T===25?R.fg&=-536870913:T===27?R.fg&=-67108865:T===28?R.fg&=-1073741825:T===29?R.fg&=2147483647:T===39?(R.fg&=-67108864,R.fg|=16777215&i.DEFAULT_ATTR_DATA.fg):T===49?(R.bg&=-67108864,R.bg|=16777215&i.DEFAULT_ATTR_DATA.bg):T===38||T===48||T===58?F+=this._extractColor(v,F,R):T===53?R.bg|=1073741824:T===55?R.bg&=-1073741825:T===59?(R.extended=R.extended.clone(),R.extended.underlineColor=-1,R.updateExtended()):T===100?(R.fg&=-67108864,R.fg|=16777215&i.DEFAULT_ATTR_DATA.fg,R.bg&=-67108864,R.bg|=16777215&i.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",T);return!0}deviceStatus(v){switch(v.params[0]){case 5:this._coreService.triggerDataEvent(`${a.C0.ESC}[0n`);break;case 6:let C=this._activeBuffer.y+1,T=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[${C};${T}R`)}return!0}deviceStatusPrivate(v){if(v.params[0]===6){let C=this._activeBuffer.y+1,T=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[?${C};${T}R`)}return!0}softReset(v){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=i.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(v){let C=v.length===0?1:v.params[0];if(C===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(C){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar"}let T=C%2==1;this._coreService.decPrivateModes.cursorBlink=T}return!0}setScrollRegion(v){let C=v.params[0]||1,T;return(v.length<2||(T=v.params[1])>this._bufferService.rows||T===0)&&(T=this._bufferService.rows),T>C&&(this._activeBuffer.scrollTop=C-1,this._activeBuffer.scrollBottom=T-1,this._setCursor(0,0)),!0}windowOptions(v){if(!x(v.params[0],this._optionsService.rawOptions.windowOptions))return!0;let C=v.length>1?v.params[1]:0;switch(v.params[0]){case 14:C!==2&&this._onRequestWindowsOptionsReport.fire(A.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(A.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${a.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:C!==0&&C!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),C!==0&&C!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:C!==0&&C!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),C!==0&&C!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(v){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(v){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(v){return this._windowTitle=v,this._onTitleChange.fire(v),!0}setIconName(v){return this._iconName=v,!0}setOrReportIndexedColor(v){let C=[],T=v.split(";");for(;T.length>1;){let R=T.shift(),F=T.shift();if(/^\d+$/.exec(R)){let j=parseInt(R);if(N(j))if(F==="?")C.push({type:0,index:j});else{let U=(0,E.parseColor)(F);U&&C.push({type:1,index:j,color:U})}}}return C.length&&this._onColor.fire(C),!0}setHyperlink(v){let C=v.indexOf(";");if(C===-1)return!0;let T=v.slice(0,C).trim(),R=v.slice(C+1);return R?this._createHyperlink(T,R):!T.trim()&&this._finishHyperlink()}_createHyperlink(v,C){this._getCurrentLinkId()&&this._finishHyperlink();let T=v.split(":"),R,F=T.findIndex((j=>j.startsWith("id=")));return F!==-1&&(R=T[F].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:R,uri:C}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(v,C){let T=v.split(";");for(let R=0;R<T.length&&!(C>=this._specialColors.length);++R,++C)if(T[R]==="?")this._onColor.fire([{type:0,index:this._specialColors[C]}]);else{let F=(0,E.parseColor)(T[R]);F&&this._onColor.fire([{type:1,index:this._specialColors[C],color:F}])}return!0}setOrReportFgColor(v){return this._setOrReportSpecialColor(v,0)}setOrReportBgColor(v){return this._setOrReportSpecialColor(v,1)}setOrReportCursorColor(v){return this._setOrReportSpecialColor(v,2)}restoreIndexedColor(v){if(!v)return this._onColor.fire([{type:2}]),!0;let C=[],T=v.split(";");for(let R=0;R<T.length;++R)if(/^\d+$/.exec(T[R])){let F=parseInt(T[R]);N(F)&&C.push({type:2,index:F})}return C.length&&this._onColor.fire(C),!0}restoreFgColor(v){return this._onColor.fire([{type:2,index:256}]),!0}restoreBgColor(v){return this._onColor.fire([{type:2,index:257}]),!0}restoreCursorColor(v){return this._onColor.fire([{type:2,index:258}]),!0}nextLine(){return this._activeBuffer.x=0,this.index(),!0}keypadApplicationMode(){return this._logService.debug("Serial port requested application keypad."),this._coreService.decPrivateModes.applicationKeypad=!0,this._onRequestSyncScrollBar.fire(),!0}keypadNumericMode(){return this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire(),!0}selectDefaultCharset(){return this._charsetService.setgLevel(0),this._charsetService.setgCharset(0,w.DEFAULT_CHARSET),!0}selectCharset(v){return v.length!==2?(this.selectDefaultCharset(),!0):(v[0]==="/"||this._charsetService.setgCharset($[v[0]],w.CHARSETS[v[1]]||w.DEFAULT_CHARSET),!0)}index(){return this._restrictCursor(),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){let v=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,v,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=i.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=i.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(v){return this._charsetService.setgLevel(v),!0}screenAlignmentPattern(){let v=new h.CellData;v.content=4194373,v.fg=this._curAttrData.fg,v.bg=this._curAttrData.bg,this._setCursor(0,0);for(let C=0;C<this._bufferService.rows;++C){let T=this._activeBuffer.ybase+this._activeBuffer.y+C,R=this._activeBuffer.lines.get(T);R&&(R.fill(v),R.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(v,C){let T=this._bufferService.buffer,R=this._optionsService.rawOptions;return(F=>(this._coreService.triggerDataEvent(`${a.C0.ESC}${F}${a.C0.ESC}\\`),!0))(v==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:v==='"p'?'P1$r61;1"p':v==="r"?`P1$r${T.scrollTop+1};${T.scrollBottom+1}r`:v==="m"?"P1$r0m":v===" q"?`P1$r${{block:2,underline:4,bar:6}[R.cursorStyle]-(R.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(v,C){this._dirtyRowTracker.markRangeDirty(v,C)}}n.InputHandler=z;let X=class{constructor(q){this._bufferService=q,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(q){q<this.start?this.start=q:q>this.end&&(this.end=q)}markRangeDirty(q,v){q>v&&(L=q,q=v,v=L),q<this.start&&(this.start=q),v>this.end&&(this.end=v)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function N(q){return 0<=q&&q<256}X=f([k(0,u.IBufferService)],X)},701:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.isChromeOS=n.isLinux=n.isWindows=n.isIphone=n.isIpad=n.isMac=n.isSafari=n.isLegacyEdge=n.isFirefox=n.isNode=void 0,n.getSafariVersion=function(){if(!n.isSafari)return 0;let k=l.match(/Version\/(\d+)/);return k===null||k.length<2?0:parseInt(k[1])},n.isNode=typeof process<"u"&&"title"in process;let l=n.isNode?"node":navigator.userAgent,f=n.isNode?"node":navigator.platform;n.isFirefox=l.includes("Firefox"),n.isLegacyEdge=l.includes("Edge"),n.isSafari=/^((?!chrome|android).)*safari/i.test(l),n.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(f),n.isIpad=f==="iPad",n.isIphone=f==="iPhone",n.isWindows=["Windows","Win16","Win32","WinCE"].includes(f),n.isLinux=f.indexOf("Linux")>=0,n.isChromeOS=/\bCrOS\b/.test(l)},6168:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DebouncedIdleTask=n.IdleTaskQueue=n.PriorityTaskQueue=void 0;let f=l(701);class k{constructor(){this._tasks=[],this._i=0}enqueue(c){this._tasks.push(c),this._start()}flush(){for(;this._i<this._tasks.length;)this._tasks[this._i]()||this._i++;this.clear()}clear(){this._idleCallback&&(this._cancelCallback(this._idleCallback),this._idleCallback=void 0),this._i=0,this._tasks.length=0}_start(){this._idleCallback||(this._idleCallback=this._requestCallback(this._process.bind(this)))}_process(c){this._idleCallback=void 0;let g=0,_=0,i=c.timeRemaining(),p=0;for(;this._i<this._tasks.length;){if(g=performance.now(),this._tasks[this._i]()||this._i++,g=Math.max(1,performance.now()-g),_=Math.max(g,_),p=c.timeRemaining(),1.5*_>p)return i-g<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(i-g))}ms`),void this._start();i=p}this.clear()}}class a extends k{_requestCallback(c){return setTimeout((()=>c(this._createDeadline(16))))}_cancelCallback(c){clearTimeout(c)}_createDeadline(c){let g=performance.now()+c;return{timeRemaining:()=>Math.max(0,g-performance.now())}}}n.PriorityTaskQueue=a,n.IdleTaskQueue=!f.isNode&&"requestIdleCallback"in window?class extends k{_requestCallback(w){return requestIdleCallback(w)}_cancelCallback(w){cancelIdleCallback(w)}}:a,n.DebouncedIdleTask=class{constructor(){this._queue=new n.IdleTaskQueue}set(w){this._queue.clear(),this._queue.enqueue(w)}flush(){this._queue.flush()}}},5882:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.updateWindowsModeWrappedState=function(k){let a=k.buffer.lines.get(k.buffer.ybase+k.buffer.y-1),w=a?.get(k.cols-1),c=k.buffer.lines.get(k.buffer.ybase+k.buffer.y);c&&w&&(c.isWrapped=w[f.CHAR_DATA_CODE_INDEX]!==f.NULL_CELL_CODE&&w[f.CHAR_DATA_CODE_INDEX]!==f.WHITESPACE_CELL_CODE)};let f=l(8938)},5451:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.ExtendedAttrs=n.AttributeData=void 0;class l{constructor(){this.fg=0,this.bg=0,this.extended=new f}static toColorRGB(a){return[a>>>16&255,a>>>8&255,255&a]}static fromColorRGB(a){return(255&a[0])<<16|(255&a[1])<<8|255&a[2]}clone(){let a=new l;return a.fg=this.fg,a.bg=this.bg,a.extended=this.extended.clone(),a}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return!(50331648&~this.fg)}isBgRGB(){return!(50331648&~this.bg)}isFgPalette(){return(50331648&this.fg)==16777216||(50331648&this.fg)==33554432}isBgPalette(){return(50331648&this.bg)==16777216||(50331648&this.bg)==33554432}isFgDefault(){return!(50331648&this.fg)}isBgDefault(){return!(50331648&this.bg)}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&~this.extended.underlineColor):this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==16777216||(50331648&this.extended.underlineColor)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?!(50331648&this.extended.underlineColor):this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}getUnderlineVariantOffset(){return this.extended.underlineVariantOffset}}n.AttributeData=l;class f{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(a){this._ext=a}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(a){this._ext&=-469762049,this._ext|=a<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(a){this._ext&=-67108864,this._ext|=67108863&a}get urlId(){return this._urlId}set urlId(a){this._urlId=a}get underlineVariantOffset(){let a=(3758096384&this._ext)>>29;return a<0?4294967288^a:a}set underlineVariantOffset(a){this._ext&=536870911,this._ext|=a<<29&3758096384}constructor(a=0,w=0){this._ext=0,this._urlId=0,this._ext=a,this._urlId=w}clone(){return new f(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}n.ExtendedAttrs=f},1073:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Buffer=n.MAX_BUFFER_SIZE=void 0;let f=l(5639),k=l(6168),a=l(5451),w=l(6107),c=l(732),g=l(3055),_=l(8938),i=l(8158),p=l(6760);n.MAX_BUFFER_SIZE=4294967295,n.Buffer=class{constructor(h,d,u){this._hasScrollback=h,this._optionsService=d,this._bufferService=u,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=w.DEFAULT_ATTR_DATA.clone(),this.savedCharset=p.DEFAULT_CHARSET,this.markers=[],this._nullCell=g.CellData.fromCharData([0,_.NULL_CELL_CHAR,_.NULL_CELL_WIDTH,_.NULL_CELL_CODE]),this._whitespaceCell=g.CellData.fromCharData([0,_.WHITESPACE_CELL_CHAR,_.WHITESPACE_CELL_WIDTH,_.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new k.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new f.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(h){return h?(this._nullCell.fg=h.fg,this._nullCell.bg=h.bg,this._nullCell.extended=h.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new a.ExtendedAttrs),this._nullCell}getWhitespaceCell(h){return h?(this._whitespaceCell.fg=h.fg,this._whitespaceCell.bg=h.bg,this._whitespaceCell.extended=h.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new a.ExtendedAttrs),this._whitespaceCell}getBlankLine(h,d){return new w.BufferLine(this._bufferService.cols,this.getNullCell(h),d)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let h=this.ybase+this.y-this.ydisp;return h>=0&&h<this._rows}_getCorrectBufferLength(h){if(!this._hasScrollback)return h;let d=h+this._optionsService.rawOptions.scrollback;return d>n.MAX_BUFFER_SIZE?n.MAX_BUFFER_SIZE:d}fillViewportRows(h){if(this.lines.length===0){h===void 0&&(h=w.DEFAULT_ATTR_DATA);let d=this._rows;for(;d--;)this.lines.push(this.getBlankLine(h))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new f.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(h,d){let u=this.getNullCell(w.DEFAULT_ATTR_DATA),b=0,S=this._getCorrectBufferLength(d);if(S>this.lines.maxLength&&(this.lines.maxLength=S),this.lines.length>0){if(this._cols<h)for(let E=0;E<this.lines.length;E++)b+=+this.lines.get(E).resize(h,u);let P=0;if(this._rows<d)for(let E=this._rows;E<d;E++)this.lines.length<d+this.ybase&&(this._optionsService.rawOptions.windowsMode||this._optionsService.rawOptions.windowsPty.backend!==void 0||this._optionsService.rawOptions.windowsPty.buildNumber!==void 0?this.lines.push(new w.BufferLine(h,u)):this.ybase>0&&this.lines.length<=this.ybase+this.y+P+1?(this.ybase--,P++,this.ydisp>0&&this.ydisp--):this.lines.push(new w.BufferLine(h,u)));else for(let E=this._rows;E>d;E--)this.lines.length>d+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(S<this.lines.maxLength){let E=this.lines.length-S;E>0&&(this.lines.trimStart(E),this.ybase=Math.max(this.ybase-E,0),this.ydisp=Math.max(this.ydisp-E,0),this.savedY=Math.max(this.savedY-E,0)),this.lines.maxLength=S}this.x=Math.min(this.x,h-1),this.y=Math.min(this.y,d-1),P&&(this.y+=P),this.savedX=Math.min(this.savedX,h-1),this.scrollTop=0}if(this.scrollBottom=d-1,this._isReflowEnabled&&(this._reflow(h,d),this._cols>h))for(let P=0;P<this.lines.length;P++)b+=+this.lines.get(P).resize(h,u);this._cols=h,this._rows=d,this._memoryCleanupQueue.clear(),b>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let h=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,h=!1);let d=0;for(;this._memoryCleanupPosition<this.lines.length;)if(d+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),d>100)return!0;return h}get _isReflowEnabled(){let h=this._optionsService.rawOptions.windowsPty;return h&&h.buildNumber?this._hasScrollback&&h.backend==="conpty"&&h.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(h,d){this._cols!==h&&(h>this._cols?this._reflowLarger(h,d):this._reflowSmaller(h,d))}_reflowLarger(h,d){let u=this._optionsService.rawOptions.reflowCursorLine,b=(0,c.reflowLargerGetLinesToRemove)(this.lines,this._cols,h,this.ybase+this.y,this.getNullCell(w.DEFAULT_ATTR_DATA),u);if(b.length>0){let S=(0,c.reflowLargerCreateNewLayout)(this.lines,b);(0,c.reflowLargerApplyNewLayout)(this.lines,S.layout),this._reflowLargerAdjustViewport(h,d,S.countRemoved)}}_reflowLargerAdjustViewport(h,d,u){let b=this.getNullCell(w.DEFAULT_ATTR_DATA),S=u;for(;S-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length<d&&this.lines.push(new w.BufferLine(h,b))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-u,0)}_reflowSmaller(h,d){let u=this._optionsService.rawOptions.reflowCursorLine,b=this.getNullCell(w.DEFAULT_ATTR_DATA),S=[],P=0;for(let E=this.lines.length-1;E>=0;E--){let H=this.lines.get(E);if(!H||!H.isWrapped&&H.getTrimmedLength()<=h)continue;let $=[H];for(;H.isWrapped&&E>0;)H=this.lines.get(--E),$.unshift(H);if(!u){let T=this.ybase+this.y;if(T>=E&&T<E+$.length)continue}let D=$[$.length-1].getTrimmedLength(),x=(0,c.reflowSmallerGetNewLineLengths)($,this._cols,h),A=x.length-$.length,L;L=this.ybase===0&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+A):Math.max(0,this.lines.length-this.lines.maxLength+A);let z=[];for(let T=0;T<A;T++){let R=this.getBlankLine(w.DEFAULT_ATTR_DATA,!0);z.push(R)}z.length>0&&(S.push({start:E+$.length+P,newLines:z}),P+=z.length),$.push(...z);let X=x.length-1,N=x[X];N===0&&(X--,N=x[X]);let q=$.length-A-1,v=D;for(;q>=0;){let T=Math.min(v,N);if($[X]===void 0)break;if($[X].copyCellsFrom($[q],v-T,N-T,T,!0),N-=T,N===0&&(X--,N=x[X]),v-=T,v===0){q--;let R=Math.max(q,0);v=(0,c.getWrappedLineTrimmedLength)($,R,this._cols)}}for(let T=0;T<$.length;T++)x[T]<h&&$[T].setCell(x[T],b);let C=A-L;for(;C-- >0;)this.ybase===0?this.y<d-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+P)-d&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+A,this.ybase+d-1)}if(S.length>0){let E=[],H=[];for(let N=0;N<this.lines.length;N++)H.push(this.lines.get(N));let $=this.lines.length,D=$-1,x=0,A=S[x];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+P);let L=0;for(let N=Math.min(this.lines.maxLength-1,$+P-1);N>=0;N--)if(A&&A.start>D+L){for(let q=A.newLines.length-1;q>=0;q--)this.lines.set(N--,A.newLines[q]);N++,E.push({index:D+1,amount:A.newLines.length}),L+=A.newLines.length,A=S[++x]}else this.lines.set(N,H[D--]);let z=0;for(let N=E.length-1;N>=0;N--)E[N].index+=z,this.lines.onInsertEmitter.fire(E[N]),z+=E[N].amount;let X=Math.max(0,$+P-this.lines.maxLength);X>0&&this.lines.onTrimEmitter.fire(X)}}translateBufferLineToString(h,d,u=0,b){let S=this.lines.get(h);return S?S.translateToString(d,u,b):""}getWrappedRangeForLine(h){let d=h,u=h;for(;d>0&&this.lines.get(d).isWrapped;)d--;for(;u+1<this.lines.length&&this.lines.get(u+1).isWrapped;)u++;return{first:d,last:u}}setupTabStops(h){for(h!=null?this.tabs[h]||(h=this.prevStop(h)):(this.tabs={},h=0);h<this._cols;h+=this._optionsService.rawOptions.tabStopWidth)this.tabs[h]=!0}prevStop(h){for(h==null&&(h=this.x);!this.tabs[--h]&&h>0;);return h>=this._cols?this._cols-1:h<0?0:h}nextStop(h){for(h==null&&(h=this.x);!this.tabs[++h]&&h<this._cols;);return h>=this._cols?this._cols-1:h<0?0:h}clearMarkers(h){this._isClearing=!0;for(let d=0;d<this.markers.length;d++)this.markers[d].line===h&&(this.markers[d].dispose(),this.markers.splice(d--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let h=0;h<this.markers.length;h++)this.markers[h].dispose();this.markers.length=0,this._isClearing=!1}addMarker(h){let d=new i.Marker(h);return this.markers.push(d),d.register(this.lines.onTrim((u=>{d.line-=u,d.line<0&&d.dispose()}))),d.register(this.lines.onInsert((u=>{d.line>=u.index&&(d.line+=u.amount)}))),d.register(this.lines.onDelete((u=>{d.line>=u.index&&d.line<u.index+u.amount&&d.dispose(),d.line>u.index&&(d.line-=u.amount)}))),d.register(d.onDispose((()=>this._removeMarker(d)))),d}_removeMarker(h){this._isClearing||this.markers.splice(this.markers.indexOf(h),1)}}},6107:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferLine=n.DEFAULT_ATTR_DATA=void 0;let f=l(5451),k=l(3055),a=l(8938),w=l(726);n.DEFAULT_ATTR_DATA=Object.freeze(new f.AttributeData);let c=0;class g{constructor(i,p,h=!1){this.isWrapped=h,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*i);let d=p||k.CellData.fromCharData([0,a.NULL_CELL_CHAR,a.NULL_CELL_WIDTH,a.NULL_CELL_CODE]);for(let u=0;u<i;++u)this.setCell(u,d);this.length=i}get(i){let p=this._data[3*i+0],h=2097151&p;return[this._data[3*i+1],2097152&p?this._combined[i]:h?(0,w.stringFromCodePoint)(h):"",p>>22,2097152&p?this._combined[i].charCodeAt(this._combined[i].length-1):h]}set(i,p){this._data[3*i+1]=p[a.CHAR_DATA_ATTR_INDEX],p[a.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[i]=p[1],this._data[3*i+0]=2097152|i|p[a.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*i+0]=p[a.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|p[a.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(i){return this._data[3*i+0]>>22}hasWidth(i){return 12582912&this._data[3*i+0]}getFg(i){return this._data[3*i+1]}getBg(i){return this._data[3*i+2]}hasContent(i){return 4194303&this._data[3*i+0]}getCodePoint(i){let p=this._data[3*i+0];return 2097152&p?this._combined[i].charCodeAt(this._combined[i].length-1):2097151&p}isCombined(i){return 2097152&this._data[3*i+0]}getString(i){let p=this._data[3*i+0];return 2097152&p?this._combined[i]:2097151&p?(0,w.stringFromCodePoint)(2097151&p):""}isProtected(i){return 536870912&this._data[3*i+2]}loadCell(i,p){return c=3*i,p.content=this._data[c+0],p.fg=this._data[c+1],p.bg=this._data[c+2],2097152&p.content&&(p.combinedData=this._combined[i]),268435456&p.bg&&(p.extended=this._extendedAttrs[i]),p}setCell(i,p){2097152&p.content&&(this._combined[i]=p.combinedData),268435456&p.bg&&(this._extendedAttrs[i]=p.extended),this._data[3*i+0]=p.content,this._data[3*i+1]=p.fg,this._data[3*i+2]=p.bg}setCellFromCodepoint(i,p,h,d){268435456&d.bg&&(this._extendedAttrs[i]=d.extended),this._data[3*i+0]=p|h<<22,this._data[3*i+1]=d.fg,this._data[3*i+2]=d.bg}addCodepointToCell(i,p,h){let d=this._data[3*i+0];2097152&d?this._combined[i]+=(0,w.stringFromCodePoint)(p):2097151&d?(this._combined[i]=(0,w.stringFromCodePoint)(2097151&d)+(0,w.stringFromCodePoint)(p),d&=-2097152,d|=2097152):d=p|4194304,h&&(d&=-12582913,d|=h<<22),this._data[3*i+0]=d}insertCells(i,p,h){if((i%=this.length)&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length-i){let d=new k.CellData;for(let u=this.length-i-p-1;u>=0;--u)this.setCell(i+p+u,this.loadCell(i+u,d));for(let u=0;u<p;++u)this.setCell(i+u,h)}else for(let d=i;d<this.length;++d)this.setCell(d,h);this.getWidth(this.length-1)===2&&this.setCellFromCodepoint(this.length-1,0,1,h)}deleteCells(i,p,h){if(i%=this.length,p<this.length-i){let d=new k.CellData;for(let u=0;u<this.length-i-p;++u)this.setCell(i+u,this.loadCell(i+p+u,d));for(let u=this.length-p;u<this.length;++u)this.setCell(u,h)}else for(let d=i;d<this.length;++d)this.setCell(d,h);i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),this.getWidth(i)!==0||this.hasContent(i)||this.setCellFromCodepoint(i,0,1,h)}replaceCells(i,p,h,d=!1){if(d)for(i&&this.getWidth(i-1)===2&&!this.isProtected(i-1)&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length&&this.getWidth(p-1)===2&&!this.isProtected(p)&&this.setCellFromCodepoint(p,0,1,h);i<p&&i<this.length;)this.isProtected(i)||this.setCell(i,h),i++;else for(i&&this.getWidth(i-1)===2&&this.setCellFromCodepoint(i-1,0,1,h),p<this.length&&this.getWidth(p-1)===2&&this.setCellFromCodepoint(p,0,1,h);i<p&&i<this.length;)this.setCell(i++,h)}resize(i,p){if(i===this.length)return 4*this._data.length*2<this._data.buffer.byteLength;let h=3*i;if(i>this.length){if(this._data.buffer.byteLength>=4*h)this._data=new Uint32Array(this._data.buffer,0,h);else{let d=new Uint32Array(h);d.set(this._data),this._data=d}for(let d=this.length;d<i;++d)this.setCell(d,p)}else{this._data=this._data.subarray(0,h);let d=Object.keys(this._combined);for(let b=0;b<d.length;b++){let S=parseInt(d[b],10);S>=i&&delete this._combined[S]}let u=Object.keys(this._extendedAttrs);for(let b=0;b<u.length;b++){let S=parseInt(u[b],10);S>=i&&delete this._extendedAttrs[S]}}return this.length=i,4*h*2<this._data.buffer.byteLength}cleanupMemory(){if(4*this._data.length*2<this._data.buffer.byteLength){let i=new Uint32Array(this._data.length);return i.set(this._data),this._data=i,1}return 0}fill(i,p=!1){if(p)for(let h=0;h<this.length;++h)this.isProtected(h)||this.setCell(h,i);else{this._combined={},this._extendedAttrs={};for(let h=0;h<this.length;++h)this.setCell(h,i)}}copyFrom(i){this.length!==i.length?this._data=new Uint32Array(i._data):this._data.set(i._data),this.length=i.length,this._combined={};for(let p in i._combined)this._combined[p]=i._combined[p];this._extendedAttrs={};for(let p in i._extendedAttrs)this._extendedAttrs[p]=i._extendedAttrs[p];this.isWrapped=i.isWrapped}clone(){let i=new g(0);i._data=new Uint32Array(this._data),i.length=this.length;for(let p in this._combined)i._combined[p]=this._combined[p];for(let p in this._extendedAttrs)i._extendedAttrs[p]=this._extendedAttrs[p];return i.isWrapped=this.isWrapped,i}getTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(4194303&this._data[3*i+0])return i+(this._data[3*i+0]>>22);return 0}getNoBgTrimmedLength(){for(let i=this.length-1;i>=0;--i)if(4194303&this._data[3*i+0]||50331648&this._data[3*i+2])return i+(this._data[3*i+0]>>22);return 0}copyCellsFrom(i,p,h,d,u){let b=i._data;if(u)for(let P=d-1;P>=0;P--){for(let E=0;E<3;E++)this._data[3*(h+P)+E]=b[3*(p+P)+E];268435456&b[3*(p+P)+2]&&(this._extendedAttrs[h+P]=i._extendedAttrs[p+P])}else for(let P=0;P<d;P++){for(let E=0;E<3;E++)this._data[3*(h+P)+E]=b[3*(p+P)+E];268435456&b[3*(p+P)+2]&&(this._extendedAttrs[h+P]=i._extendedAttrs[p+P])}let S=Object.keys(i._combined);for(let P=0;P<S.length;P++){let E=parseInt(S[P],10);E>=p&&(this._combined[E-p+h]=i._combined[E])}}translateToString(i,p,h,d){p=p??0,h=h??this.length,i&&(h=Math.min(h,this.getTrimmedLength())),d&&(d.length=0);let u="";for(;p<h;){let b=this._data[3*p+0],S=2097151&b,P=2097152&b?this._combined[p]:S?(0,w.stringFromCodePoint)(S):a.WHITESPACE_CELL_CHAR;if(u+=P,d)for(let E=0;E<P.length;++E)d.push(p);p+=b>>22||1}return d&&d.push(p),u}}n.BufferLine=g},732:(y,n)=>{function l(f,k,a){if(k===f.length-1)return f[k].getTrimmedLength();let w=!f[k].hasContent(a-1)&&f[k].getWidth(a-1)===1,c=f[k+1].getWidth(0)===2;return w&&c?a-1:a}Object.defineProperty(n,"__esModule",{value:!0}),n.reflowLargerGetLinesToRemove=function(f,k,a,w,c,g){let _=[];for(let i=0;i<f.length-1;i++){let p=i,h=f.get(++p);if(!h.isWrapped)continue;let d=[f.get(i)];for(;p<f.length&&h.isWrapped;)d.push(h),h=f.get(++p);if(!g&&w>=i&&w<p){i+=d.length-1;continue}let u=0,b=l(d,u,k),S=1,P=0;for(;S<d.length;){let H=l(d,S,k),$=H-P,D=a-b,x=Math.min($,D);d[u].copyCellsFrom(d[S],P,b,x,!1),b+=x,b===a&&(u++,b=0),P+=x,P===H&&(S++,P=0),b===0&&u!==0&&d[u-1].getWidth(a-1)===2&&(d[u].copyCellsFrom(d[u-1],a-1,b++,1,!1),d[u-1].setCell(a-1,c))}d[u].replaceCells(b,a,c);let E=0;for(let H=d.length-1;H>0&&(H>u||d[H].getTrimmedLength()===0);H--)E++;E>0&&(_.push(i+d.length-E),_.push(E)),i+=d.length-1}return _},n.reflowLargerCreateNewLayout=function(f,k){let a=[],w=0,c=k[w],g=0;for(let _=0;_<f.length;_++)if(c===_){let i=k[++w];f.onDeleteEmitter.fire({index:_-g,amount:i}),_+=i-1,g+=i,c=k[++w]}else a.push(_);return{layout:a,countRemoved:g}},n.reflowLargerApplyNewLayout=function(f,k){let a=[];for(let w=0;w<k.length;w++)a.push(f.get(k[w]));for(let w=0;w<a.length;w++)f.set(w,a[w]);f.length=k.length},n.reflowSmallerGetNewLineLengths=function(f,k,a){let w=[],c=f.map(((p,h)=>l(f,h,k))).reduce(((p,h)=>p+h)),g=0,_=0,i=0;for(;i<c;){if(c-i<a){w.push(c-i);break}g+=a;let p=l(f,_,k);g>p&&(g-=p,_++);let h=f[_].getWidth(g-1)===2;h&&g--;let d=h?a-1:a;w.push(d),i+=d}return w},n.getWrappedLineTrimmedLength=l},4097:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.BufferSet=void 0;let f=l(7150),k=l(1073),a=l(802);class w extends f.Disposable{constructor(g,_){super(),this._optionsService=g,this._bufferService=_,this._onBufferActivate=this._register(new a.Emitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this._register(this._optionsService.onSpecificOptionChange("scrollback",(()=>this.resize(this._bufferService.cols,this._bufferService.rows)))),this._register(this._optionsService.onSpecificOptionChange("tabStopWidth",(()=>this.setupTabStops())))}reset(){this._normal=new k.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new k.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(g){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(g),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(g,_){this._normal.resize(g,_),this._alt.resize(g,_),this.setupTabStops(g)}setupTabStops(g){this._normal.setupTabStops(g),this._alt.setupTabStops(g)}}n.BufferSet=w},3055:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.CellData=void 0;let f=l(726),k=l(8938),a=l(5451);class w extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.ExtendedAttrs,this.combinedData=""}static fromCharData(g){let _=new w;return _.setFromCharData(g),_}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,f.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(g){this.fg=g[k.CHAR_DATA_ATTR_INDEX],this.bg=0;let _=!1;if(g[k.CHAR_DATA_CHAR_INDEX].length>2)_=!0;else if(g[k.CHAR_DATA_CHAR_INDEX].length===2){let i=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=i&&i<=56319){let p=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=p&&p<=57343?this.content=1024*(i-55296)+p-56320+65536|g[k.CHAR_DATA_WIDTH_INDEX]<<22:_=!0}else _=!0}else this.content=g[k.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|g[k.CHAR_DATA_WIDTH_INDEX]<<22;_&&(this.combinedData=g[k.CHAR_DATA_CHAR_INDEX],this.content=2097152|g[k.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}n.CellData=w},8938:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.WHITESPACE_CELL_CODE=n.WHITESPACE_CELL_WIDTH=n.WHITESPACE_CELL_CHAR=n.NULL_CELL_CODE=n.NULL_CELL_WIDTH=n.NULL_CELL_CHAR=n.CHAR_DATA_CODE_INDEX=n.CHAR_DATA_WIDTH_INDEX=n.CHAR_DATA_CHAR_INDEX=n.CHAR_DATA_ATTR_INDEX=n.DEFAULT_EXT=n.DEFAULT_ATTR=n.DEFAULT_COLOR=void 0,n.DEFAULT_COLOR=0,n.DEFAULT_ATTR=n.DEFAULT_COLOR<<9|256,n.DEFAULT_EXT=0,n.CHAR_DATA_ATTR_INDEX=0,n.CHAR_DATA_CHAR_INDEX=1,n.CHAR_DATA_WIDTH_INDEX=2,n.CHAR_DATA_CODE_INDEX=3,n.NULL_CELL_CHAR="",n.NULL_CELL_WIDTH=1,n.NULL_CELL_CODE=0,n.WHITESPACE_CELL_CHAR=" ",n.WHITESPACE_CELL_WIDTH=1,n.WHITESPACE_CELL_CODE=32},8158:(y,n,l)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.Marker=void 0;let f=l(802),k=l(7150);class a{get id(){return this._id}constructor(c){this.line=c,this.isDisposed=!1,this._disposables=[],this._id=a._nextId++,this._onDispose=this.register(new f.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,k.dispose)(this._disposables),this._disposables.length=0)}register(c){return this._disposables.push(c),c}}n.Marker=a,a._nextId=1},6760:(y,n)=>{Object.defineProperty(n,"__esModule",{value:!0}),n.DEFAULT_CHARSET=n.CHARSETS=void 0,n.CHARSETS={},n.DEFAULT_CHARSET=n.CHARSETS.B,n.CHARSETS[0]={"`":"\u25C6",a:"\u2592",b:"\u2409",c:"\u240C",d:"\u240D",e:"\u240A",f:"\xB0",g:"\xB1",h:"\u2424",i:"\u240B",j:"\u2518",k:"\u2510",l:"\u250C",m:"\u2514",n:"\u253C",o:"\u23BA",p:"\u23BB",q:"\u2500",r:"\u23BC",s:"\u23BD",t:"\u251C",u:"\u2524",v:"\u2534",w:"\u252C",x:"\u2502",y:"\u2264",z:"\u2265","{":"\u03C0","|":"\u2260","}":"\xA3","~":"\xB7"},n.CHARSETS.A={"#":"\xA3"},n.CHARSETS.B=void 0,n.CHARSETS[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"},n.CHARSETS.C=n.CHARSETS[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},n.CHARSETS.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"},n.CHARSETS.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"},n.CHARSETS.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"},n.CHARSETS.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"},n.CHARSETS.E=n.CHARSETS[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"},n.CHARSETS.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"},n.CHARSETS.H=n.CHARSETS[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},n.CHARSETS["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"}},3534:(y,n)=>{var l,f,k;Object.defineProperty(n,"__esModule",{value:!0}),n.C1_ESCAPED=n.C1=n.C0=void 0,(function(a){a.NUL="\0",a.SOH="",a.STX="",a.ETX="",a.EOT="",a.ENQ="",a.ACK="",a.BEL="\x07",a.BS="\b",a.HT=" ",a.LF=`
|
|
2
|
+
var ha=Object.create;var Mr=Object.defineProperty;var fa=Object.getOwnPropertyDescriptor;var pa=Object.getOwnPropertyNames;var ga=Object.getPrototypeOf,ma=Object.prototype.hasOwnProperty;var $e=(e,t)=>()=>(e&&(t=e(e=0)),t);var _a=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),wa=(e,t)=>{for(var r in t)Mr(e,r,{get:t[r],enumerable:!0})},ka=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of pa(t))!ma.call(e,o)&&o!==r&&Mr(e,o,{get:()=>t[o],enumerable:!(s=fa(t,o))||s.enumerable});return e};var ba=(e,t,r)=>(r=e!=null?ha(ga(e)):{},ka(t||!e||!e.__esModule?Mr(r,"default",{value:e,enumerable:!0}):r,e));function be(e){return ya[e]}function Or(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=[Or(e,r).executable];return t&&t.length>0&&s.push(t),s}var ce,ya,Ae=$e(()=>{"use strict";ce=["codex","cursor","claude"],ya={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 Ia}from"node:crypto";import{open as xa,readFile as Qh,rename as Ea,rm as Aa}from"node:fs/promises";import Br from"node:path";async function le(e,t){let r=Br.dirname(e),s=Br.join(r,`.${Br.basename(e)}.${process.pid}.${Date.now()}.${Ia()}.tmp`),o=await xa(s,"w");try{let m=`${JSON.stringify(t,null,2)}
|
|
3
|
+
`;await o.writeFile(m,"utf8"),await o.sync(),await o.close(),await Ea(s,e)}catch(m){throw await o.close().catch(()=>{}),await Aa(s,{force:!0}).catch(()=>{}),m}}var Fe=$e(()=>{"use strict"});import{readFile as Fa}from"node:fs/promises";async function Re(e){let t=await Fa(e.indexFile,"utf8"),r=JSON.parse(t);return Fr(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 Fr(e,t,r){if(!Wa(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 Wa(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 Na}from"node:fs/promises";async function Ce(e,t){let r=await Na(Wr(e,t),"utf8"),s=JSON.parse(r);return ja(s,Wr(e,t))}async function re(e,t){let r={...t,updatedAt:new Date().toISOString()};await le(Wr(e,t.id),r)}async function Nr(e,t){let r=await Re(e);r.taskIds.includes(t)||await ot(e,{...r,taskIds:[...r.taskIds,t]})}function Wr(e,t){return`${e.tasksDir}/${t}.json`}function ja(e,t){let r=Ha(e);if(!qa(r))throw new Error(`Craig task record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function Ha(e){if(typeof e!="object"||e===null)return e;let t=e;return{...t,runner:jr(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:Va(t),bundlePath:typeof t.bundlePath=="string"||t.bundlePath===null?t.bundlePath:null,selectedRepoTargetId:typeof t.selectedRepoTargetId=="string"||t.selectedRepoTargetId===null?t.selectedRepoTargetId:null,repoTargets:Ka(t.repoTargets),runnerSession:t.runnerSession??Ua(t),checks:Qa(t),lastCommit:t.lastCommit??null,pullRequest:Za(t),artifacts:tc(t),cleanup:rc(t)}}function Ua(e){if(typeof e.title!="string")return null;let t=jr(e.runner);return{command:me(t,e.title),pid:null,startedAt:null,lastKnownState:e.status==="running"?"running":"starting",exitCode:null,exitedAt:null}}function qa(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||za(t.repoTargets))&&Xa(t.runnerSession)&&Ya(t.prompt)&&ri(t.checks)&&si(t.lastCommit)&&ii(t.pullRequest)&&Ja(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 Ka(e){if(Array.isArray(e))return e.filter(ei)}function za(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 Va(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 Ga(e.id,e.title,t,jr(e.runner))}function Ga(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 jr(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 Xa(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 Ya(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 Ja(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 Qa(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 Za(e){let t=e.pullRequest;return t?{...t,mergeStateStatus:t.mergeStateStatus??null,requiredChecks:ec(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 ec(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 tc(e){let t=e.artifacts;return t?{...t,checkSummaryPath:t.checkSummaryPath??null}:{logPath:null,checkSummaryPath:null,prDraftPath:null,prStatusPath:null}}function rc(e){return e.cleanup??{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}var _e=$e(()=>{"use strict";Fe();at();Ae()});import{readFile as sc}from"node:fs/promises";async function De(e){try{let t=await sc(e.uiStateFile,"utf8"),r=JSON.parse(t);return ic(r,e.uiStateFile)}catch(t){if(oc(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 ic(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")||!nc(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 nc(e,t){return typeof e=="object"&&e!==null&&(!(t in e)||Array.isArray(e[t])&&e[t].every(r=>typeof r=="string"))}function oc(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 ac}from"node:child_process";import{promisify as cc}from"node:util";async function Q(e,t,r={}){try{let s=await oi(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr}}catch(s){if(ai(s)){let o=s.stderr?.trim()||s.stdout?.trim()||s.message;throw new Error(`${e} ${t.join(" ")} failed: ${o}`)}throw s}}async function ae(e,t,r={}){try{let s=await oi(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr,exitCode:0}}catch(s){if(ai(s))return{stdout:s.stdout??"",stderr:s.stderr??"",exitCode:typeof s.code=="number"?s.code:null};throw s}}function ai(e){return e instanceof Error}var oi,Ie=$e(()=>{"use strict";oi=cc(ac)});import{readFile as Rc,readdir as Cc,rm as Pc}from"node:fs/promises";import wi from"node:path";async function Le(e,t){let r=await Rc(Jt(e,t),"utf8"),s=JSON.parse(r);return Ic(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 Cc(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 Pc(Jt(e,t),{force:!0})}function Jt(e,t){return wi.join(e.reposDir,`${t}.json`)}function Ic(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 xc,readdir as Ec,rm as Ac}from"node:fs/promises";import bi from"node:path";async function Pt(e,t){let r=await xc(Zt(e,t),"utf8"),s=JSON.parse(r);return Dc(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 Ec(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 Ac(Zt(e,t),{force:!0})}function Zt(e,t){return bi.join(e.workspacesDir,`${t}.json`)}function Dc(e,t){let r=Lc(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 Lc(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(jc(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 jc(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 an={};wa(an,{addWorkspace:()=>Bt,archiveWorkspace:()=>$t,listWorkspaces:()=>ls,removeWorkspace:()=>Ft,removeWorkspaceRecord:()=>ar,restoreWorkspace:()=>ds});import{readdir as pl,realpath as Qi,stat as gl}from"node:fs/promises";import Qe from"node:path";async function Bt(e,t){let r=Qe.resolve(e.workspaceRoot,t);if(!(await gl(r).catch(()=>null))?.isDirectory())throw new Error(`Workspace path does not exist: ${r}`);return await sn(r)?ml(e,r):_l(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 on(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 ar(e,t),await on(e,t),{kind:"removeWorkspace",workspaceId:r.id,rootPath:r.rootPath??""}}async function ml(e,t){let r=await nn(t),s=await dt(e),o=s.find(a=>a.rootPath===t)??null,m=o?en(o,r):Zi(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 tn(e,{repoIds:[m.id],workspaceIds:[k.id]}),await rn(e,k,m.id),{kind:"createWorkspace",workspace:k,repos:[m],created:!l}}async function _l(e,t){let r=await wl(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=bl(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 tn(e,{repoIds:n,workspaceIds:[l.id]}),await rn(e,l,n[0]??null),{kind:"createWorkspace",workspace:l,repos:r,created:!m}}async function wl(e,t){let r=await pl(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 sn(y))continue;let n=s.find(f=>f.rootPath===y)??o.find(f=>f.rootPath===y),l=await nn(y);o.push(n?en(n,l):Zi([...s,...o],y,l))}return o.sort((m,y)=>m.name.localeCompare(y.name)||m.id.localeCompare(y.id))}function Zi(e,t,r){let s=new Date().toISOString();return{id:kl(e,Qe.basename(t)),name:Qe.basename(t),rootPath:t,defaultBranch:r,createdAt:s,updatedAt:s}}function en(e,t){return e.defaultBranch===t?e:{...e,defaultBranch:t,updatedAt:new Date().toISOString()}}function kl(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 bl(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 tn(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 rn(e,t,r){await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),selectedRepoId:r,selectedWorkspaceId:t.id,selectedTaskId:null})}async function sn(e){try{let r=(await Q("git",["rev-parse","--show-toplevel"],{cwd:e})).stdout.trim(),[s,o]=await Promise.all([Qi(r).catch(()=>Qe.resolve(r)),Qi(e).catch(()=>Qe.resolve(e))]);return s===o}catch{return!1}}async function nn(e){let t=await ae("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 ae("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 ar(e,t){await yi(e,t);let r=await Re(e);await ot(e,{...r,workspaceIds:r.workspaceIds.filter(s=>s!==t)})}async function on(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 ho=_a(uo=>{(()=>{"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=uo;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
|
|
|
@@ -46,65 +46,67 @@ ${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:va(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 va(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 Zs(e,t){if(typeof e!="object"||e===null)throw new Error(`Craig config at ${t} is invalid. Expected a JSON object.`);let r=e;if(r.runners!==void 0){if(typeof r.runners!="object"||r.runners===null||Array.isArray(r.runners))throw new Error(`Craig config at ${t} is invalid. "runners" must be an object.`);for(let[s,o]of Object.entries(r.runners)){if(!ce.includes(s))throw new Error(`Craig config at ${t} is invalid. "runners.${s}" is not supported. Expected one of: ${ce.join(", ")}.`);if(typeof o!="object"||o===null||Array.isArray(o))throw new Error(`Craig config at ${t} is invalid. "runners.${s}" must be an object.`);let m=o;if(m.enabled!==void 0&&typeof m.enabled!="boolean")throw new Error(`Craig config at ${t} is invalid. "runners.${s}.enabled" must be a boolean.`);if(m.path!==void 0&&(typeof m.path!="string"||m.path.trim().length===0))throw new Error(`Craig config at ${t} is invalid. "runners.${s}.path" must be a non-empty string.`)}}if(r.checks!==void 0&&(typeof r.checks!="object"||r.checks===null||!Array.isArray(r.checks.commands)||!r.checks.commands.every(s=>typeof s=="string")))throw new Error(`Craig config at ${t} is invalid. "checks.commands" must be an array of strings.`);if(r.open!==void 0&&(typeof r.open!="object"||r.open===null||!Array.isArray(r.open.command)||!r.open.command.every(s=>typeof s=="string")))throw new Error(`Craig config at ${t} is invalid. "open.command" must be an array of strings.`);if(r.github!==void 0){if(typeof r.github!="object"||r.github===null)throw new Error(`Craig config at ${t} is invalid. "github" must be an object.`);if(r.github.mergeMethod!==void 0&&r.github.mergeMethod!=="merge"&&r.github.mergeMethod!=="rebase"&&r.github.mergeMethod!=="squash")throw new Error(`Craig config at ${t} is invalid. "github.mergeMethod" must be "merge", "rebase", or "squash".`);if(r.github.watchIntervalSeconds!==void 0&&(!Number.isInteger(r.github.watchIntervalSeconds)||r.github.watchIntervalSeconds<=0))throw new Error(`Craig config at ${t} is invalid. "github.watchIntervalSeconds" must be a positive integer.`)}return r}function Ra(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}Fe();import{readFile as Ea,readdir as Qh,rm as Zh}from"node:fs/promises";import Aa from"node:path";async function Ye(e,t){let r=await Ea(Or(e,t),"utf8"),s=JSON.parse(r);return Da(s,Or(e,t))}async function nt(e,t){await le(Or(e,t.id),{...t,updatedAt:new Date().toISOString()})}function Or(e,t){return Aa.join(e.sessionsDir,`${t}.json`)}function Da(e,t){let r=Oa(e);if(typeof r!="object"||r===null||typeof r.id!="string"||typeof r.taskId!="string"||typeof r.repoId!="string"||typeof r.workspaceId!="string"||r.substrate!=="tmux"||typeof r.sessionName!="string"||typeof r.paneId!="string"||!(r.windowTarget===null||typeof r.windowTarget=="string")||typeof r.worktreePath!="string"||!(r.logPath===null||typeof r.logPath=="string")||!Array.isArray(r.command)||!r.command.every(s=>typeof s=="string")||!["starting","running","exited","failed"].includes(r.status)||!(r.startedAt===null||typeof r.startedAt=="string")||!(r.exitedAt===null||typeof r.exitedAt=="string")||!(r.exitCode===null||typeof r.exitCode=="number")||!(r.lastAttachedAt===null||typeof r.lastAttachedAt=="string")||!Ma(r.attach)||!La(r.snapshot)||typeof r.createdAt!="string"||typeof r.updatedAt!="string")throw new Error(`Craig session record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function La(e){return e===null||typeof e=="object"&&e!==null&&typeof e.paneId=="string"&&(typeof e.windowTarget=="string"||e.windowTarget===null)&&typeof e.alive=="boolean"&&typeof e.capturedAt=="string"}function Ma(e){return typeof e=="object"&&e!==null&&e.detachChord==="ctrl+]"&&(e.lastSize===null||typeof e.lastSize=="object"&&e.lastSize!==null&&typeof e.lastSize.columns=="number"&&typeof e.lastSize.rows=="number")}function Oa(e){let t=typeof e=="object"&&e!==null?e:{};return{id:t.id??"",taskId:t.taskId??"",repoId:t.repoId??"",workspaceId:t.workspaceId??"",substrate:t.substrate??"tmux",sessionName:t.sessionName??"",paneId:t.paneId??"",windowTarget:typeof t.windowTarget=="string"?t.windowTarget:null,worktreePath:t.worktreePath??"",logPath:typeof t.logPath=="string"?t.logPath:null,command:Array.isArray(t.command)?t.command.filter(r=>typeof r=="string"):[],status:t.status??"starting",startedAt:typeof t.startedAt=="string"?t.startedAt:null,exitedAt:typeof t.exitedAt=="string"?t.exitedAt:null,exitCode:typeof t.exitCode=="number"?t.exitCode:null,lastAttachedAt:typeof t.lastAttachedAt=="string"?t.lastAttachedAt:null,attach:{detachChord:"ctrl+]",lastSize:typeof t.attach=="object"&&t.attach!==null&&t.attach.lastSize&&typeof t.attach.lastSize.columns=="number"&&typeof t.attach.lastSize.rows=="number"?t.attach.lastSize:null},snapshot:t.snapshot&&typeof t.snapshot=="object"?{paneId:typeof t.snapshot.paneId=="string"?t.snapshot.paneId:t.paneId??"",windowTarget:typeof t.snapshot.windowTarget=="string"?t.snapshot.windowTarget:null,alive:!!t.snapshot.alive,capturedAt:typeof t.snapshot.capturedAt=="string"?t.snapshot.capturedAt:new Date().toISOString()}:null,createdAt:t.createdAt??"",updatedAt:t.updatedAt??""}}_e();kt();Ie();function Gt(e){return`'${e.replace(/'/g,"'\\''")}'`}import{accessSync as ac,constants as cc}from"node:fs";import{homedir as ci}from"node:os";import Je from"node:path";var lc=[Je.join(ci(),".local","bin"),Je.join(ci(),".cursor","bin"),"/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin"];function di(e=process.env){return uc([...(e.PATH??"").split(Je.delimiter).filter(t=>t.length>0),...e.CRAIG_DISABLE_COMMAND_PATH_FALLBACKS==="1"?[]:lc])}function ct(e=process.env){return{...e,PATH:di(e).join(Je.delimiter)}}function dc(e,t={}){if(e.includes(Je.sep)){let r=Je.isAbsolute(e)?e:Je.resolve(t.cwd??process.cwd(),e);return li(r)?r:null}for(let r of di(t.env)){let s=Je.join(r,e);if(li(s))return s}return null}function lt(e,t={}){let r=dc(e,t);if(r)return r;throw new Error(`Command not found: ${e}. Install it or add its directory to PATH. Craig also checks ~/.local/bin, /opt/homebrew/bin, and /usr/local/bin.`)}function li(e){try{return ac(e,cc.X_OK),!0}catch{return!1}}function uc(e){return[...new Set(e)]}Ae();Ie();import{spawn as hc}from"node:child_process";import{createHash as fc}from"node:crypto";import pc from"node:path";var gc="craig";async function ui(e,t,r){let s=Nr(e,t),o=_c(),m=await Q("tmux",["new-session","-d","-P","-F","#{session_name} #{window_id} #{pane_id}","-s",s,"-n","runner",...o,"-c",r],{cwd:e}),y=kc(m.stdout);return await mc(e,s),y}async function mc(e,t){let r=[["set-option","-t",t,"status","off"],["set-option","-t",t,"detach-on-destroy","off"],["set-window-option","-t",t,"pane-border-status","off"],["set-window-option","-t",t,"aggressive-resize","on"]];for(let s of r)await Q("tmux",s,{cwd:e})}async function hi(e,t,r){await Q("tmux",["resize-window","-t",t,"-x",`${r.columns}`,"-y",`${r.rows}`],{cwd:e})}async function fi(e,t,r){await Q("tmux",["send-keys","-t",e,t,"C-m"],{cwd:r})}async function pi(e,t,r){await Q("tmux",["pipe-pane","-o","-t",e,`cat >> ${Gt(t)}`],{cwd:r})}async function Xt(e,t,r,s){let o=s??mi(e);if(r?await Q("tmux",["select-window","-t",r],{cwd:e}):await Q("tmux",["select-window","-t",t],{cwd:e}),await Q("tmux",["select-pane","-t",t],{cwd:e}),process.env.TMUX){await Q("tmux",["switch-client","-t",o],{cwd:e});return}await yc(e,["attach-session","-t",o])}async function gi(e,t){await Q("tmux",["kill-session","-t",t],{cwd:e})}function mi(e){let r=pc.basename(e).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"repo",s=fc("sha1").update(e).digest("hex").slice(0,8);return`${gc}-${r}-${s}`}function Nr(e,t){return`${mi(e)}-${t.toLowerCase()}`}function _c(){let e=wc();return e?["-x",`${e.columns}`,"-y",`${e.rows}`]:[]}function wc(){let e=[process.stdout,process.stderr,process.stdin];for(let t of e){let r="columns"in t?t.columns:void 0,s="rows"in t?t.rows:void 0;if(typeof r=="number"&&r>0&&typeof s=="number"&&s>0)return{columns:r,rows:s}}return null}function kc(e){let t=bc(e);if(t.length<3)throw new Error("tmux did not return the expected session, window, and pane targets for the Craig task session.");return{sessionName:t[0],windowTarget:t[1],paneId:t[2]}}function bc(e){return e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0)}async function yc(e,t){await new Promise((r,s)=>{let o=hc("tmux",t,{cwd:e,stdio:"inherit"});o.on("error",s),o.on("exit",m=>{if(m===0){r();return}s(new Error(`tmux ${t.join(" ")} failed with exit code ${m??"unknown"}.`))})})}var jr={async prepare(e,t){let r=e.runnerSession.command[0]??me(e.runner)[0],s=ct();await Q(lt(r,{cwd:t.repoRoot,env:s}),["--help"],{cwd:t.repoRoot,env:s})},async launch(e,t){let r=e.runnerSession.command.length>0?e.runnerSession.command:me(e.runner,e.prompt.value),s=lt(r[0],{cwd:e.worktreePath,env:ct()});await fi(t.session.paneId,[s,...r.slice(1)].map(o=>Gt(o)).join(" "),t.repoRoot)},async status(e){return e.runnerSession.lastKnownState},async stop(){},async collectArtifacts(){}};Ae();Ie();var Rt={async create(e,t){let r=await ui(t.repoRoot,t.taskId,t.worktreePath);t.logPath&&await pi(r.paneId,t.logPath,t.repoRoot);let s=await _i({paneId:r.paneId,windowTarget:r.windowTarget,alive:!0}),o={id:t.sessionId,taskId:t.taskId,repoId:t.repoId,workspaceId:t.workspaceId,substrate:"tmux",sessionName:r.sessionName||Nr(t.repoRoot,t.taskId),paneId:r.paneId,windowTarget:r.windowTarget,worktreePath:t.worktreePath,logPath:t.logPath,command:t.command,status:"starting",startedAt:null,exitedAt:null,exitCode:null,lastAttachedAt:null,attach:{detachChord:"ctrl+]",lastSize:null},snapshot:s,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return await nt(e,o),o},async attach(e,t,r){let s=await Rt.snapshot(t,r);if(!s.alive)throw new Error(`Session ${t.id} is no longer live and cannot be attached.`);await Xt(r,t.paneId,t.windowTarget,t.sessionName);let o={...t,status:"running",lastAttachedAt:new Date().toISOString(),snapshot:s};return await nt(e,o),o},async resize(e,t,r,s){await hi(s,t.sessionName,r);let o={...t,attach:{...t.attach,lastSize:r}};return await nt(e,o),o},async write(){throw new Error("Direct session writes are owned by the terminal bridge.")},async read(){throw new Error("Direct session reads are owned by the terminal bridge.")},async terminate(e,t,r){let s={...t,status:"failed",exitedAt:new Date().toISOString(),snapshot:{...t.snapshot??{paneId:t.paneId,windowTarget:t.windowTarget,alive:!1,capturedAt:new Date().toISOString()},alive:!1,capturedAt:new Date().toISOString()},command:(r.length>0,t.command)};return await nt(e,s),s},async snapshot(e,t){return vc(e,t)}};async function vc(e,t){let r=await ae("tmux",["list-panes","-F","#{pane_id}","-t",e.paneId],{cwd:t});return _i({paneId:e.paneId,windowTarget:e.windowTarget,alive:r.exitCode===0&&r.stdout.split(/\s+/).some(s=>s.trim()===e.paneId)})}async function _i(e){return{paneId:e.paneId,windowTarget:e.windowTarget,alive:e.alive,capturedAt:new Date().toISOString()}}ut();_e();Pt();import{mkdir as xt,rm as Lc,writeFile as Ur}from"node:fs/promises";import oe from"node:path";Ie();async function vi(e,t){let r=await ae("git",["show-ref","--verify","--quiet",`refs/heads/${t}`],{cwd:e});if(r.exitCode===0)return!0;if(r.exitCode===1)return!1;throw new Error(r.stderr.trim()||r.stdout.trim()||"Unable to check git branch state.")}async function Hr(e,t,r,s="main"){let o=s.trim()||"main";if((await ae("git",["show-ref","--verify","--quiet",`refs/heads/${o}`],{cwd:e})).exitCode!==0)throw new Error(`Base branch '${o}' does not exist locally.`);let y=await Dc(e,o);await Q("git",["worktree","add","-b",t,r,y],{cwd:e})}async function Dc(e,t){return(await ae("git",["remote","get-url","origin"],{cwd:e})).exitCode!==0||(await ae("git",["fetch","origin",t],{cwd:e})).exitCode!==0?t:(await ae("git",["show-ref","--verify","--quiet",`refs/remotes/origin/${t}`],{cwd:e})).exitCode===0?`refs/remotes/origin/${t}`:t}async function It(e){let t=await ae("git",["status","--short"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"Unable to inspect git status.");return t.stdout.trim().length>0}async function Si(e){await Q("git",["add","-A"],{cwd:e})}async function Ti(e,t){await Q("git",["commit","-m",t],{cwd:e})}async function Zt(e){let t=await Q("git",["show","-s","--format=%H%n%s","HEAD"],{cwd:e}),[r="",s=""]=t.stdout.trim().split(`
|
|
60
|
-
`);if(!r||!s)throw new Error("Unable to read git HEAD commit metadata.");return{sha:r,message:s}}async function er(e){return!await It(e)}async function Ri(e){await Q("git",["remote","get-url","origin"],{cwd:e})}async function Ci(e,t){await Q("git",["push","-u","origin",t],{cwd:e})}async function Pi(e,t){await Q("git",["worktree","remove","--force",t],{cwd:e})}Ae();at();async function Ii(e,t){let r=await Re(e),s=Ei(new Date),o=Ai(r.taskIds,s);for(;;){let m=`task_${s}_${String(o).padStart(2,"0")}`,y=`craig/${m}`;if(!await vi(t,y))return m;o+=1}}async function xi(e){let t=await Re(e),r=Ei(new Date),s=Ai(t.taskIds,r);return`task_${r}_${String(s).padStart(2,"0")}`}function Ei(e){let t=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${t}${r}${s}`}function Ai(e,t){let r=e.filter(s=>s.startsWith(`task_${t}_`)).map(s=>Number.parseInt(s.slice(-2),10)).filter(s=>Number.isInteger(s));return r.length===0?1:Math.max(...r)+1}async function Et(e,t,r,s={}){let o=await Le(e,t),m=await $c(e,o.id),y=await Ii(e,o.rootPath),n=s.sessionId??null,l=`craig/${y}`,f=oe.join(e.worktreesDir,o.id,y),k=oe.join(e.logsDir,`${y}.log`),a=oe.join(e.artifactsDir,y);await xt(oe.dirname(f),{recursive:!0}),await xt(a,{recursive:!0}),await Ur(k,"","utf8");let w=Mc(e,{taskId:y,repoId:o.id,workspaceId:m.id,sessionId:n,repoRoot:o.rootPath,prompt:r,runner:s.runner??"codex",config:s.config??{},branch:l,worktreePath:f});return await re(e,w),await Fr(e,y),await Hr(o.rootPath,l,f,o.defaultBranch),{repoId:o.id,repoRoot:o.rootPath,sessionId:n,workspaceId:m.id,task:w}}async function rr(e,t,r,s={}){let o=(await Me(e)).find(u=>u.id===t&&u.status==="active");if(!o)throw new Error(`Workspace ${t} does not exist or is archived.`);if(o.kind!=="project"){if(!o.primaryRepoId)throw new Error(`Workspace ${t} is not task-capable.`);let u=await Et(e,o.primaryRepoId,r,s);return{...u,bundlePath:u.task.worktreePath,repoTargets:[]}}let m=o.discoveredRepoIds??[];if(m.length===0)throw new Error(`Project workspace ${t} has no discovered repos.`);let y=await xi(e),n=new Date().toISOString(),l=s.runner??"codex",f=s.sessionId??null,k=`craig/${y}`,a=oe.join(e.craigDir,"task-bundles",y),w=oe.join(e.logsDir,`${y}.log`),c=oe.join(e.artifactsDir,y);await xt(a,{recursive:!0}),await xt(c,{recursive:!0}),await Ur(w,"","utf8");let g=await Promise.all(m.map(u=>Le(e,u))),_=Bc(g),i=await Promise.all(g.map(u=>Oc(e,u,y,k,oe.join(a,_.get(u.id))))),p=i.find(u=>u.status==="ready")??i[0];if(!i.some(u=>u.status==="ready"))throw await Lc(a,{recursive:!0,force:!0}),new Error(`No project repo targets could be provisioned for ${t}: ${i.map(u=>`${u.repoId}: ${u.failureReason??"unknown error"}`).join("; ")}`);await Ur(oe.join(a,"manifest.json"),JSON.stringify({taskId:y,workspaceId:t,prompt:r,repos:i.map(u=>({repoId:u.repoId,repoName:g.find(b=>b.id===u.repoId)?.name??u.repoId,path:oe.relative(a,u.worktreePath),status:u.status,worktreePath:u.worktreePath,failureReason:u.failureReason}))},null,2),"utf8");let h=Di(y,r,n,l,s.config??{}),d={id:y,title:r,slug:Li(r),type:"project",status:"draft",runner:l,repoId:p.repoId,workspaceId:o.id,sessionId:f,selectedPtyTabId:h[0]?.id??null,linkedRepoIds:m.filter(u=>u!==p.repoId),repoRoot:a,worktreePath:a,branch:k,bundlePath:a,selectedRepoTargetId:p.repoId,repoTargets:i,ptyTabs:h,runnerSession:{command:me(l,r,s.config??{}),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:r},checks:p.checks,lastCommit:null,pullRequest:p.pullRequest,artifacts:{logPath:oe.relative(e.workspaceRoot,w),checkSummaryPath:oe.relative(e.workspaceRoot,oe.join(c,"check-summary.json")),prDraftPath:null,prStatusPath:oe.relative(e.workspaceRoot,oe.join(c,"pr-status.json"))},cleanup:tr(),lastFailureReason:i.every(u=>u.status==="unavailable")?"No project repo targets could be provisioned.":null,createdAt:n,updatedAt:n};return await re(e,d),await Fr(e,y),{repoId:p.repoId,repoRoot:a,sessionId:f,workspaceId:o.id,task:d,bundlePath:a,repoTargets:i}}function Di(e,t,r,s="codex",o={}){let m=be(s);return[{id:`${e}:agent`,kind:"agent",title:m.defaultAgentTitle,command:me(s,void 0,o),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function Mc(e,t){let r=new Date().toISOString(),s=Di(t.taskId,t.prompt,r,t.runner,t.config);return{id:t.taskId,title:t.prompt,slug:Li(t.prompt),type:"repo",status:"draft",runner:t.runner,repoId:t.repoId,workspaceId:t.workspaceId,sessionId:t.sessionId,selectedPtyTabId:s[0]?.id??null,linkedRepoIds:[],repoRoot:t.repoRoot,worktreePath:t.worktreePath,branch:t.branch,ptyTabs:s,runnerSession:{command:me(t.runner,t.prompt,t.config),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:t.prompt},checks:{...qr(oe.relative(e.workspaceRoot,e.configFile))},lastCommit:null,pullRequest:Kr(),artifacts:{logPath:oe.relative(e.workspaceRoot,oe.join(e.logsDir,`${t.taskId}.log`)),checkSummaryPath:oe.relative(e.workspaceRoot,oe.join(e.artifactsDir,t.taskId,"check-summary.json")),prDraftPath:null,prStatusPath:oe.relative(e.workspaceRoot,oe.join(e.artifactsDir,t.taskId,"pr-status.json"))},cleanup:tr(),lastFailureReason:null,createdAt:r,updatedAt:r}}async function Oc(e,t,r,s,o){await xt(oe.dirname(o),{recursive:!0});try{return await Hr(t.rootPath,s,o,t.defaultBranch),{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"ready",failureReason:null,checks:qr(oe.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Kr(),cleanup:tr()}}catch(m){return{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"unavailable",failureReason:m instanceof Error?m.message:"Failed to create worktree.",checks:qr(oe.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Kr(),cleanup:tr()}}}function Bc(e){let t=new Set(["manifest.json"]),r=new Map;for(let s of e){let o=s.name==="manifest.json"?`${s.name}-repo`:s.name,m=o,y=2;for(;t.has(m);)m=`${o}-${y}`,y+=1;t.add(m),r.set(s.id,m)}return r}function qr(e){return{source:{type:"repo_config",path:e},lastRunAt:null,status:"not_run",commands:[],results:[]}}function Kr(){return{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,mergeable:!1,mergeStateStatus:null,requiredChecks:[],lastSyncedAt:null,lastSyncedHeadSha:null}}function tr(){return{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}async function $c(e,t){let s=(await Me(e)).find(o=>o.kind!=="project"&&o.primaryRepoId===t&&o.status==="active");if(!s)throw new Error(`Repo ${t} does not have an active workspace.`);return s}function Li(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}async function Oi(e,t,r,s={}){let o=r.trim(),m=await ye(e),y=s.runner??it(m);if(zt(y,m),t.trim().length===0)throw new Error(s.workspaceId?"Workspace id cannot be empty.":"Repo id cannot be empty.");if(o.length===0)throw new Error("Task prompt cannot be empty.");let n=s.workspaceId?await rr(e,s.workspaceId,o,{runner:y,config:m}):await Et(e,t,o,{runner:y,config:m}),l=n.task,f=me(y,o,m),k=`session_${l.id}`,a=l.artifacts.logPath?Mi.resolve(e.workspaceRoot,l.artifacts.logPath):Mi.join(e.logsDir,`${l.id}.log`);try{await jr.prepare(l,{repoRoot:n.repoRoot});let w=await Rt.create(e,{sessionId:k,taskId:l.id,repoId:n.repoId,workspaceId:n.workspaceId,repoRoot:n.repoRoot,worktreePath:l.worktreePath,logPath:a,command:f});await jr.launch(l,{repoRoot:n.repoRoot,session:w});let c=new Date().toISOString();w={...w,status:"running",startedAt:c,command:f};let g={...l,status:"running",runner:y,sessionId:w.id,selectedPtyTabId:l.selectedPtyTabId,runnerSession:{command:w.command,pid:null,startedAt:c,lastKnownState:"running",exitCode:null,exitedAt:null}};return await re(e,g),await nt(e,w),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??We(),selectedRepoId:g.repoId,selectedWorkspaceId:g.workspaceId,selectedTaskId:g.id,selectedPtyTabId:g.selectedPtyTabId}),{kind:"createTask",taskId:g.id,repoId:g.repoId,workspaceId:g.workspaceId,sessionId:w.id,status:g.status,branch:g.branch,worktreePath:g.worktreePath,runner:g.runner}}catch(w){let c={...l,sessionId:null,status:"draft",runnerSession:{...l.runnerSession,lastKnownState:"failed"},lastFailureReason:w instanceof Error?w.message:"Unknown Craig error"};throw await re(e,c),w}}At();ut();_e();import{access as Wc}from"node:fs/promises";import Bi from"node:path";async function ie(e,t){try{return await Ce(e,t)}catch(r){throw qc(r)?new Error(`Craig task "${t}" was not found.`):r}}async function pe(e){if(!await zr(e.worktreePath))throw new Error(`Task ${e.id} worktree does not exist at ${e.worktreePath}. Repair or recreate the task before retrying.`)}function Vr(e,t){return t.artifacts.logPath?Bi.isAbsolute(t.artifacts.logPath)?t.artifacts.logPath:Bi.join(e.workspaceRoot,t.artifacts.logPath):null}async function $i(e,t){let r=await zr(t.worktreePath),s=Vr(e,t),o=s?await zr(s):!1;return{worktreeExists:r,logExists:o,recentFailureReason:t.lastFailureReason??null,runnerCommandText:t.runnerSession.command.join(" "),checksSummary:Nc(t),lastCommitSummary:jc(t),prSummary:Hc(t),cleanupSummary:Uc(t)}}async function zr(e){try{return await Wc(e),!0}catch{return!1}}function Nc(e){let t=e.checks.commands.length,r=t===1?"command":"commands",s=e.checks.lastRunAt?` at ${e.checks.lastRunAt}`:"";return`${e.checks.status} (${t} ${r})${s}`}function jc(e){return e.lastCommit?`${e.lastCommit.sha.slice(0,7)} ${e.lastCommit.message}`:"not committed"}function Hc(e){if(!e.pullRequest.number||!e.pullRequest.url)return"not linked";let t=e.pullRequest.requiredChecks.length,r=t===1?"check":"checks";return`#${e.pullRequest.number} ${e.pullRequest.status??"unknown"} mergeable=${e.pullRequest.mergeable} mergeState=${e.pullRequest.mergeStateStatus??"unknown"} (${t} ${r})`}function Uc(e){return e.status!=="merged"?"not merged":e.cleanup.warning?`warning: ${e.cleanup.warning}`:e.cleanup.preservedWorktree?"preserved worktree":e.cleanup.worktreeRemovedAt?`worktree removed at ${e.cleanup.worktreeRemovedAt}`:"cleanup pending"}function qc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}async function Fi(e,t){let r=await ie(e,t);if(!r.sessionId)throw new Error(`Task ${r.id} does not have a Craig session to attach.`);let[s,o]=await Promise.all([Le(e,r.repoId),Ye(e,r.sessionId)]),m=await Rt.attach(e,o,s.rootPath);return{kind:"attachTask",taskId:r.id,sessionId:m.id,disposition:"attached"}}_e();Fe();_e();import{mkdir as Ni,readFile as Kc,writeFile as zc}from"node:fs/promises";import sr from"node:path";Ie();import Wi from"node:path";function Dt(e,t){return t?Wi.isAbsolute(t)?t:Wi.join(e.repoRoot,t):null}async function ht(e){let t=await ae("gh",["auth","status"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"GitHub CLI auth is required.")}async function ji(e,t){let r=Dt(t,e.artifacts.prDraftPath??sr.join(".craig","artifacts",e.id,"pr.md"));if(!r)throw new Error(`Task ${e.id} is missing a PR draft artifact path.`);await Ni(sr.dirname(r),{recursive:!0});try{await Kc(r,"utf8")}catch{await zc(r,`## Summary
|
|
58
|
+
${fe()}`);return t}import Oi from"node:path";Ae();import{mkdir as Sa,readFile as Ta,writeFile as Ra}from"node:fs/promises";import Ca from"node:path";async function ye(e){try{let t=await Ta(e.configFile,"utf8"),r=JSON.parse(t);return Zs(r,e.configFile)}catch(t){if(Pa(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 Sa(Ca.dirname(e.configFile),{recursive:!0}),await Ra(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 Pa(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}Fe();import{readFile as Da,readdir as rf,rm as sf}from"node:fs/promises";import La from"node:path";async function Ye(e,t){let r=await Da($r(e,t),"utf8"),s=JSON.parse(r);return Ma(s,$r(e,t))}async function nt(e,t){await le($r(e,t.id),{...t,updatedAt:new Date().toISOString()})}function $r(e,t){return La.join(e.sessionsDir,`${t}.json`)}function Ma(e,t){let r=$a(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")||!Ba(r.attach)||!Oa(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 Oa(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 Ba(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 $a(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 lc,constants as dc}from"node:fs";import{homedir as ci}from"node:os";import Je from"node:path";var uc=[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 fc([...(e.PATH??"").split(Je.delimiter).filter(t=>t.length>0),...e.CRAIG_DISABLE_COMMAND_PATH_FALLBACKS==="1"?[]:uc])}function ct(e=process.env){return{...e,PATH:di(e).join(Je.delimiter)}}function hc(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=hc(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 lc(e,dc.X_OK),!0}catch{return!1}}function fc(e){return[...new Set(e)]}Ae();Ie();import{spawn as pc}from"node:child_process";import{createHash as gc}from"node:crypto";import mc from"node:path";var _c="craig";async function ui(e,t,r){let s=Hr(e,t),o=kc(),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=yc(m.stdout);return await wc(e,s),y}async function wc(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 Sc(e,["attach-session","-t",o])}async function gi(e,t){await Q("tmux",["kill-session","-t",t],{cwd:e})}function mi(e){let r=mc.basename(e).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"repo",s=gc("sha1").update(e).digest("hex").slice(0,8);return`${_c}-${r}-${s}`}function Hr(e,t){return`${mi(e)}-${t.toLowerCase()}`}function kc(){let e=bc();return e?["-x",`${e.columns}`,"-y",`${e.rows}`]:[]}function bc(){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 yc(e){let t=vc(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 vc(e){return e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0)}async function Sc(e,t){await new Promise((r,s)=>{let o=pc("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 Ur={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||Hr(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 Tc(e,t)}};async function Tc(e,t){let r=await ae("tmux",["list-panes","-F","#{pane_id}","-t",e.paneId],{cwd:t});return _i({paneId:e.paneId,windowTarget:e.windowTarget,alive:r.exitCode===0&&r.stdout.split(/\s+/).some(s=>s.trim()===e.paneId)})}async function _i(e){return{paneId:e.paneId,windowTarget:e.windowTarget,alive:e.alive,capturedAt:new Date().toISOString()}}ut();_e();It();import{mkdir as Et,rm as Oc,writeFile as rr}from"node:fs/promises";import oe from"node:path";Ie();async function vi(e,t){let r=await ae("git",["show-ref","--verify","--quiet",`refs/heads/${t}`],{cwd:e});if(r.exitCode===0)return!0;if(r.exitCode===1)return!1;throw new Error(r.stderr.trim()||r.stdout.trim()||"Unable to check git branch state.")}async function qr(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 Mc(e,o);await Q("git",["worktree","add","-b",t,r,y],{cwd:e})}async function Mc(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 xt(e){let t=await ae("git",["status","--short"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"Unable to inspect git status.");return t.stdout.trim().length>0}async function Si(e){await Q("git",["add","-A"],{cwd:e})}async function Ti(e,t){await Q("git",["commit","-m",t],{cwd:e})}async function 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}var Di=["AGENTS","md"].join(".");async function At(e,t,r,s={}){let o=await Le(e,t),m=await Nc(e,o.id),y=await Ii(e,o.rootPath),n=s.sessionId??null,l=`craig/${y}`,f=oe.join(e.worktreesDir,o.id,y),k=oe.join(e.logsDir,`${y}.log`),a=oe.join(e.artifactsDir,y);await Et(oe.dirname(f),{recursive:!0}),await Et(a,{recursive:!0}),await rr(k,"","utf8");let w=Bc(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 Nr(e,y),await qr(o.rootPath,l,f,o.defaultBranch),{repoId:o.id,repoRoot:o.rootPath,sessionId:n,workspaceId:m.id,task:w}}async function ir(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=oe.join(e.craigDir,"task-bundles",y),w=oe.join(e.logsDir,`${y}.log`),c=oe.join(e.artifactsDir,y);await Et(a,{recursive:!0}),await Et(c,{recursive:!0}),await rr(w,"","utf8");let g=await Promise.all(m.map(u=>Le(e,u))),_=Fc(g),i=await Promise.all(g.map(u=>$c(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 Oc(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 rr(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"),await rr(oe.join(a,Di),Wc({taskId:y,workspaceId:t,prompt:r,repos:g,repoTargets:i,bundlePath:a}),"utf8");let h=Li(y,r,n,l,s.config??{}),d={id:y,title:r,slug:Mi(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:sr(),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 Nr(e,y),{repoId:p.repoId,repoRoot:a,sessionId:f,workspaceId:o.id,task:d,bundlePath:a,repoTargets:i}}function Li(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 Bc(e,t){let r=new Date().toISOString(),s=Li(t.taskId,t.prompt,r,t.runner,t.config);return{id:t.taskId,title:t.prompt,slug:Mi(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(oe.relative(e.workspaceRoot,e.configFile))},lastCommit:null,pullRequest:zr(),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:sr(),lastFailureReason:null,createdAt:r,updatedAt:r}}async function $c(e,t,r,s,o){await Et(oe.dirname(o),{recursive:!0});try{return await qr(t.rootPath,s,o,t.defaultBranch),{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"ready",failureReason:null,checks:Kr(oe.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:zr(),cleanup:sr()}}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(oe.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:zr(),cleanup:sr()}}}function Fc(e){let t=new Set(["manifest.json",Di]),r=new Map;for(let s of e){let o=t.has(s.name)?`${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 Wc(e){let t=new Map(e.repos.map(s=>[s.id,s.name])),r=e.repoTargets.map(s=>{let o=t.get(s.repoId)??s.repoId,m=oe.relative(e.bundlePath,s.worktreePath),y=s.status==="ready"?"ready":`unavailable: ${s.failureReason??"unknown error"}`;return`- \`${m}/\` - ${o} (${s.repoId}, ${y})`}).join(`
|
|
61
|
+
`);return["# Craig Project Task Bundle","","This directory is a Craig project task bundle. Repo work must happen inside the child repo worktrees listed below.","","Run repo Git commands from a repo worktree directory, not from the bundle root. Use `manifest.json` as the machine-readable source of truth for this bundle.","",`Task: \`${e.taskId}\``,`Workspace: \`${e.workspaceId}\``,`Prompt: ${e.prompt}`,"","## Repo Worktrees","",r,""].join(`
|
|
62
|
+
`)}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 sr(){return{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}async function Nc(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 Mi(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}async function Bi(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 ir(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?Oi.resolve(e.workspaceRoot,l.artifacts.logPath):Oi.join(e.logsDir,`${l.id}.log`);try{await Ur.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 Ur.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 Hc}from"node:fs/promises";import $i from"node:path";async function ie(e,t){try{return await Ce(e,t)}catch(r){throw Vc(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?$i.isAbsolute(t.artifacts.logPath)?t.artifacts.logPath:$i.join(e.workspaceRoot,t.artifacts.logPath):null}async function Fi(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:Uc(t),lastCommitSummary:qc(t),prSummary:Kc(t),cleanupSummary:zc(t)}}async function Vr(e){try{return await Hc(e),!0}catch{return!1}}function Uc(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 qc(e){return e.lastCommit?`${e.lastCommit.sha.slice(0,7)} ${e.lastCommit.message}`:"not committed"}function Kc(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 zc(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 Vc(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}async function Wi(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 ji,readFile as Gc,writeFile as Xc}from"node:fs/promises";import nr from"node:path";Ie();import Ni from"node:path";function Lt(e,t){return t?Ni.isAbsolute(t)?t:Ni.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 Hi(e,t){let r=Lt(t,e.artifacts.prDraftPath??nr.join(".craig","artifacts",e.id,"pr.md"));if(!r)throw new Error(`Task ${e.id} is missing a PR draft artifact path.`);await ji(nr.dirname(r),{recursive:!0});try{await Gc(r,"utf8")}catch{await Xc(r,`## Summary
|
|
61
63
|
|
|
62
64
|
- ${e.title}
|
|
63
|
-
`,"utf8")}return e.artifacts.prDraftPath=
|
|
65
|
+
`,"utf8")}return e.artifacts.prDraftPath=nr.relative(t.repoRoot,r),r}async function Ui(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 qi(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",or(t.pullRequest.number?String(t.pullRequest.number):t.branch),{cwd:t.worktreePath}),s=JSON.parse(r.stdout);return zi(e,t,s)}async function Yr(e,t){let r=await ae("gh",or(t.branch),{cwd:t.worktreePath});if(r.exitCode!==0)return{discovered:!1,task:t};let s=JSON.parse(r.stdout);return await zi(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",or(s),{cwd:r.worktreePath});return r.pullRequest=Xr(JSON.parse(m.stdout)),await re(e,t),"synced"}let o=await ae("gh",or(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),Jc(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 ji(nr.dirname(r),{recursive:!0}),await le(r,{taskId:t.id,pullRequest:t.pullRequest}))}function Ki(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 Yc(e){return e.requiredChecks.some(t=>t.status==="failed")}function Jc(e){return pt(e)||Yc(e)||e.status==="closed"||e.status==="merged"}function Qc(e){return pt(e)?"merge_ready":e.status==="merged"?"merged":e.status==="open"?"pr_open":"checked"}function or(e){return["pr","view",e,"--json","number,url,baseRefName,headRefName,headRefOid,state,mergeable,mergeStateStatus,statusCheckRollup"]}async function zi(e,t,r){let s=Xr(r);return t.pullRequest=s,t.status=Qc(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:Zc(e.state),mergeable:e.mergeable==="MERGEABLE",mergeStateStatus:e.mergeStateStatus,requiredChecks:el(e.statusCheckRollup),lastSyncedAt:new Date().toISOString(),lastSyncedHeadSha:e.headRefOid??null}}function Zc(e){return e==="OPEN"?"open":e==="MERGED"?"merged":e==="CLOSED"?"closed":null}function el(e){return e.map(t=>tl(t)).filter(t=>t!==null)}function tl(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:Vi(s??null,t.conclusion??null),conclusion:t.conclusion??null}:null}function Vi(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?Vi(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),Gi(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 Hi(s,e);return await re(e,s),await Ci(s.worktreePath,s.branch),s.pullRequest.number||await Ui(s,m),await ft(e,s),r.watch&&s.pullRequest.status!=="merged"&&!pt(s.pullRequest)&&await Qr(e,s),await Zr(e,s),Gi(s,r.watch,o?"synced":"created")}async function Xi(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=rl(r),r.pullRequest=sl(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 Gi(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:Ki(e.pullRequest)}}function rl(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(il)?"merge_ready":r.some(s=>s.status==="open")?"pr_open":"checked"}function sl(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 il(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 Xi(e,t)}catch{}let s=await Fi(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 nl}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 nl(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 ol(r.worktreePath);return{kind:"showTaskDiff",taskId:r.id,diffText:o,isEmpty:!1}}async function ol(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 al(e);for(let o of s){let m=await ae("git",["diff","--no-index","--stat","--patch","--","/dev/null",o],{cwd:e});t.push(m.stdout.trimEnd())}return t.join(`
|
|
64
66
|
|
|
65
|
-
`)}async function
|
|
66
|
-
`).map(r=>r.trim()).filter(r=>r.length>0)}async function is(e,t){let r=await ie(e,t);if(!r.sessionId)throw new Error(`Task ${r.id} does not have a Craig session.`);let s=await Ye(e,r.sessionId).catch(o=>{throw nl(o)?new Error(`Task ${r.id} does not have a Craig session.`):o});if(!s.paneId)throw new Error(`Task ${r.id} does not have a tmux target.`);return await Xt(e.repoRoot,s.paneId,s.windowTarget,s.sessionName),{kind:"focusTask",taskId:r.id,tmuxTarget:s.paneId}}function nl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as ol}from"node:child_process";async function ns(e,t){let r=await ie(e,t);await pe(r);let o=(await ye(e)).open?.command??[];if(o.length===0)return{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!1,command:null};let m=[...o,r.worktreePath];return await al(m,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:m}}async function al(e,t){await new Promise((r,s)=>{let[o,...m]=e,y=ol(o,m,{cwd:t,stdio:"inherit"});y.on("error",s),y.on("exit",n=>{if(n===0){r();return}s(new Error(`${e.join(" ")} failed with exit code ${n??"unknown"}.`))})})}Fe();import{mkdir as cl}from"node:fs/promises";import ll from"node:path";_e();Ie();async function os(e,t){let r=await ie(e,t);if(await pe(r),r.status==="draft"||r.status==="merged")throw new Error(`Task ${r.id} cannot run checks from status "${r.status}".`);if(r.status==="running"&&await It(r.worktreePath)&&(r.status="review"),r.status!=="review"&&r.status!=="checked")throw new Error(`Task ${r.id} cannot run checks from status "${r.status}".`);let o=(await ye(e)).checks?.commands??[];if(o.length===0)throw new Error(`Craig config at ${e.configFile} does not define any "checks.commands".`);r.checks.status="running",r.checks.commands=[...o],r.checks.results=[],await re(e,r);let m=[];for(let y of o){let n=new Date().toISOString(),l=await ae("sh",["-lc",y],{cwd:r.worktreePath}),f=new Date().toISOString(),k=l.exitCode??1;if(m.push({command:y,startedAt:n,finishedAt:f,exitCode:k}),k!==0)return r.checks.results=m,r.checks.status="failed",r.checks.lastRunAt=f,r.status="review",r.lastFailureReason=l.stderr.trim()||l.stdout.trim()||`Check command failed: ${y}`,await Xi(e,r),await re(e,r),{kind:"runChecks",taskId:r.id,status:"failed",commands:o}}return r.checks.results=m,r.checks.status="passed",r.checks.lastRunAt=new Date().toISOString(),r.status="checked",r.lastFailureReason=null,await Xi(e,r),await re(e,r),{kind:"runChecks",taskId:r.id,status:"passed",commands:o}}async function Xi(e,t){let r=Dt(e,t.artifacts.checkSummaryPath);r&&(await cl(ll.dirname(r),{recursive:!0}),await le(r,{taskId:t.id,status:t.checks.status,lastRunAt:t.checks.lastRunAt,commands:t.checks.commands,results:t.checks.results}))}_e();async function as(e,t){let r=await ie(e,t);await pe(r);let s=await It(r.worktreePath);if(r.status==="running"&&s&&(r.status="review"),r.status!=="review"&&r.status!=="checked")throw new Error(`Task ${r.id} cannot commit from status "${r.status}".`);if(!s)throw new Error(`Task ${r.id} has no uncommitted diff to commit.`);let o=r.prompt.value.trim();await Si(r.worktreePath),await Ti(r.worktreePath,o);let m=await Zt(r.worktreePath);return r.lastCommit={sha:m.sha,message:m.message,committedAt:new Date().toISOString()},r.lastFailureReason=null,await re(e,r),{kind:"commitTask",taskId:r.id,status:r.status,commitSha:m.sha,message:m.message}}_e();_e();async function Yi(e,t,r){let s=[];try{if(t.sessionId){let o=await Ye(e,t.sessionId);await gi(e.repoRoot,o.sessionName),t.cleanup.paneClosedAt=new Date().toISOString()}}catch(o){s.push(o instanceof Error?o.message:"Failed to close tmux session.")}if(t.cleanup.preservedWorktree=r.preserveWorktree,!r.preserveWorktree)try{await Pi(e.repoRoot,t.worktreePath),t.cleanup.worktreeRemovedAt=new Date().toISOString()}catch(o){s.push(o instanceof Error?o.message:"Failed to remove worktree.")}t.cleanup.warning=s.length>0?s.join(" "):null,await re(e,t)}async function Mt(e,t,r){let s=await ie(e,t);if(await pe(s),s.status!=="pr_open"&&s.status!=="merge_ready")throw new Error(`Task ${s.id} cannot merge from status "${s.status}".`);if(!s.pullRequest.number)throw new Error(`Task ${s.id} does not have a tracked pull request.`);if(!s.lastCommit)throw new Error(`Task ${s.id} must be committed before merging.`);if(!await er(s.worktreePath))throw new Error(`Task ${s.id} worktree must be clean before merging.`);if((await Zt(s.worktreePath)).sha!==s.lastCommit.sha)throw new Error(`Task ${s.id} local HEAD does not match the tracked task commit. Sync or commit before merging.`);await ht(s.worktreePath),await ft(e,s);let m=dl(s);if(m.length>0)throw new Error(`Task ${s.id} pull request is not merge-ready: ${m.join("; ")}.`);let n=(await ye(e)).github?.mergeMethod??"squash";return await Ui(s,n),s.pullRequest.status="merged",s.status="merged",s.lastFailureReason=null,await re(e,s),await Yi(e,s,r),{kind:"mergeTask",taskId:s.id,status:s.status,prNumber:s.pullRequest.number,preservedWorktree:r.preserveWorktree,cleanupWarning:s.cleanup.warning}}function dl(e){let t=[],r=e.pullRequest;r.status!=="open"&&t.push(`PR is ${r.status??"unknown"}`),r.mergeable||t.push(`GitHub reports merge state ${r.mergeStateStatus??"unknown"}`),r.lastSyncedHeadSha!==e.lastCommit?.sha&&t.push("local task commit is not synced to the PR head"),r.requiredChecks.length===0&&t.push("no GitHub checks reported");for(let s of["failed","pending","unknown"]){let o=r.requiredChecks.filter(m=>m.status===s).map(m=>m.name);o.length>0&&t.push(`${s} checks: ${o.join(", ")}`)}return pt(r)||t.push("required checks are not passing"),[...new Set(t)]}at();ut();Pt();kt();At();Ft();Ie();import wl from"node:path";import{stat as kl}from"node:fs/promises";async function on(e,t){let r=wl.resolve(e.workspaceRoot,t);if(!(await kl(r).catch(()=>null))?.isDirectory())throw new Error(`Repo path does not exist: ${r}`);let o=await Promise.resolve().then(()=>(Ft(),nn)).then(({addWorkspace:y})=>y(e,t)),m=o.repos[0];if(!m||o.workspace.kind==="project")throw new Error(`Repo path is not a git repository: ${r}`);return{kind:"createRepo",repo:m,workspaceId:o.workspace.id,created:o.created}}async function an(e){return{kind:"listRepos",repos:await dt(e)}}async function cn(e,t){let r=await Le(e,t),o=(await Me(e)).filter(f=>f.primaryRepoId===t),m=o.filter(f=>f.status==="active"),y=await Ne(e,{repoId:t});if(m.length>0)throw new Error(`Cannot remove repo ${t} while active workspace records still reference it.`);if(y.tasks.length>0)throw new Error(`Cannot remove repo ${t} while task records still reference it.`);await Promise.all(o.map(f=>nr(e,f.id))),await ki(e,t);let n=await Re(e);await ot(e,{...n,repoIds:n.repoIds.filter(f=>f!==t)});let l=await De({uiStateFile:e.uiStateFile});return l?.selectedRepoId===t&&await Pe({uiStateFile:e.uiStateFile},{...l,selectedRepoId:null,selectedWorkspaceId:null,selectedTaskId:null}),{kind:"removeRepo",repoId:r.id,rootPath:r.rootPath}}ut();_e();async function ln(e,t,r){let[s,o]=await Promise.all([ie(e,t),Le(e,r)]);if(s.repoId===o.id)throw new Error(`Repo ${o.id} is already the primary repo for task ${s.id}.`);let m=s.linkedRepoIds.includes(o.id)?s.linkedRepoIds:[...s.linkedRepoIds,o.id];return await re(e,{...s,linkedRepoIds:m}),{kind:"addTaskLink",taskId:s.id,repoId:o.id,linkedRepoIds:m}}async function dn(e,t){let r=await ie(e,t),s=await Promise.all(r.linkedRepoIds.map(o=>Le(e,o)));return{kind:"listTaskLinks",taskId:r.id,repos:s}}Ft();async function un(e,t){switch(e.kind){case"addWorkspace":return Ot(t.paths,e.path);case"addRepo":return on(t.paths,e.path);case"listRepos":return an(t.paths);case"removeRepo":return cn(t.paths,e.repoId);case"listWorkspaces":return cs(t.paths,{archived:e.archived});case"archiveWorkspace":return Bt(t.paths,e.workspaceId);case"restoreWorkspace":return ls(t.paths,e.workspaceId);case"removeWorkspace":return $t(t.paths,e.workspaceId);case"createTask":return Oi(t.paths,e.repoId??e.workspaceId??"",e.prompt,{...e.runner?{runner:e.runner}:{},...e.workspaceId?{workspaceId:e.workspaceId}:{}});case"listTasks":return e.repoId||e.workspaceId?Ne(t.paths,{...e.repoId?{repoId:e.repoId}:{},...e.workspaceId?{workspaceId:e.workspaceId}:{}}):Ne(t.paths);case"attachTask":return Fi(t.paths,e.taskId);case"addTaskLink":return ln(t.paths,e.taskId,e.repoId);case"listTaskLinks":return dn(t.paths,e.taskId);case"refreshInteractiveState":throw new Error("Interactive refresh should be handled by the interactive app.");case"showTask":return ts(t.paths,e.taskId);case"showSelectedTask":return ts(t.paths,qe(t,"show"));case"streamTaskLogs":return rs(t.paths,e.taskId);case"streamSelectedTaskLogs":return rs(t.paths,qe(t,"logs"));case"showTaskDiff":return ss(t.paths,e.taskId);case"showSelectedTaskDiff":return ss(t.paths,qe(t,"diff"));case"focusTask":return is(t.paths,e.taskId);case"focusSelectedTask":return is(t.paths,qe(t,"focus"));case"openTask":return ns(t.paths,e.taskId);case"openSelectedTask":return ns(t.paths,qe(t,"open"));case"runChecks":return os(t.paths,e.taskId);case"runSelectedTaskChecks":return os(t.paths,qe(t,"check"));case"commitTask":return as(t.paths,e.taskId);case"commitSelectedTask":return as(t.paths,qe(t,"commit"));case"openPullRequest":return Lt(t.paths,e.taskId,{watch:e.watch});case"openSelectedTaskPullRequest":return Lt(t.paths,qe(t,"pr"),{watch:e.watch});case"mergeTask":return Mt(t.paths,e.taskId,{preserveWorktree:e.preserveWorktree});case"mergeSelectedTask":return Mt(t.paths,qe(t,"merge"),{preserveWorktree:e.preserveWorktree});case"help":return{kind:"help",text:fe()};case"exit":return{kind:"exit"};default:return bl(e)}}function bl(e){throw new Error(`Unsupported command: ${JSON.stringify(e)}`)}function qe(e,t){if(e.selectedTaskId)return e.selectedTaskId;throw new Error(`No task selected. Create a task with 'task new --repo <repo-id> <prompt>' or use '${t} <id>'.`)}Fe();import{mkdir as je,readFile as yl}from"node:fs/promises";import ve from"node:path";function Ke(e){let t=ve.join(e,".craig");return{workspaceRoot:e,repoRoot:e,craigDir:t,indexFile:ve.join(t,"index.json"),reposDir:ve.join(t,"repos"),workspacesDir:ve.join(t,"workspaces"),sessionsDir:ve.join(t,"sessions"),runtimeDir:ve.join(t,"runtime"),uiStateFile:ve.join(t,"runtime","ui-state.json"),tasksDir:ve.join(t,"tasks"),jobsDir:ve.join(t,"jobs"),logsDir:ve.join(t,"logs"),artifactsDir:ve.join(t,"artifacts"),worktreesDir:ve.join(t,"worktrees"),configFile:ve.join(t,"config.json")}}at();async function yt(e){let t=Ke(e);await je(t.craigDir,{recursive:!0}),await Promise.all([je(t.reposDir,{recursive:!0}),je(t.workspacesDir,{recursive:!0}),je(t.sessionsDir,{recursive:!0}),je(t.runtimeDir,{recursive:!0}),je(t.tasksDir,{recursive:!0}),je(t.jobsDir,{recursive:!0}),je(t.logsDir,{recursive:!0}),je(t.artifactsDir,{recursive:!0}),je(t.worktreesDir,{recursive:!0})]);try{let o=await yl(t.indexFile,"utf8"),m=JSON.parse(o);return Br(m,e,t.indexFile)}catch(o){if(!vl(o))throw o instanceof SyntaxError?new Error(`Craig index at ${t.indexFile} is malformed. Remove or repair the file before rerunning Craig.`):o}let r=new Date().toISOString(),s={version:2,workspaceRoot:e,repoIds:[],workspaceIds:[],taskIds:[],jobIds:[],createdAt:r,updatedAt:r};return await le(t.indexFile,s),s}function vl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}function hn(e){switch(e.kind){case"createWorkspace":return[`${e.created?"Registered":"Updated"} ${e.workspace.kind??"repo"} workspace ${e.workspace.id}`,`Path: ${e.workspace.rootPath??""}`,`Repos: ${e.repos.map(t=>t.id).join(", ")}`].join(`
|
|
67
|
+
`)}async function al(e){return(await Q("git",["ls-files","--others","--exclude-standard"],{cwd:e})).stdout.split(`
|
|
68
|
+
`).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 cl(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 cl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as ll}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 dl(m,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:m}}async function dl(e,t){await new Promise((r,s)=>{let[o,...m]=e,y=ll(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 ul}from"node:fs/promises";import hl 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 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 Yi(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 Yi(e,r),await re(e,r),{kind:"runChecks",taskId:r.id,status:"passed",commands:o}}async function Yi(e,t){let r=Lt(e,t.artifacts.checkSummaryPath);r&&(await ul(hl.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 Ji(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=fl(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 qi(s,n),s.pullRequest.status="merged",s.status="merged",s.lastFailureReason=null,await re(e,s),await Ji(e,s,r),{kind:"mergeTask",taskId:s.id,status:s.status,prNumber:s.pullRequest.number,preservedWorktree:r.preserveWorktree,cleanupWarning:s.cleanup.warning}}function fl(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 yl from"node:path";import{stat as vl}from"node:fs/promises";async function cn(e,t){let r=yl.resolve(e.workspaceRoot,t);if(!(await vl(r).catch(()=>null))?.isDirectory())throw new Error(`Repo path does not exist: ${r}`);let o=await Promise.resolve().then(()=>(Wt(),an)).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 ln(e){return{kind:"listRepos",repos:await dt(e)}}async function dn(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=>ar(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 un(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 hn(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 fn(e,t){switch(e.kind){case"addWorkspace":return Bt(t.paths,e.path);case"addRepo":return cn(t.paths,e.path);case"listRepos":return ln(t.paths);case"removeRepo":return dn(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 Bi(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 Wi(t.paths,e.taskId);case"addTaskLink":return un(t.paths,e.taskId,e.repoId);case"listTaskLinks":return hn(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 Sl(e)}}function Sl(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 Tl}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 Tl(t.indexFile,"utf8"),m=JSON.parse(o);return Fr(m,e,t.indexFile)}catch(o){if(!Rl(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 Rl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}function pn(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
69
|
`);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
70
|
`);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
71
|
`);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
72
|
`);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
73
|
`);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}`,...
|
|
74
|
+
`);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} ${xl(t)} ${El(t)} ${t.title}`)].join(`
|
|
75
|
+
`);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}`,...Pl(e)].join(`
|
|
74
76
|
`);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[`${
|
|
77
|
+
`);case"openPullRequest":return[`${Cl(e.disposition,e.watch)} PR for ${e.taskId}`,`PR: #${e.prNumber} ${e.url}`,`Status: ${e.status}`,`Mergeable: ${e.mergeable}`,`Checks: ${e.requiredChecksSummary}`].join(`
|
|
76
78
|
`);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 ae("git",["diff","--no-index","--stat","--patch",`--unified=${
|
|
79
|
+
`);default:return Il(e)}}function Cl(e,t){return t?"Watched":e==="created"?"Created":e==="discovered"?"Discovered":"Synced"}function Pl(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 Il(e){throw new Error(`Unsupported result: ${JSON.stringify(e)}`)}function xl(e){return e.checks.status}function El(e){return e.pullRequest.number?`#${e.pullRequest.number}:${e.pullRequest.status??"unknown"}`:"-"}ut();It();kt();import{createRequire as wh}from"node:module";import{readdir as kh,stat as bh}from"node:fs/promises";import Tt from"node:path";_e();Dt();Wt();Ie();import{readFile as Al,stat as Dl}from"node:fs/promises";import us from"node:path";var Ll=200*1024,Ml=500*1024,cr="100000";async function mn(e,t,r){if(e.type==="project"&&e.repoTargets?.length)return Ol(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([dr(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 Ol(e,t,r){let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),[m,y]=await Promise.all([wn(e,s),(async()=>{if(!o)return ge("No diff selected","No local changes found.","empty");let l=lr(e,o),f=l?await Nt(l.target.worktreePath).catch(()=>null):null;return kn(e,o,t.diffRows,f)})()]),n=o?{[o]:y}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:n,selectedFile:m,selectedDiff:y}}async function _n(e,t={}){if(e.type==="project"&&e.repoTargets?.length)return Bl(e,t);try{await pe(e);let r=await Nt(e.worktreePath),[s,o]=await Promise.all([bn(e.worktreePath),yn(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([dr(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:Tn(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 Bl(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([bn(w.worktreePath).catch(()=>[]),yn(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([wn(e,n),(async()=>{if(!l)return ge("No diff selected","No local changes found.","empty");let w=lr(e,l),c=w?s.find(g=>g.target.repoId===w.target.repoId):null;return kn(e,l,m,c?.baseRef??null)})()]),a=l?{[l]:k}:{};return{taskId:e.id,fileRows:Tn(o),filePaths:o,diffRows:m,diffPaths:y,diffContents:a,selectedFilePath:n,selectedDiffPath:l,selectedFile:f,selectedDiff:k,error:null}}async function wn(e,t){let r=lr(e,t);if(!r)return ge("No file selected","No Git-visible files found.","empty");let s=await dr(r.target.worktreePath,r.relativePath);return{...s,path:t,title:t??s.title}}async function kn(e,t,r,s=null){let o=lr(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 lr(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 bn(e){let t=await Q("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e});return Rn(t.stdout)}async function yn(e,t){let[r,s,o,m]=await Promise.all([$l(e,t),gn(e,"staged"),gn(e,"unstaged"),Fl(e)]);return[...r,...s,...o,...m]}async function $l(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=vn(r.stdout),m=Sn(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 gn(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=vn(s.stdout),y=Sn(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 Fl(e){let t=await Q("git",["ls-files","--others","--exclude-standard"],{cwd:e}),r=Rn(t.stdout);return await Promise.all(r.map(async o=>{let m=await dr(e,o),y=m.status==="ready"?Wl(m.lines):null;return{group:"untracked",path:o,status:"A",additions:y,deletions:0}}))}function vn(e){return e.split(`
|
|
80
|
+
`).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 Sn(e){let t=new Map;for(let r of e.split(`
|
|
81
|
+
`)){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 ae("git",["show-ref","--verify","--quiet","refs/remotes/origin/main"],{cwd:e})).exitCode===0?"origin/main":(await ae("git",["show-ref","--verify","--quiet","refs/heads/main"],{cwd:e})).exitCode===0?"main":null}async function dr(e,t){if(!t)return ge("No file selected","No Git-visible files found.","empty");let r=Nl(e,t);try{let s=await Dl(r);if(s.size>Ll)return ge(t,`File is ${s.size} bytes, above the 200 KB inline preview limit.`,"too_large",t,s.size);let o=await Al(r);return jl(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(`
|
|
82
|
+
`),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=${cr}`,`${n}...HEAD`,"--",t],{cwd:e});l.stdout.trim().length>0&&o.push(`branch
|
|
83
|
+
${l.stdout.trimEnd()}`)}}if(m.includes("staged")){let n=await Q("git",["diff","--cached","--stat","--patch",`--unified=${cr}`,"--",t],{cwd:e});n.stdout.trim().length>0&&o.push(`staged
|
|
84
|
+
${n.stdout.trimEnd()}`)}if(m.includes("unstaged")){let n=await Q("git",["diff","--stat","--patch",`--unified=${cr}`,"--",t],{cwd:e});n.stdout.trim().length>0&&o.push(`unstaged
|
|
85
|
+
${n.stdout.trimEnd()}`)}if(m.includes("untracked")){let n=await ae("git",["diff","--no-index","--stat","--patch",`--unified=${cr}`,"--","/dev/null",t],{cwd:e});n.stdout.trim().length>0&&o.push(`untracked
|
|
84
86
|
${n.stdout.trimEnd()}`)}let y=o.join(`
|
|
85
87
|
|
|
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 $l(e,t){let r=ds.resolve(e,t),s=ds.resolve(e);if(r!==s&&!r.startsWith(`${s}${ds.sep}`))throw new Error(`File path escapes task worktree: ${t}`);return r}function Fl(e){return e.subarray(0,Math.min(e.byteLength,8e3)).includes(0)}function ge(e,t,r,s=null,o=null){return{path:s,status:r,title:e,lines:[t],byteLength:o}}_e();import{access as Wl}from"node:fs/promises";async function Tn(e,t){let r=await ie(e,t),s=await Nl(r.worktreePath),o={...r,status:"closed",cleanup:{...r.cleanup,preservedWorktree:s&&r.cleanup.worktreeRemovedAt===null,warning:null},lastFailureReason:null};return await re(e,o),o}async function Nl(e){try{return await Wl(e),!0}catch{return!1}}Ae();Ie();import Ht from"node:path";function Rn(e){switch(e.toLowerCase().split(".").pop()??""){case"ts":case"tsx":return"\u{F06E6} ";case"js":case"jsx":case"mjs":case"cjs":return"\u{F031E} ";case"json":case"jsonc":return"\u{F0871} ";case"md":case"mdx":return"\u{F0354} ";case"yaml":case"yml":return"\u{F0B10} ";case"sh":case"bash":case"zsh":return"\u{F018D} ";case"css":case"scss":case"sass":return"\u{F031C} ";case"html":case"htm":return"\u{F031D} ";case"py":return"\u{F0320} ";case"go":return"\u{F07D3} ";case"rs":return"\u{F1617} ";case"lock":return"\u{F033E} ";case"png":case"jpg":case"jpeg":case"gif":case"svg":case"webp":return"\u{F02E9} ";default:return"\u{F0214} "}}var Cn="\u{F024B} ",Pn="\u{F0DCF} ",In="\u25CB",xn="\uEA64",En="\uEAFE",An="\uEBDA",hs="\u25CB",fs="\u25CF",ps="\u2713",gs="\u2715";function Dn(e){switch(e.toLowerCase().split(".").pop()??""){case"ts":case"tsx":return"4fc1ff";case"js":case"jsx":case"mjs":case"cjs":return"f7df1e";case"json":case"jsonc":return"fbc02d";case"md":case"mdx":return"519aba";case"yaml":case"yml":return"e06c75";case"sh":case"bash":case"zsh":return"89e051";case"css":case"scss":case"sass":return"c792ea";case"html":case"htm":return"e06c75";case"py":return"3572a5";case"go":return"00add8";case"rs":return"dea584";case"lock":return"565f89";default:return}}Ae();kt();Ae();var jl=["tasks","center","inspector","actions"],$n=["agent","terminal"],Fn=[],ne="inspection",Wm=[...$n,...Fn],Wn=["commit","push","create-pr","refresh-checks","merge","close-task"],Hl=["refresh-checks","close-task"],Nn=["task","checks","pr","setup-run","actions","next-action"],jn=["diff","files","review"];function Hn(e,t={}){let r=e?.activeTab==="files"?"file":e?.activeTab==="diff"?"diff":null,s=nd(e?.openInspectionKind)??r,o=mt(t);return{inputMode:ad(e?.inputMode),focusedRegion:sd(e?.focusedRegion),selectedRepoId:ze(e?.selectedRepoId),selectedWorkspaceId:ze(e?.selectedWorkspaceId),selectedTaskId:ze(e?.selectedTaskId),selectedPtyTabId:ze(e?.selectedPtyTabId),selectedLeftItemId:md(ze(e?.selectedTaskId)),activeTab:r?ne:ze(e?.activeTab)??"agent",preferredPtyTabKind:od(e?.preferredPtyTabKind),inspectorSection:Nt(e?.inspectorSection,Nn,"task"),inspectionMode:id(e?.inspectionMode,r==="diff"?"diff":"files"),openInspectionKind:s,selectedFileTreePath:ze(e?.selectedFileTreePath),selectedFilePath:ze(e?.selectedFilePath),selectedDiffPath:ze(e?.selectedDiffPath),collapsedFileTreePaths:Array.isArray(e?.collapsedFileTreePaths)?e.collapsedFileTreePaths:[],fileScrollOffset:0,diffScrollOffset:0,selectedActionId:Nt(e?.selectedActionId,Wn,"commit"),selectedProjectTargetId:null,selectedRunner:cd(e?.selectedRunner,o,it(t)),centerTabRunner:null,actionMessage:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:Ul(),centerZoomed:!1}}function Ul(){return{status:"idle",rows:[],error:null,scrolledBack:!1}}function Un(e,t){return{...e??We(),selectedRepoId:t.selectedRepoId,selectedWorkspaceId:t.selectedWorkspaceId,selectedTaskId:t.selectedTaskId,selectedPtyTabId:t.selectedPtyTabId,inputMode:t.inputMode,focusedRegion:t.focusedRegion,activeTab:t.activeTab,preferredPtyTabKind:t.preferredPtyTabKind,inspectorSection:t.inspectorSection,inspectionMode:t.inspectionMode,openInspectionKind:t.openInspectionKind,selectedFileTreePath:t.selectedFileTreePath,selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath,collapsedFileTreePaths:t.collapsedFileTreePaths,selectedActionId:t.selectedActionId,selectedRunner:t.selectedRunner}}function hr(e,t,r={}){let s=pd(e,t),o=Jn(s),m=(o?.kind==="workspace"?t.workspaces?.find(k=>k.id===o.id)??null:null)??(o?.kind==="task"?t.workspaces?.find(k=>k.id===t.tasks.find(a=>a.id===o.id)?.workspaceId)??null:null)??t.workspaces?.find(k=>k.id===e.selectedWorkspaceId)??t.workspaces?.[0]??null,n=((o?.kind==="repo"?t.repos.find(k=>k.id===o.id)??null:o?.kind==="task"?t.repos.find(k=>k.id===t.tasks.find(a=>a.id===o.id)?.repoId)??null:null)??(m?.kind==="project"?t.repos.find(k=>k.id===e.selectedRepoId&&m.discoveredRepoIds?.includes(k.id))??null:null)??(m?.kind!=="project"?t.repos.find(k=>k.id===m?.primaryRepoId)??null:null)??t.repos.find(k=>k.id===e.selectedRepoId)??t.repos[0]??null)?.id??null,l=m?t.tasks.filter(k=>k.workspaceId===m.id):n?t.tasks.filter(k=>k.repoId===n):[],f=(o?.kind==="task"?l.find(k=>k.id===o.id)??null:null)??l.find(k=>k.id===e.selectedTaskId)??l[0]??null;return{...e,inputMode:r.resetInputMode?"control":e.inputMode,selectedLeftItemId:s,selectedWorkspaceId:m?.id??null,selectedRepoId:n,selectedTaskId:f?.id??null,...dd(f,e.activeTab,e.selectedPtyTabId),selectedFilePath:ed(e,t,f?.id??null),...ud(e,t,f?.id??null),selectedDiffPath:Zl(e,t,f?.id??null),inspectorSection:Nt(e.inspectorSection,Nn,"task")}}function qn(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return ql(t)?G({state:{...e,inputMode:"control",centerZoomed:!1,actionMessage:null},changed:!0,detachTerminal:!0}):G({state:e});if(t==="q"||t==="Q")return G({state:e,exit:!0});if(t==="ESCAPE")return G({state:{...e,actionMessage:null},changed:e.actionMessage!==null,pause:!0});if(t==="n"||t==="N")return G({state:{...e,focusedRegion:"tasks",actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0});if((t==="r"||t==="R")&&e.focusedRegion==="tasks"&&(_s(e.selectedLeftItemId)||ws(e.selectedLeftItemId)))return G({state:{...e,selectedRunner:ks(e.selectedRunner,r.enabledRunnerIds),actionMessage:null,taskPromptError:null},changed:!0});if(t==="TAB"||t==="]")return Ln(e,1);if(t==="SHIFT_TAB"||t==="[")return Ln(e,-1);if(t==="z"||t==="Z")return G({state:{...e,centerZoomed:!e.centerZoomed,actionMessage:null},changed:!0});if(t==="UP"||t==="k")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,-1,r):Mn(e,-1,r);if(t==="DOWN"||t==="j")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,1,r):Mn(e,1,r);if(t==="PAGE_UP")return et(e,-(r.pageRows??10),r);if(t==="PAGE_DOWN")return et(e,r.pageRows??10,r);if(t==="MOUSE_WHEEL_UP")return et(e,-3,r);if(t==="MOUSE_WHEEL_DOWN")return et(e,3,r);if(t==="r"&&e.focusedRegion==="center"&&e.selectedTaskId){let s=r.enabledRunnerIds??ce,o=e.centerTabRunner?s.indexOf(e.centerTabRunner):-1,m=o===s.length-1?null:s[o+1];return G({state:{...e,centerTabRunner:m,actionMessage:null},changed:!0})}if((t==="+"||t==="a"||t==="A"||t==="t"||t==="T")&&e.focusedRegion==="center"&&e.selectedTaskId){let s=ld(e,t);return G({state:{...e,preferredPtyTabKind:s,actionMessage:null},changed:!0,createPtyTab:!0,createPtyTabKind:s,createPtyTabRunner:s==="agent"?e.centerTabRunner:null})}if((t==="R"||t==="r")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return G({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0});if((t==="X"||t==="x")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return G({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&ur(e.selectedLeftItemId)&&e.selectedTaskId)return G({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&_d(e.selectedLeftItemId)&&e.selectedWorkspaceId)return G({state:{...e,actionMessage:null},changed:!0,removeWorkspace:!0});if(t==="x"&&e.focusedRegion==="center"&&Bn(e.activeTab,r.ptyTabIds??[]))return G({state:{...e,actionMessage:null},changed:!0,closePtyTab:!0});if(t==="LEFT"||t==="h"){if(e.focusedRegion==="center")return ms(e,-1,r.centerTabIds);if(e.focusedRegion==="inspector")return On(e,-1)}if(t==="RIGHT"||t==="l"){if(e.focusedRegion==="center")return ms(e,1,r.centerTabIds);if(e.focusedRegion==="inspector")return On(e,1)}if(tt(t)){if(e.focusedRegion==="tasks"&&(_s(e.selectedLeftItemId)||ws(e.selectedLeftItemId))){let s=Qn(e.selectedLeftItemId),o=Zn(e.selectedLeftItemId);return G({state:{...e,selectedRepoId:s??e.selectedRepoId,selectedWorkspaceId:o??e.selectedWorkspaceId,actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0})}if(e.focusedRegion==="tasks"&&e.selectedLeftItemId==="new-workspace")return G({state:{...e,actionMessage:null},changed:!0,openWorkspaceBrowser:!0});if(e.focusedRegion==="tasks"&&ur(e.selectedLeftItemId)&&e.selectedTaskId)return G({state:{...e,inputMode:"terminal",activeTab:e.selectedPtyTabId??e.activeTab,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&Bn(e.activeTab,r.ptyTabIds??[])&&e.selectedTaskId)return G({state:{...e,inputMode:"terminal",selectedPtyTabId:e.activeTab,preferredPtyTabKind:fr(e.activeTab)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&e.activeTab===ne)return G({state:{...e,actionMessage:null},changed:!0,refreshInspection:!0});if(e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="files"){let s=e.selectedFileTreePath??e.selectedFilePath;if(s&&(r.fileTreeDirectoryIds??[]).includes(s))return G({state:Xl({...e,selectedFileTreePath:s}),changed:!0});let o=s&&(r.fileTreeFileIds??[]).includes(s)?s:e.selectedFilePath;return G({state:{...e,selectedFileTreePath:o,selectedFilePath:o,activeTab:ne,openInspectionKind:"file",fileScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0})}return e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="diff"?G({state:{...e,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.focusedRegion==="inspector"&&e.inspectionMode==="review"?e.selectedActionId==="refresh-checks"?G({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?G({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):G({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.focusedRegion!=="actions"?G({state:e}):e.selectedActionId==="create-pr"?G({state:{...e,actionMessage:null},changed:!0,syncPullRequest:!0}):e.selectedActionId==="refresh-checks"?G({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="merge"?G({state:{...e,actionMessage:null},changed:!0,mergeTask:!0}):e.selectedActionId==="close-task"?G({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):G({state:{...e,actionMessage:`Action queued: ${e.selectedActionId} (inspection surfaces land in phase 4.1).`},changed:!0})}return G({state:e})}function jt(e,t){return{...e,terminal:t}}function Kn(e,t){return{...e,inputMode:"control",terminal:{status:"failed",rows:[],error:t}}}function ql(e){return e===""||e==="CTRL_]"||e==="CTRL_RIGHT_BRACKET"}function tt(e){return e==="ENTER"||e==="KP_ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
|
|
89
|
-
`}function zn(e){return e.length===1&&e>=" "&&e!=="\x7F"}function Vn(e){return Gn(e)||fr(e)!==null}function Kl(e){return Fn.includes(e)}function Gn(e){return $n.includes(e)}function Xn(e,t){return[...e?.ptyTabs.map(r=>r.id)??[],...t?.openInspectionKind?[ne]:[]]}var zl=["tasks","center","inspector"];function Ln(e,t){return lr(e,"focusedRegion",zl,t)}function ms(e,t,r){let s=lr(e,"activeTab",r&&r.length>0?r:fd(e),t);return!s.changed||Kl(s.state.activeTab)?s:{...s,state:{...s.state,selectedPtyTabId:s.state.activeTab,preferredPtyTabKind:fr(s.state.activeTab)??s.state.preferredPtyTabKind}}}function Mn(e,t,r){if(e.focusedRegion==="tasks")return Vl(e,t,r.leftItemIds);if(e.focusedRegion==="center")return ms(e,t,r.centerTabIds);if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Yn(e,t,r);if(e.inspectionMode==="diff"){let s=dr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0},refreshInspection:!0}:s}return r.projectTargetIds?.length?dr(e,"selectedProjectTargetId",r.projectTargetIds,t):lr(e,"selectedActionId",Hl,t)}return lr(e,"selectedActionId",Wn,t)}function Vl(e,t,r){let s=dr(e,"selectedLeftItemId",r,t);if(!s.changed)return s;let o=Jn(s.state.selectedLeftItemId);if(o?.kind==="workspace")return{...s,state:{...s.state,selectedWorkspaceId:o.id,selectedTaskId:null,selectedPtyTabId:null,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};if(o?.kind==="task")return{...s,state:{...s.state,selectedTaskId:o.id,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};if(o?.kind==="repo")return{...s,state:{...s.state,selectedRepoId:o.id,selectedTaskId:null,selectedPtyTabId:null,selectedFilePath:null,selectedFileTreePath:null,selectedDiffPath:null,fileScrollOffset:0,diffScrollOffset:0},refreshInspection:!0};let m=Qn(s.state.selectedLeftItemId);if(m)return{...s,state:{...s.state,selectedRepoId:m}};let y=Zn(s.state.selectedLeftItemId);return y?{...s,state:{...s.state,selectedWorkspaceId:y}}:s}function et(e,t,r){if(t===0)return G({state:e});if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Yn(e,t,r);if(e.inspectionMode==="diff"){let s=dr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,diffScrollOffset:0}}:s}return G({state:e})}if(e.focusedRegion==="center"&&e.activeTab===ne){if(e.openInspectionKind==="file")return Yl(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return Jl(e,t,r)}return G({state:e})}function Gl(e,t){if(e.inspectionMode===t)return G({state:e});let r=t==="diff"?"diff":t==="files"?"file":e.openInspectionKind,s=t==="diff"||t==="files"?ne:e.activeTab;return G({state:{...e,inspectionMode:t,activeTab:s,openInspectionKind:r,fileScrollOffset:t==="files"?0:e.fileScrollOffset,diffScrollOffset:t==="diff"?0:e.diffScrollOffset,actionMessage:null},changed:!0,refreshInspection:!0})}function On(e,t){return Gl(e,rd(e.inspectionMode,jn,t))}function Yn(e,t,r){let s=r.fileTreeRowIds&&r.fileTreeRowIds.length>0?r.fileTreeRowIds:r.filePathIds??[];if(s.length===0)return G({state:e});let o=e.selectedFileTreePath??e.selectedFilePath??s[0]??null,m=s.indexOf(o??""),y=Ve(m===-1?0:m+t,0,s.length-1),n=s[y]??null;if(n===e.selectedFileTreePath)return G({state:e});let l=n!==null&&(r.fileTreeFileIds??r.filePathIds??[]).includes(n);return G({state:{...e,selectedFileTreePath:n,selectedFilePath:l?n:e.selectedFilePath,activeTab:l?ne:e.activeTab,openInspectionKind:l?"file":e.openInspectionKind,fileScrollOffset:l?0:e.fileScrollOffset,actionMessage:null},changed:!0,refreshInspection:l})}function Xl(e){if(!e.selectedFileTreePath)return e;let t=new Set(e.collapsedFileTreePaths);return t.has(e.selectedFileTreePath)?t.delete(e.selectedFileTreePath):t.add(e.selectedFileTreePath),{...e,collapsedFileTreePaths:[...t].sort((r,s)=>r.localeCompare(s)),actionMessage:null}}function Yl(e,t,r,s,o=10){let m=Math.max(0,s-Math.max(1,o)),y=Ve(e[t]+r,0,m);return y===e[t]?G({state:e}):G({state:{...e,[t]:y,actionMessage:null},changed:!0})}function Jl(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return Ql(e,t,r);let s=r.diffLineCount??0,o=r.pageRows??10,m=Math.max(0,s-Math.max(1,o)),y=e.diffScrollOffset+t,n=r.diffPathIds??[];if(n.length===0||!e.selectedDiffPath){let k=Ve(y,0,m);return k===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:k,actionMessage:null},changed:!0})}let l=n.indexOf(e.selectedDiffPath);if(l===-1){let k=Ve(y,0,m);return k===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:k,actionMessage:null},changed:!0})}if(t>0&&y>m){let k=n[l+1]??null;return k?G({state:{...e,selectedDiffPath:k,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===m?G({state:e}):G({state:{...e,diffScrollOffset:m,actionMessage:null},changed:!0})}if(t<0&&y<0){let k=n[l-1]??null;return k?G({state:{...e,selectedDiffPath:k,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:Number.MAX_SAFE_INTEGER,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===0?G({state:e}):G({state:{...e,diffScrollOffset:0,actionMessage:null},changed:!0})}let f=Ve(y,0,m);return f===e.diffScrollOffset?G({state:e}):G({state:{...e,diffScrollOffset:f,actionMessage:null},changed:!0})}function Ql(e,t,r){let s=r.diffLineCount??0,o=r.pageRows??10,m=Math.max(0,s-Math.max(1,o)),y=Ve(e.diffScrollOffset+t,0,m),n=td(r.diffPathRanges??[],y)??e.selectedDiffPath;return y===e.diffScrollOffset&&n===e.selectedDiffPath?G({state:e}):G({state:{...e,diffScrollOffset:y,selectedDiffPath:n,actionMessage:null},changed:!0})}function Zl(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function ed(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedFilePath&&(t.inspection.filePaths??[]).includes(e.selectedFilePath)?e.selectedFilePath:t.inspection.selectedFilePath}function td(e,t){return e.find(r=>t>=r.start&&t<r.end)?.path??e.at(-1)?.path??null}function lr(e,t,r,s){let o=r.indexOf(e[t]),m=Ve(o+s,0,r.length-1),y=r[m];return!y||y===e[t]?G({state:e}):G({state:{...e,[t]:y,actionMessage:null},changed:!0})}function dr(e,t,r,s,o=!1){if(r.length===0)return G({state:e});let m=r.indexOf(e[t]??r[0]??""),y=Ve(m===-1?0:m+s,0,r.length-1),n=r[y]??null;return n===e[t]?G({state:e}):G({state:{...e,[t]:n,actionMessage:null},changed:!0,refreshInspection:o})}function rd(e,t,r){let s=t.indexOf(e);return t[Ve(s+r,0,t.length-1)]??e}function G(e){return{state:e.state,changed:e.changed??!1,exit:e.exit??!1,pause:e.pause??!1,attachTerminal:e.attachTerminal??!1,detachTerminal:e.detachTerminal??!1,beginTaskPrompt:e.beginTaskPrompt??!1,openWorkspaceBrowser:e.openWorkspaceBrowser??!1,createWorkspaceTask:e.createWorkspaceTask??!1,createPtyTab:e.createPtyTab??!1,createPtyTabKind:e.createPtyTabKind??null,createPtyTabRunner:e.createPtyTabRunner??null,closePtyTab:e.closePtyTab??!1,syncPullRequest:e.syncPullRequest??!1,refreshPullRequestChecks:e.refreshPullRequestChecks??!1,mergeTask:e.mergeTask??!1,closeTask:e.closeTask??!1,removeWorkspace:e.removeWorkspace??!1,refreshInspection:e.refreshInspection??!1}}function Nt(e,t,r){return t.includes(e??"")?e:r}function sd(e){return e==="tabs"?"center":Nt(e,jl,"tasks")}function id(e,t){return e==="checks"||e==="actions"||e==="review"?"review":Nt(e,jn,t)}function nd(e){return e==="file"||e==="diff"?e:null}function od(e){return e==="terminal"?"terminal":"agent"}function ad(e){return e==="terminal"?"terminal":"control"}function cd(e,t=[...ce],r="codex"){return e&&_t(e)&&t.includes(e)?e:r}function ks(e,t=ce){let r=t.length>0?t:ce,s=r.indexOf(e);return r[(s+1)%r.length]??r[0]??"codex"}function fr(e){let t=ce.join("|");return new RegExp(`:(?:agent|${t})(?:-\\d+)?$`).test(e)?"agent":/:terminal(?:-\d+)?$/.test(e)?"terminal":null}function ld(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":fr(e.activeTab)??e.preferredPtyTabKind}function dd(e,t,r){if(!e)return{activeTab:t===ne?t:"agent",selectedPtyTabId:null};let s=e.ptyTabs.find(n=>n.id===r)??null,o=e.selectedPtyTabId?e.ptyTabs.find(n=>n.id===e.selectedPtyTabId)??null:null,m=e.ptyTabs.find(n=>n.id===t)??null;if(m)return{activeTab:m.id,selectedPtyTabId:m.id};if(Gn(t)){let l=e.ptyTabs.find(f=>f.kind===t)??null??o??s??e.ptyTabs[0]??null;return{activeTab:l?.id??ne,selectedPtyTabId:l?.id??null}}if(t===ne)return{activeTab:ne,selectedPtyTabId:s?.id??o?.id??e.ptyTabs[0]?.id??null};let y=o??s??e.ptyTabs[0]??null;return{activeTab:y?.id??ne,selectedPtyTabId:y?.id??null}}function ud(e,t,r){if(!t.inspection||t.inspection.taskId!==r)return{selectedFileTreePath:e.selectedFileTreePath,collapsedFileTreePaths:e.collapsedFileTreePaths};let s=e.selectedFileTreePath??t.inspection.selectedFilePath,o=e.selectedFileTreePath===null&&e.collapsedFileTreePaths.length===0?hd(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:s,collapsedFileTreePaths:o}}function hd(e,t){let r=new Set;if(t){let s=t.split("/");for(let o=1;o<s.length;o+=1)r.add(s.slice(0,o).join("/"))}return e.filter(s=>s.kind==="directory"&&!s.path.includes("/")&&!r.has(s.path)).map(s=>s.path).sort((s,o)=>s.localeCompare(o))}function fd(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function Bn(e,t){return t.includes(e)}function pd(e,t){let r=gd(t);return e.selectedLeftItemId&&r.includes(e.selectedLeftItemId)?e.selectedLeftItemId:e.selectedWorkspaceId&&r.includes(`workspace:${e.selectedWorkspaceId}`)?`workspace:${e.selectedWorkspaceId}`:e.selectedTaskId&&r.includes(`task:${e.selectedTaskId}`)?`task:${e.selectedTaskId}`:e.selectedRepoId&&r.includes(`repo:${e.selectedRepoId}`)?`repo:${e.selectedRepoId}`:r[0]??null}function gd(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`),r.kind==="project"&&t.push(`new-task-workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="repo"&&t.push(`new-task:${r.primaryRepoId}`)}else for(let r of e.repos){t.push(`repo:${r.id}`);for(let s of e.tasks.filter(o=>o.repoId===r.id))t.push(`task:${s.id}`);t.push(`new-task:${r.id}`)}return t.push("new-workspace"),t}function Jn(e){return e?e.startsWith("workspace:")?{kind:"workspace",id:e.slice(10)}:e.startsWith("repo:")?{kind:"repo",id:e.slice(5)}:e.startsWith("task:")?{kind:"task",id:e.slice(5)}:null:null}function ze(e){return typeof e=="string"?e:null}function md(e){return e?`task:${e}`:null}function ur(e){return typeof e=="string"&&e.startsWith("task:")}function _s(e){return typeof e=="string"&&e.startsWith("new-task:")}function ws(e){return typeof e=="string"&&e.startsWith("new-task-workspace:")}function _d(e){return typeof e=="string"&&e.startsWith("workspace:")}function Qn(e){return _s(e)?e.slice(9):null}function Zn(e){return ws(e)?e.slice(19):null}function Ve(e,t,r){return Math.min(r,Math.max(t,e))}var gr="empty",de={lineNumber:"3b4261",gutter:"3b4261",keyword:"9d7cd8",string:"9ece6a",literal:"ff9e64",comment:"565f89",markup:"f7768e",diffAdd:"9ece6a",diffDelete:"f7768e",diffMeta:"565f89",diffHunk:"565f89"};function ro(e,t){let r=bd(t,e),s=t.repos.find(_=>_.id===e.selectedRepoId)??t.repos[0]??null,o=r?t.tasks.filter(_=>_.workspaceId===r.id):t.tasks,m=r?.kind==="project"?o:s?o.filter(_=>_.repoId===s.id):[],y=m.find(_=>_.id===e.selectedTaskId)??m[0]??null,n=y?.type==="project",l=Jd(t.tasks),f=Sd(e,y),k=vd(e,y,f),a=k.find(_=>_.id===f)??k[0]??{id:"agent",label:"CODEX"},w=t.inspection?.taskId===y?.id?t.inspection:null,c=s?.name??"no repo",g=y?Se(y.runner):Se(e.selectedRunner);return{inputMode:e.inputMode,focusedRegion:e.focusedRegion,actionMessage:e.actionMessage,terminal:e.terminal,footerText:e.workspaceBrowser!==null?`BROWSE WORKSPACE ${e.workspaceBrowser.cwd} \u2191\u2193 move \u2192 open \u2190 up Enter add repo Esc cancel`:e.taskPromptInput!==null?`NEW TASK ${s?`[${s.name}]`:"[no repo]"} \xB7 ${Se(e.selectedRunner)} Ctrl+R switch runner Enter create Esc cancel \u203A ${e.taskPromptInput}${e.taskPromptError?` \u2717 ${e.taskPromptError}`:""}`:e.inputMode==="terminal"?"TERMINAL \u2191\u2193/PgUp/PgDn scroll Ctrl+] return to control":e.focusedRegion==="tasks"?e.selectedLeftItemId?.startsWith("new-task:")||e.selectedLeftItemId?.startsWith("new-task-workspace:")?`r runner [${Se(e.selectedRunner)}] Enter create task Esc pause ? help`:ur(e.selectedLeftItemId)?"n new task Enter attach X close task Esc pause ? help":e.selectedLeftItemId?.startsWith("workspace:")?"n new task Enter select X remove workspace Esc pause ? help":"n new task Enter select Esc pause ? help":e.focusedRegion==="center"?y===null?"n new task Tab tasks Esc pause ? help":f===ne?"\u2191\u2193/wheel/PgUp/PgDn scroll \u2190/\u2192 switch Tab inspector Esc pause ? help":`+ new tab a ${Se(e.centerTabRunner??y?.runner??e.selectedRunner)} r runner t terminal x close Enter attach Esc pause ? help`:e.inspectionMode==="review"?n?"\u2191\u2193 navigate targets R refresh checks X close task \u2190/\u2192 mode Esc pause ? help":"R refresh checks X close task \u2190/\u2192 mode Esc pause ? help":e.inspectionMode==="files"?"\u2191\u2193 navigate Enter open file \u2190/\u2192 mode Esc pause ? help":"\u2191\u2193 navigate \u2190/\u2192 mode Esc pause ? help",topRail:{workspacePath:Ht.relative(process.env.HOME??"",t.workspaceRoot).length>0?`~/${Ht.relative(process.env.HOME??"",t.workspaceRoot)}`:t.workspaceRoot,agent:g,liveLabel:y?.status==="running"?"live":"idle"},leftTree:wd(e,t),runners:(t.enabledRunnerIds??["codex","cursor","claude"]).map(_=>Qd(_,l[_])),centerHeader:{tabLabel:e.workspaceBrowser?"BROWSER":a.label,taskId:e.workspaceBrowser?"new workspace":y?.id??"no task",repo:c,agent:g},centerTranscript:yd(f,e,s,y,e.workspaceBrowser,w,r),tabs:k,rightContext:Yd(s,y),rightInspection:Bd(e,y,w)}}function wd(e,t){let r=[{text:"WORKSPACES",muted:!0,focused:e.focusedRegion==="tasks"}];if(!t.workspaces)return kd(r,e,t.repos,t.tasks);let s=t.workspaces;if(s.length===0)r.push({text:"No workspaces registered.",indent:2,muted:!0});else for(let m of s){let y=e.selectedLeftItemId===`workspace:${m.id}`;r.push({id:`workspace:${m.id}`,text:`${m.kind==="project"?"\u25A6":"\u25BE"} ${m.name??m.id}`,selected:y,focused:y&&e.focusedRegion==="tasks"});let n=m.kind==="project"?m.discoveredRepoIds??[]:[m.primaryRepoId];if(m.kind==="project"){let f=`new-task-workspace:${m.id}`,k=e.selectedLeftItemId===f;r.push({id:f,text:`+ New Project Task [${Se(e.selectedRunner)}]`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks",muted:!k})}let l=t.tasks.filter(f=>f.workspaceId===m.id);if(l.length===0)r.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let f of l){let k=e.selectedLeftItemId===`task:${f.id}`,a=k?"\u25B8":"\u2022",w=f.title.length>28?`${f.title.slice(0,25)}\u2026`:f.title,c={id:`task:${f.id}`,taskId:f.id,text:`${a} ${w}`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks"},g=io(f);g&&(c.prBadge=g),r.push(c)}if(m.kind==="repo"){let f=`new-task:${m.primaryRepoId}`,k=e.selectedLeftItemId===f;r.push({id:f,text:`+ New Task [${Se(e.selectedRunner)}]`,indent:2,selected:k,focused:k&&e.focusedRegion==="tasks",muted:!k})}else{r.push({text:` Repos (${n.length})`,indent:0,muted:!0});for(let f of n.slice(0,6)){let k=t.repos.find(a=>a.id===f);r.push({text:` \xB7 ${k?.name??f}`,indent:0,muted:!0})}n.length>6&&r.push({text:` \xB7 ${n.length-6} more`,indent:0,muted:!0})}}let o=e.selectedLeftItemId==="new-workspace";return r.push({text:"",muted:!0}),r.push({id:"new-workspace",text:"+ New Workspace",selected:o,focused:o&&e.focusedRegion==="tasks"}),r}function kd(e,t,r,s){if(r.length===0)e.push({text:"No repos registered.",indent:2,muted:!0});else for(let m of r){let y=t.selectedLeftItemId===`repo:${m.id}`;e.push({id:`repo:${m.id}`,text:`\u25BE ${m.name}`,selected:y,focused:y&&t.focusedRegion==="tasks"});let n=s.filter(k=>k.repoId===m.id);if(n.length===0)e.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let k of n){let a=t.selectedLeftItemId===`task:${k.id}`,w=a?"\u25B8":"\u2022",c=k.title.length>28?`${k.title.slice(0,25)}\u2026`:k.title,g={id:`task:${k.id}`,taskId:k.id,text:`${w} ${c}`,indent:2,selected:a,focused:a&&t.focusedRegion==="tasks"},_=io(k);_&&(g.prBadge=_),e.push(g)}let l=`new-task:${m.id}`,f=t.selectedLeftItemId===l;e.push({id:l,text:`+ New Task [${Se(t.selectedRunner)}]`,indent:2,selected:f,focused:f&&t.focusedRegion==="tasks",muted:!f})}let o=t.selectedLeftItemId==="new-workspace";return e.push({text:"",muted:!0}),e.push({id:"new-workspace",text:"+ New Workspace",selected:o,focused:o&&t.focusedRegion==="tasks"}),e}function bd(e,t){let r=e.workspaces??[];if(!e.workspaces)return null;let s=e.tasks.find(o=>o.id===t.selectedTaskId)??null;return s?r.find(o=>o.id===s.workspaceId)??null:t.selectedWorkspaceId?r.find(o=>o.id===t.selectedWorkspaceId)??null:r[0]??null}function yd(e,t,r,s,o,m=null,y=null){if(o){let l=o.entries.length===0?["No directories or git repos here."]:o.entries.map((f,k)=>{let a=k===o.selectedIndex?"\u25B8":" ",w=f.kind==="repo"?" [git repo]":"/";return`${a} ${f.name}${w}`});return Oe(["Browse for a workspace to register.",o.cwd,"",...l,"",o.error??"Use \u2191\u2193 to move, \u2192 or Enter to open, \u2190 to go up, Enter on a git repo to add it."])}if(!r)return Oe(["No repos registered yet.","","Run `craig repo add <path>` in command mode, then reopen the shell."]);if(!s){let l=y?.kind==="project",f=l?y.name??"this workspace":r.name,k=l?"Project Task":"Task";return Oe([`No tasks in ${f}.`,"",`Press n or choose + New ${k} to create one with ${Se(t.selectedRunner)}.`])}let n=s.ptyTabs.find(l=>l.id===e)??null;return n?n.kind==="agent"?Oe([`${n.title} tab ready for ${s.id}.`,"","Press Enter to attach this PTY-backed agent session.","Use + to create another task tab, a/t for a specific kind, or x to close this tab."]):Oe([`${n.title} tab ready for ${s.id}.`,"","Press Enter to attach this plain task shell.","Use + to create another task tab, a/t for a specific kind, or x to close this tab."]):e===ne&&t.openInspectionKind==="file"?Cd(s,m,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?Pd(s,m,t.diffScrollOffset):s.ptyTabs.length===0&&!t.openInspectionKind?Oe(["No task tabs open.","","Press a to create an agent tab, t to create a Terminal tab, or + to create the preferred tab kind."]):Oe(["No center tab selected.","","Choose a task PTY tab or open an inspection item from the right panel."])}function vd(e,t,r){let s=t?.ptyTabs.map(m=>({id:m.id,label:Td(m)}))??[];if(!t)return[{id:gr,label:"EMPTY",active:r===gr,focused:e.focusedRegion==="center"&&r===gr}];let o=e.openInspectionKind||r===ne?[{id:ne,label:Rd(e)}]:[];return[...s,...o].map(m=>({...m,active:m.id===r,focused:e.focusedRegion==="center"&&m.id===r}))}function Sd(e,t){return t?t.ptyTabs.some(r=>r.id===e.activeTab)||e.activeTab===ne&&e.openInspectionKind?e.activeTab:e.activeTab==="agent"||e.activeTab==="terminal"?t.ptyTabs.find(r=>r.kind===e.activeTab)?.id??t.ptyTabs[0]?.id??ne:e.selectedPtyTabId&&t.ptyTabs.some(r=>r.id===e.selectedPtyTabId)?e.selectedPtyTabId:t.ptyTabs[0]?.id??ne:gr}function Td(e){return e.title.toUpperCase()}function Rd(e){let t=e.openInspectionKind==="diff"?e.selectedDiffPath:e.selectedFilePath,r=t?Ht.basename(t):e.inspectionMode.toUpperCase();return e.openInspectionKind==="diff"?`${r} \u0394`:r}function Cd(e,t,r){if(!e)return Oe(["No task selected.","","Select or create a task to inspect files."]);if(!t||t.error)return Oe(["Files unavailable.","",t?.error??"Craig has not loaded file inspection for this task yet."]);let s=t.selectedFile,o=so(s.path??s.title);return[{text:s.title},{text:`${s.byteLength===null?"size unknown":`${s.byteLength} bytes`} \xB7 ${s.lines.length} lines \xB7 PgUp/PgDn or wheel scroll`,tone:"muted"},{text:""},...Id(s.lines,r,o)]}function Pd(e,t,r){if(!e)return Oe(["No task selected.","","Select or create a task to inspect diffs."]);if(!t||t.error)return Oe(["Diff unavailable.","",t?.error??"Craig has not loaded diff inspection for this task yet."]);let s=t.selectedDiff,o=so(s.path??s.title);return[{text:s.title},{text:`${t.diffPaths.length} changed files \xB7 ${s.lines.length} rows \xB7 PgUp/PgDn or wheel scroll`,tone:"muted"},{text:""},...xd(s.lines,r,o)]}function Oe(e){return e.map(t=>({text:t}))}function Id(e,t,r){let s=Math.max(3,String(e.length).length),o=Math.max(0,Math.min(t,Math.max(0,e.length-1)));return e.slice(o).map((m,y)=>{let n=o+y+1;return{text:`${`${String(n).padStart(s," ")} \u2502 `}${m}`,segments:[{text:String(n).padStart(s," "),style:{fg:de.lineNumber}},{text:" \u2502 ",style:{fg:de.gutter}},...bs(m,r)],tone:"default"}})}function xd(e,t,r){let s=Ed(e),o=Math.max(0,Math.min(t,Math.max(0,s.length-1)));return s.slice(o).map(m=>Ad(m,r))}function Ed(e){let t=[],r=0,s=0;for(let o of e){let m=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(o);if(m){r=Number.parseInt(m[1]??"0",10),s=Number.parseInt(m[2]??"0",10);continue}if(!(o.startsWith("diff --git")||o.startsWith("index ")||o.startsWith("+++ ")||o.startsWith("--- "))&&!(o==="staged"||o==="unstaged"||o==="untracked")){if(o.startsWith("-")&&!o.startsWith("---")){t.push({oldNumber:r,newNumber:null,marker:"-",text:o.slice(1),kind:"delete"}),r+=1;continue}if(o.startsWith("+")&&!o.startsWith("+++")){t.push({oldNumber:null,newNumber:s,marker:"+",text:o.slice(1),kind:"add"}),s+=1;continue}if(o.startsWith(" ")){if(r===0&&s===0)continue;t.push({oldNumber:r,newNumber:s,marker:" ",text:o.slice(1),kind:"context"}),r+=1,s+=1;continue}}}return t}function Ad(e,t){let r=eo(e.oldNumber),s=eo(e.newNumber),o=e.kind==="delete"?r:s,m=e.kind==="delete"?{bg:"2a1111",fallbackFg:de.diffDelete}:e.kind==="add"?{bg:"10210f",fallbackFg:de.diffAdd}:null,y=`${o} \u2502 ${e.text}`,n=m?Ld(bs(e.text,t),m.bg,m.fallbackFg):bs(e.text,t),l=m?{fg:de.lineNumber,bg:m.bg}:{fg:de.lineNumber},f=m?{fg:de.gutter,bg:m.bg}:{fg:de.gutter};return{text:y,segments:[{text:o,style:l},{text:" \u2502 ",style:f},...n],fullBleed:m!==null}}function eo(e){return e===null?" ":String(e).padStart(4," ")}function so(e){let t=Ht.extname(e).toLowerCase();return[".ts",".tsx",".js",".jsx",".mjs",".cjs"].includes(t)?"javascript":[".json",".jsonc"].includes(t)?"json":[".md",".mdx"].includes(t)?"markdown":[".css",".scss"].includes(t)?"css":"plain"}function bs(e,t){return t==="diff"?Dd(e):t==="markdown"?Md(e):t==="json"?ys(e,/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|-?\b\d+(?:\.\d+)?\b/g):t==="javascript"||t==="css"?ys(e,/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`)|\/\/.*$|\/\*.*?\*\/|\b(const|let|var|function|return|if|else|for|while|class|interface|type|import|export|from|async|await|new|extends|implements|switch|case|break|continue|try|catch|throw|true|false|null|undefined)\b|-?\b\d+(?:\.\d+)?\b/g):[{text:e}]}function Dd(e){return e.startsWith("+")&&!e.startsWith("+++")?[{text:e,style:{fg:de.diffAdd}}]:e.startsWith("-")&&!e.startsWith("---")?[{text:e,style:{fg:de.diffDelete}}]:e.startsWith("@@")?[{text:e,style:{fg:de.diffHunk}}]:e.startsWith("diff --git")||e.startsWith("index ")||e.startsWith("+++ ")||e.startsWith("--- ")?[{text:e,style:{fg:de.diffMeta}}]:[{text:e}]}function Ld(e,t,r){return e.map(s=>({text:s.text,style:{...s.style??{fg:r},bg:t}}))}function Md(e){return/^#{1,6}\s/.test(e)?[{text:e,style:{fg:de.markup,bold:!0}}]:ys(e,/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)]+\))/g)}function ys(e,t){let r=[],s=0;for(let o of e.matchAll(t)){let m=o[0],y=o.index??0;y>s&&r.push({text:e.slice(s,y)}),r.push({text:m,style:Od(m)}),s=y+m.length}return s<e.length&&r.push({text:e.slice(s)}),r.length>0?r:[{text:e}]}function Od(e){return e.startsWith("//")||e.startsWith("/*")?{fg:de.comment,italic:!0}:e.startsWith('"')||e.startsWith("'")||e.startsWith("`")?{fg:de.string}:/^-?\d/.test(e)||e==="true"||e==="false"||e==="null"||e==="undefined"?{fg:de.literal}:e.startsWith("**")||e.startsWith("[")||e.startsWith("`")?{fg:de.markup}:{fg:de.keyword}}function Bd(e,t,r){let s=e.selectedProjectTargetId??t?.repoTargets?.[0]?.repoId??null,o=t?.type==="project"&&s?t.repoTargets?.find(n=>n.repoId===s)??null:null,m=t?.type==="project"?no(t.repoTargets??[]):o?.pullRequest??t?.pullRequest??null,y=[$d(e,m),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...y,...Wd(e,t)]}:e.inspectionMode==="files"?{title:"",rows:[...y,...Kd(e,r)]}:{title:"",rows:[...y,...Vd(e,r)]}}function $d(e,t){let r=e.inspectionMode,s=[{label:"CHANGES",active:r==="diff"},{label:"FILES",active:r==="files"},{label:"REVIEW",active:r==="review"}],o=[];for(let l=0;l<s.length;l++){let f=s[l];l>0&&o.push({text:" "}),o.push({text:f.label,style:{fg:f.active?"7aa2f7":"565f89"}})}let m=vs(t),y=Ss(t?.requiredChecks??null);return o.push({text:" "},m,{text:" "},y),{id:"inspection-mode",text:o.map(l=>l.text).join(""),segments:o}}function to(e){return[{text:" "},vs(e),{text:" "},Ss(e.requiredChecks??null)]}function io(e){if(e.type==="project"&&e.repoTargets?.length){let t=no(e.repoTargets);return t?to(t):null}return e.pullRequest.number?to(e.pullRequest):null}function no(e){let t=e.filter(s=>s.status==="ready"),r=t.map(s=>s.pullRequest).filter(s=>!!s.number);return r.length===0?null:{provider:"github",number:-1,url:null,baseBranch:null,headBranch:null,status:Fd(r),mergeable:r.length===t.length&&r.every(s=>s.mergeable),mergeStateStatus:null,requiredChecks:r.flatMap(s=>s.requiredChecks),lastSyncedAt:r.map(s=>s.lastSyncedAt).filter(s=>!!s).sort().at(-1)??null,lastSyncedHeadSha:null}}function Fd(e){return e.some(t=>t.status==="open")?"open":e.every(t=>t.status==="merged")?"merged":e.some(t=>t.status==="closed")?"closed":e[0]?.status??null}function vs(e){return!e||!e.number?{text:In,style:{fg:"565f89"}}:e.status==="merged"?{text:En,style:{fg:"9d7cd8"}}:e.status==="closed"?{text:An,style:{fg:"f7768e"}}:{text:xn,style:{fg:"9ece6a"}}}function Ss(e){return!e||e.length===0?{text:hs,style:{fg:"565f89"}}:e.some(t=>t.status==="failed")?{text:gs,style:{fg:"f7768e"}}:e.every(t=>t.status==="success"||t.status==="skipped")?{text:ps,style:{fg:"9ece6a"}}:{text:fs,style:{fg:"e0af68"}}}function Wd(e,t){return t?t.type==="project"&&t.repoTargets?.length?Nd(e,t):oo("pr",t.title,t.branch,t.pullRequest):[{id:"review-empty",text:"No task selected.",muted:!0}]}var pr=32;function Nd(e,t){let r=[],s=t.repoTargets??[],o=e.selectedProjectTargetId??s[0]?.repoId??null;for(let y of s){let n=o===y.repoId,l=e.focusedRegion==="inspector"&&n,f=y.repoId.startsWith("repo_")?y.repoId.slice(5):y.repoId;if(y.status!=="ready"){let a=y.failureReason?y.failureReason.slice(0,14):y.status,w=pr-a.length-1,c=f.length>w?f.slice(0,w-1)+"\u2026":f,g=pr-c.length-a.length;r.push({id:`project-review:${y.repoId}`,text:c+" ".repeat(Math.max(1,g))+a,selected:n,focused:l,muted:!0})}else{let k=vs(y.pullRequest),a=Ss(y.pullRequest.requiredChecks),w=`${k.text} ${a.text}`,c=pr-w.length-1,g=f.length>c?f.slice(0,c-1)+"\u2026":f,_=pr-g.length-w.length,i=g+" ".repeat(Math.max(1,_));r.push({id:`project-review:${y.repoId}`,text:i+w,selected:n,focused:l,segments:[{text:i},{...k,text:k.text},{text:" "},{...a,text:a.text}]})}}let m=s.find(y=>y.repoId===o)??null;return m?.status==="ready"&&m.pullRequest.number&&(r.push({id:"target-detail-spacer",text:""}),r.push(...oo("target",null,m.branch,m.pullRequest))),r}function oo(e,t,r,s){let o=k=>`${e}-${k}`;if(!s.number)return[{id:o("no-pr"),text:r,muted:!0}];let m=[],y=`#${s.number} ${s.status??"open"}`;if(m.push(s.url?{id:o("pr-number"),text:`${y} Open in GitHub \u2197`,segments:[{text:y},{text:" Open in GitHub \u2197",style:{fg:"7aa2f7",underline:!0},href:s.url}]}:{id:o("pr-number"),text:y}),t){let k=t.length>34?`${t.slice(0,31)}\u2026`:t;m.push({id:o("pr-title"),text:k})}let n=s.baseBranch??"?",l=s.headBranch??r;m.push({id:o("pr-branches"),text:`\u2190 ${n} \u2192 ${l}`,muted:!0});let f=s.mergeable?"merge ready":s.mergeStateStatus?`merge ${s.mergeStateStatus}`:"merge unknown";return m.push({id:o("pr-meta"),text:`${f} \xB7 synced ${jd(s.lastSyncedAt)}`,muted:!0}),m.push({id:o("checks-spacer"),text:""}),m.push({id:o("checks-header"),text:"Checks",muted:!0}),s.requiredChecks.length?m.push(...s.requiredChecks.map(Hd)):m.push({id:o("checks-none"),text:s.number?"No GitHub checks reported.":"No checks \u2014 sync after creating a PR.",muted:!0}),m}function jd(e){if(!e)return"--";let t=Date.now()-new Date(e).getTime(),r=Math.floor(t/1e3);if(r<60)return`${r}s ago`;let s=Math.floor(r/60);if(s<60)return`${s}m ago`;let o=Math.floor(s/60);return o<24?`${o}h ago`:`${Math.floor(o/24)}d ago`}function Hd(e){let{icon:t,color:r}=Ud(e.status),s=e.name.length>22?`${e.name.slice(0,21)}\u2026`:e.name;return{id:`pr-check:${e.name}`,text:`${t} ${s.padEnd(22," ")} ${qd(e.status)}`,color:r,muted:!1}}function Ud(e){switch(e){case"success":return{icon:ps,color:"9ece6a"};case"pending":return{icon:fs,color:"e0af68"};case"failed":return{icon:gs,color:"f7768e"};case"skipped":return{icon:hs,color:"565f89"};default:return{icon:"?",color:"565f89"}}}function qd(e){return e==="success"?"passing":e==="failed"?"failing":e}function Kd(e,t){if(!t)return[{id:"empty",text:"No file index. Select a task with local changes.",muted:!0}];if(t.error)return[{id:"error",text:t.error,muted:!0}];if(t.fileRows.length===0)return[{id:"empty",text:"No Git-visible files.",muted:!0}];let r=new Map(t.diffRows.map(m=>[m.path,m.status])),s=zd(t.fileRows,e.collapsedFileTreePaths),o=e.selectedFileTreePath??t.selectedFilePath;return s.map(m=>{let y=m.kind==="file"?r.get(m.path):void 0,n=y==="A"?"9ece6a":y==="M"?"e0af68":y==="D"?"f7768e":y==="??"?"565f89":void 0,l=m.kind==="directory"?e.collapsedFileTreePaths.includes(m.path)?Cn:Pn:Rn(m.label),f=m.kind==="file"?Dn(m.label):void 0,k=" ".repeat(m.depth),a=f?{text:l,style:{fg:f}}:{text:l},w=n?{text:m.label,style:{fg:n}}:{text:m.label},c=[{text:k},a,w];return{id:m.path,text:`${k}${l}${m.label}`,selected:m.path===o,focused:m.path===o&&e.focusedRegion==="inspector",muted:m.kind==="directory",segments:c}})}function zd(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let m=1;m<o.length;m+=1)if(r.has(o.slice(0,m).join("/")))return!1;return!0})}function Vd(e,t){if(!t)return[{id:"empty",text:"No task diff index.",muted:!0}];if(t.error)return[{id:"error",text:t.error,muted:!0}];if(t.diffRows.length===0)return[{id:"empty",text:t.filePaths.some(o=>o.startsWith("repo_"))?"No changes in project task worktrees. Edits in the original repos are outside this task.":"No local changes.",muted:!0}];if(Gd(t))return Xd(e,t);let r=[];for(let s of["branch","staged","unstaged","untracked"]){let o=t.diffRows.filter(m=>m.group===s);o.length!==0&&(r.push({id:s,text:s.toUpperCase(),muted:!0}),r.push(...o.map(m=>ao(m,e,t))))}return r}function Gd(e){return e.filePaths.some(t=>t.startsWith("repo_"))||e.diffRows.some(t=>t.path.startsWith("repo_"))}function Xd(e,t){let r=[],s=[...new Set(t.diffRows.map(o=>o.path.split("/")[0]).filter(o=>typeof o=="string"&&o.length>0))].sort();for(let o of s){let m=t.diffRows.filter(n=>n.path.startsWith(`${o}/`)),y=o.startsWith("repo_")?o.slice(5):o;r.push({id:`repo-diff:${o}`,text:y,muted:!0});for(let n of["branch","staged","unstaged","untracked"]){let l=m.filter(f=>f.group===n);l.length!==0&&(r.push({id:`repo-diff:${o}:${n}`,text:` ${n}`,muted:!0}),r.push(...l.map(f=>ao(f,e,t,o.length+1))))}}return r}function ao(e,t,r,s=0){let o=e.additions===null?"-":`+${e.additions}`,m=e.deletions===null?"-":`-${e.deletions}`,y=e.status==="A"||e.group==="untracked"?"9ece6a":e.status==="D"?"f7768e":"e0af68",n=s>0?e.path.slice(s):e.path;return{id:`${e.group}:${e.path}`,text:` ${e.status.padEnd(2," ")} ${n} ${o}/${m}`,selected:e.path===(t.selectedDiffPath??r.selectedDiffPath),focused:e.path===(t.selectedDiffPath??r.selectedDiffPath)&&t.focusedRegion==="inspector",color:y}}function Yd(e,t){return e?t?[{label:"Task",value:t.id},{label:"Repo",value:e.name},{label:"Agent",value:Se(t.runner)},{label:"Branch",value:t.branch},{label:"Status",value:t.status},{label:"Worktree",value:Ht.basename(t.worktreePath)}]:[{label:"Repo",value:e.name},{label:"Branch",value:e.defaultBranch},{label:"Task",value:"none",mutedValue:!0}]:[{label:"Repo",value:"none",mutedValue:!0}]}function Jd(e){return e.reduce((t,r)=>(t[r.runner]+=1,t),{codex:0,cursor:0,claude:0})}function Qd(e,t){return{name:Se(e).toLowerCase(),health:t>0?1:0,count:String(t)}}var mr={width:120,height:36},Be={leftWidth:42,rightWidth:36,dividerWidth:1,topRailHeight:1};function vt(e,t){return{width:Math.max(e??mr.width,mr.width),height:Math.max(t??mr.height,mr.height)}}import{spawn as bu}from"node:child_process";import{createHash as yu}from"node:crypto";import{createServer as vu,createConnection as bo}from"node:net";import{openSync as Su}from"node:fs";import{mkdir as Tu,readFile as Es,rm as gt,writeFile as Ru}from"node:fs/promises";import{tmpdir as Cu}from"node:os";import St from"node:path";import{createRequire as au}from"node:module";var ho=wa(lo(),1),Zd=1e3,eu=["000000","cd3131","0dbc79","e5e510","2472c8","bc3fbc","11a8cd","e5e5e5","666666","f14c4c","23d18b","f5f543","3b8eea","d670d6","29b8db","ffffff"];function fo(e){return new ho.default.Terminal({allowProposedApi:!0,cols:e.columns,rows:e.rows,scrollback:Zd,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function po(e,t){(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function Rs(e,t){return new Promise(r=>{e.write(t,r)})}function go(e,t=0){let r=e.buffer.active,s=[],o=r.getNullCell(),m=r.baseY+r.cursorY,y=Math.max(0,r.baseY-t);for(let n=0;n<e.rows;n+=1){let l=r.getLine(y+n);if(!l){s.push({segments:[]});continue}let f=[];for(let k=0;k<e.cols;k+=1){let a=l.getCell(k,o);!a||a.getWidth()===0||f.push({text:a.getChars()||" ",style:su(a,y+n===m&&k===r.cursorX)})}s.push({segments:tu(ru(f))})}return s}function tu(e){let t=[];for(let r of e){let s=t.at(-1);if(s&&ou(s.style,r.style)){s.text+=r.text;continue}let o={text:r.text};mo(r.style)||(o.style=r.style),t.push(o)}return t}function ru(e){let t=e.length;for(;t>0;){let r=e[t-1];if(!r||r.text!==" "||!mo(r.style))break;t-=1}return e.slice(0,t)}function su(e,t){let r={},s=uo(e,"fg"),o=uo(e,"bg");return s&&(r.fg=s),o&&(r.bg=o),e.isBold()&&(r.bold=!0),e.isDim()&&(r.dim=!0),e.isItalic()&&(r.italic=!0),e.isUnderline()&&(r.underline=!0),(e.isInverse()||t)&&(r.inverse=!0),r}function uo(e,t){if(t==="fg"?e.isFgDefault():e.isBgDefault())return;let s=t==="fg"?e.isFgRGB():e.isBgRGB(),o=t==="fg"?e.getFgColor():e.getBgColor();return s?o.toString(16).padStart(6,"0"):eu[o]??iu(o)}function iu(e){if(e>=16&&e<=231){let t=e-16,r=Math.floor(t/36),s=Math.floor(t%36/6),o=t%6;return[r,s,o].map(nu).map(m=>m.toString(16).padStart(2,"0")).join("")}if(e>=232&&e<=255){let t=8+(e-232)*10;return[t,t,t].map(r=>r.toString(16).padStart(2,"0")).join("")}return"e6e6e6"}function nu(e){return e===0?0:55+e*40}function ou(e,t){return Ts(e)===Ts(t)}function Ts(e){return e?[e.fg??"",e.bg??"",e.bold?"b":"",e.dim?"d":"",e.italic?"i":"",e.underline?"u":"",e.inverse?"v":""].join("|"):""}function mo(e){return Ts(e)===""}var cu=au(import.meta.url),lu=/^CTRL_([A-Z])$/,du="\x1B[6n",uu="\x1B[c",hu="\x1B[?u",fu={ENTER:"\r",KP_ENTER:"\r",TAB:" ",SHIFT_TAB:"\x1B[Z",BACK_TAB:"\x1B[Z",BACKSPACE:"\x7F",DELETE:"\x1B[3~",ESCAPE:"\x1B",UP:"\x1B[A",DOWN:"\x1B[B",RIGHT:"\x1B[C",LEFT:"\x1B[D",HOME:"\x1B[H",END:"\x1B[F",PAGE_UP:"\x1B[5~",PAGE_DOWN:"\x1B[6~",CTRL_C:"",CTRL_D:""},_r=class{sessions=new Map;shell;env;spawn;onUpdate;resolveSessionSpec;attachedTabId=null;constructor(t){this.shell=t.shell??process.env.SHELL??"/bin/zsh",this.env=t.env??process.env,this.spawn=t.spawn,this.onUpdate=t.onUpdate,this.resolveSessionSpec=t.resolveSessionSpec??(()=>({cwd:t.workspaceRoot,command:[]}))}ensureSession(t,r,s,o){let m=this.sessions.get(r);if(m)if(m.status!=="running")Cs(m),this.sessions.delete(r);else return this.attachedTabId=r,m.scrollbackLines=0,_o(m,s),this.getViewState(r);let y=this.createSession(t,r,s,o);return this.sessions.set(r,y),this.attachedTabId=r,this.getViewState(r)}write(t){let r=this.getAttachedSession();!r||r.status!=="running"||r.pty.write(t)}writeKey(t){let r=pu(t);r!==null&&this.write(r)}scrollViewport(t){let r=this.getAttachedSession();if(!r||t===0)return;let s=r.terminal.buffer.active.baseY;r.scrollbackLines=Math.max(0,Math.min(s,r.scrollbackLines-t))}resize(t){let r=this.getAttachedSession();r&&_o(r,t)}detach(){this.attachedTabId=null}disposeSession(t){let r=this.sessions.get(t);r&&(Cs(r),this.sessions.delete(t),this.attachedTabId===t&&(this.attachedTabId=null))}disposeAll(){for(let t of this.sessions.values())Cs(t);this.sessions.clear(),this.attachedTabId=null}getViewState(t){if(!t)return{status:"idle",rows:[],error:null,scrolledBack:!1};let r=this.sessions.get(t);return r?{status:r.status,rows:go(r.terminal,r.scrollbackLines),error:r.error,scrolledBack:r.scrollbackLines>0}:{status:"idle",rows:[],error:null,scrolledBack:!1}}createSession(t,r,s,o){let m=this.spawn??mu().spawn,y=fo(s),n=o??this.resolveSessionSpec(t,r),l=ct(this.env),{executable:f,args:k}=_u(this.shell,n.command,{cwd:n.cwd,env:l}),a=m(f,k,{name:"xterm-256color",cols:s.columns,rows:s.rows,cwd:n.cwd,env:wu(l)}),w={taskId:t,tabId:r,pty:a,terminal:y,status:"running",error:null,disposables:[],scrollbackLines:0};return w.disposables.push(a.onData(c=>{ku(a,c),Rs(w.terminal,c).then(()=>{this.onUpdate?.(w.tabId)})})),w.disposables.push(a.onExit(c=>{w.status="exited",Rs(w.terminal,`\r
|
|
90
|
-
[process exited ${c.exitCode}]`).then(()=>{this.onUpdate?.(w.tabId)})})),w}getAttachedSession(){return this.attachedTabId?this.sessions.get(this.attachedTabId)??null:null}};function
|
|
88
|
+
`);return y.length>Ml?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(`
|
|
89
|
+
`):["No diff for this file."],byteLength:y.length}}function Tn(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 Wl(e){return e.length===1&&e[0]===""?0:e.at(-1)===""?e.length-1:e.length}function Rn(e){return[...new Set(e.split(`
|
|
90
|
+
`).map(t=>t.trim()).filter(t=>t.length>0))].sort((t,r)=>t.localeCompare(r))}function Nl(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 jl(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 Hl}from"node:fs/promises";async function Cn(e,t){let r=await ie(e,t),s=await Ul(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 Ul(e){try{return await Hl(e),!0}catch{return!1}}Ae();Ie();import Ut from"node:path";function Pn(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 In="\u{F024B} ",xn="\u{F0DCF} ",En="\u25CB",An="\uEA64",Dn="\uEAFE",Ln="\uEBDA",fs="\u25CB",ps="\u25CF",gs="\u2713",ms="\u2715";function Mn(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 ql=["tasks","center","inspector","actions"],Wn=["agent","terminal"],Nn=[],ne="inspection",Um=[...Wn,...Nn],jn=["commit","push","create-pr","refresh-checks","merge","close-task"],Kl=["refresh-checks","close-task"],Hn=["task","checks","pr","setup-run","actions","next-action"],Un=["diff","files","review"];function qn(e,t={}){let r=e?.activeTab==="files"?"file":e?.activeTab==="diff"?"diff":null,s=cd(e?.openInspectionKind)??r,o=mt(t);return{inputMode:dd(e?.inputMode),focusedRegion:od(e?.focusedRegion),selectedRepoId:ze(e?.selectedRepoId),selectedWorkspaceId:ze(e?.selectedWorkspaceId),selectedTaskId:ze(e?.selectedTaskId),selectedPtyTabId:ze(e?.selectedPtyTabId),selectedLeftItemId:kd(ze(e?.selectedTaskId)),activeTab:r?ne:ze(e?.activeTab)??"agent",preferredPtyTabKind:ld(e?.preferredPtyTabKind),inspectorSection:jt(e?.inspectorSection,Hn,"task"),inspectionMode:ad(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,jn,"commit"),selectedProjectTargetId:null,selectedRunner:ud(e?.selectedRunner,o,it(t)),centerTabRunner:null,actionMessage:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:zl(),centerZoomed:!1}}function zl(){return{status:"idle",rows:[],error:null,scrolledBack:!1}}function Kn(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 pr(e,t,r={}){let s=_d(e,t),o=Zn(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,...fd(f,e.activeTab,e.selectedPtyTabId),selectedFilePath:sd(e,t,f?.id??null),...pd(e,t,f?.id??null),selectedDiffPath:rd(e,t,f?.id??null),inspectorSection:jt(e.inspectorSection,Hn,"task")}}function zn(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return Vl(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 On(e,1);if(t==="SHIFT_TAB"||t==="[")return On(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):Bn(e,-1,r);if(t==="DOWN"||t==="j")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,1,r):Bn(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=hd(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"&&fr(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"&&bd(e.selectedLeftItemId)&&e.selectedWorkspaceId)return G({state:{...e,actionMessage:null},changed:!0,removeWorkspace:!0});if(t==="x"&&e.focusedRegion==="center"&&Fn(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 $n(e,-1)}if(t==="RIGHT"||t==="l"){if(e.focusedRegion==="center")return _s(e,1,r.centerTabIds);if(e.focusedRegion==="inspector")return $n(e,1)}if(tt(t)){if(e.focusedRegion==="tasks"&&(ws(e.selectedLeftItemId)||ks(e.selectedLeftItemId))){let s=eo(e.selectedLeftItemId),o=to(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"&&fr(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"&&Fn(e.activeTab,r.ptyTabIds??[])&&e.selectedTaskId)return G({state:{...e,inputMode:"terminal",selectedPtyTabId:e.activeTab,preferredPtyTabKind:gr(e.activeTab)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&e.activeTab===ne)return G({state:{...e,actionMessage:null},changed:!0,refreshInspection:!0});if(e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="files"){let s=e.selectedFileTreePath??e.selectedFilePath;if(s&&(r.fileTreeDirectoryIds??[]).includes(s))return G({state:Ql({...e,selectedFileTreePath:s}),changed:!0});let o=s&&(r.fileTreeFileIds??[]).includes(s)?s:e.selectedFilePath;return G({state:{...e,selectedFileTreePath:o,selectedFilePath:o,activeTab:ne,openInspectionKind:"file",fileScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0})}return e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="diff"?G({state:{...e,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.focusedRegion==="inspector"&&e.inspectionMode==="review"?e.selectedActionId==="refresh-checks"?G({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?G({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):G({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.focusedRegion!=="actions"?G({state:e}):e.selectedActionId==="create-pr"?G({state:{...e,actionMessage:null},changed:!0,syncPullRequest:!0}):e.selectedActionId==="refresh-checks"?G({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="merge"?G({state:{...e,actionMessage:null},changed:!0,mergeTask:!0}):e.selectedActionId==="close-task"?G({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):G({state:{...e,actionMessage:`Action queued: ${e.selectedActionId} (inspection surfaces land in phase 4.1).`},changed:!0})}return G({state:e})}function Ht(e,t){return{...e,terminal:t}}function Vn(e,t){return{...e,inputMode:"control",terminal:{status:"failed",rows:[],error:t}}}function Vl(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===`
|
|
91
|
+
`}function Gn(e){return e.length===1&&e>=" "&&e!=="\x7F"}function Xn(e){return Yn(e)||gr(e)!==null}function Gl(e){return Nn.includes(e)}function Yn(e){return Wn.includes(e)}function Jn(e,t){return[...e?.ptyTabs.map(r=>r.id)??[],...t?.openInspectionKind?[ne]:[]]}var Xl=["tasks","center","inspector"];function On(e,t){return ur(e,"focusedRegion",Xl,t)}function _s(e,t,r){let s=ur(e,"activeTab",r&&r.length>0?r:md(e),t);return!s.changed||Gl(s.state.activeTab)?s:{...s,state:{...s.state,selectedPtyTabId:s.state.activeTab,preferredPtyTabKind:gr(s.state.activeTab)??s.state.preferredPtyTabKind}}}function Bn(e,t,r){if(e.focusedRegion==="tasks")return Yl(e,t,r.leftItemIds);if(e.focusedRegion==="center")return _s(e,t,r.centerTabIds);if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return Qn(e,t,r);if(e.inspectionMode==="diff"){let s=hr(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?hr(e,"selectedProjectTargetId",r.projectTargetIds,t):ur(e,"selectedActionId",Kl,t)}return ur(e,"selectedActionId",jn,t)}function Yl(e,t,r){let s=hr(e,"selectedLeftItemId",r,t);if(!s.changed)return s;let o=Zn(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=eo(s.state.selectedLeftItemId);if(m)return{...s,state:{...s.state,selectedRepoId:m}};let y=to(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 Qn(e,t,r);if(e.inspectionMode==="diff"){let s=hr(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 Zl(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return ed(e,t,r)}return G({state:e})}function Jl(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 $n(e,t){return Jl(e,nd(e.inspectionMode,Un,t))}function Qn(e,t,r){let s=r.fileTreeRowIds&&r.fileTreeRowIds.length>0?r.fileTreeRowIds:r.filePathIds??[];if(s.length===0)return G({state:e});let o=e.selectedFileTreePath??e.selectedFilePath??s[0]??null,m=s.indexOf(o??""),y=Ve(m===-1?0:m+t,0,s.length-1),n=s[y]??null;if(n===e.selectedFileTreePath)return G({state:e});let l=n!==null&&(r.fileTreeFileIds??r.filePathIds??[]).includes(n);return G({state:{...e,selectedFileTreePath:n,selectedFilePath:l?n:e.selectedFilePath,activeTab:l?ne:e.activeTab,openInspectionKind:l?"file":e.openInspectionKind,fileScrollOffset:l?0:e.fileScrollOffset,actionMessage:null},changed:!0,refreshInspection:l})}function Ql(e){if(!e.selectedFileTreePath)return e;let t=new Set(e.collapsedFileTreePaths);return t.has(e.selectedFileTreePath)?t.delete(e.selectedFileTreePath):t.add(e.selectedFileTreePath),{...e,collapsedFileTreePaths:[...t].sort((r,s)=>r.localeCompare(s)),actionMessage:null}}function Zl(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 ed(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return td(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 td(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=id(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 rd(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function sd(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedFilePath&&(t.inspection.filePaths??[]).includes(e.selectedFilePath)?e.selectedFilePath:t.inspection.selectedFilePath}function id(e,t){return e.find(r=>t>=r.start&&t<r.end)?.path??e.at(-1)?.path??null}function ur(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 hr(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 nd(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 od(e){return e==="tabs"?"center":jt(e,ql,"tasks")}function ad(e,t){return e==="checks"||e==="actions"||e==="review"?"review":jt(e,Un,t)}function cd(e){return e==="file"||e==="diff"?e:null}function ld(e){return e==="terminal"?"terminal":"agent"}function dd(e){return e==="terminal"?"terminal":"control"}function ud(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 gr(e){let t=ce.join("|");return new RegExp(`:(?:agent|${t})(?:-\\d+)?$`).test(e)?"agent":/:terminal(?:-\d+)?$/.test(e)?"terminal":null}function hd(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":gr(e.activeTab)??e.preferredPtyTabKind}function fd(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(Yn(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 pd(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?gd(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:s,collapsedFileTreePaths:o}}function gd(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 md(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function Fn(e,t){return t.includes(e)}function _d(e,t){let r=wd(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 wd(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 Zn(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 kd(e){return e?`task:${e}`:null}function fr(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 bd(e){return typeof e=="string"&&e.startsWith("workspace:")}function eo(e){return ws(e)?e.slice(9):null}function to(e){return ks(e)?e.slice(19):null}function Ve(e,t,r){return Math.min(r,Math.max(t,e))}var _r="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 io(e,t){let r=Sd(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=eu(t.tasks),f=Cd(e,y),k=Rd(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`:fr(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:yd(e,t),runners:(t.enabledRunnerIds??["codex","cursor","claude"]).map(_=>tu(_,l[_])),centerHeader:{tabLabel:e.workspaceBrowser?"BROWSER":a.label,taskId:e.workspaceBrowser?"new workspace":y?.id??"no task",repo:c,agent:g},centerTranscript:Td(f,e,s,y,e.workspaceBrowser,w,r),tabs:k,rightContext:Zd(s,y),rightInspection:Wd(e,y,w)}}function yd(e,t){let r=[{text:"WORKSPACES",muted:!0,focused:e.focusedRegion==="tasks"}];if(!t.workspaces)return vd(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=oo(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 vd(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"},_=oo(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 Sd(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 Td(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"?xd(s,m,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?Ed(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 Rd(e,t,r){let s=t?.ptyTabs.map(m=>({id:m.id,label:Pd(m)}))??[];if(!t)return[{id:_r,label:"EMPTY",active:r===_r,focused:e.focusedRegion==="center"&&r===_r}];let o=e.openInspectionKind||r===ne?[{id:ne,label:Id(e)}]:[];return[...s,...o].map(m=>({...m,active:m.id===r,focused:e.focusedRegion==="center"&&m.id===r}))}function Cd(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:_r}function Pd(e){return e.title.toUpperCase()}function Id(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 xd(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=no(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:""},...Ad(s.lines,r,o)]}function Ed(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=no(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:""},...Dd(s.lines,r,o)]}function Oe(e){return e.map(t=>({text:t}))}function Ad(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 Dd(e,t,r){let s=Ld(e),o=Math.max(0,Math.min(t,Math.max(0,s.length-1)));return s.slice(o).map(m=>Md(m,r))}function Ld(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 Md(e,t){let r=ro(e.oldNumber),s=ro(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?Bd(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 ro(e){return e===null?" ":String(e).padStart(4," ")}function no(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"?Od(e):t==="markdown"?$d(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 Od(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 Bd(e,t,r){return e.map(s=>({text:s.text,style:{...s.style??{fg:r},bg:t}}))}function $d(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:Fd(m)}),s=y+m.length}return s<e.length&&r.push({text:e.slice(s)}),r.length>0?r:[{text:e}]}function Fd(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 Wd(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"?ao(t.repoTargets??[]):o?.pullRequest??t?.pullRequest??null,y=[Nd(e,m),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...y,...Hd(e,t)]}:e.inspectionMode==="files"?{title:"",rows:[...y,...Gd(e,r)]}:{title:"",rows:[...y,...Yd(e,r)]}}function Nd(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 so(e){return[{text:" "},Ss(e),{text:" "},Ts(e.requiredChecks??null)]}function oo(e){if(e.type==="project"&&e.repoTargets?.length){let t=ao(e.repoTargets);return t?so(t):null}return e.pullRequest.number?so(e.pullRequest):null}function ao(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:jd(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 jd(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:En,style:{fg:"565f89"}}:e.status==="merged"?{text:Dn,style:{fg:"9d7cd8"}}:e.status==="closed"?{text:Ln,style:{fg:"f7768e"}}:{text:An,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 Hd(e,t){return t?t.type==="project"&&t.repoTargets?.length?Ud(e,t):co("pr",t.title,t.branch,t.pullRequest):[{id:"review-empty",text:"No task selected.",muted:!0}]}var mr=32;function Ud(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=mr-a.length-1,c=f.length>w?f.slice(0,w-1)+"\u2026":f,g=mr-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=mr-w.length-1,g=f.length>c?f.slice(0,c-1)+"\u2026":f,_=mr-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(...co("target",null,m.branch,m.pullRequest))),r}function co(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 ${qd(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(Kd)):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 qd(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 Kd(e){let{icon:t,color:r}=zd(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," ")} ${Vd(e.status)}`,color:r,muted:!1}}function zd(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 Vd(e){return e==="success"?"passing":e==="failed"?"failing":e}function Gd(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=Xd(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)?In:xn:Pn(m.label),f=m.kind==="file"?Mn(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 Xd(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 Yd(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(Jd(t))return Qd(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=>lo(m,e,t))))}return r}function Jd(e){return e.filePaths.some(t=>t.startsWith("repo_"))||e.diffRows.some(t=>t.path.startsWith("repo_"))}function Qd(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=>lo(f,e,t,o.length+1))))}}return r}function lo(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 Zd(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 eu(e){return e.reduce((t,r)=>(t[r.runner]+=1,t),{codex:0,cursor:0,claude:0})}function tu(e,t){return{name:Se(e).toLowerCase(),health:t>0?1:0,count:String(t)}}var wr={width:120,height:36},Be={leftWidth:42,rightWidth:36,dividerWidth:1,topRailHeight:1};function vt(e,t){return{width:Math.max(e??wr.width,wr.width),height:Math.max(t??wr.height,wr.height)}}import{spawn as Su}from"node:child_process";import{createHash as Tu}from"node:crypto";import{createServer as Ru,createConnection as vo}from"node:net";import{openSync as Cu}from"node:fs";import{mkdir as Pu,readFile as As,rm as gt,writeFile as Iu}from"node:fs/promises";import{tmpdir as xu}from"node:os";import St from"node:path";import{createRequire as du}from"node:module";var po=ba(ho(),1),ru=1e3,su=["000000","cd3131","0dbc79","e5e510","2472c8","bc3fbc","11a8cd","e5e5e5","666666","f14c4c","23d18b","f5f543","3b8eea","d670d6","29b8db","ffffff"];function go(e){return new po.default.Terminal({allowProposedApi:!0,cols:e.columns,rows:e.rows,scrollback:ru,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function mo(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 _o(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:ou(a,y+n===m&&k===r.cursorX)})}s.push({segments:iu(nu(f))})}return s}function iu(e){let t=[];for(let r of e){let s=t.at(-1);if(s&&lu(s.style,r.style)){s.text+=r.text;continue}let o={text:r.text};wo(r.style)||(o.style=r.style),t.push(o)}return t}function nu(e){let t=e.length;for(;t>0;){let r=e[t-1];if(!r||r.text!==" "||!wo(r.style))break;t-=1}return e.slice(0,t)}function ou(e,t){let r={},s=fo(e,"fg"),o=fo(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 fo(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"):su[o]??au(o)}function au(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(cu).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 cu(e){return e===0?0:55+e*40}function lu(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 wo(e){return Rs(e)===""}var uu=du(import.meta.url),hu=/^CTRL_([A-Z])$/,fu="\x1B[6n",pu="\x1B[c",gu="\x1B[?u",mu={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:""},kr=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,ko(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=_u(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&&ko(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:_o(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??ku().spawn,y=go(s),n=o??this.resolveSessionSpec(t,r),l=ct({...this.env,...n.env??{}}),{executable:f,args:k}=bu(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:yu(l)}),w={taskId:t,tabId:r,pty:a,terminal:y,status:"running",error:null,disposables:[],scrollbackLines:0};return w.disposables.push(a.onData(c=>{vu(a,c),Cs(w.terminal,c).then(()=>{this.onUpdate?.(w.tabId)})})),w.disposables.push(a.onExit(c=>{w.status="exited",Cs(w.terminal,`\r
|
|
92
|
+
[process exited ${c.exitCode}]`).then(()=>{this.onUpdate?.(w.tabId)})})),w}getAttachedSession(){return this.attachedTabId?this.sessions.get(this.attachedTabId)??null:null}};function _u(e){if(e.length===1)return e;let t=mu[e];if(t!==void 0)return t;let r=hu.exec(e);return r?.[1]?String.fromCharCode(r[1].charCodeAt(0)-64):null}function ko(e,t){wu(e.pty,t),mo(e.terminal,t)}function Ps(e){for(let t of e.disposables)t.dispose();e.terminal.dispose(),e.pty.kill()}function wu(e,t){t.columns>0&&t.rows>0&&(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function ku(){return uu("node-pty")}function bu(e,t,r){if(t.length===0)return{executable:e,args:[]};let o=`${[lt(t[0],r),...t.slice(1)].map(bo).join(" ")}; exec ${bo(e)} -l`;return{executable:e,args:["-lc",o]}}function bo(e){return`'${e.replaceAll("'","'\\''")}'`}function yu(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 vu(e,t){for(let r=0;r<Is(t,fu);r+=1)e.write("\x1B[1;1R");for(let r=0;r<Is(t,pu);r+=1)e.write("\x1B[?1;2c");for(let r=0;r<Is(t,gu);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 So(e){let t=Ls(e.paths);await Eu(t,e.paths,e.spawnDaemon);let r=await xo(t.socketPath),s=new xs(r,e);return await s.ready(),s}async function To(e,t={}){let r=Ls(e);await Pu(e.runtimeDir,{recursive:!0}),await gt(r.socketPath,{force:!0});let s=new Es(e,t),o=Ru(m=>s.handleConnection(m));await Bu(o,r.socketPath),await Iu(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 Ro(e){let t=Ls(e);return await yr(t.socketPath)?(await Po(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
93
|
`);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
94
|
`);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()}},
|
|
95
|
+
`)}}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 kr({...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
96
|
`);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
|
|
97
|
+
`)}}),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{br(t,{id:-1,ok:!1,error:"Malformed daemon request."});return}try{let o=this.handleRequest(s);br(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);br(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 $u(t)}}broadcastUpdate(t){let r=this.runtime.getViewState(t);for(let s of this.clients)br(s,{type:"update",tabId:t,view:r})}};function Ls(e){let t=Tu("sha256").update(e.workspaceRoot).digest("hex").slice(0,16);return{socketPath:St.join(xu(),`craig-${t}.sock`),pidPath:St.join(e.runtimeDir,"pty-daemon.pid")}}async function Eu(e,t,r){if(await Au(e.socketPath,1e3))return;await yr(e.socketPath)&&(await Po(e.socketPath),await yo(e.socketPath,1e3)),await yr(e.socketPath)&&(await Mu(e),await yo(e.socketPath,1e3)),await Lu(e);let s=t.workspaceRoot;if(r)r(s);else{let{command:y,args:n}=Du(s),l=Cu(St.join(t.runtimeDir,"pty-daemon.log"),"a");Su(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 Co(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?`
|
|
98
|
+
${m.slice(-2e3)}`:""}`)}async function Co(e){let t=await Ou(e).catch(()=>null);return t?.ok===!0&&t.protocolVersion===Ds}async function Au(e,t){let r=Date.now();for(;Date.now()-r<t;){if(await Co(e))return!0;await Ms(50)}return!1}function Du(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 Lu(e){let t=await As(e.pidPath,"utf8").catch(()=>null);if(t){let r=Number(t.trim());if(Number.isInteger(r)&&r>0&&Eo(r))return}await gt(e.socketPath,{force:!0}),await gt(e.pidPath,{force:!0})}async function yr(e){let t=await xo(e).catch(()=>null);return t?(t.end(),!0):!1}async function Po(e){await Io(e,{id:1,type:"shutdown"}).catch(()=>null)}async function Mu(e){let t=await As(e.pidPath,"utf8").catch(()=>null),r=Number(t?.trim());if(!Number.isInteger(r)||r<=0||!Eo(r)){await gt(e.socketPath,{force:!0});return}try{process.kill(r,"SIGTERM")}catch{await gt(e.socketPath,{force:!0})}}async function Ou(e){return Io(e,{id:1,type:"ping"})}function Io(e,t){return new Promise((r,s)=>{let o=vo(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
99
|
`)),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 ph(e){return e.length===1&&e>=" "&&e!=="\x7F"}var wh=gh(import.meta.url),kh=wh("terminal-kit"),bh=kh.terminal;async function Qo(e={}){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("Craig terminal shell requires a TTY.");let t=e.workspaceRoot??process.cwd(),r=Ke(t);await yt(t);let s=await ye(r),o=mt(s),m=e.uiStateFile?await De({uiStateFile:e.uiStateFile}):null,y=Promise.resolve(),n=Promise.resolve(),l=await qt(t,void 0,o),f=hr(Hn(m,s),l);l=await qt(t,f,o);let k=()=>{},a={workspaceRoot:t,onUpdate:()=>k(),resolveSessionSpec:(g,_)=>Th(l,_,t)},w=e.ptyRuntime??await yo({...a,paths:r}),c=g=>{if(!e.uiStateFile)return;m=Un(m,g);let _=m;y=y.then(()=>Pe({uiStateFile:e.uiStateFile},_),()=>Pe({uiStateFile:e.uiStateFile},_)),y.catch(()=>{})};return new Promise(g=>{let _=e.terminal??bh,i={mode:"overlay",variant:"boot",menuIndex:0,optionsMessage:null,shell:hr(f,l)},p=!1,h=!1,d=null,u=0,b=0,S=null,P=null,E=null,H=null,$=!1,D=0,x=!0,A=null,L=()=>{},z=w;k=()=>{i.mode==="main"&&(i={mode:"main",shell:X(i.shell)},E||(E=setTimeout(()=>{E=null,i.mode==="main"&&L()},50)))};function X(B){return jt(B,z.getViewState(B.selectedPtyTabId))}function N(B){return X(yh(B,l))}function q(B){return l.tasks.find(O=>O.id===B.selectedTaskId)??null}async function v(){await z.hydrateSessions?.(l.tasks.flatMap(B=>B.ptyTabs.map(O=>O.id)))}function C(){v().catch(()=>{}).then(()=>{i.mode==="main"&&(i={mode:"main",shell:X(i.shell)},L())})}function T(B){let O=n.then(B,B);return n=O.then(()=>{},()=>{}),O}function R(B){let O=q(B),M=l.inspection,W=M&&M.taskId===O?.id?M:null,K=vh(W?.fileRows??[],B.collapsedFileTreePaths);return{leftItemIds:Sh(l),centerTabIds:Xn(O,B),ptyTabIds:O?.ptyTabs.map(J=>J.id)??[],filePathIds:W?.filePaths??[],fileTreeRowIds:K.map(J=>J.path),fileTreeFileIds:K.filter(J=>J.kind==="file").map(J=>J.path),fileTreeDirectoryIds:K.filter(J=>J.kind==="directory").map(J=>J.path),diffPathIds:W?.diffPaths??[],diffPathRanges:[],fileLineCount:W?.selectedFile.lines.length??0,diffLineCount:W?.selectedDiff.lines.length??0,pageRows:Math.max(5,vt(_.width,_.height).height-Be.topRailHeight-9),enabledRunnerIds:o,projectTargetIds:O?.repoTargets?.map(J=>J.repoId)??[]}}async function F(B){await Qs(r,B),s=B,o=mt(s),l={...l,enabledRunnerIds:o},i.mode==="main"?i={mode:"main",shell:N({...i.shell,selectedRunner:o.includes(i.shell.selectedRunner)?i.shell.selectedRunner:it(s)})}:i={...i,shell:N({...i.shell,selectedRunner:o.includes(i.shell.selectedRunner)?i.shell.selectedRunner:it(s)})}}async function j(B){let O=B.selectedTaskId;O&&await T(async()=>{let M=await Ce(r,O);!M.ptyTabs.some(W=>W.id===B.activeTab)||M.selectedPtyTabId===B.activeTab||await re(r,{...M,selectedPtyTabId:B.activeTab})})}async function U(){let B=(i.mode==="main",i.shell);l=await qt(t,B,o),i.mode==="main"?i={mode:"main",shell:N(i.shell)}:i={...i,shell:N(i.shell)}}async function V(B){let O=++D,M=Zo(l.tasks,B),W=l.inspection,K;if(M&&W?.taskId===M.id){let J={selectedFilePath:B.selectedFilePath,selectedDiffPath:B.selectedDiffPath},ue=await pn(M,W,J);if(O!==D)return;K={...l,inspection:ue}}else if(K=await qt(t,B,o),O!==D)return;l=K,i.mode==="main"&&(i={mode:"main",shell:N(i.shell)},c(i.shell),L())}async function te(B){let O=await Mh(B);i.mode==="main"&&(i={mode:"main",shell:N({...i.shell,workspaceBrowser:O,activeTab:i.shell.selectedPtyTabId??i.shell.activeTab,actionMessage:null})},L())}async function I(B){try{let O=N(B),M=q(O),W=O.selectedPtyTabId;if(M&&O.focusedRegion==="tasks"){let ue=M.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ue?W=ue.id:(M=await Ks(M),await U(),W=M.selectedPtyTabId)}M&&!W&&(M=await Ks(M),await U(),W=M.selectedPtyTabId);let K=N({...O,activeTab:W??O.activeTab,selectedPtyTabId:W});if(!K.selectedTaskId||!W){i={mode:"main",shell:K},L();return}i={mode:"main",shell:jt({...K,inputMode:"terminal"},z.getViewState(W))},c(i.shell);let J=await z.ensureSession(K.selectedTaskId,W,Hs(vt(_.width,_.height)));h=Us(W),d=null,i={mode:"main",shell:jt({...K,inputMode:"terminal"},J)},c(i.shell)}catch(O){let M=O instanceof Error?O.message:"Failed to start PTY.";B.selectedTaskId&&B.selectedPtyTabId&&Us(B.selectedPtyTabId)&&(await Z(B.selectedTaskId,M).catch(()=>{}),await U().catch(()=>{})),i={mode:"main",shell:Kn(N(B),M)},c(i.shell)}L()}async function Z(B,O){await T(async()=>{let M=await Ce(r,B);await re(r,{...M,status:M.status==="running"?"draft":M.status,runnerSession:{...M.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:O})})}async function Y(B,O,M){let W=N(B);if(!W.selectedTaskId)throw new Error("Select a task before creating a tab.");let K=await T(async()=>{let J=await Ce(r,W.selectedTaskId),ue=O??Ch(J,W.activeTab,W.preferredPtyTabKind),Ee=Yo(J,ue,M??void 0,s),Tt={...J,ptyTabs:[...J.ptyTabs,Ee],selectedPtyTabId:Ee.id};return await re(r,Tt),Tt});return await U(),N({...W,activeTab:K.selectedPtyTabId??W.activeTab,selectedPtyTabId:K.selectedPtyTabId,preferredPtyTabKind:K.ptyTabs.at(-1)?.kind??W.preferredPtyTabKind,focusedRegion:"center",actionMessage:`Created tab: ${K.ptyTabs.at(-1)?.title??"tab"}`})}async function ee(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before closing a tab.");let{closedTab:M,nextSelectedTab:W}=await T(async()=>{let K=await Ce(r,O.selectedTaskId),J=K.ptyTabs.findIndex(Ar=>Ar.id===O.activeTab);if(J===-1)throw new Error("Only PTY tabs can be closed.");let ue=K.ptyTabs[J],Ee=K.ptyTabs.filter(Ar=>Ar.id!==ue.id),Tt=Ee[Math.min(J,Ee.length-1)]??Ee[J-1]??null;return await re(r,{...K,ptyTabs:Ee,selectedPtyTabId:Tt?.id??null}),{closedTab:ue,nextSelectedTab:Tt}});return z.disposeSession(M.id),await U(),N({...O,activeTab:W?.id??(O.openInspectionKind?"inspection":O.activeTab),selectedPtyTabId:W?.id??null,focusedRegion:"center",actionMessage:`Closed tab: ${M.title}`})}async function we(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before creating or syncing a PR.");let M=await Lt(r,O.selectedTaskId,{watch:!1});await U();let W=M.disposition==="created"?"Created PR":M.disposition==="discovered"?"Discovered PR":"Synced PR";return N({...O,focusedRegion:"inspector",inspectionMode:"review",actionMessage:`${W}: #${M.prNumber} ${M.url}`})}async function ke(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before refreshing PR checks.");let M=q(O),W;if(M?.type==="project"&&M.repoTargets?.length){let K=await Zr(r,O.selectedTaskId);await U();let J=K.synced+K.discovered+K.notFound;W=K.discovered>0?`Discovered ${K.discovered} PR${K.discovered!==1?"s":""} \xB7 ${K.synced} refreshed`:`Refreshed ${K.synced}/${J} targets`}else{let{disposition:K,task:J}=await es(r,O.selectedTaskId);await U(),W=K==="not_found"?`No PR found for ${J.branch}`:K==="discovered"?`Discovered PR: #${J.pullRequest.number} ${J.pullRequest.url??""}`:`Refreshed checks: ${J.pullRequest.requiredChecks.length} reported`}return N({...O,focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"refresh-checks",actionMessage:W})}async function Xe(){if($||i.mode!=="main")return;let B=i.shell.selectedTaskId,O=l.tasks;$=!0;try{let M=i.shell.actionMessage;for(let W of O)try{let K=W.type==="project"?!!W.repoTargets?.some(J=>J.pullRequest.number):!!W.pullRequest.number;if(W.type==="project"&&W.repoTargets?.length){let J=await Zr(r,W.id);W.id===B&&!K&&J.discovered>0&&(M=`Discovered ${J.discovered} PR${J.discovered!==1?"s":""}`)}else{let{disposition:J,task:ue}=await es(r,W.id);W.id===B&&J==="discovered"&&!K&&(M=`Discovered PR: #${ue.pullRequest.number} ${ue.pullRequest.url??""}`)}}catch{}if(i.mode!=="main")return;l=await qt(t,i.shell,o),i={mode:"main",shell:N({...i.shell,actionMessage:M})},L()}catch{}finally{$=!1}}async function xe(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before merging a PR.");let M=await Mt(r,O.selectedTaskId,{preserveWorktree:!0});return await U(),N({...O,focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"merge",actionMessage:`Merged PR #${M.prNumber}; worktree preserved`})}async function Ue(B){let O=N(B);if(!O.selectedTaskId)throw new Error("Select a task before closing it.");let{taskBeforeClose:M,task:W}=await T(async()=>{let K=await Ce(r,O.selectedTaskId),J=await Tn(r,O.selectedTaskId);return{taskBeforeClose:K,task:J}});for(let K of M.ptyTabs)z.disposeSession(K.id);return await U(),N({...O,selectedActionId:"close-task",actionMessage:W.cleanup.preservedWorktree?`Archived task ${W.id}; worktree preserved`:`Archived task ${W.id}`})}async function st(B){let O=N(B);if(!O.selectedWorkspaceId)throw new Error("Select a workspace before removing it.");if((await Ne(r,{workspaceId:O.selectedWorkspaceId,includeClosed:!0})).tasks.length>0)throw new Error(`Cannot remove workspace ${O.selectedWorkspaceId} while task records still reference it.`);await Bt(r,O.selectedWorkspaceId);let W=await $t(r,O.selectedWorkspaceId);return await U(),N({...O,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null,selectedPtyTabId:null,selectedLeftItemId:null,actionMessage:`Removed workspace ${W.workspaceId}`})}async function Ks(B){let O=B.ptyTabs.find(K=>K.kind==="agent")??null;if(O){let K={...B,selectedPtyTabId:O.id};return await T(async()=>{let J=await Ce(r,B.id),ue=J.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ue&&await re(r,{...J,selectedPtyTabId:ue.id})}),K}let M=Yo(B,"agent",void 0,s),W={...B,ptyTabs:[...B.ptyTabs,M],selectedPtyTabId:M.id};return await T(async()=>{let K=await Ce(r,B.id),J=K.ptyTabs.find(ue=>ue.kind==="agent")??null;if(J){await re(r,{...K,selectedPtyTabId:J.id});return}await re(r,{...K,ptyTabs:[...K.ptyTabs,M],selectedPtyTabId:M.id})}),W}L=()=>{ta();let B=vt(_.width,_.height),O=i.mode==="main"?Oo(B,ro(N(i.shell),l),{centerOnly:i.shell.centerZoomed}):i.variant==="boot"?Do(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="pause"?Lo(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="options"?Bs(B,{menuIndex:i.menuIndex,optionsMenuItems:Ws}):i.variant==="runners"?Bs(B,{menuIndex:Kt(i).menuIndex,optionsMenuItems:Ns(s,Kt(i)),optionsMessage:Vo(Kt(i)),optionsSubtitle:"Runners"}):Mo(B);x&&(_.moveTo(1,1),_.eraseDisplayBelow(),x=!1),_.noFormat(Ih(O)),_.hideCursor(!0)};function ta(){let B=i.mode==="main"&&i.shell.inputMode==="terminal"?"terminal":"control";B!==A&&(A=B,_.grabInput(B==="terminal"?{mouse:"button"}:!0))}let ra=()=>{process.stdout.off("resize",Xs),_.removeListener("key",zs),_.removeListener("unknown",Vs),_.removeListener("mouse",Gs),S&&(clearTimeout(S),S=null),P&&(clearTimeout(P),P=null),E&&(clearTimeout(E),E=null),H&&(clearInterval(H),H=null),z.disposeAll(),_.grabInput(!1),_.hideCursor(!1),_.fullscreen(!1)},xr=B=>{ra(),g(B)},sa=async()=>{if(i.mode!=="main"||p)return;let B=i.shell,O=B.taskPromptInput?.trim()??"";if(!B.selectedRepoId&&!B.selectedWorkspaceId){i={mode:"main",shell:N({...B,taskPromptError:"Select a workspace first."})},L();return}if(O.length===0){i={mode:"main",shell:N({...B,taskPromptError:"Task prompt cannot be empty."})},L();return}p=!0,i={mode:"main",shell:N({...B,actionMessage:`Creating ${B.selectedRunner} task in ${B.selectedWorkspaceId??B.selectedRepoId}...`})},L();let M=null;try{M=await Ph(r,B.selectedRepoId,B.selectedWorkspaceId,O,B.selectedRunner),await U();let W=N({...i.shell,selectedRepoId:M.repoId,selectedWorkspaceId:M.workspaceId,selectedTaskId:M.id,selectedPtyTabId:M.selectedPtyTabId,selectedLeftItemId:`task:${M.id}`,activeTab:M.selectedPtyTabId??"agent",inputMode:"terminal",taskPromptInput:null,taskPromptError:null,actionMessage:null}),K=await z.ensureSession(M.id,W.selectedPtyTabId??ea(M,"agent"),Hs(vt(_.width,_.height)));h=Us(W.selectedPtyTabId),i={mode:"main",shell:jt(W,K)},c(i.shell)}catch(W){W instanceof Pr&&(M=W.task);let K=W instanceof Error?W.message:"Failed to create task.";M&&(await re(r,{...M,status:"draft",runnerSession:{...M.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:K}).catch(()=>{}),await U().catch(()=>{})),i={mode:"main",shell:N({...i.shell,inputMode:"control",selectedTaskId:M?.id??i.shell.selectedTaskId,selectedPtyTabId:M?.selectedPtyTabId??i.shell.selectedPtyTabId,selectedLeftItemId:M?`task:${M.id}`:i.shell.selectedLeftItemId,activeTab:M?.selectedPtyTabId??i.shell.activeTab,taskPromptInput:M?null:"",taskPromptError:K,actionMessage:null})}}finally{p=!1,L()}},ia=B=>{if(i.mode!=="main")return;let O=i.shell;if(O.taskPromptInput!==null){if(B==="ESCAPE"){i={mode:"main",shell:N({...O,taskPromptInput:null,taskPromptError:null,actionMessage:null})},L();return}if(tt(B)){sa();return}if(B==="BACKSPACE"){i={mode:"main",shell:N({...O,taskPromptInput:O.taskPromptInput.slice(0,-1),taskPromptError:null})},L();return}if(B==="CTRL_R"){i={mode:"main",shell:N({...O,selectedRunner:ks(O.selectedRunner,o),taskPromptError:null})},L();return}zn(B)&&(i={mode:"main",shell:N({...O,taskPromptInput:`${O.taskPromptInput}${B}`,taskPromptError:null})},L())}},na=B=>{if(i.mode!=="main")return;let O=i.shell.workspaceBrowser;if(O){if(B==="ESCAPE"){i={mode:"main",shell:N({...i.shell,workspaceBrowser:null,actionMessage:null})},L();return}if(B==="UP"||B==="k"){i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,selectedIndex:Math.max(0,O.selectedIndex-1),error:null}})},L();return}if(B==="DOWN"||B==="j"){let M=Math.max(0,O.entries.length-1);i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,selectedIndex:Math.min(M,O.selectedIndex+1),error:null}})},L();return}if(B==="LEFT"||B==="h"){te(qs.dirname(O.cwd)).catch(M=>{let W=M instanceof Error?M.message:"Failed to open parent directory.";i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,error:W}})},L()});return}if(B==="RIGHT"||B==="l"||tt(B)){let M=O.entries[O.selectedIndex]??null;if(!M)return;if((B==="RIGHT"||B==="l")&&(M.kind==="directory"||M.kind==="repo")){te(M.path).catch(W=>{let K=W instanceof Error?W.message:"Failed to open directory.";i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,error:K}})},L()});return}Ot(r,M.path).then(async W=>{await U();let K=W.repos[0]??null;i={mode:"main",shell:N({...i.shell,workspaceBrowser:null,selectedLeftItemId:`workspace:${W.workspace.id}`,selectedWorkspaceId:W.workspace.id,selectedRepoId:K?.id??null,selectedTaskId:null,selectedPtyTabId:null,actionMessage:`Registered workspace: ${W.workspace.name??W.workspace.id}`})},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to add workspace.";i={mode:"main",shell:N({...i.shell,workspaceBrowser:{...O,error:K}})},L()})}}},zs=B=>{let O=typeof B=="string"?B:"";if(i.mode==="main"&&i.shell.taskPromptInput!==null){ia(O);return}if(i.mode==="main"&&i.shell.workspaceBrowser!==null){na(O);return}if(i.mode==="main"){let M=qn(i.shell,O,R(i.shell));if(M.exit){xr(0);return}if(M.detachTerminal){z.detach(),i={mode:"main",shell:N(M.state)},c(i.shell),L();return}if(i.shell.inputMode==="terminal"){if(M.changed){i={mode:"main",shell:N(M.state)},c(i.shell),L();return}if(h&&tt(O)){h=!1;return}h&&(h=!1),d=Eh(O)?{key:O,at:Date.now()}:null;let W=Ah(O,i.shell.terminal.scrolledBack??!1);if(W!==0){Er(W);return}z.writeKey(O);return}if(O==="CTRL_C"){xr(0);return}if(O==="?"&&i.shell.inputMode==="control"){i={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:i.shell},x=!0,L();return}if(M.pause){i={mode:"overlay",variant:"pause",menuIndex:0,optionsMessage:null,shell:N(M.state)},x=!0,L();return}if(M.beginTaskPrompt){i={mode:"main",shell:N(M.state)},c(i.shell),L();return}if(M.openWorkspaceBrowser){te(t).catch(W=>{let K=W instanceof Error?W.message:"Failed to browse workspaces.";i={mode:"main",shell:N({...M.state,workspaceBrowser:{cwd:t,entries:[],selectedIndex:0,error:K}})},L()});return}if(M.createPtyTab){Y(M.state,M.createPtyTabKind,M.createPtyTabRunner).then(W=>{I(W)}).catch(W=>{let K=W instanceof Error?W.message:"Failed to create tab.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.closePtyTab){ee(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to close tab.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.syncPullRequest){we(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to create or sync PR.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.refreshPullRequestChecks){ke(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to refresh PR checks.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.mergeTask){xe(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to merge PR.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.closeTask){Ue(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to close task.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.removeWorkspace){st(M.state).then(W=>{i={mode:"main",shell:W},c(i.shell),L()}).catch(W=>{let K=W instanceof Error?W.message:"Failed to remove workspace.";i={mode:"main",shell:N({...M.state,actionMessage:K})},L()});return}if(M.attachTerminal){I(M.state);return}if(M.refreshInspection){i={mode:"main",shell:N(M.state)},c(i.shell),L(),V(i.shell).catch(W=>{let K=W instanceof Error?W.message:"Failed to refresh inspection.";i={mode:"main",shell:N({...i.shell,actionMessage:K})},L()});return}M.changed&&(i={mode:"main",shell:N(M.state)},j(i.shell).catch(()=>{}),c(i.shell),L());return}if(i.variant==="help"){i.viaOptions&&i.parentVariant?i={mode:"overlay",variant:"options",menuIndex:1,optionsMessage:null,shell:i.shell,parentVariant:i.parentVariant}:i.parentVariant?i={mode:"overlay",variant:i.parentVariant,menuIndex:1,optionsMessage:null,shell:i.shell}:i={mode:"main",shell:N(i.shell)},x=!0,L();return}if(i.variant==="options"){oa(O);return}if(i.variant==="runners"){aa(O);return}if(i.optionsMessage){(O==="ESCAPE"||tt(O))&&(i={...i,optionsMessage:null},L());return}if(O==="UP"||O==="k"){i={...i,menuIndex:Math.max(0,i.menuIndex-1)},L();return}if(O==="DOWN"||O==="j"){i={...i,menuIndex:Math.min(2,i.menuIndex+1)},L();return}if(O==="ESCAPE"){i.variant==="pause"&&(i={mode:"main",shell:N(i.shell)},x=!0,L());return}if(tt(O)){if(i.menuIndex===0){i={mode:"main",shell:N({...i.shell,inputMode:"control"})},x=!0,L(),C();return}if(i.menuIndex===1){let M=i.variant==="boot"||i.variant==="pause"?i.variant:void 0;i={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:i.shell,...M!==void 0?{parentVariant:M}:{}},x=!0,L();return}xr(0)}};function oa(B){if(i.mode!=="overlay"||i.variant!=="options")return;let O=Go(i.menuIndex,B);if(O.kind!=="noop"){if(O.kind==="render"){i={...i,menuIndex:O.menuIndex},L();return}if(O.kind==="back"){i.parentVariant&&(i={mode:"overlay",variant:i.parentVariant,menuIndex:1,optionsMessage:null,shell:i.shell},x=!0,L());return}if(O.kind==="help"){let M=i.parentVariant;i={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:i.shell,viaOptions:!0,...M!==void 0?{parentVariant:M}:{}},x=!0,L();return}if(O.kind==="runners"){let M=i.parentVariant;i={mode:"overlay",variant:"runners",menuIndex:0,optionsMessage:null,shell:i.shell,...M!==void 0?{parentVariant:M}:{}},x=!0,L()}}}function aa(B){if(i.mode!=="overlay"||i.variant!=="runners")return;let O=Xo(Kt(i),s,B,o);if(O.kind!=="noop"){if(O.kind==="back"){let M=i.parentVariant;i={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:i.shell,...M!==void 0?{parentVariant:M}:{}},x=!0,L();return}if(O.kind==="render"){i={...i,runnerOptions:O.state},L();return}F(O.config).then(()=>{i.mode!=="overlay"||i.variant!=="runners"||(i={...i,runnerOptions:O.state},L())}).catch(M=>{if(i.mode!=="overlay"||i.variant!=="runners")return;let W=M instanceof Error?M.message:"Failed to save runner option.";i={...i,runnerOptions:{...Kt(i),message:W}},L()})}}let Vs=B=>{let O=xh(B);if(i.mode!=="main"||i.shell.inputMode!=="terminal"||O.length===0)return;if(O.includes("")){z.detach(),h=!1,d=null,i={mode:"main",shell:N({...i.shell,inputMode:"control",actionMessage:null})},c(i.shell),L();return}let M=Dh(O);if(M!==0){Er(M);return}if(h&&O!=="\r"&&O!==`
|
|
100
|
+
`);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 yo(e,t){let r=Date.now();for(;Date.now()-r<t;){if(!await yr(e))return;await Ms(50)}}function xo(e){return new Promise((t,r)=>{let s=vo(e);s.once("connect",()=>t(s)),s.once("error",r)})}function Bu(e,t){return new Promise((r,s)=>{e.once("error",s),e.listen(t,r)})}function br(e,t){if(!e.destroyed)try{e.write(`${JSON.stringify(t)}
|
|
101
|
+
`)}catch{}}function Eo(e){try{return process.kill(e,0),!0}catch{return!1}}function Ms(e){return new Promise(t=>setTimeout(t,e))}function $u(e){throw new Error(`Unhandled daemon request: ${JSON.stringify(e)}`)}var Fu=[" \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[...Fu]}var Wu=["Start","Options","Exit"],Nu=["Resume","Options","Exit"],Tr=2,Rr=2,Cr=2,ju=new RegExp("\x1B\\[[0-?]*[ -/]*[@-~]","g"),Hu=new RegExp("\x1B\\[(?:0)?m","g"),Uu=new RegExp("\x1B\\]8;;[^\x1B]*\x1B\\\\","g"),qu=/https?:\/\/[^\s<>"']+/g,Bs="\x1B[0m",Lo="\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 Mo(e,t={}){return Fs(e,{subtitle:"crAIg is that you?",menuItems:Wu,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Oo(e,t={}){return Fs(e,{subtitle:"Control mode is paused.",menuItems:Nu,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}var vr=[" 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."],Ku=["Help"];function $s(e,t={}){return Fs(e,{subtitle:t.optionsSubtitle??"Configuration",menuItems:t.optionsMenuItems??Ku,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function Bo(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-vr.length)/2));for(let k=0;k<m.length&&!(y+k>=e.height);k+=1)o[y+k]=he(jo(m[k]??"",e.width),r,se.overlayLogo);let n=Math.max(...vr.map(k=>k.length)),l=Math.max(0,Math.floor((e.width-n)/2)),f=y+m.length+2;for(let k=0;k<vr.length;k+=1){let a=f+k;if(a>=e.height)break;let w=vr[k]??"";o[a]=he(rt(" ".repeat(l)+w,e.width),r,s)}return o.join(`
|
|
102
|
+
`)}function $o(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} ${zo(`\u25CF ${t.topRail.liveLabel}`,s,se.rail)}`,a=he(rt(k,e.width),s,se.rail),w=zu(t,o-Tr-Rr,f,s),c=Vu(t,l,f,s),g=Xu(t,m,f,s),_=[];for(let p=0;p<f;p+=1){if(n){_.push(Sr(c[p]??He(),l,s,"center"));continue}let h=Sr(w[p]??He(),o,s,"left"),d=he("\u2502",s,se.divider),u=Sr(c[p]??He(),l,s,"center"),b=he("\u2502",s,se.divider),S=Sr(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(`
|
|
103
|
+
`)}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=jo(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(`
|
|
104
|
+
`)}function zu(e,t,r,s){let o=Qu(e.runners),m=1,y=e.leftTree.map(l=>Ju(l,t,s));return[...Pr(y,r-m),o]}function Vu(e,t,r,s){let o=e.tabs.find(a=>a.active)?.label??"AGENT",m=uh(e.tabs),y=`${" ".repeat(m)}${Ir("\u2500".repeat(o.length+1),s,se.panelMuted)}`,n=[`${Ir(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"||!Xn(l)?e.centerTranscript.map(a=>({...a})):Gu(e),k=[{text:Zu(e.tabs,s)},{text:y,tone:"muted"},{text:n},He(),...f];return Pr(k,r)}function Gu(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:Ko(s.segments),segments:s.segments,fullBleed:!0}))}function Xu(e,t,r,s){let o=e.rightInspection?Yu(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):Pr([{text:Fo("CONTEXT",e.focusedRegion==="tasks",s,se.panelBg)},He(),...e.rightContext.map(m=>eh(m,s)),...e.actionMessage?[He(),{text:e.actionMessage}]:[]],r);return Pr(o,r)}function Yu(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:fh(m-Math.floor(o/2),0,Math.max(0,s.length-o));return[...r.map(n=>Ao(n)),...s.slice(y,y+o).map(n=>Ao(n))]}function Ao(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 Ju(e,t,r){let s=" ".repeat(e.indent??0),o=e.accentDot?" \u25CF":"",m=e.status?` ${e.status}`:"",y=e.accentDot?` ${zo("\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?Fo(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 Qu(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 Zu(e,t){return e.map(r=>r.active?Ir(r.label,t,se.panelBg):Vo(r.label,t,se.panelBg)).join(" ")}function eh(e,t){return{text:`${e.label.padEnd(8," ")} ${e.mutedValue?Vo(e.value,t,se.panelBg):e.value}`}}function Fo(e,t,r,s){return t?Ir(e,r,s):e}function Sr(e,t,r,s){let o=th(s,e.tone??"default"),m=rh(e,r,o);if(s==="left"){if(e.fullBleed)return he(rt(m,t),r,o);let n=t-Tr-Rr;if(e.rightAlign){let f=Ge(m),k=Math.max(0,n-f),a=`${" ".repeat(Tr)}${" ".repeat(k)}${m}${" ".repeat(Rr)}`;return he(a,r,o)}let l=`${" ".repeat(Tr)}${rt(m,n)}${" ".repeat(Rr)}`;return he(l,r,o)}return s==="center"&&e.fullBleed?sh(e,t,r,o):he(rt(` ${m}`,t),r,o)}function th(e,t){return t==="selected"||t==="focused"?se.panelSelected:t==="muted"?se.panelMuted:se.panelBg}function Pr(e,t){let r=e.slice(0,t);for(;r.length<t;)r.push(He());return r}function He(){return{text:""}}function rh(e,t,r){return e.segments?e.segments.map(s=>Wo(s,t,r)).join(""):e.text}function sh(e,t,r,s){let o=" ".repeat(Cr),m=Math.max(0,t-Cr*2);if(!e.segments)return he(`${o}${rt(e.text,m)}${o}`,r,s);let y=oh(e.segments,m),n=`${o}${y.map(l=>Wo(l,r,s)).join("")}${o}`;return he(n,r,s)}function Wo(e,t,r){let s=e.href?`${No(e.href)}${e.text}${Lo}`:ih(e.text);return!t||!e.style?s:`${qt(lh(e.style,r))}${dh(e.style)}${s}${Bs}${qt(r)}`}function ih(e){return e.replace(qu,t=>{let[r,s]=nh(t);return`${No(r)}${r}${Lo}${s}`})}function nh(e){let t=e.length;for(;t>0&&".,;:!?)]}".includes(e[t-1]??"");)t-=1;return[e.slice(0,t),e.slice(t)]}function No(e){return`\x1B]8;;${e}\x1B\\`}function oh(e,t){let r=ah(e,t);return ch(r,t)}function ah(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=Ho(o.text,s);y.length>0&&r.push({...o,text:y}),s=0}return r}function ch(e,t){let r=Ge(Ko(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 lh(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 dh(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 uh(e){let t=0;for(let r of e){if(r.active)return t;t+=r.label.length+3}return 0}function jo(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?hh(e,t):e+" ".repeat(t-r)}function hh(e,t){if(t<=0)return"";if(Ge(e)<=t)return e;let r=qo(e);return Ho(r,Math.max(0,t-1))+"\u2026"}function Ge(e){let t=0;for(let r of Array.from(qo(e)))t+=Uo(r);return t}function Ho(e,t){let r="",s=0;for(let o of Array.from(e)){let m=Uo(o);if(s+m>t)break;r+=o,s+=m}return r}function Uo(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 fh(e,t,r){return Math.min(Math.max(e,t),r)}function qo(e){return e.replace(Uu,"").replace(ju,"")}function Ko(e){return e.map(t=>t.text).join("")}function he(e,t,r){if(!t)return e;let s=qt(r),o=e.replace(Hu,`${Bs}${s}`);return`${s}${o}${Bs}`}function qt(e){let t=[];return e.fg&&t.push(`38;2;${Do(e.fg).join(";")}`),e.bg&&t.push(`48;2;${Do(e.bg).join(";")}`),`\x1B[${t.join(";")}m`}function Do(e){return[Number.parseInt(e.slice(0,2),16),Number.parseInt(e.slice(2,4),16),Number.parseInt(e.slice(4,6),16)]}function zo(e,t,r){return Ws(e,t,se.success.fg,r)}function Ir(e,t,r){return Ws(e,t,se.accent.fg,r)}function Vo(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 Xo(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 Yo(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 Jo(e,t,r,s){if(e.pathEdit)return ph({...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:gh(t,m,!y),state:{...e,message:`${be(m).displayName} ${y?"disabled":"enabled"}.`}}}function ph(e,t,r){if(r==="ESCAPE")return{kind:"render",state:Go({...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:mh(t,s,o.length>0?o:null),state:Go({...e,message:o.length>0?`${be(s).displayName} executable saved.`:`${be(s).displayName} executable reset to default.`})}}return _h(r)?{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:`${e.pathEdit.value}${r}`}}}:{kind:"noop",state:e}}function gh(e,t,r){return{...e,runners:{...e.runners??{},[t]:{...e.runners?.[t]??{},enabled:r}}}}function mh(e,t,r){let s={...e.runners?.[t]??{},...r?{path:r}:{}};return r||delete s.path,{...e,runners:{...e.runners??{},[t]:s}}}function Go(e){let t={...e};return delete t.pathEdit,t}function Hs(e){return e==="ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
|
|
105
|
+
`}function _h(e){return e.length===1&&e>=" "&&e!=="\x7F"}var yh=wh(import.meta.url),vh=yh("terminal-kit"),Sh=vh.terminal;async function ea(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=pr(qn(m,s),l);l=await Kt(t,f,o);let k=()=>{},a={workspaceRoot:t,onUpdate:()=>k(),resolveSessionSpec:(g,_)=>Ph(l,_,t)},w=e.ptyRuntime??await So({...a,paths:r}),c=g=>{if(!e.uiStateFile)return;m=Kn(m,g);let _=m;y=y.then(()=>Pe({uiStateFile:e.uiStateFile},_),()=>Pe({uiStateFile:e.uiStateFile},_)),y.catch(()=>{})};return new Promise(g=>{let _=e.terminal??Sh,i={mode:"overlay",variant:"boot",menuIndex:0,optionsMessage:null,shell:pr(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(Th(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=Rh(W?.fileRows??[],B.collapsedFileTreePaths);return{leftItemIds:Ch(l),centerTabIds:Jn(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=ta(l.tasks,B),W=l.inspection,K;if(M&&W?.taskId===M.id){let J={selectedFilePath:B.selectedFilePath,selectedDiffPath:B.selectedDiffPath},ue=await mn(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 Fh(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:Vn(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??Eh(J,W.activeTab,W.preferredPtyTabKind),Ee=Qo(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(Lr=>Lr.id===O.activeTab);if(J===-1)throw new Error("Only PTY tabs can be closed.");let ue=K.ptyTabs[J],Ee=K.ptyTabs.filter(Lr=>Lr.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 Cn(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=Qo(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=()=>{sa();let B=vt(_.width,_.height),O=i.mode==="main"?$o(B,io(N(i.shell),l),{centerOnly:i.shell.centerZoomed}):i.variant==="boot"?Mo(B,{menuIndex:i.menuIndex,optionsMessage:i.optionsMessage}):i.variant==="pause"?Oo(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:Xo(zt(i)),optionsSubtitle:"Runners"}):Bo(B);x&&(_.moveTo(1,1),_.eraseDisplayBelow(),x=!1),_.noFormat(Dh(O)),_.hideCursor(!0)};function sa(){let B=i.mode==="main"&&i.shell.inputMode==="terminal"?"terminal":"control";B!==A&&(A=B,_.grabInput(B==="terminal"?{mouse:"button"}:!0))}let ia=()=>{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)},Ar=B=>{ia(),g(B)},na=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 Ah(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??ra(M,"agent"),Us(vt(_.width,_.height)));h=qs(W.selectedPtyTabId),i={mode:"main",shell:Ht(W,K)},c(i.shell)}catch(W){W instanceof xr&&(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()}},oa=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)){na();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}Gn(B)&&(i={mode:"main",shell:N({...O,taskPromptInput:`${O.taskPromptInput}${B}`,taskPromptError:null})},L())}},aa=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){oa(O);return}if(i.mode==="main"&&i.shell.workspaceBrowser!==null){aa(O);return}if(i.mode==="main"){let M=zn(i.shell,O,R(i.shell));if(M.exit){Ar(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=Mh(O)?{key:O,at:Date.now()}:null;let W=Oh(O,i.shell.terminal.scrolledBack??!1);if(W!==0){Dr(W);return}z.writeKey(O);return}if(O==="CTRL_C"){Ar(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"){ca(O);return}if(i.variant==="runners"){la(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}Ar(0)}};function ca(B){if(i.mode!=="overlay"||i.variant!=="options")return;let O=Yo(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 la(B){if(i.mode!=="overlay"||i.variant!=="runners")return;let O=Jo(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=Lh(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=Bh(O);if(M!==0){Dr(M);return}if(h&&O!=="\r"&&O!==`
|
|
104
106
|
`&&O!==`\r
|
|
105
|
-
`&&(h=!1)
|
|
106
|
-
`).map((t,r)=>`\x1B[${r+1};1H${t}`).join("")}function
|
|
107
|
+
`&&(h=!1),$h(h,d,O)){h=!1;return}z.write(O)},Gs=B=>{if(i.mode!=="main")return;if(i.shell.inputMode==="control"){ua(Zo(B));return}let O=Zo(B);O!==0&&Dr(O)};function Dr(B){u+=B,!S&&(S=setTimeout(()=>{S=null;let O=u;u=0,O!==0&&(da(O),L())},16))}function da(B){z.scrollViewport(B),i={mode:"main",shell:X(i.shell)}}function ua(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=ta(y.tasks,t),l=t?{selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath}:{},f=n?await _n(n,l):null;return{workspaceRoot:e,workspaces:m.filter(k=>k.status==="active"),repos:o,tasks:y.tasks,inspection:f,...r?{enabledRunnerIds:r}:{}}}function ta(e,t){return t?.selectedTaskId?e.find(r=>r.id===t.selectedTaskId)??null:null}function Th(e,t){return pr(e,t)}function Rh(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 Ch(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 Ph(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"?xh(o):[];return s?.type==="project"?{cwd:m,command:y,env:{GIT_CEILING_DIRECTORIES:Ih(process.env.GIT_CEILING_DIRECTORIES,m)}}:{cwd:m,command:y}}function Ih(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 xh(e){return e.command.length>0?e.command:["codex"]}function zt(e){return e.runnerOptions??{menuIndex:e.menuIndex,message:e.optionsMessage}}function Eh(e,t,r){return e.ptyTabs.find(s=>s.id===t)?.kind??r}function Qo(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 Ah(e,t,r,s,o){let m=await ye(e);Vt(o,m);let y=r?await ir(e,r,s,{runner:o,config:m}):await At(e,t??"",s,{runner:o,config:m});try{let f=ct();await Q(lt(Or(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 xr(k,a)}let n=ra(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 xr=class extends Error{task;constructor(t,r){super(t),this.name="InteractiveTaskStartupError",this.task=r}};function ra(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-Cr*2),rows:Math.max(5,e.height-Be.topRailHeight-5)}}function Dh(e){return e.split(`
|
|
108
|
+
`).map((t,r)=>`\x1B[${r+1};1H${t}`).join("")}function Lh(e){return typeof e=="string"?e:Buffer.isBuffer(e)?e.toString("utf8"):""}function Mh(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 Oh(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 Zo(e){return e==="MOUSE_WHEEL_UP"?-3:e==="MOUSE_WHEEL_DOWN"?3:0}function Bh(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 $h(e,t,r){return r.length===0?!1:e&&(r==="\r"||r===`
|
|
107
109
|
`||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
|
|
110
|
+
`)?!0:!t||Date.now()-t.at>=30?!1:r===t.key?!0:r.length<=4&&r.split("").every(s=>s===t.key)}async function Fh(e){let t=await kh(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 Wh(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 Wh(e){let t=Tt.join(e,".git");return await bh(t).catch(()=>null)!==null}function Er(){return process.cwd()}async function Nh(){try{if(process.argv[2]==="__craig-daemon"){let n=process.argv[3]??Er(),l=Ke(n);return await yt(n),await To(l),0}if(process.argv[2]==="__craig-daemon-shutdown"){let n=process.argv[3]??Er(),l=Ke(n);return await yt(n),await Ro(l),0}let e=Js(process.argv.slice(2)),t=Er(),r=Ke(t),s=await yt(t),o={paths:r};if(e.mode==="interactive")return await ea({uiStateFile:r.uiStateFile,workspaceRoot:r.workspaceRoot});if(!e.command)throw new Error("Command mode requires a command.");let m=await fn(e.command,o),y=pn(m);return y.length>0&&process.stdout.write(`${y}
|
|
109
111
|
`),0}catch(e){let t=e instanceof Error?e.message:"Unknown Craig error";return process.stderr.write(`${t}
|
|
110
|
-
`),1}}var
|
|
112
|
+
`),1}}var jh=await Nh();process.exit(jh);
|