craig-cli 0.5.5 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +16 -16
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  var Ea=Object.create;var $r=Object.defineProperty;var Aa=Object.getOwnPropertyDescriptor;var Da=Object.getOwnPropertyNames;var La=Object.getPrototypeOf,Ma=Object.prototype.hasOwnProperty;var $e=(e,t)=>()=>(e&&(t=e(e=0)),t);var Oa=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ba=(e,t)=>{for(var r in t)$r(e,r,{get:t[r],enumerable:!0})},$a=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Da(t))!Ma.call(e,o)&&o!==r&&$r(e,o,{get:()=>t[o],enumerable:!(s=Aa(t,o))||s.enumerable});return e};var Fa=(e,t,r)=>(r=e!=null?Ea(La(e)):{},$a(t||!e||!e.__esModule?$r(r,"default",{value:e,enumerable:!0}):r,e));function ye(e){return Na[e]}function Fr(e,t={}){let r=ye(e),s=t.runners?.[e]?.path?.trim();return{...r,executable:s&&s.length>0?s:r.executable}}function pt(e={}){return de.filter(t=>e.runners?.[t]?.enabled!==!1)}function st(e={}){let t=pt(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 Kt(e,t={}){if(t.runners?.[e]?.enabled===!1)throw new Error(`Runner "${e}" is disabled in .craig/config.json.`)}function gt(e){return de.includes(e)}function rn(e){if(!e||e.length===0)return"codex";if(!gt(e))throw new Error(`Unsupported runner "${e}". Expected one of: ${de.join(", ")}.`);return e}function Se(e){return ye(e).displayName}function we(e,t,r={}){let s=[Fr(e,r).executable];return t&&t.length>0&&s.push(t),s}var de,Na,Ae=$e(()=>{"use strict";de=["codex","cursor","claude"],Na={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 Va}from"node:crypto";import{open as za,readFile as Nf,rename as Ga,rm as Xa}from"node:fs/promises";import Nr from"node:path";async function ue(e,t){let r=Nr.dirname(e),s=Nr.join(r,`.${Nr.basename(e)}.${process.pid}.${Date.now()}.${Va()}.tmp`),o=await za(s,"w");try{let p=`${JSON.stringify(t,null,2)}
3
- `;await o.writeFile(p,"utf8"),await o.sync(),await o.close(),await Ga(s,e)}catch(p){throw await o.close().catch(()=>{}),await Xa(s,{force:!0}).catch(()=>{}),p}}var We=$e(()=>{"use strict"});import{readFile as rc}from"node:fs/promises";async function Te(e){let t=await rc(e.indexFile,"utf8"),r=JSON.parse(t);return jr(r,e.workspaceRoot,e.indexFile)}async function it(e,t){let r={...t,workspaceRoot:e.workspaceRoot,updatedAt:new Date().toISOString()};await ue(e.indexFile,r)}function jr(e,t,r){if(!sc(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 sc(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 ot=$e(()=>{"use strict";We()});import{readFile as nc}from"node:fs/promises";async function he(e,t){let r=await nc(Hr(e,t),"utf8"),s=JSON.parse(r);return ic(s,Hr(e,t))}async function se(e,t){let r={...t,updatedAt:new Date().toISOString()};await ue(Hr(e,t.id),r)}async function Ur(e,t){let r=await Te(e);r.taskIds.includes(t)||await it(e,{...r,taskIds:[...r.taskIds,t]})}function Hr(e,t){return`${e.tasksDir}/${t}.json`}function ic(e,t){let r=oc(e);if(!cc(r))throw new Error(`Craig task record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function oc(e){if(typeof e!="object"||e===null)return e;let t=e;return{...t,runner:qr(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:uc(t),bundlePath:typeof t.bundlePath=="string"||t.bundlePath===null?t.bundlePath:null,selectedRepoTargetId:typeof t.selectedRepoTargetId=="string"||t.selectedRepoTargetId===null?t.selectedRepoTargetId:null,repoTargets:lc(t.repoTargets),runnerSession:t.runnerSession??ac(t),checks:wc(t),lastCommit:t.lastCommit??null,prs:bc(t),artifacts:Sc(t),cleanup:Tc(t)}}function ac(e){if(typeof e.title!="string")return null;let t=qr(e.runner);return{command:we(t,e.title),pid:null,startedAt:null,lastKnownState:e.status==="running"?"running":"starting",exitCode:null,exitedAt:null}}function cc(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"&&gt(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"&&cn(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||dc(t.repoTargets))&&fc(t.runnerSession)&&pc(t.prompt)&&ln(t.checks)&&dn(t.lastCommit)&&mc(t.prs)&&_c(t.artifacts)&&hn(t.cleanup)&&(t.lastFailureReason===void 0||t.lastFailureReason===null||typeof t.lastFailureReason=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"}function lc(e){if(Array.isArray(e))return e.filter(an)}function dc(e){return Array.isArray(e)&&e.every(an)}function an(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)&&ln(t.checks)&&dn(t.lastCommit)&&un(t.pullRequest)&&hn(t.cleanup)}function uc(e){if(cn(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 hc(e.id,e.title,t,qr(e.runner))}function hc(e,t,r,s){let o=ye(s);return[{id:`${e}:agent`,kind:"agent",title:o.defaultAgentTitle,command:we(s),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function qr(e){return e&&gt(e)?e:"codex"}function cn(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 fc(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 pc(e){return typeof e=="object"&&e!==null&&(e.source==="inline"||e.source==="file")&&typeof e.value=="string"}function ln(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 dn(e){return e===null||typeof e=="object"&&e!==null&&typeof e.sha=="string"&&typeof e.message=="string"&&typeof e.committedAt=="string"}function un(e){return typeof e=="object"&&e!==null&&e.provider==="github"&&gc(e.requiredChecks)}function gc(e){return Array.isArray(e)&&e.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))}function mc(e){return Array.isArray(e)&&e.every(un)}function _c(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 hn(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 wc(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 bc(e){if(Array.isArray(e.prs))return e.prs.map(kc);let t=e.pullRequest;return!t||!t.number?[]:[{provider:"github",owner:null,repo:null,number:t.number,url:t.url??null,title:null,status:fn(t.status),draft:!1,baseBranch:t.baseBranch??null,headBranch:t.headBranch??null,mergeable:t.mergeable??!1,mergeStateStatus:t.mergeStateStatus??null,reviewDecision:null,requiredChecks:pn(t.requiredChecks),comments:[],createdAt:null,updatedAt:null,mergedAt:null,lastSyncedAt:t.lastSyncedAt??null,lastSyncedHeadSha:t.lastSyncedHeadSha??null}]}function kc(e){let t=e??{};return{provider:"github",owner:t.owner??null,repo:t.repo??null,number:typeof t.number=="number"?t.number:null,url:t.url??null,title:t.title??null,status:fn(t.status),draft:t.draft??!1,baseBranch:t.baseBranch??null,headBranch:t.headBranch??null,mergeable:t.mergeable??!1,mergeStateStatus:t.mergeStateStatus??null,reviewDecision:yc(t.reviewDecision),requiredChecks:pn(t.requiredChecks),comments:vc(t.comments),createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,mergedAt:t.mergedAt??null,lastSyncedAt:t.lastSyncedAt??null,lastSyncedHeadSha:t.lastSyncedHeadSha??null}}function fn(e){return e==="open"||e==="closed"||e==="merged"||e==="draft"?e:null}function yc(e){return e==="APPROVED"||e==="CHANGES_REQUESTED"||e==="REVIEW_REQUIRED"?e:null}function vc(e){return Array.isArray(e)?e.flatMap(t=>{if(typeof t!="object"||t===null)return[];let r=t;return typeof r.body!="string"||!r.body.trim()?[]:[{author:typeof r.author=="string"?r.author:null,body:r.body,createdAt:typeof r.createdAt=="string"?r.createdAt:null,url:typeof r.url=="string"?r.url:null}]}):[]}function pn(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 Sc(e){let t=e.artifacts;return t?{...t,checkSummaryPath:t.checkSummaryPath??null}:{logPath:null,checkSummaryPath:null,prDraftPath:null,prStatusPath:null}}function Tc(e){return e.cleanup??{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}var Re=$e(()=>{"use strict";We();ot();Ae()});import{readFile as Rc}from"node:fs/promises";async function De(e){try{let t=await Rc(e.uiStateFile,"utf8"),r=JSON.parse(t);return Pc(r,e.uiStateFile)}catch(t){if(Ic(t))return null;throw t}}async function Pe(e,t){await ue(e.uiStateFile,{...t,updatedAt:new Date().toISOString()})}function je(){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 Pc(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")||!_t(e,"inputMode")||!_t(e,"focusedRegion")||!_t(e,"activeTab")||!_t(e,"inspectorSection")||!_t(e,"inspectionMode")||!Vt(e,"openInspectionKind")||!Vt(e,"selectedFileTreePath")||!Vt(e,"selectedFilePath")||!Vt(e,"selectedDiffPath")||!Cc(e,"collapsedFileTreePaths")||!_t(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 _t(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 Cc(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 wt=$e(()=>{"use strict";We()});import{execFile as xc}from"node:child_process";import{promisify as Ec}from"node:util";async function ee(e,t,r={}){try{let s=await gn(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr}}catch(s){if(mn(s)){let o=s.stderr?.trim()||s.stdout?.trim()||s.message;throw new Error(`${e} ${t.join(" ")} failed: ${o}`)}throw s}}async function oe(e,t,r={}){try{let s=await gn(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr,exitCode:0}}catch(s){if(mn(s))return{stdout:s.stdout??"",stderr:s.stderr??"",exitCode:typeof s.code=="number"?s.code:null};throw s}}function mn(e){return e instanceof Error}var gn,Ce=$e(()=>{"use strict";gn=Ec(xc)});import{readFile as zc,readdir as Gc,rm as Xc}from"node:fs/promises";import Pn from"node:path";async function Le(e,t){let r=await zc(Xt(e,t),"utf8"),s=JSON.parse(r);return Yc(s,Xt(e,t))}async function Yt(e,t){await ue(Xt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function lt(e){let t=await Gc(e.reposDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Le(e,Pn.basename(s.name,".json"))))).sort((s,o)=>s.name.localeCompare(o.name)||s.id.localeCompare(o.id))}async function Cn(e,t){await Xc(Xt(e,t),{force:!0})}function Xt(e,t){return Pn.join(e.reposDir,`${t}.json`)}function Yc(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 dt=$e(()=>{"use strict";We()});import{readFile as Qc,readdir as Jc,rm as Zc}from"node:fs/promises";import In from"node:path";async function Rt(e,t){let r=await Qc(Qt(e,t),"utf8"),s=JSON.parse(r);return el(s,Qt(e,t))}async function bt(e,t){await ue(Qt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function Me(e){let t=await Jc(e.workspacesDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Rt(e,In.basename(s.name,".json"))))).sort((s,o)=>s.id.localeCompare(o.id))}async function xn(e,t){await Zc(Qt(e,t),{force:!0})}function Qt(e,t){return In.join(e.workspacesDir,`${t}.json`)}function el(e,t){let r=tl(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 tl(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";We()});async function He(e,t){let r=await Te(e),s=[],o=[];await Promise.all(r.taskIds.map(async i=>{try{s.push(await he(e,i))}catch(c){if(ll(c)){o.push(i);return}throw c}}));let k=(t?.includeClosed?s:s.filter(i=>i.status!=="closed")).filter(i=>!(t?.workspaceId&&i.workspaceId!==t.workspaceId||t?.repoId&&i.repoId!==t.repoId&&!(i.repoTargets??[]).some(c=>c.repoId===t.repoId)));return k.sort((i,c)=>i.id.localeCompare(c.id)),o.sort(),{kind:"listTasks",tasks:k,missingTaskIds:o,repoId:t?.repoId??null}}function ll(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var xt=$e(()=>{"use strict";ot();Re()});var bi={};Ba(bi,{addWorkspace:()=>Dt,archiveWorkspace:()=>Lt,listWorkspaces:()=>us,removeWorkspace:()=>Mt,removeWorkspaceRecord:()=>cr,restoreWorkspace:()=>hs});import{readdir as zl,realpath as ui,stat as Gl}from"node:fs/promises";import Je from"node:path";async function Dt(e,t){let r=Je.resolve(e.workspaceRoot,t);if(!(await Gl(r).catch(()=>null))?.isDirectory())throw new Error(`Workspace path does not exist: ${r}`);return await mi(r)?Xl(e,r):Yl(e,r)}async function us(e,t){return{kind:"listWorkspaces",workspaces:(await Me(e)).filter(s=>s.status===(t.archived?"archived":"active")),archivedOnly:t.archived}}async function Lt(e,t){let s={...await Rt(e,t),status:"archived",archivedAt:new Date().toISOString()};return await bt(e,s),await wi(e,t),{kind:"archiveWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function hs(e,t){let s={...await Rt(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??je(),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 Mt(e,t){let r=await Rt(e,t),s=await He(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 cr(e,t),await wi(e,t),{kind:"removeWorkspace",workspaceId:r.id,rootPath:r.rootPath??""}}async function Xl(e,t){let r=await _i(t),s=await lt(e),o=s.find(a=>a.rootPath===t)??null,p=o?fi(o,r):hi(s,t,r),k=`workspace_${p.id}`,c=(await Me(e)).find(a=>a.id===k)??null,d=new Date().toISOString(),_=c??{id:k,kind:"repo",name:p.name,rootPath:t,primaryRepoId:p.id,repoId:p.id,discoveredRepoIds:[p.id],branch:r,status:"active",linkedRepoIds:[],archivedAt:null,createdAt:d,updatedAt:d};return await Yt(e,p),c||await bt(e,_),await pi(e,{repoIds:[p.id],workspaceIds:[_.id]}),await gi(e,_,p.id),{kind:"createWorkspace",workspace:_,repos:[p],created:!c}}async function Yl(e,t){let r=await Ql(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=Zl(s,Je.basename(t)),p=s.find(d=>d.kind==="project"&&d.rootPath===t)??null,k=new Date().toISOString(),i=r.map(d=>d.id),c=p?{...p,discoveredRepoIds:i,primaryRepoId:i[0]??p.primaryRepoId,status:"active",archivedAt:null}:{id:o,kind:"project",name:Je.basename(t),rootPath:t,primaryRepoId:i[0]??"",discoveredRepoIds:i,branch:"project",status:"active",linkedRepoIds:i,archivedAt:null,createdAt:k,updatedAt:k};return await Promise.all(r.map(d=>Yt(e,d))),await bt(e,c),await pi(e,{repoIds:i,workspaceIds:[c.id]}),await gi(e,c,i[0]??null),{kind:"createWorkspace",workspace:c,repos:r,created:!p}}async function Ql(e,t){let r=await zl(t,{withFileTypes:!0}),s=await lt(e),o=[];for(let p of r){if(!p.isDirectory()||p.name.startsWith("."))continue;let k=Je.join(t,p.name);if(!await mi(k))continue;let i=s.find(d=>d.rootPath===k)??o.find(d=>d.rootPath===k),c=await _i(k);o.push(i?fi(i,c):hi([...s,...o],k,c))}return o.sort((p,k)=>p.name.localeCompare(k.name)||p.id.localeCompare(k.id))}function hi(e,t,r){let s=new Date().toISOString();return{id:Jl(e,Je.basename(t)),name:Je.basename(t),rootPath:t,defaultBranch:r,createdAt:s,updatedAt:s}}function fi(e,t){return e.defaultBranch===t?e:{...e,defaultBranch:t,updatedAt:new Date().toISOString()}}function Jl(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"repo",s=`repo_${r}`,o=2;for(;e.some(p=>p.id===s);)s=`repo_${r}_${o}`,o+=1;return s}function Zl(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"workspace",s=`workspace_${r}`,o=2;for(;e.some(p=>p.id===s);)s=`workspace_${r}_${o}`,o+=1;return s}async function pi(e,t){let r=await Te(e);await it(e,{...r,repoIds:[...new Set([...r.repoIds,...t.repoIds])],workspaceIds:[...new Set([...r.workspaceIds,...t.workspaceIds])]})}async function gi(e,t,r){await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??je(),selectedRepoId:r,selectedWorkspaceId:t.id,selectedTaskId:null})}async function mi(e){try{let r=(await ee("git",["rev-parse","--show-toplevel"],{cwd:e})).stdout.trim(),[s,o]=await Promise.all([ui(r).catch(()=>Je.resolve(r)),ui(e).catch(()=>Je.resolve(e))]);return s===o}catch{return!1}}async function _i(e){let t=await oe("git",["symbolic-ref","--quiet","--short","refs/remotes/origin/HEAD"],{cwd:e}),r=t.stdout.trim().replace(/^origin\//,"");if(t.exitCode===0&&r.length>0)return r;for(let p of["main","master","trunk"])if((await oe("git",["show-ref","--verify","--quiet",`refs/heads/${p}`],{cwd:e})).exitCode===0)return p;let o=(await ee("git",["branch","--show-current"],{cwd:e})).stdout.trim();return o.length>0?o:"HEAD"}async function cr(e,t){await xn(e,t);let r=await Te(e);await it(e,{...r,workspaceIds:r.workspaceIds.filter(s=>s!==t)})}async function wi(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 Ot=$e(()=>{"use strict";ot();dt();Pt();wt();Ce();xt()});var Eo=Oa(xo=>{(()=>{"use strict";var e={5639:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CircularList=void 0;let d=c(7150),_=c(802);class a extends d.Disposable{constructor(l){super(),this._maxLength=l,this.onDeleteEmitter=this._register(new _.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new _.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new _.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(l){if(this._maxLength===l)return;let m=new Array(l);for(let w=0;w<Math.min(l,this.length);w++)m[w]=this._array[this._getCyclicIndex(w)];this._array=m,this._maxLength=l,this._startIndex=0}get length(){return this._length}set length(l){if(l>this._length)for(let m=this._length;m<l;m++)this._array[m]=void 0;this._length=l}get(l){return this._array[this._getCyclicIndex(l)]}set(l,m){this._array[this._getCyclicIndex(l)]=m}push(l){this._array[this._getCyclicIndex(this._length)]=l,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(l,m,...w){if(m){for(let n=l;n<this._length-m;n++)this._array[this._getCyclicIndex(n)]=this._array[this._getCyclicIndex(n+m)];this._length-=m,this.onDeleteEmitter.fire({index:l,amount:m})}for(let n=this._length-1;n>=l;n--)this._array[this._getCyclicIndex(n+w.length)]=this._array[this._getCyclicIndex(n)];for(let n=0;n<w.length;n++)this._array[this._getCyclicIndex(l+n)]=w[n];if(w.length&&this.onInsertEmitter.fire({index:l,amount:w.length}),this._length+w.length>this._maxLength){let n=this._length+w.length-this._maxLength;this._startIndex+=n,this._length=this._maxLength,this.onTrimEmitter.fire(n)}else this._length+=w.length}trimStart(l){l>this._length&&(l=this._length),this._startIndex+=l,this._length-=l,this.onTrimEmitter.fire(l)}shiftElements(l,m,w){if(!(m<=0)){if(l<0||l>=this._length)throw new Error("start argument out of range");if(l+w<0)throw new Error("Cannot shift elements in list beyond index 0");if(w>0){for(let g=m-1;g>=0;g--)this.set(l+g+w,this.get(l+g));let n=l+m+w-this._length;if(n>0)for(this._length+=n;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let n=0;n<m;n++)this.set(l+n+w,this.get(l+n))}}_getCyclicIndex(l){return(this._startIndex+l)%this._maxLength}}i.CircularList=a},7453:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.clone=function c(d,_=5){if(typeof d!="object")return d;let a=Array.isArray(d)?[]:{};for(let b in d)a[b]=_<=1?d[b]:d[b]&&c(d[b],_-1);return a}},5777:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CoreTerminal=void 0;let d=c(6501),_=c(6025),a=c(7276),b=c(9640),l=c(56),m=c(4071),w=c(7792),n=c(6415),g=c(5746),f=c(5882),u=c(2486),h=c(3562),y=c(8811),T=c(802),C=c(7150),x=!1;class N extends C.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new T.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 A in D)this.optionsService.options[A]=D[A]}constructor(D){super(),this._windowsWrappingHeuristics=this._register(new C.MutableDisposable),this._onBinary=this._register(new T.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new T.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new T.Emitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this._register(new T.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new T.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new T.Emitter),this._instantiationService=new _.InstantiationService,this.optionsService=this._register(new l.OptionsService(D)),this._instantiationService.setService(d.IOptionsService,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(b.BufferService)),this._instantiationService.setService(d.IBufferService,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(a.LogService)),this._instantiationService.setService(d.ILogService,this._logService),this.coreService=this._register(this._instantiationService.createInstance(m.CoreService)),this._instantiationService.setService(d.ICoreService,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(w.CoreMouseService)),this._instantiationService.setService(d.ICoreMouseService,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(n.UnicodeService)),this._instantiationService.setService(d.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(g.CharsetService),this._instantiationService.setService(d.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(y.OscLinkService),this._instantiationService.setService(d.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new u.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register(T.Event.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register(T.Event.forward(this._bufferService.onResize,this._onResize)),this._register(T.Event.forward(this.coreService.onData,this._onData)),this._register(T.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 h.WriteBuffer(((A,E)=>this._inputHandler.parse(A,E)))),this._register(T.Event.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(D,A){this._writeBuffer.write(D,A)}writeSync(D,A){this._logService.logLevel<=d.LogLevelEnum.WARN&&!x&&(this._logService.warn("writeSync is unreliable and will be removed soon."),x=!0),this._writeBuffer.writeSync(D,A)}input(D,A=!0){this.coreService.triggerDataEvent(D,A)}resize(D,A){isNaN(D)||isNaN(A)||(D=Math.max(D,b.MINIMUM_COLS),A=Math.max(A,b.MINIMUM_ROWS),this._bufferService.resize(D,A))}scroll(D,A=!1){this._bufferService.scroll(D,A)}scrollLines(D,A){this._bufferService.scrollLines(D,A)}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 A=D-this._bufferService.buffer.ydisp;A!==0&&this.scrollLines(A)}registerEscHandler(D,A){return this._inputHandler.registerEscHandler(D,A)}registerDcsHandler(D,A){return this._inputHandler.registerDcsHandler(D,A)}registerCsiHandler(D,A){return this._inputHandler.registerCsiHandler(D,A)}registerOscHandler(D,A){return this._inputHandler.registerOscHandler(D,A)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let D=!1,A=this.optionsService.rawOptions.windowsPty;A&&A.buildNumber!==void 0&&A.buildNumber!==void 0?D=A.backend==="conpty"&&A.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(f.updateWindowsModeWrappedState.bind(null,this._bufferService))),D.push(this.registerCsiHandler({final:"H"},(()=>((0,f.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,C.toDisposable)((()=>{for(let A of D)A.dispose()}))}}}i.CoreTerminal=N},2486:function(k,i,c){var d=this&&this.__decorate||function(H,v,P,S){var R,$=arguments.length,W=$<3?v:S===null?S=Object.getOwnPropertyDescriptor(v,P):S;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")W=Reflect.decorate(H,v,P,S);else for(var U=H.length-1;U>=0;U--)(R=H[U])&&(W=($<3?R(W):$>3?R(v,P,W):R(v,P))||W);return $>3&&W&&Object.defineProperty(v,P,W),W},_=this&&this.__param||function(H,v){return function(P,S){v(P,S,H)}};Object.defineProperty(i,"__esModule",{value:!0}),i.InputHandler=i.WindowsOptionsReportType=void 0,i.isValidColorIndex=F;let a=c(3534),b=c(6760),l=c(6717),m=c(7150),w=c(726),n=c(6107),g=c(8938),f=c(3055),u=c(5451),h=c(6501),y=c(6415),T=c(1346),C=c(9823),x=c(8693),N=c(802),B={"(":0,")":1,"*":2,"+":3,"-":1,".":2},D=131072;function A(H,v){if(H>24)return v.setWinLines||!1;switch(H){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 E;(function(H){H[H.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",H[H.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(E||(i.WindowsOptionsReportType=E={}));let q=0;class K extends m.Disposable{getAttrData(){return this._curAttrData}constructor(v,P,S,R,$,W,U,V,te=new l.EscapeSequenceParser){super(),this._bufferService=v,this._charsetService=P,this._coreService=S,this._logService=R,this._optionsService=$,this._oscLinkService=W,this._coreMouseService=U,this._unicodeService=V,this._parser=te,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new w.StringToUtf32,this._utf8Decoder=new w.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=n.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=n.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new N.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new N.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new N.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new N.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new N.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new N.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new N.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new N.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new N.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new N.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new N.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new N.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new N.Emitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new Y(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate((I=>this._activeBuffer=I.activeBuffer))),this._parser.setCsiHandlerFallback(((I,Q)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(I),params:Q.toArray()})})),this._parser.setEscHandlerFallback((I=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(I)})})),this._parser.setExecuteHandlerFallback((I=>{this._logService.debug("Unknown EXECUTE code: ",{code:I})})),this._parser.setOscHandlerFallback(((I,Q,z)=>{this._logService.debug("Unknown OSC code: ",{identifier:I,action:Q,data:z})})),this._parser.setDcsHandlerFallback(((I,Q,z)=>{Q==="HOOK"&&(z=z.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(I),action:Q,payload:z})})),this._parser.setPrintHandler(((I,Q,z)=>this.print(I,Q,z))),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 T.OscHandler((I=>(this.setTitle(I),this.setIconName(I),!0)))),this._parser.registerOscHandler(1,new T.OscHandler((I=>this.setIconName(I)))),this._parser.registerOscHandler(2,new T.OscHandler((I=>this.setTitle(I)))),this._parser.registerOscHandler(4,new T.OscHandler((I=>this.setOrReportIndexedColor(I)))),this._parser.registerOscHandler(8,new T.OscHandler((I=>this.setHyperlink(I)))),this._parser.registerOscHandler(10,new T.OscHandler((I=>this.setOrReportFgColor(I)))),this._parser.registerOscHandler(11,new T.OscHandler((I=>this.setOrReportBgColor(I)))),this._parser.registerOscHandler(12,new T.OscHandler((I=>this.setOrReportCursorColor(I)))),this._parser.registerOscHandler(104,new T.OscHandler((I=>this.restoreIndexedColor(I)))),this._parser.registerOscHandler(110,new T.OscHandler((I=>this.restoreFgColor(I)))),this._parser.registerOscHandler(111,new T.OscHandler((I=>this.restoreBgColor(I)))),this._parser.registerOscHandler(112,new T.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 b.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 C.DcsHandler(((I,Q)=>this.requestStatusString(I,Q))))}_preserveStack(v,P,S,R){this._parseStack.paused=!0,this._parseStack.cursorStartX=v,this._parseStack.cursorStartY=P,this._parseStack.decodedLength=S,this._parseStack.position=R}_logSlowResolvingAsync(v){this._logService.logLevel<=h.LogLevelEnum.WARN&&Promise.race([v,new Promise(((P,S)=>setTimeout((()=>S("#SLOW_TIMEOUT")),5e3)))]).catch((P=>{if(P!=="#SLOW_TIMEOUT")throw P;console.warn("async parser handler taking longer than 5000 ms")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(v,P){let S,R=this._activeBuffer.x,$=this._activeBuffer.y,W=0,U=this._parseStack.paused;if(U){if(S=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,P))return this._logSlowResolvingAsync(S),S;R=this._parseStack.cursorStartX,$=this._parseStack.cursorStartY,this._parseStack.paused=!1,v.length>D&&(W=this._parseStack.position+D)}if(this._logService.logLevel<=h.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+(typeof v=="string"?` "${v}"`:` "${Array.prototype.map.call(v,(I=>String.fromCharCode(I))).join("")}"`)),this._logService.logLevel===h.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=W;I<v.length;I+=D){let Q=I+D<v.length?I+D:v.length,z=typeof v=="string"?this._stringDecoder.decode(v.substring(I,Q),this._parseBuffer):this._utf8Decoder.decode(v.subarray(I,Q),this._parseBuffer);if(S=this._parser.parse(this._parseBuffer,z))return this._preserveStack(R,$,z,I),this._logSlowResolvingAsync(S),S}else if(!U){let I=typeof v=="string"?this._stringDecoder.decode(v,this._parseBuffer):this._utf8Decoder.decode(v,this._parseBuffer);if(S=this._parser.parse(this._parseBuffer,I))return this._preserveStack(R,$,I,0),this._logSlowResolvingAsync(S),S}this._activeBuffer.x===R&&this._activeBuffer.y===$||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,P,S){let R,$,W=this._charsetService.charset,U=this._optionsService.rawOptions.screenReaderMode,V=this._bufferService.cols,te=this._coreService.decPrivateModes.wraparound,I=this._coreService.modes.insertMode,Q=this._curAttrData,z=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._activeBuffer.x&&S-P>0&&z.getWidth(this._activeBuffer.x-1)===2&&z.setCellFromCodepoint(this._activeBuffer.x-1,0,1,Q);let J=this._parser.precedingJoinState;for(let ge=P;ge<S;++ge){if(R=v[ge],R<127&&W){let Ke=W[String.fromCharCode(R)];Ke&&(R=Ke.charCodeAt(0))}let _e=this._unicodeService.charProperties(R,J);$=y.UnicodeService.extractWidth(_e);let Ye=y.UnicodeService.extractShouldJoin(_e),xe=Ye?y.UnicodeService.extractWidth(J):0;if(J=_e,U&&this._onA11yChar.fire((0,w.stringFromCodePoint)(R)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+$-xe>V){if(te){let Ke=z,rt=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),z=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),xe>0&&z instanceof n.BufferLine&&z.copyCellsFrom(Ke,rt,0,xe,!1);rt<V;)Ke.setCellFromCodepoint(rt++,0,1,Q)}else if(this._activeBuffer.x=V-1,$===2)continue}if(Ye&&this._activeBuffer.x){let Ke=z.getWidth(this._activeBuffer.x-1)?1:2;z.addCodepointToCell(this._activeBuffer.x-Ke,R,$);for(let rt=$-xe;--rt>=0;)z.setCellFromCodepoint(this._activeBuffer.x++,0,0,Q)}else if(I&&(z.insertCells(this._activeBuffer.x,$-xe,this._activeBuffer.getNullCell(Q)),z.getWidth(V-1)===2&&z.setCellFromCodepoint(V-1,g.NULL_CELL_CODE,g.NULL_CELL_WIDTH,Q)),z.setCellFromCodepoint(this._activeBuffer.x++,R,$,Q),$>0)for(;--$;)z.setCellFromCodepoint(this._activeBuffer.x++,0,0,Q)}this._parser.precedingJoinState=J,this._activeBuffer.x<V&&S-P>0&&z.getWidth(this._activeBuffer.x)===0&&!z.hasContent(this._activeBuffer.x)&&z.setCellFromCodepoint(this._activeBuffer.x,0,1,Q),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(v,P){return v.final!=="t"||v.prefix||v.intermediates?this._parser.registerCsiHandler(v,P):this._parser.registerCsiHandler(v,(S=>!A(S.params[0],this._optionsService.rawOptions.windowOptions)||P(S)))}registerDcsHandler(v,P){return this._parser.registerDcsHandler(v,new C.DcsHandler(P))}registerEscHandler(v,P){return this._parser.registerEscHandler(v,P)}registerOscHandler(v,P){return this._parser.registerOscHandler(v,new T.OscHandler(P))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let 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,P){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=v,this._activeBuffer.y=this._activeBuffer.scrollTop+P):(this._activeBuffer.x=v,this._activeBuffer.y=P),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(v,P){this._restrictCursor(),this._setCursor(this._activeBuffer.x+v,this._activeBuffer.y+P)}cursorUp(v){let P=this._activeBuffer.y-this._activeBuffer.scrollTop;return P>=0?this._moveCursor(0,-Math.min(P,v.params[0]||1)):this._moveCursor(0,-(v.params[0]||1)),!0}cursorDown(v){let P=this._activeBuffer.scrollBottom-this._activeBuffer.y;return P>=0?this._moveCursor(0,Math.min(P,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 P=v.params[0];return P===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:P===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let P=v.params[0]||1;for(;P--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let P=v.params[0]||1;for(;P--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(v){let P=v.params[0];return P===1&&(this._curAttrData.bg|=536870912),P!==2&&P!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(v,P,S,R=!1,$=!1){let W=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);W.replaceCells(P,S,this._activeBuffer.getNullCell(this._eraseAttrData()),$),R&&(W.isWrapped=!1)}_resetBufferLine(v,P=!1){let S=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);S&&(S.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),P),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+v),S.isWrapped=!1)}eraseInDisplay(v,P=!1){let S;switch(this._restrictCursor(this._bufferService.cols),v.params[0]){case 0:for(S=this._activeBuffer.y,this._dirtyRowTracker.markDirty(S),this._eraseInBufferLine(S++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,P);S<this._bufferService.rows;S++)this._resetBufferLine(S,P);this._dirtyRowTracker.markDirty(S);break;case 1:for(S=this._activeBuffer.y,this._dirtyRowTracker.markDirty(S),this._eraseInBufferLine(S,0,this._activeBuffer.x+1,!0,P),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(S+1).isWrapped=!1);S--;)this._resetBufferLine(S,P);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(S=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,S-1);S--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+S)?.getTrimmedLength(););for(;S>=0;S--)this._bufferService.scroll(this._eraseAttrData())}else{for(S=this._bufferService.rows,this._dirtyRowTracker.markDirty(S-1);S--;)this._resetBufferLine(S,P);this._dirtyRowTracker.markDirty(0)}break;case 3:let R=this._activeBuffer.lines.length-this._bufferService.rows;R>0&&(this._activeBuffer.lines.trimStart(R),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-R,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-R,0),this._onScroll.fire(0))}return!0}eraseInLine(v,P=!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,P);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,P);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,P)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(v){this._restrictCursor();let P=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let S=this._activeBuffer.ybase+this._activeBuffer.y,R=this._bufferService.rows-1-this._activeBuffer.scrollBottom,$=this._bufferService.rows-1+this._activeBuffer.ybase-R+1;for(;P--;)this._activeBuffer.lines.splice($-1,1),this._activeBuffer.lines.splice(S,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 P=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let S=this._activeBuffer.ybase+this._activeBuffer.y,R;for(R=this._bufferService.rows-1-this._activeBuffer.scrollBottom,R=this._bufferService.rows-1+this._activeBuffer.ybase-R;P--;)this._activeBuffer.lines.splice(S,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 P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.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 P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.deleteCells(this._activeBuffer.x,v.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(v){let P=v.params[0]||1;for(;P--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollDown(v){let P=v.params[0]||1;for(;P--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(n.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 P=v.params[0]||1;for(let S=this._activeBuffer.scrollTop;S<=this._activeBuffer.scrollBottom;++S){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+S);R.deleteCells(0,P,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 P=v.params[0]||1;for(let S=this._activeBuffer.scrollTop;S<=this._activeBuffer.scrollBottom;++S){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+S);R.insertCells(0,P,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 P=v.params[0]||1;for(let S=this._activeBuffer.scrollTop;S<=this._activeBuffer.scrollBottom;++S){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+S);R.insertCells(this._activeBuffer.x,P,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let P=v.params[0]||1;for(let S=this._activeBuffer.scrollTop;S<=this._activeBuffer.scrollBottom;++S){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+S);R.deleteCells(this._activeBuffer.x,P,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(v){this._restrictCursor();let P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.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 P=this._parser.precedingJoinState;if(!P)return!0;let S=v.params[0]||1,R=y.UnicodeService.extractWidth(P),$=this._activeBuffer.x-R,W=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString($),U=new Uint32Array(W.length*S),V=0;for(let I=0;I<W.length;){let Q=W.codePointAt(I)||0;U[V++]=Q,I+=Q>65535?2:1}let te=V;for(let I=1;I<S;++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 P=0;P<v.length;P++)switch(v.params[P]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0}return!0}setModePrivate(v){for(let P=0;P<v.length;P++)switch(v.params[P]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,b.DEFAULT_CHARSET),this._charsetService.setgCharset(1,b.DEFAULT_CHARSET),this._charsetService.setgCharset(2,b.DEFAULT_CHARSET),this._charsetService.setgCharset(3,b.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 P=0;P<v.length;P++)switch(v.params[P]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1}return!0}resetModePrivate(v){for(let P=0;P<v.length;P++)switch(v.params[P]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:this._optionsService.options.cursorBlink=!1;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol="NONE";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug("DECRST 1005 not supported (see #2507)");break;case 1006:case 1016:this._coreMouseService.activeEncoding="DEFAULT";break;case 1015:this._logService.debug("DECRST 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),v.params[P]===1049&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(void 0),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1;break;case 2026:this._coreService.decPrivateModes.synchronizedOutput=!1,this._onRequestRefreshRows.fire(void 0)}return!0}requestMode(v,P){let S=this._coreService.decPrivateModes,{activeProtocol:R,activeEncoding:$}=this._coreMouseService,W=this._coreService,{buffers:U,cols:V}=this._bufferService,{active:te,alt:I}=U,Q=this._optionsService.rawOptions,z=Ye=>Ye?1:2,J=v.params[0];return ge=J,_e=P?J===2?4:J===4?z(W.modes.insertMode):J===12?3:J===20?z(Q.convertEol):0:J===1?z(S.applicationCursorKeys):J===3?Q.windowOptions.setWinLines?V===80?2:V===132?1:0:0:J===6?z(S.origin):J===7?z(S.wraparound):J===8?3:J===9?z(R==="X10"):J===12?z(Q.cursorBlink):J===25?z(!W.isCursorHidden):J===45?z(S.reverseWraparound):J===66?z(S.applicationKeypad):J===67?4:J===1e3?z(R==="VT200"):J===1002?z(R==="DRAG"):J===1003?z(R==="ANY"):J===1004?z(S.sendFocus):J===1005?4:J===1006?z($==="SGR"):J===1015?4:J===1016?z($==="SGR_PIXELS"):J===1048?1:J===47||J===1047||J===1049?z(te===I):J===2004?z(S.bracketedPasteMode):J===2026?z(S.synchronizedOutput):0,W.triggerDataEvent(`${a.C0.ESC}[${P?"":"?"}${ge};${_e}$y`),!0;var ge,_e}_updateAttrColor(v,P,S,R,$){return P===2?(v|=50331648,v&=-16777216,v|=u.AttributeData.fromColorRGB([S,R,$])):P===5&&(v&=-50331904,v|=33554432|255&S),v}_extractColor(v,P,S){let R=[0,0,-1,0,0,0],$=0,W=0;do{if(R[W+$]=v.params[P+W],v.hasSubParams(P+W)){let U=v.getSubParams(P+W),V=0;do R[1]===5&&($=1),R[W+V+1+$]=U[V];while(++V<U.length&&V+W+1+$<R.length);break}if(R[1]===5&&W+$>=2||R[1]===2&&W+$>=5)break;R[1]&&($=1)}while(++W+P<v.length&&W+$<R.length);for(let U=2;U<R.length;++U)R[U]===-1&&(R[U]=0);switch(R[0]){case 38:S.fg=this._updateAttrColor(S.fg,R[1],R[3],R[4],R[5]);break;case 48:S.bg=this._updateAttrColor(S.bg,R[1],R[3],R[4],R[5]);break;case 58:S.extended=S.extended.clone(),S.extended.underlineColor=this._updateAttrColor(S.extended.underlineColor,R[1],R[3],R[4],R[5])}return W}_processUnderline(v,P){P.extended=P.extended.clone(),(!~v||v>5)&&(v=1),P.extended.underlineStyle=v,P.fg|=268435456,v===0&&(P.fg&=-268435457),P.updateExtended()}_processSGR0(v){v.fg=n.DEFAULT_ATTR_DATA.fg,v.bg=n.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 P=v.length,S,R=this._curAttrData;for(let $=0;$<P;$++)S=v.params[$],S>=30&&S<=37?(R.fg&=-50331904,R.fg|=16777216|S-30):S>=40&&S<=47?(R.bg&=-50331904,R.bg|=16777216|S-40):S>=90&&S<=97?(R.fg&=-50331904,R.fg|=16777224|S-90):S>=100&&S<=107?(R.bg&=-50331904,R.bg|=16777224|S-100):S===0?this._processSGR0(R):S===1?R.fg|=134217728:S===3?R.bg|=67108864:S===4?(R.fg|=268435456,this._processUnderline(v.hasSubParams($)?v.getSubParams($)[0]:1,R)):S===5?R.fg|=536870912:S===7?R.fg|=67108864:S===8?R.fg|=1073741824:S===9?R.fg|=2147483648:S===2?R.bg|=134217728:S===21?this._processUnderline(2,R):S===22?(R.fg&=-134217729,R.bg&=-134217729):S===23?R.bg&=-67108865:S===24?(R.fg&=-268435457,this._processUnderline(0,R)):S===25?R.fg&=-536870913:S===27?R.fg&=-67108865:S===28?R.fg&=-1073741825:S===29?R.fg&=2147483647:S===39?(R.fg&=-67108864,R.fg|=16777215&n.DEFAULT_ATTR_DATA.fg):S===49?(R.bg&=-67108864,R.bg|=16777215&n.DEFAULT_ATTR_DATA.bg):S===38||S===48||S===58?$+=this._extractColor(v,$,R):S===53?R.bg|=1073741824:S===55?R.bg&=-1073741825:S===59?(R.extended=R.extended.clone(),R.extended.underlineColor=-1,R.updateExtended()):S===100?(R.fg&=-67108864,R.fg|=16777215&n.DEFAULT_ATTR_DATA.fg,R.bg&=-67108864,R.bg|=16777215&n.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",S);return!0}deviceStatus(v){switch(v.params[0]){case 5:this._coreService.triggerDataEvent(`${a.C0.ESC}[0n`);break;case 6:let P=this._activeBuffer.y+1,S=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[${P};${S}R`)}return!0}deviceStatusPrivate(v){if(v.params[0]===6){let P=this._activeBuffer.y+1,S=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[?${P};${S}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=n.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 P=v.length===0?1:v.params[0];if(P===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(P){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar"}let S=P%2==1;this._coreService.decPrivateModes.cursorBlink=S}return!0}setScrollRegion(v){let P=v.params[0]||1,S;return(v.length<2||(S=v.params[1])>this._bufferService.rows||S===0)&&(S=this._bufferService.rows),S>P&&(this._activeBuffer.scrollTop=P-1,this._activeBuffer.scrollBottom=S-1,this._setCursor(0,0)),!0}windowOptions(v){if(!A(v.params[0],this._optionsService.rawOptions.windowOptions))return!0;let P=v.length>1?v.params[1]:0;switch(v.params[0]){case 14:P!==2&&this._onRequestWindowsOptionsReport.fire(E.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(E.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:P!==0&&P!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),P!==0&&P!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:P!==0&&P!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),P!==0&&P!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(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 P=[],S=v.split(";");for(;S.length>1;){let R=S.shift(),$=S.shift();if(/^\d+$/.exec(R)){let W=parseInt(R);if(F(W))if($==="?")P.push({type:0,index:W});else{let U=(0,x.parseColor)($);U&&P.push({type:1,index:W,color:U})}}}return P.length&&this._onColor.fire(P),!0}setHyperlink(v){let P=v.indexOf(";");if(P===-1)return!0;let S=v.slice(0,P).trim(),R=v.slice(P+1);return R?this._createHyperlink(S,R):!S.trim()&&this._finishHyperlink()}_createHyperlink(v,P){this._getCurrentLinkId()&&this._finishHyperlink();let S=v.split(":"),R,$=S.findIndex((W=>W.startsWith("id=")));return $!==-1&&(R=S[$].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:R,uri:P}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(v,P){let S=v.split(";");for(let R=0;R<S.length&&!(P>=this._specialColors.length);++R,++P)if(S[R]==="?")this._onColor.fire([{type:0,index:this._specialColors[P]}]);else{let $=(0,x.parseColor)(S[R]);$&&this._onColor.fire([{type:1,index:this._specialColors[P],color:$}])}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 P=[],S=v.split(";");for(let R=0;R<S.length;++R)if(/^\d+$/.exec(S[R])){let $=parseInt(S[R]);F($)&&P.push({type:2,index:$})}return P.length&&this._onColor.fire(P),!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,b.DEFAULT_CHARSET),!0}selectCharset(v){return v.length!==2?(this.selectDefaultCharset(),!0):(v[0]==="/"||this._charsetService.setgCharset(B[v[0]],b.CHARSETS[v[1]]||b.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=n.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=n.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 f.CellData;v.content=4194373,v.fg=this._curAttrData.fg,v.bg=this._curAttrData.bg,this._setCursor(0,0);for(let P=0;P<this._bufferService.rows;++P){let S=this._activeBuffer.ybase+this._activeBuffer.y+P,R=this._activeBuffer.lines.get(S);R&&(R.fill(v),R.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(v,P){let S=this._bufferService.buffer,R=this._optionsService.rawOptions;return($=>(this._coreService.triggerDataEvent(`${a.C0.ESC}${$}${a.C0.ESC}\\`),!0))(v==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:v==='"p'?'P1$r61;1"p':v==="r"?`P1$r${S.scrollTop+1};${S.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,P){this._dirtyRowTracker.markRangeDirty(v,P)}}i.InputHandler=K;let Y=class{constructor(H){this._bufferService=H,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(H){H<this.start?this.start=H:H>this.end&&(this.end=H)}markRangeDirty(H,v){H>v&&(q=H,H=v,v=q),H<this.start&&(this.start=H),v>this.end&&(this.end=v)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function F(H){return 0<=H&&H<256}Y=d([_(0,h.IBufferService)],Y)},701:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.isChromeOS=i.isLinux=i.isWindows=i.isIphone=i.isIpad=i.isMac=i.isSafari=i.isLegacyEdge=i.isFirefox=i.isNode=void 0,i.getSafariVersion=function(){if(!i.isSafari)return 0;let _=c.match(/Version\/(\d+)/);return _===null||_.length<2?0:parseInt(_[1])},i.isNode=typeof process<"u"&&"title"in process;let c=i.isNode?"node":navigator.userAgent,d=i.isNode?"node":navigator.platform;i.isFirefox=c.includes("Firefox"),i.isLegacyEdge=c.includes("Edge"),i.isSafari=/^((?!chrome|android).)*safari/i.test(c),i.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(d),i.isIpad=d==="iPad",i.isIphone=d==="iPhone",i.isWindows=["Windows","Win16","Win32","WinCE"].includes(d),i.isLinux=d.indexOf("Linux")>=0,i.isChromeOS=/\bCrOS\b/.test(c)},6168:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.DebouncedIdleTask=i.IdleTaskQueue=i.PriorityTaskQueue=void 0;let d=c(701);class _{constructor(){this._tasks=[],this._i=0}enqueue(l){this._tasks.push(l),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(l){this._idleCallback=void 0;let m=0,w=0,n=l.timeRemaining(),g=0;for(;this._i<this._tasks.length;){if(m=performance.now(),this._tasks[this._i]()||this._i++,m=Math.max(1,performance.now()-m),w=Math.max(m,w),g=l.timeRemaining(),1.5*w>g)return n-m<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(n-m))}ms`),void this._start();n=g}this.clear()}}class a extends _{_requestCallback(l){return setTimeout((()=>l(this._createDeadline(16))))}_cancelCallback(l){clearTimeout(l)}_createDeadline(l){let m=performance.now()+l;return{timeRemaining:()=>Math.max(0,m-performance.now())}}}i.PriorityTaskQueue=a,i.IdleTaskQueue=!d.isNode&&"requestIdleCallback"in window?class extends _{_requestCallback(b){return requestIdleCallback(b)}_cancelCallback(b){cancelIdleCallback(b)}}:a,i.DebouncedIdleTask=class{constructor(){this._queue=new i.IdleTaskQueue}set(b){this._queue.clear(),this._queue.enqueue(b)}flush(){this._queue.flush()}}},5882:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.updateWindowsModeWrappedState=function(_){let a=_.buffer.lines.get(_.buffer.ybase+_.buffer.y-1),b=a?.get(_.cols-1),l=_.buffer.lines.get(_.buffer.ybase+_.buffer.y);l&&b&&(l.isWrapped=b[d.CHAR_DATA_CODE_INDEX]!==d.NULL_CELL_CODE&&b[d.CHAR_DATA_CODE_INDEX]!==d.WHITESPACE_CELL_CODE)};let d=c(8938)},5451:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.ExtendedAttrs=i.AttributeData=void 0;class c{constructor(){this.fg=0,this.bg=0,this.extended=new d}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 c;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}}i.AttributeData=c;class d{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,b=0){this._ext=0,this._urlId=0,this._ext=a,this._urlId=b}clone(){return new d(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}i.ExtendedAttrs=d},1073:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Buffer=i.MAX_BUFFER_SIZE=void 0;let d=c(5639),_=c(6168),a=c(5451),b=c(6107),l=c(732),m=c(3055),w=c(8938),n=c(8158),g=c(6760);i.MAX_BUFFER_SIZE=4294967295,i.Buffer=class{constructor(f,u,h){this._hasScrollback=f,this._optionsService=u,this._bufferService=h,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=b.DEFAULT_ATTR_DATA.clone(),this.savedCharset=g.DEFAULT_CHARSET,this.markers=[],this._nullCell=m.CellData.fromCharData([0,w.NULL_CELL_CHAR,w.NULL_CELL_WIDTH,w.NULL_CELL_CODE]),this._whitespaceCell=m.CellData.fromCharData([0,w.WHITESPACE_CELL_CHAR,w.WHITESPACE_CELL_WIDTH,w.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new _.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new d.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(f){return f?(this._nullCell.fg=f.fg,this._nullCell.bg=f.bg,this._nullCell.extended=f.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new a.ExtendedAttrs),this._nullCell}getWhitespaceCell(f){return f?(this._whitespaceCell.fg=f.fg,this._whitespaceCell.bg=f.bg,this._whitespaceCell.extended=f.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new a.ExtendedAttrs),this._whitespaceCell}getBlankLine(f,u){return new b.BufferLine(this._bufferService.cols,this.getNullCell(f),u)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let f=this.ybase+this.y-this.ydisp;return f>=0&&f<this._rows}_getCorrectBufferLength(f){if(!this._hasScrollback)return f;let u=f+this._optionsService.rawOptions.scrollback;return u>i.MAX_BUFFER_SIZE?i.MAX_BUFFER_SIZE:u}fillViewportRows(f){if(this.lines.length===0){f===void 0&&(f=b.DEFAULT_ATTR_DATA);let u=this._rows;for(;u--;)this.lines.push(this.getBlankLine(f))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new d.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(f,u){let h=this.getNullCell(b.DEFAULT_ATTR_DATA),y=0,T=this._getCorrectBufferLength(u);if(T>this.lines.maxLength&&(this.lines.maxLength=T),this.lines.length>0){if(this._cols<f)for(let x=0;x<this.lines.length;x++)y+=+this.lines.get(x).resize(f,h);let C=0;if(this._rows<u)for(let x=this._rows;x<u;x++)this.lines.length<u+this.ybase&&(this._optionsService.rawOptions.windowsMode||this._optionsService.rawOptions.windowsPty.backend!==void 0||this._optionsService.rawOptions.windowsPty.buildNumber!==void 0?this.lines.push(new b.BufferLine(f,h)):this.ybase>0&&this.lines.length<=this.ybase+this.y+C+1?(this.ybase--,C++,this.ydisp>0&&this.ydisp--):this.lines.push(new b.BufferLine(f,h)));else for(let x=this._rows;x>u;x--)this.lines.length>u+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(T<this.lines.maxLength){let x=this.lines.length-T;x>0&&(this.lines.trimStart(x),this.ybase=Math.max(this.ybase-x,0),this.ydisp=Math.max(this.ydisp-x,0),this.savedY=Math.max(this.savedY-x,0)),this.lines.maxLength=T}this.x=Math.min(this.x,f-1),this.y=Math.min(this.y,u-1),C&&(this.y+=C),this.savedX=Math.min(this.savedX,f-1),this.scrollTop=0}if(this.scrollBottom=u-1,this._isReflowEnabled&&(this._reflow(f,u),this._cols>f))for(let C=0;C<this.lines.length;C++)y+=+this.lines.get(C).resize(f,h);this._cols=f,this._rows=u,this._memoryCleanupQueue.clear(),y>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let f=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,f=!1);let u=0;for(;this._memoryCleanupPosition<this.lines.length;)if(u+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),u>100)return!0;return f}get _isReflowEnabled(){let f=this._optionsService.rawOptions.windowsPty;return f&&f.buildNumber?this._hasScrollback&&f.backend==="conpty"&&f.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(f,u){this._cols!==f&&(f>this._cols?this._reflowLarger(f,u):this._reflowSmaller(f,u))}_reflowLarger(f,u){let h=this._optionsService.rawOptions.reflowCursorLine,y=(0,l.reflowLargerGetLinesToRemove)(this.lines,this._cols,f,this.ybase+this.y,this.getNullCell(b.DEFAULT_ATTR_DATA),h);if(y.length>0){let T=(0,l.reflowLargerCreateNewLayout)(this.lines,y);(0,l.reflowLargerApplyNewLayout)(this.lines,T.layout),this._reflowLargerAdjustViewport(f,u,T.countRemoved)}}_reflowLargerAdjustViewport(f,u,h){let y=this.getNullCell(b.DEFAULT_ATTR_DATA),T=h;for(;T-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length<u&&this.lines.push(new b.BufferLine(f,y))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-h,0)}_reflowSmaller(f,u){let h=this._optionsService.rawOptions.reflowCursorLine,y=this.getNullCell(b.DEFAULT_ATTR_DATA),T=[],C=0;for(let x=this.lines.length-1;x>=0;x--){let N=this.lines.get(x);if(!N||!N.isWrapped&&N.getTrimmedLength()<=f)continue;let B=[N];for(;N.isWrapped&&x>0;)N=this.lines.get(--x),B.unshift(N);if(!h){let S=this.ybase+this.y;if(S>=x&&S<x+B.length)continue}let D=B[B.length-1].getTrimmedLength(),A=(0,l.reflowSmallerGetNewLineLengths)(B,this._cols,f),E=A.length-B.length,q;q=this.ybase===0&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+E):Math.max(0,this.lines.length-this.lines.maxLength+E);let K=[];for(let S=0;S<E;S++){let R=this.getBlankLine(b.DEFAULT_ATTR_DATA,!0);K.push(R)}K.length>0&&(T.push({start:x+B.length+C,newLines:K}),C+=K.length),B.push(...K);let Y=A.length-1,F=A[Y];F===0&&(Y--,F=A[Y]);let H=B.length-E-1,v=D;for(;H>=0;){let S=Math.min(v,F);if(B[Y]===void 0)break;if(B[Y].copyCellsFrom(B[H],v-S,F-S,S,!0),F-=S,F===0&&(Y--,F=A[Y]),v-=S,v===0){H--;let R=Math.max(H,0);v=(0,l.getWrappedLineTrimmedLength)(B,R,this._cols)}}for(let S=0;S<B.length;S++)A[S]<f&&B[S].setCell(A[S],y);let P=E-q;for(;P-- >0;)this.ybase===0?this.y<u-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+C)-u&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+E,this.ybase+u-1)}if(T.length>0){let x=[],N=[];for(let F=0;F<this.lines.length;F++)N.push(this.lines.get(F));let B=this.lines.length,D=B-1,A=0,E=T[A];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+C);let q=0;for(let F=Math.min(this.lines.maxLength-1,B+C-1);F>=0;F--)if(E&&E.start>D+q){for(let H=E.newLines.length-1;H>=0;H--)this.lines.set(F--,E.newLines[H]);F++,x.push({index:D+1,amount:E.newLines.length}),q+=E.newLines.length,E=T[++A]}else this.lines.set(F,N[D--]);let K=0;for(let F=x.length-1;F>=0;F--)x[F].index+=K,this.lines.onInsertEmitter.fire(x[F]),K+=x[F].amount;let Y=Math.max(0,B+C-this.lines.maxLength);Y>0&&this.lines.onTrimEmitter.fire(Y)}}translateBufferLineToString(f,u,h=0,y){let T=this.lines.get(f);return T?T.translateToString(u,h,y):""}getWrappedRangeForLine(f){let u=f,h=f;for(;u>0&&this.lines.get(u).isWrapped;)u--;for(;h+1<this.lines.length&&this.lines.get(h+1).isWrapped;)h++;return{first:u,last:h}}setupTabStops(f){for(f!=null?this.tabs[f]||(f=this.prevStop(f)):(this.tabs={},f=0);f<this._cols;f+=this._optionsService.rawOptions.tabStopWidth)this.tabs[f]=!0}prevStop(f){for(f==null&&(f=this.x);!this.tabs[--f]&&f>0;);return f>=this._cols?this._cols-1:f<0?0:f}nextStop(f){for(f==null&&(f=this.x);!this.tabs[++f]&&f<this._cols;);return f>=this._cols?this._cols-1:f<0?0:f}clearMarkers(f){this._isClearing=!0;for(let u=0;u<this.markers.length;u++)this.markers[u].line===f&&(this.markers[u].dispose(),this.markers.splice(u--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let f=0;f<this.markers.length;f++)this.markers[f].dispose();this.markers.length=0,this._isClearing=!1}addMarker(f){let u=new n.Marker(f);return this.markers.push(u),u.register(this.lines.onTrim((h=>{u.line-=h,u.line<0&&u.dispose()}))),u.register(this.lines.onInsert((h=>{u.line>=h.index&&(u.line+=h.amount)}))),u.register(this.lines.onDelete((h=>{u.line>=h.index&&u.line<h.index+h.amount&&u.dispose(),u.line>h.index&&(u.line-=h.amount)}))),u.register(u.onDispose((()=>this._removeMarker(u)))),u}_removeMarker(f){this._isClearing||this.markers.splice(this.markers.indexOf(f),1)}}},6107:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BufferLine=i.DEFAULT_ATTR_DATA=void 0;let d=c(5451),_=c(3055),a=c(8938),b=c(726);i.DEFAULT_ATTR_DATA=Object.freeze(new d.AttributeData);let l=0;class m{constructor(n,g,f=!1){this.isWrapped=f,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*n);let u=g||_.CellData.fromCharData([0,a.NULL_CELL_CHAR,a.NULL_CELL_WIDTH,a.NULL_CELL_CODE]);for(let h=0;h<n;++h)this.setCell(h,u);this.length=n}get(n){let g=this._data[3*n+0],f=2097151&g;return[this._data[3*n+1],2097152&g?this._combined[n]:f?(0,b.stringFromCodePoint)(f):"",g>>22,2097152&g?this._combined[n].charCodeAt(this._combined[n].length-1):f]}set(n,g){this._data[3*n+1]=g[a.CHAR_DATA_ATTR_INDEX],g[a.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[n]=g[1],this._data[3*n+0]=2097152|n|g[a.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*n+0]=g[a.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|g[a.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(n){return this._data[3*n+0]>>22}hasWidth(n){return 12582912&this._data[3*n+0]}getFg(n){return this._data[3*n+1]}getBg(n){return this._data[3*n+2]}hasContent(n){return 4194303&this._data[3*n+0]}getCodePoint(n){let g=this._data[3*n+0];return 2097152&g?this._combined[n].charCodeAt(this._combined[n].length-1):2097151&g}isCombined(n){return 2097152&this._data[3*n+0]}getString(n){let g=this._data[3*n+0];return 2097152&g?this._combined[n]:2097151&g?(0,b.stringFromCodePoint)(2097151&g):""}isProtected(n){return 536870912&this._data[3*n+2]}loadCell(n,g){return l=3*n,g.content=this._data[l+0],g.fg=this._data[l+1],g.bg=this._data[l+2],2097152&g.content&&(g.combinedData=this._combined[n]),268435456&g.bg&&(g.extended=this._extendedAttrs[n]),g}setCell(n,g){2097152&g.content&&(this._combined[n]=g.combinedData),268435456&g.bg&&(this._extendedAttrs[n]=g.extended),this._data[3*n+0]=g.content,this._data[3*n+1]=g.fg,this._data[3*n+2]=g.bg}setCellFromCodepoint(n,g,f,u){268435456&u.bg&&(this._extendedAttrs[n]=u.extended),this._data[3*n+0]=g|f<<22,this._data[3*n+1]=u.fg,this._data[3*n+2]=u.bg}addCodepointToCell(n,g,f){let u=this._data[3*n+0];2097152&u?this._combined[n]+=(0,b.stringFromCodePoint)(g):2097151&u?(this._combined[n]=(0,b.stringFromCodePoint)(2097151&u)+(0,b.stringFromCodePoint)(g),u&=-2097152,u|=2097152):u=g|4194304,f&&(u&=-12582913,u|=f<<22),this._data[3*n+0]=u}insertCells(n,g,f){if((n%=this.length)&&this.getWidth(n-1)===2&&this.setCellFromCodepoint(n-1,0,1,f),g<this.length-n){let u=new _.CellData;for(let h=this.length-n-g-1;h>=0;--h)this.setCell(n+g+h,this.loadCell(n+h,u));for(let h=0;h<g;++h)this.setCell(n+h,f)}else for(let u=n;u<this.length;++u)this.setCell(u,f);this.getWidth(this.length-1)===2&&this.setCellFromCodepoint(this.length-1,0,1,f)}deleteCells(n,g,f){if(n%=this.length,g<this.length-n){let u=new _.CellData;for(let h=0;h<this.length-n-g;++h)this.setCell(n+h,this.loadCell(n+g+h,u));for(let h=this.length-g;h<this.length;++h)this.setCell(h,f)}else for(let u=n;u<this.length;++u)this.setCell(u,f);n&&this.getWidth(n-1)===2&&this.setCellFromCodepoint(n-1,0,1,f),this.getWidth(n)!==0||this.hasContent(n)||this.setCellFromCodepoint(n,0,1,f)}replaceCells(n,g,f,u=!1){if(u)for(n&&this.getWidth(n-1)===2&&!this.isProtected(n-1)&&this.setCellFromCodepoint(n-1,0,1,f),g<this.length&&this.getWidth(g-1)===2&&!this.isProtected(g)&&this.setCellFromCodepoint(g,0,1,f);n<g&&n<this.length;)this.isProtected(n)||this.setCell(n,f),n++;else for(n&&this.getWidth(n-1)===2&&this.setCellFromCodepoint(n-1,0,1,f),g<this.length&&this.getWidth(g-1)===2&&this.setCellFromCodepoint(g,0,1,f);n<g&&n<this.length;)this.setCell(n++,f)}resize(n,g){if(n===this.length)return 4*this._data.length*2<this._data.buffer.byteLength;let f=3*n;if(n>this.length){if(this._data.buffer.byteLength>=4*f)this._data=new Uint32Array(this._data.buffer,0,f);else{let u=new Uint32Array(f);u.set(this._data),this._data=u}for(let u=this.length;u<n;++u)this.setCell(u,g)}else{this._data=this._data.subarray(0,f);let u=Object.keys(this._combined);for(let y=0;y<u.length;y++){let T=parseInt(u[y],10);T>=n&&delete this._combined[T]}let h=Object.keys(this._extendedAttrs);for(let y=0;y<h.length;y++){let T=parseInt(h[y],10);T>=n&&delete this._extendedAttrs[T]}}return this.length=n,4*f*2<this._data.buffer.byteLength}cleanupMemory(){if(4*this._data.length*2<this._data.buffer.byteLength){let n=new Uint32Array(this._data.length);return n.set(this._data),this._data=n,1}return 0}fill(n,g=!1){if(g)for(let f=0;f<this.length;++f)this.isProtected(f)||this.setCell(f,n);else{this._combined={},this._extendedAttrs={};for(let f=0;f<this.length;++f)this.setCell(f,n)}}copyFrom(n){this.length!==n.length?this._data=new Uint32Array(n._data):this._data.set(n._data),this.length=n.length,this._combined={};for(let g in n._combined)this._combined[g]=n._combined[g];this._extendedAttrs={};for(let g in n._extendedAttrs)this._extendedAttrs[g]=n._extendedAttrs[g];this.isWrapped=n.isWrapped}clone(){let n=new m(0);n._data=new Uint32Array(this._data),n.length=this.length;for(let g in this._combined)n._combined[g]=this._combined[g];for(let g in this._extendedAttrs)n._extendedAttrs[g]=this._extendedAttrs[g];return n.isWrapped=this.isWrapped,n}getTrimmedLength(){for(let n=this.length-1;n>=0;--n)if(4194303&this._data[3*n+0])return n+(this._data[3*n+0]>>22);return 0}getNoBgTrimmedLength(){for(let n=this.length-1;n>=0;--n)if(4194303&this._data[3*n+0]||50331648&this._data[3*n+2])return n+(this._data[3*n+0]>>22);return 0}copyCellsFrom(n,g,f,u,h){let y=n._data;if(h)for(let C=u-1;C>=0;C--){for(let x=0;x<3;x++)this._data[3*(f+C)+x]=y[3*(g+C)+x];268435456&y[3*(g+C)+2]&&(this._extendedAttrs[f+C]=n._extendedAttrs[g+C])}else for(let C=0;C<u;C++){for(let x=0;x<3;x++)this._data[3*(f+C)+x]=y[3*(g+C)+x];268435456&y[3*(g+C)+2]&&(this._extendedAttrs[f+C]=n._extendedAttrs[g+C])}let T=Object.keys(n._combined);for(let C=0;C<T.length;C++){let x=parseInt(T[C],10);x>=g&&(this._combined[x-g+f]=n._combined[x])}}translateToString(n,g,f,u){g=g??0,f=f??this.length,n&&(f=Math.min(f,this.getTrimmedLength())),u&&(u.length=0);let h="";for(;g<f;){let y=this._data[3*g+0],T=2097151&y,C=2097152&y?this._combined[g]:T?(0,b.stringFromCodePoint)(T):a.WHITESPACE_CELL_CHAR;if(h+=C,u)for(let x=0;x<C.length;++x)u.push(g);g+=y>>22||1}return u&&u.push(g),h}}i.BufferLine=m},732:(k,i)=>{function c(d,_,a){if(_===d.length-1)return d[_].getTrimmedLength();let b=!d[_].hasContent(a-1)&&d[_].getWidth(a-1)===1,l=d[_+1].getWidth(0)===2;return b&&l?a-1:a}Object.defineProperty(i,"__esModule",{value:!0}),i.reflowLargerGetLinesToRemove=function(d,_,a,b,l,m){let w=[];for(let n=0;n<d.length-1;n++){let g=n,f=d.get(++g);if(!f.isWrapped)continue;let u=[d.get(n)];for(;g<d.length&&f.isWrapped;)u.push(f),f=d.get(++g);if(!m&&b>=n&&b<g){n+=u.length-1;continue}let h=0,y=c(u,h,_),T=1,C=0;for(;T<u.length;){let N=c(u,T,_),B=N-C,D=a-y,A=Math.min(B,D);u[h].copyCellsFrom(u[T],C,y,A,!1),y+=A,y===a&&(h++,y=0),C+=A,C===N&&(T++,C=0),y===0&&h!==0&&u[h-1].getWidth(a-1)===2&&(u[h].copyCellsFrom(u[h-1],a-1,y++,1,!1),u[h-1].setCell(a-1,l))}u[h].replaceCells(y,a,l);let x=0;for(let N=u.length-1;N>0&&(N>h||u[N].getTrimmedLength()===0);N--)x++;x>0&&(w.push(n+u.length-x),w.push(x)),n+=u.length-1}return w},i.reflowLargerCreateNewLayout=function(d,_){let a=[],b=0,l=_[b],m=0;for(let w=0;w<d.length;w++)if(l===w){let n=_[++b];d.onDeleteEmitter.fire({index:w-m,amount:n}),w+=n-1,m+=n,l=_[++b]}else a.push(w);return{layout:a,countRemoved:m}},i.reflowLargerApplyNewLayout=function(d,_){let a=[];for(let b=0;b<_.length;b++)a.push(d.get(_[b]));for(let b=0;b<a.length;b++)d.set(b,a[b]);d.length=_.length},i.reflowSmallerGetNewLineLengths=function(d,_,a){let b=[],l=d.map(((g,f)=>c(d,f,_))).reduce(((g,f)=>g+f)),m=0,w=0,n=0;for(;n<l;){if(l-n<a){b.push(l-n);break}m+=a;let g=c(d,w,_);m>g&&(m-=g,w++);let f=d[w].getWidth(m-1)===2;f&&m--;let u=f?a-1:a;b.push(u),n+=u}return b},i.getWrappedLineTrimmedLength=c},4097:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BufferSet=void 0;let d=c(7150),_=c(1073),a=c(802);class b extends d.Disposable{constructor(m,w){super(),this._optionsService=m,this._bufferService=w,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 _.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new _.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(m){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(m),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(m,w){this._normal.resize(m,w),this._alt.resize(m,w),this.setupTabStops(m)}setupTabStops(m){this._normal.setupTabStops(m),this._alt.setupTabStops(m)}}i.BufferSet=b},3055:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CellData=void 0;let d=c(726),_=c(8938),a=c(5451);class b extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.ExtendedAttrs,this.combinedData=""}static fromCharData(m){let w=new b;return w.setFromCharData(m),w}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,d.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(m){this.fg=m[_.CHAR_DATA_ATTR_INDEX],this.bg=0;let w=!1;if(m[_.CHAR_DATA_CHAR_INDEX].length>2)w=!0;else if(m[_.CHAR_DATA_CHAR_INDEX].length===2){let n=m[_.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=n&&n<=56319){let g=m[_.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=g&&g<=57343?this.content=1024*(n-55296)+g-56320+65536|m[_.CHAR_DATA_WIDTH_INDEX]<<22:w=!0}else w=!0}else this.content=m[_.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|m[_.CHAR_DATA_WIDTH_INDEX]<<22;w&&(this.combinedData=m[_.CHAR_DATA_CHAR_INDEX],this.content=2097152|m[_.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}i.CellData=b},8938:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.WHITESPACE_CELL_CODE=i.WHITESPACE_CELL_WIDTH=i.WHITESPACE_CELL_CHAR=i.NULL_CELL_CODE=i.NULL_CELL_WIDTH=i.NULL_CELL_CHAR=i.CHAR_DATA_CODE_INDEX=i.CHAR_DATA_WIDTH_INDEX=i.CHAR_DATA_CHAR_INDEX=i.CHAR_DATA_ATTR_INDEX=i.DEFAULT_EXT=i.DEFAULT_ATTR=i.DEFAULT_COLOR=void 0,i.DEFAULT_COLOR=0,i.DEFAULT_ATTR=i.DEFAULT_COLOR<<9|256,i.DEFAULT_EXT=0,i.CHAR_DATA_ATTR_INDEX=0,i.CHAR_DATA_CHAR_INDEX=1,i.CHAR_DATA_WIDTH_INDEX=2,i.CHAR_DATA_CODE_INDEX=3,i.NULL_CELL_CHAR="",i.NULL_CELL_WIDTH=1,i.NULL_CELL_CODE=0,i.WHITESPACE_CELL_CHAR=" ",i.WHITESPACE_CELL_WIDTH=1,i.WHITESPACE_CELL_CODE=32},8158:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Marker=void 0;let d=c(802),_=c(7150);class a{get id(){return this._id}constructor(l){this.line=l,this.isDisposed=!1,this._disposables=[],this._id=a._nextId++,this._onDispose=this.register(new d.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,_.dispose)(this._disposables),this._disposables.length=0)}register(l){return this._disposables.push(l),l}}i.Marker=a,a._nextId=1},6760:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.DEFAULT_CHARSET=i.CHARSETS=void 0,i.CHARSETS={},i.DEFAULT_CHARSET=i.CHARSETS.B,i.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"},i.CHARSETS.A={"#":"\xA3"},i.CHARSETS.B=void 0,i.CHARSETS[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"},i.CHARSETS.C=i.CHARSETS[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},i.CHARSETS.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"},i.CHARSETS.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"},i.CHARSETS.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"},i.CHARSETS.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"},i.CHARSETS.E=i.CHARSETS[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"},i.CHARSETS.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"},i.CHARSETS.H=i.CHARSETS[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},i.CHARSETS["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"}},3534:(k,i)=>{var c,d,_;Object.defineProperty(i,"__esModule",{value:!0}),i.C1_ESCAPED=i.C1=i.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=`
3
+ `;await o.writeFile(p,"utf8"),await o.sync(),await o.close(),await Ga(s,e)}catch(p){throw await o.close().catch(()=>{}),await Xa(s,{force:!0}).catch(()=>{}),p}}var We=$e(()=>{"use strict"});import{readFile as rc}from"node:fs/promises";async function Te(e){let t=await rc(e.indexFile,"utf8"),r=JSON.parse(t);return jr(r,e.workspaceRoot,e.indexFile)}async function it(e,t){let r={...t,workspaceRoot:e.workspaceRoot,updatedAt:new Date().toISOString()};await ue(e.indexFile,r)}function jr(e,t,r){if(!sc(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 sc(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 ot=$e(()=>{"use strict";We()});import{readFile as nc}from"node:fs/promises";async function he(e,t){let r=await nc(Hr(e,t),"utf8"),s=JSON.parse(r);return ic(s,Hr(e,t))}async function se(e,t){let r={...t,updatedAt:new Date().toISOString()};await ue(Hr(e,t.id),r)}async function Ur(e,t){let r=await Te(e);r.taskIds.includes(t)||await it(e,{...r,taskIds:[...r.taskIds,t]})}function Hr(e,t){return`${e.tasksDir}/${t}.json`}function ic(e,t){let r=oc(e);if(!cc(r))throw new Error(`Craig task record at ${t} is invalid. Remove or repair the file before rerunning Craig.`);return r}function oc(e){if(typeof e!="object"||e===null)return e;let t=e;return{...t,runner:qr(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:uc(t),bundlePath:typeof t.bundlePath=="string"||t.bundlePath===null?t.bundlePath:null,selectedRepoTargetId:typeof t.selectedRepoTargetId=="string"||t.selectedRepoTargetId===null?t.selectedRepoTargetId:null,repoTargets:lc(t.repoTargets),runnerSession:t.runnerSession??ac(t),checks:wc(t),lastCommit:t.lastCommit??null,prs:bc(t),artifacts:Sc(t),cleanup:Tc(t)}}function ac(e){if(typeof e.title!="string")return null;let t=qr(e.runner);return{command:we(t,e.title),pid:null,startedAt:null,lastKnownState:e.status==="running"?"running":"starting",exitCode:null,exitedAt:null}}function cc(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"&&gt(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"&&cn(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||dc(t.repoTargets))&&fc(t.runnerSession)&&pc(t.prompt)&&ln(t.checks)&&dn(t.lastCommit)&&mc(t.prs)&&_c(t.artifacts)&&hn(t.cleanup)&&(t.lastFailureReason===void 0||t.lastFailureReason===null||typeof t.lastFailureReason=="string")&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string"}function lc(e){if(Array.isArray(e))return e.filter(an)}function dc(e){return Array.isArray(e)&&e.every(an)}function an(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)&&ln(t.checks)&&dn(t.lastCommit)&&un(t.pullRequest)&&hn(t.cleanup)}function uc(e){if(cn(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 hc(e.id,e.title,t,qr(e.runner))}function hc(e,t,r,s){let o=ye(s);return[{id:`${e}:agent`,kind:"agent",title:o.defaultAgentTitle,command:we(s),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function qr(e){return e&&gt(e)?e:"codex"}function cn(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 fc(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 pc(e){return typeof e=="object"&&e!==null&&(e.source==="inline"||e.source==="file")&&typeof e.value=="string"}function ln(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 dn(e){return e===null||typeof e=="object"&&e!==null&&typeof e.sha=="string"&&typeof e.message=="string"&&typeof e.committedAt=="string"}function un(e){return typeof e=="object"&&e!==null&&e.provider==="github"&&gc(e.requiredChecks)}function gc(e){return Array.isArray(e)&&e.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))}function mc(e){return Array.isArray(e)&&e.every(un)}function _c(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 hn(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 wc(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 bc(e){if(Array.isArray(e.prs))return e.prs.map(kc);let t=e.pullRequest;return!t||!t.number?[]:[{provider:"github",owner:null,repo:null,number:t.number,url:t.url??null,title:null,status:fn(t.status),draft:!1,baseBranch:t.baseBranch??null,headBranch:t.headBranch??null,mergeable:t.mergeable??!1,mergeStateStatus:t.mergeStateStatus??null,reviewDecision:null,requiredChecks:pn(t.requiredChecks),comments:[],createdAt:null,updatedAt:null,mergedAt:null,lastSyncedAt:t.lastSyncedAt??null,lastSyncedHeadSha:t.lastSyncedHeadSha??null}]}function kc(e){let t=e??{};return{provider:"github",owner:t.owner??null,repo:t.repo??null,number:typeof t.number=="number"?t.number:null,url:t.url??null,title:t.title??null,status:fn(t.status),draft:t.draft??!1,baseBranch:t.baseBranch??null,headBranch:t.headBranch??null,mergeable:t.mergeable??!1,mergeStateStatus:t.mergeStateStatus??null,reviewDecision:yc(t.reviewDecision),requiredChecks:pn(t.requiredChecks),comments:vc(t.comments),createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,mergedAt:t.mergedAt??null,lastSyncedAt:t.lastSyncedAt??null,lastSyncedHeadSha:t.lastSyncedHeadSha??null}}function fn(e){return e==="open"||e==="closed"||e==="merged"||e==="draft"?e:null}function yc(e){return e==="APPROVED"||e==="CHANGES_REQUESTED"||e==="REVIEW_REQUIRED"?e:null}function vc(e){return Array.isArray(e)?e.flatMap(t=>{if(typeof t!="object"||t===null)return[];let r=t;return typeof r.body!="string"||!r.body.trim()?[]:[{author:typeof r.author=="string"?r.author:null,body:r.body,createdAt:typeof r.createdAt=="string"?r.createdAt:null,url:typeof r.url=="string"?r.url:null}]}):[]}function pn(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 Sc(e){let t=e.artifacts;return t?{...t,checkSummaryPath:t.checkSummaryPath??null}:{logPath:null,checkSummaryPath:null,prDraftPath:null,prStatusPath:null}}function Tc(e){return e.cleanup??{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}var Re=$e(()=>{"use strict";We();ot();Ae()});import{readFile as Rc}from"node:fs/promises";async function De(e){try{let t=await Rc(e.uiStateFile,"utf8"),r=JSON.parse(t);return Pc(r,e.uiStateFile)}catch(t){if(Ic(t))return null;throw t}}async function Pe(e,t){await ue(e.uiStateFile,{...t,updatedAt:new Date().toISOString()})}function je(){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 Pc(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")||!_t(e,"inputMode")||!_t(e,"focusedRegion")||!_t(e,"activeTab")||!_t(e,"inspectorSection")||!_t(e,"inspectionMode")||!Vt(e,"openInspectionKind")||!Vt(e,"selectedFileTreePath")||!Vt(e,"selectedFilePath")||!Vt(e,"selectedDiffPath")||!Cc(e,"collapsedFileTreePaths")||!_t(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 _t(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 Cc(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 wt=$e(()=>{"use strict";We()});import{execFile as xc}from"node:child_process";import{promisify as Ec}from"node:util";async function ee(e,t,r={}){try{let s=await gn(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr}}catch(s){if(mn(s)){let o=s.stderr?.trim()||s.stdout?.trim()||s.message;throw new Error(`${e} ${t.join(" ")} failed: ${o}`)}throw s}}async function oe(e,t,r={}){try{let s=await gn(e,t,{cwd:r.cwd,env:r.env});return{stdout:s.stdout,stderr:s.stderr,exitCode:0}}catch(s){if(mn(s))return{stdout:s.stdout??"",stderr:s.stderr??"",exitCode:typeof s.code=="number"?s.code:null};throw s}}function mn(e){return e instanceof Error}var gn,Ce=$e(()=>{"use strict";gn=Ec(xc)});import{readFile as zc,readdir as Gc,rm as Xc}from"node:fs/promises";import Pn from"node:path";async function Le(e,t){let r=await zc(Xt(e,t),"utf8"),s=JSON.parse(r);return Yc(s,Xt(e,t))}async function Yt(e,t){await ue(Xt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function lt(e){let t=await Gc(e.reposDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Le(e,Pn.basename(s.name,".json"))))).sort((s,o)=>s.name.localeCompare(o.name)||s.id.localeCompare(o.id))}async function Cn(e,t){await Xc(Xt(e,t),{force:!0})}function Xt(e,t){return Pn.join(e.reposDir,`${t}.json`)}function Yc(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 dt=$e(()=>{"use strict";We()});import{readFile as Qc,readdir as Jc,rm as Zc}from"node:fs/promises";import In from"node:path";async function Pt(e,t){let r=await Qc(Qt(e,t),"utf8"),s=JSON.parse(r);return el(s,Qt(e,t))}async function bt(e,t){await ue(Qt(e,t.id),{...t,updatedAt:new Date().toISOString()})}async function Me(e){let t=await Jc(e.workspacesDir,{withFileTypes:!0});return(await Promise.all(t.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>Pt(e,In.basename(s.name,".json"))))).sort((s,o)=>s.id.localeCompare(o.id))}async function xn(e,t){await Zc(Qt(e,t),{force:!0})}function Qt(e,t){return In.join(e.workspacesDir,`${t}.json`)}function el(e,t){let r=tl(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 tl(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 Ct=$e(()=>{"use strict";We()});async function He(e,t){let r=await Te(e),s=[],o=[];await Promise.all(r.taskIds.map(async i=>{try{s.push(await he(e,i))}catch(c){if(ll(c)){o.push(i);return}throw c}}));let k=(t?.includeClosed?s:s.filter(i=>i.status!=="closed")).filter(i=>!(t?.workspaceId&&i.workspaceId!==t.workspaceId||t?.repoId&&i.repoId!==t.repoId&&!(i.repoTargets??[]).some(c=>c.repoId===t.repoId)));return k.sort((i,c)=>i.id.localeCompare(c.id)),o.sort(),{kind:"listTasks",tasks:k,missingTaskIds:o,repoId:t?.repoId??null}}function ll(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}var Et=$e(()=>{"use strict";ot();Re()});var bi={};Ba(bi,{addWorkspace:()=>Lt,archiveWorkspace:()=>Mt,listWorkspaces:()=>us,removeWorkspace:()=>Ot,removeWorkspaceRecord:()=>cr,restoreWorkspace:()=>hs});import{readdir as zl,realpath as ui,stat as Gl}from"node:fs/promises";import Je from"node:path";async function Lt(e,t){let r=Je.resolve(e.workspaceRoot,t);if(!(await Gl(r).catch(()=>null))?.isDirectory())throw new Error(`Workspace path does not exist: ${r}`);return await mi(r)?Xl(e,r):Yl(e,r)}async function us(e,t){return{kind:"listWorkspaces",workspaces:(await Me(e)).filter(s=>s.status===(t.archived?"archived":"active")),archivedOnly:t.archived}}async function Mt(e,t){let s={...await Pt(e,t),status:"archived",archivedAt:new Date().toISOString()};return await bt(e,s),await wi(e,t),{kind:"archiveWorkspace",workspaceId:s.id,status:s.status,branch:s.branch}}async function hs(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??je(),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 Ot(e,t){let r=await Pt(e,t),s=await He(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 cr(e,t),await wi(e,t),{kind:"removeWorkspace",workspaceId:r.id,rootPath:r.rootPath??""}}async function Xl(e,t){let r=await _i(t),s=await lt(e),o=s.find(a=>a.rootPath===t)??null,p=o?fi(o,r):hi(s,t,r),k=`workspace_${p.id}`,c=(await Me(e)).find(a=>a.id===k)??null,d=new Date().toISOString(),_=c??{id:k,kind:"repo",name:p.name,rootPath:t,primaryRepoId:p.id,repoId:p.id,discoveredRepoIds:[p.id],branch:r,status:"active",linkedRepoIds:[],archivedAt:null,createdAt:d,updatedAt:d};return await Yt(e,p),c||await bt(e,_),await pi(e,{repoIds:[p.id],workspaceIds:[_.id]}),await gi(e,_,p.id),{kind:"createWorkspace",workspace:_,repos:[p],created:!c}}async function Yl(e,t){let r=await Ql(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=Zl(s,Je.basename(t)),p=s.find(d=>d.kind==="project"&&d.rootPath===t)??null,k=new Date().toISOString(),i=r.map(d=>d.id),c=p?{...p,discoveredRepoIds:i,primaryRepoId:i[0]??p.primaryRepoId,status:"active",archivedAt:null}:{id:o,kind:"project",name:Je.basename(t),rootPath:t,primaryRepoId:i[0]??"",discoveredRepoIds:i,branch:"project",status:"active",linkedRepoIds:i,archivedAt:null,createdAt:k,updatedAt:k};return await Promise.all(r.map(d=>Yt(e,d))),await bt(e,c),await pi(e,{repoIds:i,workspaceIds:[c.id]}),await gi(e,c,i[0]??null),{kind:"createWorkspace",workspace:c,repos:r,created:!p}}async function Ql(e,t){let r=await zl(t,{withFileTypes:!0}),s=await lt(e),o=[];for(let p of r){if(!p.isDirectory()||p.name.startsWith("."))continue;let k=Je.join(t,p.name);if(!await mi(k))continue;let i=s.find(d=>d.rootPath===k)??o.find(d=>d.rootPath===k),c=await _i(k);o.push(i?fi(i,c):hi([...s,...o],k,c))}return o.sort((p,k)=>p.name.localeCompare(k.name)||p.id.localeCompare(k.id))}function hi(e,t,r){let s=new Date().toISOString();return{id:Jl(e,Je.basename(t)),name:Je.basename(t),rootPath:t,defaultBranch:r,createdAt:s,updatedAt:s}}function fi(e,t){return e.defaultBranch===t?e:{...e,defaultBranch:t,updatedAt:new Date().toISOString()}}function Jl(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"repo",s=`repo_${r}`,o=2;for(;e.some(p=>p.id===s);)s=`repo_${r}_${o}`,o+=1;return s}function Zl(e,t){let r=t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")||"workspace",s=`workspace_${r}`,o=2;for(;e.some(p=>p.id===s);)s=`workspace_${r}_${o}`,o+=1;return s}async function pi(e,t){let r=await Te(e);await it(e,{...r,repoIds:[...new Set([...r.repoIds,...t.repoIds])],workspaceIds:[...new Set([...r.workspaceIds,...t.workspaceIds])]})}async function gi(e,t,r){await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??je(),selectedRepoId:r,selectedWorkspaceId:t.id,selectedTaskId:null})}async function mi(e){try{let r=(await ee("git",["rev-parse","--show-toplevel"],{cwd:e})).stdout.trim(),[s,o]=await Promise.all([ui(r).catch(()=>Je.resolve(r)),ui(e).catch(()=>Je.resolve(e))]);return s===o}catch{return!1}}async function _i(e){let t=await oe("git",["symbolic-ref","--quiet","--short","refs/remotes/origin/HEAD"],{cwd:e}),r=t.stdout.trim().replace(/^origin\//,"");if(t.exitCode===0&&r.length>0)return r;for(let p of["main","master","trunk"])if((await oe("git",["show-ref","--verify","--quiet",`refs/heads/${p}`],{cwd:e})).exitCode===0)return p;let o=(await ee("git",["branch","--show-current"],{cwd:e})).stdout.trim();return o.length>0?o:"HEAD"}async function cr(e,t){await xn(e,t);let r=await Te(e);await it(e,{...r,workspaceIds:r.workspaceIds.filter(s=>s!==t)})}async function wi(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 Bt=$e(()=>{"use strict";ot();dt();Ct();wt();Ce();Et()});var Eo=Oa(xo=>{(()=>{"use strict";var e={5639:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CircularList=void 0;let d=c(7150),_=c(802);class a extends d.Disposable{constructor(l){super(),this._maxLength=l,this.onDeleteEmitter=this._register(new _.Emitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this._register(new _.Emitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this._register(new _.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(l){if(this._maxLength===l)return;let m=new Array(l);for(let w=0;w<Math.min(l,this.length);w++)m[w]=this._array[this._getCyclicIndex(w)];this._array=m,this._maxLength=l,this._startIndex=0}get length(){return this._length}set length(l){if(l>this._length)for(let m=this._length;m<l;m++)this._array[m]=void 0;this._length=l}get(l){return this._array[this._getCyclicIndex(l)]}set(l,m){this._array[this._getCyclicIndex(l)]=m}push(l){this._array[this._getCyclicIndex(this._length)]=l,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(l,m,...w){if(m){for(let n=l;n<this._length-m;n++)this._array[this._getCyclicIndex(n)]=this._array[this._getCyclicIndex(n+m)];this._length-=m,this.onDeleteEmitter.fire({index:l,amount:m})}for(let n=this._length-1;n>=l;n--)this._array[this._getCyclicIndex(n+w.length)]=this._array[this._getCyclicIndex(n)];for(let n=0;n<w.length;n++)this._array[this._getCyclicIndex(l+n)]=w[n];if(w.length&&this.onInsertEmitter.fire({index:l,amount:w.length}),this._length+w.length>this._maxLength){let n=this._length+w.length-this._maxLength;this._startIndex+=n,this._length=this._maxLength,this.onTrimEmitter.fire(n)}else this._length+=w.length}trimStart(l){l>this._length&&(l=this._length),this._startIndex+=l,this._length-=l,this.onTrimEmitter.fire(l)}shiftElements(l,m,w){if(!(m<=0)){if(l<0||l>=this._length)throw new Error("start argument out of range");if(l+w<0)throw new Error("Cannot shift elements in list beyond index 0");if(w>0){for(let g=m-1;g>=0;g--)this.set(l+g+w,this.get(l+g));let n=l+m+w-this._length;if(n>0)for(this._length+=n;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let n=0;n<m;n++)this.set(l+n+w,this.get(l+n))}}_getCyclicIndex(l){return(this._startIndex+l)%this._maxLength}}i.CircularList=a},7453:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.clone=function c(d,_=5){if(typeof d!="object")return d;let a=Array.isArray(d)?[]:{};for(let b in d)a[b]=_<=1?d[b]:d[b]&&c(d[b],_-1);return a}},5777:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CoreTerminal=void 0;let d=c(6501),_=c(6025),a=c(7276),b=c(9640),l=c(56),m=c(4071),w=c(7792),n=c(6415),g=c(5746),f=c(5882),u=c(2486),h=c(3562),y=c(8811),T=c(802),C=c(7150),x=!1;class N extends C.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this._register(new T.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 A in D)this.optionsService.options[A]=D[A]}constructor(D){super(),this._windowsWrappingHeuristics=this._register(new C.MutableDisposable),this._onBinary=this._register(new T.Emitter),this.onBinary=this._onBinary.event,this._onData=this._register(new T.Emitter),this.onData=this._onData.event,this._onLineFeed=this._register(new T.Emitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this._register(new T.Emitter),this.onResize=this._onResize.event,this._onWriteParsed=this._register(new T.Emitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this._register(new T.Emitter),this._instantiationService=new _.InstantiationService,this.optionsService=this._register(new l.OptionsService(D)),this._instantiationService.setService(d.IOptionsService,this.optionsService),this._bufferService=this._register(this._instantiationService.createInstance(b.BufferService)),this._instantiationService.setService(d.IBufferService,this._bufferService),this._logService=this._register(this._instantiationService.createInstance(a.LogService)),this._instantiationService.setService(d.ILogService,this._logService),this.coreService=this._register(this._instantiationService.createInstance(m.CoreService)),this._instantiationService.setService(d.ICoreService,this.coreService),this.coreMouseService=this._register(this._instantiationService.createInstance(w.CoreMouseService)),this._instantiationService.setService(d.ICoreMouseService,this.coreMouseService),this.unicodeService=this._register(this._instantiationService.createInstance(n.UnicodeService)),this._instantiationService.setService(d.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(g.CharsetService),this._instantiationService.setService(d.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(y.OscLinkService),this._instantiationService.setService(d.IOscLinkService,this._oscLinkService),this._inputHandler=this._register(new u.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this._register(T.Event.forward(this._inputHandler.onLineFeed,this._onLineFeed)),this._register(this._inputHandler),this._register(T.Event.forward(this._bufferService.onResize,this._onResize)),this._register(T.Event.forward(this.coreService.onData,this._onData)),this._register(T.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 h.WriteBuffer(((A,E)=>this._inputHandler.parse(A,E)))),this._register(T.Event.forward(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(D,A){this._writeBuffer.write(D,A)}writeSync(D,A){this._logService.logLevel<=d.LogLevelEnum.WARN&&!x&&(this._logService.warn("writeSync is unreliable and will be removed soon."),x=!0),this._writeBuffer.writeSync(D,A)}input(D,A=!0){this.coreService.triggerDataEvent(D,A)}resize(D,A){isNaN(D)||isNaN(A)||(D=Math.max(D,b.MINIMUM_COLS),A=Math.max(A,b.MINIMUM_ROWS),this._bufferService.resize(D,A))}scroll(D,A=!1){this._bufferService.scroll(D,A)}scrollLines(D,A){this._bufferService.scrollLines(D,A)}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 A=D-this._bufferService.buffer.ydisp;A!==0&&this.scrollLines(A)}registerEscHandler(D,A){return this._inputHandler.registerEscHandler(D,A)}registerDcsHandler(D,A){return this._inputHandler.registerDcsHandler(D,A)}registerCsiHandler(D,A){return this._inputHandler.registerCsiHandler(D,A)}registerOscHandler(D,A){return this._inputHandler.registerOscHandler(D,A)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let D=!1,A=this.optionsService.rawOptions.windowsPty;A&&A.buildNumber!==void 0&&A.buildNumber!==void 0?D=A.backend==="conpty"&&A.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(f.updateWindowsModeWrappedState.bind(null,this._bufferService))),D.push(this.registerCsiHandler({final:"H"},(()=>((0,f.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,C.toDisposable)((()=>{for(let A of D)A.dispose()}))}}}i.CoreTerminal=N},2486:function(k,i,c){var d=this&&this.__decorate||function(H,v,P,S){var R,$=arguments.length,W=$<3?v:S===null?S=Object.getOwnPropertyDescriptor(v,P):S;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")W=Reflect.decorate(H,v,P,S);else for(var U=H.length-1;U>=0;U--)(R=H[U])&&(W=($<3?R(W):$>3?R(v,P,W):R(v,P))||W);return $>3&&W&&Object.defineProperty(v,P,W),W},_=this&&this.__param||function(H,v){return function(P,S){v(P,S,H)}};Object.defineProperty(i,"__esModule",{value:!0}),i.InputHandler=i.WindowsOptionsReportType=void 0,i.isValidColorIndex=F;let a=c(3534),b=c(6760),l=c(6717),m=c(7150),w=c(726),n=c(6107),g=c(8938),f=c(3055),u=c(5451),h=c(6501),y=c(6415),T=c(1346),C=c(9823),x=c(8693),N=c(802),B={"(":0,")":1,"*":2,"+":3,"-":1,".":2},D=131072;function A(H,v){if(H>24)return v.setWinLines||!1;switch(H){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 E;(function(H){H[H.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",H[H.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(E||(i.WindowsOptionsReportType=E={}));let q=0;class K extends m.Disposable{getAttrData(){return this._curAttrData}constructor(v,P,S,R,$,W,U,V,te=new l.EscapeSequenceParser){super(),this._bufferService=v,this._charsetService=P,this._coreService=S,this._logService=R,this._optionsService=$,this._oscLinkService=W,this._coreMouseService=U,this._unicodeService=V,this._parser=te,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new w.StringToUtf32,this._utf8Decoder=new w.Utf8ToUtf32,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=n.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=n.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this._register(new N.Emitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this._register(new N.Emitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this._register(new N.Emitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this._register(new N.Emitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this._register(new N.Emitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this._register(new N.Emitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this._register(new N.Emitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this._register(new N.Emitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this._register(new N.Emitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this._register(new N.Emitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this._register(new N.Emitter),this.onScroll=this._onScroll.event,this._onTitleChange=this._register(new N.Emitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this._register(new N.Emitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this._register(this._parser),this._dirtyRowTracker=new Y(this._bufferService),this._activeBuffer=this._bufferService.buffer,this._register(this._bufferService.buffers.onBufferActivate((I=>this._activeBuffer=I.activeBuffer))),this._parser.setCsiHandlerFallback(((I,Q)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(I),params:Q.toArray()})})),this._parser.setEscHandlerFallback((I=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(I)})})),this._parser.setExecuteHandlerFallback((I=>{this._logService.debug("Unknown EXECUTE code: ",{code:I})})),this._parser.setOscHandlerFallback(((I,Q,z)=>{this._logService.debug("Unknown OSC code: ",{identifier:I,action:Q,data:z})})),this._parser.setDcsHandlerFallback(((I,Q,z)=>{Q==="HOOK"&&(z=z.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(I),action:Q,payload:z})})),this._parser.setPrintHandler(((I,Q,z)=>this.print(I,Q,z))),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 T.OscHandler((I=>(this.setTitle(I),this.setIconName(I),!0)))),this._parser.registerOscHandler(1,new T.OscHandler((I=>this.setIconName(I)))),this._parser.registerOscHandler(2,new T.OscHandler((I=>this.setTitle(I)))),this._parser.registerOscHandler(4,new T.OscHandler((I=>this.setOrReportIndexedColor(I)))),this._parser.registerOscHandler(8,new T.OscHandler((I=>this.setHyperlink(I)))),this._parser.registerOscHandler(10,new T.OscHandler((I=>this.setOrReportFgColor(I)))),this._parser.registerOscHandler(11,new T.OscHandler((I=>this.setOrReportBgColor(I)))),this._parser.registerOscHandler(12,new T.OscHandler((I=>this.setOrReportCursorColor(I)))),this._parser.registerOscHandler(104,new T.OscHandler((I=>this.restoreIndexedColor(I)))),this._parser.registerOscHandler(110,new T.OscHandler((I=>this.restoreFgColor(I)))),this._parser.registerOscHandler(111,new T.OscHandler((I=>this.restoreBgColor(I)))),this._parser.registerOscHandler(112,new T.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 b.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 C.DcsHandler(((I,Q)=>this.requestStatusString(I,Q))))}_preserveStack(v,P,S,R){this._parseStack.paused=!0,this._parseStack.cursorStartX=v,this._parseStack.cursorStartY=P,this._parseStack.decodedLength=S,this._parseStack.position=R}_logSlowResolvingAsync(v){this._logService.logLevel<=h.LogLevelEnum.WARN&&Promise.race([v,new Promise(((P,S)=>setTimeout((()=>S("#SLOW_TIMEOUT")),5e3)))]).catch((P=>{if(P!=="#SLOW_TIMEOUT")throw P;console.warn("async parser handler taking longer than 5000 ms")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(v,P){let S,R=this._activeBuffer.x,$=this._activeBuffer.y,W=0,U=this._parseStack.paused;if(U){if(S=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,P))return this._logSlowResolvingAsync(S),S;R=this._parseStack.cursorStartX,$=this._parseStack.cursorStartY,this._parseStack.paused=!1,v.length>D&&(W=this._parseStack.position+D)}if(this._logService.logLevel<=h.LogLevelEnum.DEBUG&&this._logService.debug("parsing data "+(typeof v=="string"?` "${v}"`:` "${Array.prototype.map.call(v,(I=>String.fromCharCode(I))).join("")}"`)),this._logService.logLevel===h.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=W;I<v.length;I+=D){let Q=I+D<v.length?I+D:v.length,z=typeof v=="string"?this._stringDecoder.decode(v.substring(I,Q),this._parseBuffer):this._utf8Decoder.decode(v.subarray(I,Q),this._parseBuffer);if(S=this._parser.parse(this._parseBuffer,z))return this._preserveStack(R,$,z,I),this._logSlowResolvingAsync(S),S}else if(!U){let I=typeof v=="string"?this._stringDecoder.decode(v,this._parseBuffer):this._utf8Decoder.decode(v,this._parseBuffer);if(S=this._parser.parse(this._parseBuffer,I))return this._preserveStack(R,$,I,0),this._logSlowResolvingAsync(S),S}this._activeBuffer.x===R&&this._activeBuffer.y===$||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,P,S){let R,$,W=this._charsetService.charset,U=this._optionsService.rawOptions.screenReaderMode,V=this._bufferService.cols,te=this._coreService.decPrivateModes.wraparound,I=this._coreService.modes.insertMode,Q=this._curAttrData,z=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._activeBuffer.x&&S-P>0&&z.getWidth(this._activeBuffer.x-1)===2&&z.setCellFromCodepoint(this._activeBuffer.x-1,0,1,Q);let J=this._parser.precedingJoinState;for(let ge=P;ge<S;++ge){if(R=v[ge],R<127&&W){let Ke=W[String.fromCharCode(R)];Ke&&(R=Ke.charCodeAt(0))}let _e=this._unicodeService.charProperties(R,J);$=y.UnicodeService.extractWidth(_e);let Ye=y.UnicodeService.extractShouldJoin(_e),xe=Ye?y.UnicodeService.extractWidth(J):0;if(J=_e,U&&this._onA11yChar.fire((0,w.stringFromCodePoint)(R)),this._getCurrentLinkId()&&this._oscLinkService.addLineToLink(this._getCurrentLinkId(),this._activeBuffer.ybase+this._activeBuffer.y),this._activeBuffer.x+$-xe>V){if(te){let Ke=z,rt=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),z=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y),xe>0&&z instanceof n.BufferLine&&z.copyCellsFrom(Ke,rt,0,xe,!1);rt<V;)Ke.setCellFromCodepoint(rt++,0,1,Q)}else if(this._activeBuffer.x=V-1,$===2)continue}if(Ye&&this._activeBuffer.x){let Ke=z.getWidth(this._activeBuffer.x-1)?1:2;z.addCodepointToCell(this._activeBuffer.x-Ke,R,$);for(let rt=$-xe;--rt>=0;)z.setCellFromCodepoint(this._activeBuffer.x++,0,0,Q)}else if(I&&(z.insertCells(this._activeBuffer.x,$-xe,this._activeBuffer.getNullCell(Q)),z.getWidth(V-1)===2&&z.setCellFromCodepoint(V-1,g.NULL_CELL_CODE,g.NULL_CELL_WIDTH,Q)),z.setCellFromCodepoint(this._activeBuffer.x++,R,$,Q),$>0)for(;--$;)z.setCellFromCodepoint(this._activeBuffer.x++,0,0,Q)}this._parser.precedingJoinState=J,this._activeBuffer.x<V&&S-P>0&&z.getWidth(this._activeBuffer.x)===0&&!z.hasContent(this._activeBuffer.x)&&z.setCellFromCodepoint(this._activeBuffer.x,0,1,Q),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(v,P){return v.final!=="t"||v.prefix||v.intermediates?this._parser.registerCsiHandler(v,P):this._parser.registerCsiHandler(v,(S=>!A(S.params[0],this._optionsService.rawOptions.windowOptions)||P(S)))}registerDcsHandler(v,P){return this._parser.registerDcsHandler(v,new C.DcsHandler(P))}registerEscHandler(v,P){return this._parser.registerEscHandler(v,P)}registerOscHandler(v,P){return this._parser.registerOscHandler(v,new T.OscHandler(P))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)?.isWrapped){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;let 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,P){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=v,this._activeBuffer.y=this._activeBuffer.scrollTop+P):(this._activeBuffer.x=v,this._activeBuffer.y=P),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(v,P){this._restrictCursor(),this._setCursor(this._activeBuffer.x+v,this._activeBuffer.y+P)}cursorUp(v){let P=this._activeBuffer.y-this._activeBuffer.scrollTop;return P>=0?this._moveCursor(0,-Math.min(P,v.params[0]||1)):this._moveCursor(0,-(v.params[0]||1)),!0}cursorDown(v){let P=this._activeBuffer.scrollBottom-this._activeBuffer.y;return P>=0?this._moveCursor(0,Math.min(P,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 P=v.params[0];return P===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:P===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let P=v.params[0]||1;for(;P--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(v){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let P=v.params[0]||1;for(;P--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(v){let P=v.params[0];return P===1&&(this._curAttrData.bg|=536870912),P!==2&&P!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(v,P,S,R=!1,$=!1){let W=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);W.replaceCells(P,S,this._activeBuffer.getNullCell(this._eraseAttrData()),$),R&&(W.isWrapped=!1)}_resetBufferLine(v,P=!1){let S=this._activeBuffer.lines.get(this._activeBuffer.ybase+v);S&&(S.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),P),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+v),S.isWrapped=!1)}eraseInDisplay(v,P=!1){let S;switch(this._restrictCursor(this._bufferService.cols),v.params[0]){case 0:for(S=this._activeBuffer.y,this._dirtyRowTracker.markDirty(S),this._eraseInBufferLine(S++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,P);S<this._bufferService.rows;S++)this._resetBufferLine(S,P);this._dirtyRowTracker.markDirty(S);break;case 1:for(S=this._activeBuffer.y,this._dirtyRowTracker.markDirty(S),this._eraseInBufferLine(S,0,this._activeBuffer.x+1,!0,P),this._activeBuffer.x+1>=this._bufferService.cols&&(this._activeBuffer.lines.get(S+1).isWrapped=!1);S--;)this._resetBufferLine(S,P);this._dirtyRowTracker.markDirty(0);break;case 2:if(this._optionsService.rawOptions.scrollOnEraseInDisplay){for(S=this._bufferService.rows,this._dirtyRowTracker.markRangeDirty(0,S-1);S--&&!this._activeBuffer.lines.get(this._activeBuffer.ybase+S)?.getTrimmedLength(););for(;S>=0;S--)this._bufferService.scroll(this._eraseAttrData())}else{for(S=this._bufferService.rows,this._dirtyRowTracker.markDirty(S-1);S--;)this._resetBufferLine(S,P);this._dirtyRowTracker.markDirty(0)}break;case 3:let R=this._activeBuffer.lines.length-this._bufferService.rows;R>0&&(this._activeBuffer.lines.trimStart(R),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-R,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-R,0),this._onScroll.fire(0))}return!0}eraseInLine(v,P=!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,P);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,P);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,P)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(v){this._restrictCursor();let P=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let S=this._activeBuffer.ybase+this._activeBuffer.y,R=this._bufferService.rows-1-this._activeBuffer.scrollBottom,$=this._bufferService.rows-1+this._activeBuffer.ybase-R+1;for(;P--;)this._activeBuffer.lines.splice($-1,1),this._activeBuffer.lines.splice(S,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 P=v.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let S=this._activeBuffer.ybase+this._activeBuffer.y,R;for(R=this._bufferService.rows-1-this._activeBuffer.scrollBottom,R=this._bufferService.rows-1+this._activeBuffer.ybase-R;P--;)this._activeBuffer.lines.splice(S,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 P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.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 P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.deleteCells(this._activeBuffer.x,v.params[0]||1,this._activeBuffer.getNullCell(this._eraseAttrData())),this._dirtyRowTracker.markDirty(this._activeBuffer.y)),!0}scrollUp(v){let P=v.params[0]||1;for(;P--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,0,this._activeBuffer.getBlankLine(this._eraseAttrData()));return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}scrollDown(v){let P=v.params[0]||1;for(;P--;)this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollBottom,1),this._activeBuffer.lines.splice(this._activeBuffer.ybase+this._activeBuffer.scrollTop,0,this._activeBuffer.getBlankLine(n.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 P=v.params[0]||1;for(let S=this._activeBuffer.scrollTop;S<=this._activeBuffer.scrollBottom;++S){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+S);R.deleteCells(0,P,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 P=v.params[0]||1;for(let S=this._activeBuffer.scrollTop;S<=this._activeBuffer.scrollBottom;++S){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+S);R.insertCells(0,P,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 P=v.params[0]||1;for(let S=this._activeBuffer.scrollTop;S<=this._activeBuffer.scrollBottom;++S){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+S);R.insertCells(this._activeBuffer.x,P,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}deleteColumns(v){if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.y<this._activeBuffer.scrollTop)return!0;let P=v.params[0]||1;for(let S=this._activeBuffer.scrollTop;S<=this._activeBuffer.scrollBottom;++S){let R=this._activeBuffer.lines.get(this._activeBuffer.ybase+S);R.deleteCells(this._activeBuffer.x,P,this._activeBuffer.getNullCell(this._eraseAttrData())),R.isWrapped=!1}return this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom),!0}eraseChars(v){this._restrictCursor();let P=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);return P&&(P.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 P=this._parser.precedingJoinState;if(!P)return!0;let S=v.params[0]||1,R=y.UnicodeService.extractWidth(P),$=this._activeBuffer.x-R,W=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).getString($),U=new Uint32Array(W.length*S),V=0;for(let I=0;I<W.length;){let Q=W.codePointAt(I)||0;U[V++]=Q,I+=Q>65535?2:1}let te=V;for(let I=1;I<S;++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 P=0;P<v.length;P++)switch(v.params[P]){case 4:this._coreService.modes.insertMode=!0;break;case 20:this._optionsService.options.convertEol=!0}return!0}setModePrivate(v){for(let P=0;P<v.length;P++)switch(v.params[P]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!0;break;case 2:this._charsetService.setgCharset(0,b.DEFAULT_CHARSET),this._charsetService.setgCharset(1,b.DEFAULT_CHARSET),this._charsetService.setgCharset(2,b.DEFAULT_CHARSET),this._charsetService.setgCharset(3,b.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 P=0;P<v.length;P++)switch(v.params[P]){case 4:this._coreService.modes.insertMode=!1;break;case 20:this._optionsService.options.convertEol=!1}return!0}resetModePrivate(v){for(let P=0;P<v.length;P++)switch(v.params[P]){case 1:this._coreService.decPrivateModes.applicationCursorKeys=!1;break;case 3:this._optionsService.rawOptions.windowOptions.setWinLines&&(this._bufferService.resize(80,this._bufferService.rows),this._onRequestReset.fire());break;case 6:this._coreService.decPrivateModes.origin=!1,this._setCursor(0,0);break;case 7:this._coreService.decPrivateModes.wraparound=!1;break;case 12:this._optionsService.options.cursorBlink=!1;break;case 45:this._coreService.decPrivateModes.reverseWraparound=!1;break;case 66:this._logService.debug("Switching back to normal keypad."),this._coreService.decPrivateModes.applicationKeypad=!1,this._onRequestSyncScrollBar.fire();break;case 9:case 1e3:case 1002:case 1003:this._coreMouseService.activeProtocol="NONE";break;case 1004:this._coreService.decPrivateModes.sendFocus=!1;break;case 1005:this._logService.debug("DECRST 1005 not supported (see #2507)");break;case 1006:case 1016:this._coreMouseService.activeEncoding="DEFAULT";break;case 1015:this._logService.debug("DECRST 1015 not supported (see #2507)");break;case 25:this._coreService.isCursorHidden=!0;break;case 1048:this.restoreCursor();break;case 1049:case 47:case 1047:this._bufferService.buffers.activateNormalBuffer(),v.params[P]===1049&&this.restoreCursor(),this._coreService.isCursorInitialized=!0,this._onRequestRefreshRows.fire(void 0),this._onRequestSyncScrollBar.fire();break;case 2004:this._coreService.decPrivateModes.bracketedPasteMode=!1;break;case 2026:this._coreService.decPrivateModes.synchronizedOutput=!1,this._onRequestRefreshRows.fire(void 0)}return!0}requestMode(v,P){let S=this._coreService.decPrivateModes,{activeProtocol:R,activeEncoding:$}=this._coreMouseService,W=this._coreService,{buffers:U,cols:V}=this._bufferService,{active:te,alt:I}=U,Q=this._optionsService.rawOptions,z=Ye=>Ye?1:2,J=v.params[0];return ge=J,_e=P?J===2?4:J===4?z(W.modes.insertMode):J===12?3:J===20?z(Q.convertEol):0:J===1?z(S.applicationCursorKeys):J===3?Q.windowOptions.setWinLines?V===80?2:V===132?1:0:0:J===6?z(S.origin):J===7?z(S.wraparound):J===8?3:J===9?z(R==="X10"):J===12?z(Q.cursorBlink):J===25?z(!W.isCursorHidden):J===45?z(S.reverseWraparound):J===66?z(S.applicationKeypad):J===67?4:J===1e3?z(R==="VT200"):J===1002?z(R==="DRAG"):J===1003?z(R==="ANY"):J===1004?z(S.sendFocus):J===1005?4:J===1006?z($==="SGR"):J===1015?4:J===1016?z($==="SGR_PIXELS"):J===1048?1:J===47||J===1047||J===1049?z(te===I):J===2004?z(S.bracketedPasteMode):J===2026?z(S.synchronizedOutput):0,W.triggerDataEvent(`${a.C0.ESC}[${P?"":"?"}${ge};${_e}$y`),!0;var ge,_e}_updateAttrColor(v,P,S,R,$){return P===2?(v|=50331648,v&=-16777216,v|=u.AttributeData.fromColorRGB([S,R,$])):P===5&&(v&=-50331904,v|=33554432|255&S),v}_extractColor(v,P,S){let R=[0,0,-1,0,0,0],$=0,W=0;do{if(R[W+$]=v.params[P+W],v.hasSubParams(P+W)){let U=v.getSubParams(P+W),V=0;do R[1]===5&&($=1),R[W+V+1+$]=U[V];while(++V<U.length&&V+W+1+$<R.length);break}if(R[1]===5&&W+$>=2||R[1]===2&&W+$>=5)break;R[1]&&($=1)}while(++W+P<v.length&&W+$<R.length);for(let U=2;U<R.length;++U)R[U]===-1&&(R[U]=0);switch(R[0]){case 38:S.fg=this._updateAttrColor(S.fg,R[1],R[3],R[4],R[5]);break;case 48:S.bg=this._updateAttrColor(S.bg,R[1],R[3],R[4],R[5]);break;case 58:S.extended=S.extended.clone(),S.extended.underlineColor=this._updateAttrColor(S.extended.underlineColor,R[1],R[3],R[4],R[5])}return W}_processUnderline(v,P){P.extended=P.extended.clone(),(!~v||v>5)&&(v=1),P.extended.underlineStyle=v,P.fg|=268435456,v===0&&(P.fg&=-268435457),P.updateExtended()}_processSGR0(v){v.fg=n.DEFAULT_ATTR_DATA.fg,v.bg=n.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 P=v.length,S,R=this._curAttrData;for(let $=0;$<P;$++)S=v.params[$],S>=30&&S<=37?(R.fg&=-50331904,R.fg|=16777216|S-30):S>=40&&S<=47?(R.bg&=-50331904,R.bg|=16777216|S-40):S>=90&&S<=97?(R.fg&=-50331904,R.fg|=16777224|S-90):S>=100&&S<=107?(R.bg&=-50331904,R.bg|=16777224|S-100):S===0?this._processSGR0(R):S===1?R.fg|=134217728:S===3?R.bg|=67108864:S===4?(R.fg|=268435456,this._processUnderline(v.hasSubParams($)?v.getSubParams($)[0]:1,R)):S===5?R.fg|=536870912:S===7?R.fg|=67108864:S===8?R.fg|=1073741824:S===9?R.fg|=2147483648:S===2?R.bg|=134217728:S===21?this._processUnderline(2,R):S===22?(R.fg&=-134217729,R.bg&=-134217729):S===23?R.bg&=-67108865:S===24?(R.fg&=-268435457,this._processUnderline(0,R)):S===25?R.fg&=-536870913:S===27?R.fg&=-67108865:S===28?R.fg&=-1073741825:S===29?R.fg&=2147483647:S===39?(R.fg&=-67108864,R.fg|=16777215&n.DEFAULT_ATTR_DATA.fg):S===49?(R.bg&=-67108864,R.bg|=16777215&n.DEFAULT_ATTR_DATA.bg):S===38||S===48||S===58?$+=this._extractColor(v,$,R):S===53?R.bg|=1073741824:S===55?R.bg&=-1073741825:S===59?(R.extended=R.extended.clone(),R.extended.underlineColor=-1,R.updateExtended()):S===100?(R.fg&=-67108864,R.fg|=16777215&n.DEFAULT_ATTR_DATA.fg,R.bg&=-67108864,R.bg|=16777215&n.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",S);return!0}deviceStatus(v){switch(v.params[0]){case 5:this._coreService.triggerDataEvent(`${a.C0.ESC}[0n`);break;case 6:let P=this._activeBuffer.y+1,S=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[${P};${S}R`)}return!0}deviceStatusPrivate(v){if(v.params[0]===6){let P=this._activeBuffer.y+1,S=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${a.C0.ESC}[?${P};${S}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=n.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 P=v.length===0?1:v.params[0];if(P===0)this._coreService.decPrivateModes.cursorStyle=void 0,this._coreService.decPrivateModes.cursorBlink=void 0;else{switch(P){case 1:case 2:this._coreService.decPrivateModes.cursorStyle="block";break;case 3:case 4:this._coreService.decPrivateModes.cursorStyle="underline";break;case 5:case 6:this._coreService.decPrivateModes.cursorStyle="bar"}let S=P%2==1;this._coreService.decPrivateModes.cursorBlink=S}return!0}setScrollRegion(v){let P=v.params[0]||1,S;return(v.length<2||(S=v.params[1])>this._bufferService.rows||S===0)&&(S=this._bufferService.rows),S>P&&(this._activeBuffer.scrollTop=P-1,this._activeBuffer.scrollBottom=S-1,this._setCursor(0,0)),!0}windowOptions(v){if(!A(v.params[0],this._optionsService.rawOptions.windowOptions))return!0;let P=v.length>1?v.params[1]:0;switch(v.params[0]){case 14:P!==2&&this._onRequestWindowsOptionsReport.fire(E.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(E.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:P!==0&&P!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),P!==0&&P!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:P!==0&&P!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),P!==0&&P!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(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 P=[],S=v.split(";");for(;S.length>1;){let R=S.shift(),$=S.shift();if(/^\d+$/.exec(R)){let W=parseInt(R);if(F(W))if($==="?")P.push({type:0,index:W});else{let U=(0,x.parseColor)($);U&&P.push({type:1,index:W,color:U})}}}return P.length&&this._onColor.fire(P),!0}setHyperlink(v){let P=v.indexOf(";");if(P===-1)return!0;let S=v.slice(0,P).trim(),R=v.slice(P+1);return R?this._createHyperlink(S,R):!S.trim()&&this._finishHyperlink()}_createHyperlink(v,P){this._getCurrentLinkId()&&this._finishHyperlink();let S=v.split(":"),R,$=S.findIndex((W=>W.startsWith("id=")));return $!==-1&&(R=S[$].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:R,uri:P}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(v,P){let S=v.split(";");for(let R=0;R<S.length&&!(P>=this._specialColors.length);++R,++P)if(S[R]==="?")this._onColor.fire([{type:0,index:this._specialColors[P]}]);else{let $=(0,x.parseColor)(S[R]);$&&this._onColor.fire([{type:1,index:this._specialColors[P],color:$}])}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 P=[],S=v.split(";");for(let R=0;R<S.length;++R)if(/^\d+$/.exec(S[R])){let $=parseInt(S[R]);F($)&&P.push({type:2,index:$})}return P.length&&this._onColor.fire(P),!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,b.DEFAULT_CHARSET),!0}selectCharset(v){return v.length!==2?(this.selectDefaultCharset(),!0):(v[0]==="/"||this._charsetService.setgCharset(B[v[0]],b.CHARSETS[v[1]]||b.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=n.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=n.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 f.CellData;v.content=4194373,v.fg=this._curAttrData.fg,v.bg=this._curAttrData.bg,this._setCursor(0,0);for(let P=0;P<this._bufferService.rows;++P){let S=this._activeBuffer.ybase+this._activeBuffer.y+P,R=this._activeBuffer.lines.get(S);R&&(R.fill(v),R.isWrapped=!1)}return this._dirtyRowTracker.markAllDirty(),this._setCursor(0,0),!0}requestStatusString(v,P){let S=this._bufferService.buffer,R=this._optionsService.rawOptions;return($=>(this._coreService.triggerDataEvent(`${a.C0.ESC}${$}${a.C0.ESC}\\`),!0))(v==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:v==='"p'?'P1$r61;1"p':v==="r"?`P1$r${S.scrollTop+1};${S.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,P){this._dirtyRowTracker.markRangeDirty(v,P)}}i.InputHandler=K;let Y=class{constructor(H){this._bufferService=H,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(H){H<this.start?this.start=H:H>this.end&&(this.end=H)}markRangeDirty(H,v){H>v&&(q=H,H=v,v=q),H<this.start&&(this.start=H),v>this.end&&(this.end=v)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function F(H){return 0<=H&&H<256}Y=d([_(0,h.IBufferService)],Y)},701:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.isChromeOS=i.isLinux=i.isWindows=i.isIphone=i.isIpad=i.isMac=i.isSafari=i.isLegacyEdge=i.isFirefox=i.isNode=void 0,i.getSafariVersion=function(){if(!i.isSafari)return 0;let _=c.match(/Version\/(\d+)/);return _===null||_.length<2?0:parseInt(_[1])},i.isNode=typeof process<"u"&&"title"in process;let c=i.isNode?"node":navigator.userAgent,d=i.isNode?"node":navigator.platform;i.isFirefox=c.includes("Firefox"),i.isLegacyEdge=c.includes("Edge"),i.isSafari=/^((?!chrome|android).)*safari/i.test(c),i.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(d),i.isIpad=d==="iPad",i.isIphone=d==="iPhone",i.isWindows=["Windows","Win16","Win32","WinCE"].includes(d),i.isLinux=d.indexOf("Linux")>=0,i.isChromeOS=/\bCrOS\b/.test(c)},6168:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.DebouncedIdleTask=i.IdleTaskQueue=i.PriorityTaskQueue=void 0;let d=c(701);class _{constructor(){this._tasks=[],this._i=0}enqueue(l){this._tasks.push(l),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(l){this._idleCallback=void 0;let m=0,w=0,n=l.timeRemaining(),g=0;for(;this._i<this._tasks.length;){if(m=performance.now(),this._tasks[this._i]()||this._i++,m=Math.max(1,performance.now()-m),w=Math.max(m,w),g=l.timeRemaining(),1.5*w>g)return n-m<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(n-m))}ms`),void this._start();n=g}this.clear()}}class a extends _{_requestCallback(l){return setTimeout((()=>l(this._createDeadline(16))))}_cancelCallback(l){clearTimeout(l)}_createDeadline(l){let m=performance.now()+l;return{timeRemaining:()=>Math.max(0,m-performance.now())}}}i.PriorityTaskQueue=a,i.IdleTaskQueue=!d.isNode&&"requestIdleCallback"in window?class extends _{_requestCallback(b){return requestIdleCallback(b)}_cancelCallback(b){cancelIdleCallback(b)}}:a,i.DebouncedIdleTask=class{constructor(){this._queue=new i.IdleTaskQueue}set(b){this._queue.clear(),this._queue.enqueue(b)}flush(){this._queue.flush()}}},5882:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.updateWindowsModeWrappedState=function(_){let a=_.buffer.lines.get(_.buffer.ybase+_.buffer.y-1),b=a?.get(_.cols-1),l=_.buffer.lines.get(_.buffer.ybase+_.buffer.y);l&&b&&(l.isWrapped=b[d.CHAR_DATA_CODE_INDEX]!==d.NULL_CELL_CODE&&b[d.CHAR_DATA_CODE_INDEX]!==d.WHITESPACE_CELL_CODE)};let d=c(8938)},5451:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.ExtendedAttrs=i.AttributeData=void 0;class c{constructor(){this.fg=0,this.bg=0,this.extended=new d}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 c;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}}i.AttributeData=c;class d{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,b=0){this._ext=0,this._urlId=0,this._ext=a,this._urlId=b}clone(){return new d(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}i.ExtendedAttrs=d},1073:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Buffer=i.MAX_BUFFER_SIZE=void 0;let d=c(5639),_=c(6168),a=c(5451),b=c(6107),l=c(732),m=c(3055),w=c(8938),n=c(8158),g=c(6760);i.MAX_BUFFER_SIZE=4294967295,i.Buffer=class{constructor(f,u,h){this._hasScrollback=f,this._optionsService=u,this._bufferService=h,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=b.DEFAULT_ATTR_DATA.clone(),this.savedCharset=g.DEFAULT_CHARSET,this.markers=[],this._nullCell=m.CellData.fromCharData([0,w.NULL_CELL_CHAR,w.NULL_CELL_WIDTH,w.NULL_CELL_CODE]),this._whitespaceCell=m.CellData.fromCharData([0,w.WHITESPACE_CELL_CHAR,w.WHITESPACE_CELL_WIDTH,w.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new _.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new d.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(f){return f?(this._nullCell.fg=f.fg,this._nullCell.bg=f.bg,this._nullCell.extended=f.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new a.ExtendedAttrs),this._nullCell}getWhitespaceCell(f){return f?(this._whitespaceCell.fg=f.fg,this._whitespaceCell.bg=f.bg,this._whitespaceCell.extended=f.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new a.ExtendedAttrs),this._whitespaceCell}getBlankLine(f,u){return new b.BufferLine(this._bufferService.cols,this.getNullCell(f),u)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){let f=this.ybase+this.y-this.ydisp;return f>=0&&f<this._rows}_getCorrectBufferLength(f){if(!this._hasScrollback)return f;let u=f+this._optionsService.rawOptions.scrollback;return u>i.MAX_BUFFER_SIZE?i.MAX_BUFFER_SIZE:u}fillViewportRows(f){if(this.lines.length===0){f===void 0&&(f=b.DEFAULT_ATTR_DATA);let u=this._rows;for(;u--;)this.lines.push(this.getBlankLine(f))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new d.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(f,u){let h=this.getNullCell(b.DEFAULT_ATTR_DATA),y=0,T=this._getCorrectBufferLength(u);if(T>this.lines.maxLength&&(this.lines.maxLength=T),this.lines.length>0){if(this._cols<f)for(let x=0;x<this.lines.length;x++)y+=+this.lines.get(x).resize(f,h);let C=0;if(this._rows<u)for(let x=this._rows;x<u;x++)this.lines.length<u+this.ybase&&(this._optionsService.rawOptions.windowsMode||this._optionsService.rawOptions.windowsPty.backend!==void 0||this._optionsService.rawOptions.windowsPty.buildNumber!==void 0?this.lines.push(new b.BufferLine(f,h)):this.ybase>0&&this.lines.length<=this.ybase+this.y+C+1?(this.ybase--,C++,this.ydisp>0&&this.ydisp--):this.lines.push(new b.BufferLine(f,h)));else for(let x=this._rows;x>u;x--)this.lines.length>u+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(T<this.lines.maxLength){let x=this.lines.length-T;x>0&&(this.lines.trimStart(x),this.ybase=Math.max(this.ybase-x,0),this.ydisp=Math.max(this.ydisp-x,0),this.savedY=Math.max(this.savedY-x,0)),this.lines.maxLength=T}this.x=Math.min(this.x,f-1),this.y=Math.min(this.y,u-1),C&&(this.y+=C),this.savedX=Math.min(this.savedX,f-1),this.scrollTop=0}if(this.scrollBottom=u-1,this._isReflowEnabled&&(this._reflow(f,u),this._cols>f))for(let C=0;C<this.lines.length;C++)y+=+this.lines.get(C).resize(f,h);this._cols=f,this._rows=u,this._memoryCleanupQueue.clear(),y>.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let f=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,f=!1);let u=0;for(;this._memoryCleanupPosition<this.lines.length;)if(u+=this.lines.get(this._memoryCleanupPosition++).cleanupMemory(),u>100)return!0;return f}get _isReflowEnabled(){let f=this._optionsService.rawOptions.windowsPty;return f&&f.buildNumber?this._hasScrollback&&f.backend==="conpty"&&f.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(f,u){this._cols!==f&&(f>this._cols?this._reflowLarger(f,u):this._reflowSmaller(f,u))}_reflowLarger(f,u){let h=this._optionsService.rawOptions.reflowCursorLine,y=(0,l.reflowLargerGetLinesToRemove)(this.lines,this._cols,f,this.ybase+this.y,this.getNullCell(b.DEFAULT_ATTR_DATA),h);if(y.length>0){let T=(0,l.reflowLargerCreateNewLayout)(this.lines,y);(0,l.reflowLargerApplyNewLayout)(this.lines,T.layout),this._reflowLargerAdjustViewport(f,u,T.countRemoved)}}_reflowLargerAdjustViewport(f,u,h){let y=this.getNullCell(b.DEFAULT_ATTR_DATA),T=h;for(;T-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length<u&&this.lines.push(new b.BufferLine(f,y))):(this.ydisp===this.ybase&&this.ydisp--,this.ybase--);this.savedY=Math.max(this.savedY-h,0)}_reflowSmaller(f,u){let h=this._optionsService.rawOptions.reflowCursorLine,y=this.getNullCell(b.DEFAULT_ATTR_DATA),T=[],C=0;for(let x=this.lines.length-1;x>=0;x--){let N=this.lines.get(x);if(!N||!N.isWrapped&&N.getTrimmedLength()<=f)continue;let B=[N];for(;N.isWrapped&&x>0;)N=this.lines.get(--x),B.unshift(N);if(!h){let S=this.ybase+this.y;if(S>=x&&S<x+B.length)continue}let D=B[B.length-1].getTrimmedLength(),A=(0,l.reflowSmallerGetNewLineLengths)(B,this._cols,f),E=A.length-B.length,q;q=this.ybase===0&&this.y!==this.lines.length-1?Math.max(0,this.y-this.lines.maxLength+E):Math.max(0,this.lines.length-this.lines.maxLength+E);let K=[];for(let S=0;S<E;S++){let R=this.getBlankLine(b.DEFAULT_ATTR_DATA,!0);K.push(R)}K.length>0&&(T.push({start:x+B.length+C,newLines:K}),C+=K.length),B.push(...K);let Y=A.length-1,F=A[Y];F===0&&(Y--,F=A[Y]);let H=B.length-E-1,v=D;for(;H>=0;){let S=Math.min(v,F);if(B[Y]===void 0)break;if(B[Y].copyCellsFrom(B[H],v-S,F-S,S,!0),F-=S,F===0&&(Y--,F=A[Y]),v-=S,v===0){H--;let R=Math.max(H,0);v=(0,l.getWrappedLineTrimmedLength)(B,R,this._cols)}}for(let S=0;S<B.length;S++)A[S]<f&&B[S].setCell(A[S],y);let P=E-q;for(;P-- >0;)this.ybase===0?this.y<u-1?(this.y++,this.lines.pop()):(this.ybase++,this.ydisp++):this.ybase<Math.min(this.lines.maxLength,this.lines.length+C)-u&&(this.ybase===this.ydisp&&this.ydisp++,this.ybase++);this.savedY=Math.min(this.savedY+E,this.ybase+u-1)}if(T.length>0){let x=[],N=[];for(let F=0;F<this.lines.length;F++)N.push(this.lines.get(F));let B=this.lines.length,D=B-1,A=0,E=T[A];this.lines.length=Math.min(this.lines.maxLength,this.lines.length+C);let q=0;for(let F=Math.min(this.lines.maxLength-1,B+C-1);F>=0;F--)if(E&&E.start>D+q){for(let H=E.newLines.length-1;H>=0;H--)this.lines.set(F--,E.newLines[H]);F++,x.push({index:D+1,amount:E.newLines.length}),q+=E.newLines.length,E=T[++A]}else this.lines.set(F,N[D--]);let K=0;for(let F=x.length-1;F>=0;F--)x[F].index+=K,this.lines.onInsertEmitter.fire(x[F]),K+=x[F].amount;let Y=Math.max(0,B+C-this.lines.maxLength);Y>0&&this.lines.onTrimEmitter.fire(Y)}}translateBufferLineToString(f,u,h=0,y){let T=this.lines.get(f);return T?T.translateToString(u,h,y):""}getWrappedRangeForLine(f){let u=f,h=f;for(;u>0&&this.lines.get(u).isWrapped;)u--;for(;h+1<this.lines.length&&this.lines.get(h+1).isWrapped;)h++;return{first:u,last:h}}setupTabStops(f){for(f!=null?this.tabs[f]||(f=this.prevStop(f)):(this.tabs={},f=0);f<this._cols;f+=this._optionsService.rawOptions.tabStopWidth)this.tabs[f]=!0}prevStop(f){for(f==null&&(f=this.x);!this.tabs[--f]&&f>0;);return f>=this._cols?this._cols-1:f<0?0:f}nextStop(f){for(f==null&&(f=this.x);!this.tabs[++f]&&f<this._cols;);return f>=this._cols?this._cols-1:f<0?0:f}clearMarkers(f){this._isClearing=!0;for(let u=0;u<this.markers.length;u++)this.markers[u].line===f&&(this.markers[u].dispose(),this.markers.splice(u--,1));this._isClearing=!1}clearAllMarkers(){this._isClearing=!0;for(let f=0;f<this.markers.length;f++)this.markers[f].dispose();this.markers.length=0,this._isClearing=!1}addMarker(f){let u=new n.Marker(f);return this.markers.push(u),u.register(this.lines.onTrim((h=>{u.line-=h,u.line<0&&u.dispose()}))),u.register(this.lines.onInsert((h=>{u.line>=h.index&&(u.line+=h.amount)}))),u.register(this.lines.onDelete((h=>{u.line>=h.index&&u.line<h.index+h.amount&&u.dispose(),u.line>h.index&&(u.line-=h.amount)}))),u.register(u.onDispose((()=>this._removeMarker(u)))),u}_removeMarker(f){this._isClearing||this.markers.splice(this.markers.indexOf(f),1)}}},6107:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BufferLine=i.DEFAULT_ATTR_DATA=void 0;let d=c(5451),_=c(3055),a=c(8938),b=c(726);i.DEFAULT_ATTR_DATA=Object.freeze(new d.AttributeData);let l=0;class m{constructor(n,g,f=!1){this.isWrapped=f,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*n);let u=g||_.CellData.fromCharData([0,a.NULL_CELL_CHAR,a.NULL_CELL_WIDTH,a.NULL_CELL_CODE]);for(let h=0;h<n;++h)this.setCell(h,u);this.length=n}get(n){let g=this._data[3*n+0],f=2097151&g;return[this._data[3*n+1],2097152&g?this._combined[n]:f?(0,b.stringFromCodePoint)(f):"",g>>22,2097152&g?this._combined[n].charCodeAt(this._combined[n].length-1):f]}set(n,g){this._data[3*n+1]=g[a.CHAR_DATA_ATTR_INDEX],g[a.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[n]=g[1],this._data[3*n+0]=2097152|n|g[a.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*n+0]=g[a.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|g[a.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(n){return this._data[3*n+0]>>22}hasWidth(n){return 12582912&this._data[3*n+0]}getFg(n){return this._data[3*n+1]}getBg(n){return this._data[3*n+2]}hasContent(n){return 4194303&this._data[3*n+0]}getCodePoint(n){let g=this._data[3*n+0];return 2097152&g?this._combined[n].charCodeAt(this._combined[n].length-1):2097151&g}isCombined(n){return 2097152&this._data[3*n+0]}getString(n){let g=this._data[3*n+0];return 2097152&g?this._combined[n]:2097151&g?(0,b.stringFromCodePoint)(2097151&g):""}isProtected(n){return 536870912&this._data[3*n+2]}loadCell(n,g){return l=3*n,g.content=this._data[l+0],g.fg=this._data[l+1],g.bg=this._data[l+2],2097152&g.content&&(g.combinedData=this._combined[n]),268435456&g.bg&&(g.extended=this._extendedAttrs[n]),g}setCell(n,g){2097152&g.content&&(this._combined[n]=g.combinedData),268435456&g.bg&&(this._extendedAttrs[n]=g.extended),this._data[3*n+0]=g.content,this._data[3*n+1]=g.fg,this._data[3*n+2]=g.bg}setCellFromCodepoint(n,g,f,u){268435456&u.bg&&(this._extendedAttrs[n]=u.extended),this._data[3*n+0]=g|f<<22,this._data[3*n+1]=u.fg,this._data[3*n+2]=u.bg}addCodepointToCell(n,g,f){let u=this._data[3*n+0];2097152&u?this._combined[n]+=(0,b.stringFromCodePoint)(g):2097151&u?(this._combined[n]=(0,b.stringFromCodePoint)(2097151&u)+(0,b.stringFromCodePoint)(g),u&=-2097152,u|=2097152):u=g|4194304,f&&(u&=-12582913,u|=f<<22),this._data[3*n+0]=u}insertCells(n,g,f){if((n%=this.length)&&this.getWidth(n-1)===2&&this.setCellFromCodepoint(n-1,0,1,f),g<this.length-n){let u=new _.CellData;for(let h=this.length-n-g-1;h>=0;--h)this.setCell(n+g+h,this.loadCell(n+h,u));for(let h=0;h<g;++h)this.setCell(n+h,f)}else for(let u=n;u<this.length;++u)this.setCell(u,f);this.getWidth(this.length-1)===2&&this.setCellFromCodepoint(this.length-1,0,1,f)}deleteCells(n,g,f){if(n%=this.length,g<this.length-n){let u=new _.CellData;for(let h=0;h<this.length-n-g;++h)this.setCell(n+h,this.loadCell(n+g+h,u));for(let h=this.length-g;h<this.length;++h)this.setCell(h,f)}else for(let u=n;u<this.length;++u)this.setCell(u,f);n&&this.getWidth(n-1)===2&&this.setCellFromCodepoint(n-1,0,1,f),this.getWidth(n)!==0||this.hasContent(n)||this.setCellFromCodepoint(n,0,1,f)}replaceCells(n,g,f,u=!1){if(u)for(n&&this.getWidth(n-1)===2&&!this.isProtected(n-1)&&this.setCellFromCodepoint(n-1,0,1,f),g<this.length&&this.getWidth(g-1)===2&&!this.isProtected(g)&&this.setCellFromCodepoint(g,0,1,f);n<g&&n<this.length;)this.isProtected(n)||this.setCell(n,f),n++;else for(n&&this.getWidth(n-1)===2&&this.setCellFromCodepoint(n-1,0,1,f),g<this.length&&this.getWidth(g-1)===2&&this.setCellFromCodepoint(g,0,1,f);n<g&&n<this.length;)this.setCell(n++,f)}resize(n,g){if(n===this.length)return 4*this._data.length*2<this._data.buffer.byteLength;let f=3*n;if(n>this.length){if(this._data.buffer.byteLength>=4*f)this._data=new Uint32Array(this._data.buffer,0,f);else{let u=new Uint32Array(f);u.set(this._data),this._data=u}for(let u=this.length;u<n;++u)this.setCell(u,g)}else{this._data=this._data.subarray(0,f);let u=Object.keys(this._combined);for(let y=0;y<u.length;y++){let T=parseInt(u[y],10);T>=n&&delete this._combined[T]}let h=Object.keys(this._extendedAttrs);for(let y=0;y<h.length;y++){let T=parseInt(h[y],10);T>=n&&delete this._extendedAttrs[T]}}return this.length=n,4*f*2<this._data.buffer.byteLength}cleanupMemory(){if(4*this._data.length*2<this._data.buffer.byteLength){let n=new Uint32Array(this._data.length);return n.set(this._data),this._data=n,1}return 0}fill(n,g=!1){if(g)for(let f=0;f<this.length;++f)this.isProtected(f)||this.setCell(f,n);else{this._combined={},this._extendedAttrs={};for(let f=0;f<this.length;++f)this.setCell(f,n)}}copyFrom(n){this.length!==n.length?this._data=new Uint32Array(n._data):this._data.set(n._data),this.length=n.length,this._combined={};for(let g in n._combined)this._combined[g]=n._combined[g];this._extendedAttrs={};for(let g in n._extendedAttrs)this._extendedAttrs[g]=n._extendedAttrs[g];this.isWrapped=n.isWrapped}clone(){let n=new m(0);n._data=new Uint32Array(this._data),n.length=this.length;for(let g in this._combined)n._combined[g]=this._combined[g];for(let g in this._extendedAttrs)n._extendedAttrs[g]=this._extendedAttrs[g];return n.isWrapped=this.isWrapped,n}getTrimmedLength(){for(let n=this.length-1;n>=0;--n)if(4194303&this._data[3*n+0])return n+(this._data[3*n+0]>>22);return 0}getNoBgTrimmedLength(){for(let n=this.length-1;n>=0;--n)if(4194303&this._data[3*n+0]||50331648&this._data[3*n+2])return n+(this._data[3*n+0]>>22);return 0}copyCellsFrom(n,g,f,u,h){let y=n._data;if(h)for(let C=u-1;C>=0;C--){for(let x=0;x<3;x++)this._data[3*(f+C)+x]=y[3*(g+C)+x];268435456&y[3*(g+C)+2]&&(this._extendedAttrs[f+C]=n._extendedAttrs[g+C])}else for(let C=0;C<u;C++){for(let x=0;x<3;x++)this._data[3*(f+C)+x]=y[3*(g+C)+x];268435456&y[3*(g+C)+2]&&(this._extendedAttrs[f+C]=n._extendedAttrs[g+C])}let T=Object.keys(n._combined);for(let C=0;C<T.length;C++){let x=parseInt(T[C],10);x>=g&&(this._combined[x-g+f]=n._combined[x])}}translateToString(n,g,f,u){g=g??0,f=f??this.length,n&&(f=Math.min(f,this.getTrimmedLength())),u&&(u.length=0);let h="";for(;g<f;){let y=this._data[3*g+0],T=2097151&y,C=2097152&y?this._combined[g]:T?(0,b.stringFromCodePoint)(T):a.WHITESPACE_CELL_CHAR;if(h+=C,u)for(let x=0;x<C.length;++x)u.push(g);g+=y>>22||1}return u&&u.push(g),h}}i.BufferLine=m},732:(k,i)=>{function c(d,_,a){if(_===d.length-1)return d[_].getTrimmedLength();let b=!d[_].hasContent(a-1)&&d[_].getWidth(a-1)===1,l=d[_+1].getWidth(0)===2;return b&&l?a-1:a}Object.defineProperty(i,"__esModule",{value:!0}),i.reflowLargerGetLinesToRemove=function(d,_,a,b,l,m){let w=[];for(let n=0;n<d.length-1;n++){let g=n,f=d.get(++g);if(!f.isWrapped)continue;let u=[d.get(n)];for(;g<d.length&&f.isWrapped;)u.push(f),f=d.get(++g);if(!m&&b>=n&&b<g){n+=u.length-1;continue}let h=0,y=c(u,h,_),T=1,C=0;for(;T<u.length;){let N=c(u,T,_),B=N-C,D=a-y,A=Math.min(B,D);u[h].copyCellsFrom(u[T],C,y,A,!1),y+=A,y===a&&(h++,y=0),C+=A,C===N&&(T++,C=0),y===0&&h!==0&&u[h-1].getWidth(a-1)===2&&(u[h].copyCellsFrom(u[h-1],a-1,y++,1,!1),u[h-1].setCell(a-1,l))}u[h].replaceCells(y,a,l);let x=0;for(let N=u.length-1;N>0&&(N>h||u[N].getTrimmedLength()===0);N--)x++;x>0&&(w.push(n+u.length-x),w.push(x)),n+=u.length-1}return w},i.reflowLargerCreateNewLayout=function(d,_){let a=[],b=0,l=_[b],m=0;for(let w=0;w<d.length;w++)if(l===w){let n=_[++b];d.onDeleteEmitter.fire({index:w-m,amount:n}),w+=n-1,m+=n,l=_[++b]}else a.push(w);return{layout:a,countRemoved:m}},i.reflowLargerApplyNewLayout=function(d,_){let a=[];for(let b=0;b<_.length;b++)a.push(d.get(_[b]));for(let b=0;b<a.length;b++)d.set(b,a[b]);d.length=_.length},i.reflowSmallerGetNewLineLengths=function(d,_,a){let b=[],l=d.map(((g,f)=>c(d,f,_))).reduce(((g,f)=>g+f)),m=0,w=0,n=0;for(;n<l;){if(l-n<a){b.push(l-n);break}m+=a;let g=c(d,w,_);m>g&&(m-=g,w++);let f=d[w].getWidth(m-1)===2;f&&m--;let u=f?a-1:a;b.push(u),n+=u}return b},i.getWrappedLineTrimmedLength=c},4097:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BufferSet=void 0;let d=c(7150),_=c(1073),a=c(802);class b extends d.Disposable{constructor(m,w){super(),this._optionsService=m,this._bufferService=w,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 _.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new _.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(m){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(m),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(m,w){this._normal.resize(m,w),this._alt.resize(m,w),this.setupTabStops(m)}setupTabStops(m){this._normal.setupTabStops(m),this._alt.setupTabStops(m)}}i.BufferSet=b},3055:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CellData=void 0;let d=c(726),_=c(8938),a=c(5451);class b extends a.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new a.ExtendedAttrs,this.combinedData=""}static fromCharData(m){let w=new b;return w.setFromCharData(m),w}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,d.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(m){this.fg=m[_.CHAR_DATA_ATTR_INDEX],this.bg=0;let w=!1;if(m[_.CHAR_DATA_CHAR_INDEX].length>2)w=!0;else if(m[_.CHAR_DATA_CHAR_INDEX].length===2){let n=m[_.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=n&&n<=56319){let g=m[_.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=g&&g<=57343?this.content=1024*(n-55296)+g-56320+65536|m[_.CHAR_DATA_WIDTH_INDEX]<<22:w=!0}else w=!0}else this.content=m[_.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|m[_.CHAR_DATA_WIDTH_INDEX]<<22;w&&(this.combinedData=m[_.CHAR_DATA_CHAR_INDEX],this.content=2097152|m[_.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}i.CellData=b},8938:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.WHITESPACE_CELL_CODE=i.WHITESPACE_CELL_WIDTH=i.WHITESPACE_CELL_CHAR=i.NULL_CELL_CODE=i.NULL_CELL_WIDTH=i.NULL_CELL_CHAR=i.CHAR_DATA_CODE_INDEX=i.CHAR_DATA_WIDTH_INDEX=i.CHAR_DATA_CHAR_INDEX=i.CHAR_DATA_ATTR_INDEX=i.DEFAULT_EXT=i.DEFAULT_ATTR=i.DEFAULT_COLOR=void 0,i.DEFAULT_COLOR=0,i.DEFAULT_ATTR=i.DEFAULT_COLOR<<9|256,i.DEFAULT_EXT=0,i.CHAR_DATA_ATTR_INDEX=0,i.CHAR_DATA_CHAR_INDEX=1,i.CHAR_DATA_WIDTH_INDEX=2,i.CHAR_DATA_CODE_INDEX=3,i.NULL_CELL_CHAR="",i.NULL_CELL_WIDTH=1,i.NULL_CELL_CODE=0,i.WHITESPACE_CELL_CHAR=" ",i.WHITESPACE_CELL_WIDTH=1,i.WHITESPACE_CELL_CODE=32},8158:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Marker=void 0;let d=c(802),_=c(7150);class a{get id(){return this._id}constructor(l){this.line=l,this.isDisposed=!1,this._disposables=[],this._id=a._nextId++,this._onDispose=this.register(new d.Emitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,_.dispose)(this._disposables),this._disposables.length=0)}register(l){return this._disposables.push(l),l}}i.Marker=a,a._nextId=1},6760:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.DEFAULT_CHARSET=i.CHARSETS=void 0,i.CHARSETS={},i.DEFAULT_CHARSET=i.CHARSETS.B,i.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"},i.CHARSETS.A={"#":"\xA3"},i.CHARSETS.B=void 0,i.CHARSETS[4]={"#":"\xA3","@":"\xBE","[":"ij","\\":"\xBD","]":"|","{":"\xA8","|":"f","}":"\xBC","~":"\xB4"},i.CHARSETS.C=i.CHARSETS[5]={"[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},i.CHARSETS.R={"#":"\xA3","@":"\xE0","[":"\xB0","\\":"\xE7","]":"\xA7","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xA8"},i.CHARSETS.Q={"@":"\xE0","[":"\xE2","\\":"\xE7","]":"\xEA","^":"\xEE","`":"\xF4","{":"\xE9","|":"\xF9","}":"\xE8","~":"\xFB"},i.CHARSETS.K={"@":"\xA7","[":"\xC4","\\":"\xD6","]":"\xDC","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xDF"},i.CHARSETS.Y={"#":"\xA3","@":"\xA7","[":"\xB0","\\":"\xE7","]":"\xE9","`":"\xF9","{":"\xE0","|":"\xF2","}":"\xE8","~":"\xEC"},i.CHARSETS.E=i.CHARSETS[6]={"@":"\xC4","[":"\xC6","\\":"\xD8","]":"\xC5","^":"\xDC","`":"\xE4","{":"\xE6","|":"\xF8","}":"\xE5","~":"\xFC"},i.CHARSETS.Z={"#":"\xA3","@":"\xA7","[":"\xA1","\\":"\xD1","]":"\xBF","{":"\xB0","|":"\xF1","}":"\xE7"},i.CHARSETS.H=i.CHARSETS[7]={"@":"\xC9","[":"\xC4","\\":"\xD6","]":"\xC5","^":"\xDC","`":"\xE9","{":"\xE4","|":"\xF6","}":"\xE5","~":"\xFC"},i.CHARSETS["="]={"#":"\xF9","@":"\xE0","[":"\xE9","\\":"\xE7","]":"\xEA","^":"\xEE",_:"\xE8","`":"\xF4","{":"\xE4","|":"\xF6","}":"\xFC","~":"\xFB"}},3534:(k,i)=>{var c,d,_;Object.defineProperty(i,"__esModule",{value:!0}),i.C1_ESCAPED=i.C1=i.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"})(c||(i.C0=c={})),(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"})(d||(i.C1=d={})),(function(a){a.ST=`${c.ESC}\\`})(_||(i.C1_ESCAPED=_={}))},726:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Utf8ToUtf32=i.StringToUtf32=void 0,i.stringFromCodePoint=function(c){return c>65535?(c-=65536,String.fromCharCode(55296+(c>>10))+String.fromCharCode(c%1024+56320)):String.fromCharCode(c)},i.utf32ToString=function(c,d=0,_=c.length){let a="";for(let b=d;b<_;++b){let l=c[b];l>65535?(l-=65536,a+=String.fromCharCode(55296+(l>>10))+String.fromCharCode(l%1024+56320)):a+=String.fromCharCode(l)}return a},i.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(c,d){let _=c.length;if(!_)return 0;let a=0,b=0;if(this._interim){let l=c.charCodeAt(b++);56320<=l&&l<=57343?d[a++]=1024*(this._interim-55296)+l-56320+65536:(d[a++]=this._interim,d[a++]=l),this._interim=0}for(let l=b;l<_;++l){let m=c.charCodeAt(l);if(55296<=m&&m<=56319){if(++l>=_)return this._interim=m,a;let w=c.charCodeAt(l);56320<=w&&w<=57343?d[a++]=1024*(m-55296)+w-56320+65536:(d[a++]=m,d[a++]=w)}else m!==65279&&(d[a++]=m)}return a}},i.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(c,d){let _=c.length;if(!_)return 0;let a,b,l,m,w=0,n=0,g=0;if(this.interim[0]){let h=!1,y=this.interim[0];y&=(224&y)==192?31:(240&y)==224?15:7;let T,C=0;for(;(T=63&this.interim[++C])&&C<4;)y<<=6,y|=T;let x=(224&this.interim[0])==192?2:(240&this.interim[0])==224?3:4,N=x-C;for(;g<N;){if(g>=_)return 0;if(T=c[g++],(192&T)!=128){g--,h=!0;break}this.interim[C++]=T,y<<=6,y|=63&T}h||(x===2?y<128?g--:d[w++]=y:x===3?y<2048||y>=55296&&y<=57343||y===65279||(d[w++]=y):y<65536||y>1114111||(d[w++]=y)),this.interim.fill(0)}let f=_-4,u=g;for(;u<_;){for(;!(!(u<f)||128&(a=c[u])||128&(b=c[u+1])||128&(l=c[u+2])||128&(m=c[u+3]));)d[w++]=a,d[w++]=b,d[w++]=l,d[w++]=m,u+=4;if(a=c[u++],a<128)d[w++]=a;else if((224&a)==192){if(u>=_)return this.interim[0]=a,w;if(b=c[u++],(192&b)!=128){u--;continue}if(n=(31&a)<<6|63&b,n<128){u--;continue}d[w++]=n}else if((240&a)==224){if(u>=_)return this.interim[0]=a,w;if(b=c[u++],(192&b)!=128){u--;continue}if(u>=_)return this.interim[0]=a,this.interim[1]=b,w;if(l=c[u++],(192&l)!=128){u--;continue}if(n=(15&a)<<12|(63&b)<<6|63&l,n<2048||n>=55296&&n<=57343||n===65279)continue;d[w++]=n}else if((248&a)==240){if(u>=_)return this.interim[0]=a,w;if(b=c[u++],(192&b)!=128){u--;continue}if(u>=_)return this.interim[0]=a,this.interim[1]=b,w;if(l=c[u++],(192&l)!=128){u--;continue}if(u>=_)return this.interim[0]=a,this.interim[1]=b,this.interim[2]=l,w;if(m=c[u++],(192&m)!=128){u--;continue}if(n=(7&a)<<18|(63&b)<<12|(63&l)<<6|63&m,n<65536||n>1114111)continue;d[w++]=n}}return w}}},7428:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.UnicodeV6=void 0;let d=c(6415),_=[[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]],b;i.UnicodeV6=class{constructor(){if(this.version="6",!b){b=new Uint8Array(65536),b.fill(1),b[0]=0,b.fill(0,1,32),b.fill(0,127,160),b.fill(2,4352,4448),b[9001]=2,b[9002]=2,b.fill(2,11904,42192),b[12351]=1,b.fill(2,44032,55204),b.fill(2,63744,64256),b.fill(2,65040,65050),b.fill(2,65072,65136),b.fill(2,65280,65377),b.fill(2,65504,65511);for(let l=0;l<_.length;++l)b.fill(0,_[l][0],_[l][1]+1)}}wcwidth(l){return l<32?0:l<127?1:l<65536?b[l]:(function(m,w){let n,g=0,f=w.length-1;if(m<w[0][0]||m>w[f][1])return!1;for(;f>=g;)if(n=g+f>>1,m>w[n][1])g=n+1;else{if(!(m<w[n][0]))return!0;f=n-1}return!1})(l,a)?0:l>=131072&&l<=196605||l>=196608&&l<=262141?2:1}charProperties(l,m){let w=this.wcwidth(l),n=w===0&&m!==0;if(n){let g=d.UnicodeService.extractWidth(m);g===0?n=!1:g>w&&(w=g)}return d.UnicodeService.createPropertyValue(0,w,n)}}},3562:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.WriteBuffer=void 0;let d=c(7150),_=c(802);class a extends d.Disposable{constructor(l){super(),this._action=l,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this._register(new _.Emitter),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(l,m){if(m!==void 0&&this._syncCalls>m)return void(this._syncCalls=0);if(this._pendingData+=l.length,this._writeBuffer.push(l),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let w;for(this._isSyncWriting=!0;w=this._writeBuffer.shift();){this._action(w);let n=this._callbacks.shift();n&&n()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(l,m){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+=l.length,this._writeBuffer.push(l),this._callbacks.push(m),void this._innerWrite();setTimeout((()=>this._innerWrite()))}this._pendingData+=l.length,this._writeBuffer.push(l),this._callbacks.push(m)}_innerWrite(l=0,m=!0){let w=l||performance.now();for(;this._writeBuffer.length>this._bufferOffset;){let n=this._writeBuffer[this._bufferOffset],g=this._action(n,m);if(g){let u=h=>performance.now()-w>=12?setTimeout((()=>this._innerWrite(0,h))):this._innerWrite(w,h);return void g.catch((h=>(queueMicrotask((()=>{throw h})),Promise.resolve(!1)))).then(u)}let f=this._callbacks[this._bufferOffset];if(f&&f(),this._bufferOffset++,this._pendingData-=n.length,performance.now()-w>=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()}}i.WriteBuffer=a},8693:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.parseColor=function(a){if(!a)return;let b=a.toLowerCase();if(b.indexOf("rgb:")===0){b=b.slice(4);let l=c.exec(b);if(l){let m=l[1]?15:l[4]?255:l[7]?4095:65535;return[Math.round(parseInt(l[1]||l[4]||l[7]||l[10],16)/m*255),Math.round(parseInt(l[2]||l[5]||l[8]||l[11],16)/m*255),Math.round(parseInt(l[3]||l[6]||l[9]||l[12],16)/m*255)]}}else if(b.indexOf("#")===0&&(b=b.slice(1),d.exec(b)&&[3,6,9,12].includes(b.length))){let l=b.length/3,m=[0,0,0];for(let w=0;w<3;++w){let n=parseInt(b.slice(l*w,l*w+l),16);m[w]=l===1?n<<4:l===2?n:l===3?n>>4:n>>8}return m}},i.toRgbString=function(a,b=16){let[l,m,w]=a;return`rgb:${_(l,b)}/${_(m,b)}/${_(w,b)}`};let c=/^([\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})$/,d=/^[\da-f]+$/;function _(a,b){let l=a.toString(16),m=l.length<2?"0"+l:l;switch(b){case 4:return l[0];case 8:return m;case 12:return(m+m).slice(0,3);default:return m+m}}},1263:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.PAYLOAD_LIMIT=void 0,i.PAYLOAD_LIMIT=1e7},9823:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.DcsHandler=i.DcsParser=void 0;let d=c(726),_=c(7262),a=c(1263),b=[];i.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=b,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=b}registerHandler(m,w){this._handlers[m]===void 0&&(this._handlers[m]=[]);let n=this._handlers[m];return n.push(w),{dispose:()=>{let g=n.indexOf(w);g!==-1&&n.splice(g,1)}}}clearHandler(m){this._handlers[m]&&delete this._handlers[m]}setHandlerFallback(m){this._handlerFb=m}reset(){if(this._active.length)for(let m=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;m>=0;--m)this._active[m].unhook(!1);this._stack.paused=!1,this._active=b,this._ident=0}hook(m,w){if(this.reset(),this._ident=m,this._active=this._handlers[m]||b,this._active.length)for(let n=this._active.length-1;n>=0;n--)this._active[n].hook(w);else this._handlerFb(this._ident,"HOOK",w)}put(m,w,n){if(this._active.length)for(let g=this._active.length-1;g>=0;g--)this._active[g].put(m,w,n);else this._handlerFb(this._ident,"PUT",(0,d.utf32ToString)(m,w,n))}unhook(m,w=!0){if(this._active.length){let n=!1,g=this._active.length-1,f=!1;if(this._stack.paused&&(g=this._stack.loopPosition-1,n=w,f=this._stack.fallThrough,this._stack.paused=!1),!f&&n===!1){for(;g>=0&&(n=this._active[g].unhook(m),n!==!0);g--)if(n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=g,this._stack.fallThrough=!1,n;g--}for(;g>=0;g--)if(n=this._active[g].unhook(!1),n instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=g,this._stack.fallThrough=!0,n}else this._handlerFb(this._ident,"UNHOOK",m);this._active=b,this._ident=0}};let l=new _.Params;l.addParam(0),i.DcsHandler=class{constructor(m){this._handler=m,this._data="",this._params=l,this._hitLimit=!1}hook(m){this._params=m.length>1||m.params[0]?m.clone():l,this._data="",this._hitLimit=!1}put(m,w,n){this._hitLimit||(this._data+=(0,d.utf32ToString)(m,w,n),this._data.length>a.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}unhook(m){let w=!1;if(this._hitLimit)w=!1;else if(m&&(w=this._handler(this._data,this._params),w instanceof Promise))return w.then((n=>(this._params=l,this._data="",this._hitLimit=!1,n)));return this._params=l,this._data="",this._hitLimit=!1,w}}},6717:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.EscapeSequenceParser=i.VT500_TRANSITION_TABLE=i.TransitionTable=void 0;let d=c(7150),_=c(7262),a=c(1346),b=c(9823);class l{constructor(g){this.table=new Uint8Array(g)}setDefault(g,f){this.table.fill(g<<4|f)}add(g,f,u,h){this.table[f<<8|g]=u<<4|h}addMany(g,f,u,h){for(let y=0;y<g.length;y++)this.table[f<<8|g[y]]=u<<4|h}}i.TransitionTable=l;let m=160;i.VT500_TRANSITION_TABLE=(function(){let n=new l(4095),g=Array.apply(null,Array(256)).map(((C,x)=>x)),f=(C,x)=>g.slice(C,x),u=f(32,127),h=f(0,24);h.push(25),h.push.apply(h,f(28,32));let y=f(0,14),T;for(T in n.setDefault(1,0),n.addMany(u,0,2,0),y)n.addMany([24,26,153,154],T,3,0),n.addMany(f(128,144),T,3,0),n.addMany(f(144,152),T,3,0),n.add(156,T,0,0),n.add(27,T,11,1),n.add(157,T,4,8),n.addMany([152,158,159],T,0,7),n.add(155,T,11,3),n.add(144,T,11,9);return n.addMany(h,0,3,0),n.addMany(h,1,3,1),n.add(127,1,0,1),n.addMany(h,8,0,8),n.addMany(h,3,3,3),n.add(127,3,0,3),n.addMany(h,4,3,4),n.add(127,4,0,4),n.addMany(h,6,3,6),n.addMany(h,5,3,5),n.add(127,5,0,5),n.addMany(h,2,3,2),n.add(127,2,0,2),n.add(93,1,4,8),n.addMany(u,8,5,8),n.add(127,8,5,8),n.addMany([156,27,24,26,7],8,6,0),n.addMany(f(28,32),8,0,8),n.addMany([88,94,95],1,0,7),n.addMany(u,7,0,7),n.addMany(h,7,0,7),n.add(156,7,0,0),n.add(127,7,0,7),n.add(91,1,11,3),n.addMany(f(64,127),3,7,0),n.addMany(f(48,60),3,8,4),n.addMany([60,61,62,63],3,9,4),n.addMany(f(48,60),4,8,4),n.addMany(f(64,127),4,7,0),n.addMany([60,61,62,63],4,0,6),n.addMany(f(32,64),6,0,6),n.add(127,6,0,6),n.addMany(f(64,127),6,0,0),n.addMany(f(32,48),3,9,5),n.addMany(f(32,48),5,9,5),n.addMany(f(48,64),5,0,6),n.addMany(f(64,127),5,7,0),n.addMany(f(32,48),4,9,5),n.addMany(f(32,48),1,9,2),n.addMany(f(32,48),2,9,2),n.addMany(f(48,127),2,10,0),n.addMany(f(48,80),1,10,0),n.addMany(f(81,88),1,10,0),n.addMany([89,90,92],1,10,0),n.addMany(f(96,127),1,10,0),n.add(80,1,11,9),n.addMany(h,9,0,9),n.add(127,9,0,9),n.addMany(f(28,32),9,0,9),n.addMany(f(32,48),9,9,12),n.addMany(f(48,60),9,8,10),n.addMany([60,61,62,63],9,9,10),n.addMany(h,11,0,11),n.addMany(f(32,128),11,0,11),n.addMany(f(28,32),11,0,11),n.addMany(h,10,0,10),n.add(127,10,0,10),n.addMany(f(28,32),10,0,10),n.addMany(f(48,60),10,8,10),n.addMany([60,61,62,63],10,0,11),n.addMany(f(32,48),10,9,12),n.addMany(h,12,0,12),n.add(127,12,0,12),n.addMany(f(28,32),12,0,12),n.addMany(f(32,48),12,9,12),n.addMany(f(48,64),12,0,11),n.addMany(f(64,127),12,12,13),n.addMany(f(64,127),10,12,13),n.addMany(f(64,127),9,12,13),n.addMany(h,13,13,13),n.addMany(u,13,13,13),n.add(127,13,0,13),n.addMany([27,156,24,26],13,14,0),n.add(m,0,2,0),n.add(m,8,5,8),n.add(m,6,0,6),n.add(m,11,0,11),n.add(m,13,13,13),n})();class w extends d.Disposable{constructor(g=i.VT500_TRANSITION_TABLE){super(),this._transitions=g,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new _.Params,this._params.addParam(0),this._collect=0,this.precedingJoinState=0,this._printHandlerFb=(f,u,h)=>{},this._executeHandlerFb=f=>{},this._csiHandlerFb=(f,u)=>{},this._escHandlerFb=f=>{},this._errorHandlerFb=f=>f,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this._register((0,d.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 b.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},(()=>!0))}_identifier(g,f=[64,126]){let u=0;if(g.prefix){if(g.prefix.length>1)throw new Error("only one byte as prefix supported");if(u=g.prefix.charCodeAt(0),u&&60>u||u>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(g.intermediates){if(g.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let y=0;y<g.intermediates.length;++y){let T=g.intermediates.charCodeAt(y);if(32>T||T>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");u<<=8,u|=T}}if(g.final.length!==1)throw new Error("final must be a single byte");let h=g.final.charCodeAt(0);if(f[0]>h||h>f[1])throw new Error(`final must be in range ${f[0]} .. ${f[1]}`);return u<<=8,u|=h,u}identToString(g){let f=[];for(;g;)f.push(String.fromCharCode(255&g)),g>>=8;return f.reverse().join("")}setPrintHandler(g){this._printHandler=g}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(g,f){let u=this._identifier(g,[48,126]);this._escHandlers[u]===void 0&&(this._escHandlers[u]=[]);let h=this._escHandlers[u];return h.push(f),{dispose:()=>{let y=h.indexOf(f);y!==-1&&h.splice(y,1)}}}clearEscHandler(g){this._escHandlers[this._identifier(g,[48,126])]&&delete this._escHandlers[this._identifier(g,[48,126])]}setEscHandlerFallback(g){this._escHandlerFb=g}setExecuteHandler(g,f){this._executeHandlers[g.charCodeAt(0)]=f}clearExecuteHandler(g){this._executeHandlers[g.charCodeAt(0)]&&delete this._executeHandlers[g.charCodeAt(0)]}setExecuteHandlerFallback(g){this._executeHandlerFb=g}registerCsiHandler(g,f){let u=this._identifier(g);this._csiHandlers[u]===void 0&&(this._csiHandlers[u]=[]);let h=this._csiHandlers[u];return h.push(f),{dispose:()=>{let y=h.indexOf(f);y!==-1&&h.splice(y,1)}}}clearCsiHandler(g){this._csiHandlers[this._identifier(g)]&&delete this._csiHandlers[this._identifier(g)]}setCsiHandlerFallback(g){this._csiHandlerFb=g}registerDcsHandler(g,f){return this._dcsParser.registerHandler(this._identifier(g),f)}clearDcsHandler(g){this._dcsParser.clearHandler(this._identifier(g))}setDcsHandlerFallback(g){this._dcsParser.setHandlerFallback(g)}registerOscHandler(g,f){return this._oscParser.registerHandler(g,f)}clearOscHandler(g){this._oscParser.clearHandler(g)}setOscHandlerFallback(g){this._oscParser.setHandlerFallback(g)}setErrorHandler(g){this._errorHandler=g}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(g,f,u,h,y){this._parseStack.state=g,this._parseStack.handlers=f,this._parseStack.handlerPos=u,this._parseStack.transition=h,this._parseStack.chunkPos=y}parse(g,f,u){let h,y=0,T=0,C=0;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,C=this._parseStack.chunkPos+1;else{if(u===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");let x=this._parseStack.handlers,N=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(u===!1&&N>-1){for(;N>=0&&(h=x[N](this._params),h!==!0);N--)if(h instanceof Promise)return this._parseStack.handlerPos=N,h}this._parseStack.handlers=[];break;case 4:if(u===!1&&N>-1){for(;N>=0&&(h=x[N](),h!==!0);N--)if(h instanceof Promise)return this._parseStack.handlerPos=N,h}this._parseStack.handlers=[];break;case 6:if(y=g[this._parseStack.chunkPos],h=this._dcsParser.unhook(y!==24&&y!==26,u),h)return h;y===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(y=g[this._parseStack.chunkPos],h=this._oscParser.end(y!==24&&y!==26,u),h)return h;y===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,C=this._parseStack.chunkPos+1,this.precedingJoinState=0,this.currentState=15&this._parseStack.transition}for(let x=C;x<f;++x){switch(y=g[x],T=this._transitions.table[this.currentState<<8|(y<160?y:m)],T>>4){case 2:for(let E=x+1;;++E){if(E>=f||(y=g[E])<32||y>126&&y<m){this._printHandler(g,x,E),x=E-1;break}if(++E>=f||(y=g[E])<32||y>126&&y<m){this._printHandler(g,x,E),x=E-1;break}if(++E>=f||(y=g[E])<32||y>126&&y<m){this._printHandler(g,x,E),x=E-1;break}if(++E>=f||(y=g[E])<32||y>126&&y<m){this._printHandler(g,x,E),x=E-1;break}}break;case 3:this._executeHandlers[y]?this._executeHandlers[y]():this._executeHandlerFb(y),this.precedingJoinState=0;break;case 0:break;case 1:if(this._errorHandler({position:x,code:y,currentState:this.currentState,collect:this._collect,params:this._params,abort:!1}).abort)return;break;case 7:let N=this._csiHandlers[this._collect<<8|y],B=N?N.length-1:-1;for(;B>=0&&(h=N[B](this._params),h!==!0);B--)if(h instanceof Promise)return this._preserveStack(3,N,B,T,x),h;B<0&&this._csiHandlerFb(this._collect<<8|y,this._params),this.precedingJoinState=0;break;case 8:do switch(y){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(y-48)}while(++x<f&&(y=g[x])>47&&y<60);x--;break;case 9:this._collect<<=8,this._collect|=y;break;case 10:let D=this._escHandlers[this._collect<<8|y],A=D?D.length-1:-1;for(;A>=0&&(h=D[A](),h!==!0);A--)if(h instanceof Promise)return this._preserveStack(4,D,A,T,x),h;A<0&&this._escHandlerFb(this._collect<<8|y),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|y,this._params);break;case 13:for(let E=x+1;;++E)if(E>=f||(y=g[E])===24||y===26||y===27||y>127&&y<m){this._dcsParser.put(g,x,E),x=E-1;break}break;case 14:if(h=this._dcsParser.unhook(y!==24&&y!==26),h)return this._preserveStack(6,[],0,T,x),h;y===27&&(T|=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 E=x+1;;E++)if(E>=f||(y=g[E])<32||y>127&&y<m){this._oscParser.put(g,x,E),x=E-1;break}break;case 6:if(h=this._oscParser.end(y!==24&&y!==26),h)return this._preserveStack(5,[],0,T,x),h;y===27&&(T|=1),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingJoinState=0}this.currentState=15&T}}}i.EscapeSequenceParser=w},1346:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.OscHandler=i.OscParser=void 0;let d=c(1263),_=c(726),a=[];i.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(b,l){this._handlers[b]===void 0&&(this._handlers[b]=[]);let m=this._handlers[b];return m.push(l),{dispose:()=>{let w=m.indexOf(l);w!==-1&&m.splice(w,1)}}}clearHandler(b){this._handlers[b]&&delete this._handlers[b]}setHandlerFallback(b){this._handlerFb=b}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=a}reset(){if(this._state===2)for(let b=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;b>=0;--b)this._active[b].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 b=this._active.length-1;b>=0;b--)this._active[b].start();else this._handlerFb(this._id,"START")}_put(b,l,m){if(this._active.length)for(let w=this._active.length-1;w>=0;w--)this._active[w].put(b,l,m);else this._handlerFb(this._id,"PUT",(0,_.utf32ToString)(b,l,m))}start(){this.reset(),this._state=1}put(b,l,m){if(this._state!==3){if(this._state===1)for(;l<m;){let w=b[l++];if(w===59){this._state=2,this._start();break}if(w<48||57<w)return void(this._state=3);this._id===-1&&(this._id=0),this._id=10*this._id+w-48}this._state===2&&m-l>0&&this._put(b,l,m)}}end(b,l=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),this._active.length){let m=!1,w=this._active.length-1,n=!1;if(this._stack.paused&&(w=this._stack.loopPosition-1,m=l,n=this._stack.fallThrough,this._stack.paused=!1),!n&&m===!1){for(;w>=0&&(m=this._active[w].end(b),m!==!0);w--)if(m instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=w,this._stack.fallThrough=!1,m;w--}for(;w>=0;w--)if(m=this._active[w].end(!1),m instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=w,this._stack.fallThrough=!0,m}else this._handlerFb(this._id,"END",b);this._active=a,this._id=-1,this._state=0}}},i.OscHandler=class{constructor(b){this._handler=b,this._data="",this._hitLimit=!1}start(){this._data="",this._hitLimit=!1}put(b,l,m){this._hitLimit||(this._data+=(0,_.utf32ToString)(b,l,m),this._data.length>d.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}end(b){let l=!1;if(this._hitLimit)l=!1;else if(b&&(l=this._handler(this._data),l instanceof Promise))return l.then((m=>(this._data="",this._hitLimit=!1,m)));return this._data="",this._hitLimit=!1,l}}},7262:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Params=void 0;let c=2147483647;class d{static fromArray(a){let b=new d;if(!a.length)return b;for(let l=Array.isArray(a[0])?1:0;l<a.length;++l){let m=a[l];if(Array.isArray(m))for(let w=0;w<m.length;++w)b.addSubParam(m[w]);else b.addParam(m)}return b}constructor(a=32,b=32){if(this.maxLength=a,this.maxSubParamsLength=b,b>256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(a),this.length=0,this._subParams=new Int32Array(b),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(a),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){let a=new d(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 b=0;b<this.length;++b){a.push(this.params[b]);let l=this._subParamsIdx[b]>>8,m=255&this._subParamsIdx[b];m-l>0&&a.push(Array.prototype.slice.call(this._subParams,l,m))}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>c?c: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>c?c:a,this._subParamsIdx[this.length-1]++}}hasSubParams(a){return(255&this._subParamsIdx[a])-(this._subParamsIdx[a]>>8)>0}getSubParams(a){let b=this._subParamsIdx[a]>>8,l=255&this._subParamsIdx[a];return l-b>0?this._subParams.subarray(b,l):null}getSubParamsAll(){let a={};for(let b=0;b<this.length;++b){let l=this._subParamsIdx[b]>>8,m=255&this._subParamsIdx[b];m-l>0&&(a[b]=this._subParams.slice(l,m))}return a}addDigit(a){let b;if(this._rejectDigits||!(b=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;let l=this._digitIsSub?this._subParams:this.params,m=l[b-1];l[b-1]=~m?Math.min(10*m+a,c):a}}i.Params=d},3027:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.AddonManager=void 0,i.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let c=this._addons.length-1;c>=0;c--)this._addons[c].instance.dispose()}loadAddon(c,d){let _={instance:d,dispose:d.dispose,isDisposed:!1};this._addons.push(_),d.dispose=()=>this._wrappedAddonDispose(_),d.activate(c)}_wrappedAddonDispose(c){if(c.isDisposed)return;let d=-1;for(let _=0;_<this._addons.length;_++)if(this._addons[_]===c){d=_;break}if(d===-1)throw new Error("Could not dispose an addon that has not been loaded");c.isDisposed=!0,c.dispose.apply(c.instance),this._addons.splice(d,1)}}},3235:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BufferApiView=void 0;let d=c(793),_=c(3055);i.BufferApiView=class{constructor(a,b){this._buffer=a,this.type=b}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 b=this._buffer.lines.get(a);if(b)return new d.BufferLineApiView(b)}getNullCell(){return new _.CellData}}},793:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BufferLineApiView=void 0;let d=c(3055);i.BufferLineApiView=class{constructor(_){this._line=_}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(_,a){if(!(_<0||_>=this._line.length))return a?(this._line.loadCell(_,a),a):this._line.loadCell(_,new d.CellData)}translateToString(_,a,b){return this._line.translateToString(_,a,b)}}},5101:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BufferNamespaceApi=void 0;let d=c(3235),_=c(7150),a=c(802);class b extends _.Disposable{constructor(m){super(),this._core=m,this._onBufferChange=this._register(new a.Emitter),this.onBufferChange=this._onBufferChange.event,this._normal=new d.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new d.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)}}i.BufferNamespaceApi=b},6097:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.ParserApi=void 0,i.ParserApi=class{constructor(c){this._core=c}registerCsiHandler(c,d){return this._core.registerCsiHandler(c,(_=>d(_.toArray())))}addCsiHandler(c,d){return this.registerCsiHandler(c,d)}registerDcsHandler(c,d){return this._core.registerDcsHandler(c,((_,a)=>d(_,a.toArray())))}addDcsHandler(c,d){return this.registerDcsHandler(c,d)}registerEscHandler(c,d){return this._core.registerEscHandler(c,d)}addEscHandler(c,d){return this.registerEscHandler(c,d)}registerOscHandler(c,d){return this._core.registerOscHandler(c,d)}addOscHandler(c,d){return this.registerOscHandler(c,d)}}},4335:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.UnicodeApi=void 0,i.UnicodeApi=class{constructor(c){this._core=c}register(c){this._core.unicodeService.register(c)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(c){this._core.unicodeService.activeVersion=c}}},9640:function(k,i,c){var d=this&&this.__decorate||function(n,g,f,u){var h,y=arguments.length,T=y<3?g:u===null?u=Object.getOwnPropertyDescriptor(g,f):u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")T=Reflect.decorate(n,g,f,u);else for(var C=n.length-1;C>=0;C--)(h=n[C])&&(T=(y<3?h(T):y>3?h(g,f,T):h(g,f))||T);return y>3&&T&&Object.defineProperty(g,f,T),T},_=this&&this.__param||function(n,g){return function(f,u){g(f,u,n)}};Object.defineProperty(i,"__esModule",{value:!0}),i.BufferService=i.MINIMUM_ROWS=i.MINIMUM_COLS=void 0;let a=c(7150),b=c(4097),l=c(6501),m=c(802);i.MINIMUM_COLS=2,i.MINIMUM_ROWS=1;let w=class extends a.Disposable{get buffer(){return this.buffers.active}constructor(n){super(),this.isUserScrolling=!1,this._onResize=this._register(new m.Emitter),this.onResize=this._onResize.event,this._onScroll=this._register(new m.Emitter),this.onScroll=this._onScroll.event,this.cols=Math.max(n.rawOptions.cols||0,i.MINIMUM_COLS),this.rows=Math.max(n.rawOptions.rows||0,i.MINIMUM_ROWS),this.buffers=this._register(new b.BufferSet(n,this)),this._register(this.buffers.onBufferActivate((g=>{this._onScroll.fire(g.activeBuffer.ydisp)})))}resize(n,g){let f=this.cols!==n,u=this.rows!==g;this.cols=n,this.rows=g,this.buffers.resize(n,g),this._onResize.fire({cols:n,rows:g,colsChanged:f,rowsChanged:u})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(n,g=!1){let f=this.buffer,u;u=this._cachedBlankLine,u&&u.length===this.cols&&u.getFg(0)===n.fg&&u.getBg(0)===n.bg||(u=f.getBlankLine(n,g),this._cachedBlankLine=u),u.isWrapped=g;let h=f.ybase+f.scrollTop,y=f.ybase+f.scrollBottom;if(f.scrollTop===0){let T=f.lines.isFull;y===f.lines.length-1?T?f.lines.recycle().copyFrom(u):f.lines.push(u.clone()):f.lines.splice(y+1,0,u.clone()),T?this.isUserScrolling&&(f.ydisp=Math.max(f.ydisp-1,0)):(f.ybase++,this.isUserScrolling||f.ydisp++)}else{let T=y-h+1;f.lines.shiftElements(h+1,T-1,-1),f.lines.set(y,u.clone())}this.isUserScrolling||(f.ydisp=f.ybase),this._onScroll.fire(f.ydisp)}scrollLines(n,g){let f=this.buffer;if(n<0){if(f.ydisp===0)return;this.isUserScrolling=!0}else n+f.ydisp>=f.ybase&&(this.isUserScrolling=!1);let u=f.ydisp;f.ydisp=Math.max(Math.min(f.ydisp+n,f.ybase),0),u!==f.ydisp&&(g||this._onScroll.fire(f.ydisp))}};i.BufferService=w,i.BufferService=w=d([_(0,l.IOptionsService)],w)},5746:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CharsetService=void 0,i.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(c){this.glevel=c,this.charset=this._charsets[c]}setgCharset(c,d){this._charsets[c]=d,this.glevel===c&&(this.charset=d)}}},7792:function(k,i,c){var d=this&&this.__decorate||function(u,h,y,T){var C,x=arguments.length,N=x<3?h:T===null?T=Object.getOwnPropertyDescriptor(h,y):T;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")N=Reflect.decorate(u,h,y,T);else for(var B=u.length-1;B>=0;B--)(C=u[B])&&(N=(x<3?C(N):x>3?C(h,y,N):C(h,y))||N);return x>3&&N&&Object.defineProperty(h,y,N),N},_=this&&this.__param||function(u,h){return function(y,T){h(y,T,u)}};Object.defineProperty(i,"__esModule",{value:!0}),i.CoreMouseService=void 0;let a=c(6501),b=c(7150),l=c(802),m={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:u=>u.button!==4&&u.action===1&&(u.ctrl=!1,u.alt=!1,u.shift=!1,!0)},VT200:{events:19,restrict:u=>u.action!==32},DRAG:{events:23,restrict:u=>u.action!==32||u.button!==3},ANY:{events:31,restrict:u=>!0}};function w(u,h){let y=(u.ctrl?16:0)|(u.shift?4:0)|(u.alt?8:0);return u.button===4?(y|=64,y|=u.action):(y|=3&u.button,4&u.button&&(y|=64),8&u.button&&(y|=128),u.action===32?y|=32:u.action!==0||h||(y|=3)),y}let n=String.fromCharCode,g={DEFAULT:u=>{let h=[w(u,!1)+32,u.col+32,u.row+32];return h[0]>255||h[1]>255||h[2]>255?"":`\x1B[M${n(h[0])}${n(h[1])}${n(h[2])}`},SGR:u=>{let h=u.action===0&&u.button!==4?"m":"M";return`\x1B[<${w(u,!0)};${u.col};${u.row}${h}`},SGR_PIXELS:u=>{let h=u.action===0&&u.button!==4?"m":"M";return`\x1B[<${w(u,!0)};${u.x};${u.y}${h}`}},f=class extends b.Disposable{constructor(u,h,y){super(),this._bufferService=u,this._coreService=h,this._optionsService=y,this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._lastEvent=null,this._wheelPartialScroll=0,this._onProtocolChange=this._register(new l.Emitter),this.onProtocolChange=this._onProtocolChange.event;for(let T of Object.keys(m))this.addProtocol(T,m[T]);for(let T of Object.keys(g))this.addEncoding(T,g[T]);this.reset()}addProtocol(u,h){this._protocols[u]=h}addEncoding(u,h){this._encodings[u]=h}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(u){if(!this._protocols[u])throw new Error(`unknown protocol "${u}"`);this._activeProtocol=u,this._onProtocolChange.fire(this._protocols[u].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(u){if(!this._encodings[u])throw new Error(`unknown encoding "${u}"`);this._activeEncoding=u}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT",this._lastEvent=null,this._wheelPartialScroll=0}consumeWheelEvent(u,h,y){if(u.deltaY===0||u.shiftKey||h===void 0||y===void 0)return 0;let T=h/y,C=this._applyScrollModifier(u.deltaY,u);return u.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(C/=T+0,Math.abs(u.deltaY)<50&&(C*=.3),this._wheelPartialScroll+=C,C=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):u.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(C*=this._bufferService.rows),C}_applyScrollModifier(u,h){return h.altKey||h.ctrlKey||h.shiftKey?u*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:u*this._optionsService.rawOptions.scrollSensitivity}triggerMouseEvent(u){if(u.col<0||u.col>=this._bufferService.cols||u.row<0||u.row>=this._bufferService.rows||u.button===4&&u.action===32||u.button===3&&u.action!==32||u.button!==4&&(u.action===2||u.action===3)||(u.col++,u.row++,u.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,u,this._activeEncoding==="SGR_PIXELS"))||!this._protocols[this._activeProtocol].restrict(u))return!1;let h=this._encodings[this._activeEncoding](u);return h&&(this._activeEncoding==="DEFAULT"?this._coreService.triggerBinaryEvent(h):this._coreService.triggerDataEvent(h,!0)),this._lastEvent=u,!0}explainEvents(u){return{down:!!(1&u),up:!!(2&u),drag:!!(4&u),move:!!(8&u),wheel:!!(16&u)}}_equalEvents(u,h,y){if(y){if(u.x!==h.x||u.y!==h.y)return!1}else if(u.col!==h.col||u.row!==h.row)return!1;return u.button===h.button&&u.action===h.action&&u.ctrl===h.ctrl&&u.alt===h.alt&&u.shift===h.shift}};i.CoreMouseService=f,i.CoreMouseService=f=d([_(0,a.IBufferService),_(1,a.ICoreService),_(2,a.IOptionsService)],f)},4071:function(k,i,c){var d=this&&this.__decorate||function(f,u,h,y){var T,C=arguments.length,x=C<3?u:y===null?y=Object.getOwnPropertyDescriptor(u,h):y;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")x=Reflect.decorate(f,u,h,y);else for(var N=f.length-1;N>=0;N--)(T=f[N])&&(x=(C<3?T(x):C>3?T(u,h,x):T(u,h))||x);return C>3&&x&&Object.defineProperty(u,h,x),x},_=this&&this.__param||function(f,u){return function(h,y){u(h,y,f)}};Object.defineProperty(i,"__esModule",{value:!0}),i.CoreService=void 0;let a=c(7453),b=c(7150),l=c(6501),m=c(802),w=Object.freeze({insertMode:!1}),n=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,cursorBlink:void 0,cursorStyle:void 0,origin:!1,reverseWraparound:!1,sendFocus:!1,synchronizedOutput:!1,wraparound:!0}),g=class extends b.Disposable{constructor(f,u,h){super(),this._bufferService=f,this._logService=u,this._optionsService=h,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this._register(new m.Emitter),this.onData=this._onData.event,this._onUserInput=this._register(new m.Emitter),this.onUserInput=this._onUserInput.event,this._onBinary=this._register(new m.Emitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this._register(new m.Emitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=(0,a.clone)(w),this.decPrivateModes=(0,a.clone)(n)}reset(){this.modes=(0,a.clone)(w),this.decPrivateModes=(0,a.clone)(n)}triggerDataEvent(f,u=!1){if(this._optionsService.rawOptions.disableStdin)return;let h=this._bufferService.buffer;u&&this._optionsService.rawOptions.scrollOnUserInput&&h.ybase!==h.ydisp&&this._onRequestScrollToBottom.fire(),u&&this._onUserInput.fire(),this._logService.debug(`sending data "${f}"`),this._logService.trace("sending data (codes)",(()=>f.split("").map((y=>y.charCodeAt(0))))),this._onData.fire(f)}triggerBinaryEvent(f){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${f}"`),this._logService.trace("sending binary (codes)",(()=>f.split("").map((u=>u.charCodeAt(0))))),this._onBinary.fire(f))}};i.CoreService=g,i.CoreService=g=d([_(0,l.IBufferService),_(1,l.ILogService),_(2,l.IOptionsService)],g)},6025:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.InstantiationService=i.ServiceCollection=void 0;let d=c(6501),_=c(6201);class a{constructor(...l){this._entries=new Map;for(let[m,w]of l)this.set(m,w)}set(l,m){let w=this._entries.get(l);return this._entries.set(l,m),w}forEach(l){for(let[m,w]of this._entries.entries())l(m,w)}has(l){return this._entries.has(l)}get(l){return this._entries.get(l)}}i.ServiceCollection=a,i.InstantiationService=class{constructor(){this._services=new a,this._services.set(d.IInstantiationService,this)}setService(b,l){this._services.set(b,l)}getService(b){return this._services.get(b)}createInstance(b,...l){let m=(0,_.getServiceDependencies)(b).sort(((g,f)=>g.index-f.index)),w=[];for(let g of m){let f=this._services.get(g.id);if(!f)throw new Error(`[createInstance] ${b.name} depends on UNKNOWN service ${g.id._id}.`);w.push(f)}let n=m.length>0?m[0].index:l.length;if(l.length!==n)throw new Error(`[createInstance] First service dependency of ${b.name} at position ${n+1} conflicts with ${l.length} static arguments`);return new b(...l,...w)}}},7276:function(k,i,c){var d=this&&this.__decorate||function(n,g,f,u){var h,y=arguments.length,T=y<3?g:u===null?u=Object.getOwnPropertyDescriptor(g,f):u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")T=Reflect.decorate(n,g,f,u);else for(var C=n.length-1;C>=0;C--)(h=n[C])&&(T=(y<3?h(T):y>3?h(g,f,T):h(g,f))||T);return y>3&&T&&Object.defineProperty(g,f,T),T},_=this&&this.__param||function(n,g){return function(f,u){g(f,u,n)}};Object.defineProperty(i,"__esModule",{value:!0}),i.LogService=void 0,i.setTraceLogger=function(n){m=n},i.traceCall=function(n,g,f){if(typeof f.value!="function")throw new Error("not supported");let u=f.value;f.value=function(...h){if(m.logLevel!==b.LogLevelEnum.TRACE)return u.apply(this,h);m.trace(`GlyphRenderer#${u.name}(${h.map((T=>JSON.stringify(T))).join(", ")})`);let y=u.apply(this,h);return m.trace(`GlyphRenderer#${u.name} return`,y),y}};let a=c(7150),b=c(6501),l={trace:b.LogLevelEnum.TRACE,debug:b.LogLevelEnum.DEBUG,info:b.LogLevelEnum.INFO,warn:b.LogLevelEnum.WARN,error:b.LogLevelEnum.ERROR,off:b.LogLevelEnum.OFF},m,w=class extends a.Disposable{get logLevel(){return this._logLevel}constructor(n){super(),this._optionsService=n,this._logLevel=b.LogLevelEnum.OFF,this._updateLogLevel(),this._register(this._optionsService.onSpecificOptionChange("logLevel",(()=>this._updateLogLevel()))),m=this}_updateLogLevel(){this._logLevel=l[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(n){for(let g=0;g<n.length;g++)typeof n[g]=="function"&&(n[g]=n[g]())}_log(n,g,f){this._evalLazyOptionalParams(f),n.call(console,(this._optionsService.options.logger?"":"xterm.js: ")+g,...f)}trace(n,...g){this._logLevel<=b.LogLevelEnum.TRACE&&this._log(this._optionsService.options.logger?.trace.bind(this._optionsService.options.logger)??console.log,n,g)}debug(n,...g){this._logLevel<=b.LogLevelEnum.DEBUG&&this._log(this._optionsService.options.logger?.debug.bind(this._optionsService.options.logger)??console.log,n,g)}info(n,...g){this._logLevel<=b.LogLevelEnum.INFO&&this._log(this._optionsService.options.logger?.info.bind(this._optionsService.options.logger)??console.info,n,g)}warn(n,...g){this._logLevel<=b.LogLevelEnum.WARN&&this._log(this._optionsService.options.logger?.warn.bind(this._optionsService.options.logger)??console.warn,n,g)}error(n,...g){this._logLevel<=b.LogLevelEnum.ERROR&&this._log(this._optionsService.options.logger?.error.bind(this._optionsService.options.logger)??console.error,n,g)}};i.LogService=w,i.LogService=w=d([_(0,b.IOptionsService)],w)},56:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.OptionsService=i.DEFAULT_OPTIONS=void 0;let d=c(7150),_=c(701),a=c(802);i.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:_.isMac,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",cancelEvents:!1,overviewRuler:{}};let b=["normal","bold","100","200","300","400","500","600","700","800","900"];class l extends d.Disposable{constructor(w){super(),this._onOptionChange=this._register(new a.Emitter),this.onOptionChange=this._onOptionChange.event;let n={...i.DEFAULT_OPTIONS};for(let g in w)if(g in n)try{let f=w[g];n[g]=this._sanitizeAndValidateOption(g,f)}catch(f){console.error(f)}this.rawOptions=n,this.options={...n},this._setupOptions(),this._register((0,d.toDisposable)((()=>{this.rawOptions.linkHandler=null,this.rawOptions.documentOverride=null})))}onSpecificOptionChange(w,n){return this.onOptionChange((g=>{g===w&&n(this.rawOptions[w])}))}onMultipleOptionChange(w,n){return this.onOptionChange((g=>{w.indexOf(g)!==-1&&n()}))}_setupOptions(){let w=g=>{if(!(g in i.DEFAULT_OPTIONS))throw new Error(`No option with key "${g}"`);return this.rawOptions[g]},n=(g,f)=>{if(!(g in i.DEFAULT_OPTIONS))throw new Error(`No option with key "${g}"`);f=this._sanitizeAndValidateOption(g,f),this.rawOptions[g]!==f&&(this.rawOptions[g]=f,this._onOptionChange.fire(g))};for(let g in this.rawOptions){let f={get:w.bind(this,g),set:n.bind(this,g)};Object.defineProperty(this.options,g,f)}}_sanitizeAndValidateOption(w,n){switch(w){case"cursorStyle":if(n||(n=i.DEFAULT_OPTIONS[w]),!(function(g){return g==="block"||g==="underline"||g==="bar"})(n))throw new Error(`"${n}" is not a valid value for ${w}`);break;case"wordSeparator":n||(n=i.DEFAULT_OPTIONS[w]);break;case"fontWeight":case"fontWeightBold":if(typeof n=="number"&&1<=n&&n<=1e3)break;n=b.includes(n)?n:i.DEFAULT_OPTIONS[w];break;case"cursorWidth":n=Math.floor(n);case"lineHeight":case"tabStopWidth":if(n<1)throw new Error(`${w} cannot be less than 1, value: ${n}`);break;case"minimumContrastRatio":n=Math.max(1,Math.min(21,Math.round(10*n)/10));break;case"scrollback":if((n=Math.min(n,4294967295))<0)throw new Error(`${w} cannot be less than 0, value: ${n}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(n<=0)throw new Error(`${w} cannot be less than or equal to 0, value: ${n}`);break;case"rows":case"cols":if(!n&&n!==0)throw new Error(`${w} must be numeric, value: ${n}`);break;case"windowsPty":n=n??{}}return n}}i.OptionsService=l},8811:function(k,i,c){var d=this&&this.__decorate||function(l,m,w,n){var g,f=arguments.length,u=f<3?m:n===null?n=Object.getOwnPropertyDescriptor(m,w):n;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")u=Reflect.decorate(l,m,w,n);else for(var h=l.length-1;h>=0;h--)(g=l[h])&&(u=(f<3?g(u):f>3?g(m,w,u):g(m,w))||u);return f>3&&u&&Object.defineProperty(m,w,u),u},_=this&&this.__param||function(l,m){return function(w,n){m(w,n,l)}};Object.defineProperty(i,"__esModule",{value:!0}),i.OscLinkService=void 0;let a=c(6501),b=class{constructor(l){this._bufferService=l,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(l){let m=this._bufferService.buffer;if(l.id===void 0){let h=m.addMarker(m.ybase+m.y),y={data:l,id:this._nextId++,lines:[h]};return h.onDispose((()=>this._removeMarkerFromLink(y,h))),this._dataByLinkId.set(y.id,y),y.id}let w=l,n=this._getEntryIdKey(w),g=this._entriesWithId.get(n);if(g)return this.addLineToLink(g.id,m.ybase+m.y),g.id;let f=m.addMarker(m.ybase+m.y),u={id:this._nextId++,key:this._getEntryIdKey(w),data:w,lines:[f]};return f.onDispose((()=>this._removeMarkerFromLink(u,f))),this._entriesWithId.set(u.key,u),this._dataByLinkId.set(u.id,u),u.id}addLineToLink(l,m){let w=this._dataByLinkId.get(l);if(w&&w.lines.every((n=>n.line!==m))){let n=this._bufferService.buffer.addMarker(m);w.lines.push(n),n.onDispose((()=>this._removeMarkerFromLink(w,n)))}}getLinkData(l){return this._dataByLinkId.get(l)?.data}_getEntryIdKey(l){return`${l.id};;${l.uri}`}_removeMarkerFromLink(l,m){let w=l.lines.indexOf(m);w!==-1&&(l.lines.splice(w,1),l.lines.length===0&&(l.data.id!==void 0&&this._entriesWithId.delete(l.key),this._dataByLinkId.delete(l.id)))}};i.OscLinkService=b,i.OscLinkService=b=d([_(0,a.IBufferService)],b)},6201:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.serviceRegistry=void 0,i.getServiceDependencies=function(_){return _[d]||[]},i.createDecorator=function(_){if(i.serviceRegistry.has(_))return i.serviceRegistry.get(_);let a=function(b,l,m){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");(function(w,n,g){n[c]===n?n[d].push({id:w,index:g}):(n[d]=[{id:w,index:g}],n[c]=n)})(a,b,m)};return a._id=_,i.serviceRegistry.set(_,a),a};let c="di$target",d="di$dependencies";i.serviceRegistry=new Map},6501:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.IDecorationService=i.IUnicodeService=i.IOscLinkService=i.IOptionsService=i.ILogService=i.LogLevelEnum=i.IInstantiationService=i.ICharsetService=i.ICoreService=i.ICoreMouseService=i.IBufferService=void 0;let d=c(6201);var _;i.IBufferService=(0,d.createDecorator)("BufferService"),i.ICoreMouseService=(0,d.createDecorator)("CoreMouseService"),i.ICoreService=(0,d.createDecorator)("CoreService"),i.ICharsetService=(0,d.createDecorator)("CharsetService"),i.IInstantiationService=(0,d.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"})(_||(i.LogLevelEnum=_={})),i.ILogService=(0,d.createDecorator)("LogService"),i.IOptionsService=(0,d.createDecorator)("OptionsService"),i.IOscLinkService=(0,d.createDecorator)("OscLinkService"),i.IUnicodeService=(0,d.createDecorator)("UnicodeService"),i.IDecorationService=(0,d.createDecorator)("DecorationService")},6415:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.UnicodeService=void 0;let d=c(7428),_=c(802);class a{static extractShouldJoin(l){return!!(1&l)}static extractWidth(l){return l>>1&3}static extractCharKind(l){return l>>3}static createPropertyValue(l,m,w=!1){return(16777215&l)<<3|(3&m)<<1|(w?1:0)}constructor(){this._providers=Object.create(null),this._active="",this._onChange=new _.Emitter,this.onChange=this._onChange.event;let l=new d.UnicodeV6;this.register(l),this._active=l.version,this._activeProvider=l}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(l){if(!this._providers[l])throw new Error(`unknown Unicode version "${l}"`);this._active=l,this._activeProvider=this._providers[l],this._onChange.fire(l)}register(l){this._providers[l.version]=l}wcwidth(l){return this._activeProvider.wcwidth(l)}getStringCellWidth(l){let m=0,w=0,n=l.length;for(let g=0;g<n;++g){let f=l.charCodeAt(g);if(55296<=f&&f<=56319){if(++g>=n)return m+this.wcwidth(f);let y=l.charCodeAt(g);56320<=y&&y<=57343?f=1024*(f-55296)+y-56320+65536:m+=this.wcwidth(y)}let u=this.charProperties(f,w),h=a.extractWidth(u);a.extractShouldJoin(u)&&(h-=a.extractWidth(w)),m+=h,w=u}return m}charProperties(l,m){return this._activeProvider.charProperties(l,m)}}i.UnicodeService=a},5856:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Terminal=void 0;let d=c(6107),_=c(5777),a=c(802);class b extends _.CoreTerminal{constructor(m={}){super(m),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(m){if(this.buffer===this.buffers.normal)return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+m)}bell(){this._onBell.fire()}input(m,w=!0){this.coreService.triggerDataEvent(m,w)}resize(m,w){m===this.cols&&w===this.rows||super.resize(m,w)}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 m=1;m<this.rows;m++)this.buffer.lines.push(this.buffer.getBlankLine(d.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()}}i.Terminal=b},3058:(k,i,c)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Permutation=i.CallbackIterable=i.ArrayQueue=i.booleanComparator=i.numberComparator=i.CompareResult=void 0,i.tail=function(h,y=0){return h[h.length-(1+y)]},i.tail2=function(h){if(h.length===0)throw new Error("Invalid tail call");return[h.slice(0,h.length-1),h[h.length-1]]},i.equals=function(h,y,T=(C,x)=>C===x){if(h===y)return!0;if(!h||!y||h.length!==y.length)return!1;for(let C=0,x=h.length;C<x;C++)if(!T(h[C],y[C]))return!1;return!0},i.removeFastWithoutKeepingOrder=function(h,y){let T=h.length-1;y<T&&(h[y]=h[T]),h.pop()},i.binarySearch=function(h,y,T){return a(h.length,(C=>T(h[C],y)))},i.binarySearch2=a,i.quickSelect=function h(y,T,C){if((y|=0)>=T.length)throw new TypeError("invalid index");let x=T[Math.floor(T.length*Math.random())],N=[],B=[],D=[];for(let A of T){let E=C(A,x);E<0?N.push(A):E>0?B.push(A):D.push(A)}return y<N.length?h(y,N,C):y<N.length+D.length?D[0]:h(y-(N.length+D.length),B,C)},i.groupBy=function(h,y){let T=[],C;for(let x of h.slice(0).sort(y))C&&y(C[0],x)===0?C.push(x):(C=[x],T.push(C));return T},i.groupAdjacentBy=function*(h,y){let T,C;for(let x of h)C!==void 0&&y(C,x)?T.push(x):(T&&(yield T),T=[x]),C=x;T&&(yield T)},i.forEachAdjacent=function(h,y){for(let T=0;T<=h.length;T++)y(T===0?void 0:h[T-1],T===h.length?void 0:h[T])},i.forEachWithNeighbors=function(h,y){for(let T=0;T<h.length;T++)y(T===0?void 0:h[T-1],h[T],T+1===h.length?void 0:h[T+1])},i.sortedDiff=b,i.delta=function(h,y,T){let C=b(h,y,T),x=[],N=[];for(let B of C)x.push(...h.slice(B.start,B.start+B.deleteCount)),N.push(...B.toInsert);return{removed:x,added:N}},i.top=function(h,y,T){if(T===0)return[];let C=h.slice(0,T).sort(y);return l(h,y,C,T,h.length),C},i.topAsync=function(h,y,T,C,x){return T===0?Promise.resolve([]):new Promise(((N,B)=>{(async()=>{let D=h.length,A=h.slice(0,T).sort(y);for(let E=T,q=Math.min(T+C,D);E<D;E=q,q=Math.min(q+C,D)){if(E>T&&await new Promise((K=>setTimeout(K))),x&&x.isCancellationRequested)throw new d.CancellationError;l(h,y,A,E,q)}return A})().then(N,B)}))},i.coalesce=function(h){return h.filter((y=>!!y))},i.coalesceInPlace=function(h){let y=0;for(let T=0;T<h.length;T++)h[T]&&(h[y]=h[T],y+=1);h.length=y},i.move=function(h,y,T){h.splice(T,0,h.splice(y,1)[0])},i.isFalsyOrEmpty=function(h){return!Array.isArray(h)||h.length===0},i.isNonEmptyArray=function(h){return Array.isArray(h)&&h.length>0},i.distinct=function(h,y=T=>T){let T=new Set;return h.filter((C=>{let x=y(C);return!T.has(x)&&(T.add(x),!0)}))},i.uniqueFilter=function(h){let y=new Set;return T=>{let C=h(T);return!y.has(C)&&(y.add(C),!0)}},i.firstOrDefault=function(h,y){return h.length>0?h[0]:y},i.lastOrDefault=function(h,y){return h.length>0?h[h.length-1]:y},i.commonPrefixLength=function(h,y,T=(C,x)=>C===x){let C=0;for(let x=0,N=Math.min(h.length,y.length);x<N&&T(h[x],y[x]);x++)C++;return C},i.range=function(h,y){let T=typeof y=="number"?h:0;typeof y=="number"?T=h:(T=0,y=h);let C=[];if(T<=y)for(let x=T;x<y;x++)C.push(x);else for(let x=T;x>y;x--)C.push(x);return C},i.index=function(h,y,T){return h.reduce(((C,x)=>(C[y(x)]=T?T(x):x,C)),Object.create(null))},i.insert=function(h,y){return h.push(y),()=>m(h,y)},i.remove=m,i.arrayInsert=function(h,y,T){let C=h.slice(0,y),x=h.slice(y);return C.concat(T,x)},i.shuffle=function(h,y){let T;if(typeof y=="number"){let C=y;T=()=>{let x=179426549*Math.sin(C++);return x-Math.floor(x)}}else T=Math.random;for(let C=h.length-1;C>0;C-=1){let x=Math.floor(T()*(C+1)),N=h[C];h[C]=h[x],h[x]=N}},i.pushToStart=function(h,y){let T=h.indexOf(y);T>-1&&(h.splice(T,1),h.unshift(y))},i.pushToEnd=function(h,y){let T=h.indexOf(y);T>-1&&(h.splice(T,1),h.push(y))},i.pushMany=function(h,y){for(let T of y)h.push(T)},i.mapArrayOrNot=function(h,y){return Array.isArray(h)?h.map(y):y(h)},i.asArray=function(h){return Array.isArray(h)?h:[h]},i.getRandomElement=function(h){return h[Math.floor(Math.random()*h.length)]},i.insertInto=w,i.splice=function(h,y,T,C){let x=n(h,y),N=h.splice(x,T);return N===void 0&&(N=[]),w(h,x,C),N},i.compareBy=function(h,y){return(T,C)=>y(h(T),h(C))},i.tieBreakComparators=function(...h){return(y,T)=>{for(let C of h){let x=C(y,T);if(!g.isNeitherLessOrGreaterThan(x))return x}return g.neitherLessOrGreaterThan}},i.reverseOrder=function(h){return(y,T)=>-h(y,T)};let d=c(9807),_=c(8297);function a(h,y){let T=0,C=h-1;for(;T<=C;){let x=(T+C)/2|0,N=y(x);if(N<0)T=x+1;else{if(!(N>0))return x;C=x-1}}return-(T+1)}function b(h,y,T){let C=[];function x(D,A,E){if(A===0&&E.length===0)return;let q=C[C.length-1];q&&q.start+q.deleteCount===D?(q.deleteCount+=A,q.toInsert.push(...E)):C.push({start:D,deleteCount:A,toInsert:E})}let N=0,B=0;for(;;){if(N===h.length){x(N,0,y.slice(B));break}if(B===y.length){x(N,h.length-N,[]);break}let D=h[N],A=y[B],E=T(D,A);E===0?(N+=1,B+=1):E<0?(x(N,1,[]),N+=1):E>0&&(x(N,0,[A]),B+=1)}return C}function l(h,y,T,C,x){for(let N=T.length;C<x;C++){let B=h[C];if(y(B,T[N-1])<0){T.pop();let D=(0,_.findFirstIdxMonotonousOrArrLen)(T,(A=>y(B,A)<0));T.splice(D,0,B)}}}function m(h,y){let T=h.indexOf(y);if(T>-1)return h.splice(T,1),y}function w(h,y,T){let C=n(h,y),x=h.length,N=T.length;h.length=x+N;for(let B=x-1;B>=C;B--)h[B+N]=h[B];for(let B=0;B<N;B++)h[B+C]=T[B]}function n(h,y){return y<0?Math.max(y+h.length,0):Math.min(y,h.length)}var g;(function(h){h.isLessThan=function(y){return y<0},h.isLessThanOrEqual=function(y){return y<=0},h.isGreaterThan=function(y){return y>0},h.isNeitherLessOrGreaterThan=function(y){return y===0},h.greaterThan=1,h.lessThan=-1,h.neitherLessOrGreaterThan=0})(g||(i.CompareResult=g={})),i.numberComparator=(h,y)=>h-y,i.booleanComparator=(h,y)=>(0,i.numberComparator)(h?1:0,y?1:0),i.ArrayQueue=class{constructor(h){this.items=h,this.firstIdx=0,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(h){let y=this.firstIdx;for(;y<this.items.length&&h(this.items[y]);)y++;let T=y===this.firstIdx?null:this.items.slice(this.firstIdx,y);return this.firstIdx=y,T}takeFromEndWhile(h){let y=this.lastIdx;for(;y>=0&&h(this.items[y]);)y--;let T=y===this.lastIdx?null:this.items.slice(y+1,this.lastIdx+1);return this.lastIdx=y,T}peek(){if(this.length!==0)return this.items[this.firstIdx]}peekLast(){if(this.length!==0)return this.items[this.lastIdx]}dequeue(){let h=this.items[this.firstIdx];return this.firstIdx++,h}removeLast(){let h=this.items[this.lastIdx];return this.lastIdx--,h}takeCount(h){let y=this.items.slice(this.firstIdx,this.firstIdx+h);return this.firstIdx+=h,y}};class f{static{this.empty=new f((y=>{}))}constructor(y){this.iterate=y}forEach(y){this.iterate((T=>(y(T),!0)))}toArray(){let y=[];return this.iterate((T=>(y.push(T),!0))),y}filter(y){return new f((T=>this.iterate((C=>!y(C)||T(C)))))}map(y){return new f((T=>this.iterate((C=>T(y(C))))))}some(y){let T=!1;return this.iterate((C=>(T=y(C),!T))),T}findFirst(y){let T;return this.iterate((C=>!y(C)||(T=C,!1))),T}findLast(y){let T;return this.iterate((C=>(y(C)&&(T=C),!0))),T}findLastMaxBy(y){let T,C=!0;return this.iterate((x=>((C||g.isGreaterThan(y(x,T)))&&(C=!1,T=x),!0))),T}}i.CallbackIterable=f;class u{constructor(y){this._indexMap=y}static createSortPermutation(y,T){let C=Array.from(y.keys()).sort(((x,N)=>T(y[x],y[N])));return new u(C)}apply(y){return y.map(((T,C)=>y[this._indexMap[C]]))}inverse(){let y=this._indexMap.slice();for(let T=0;T<this._indexMap.length;T++)y[this._indexMap[T]]=T;return new u(y)}}i.Permutation=u},8297:(k,i)=>{function c(l,m,w=l.length-1){for(let n=w;n>=0;n--)if(m(l[n]))return n;return-1}function d(l,m,w=0,n=l.length){let g=w,f=n;for(;g<f;){let u=Math.floor((g+f)/2);m(l[u])?g=u+1:f=u}return g-1}function _(l,m,w=0,n=l.length){let g=w,f=n;for(;g<f;){let u=Math.floor((g+f)/2);m(l[u])?f=u:g=u+1}return g}Object.defineProperty(i,"__esModule",{value:!0}),i.MonotonousArray=void 0,i.findLast=function(l,m){let w=c(l,m);if(w!==-1)return l[w]},i.findLastIdx=c,i.findLastMonotonous=function(l,m){let w=d(l,m);return w===-1?void 0:l[w]},i.findLastIdxMonotonous=d,i.findFirstMonotonous=function(l,m){let w=_(l,m);return w===l.length?void 0:l[w]},i.findFirstIdxMonotonousOrArrLen=_,i.findFirstIdxMonotonous=function(l,m,w=0,n=l.length){let g=_(l,m,w,n);return g===l.length?-1:g},i.findFirstMax=b,i.findLastMax=function(l,m){if(l.length===0)return;let w=l[0];for(let n=1;n<l.length;n++){let g=l[n];m(g,w)>=0&&(w=g)}return w},i.findFirstMin=function(l,m){return b(l,((w,n)=>-m(w,n)))},i.findMaxIdx=function(l,m){if(l.length===0)return-1;let w=0;for(let n=1;n<l.length;n++)m(l[n],l[w])>0&&(w=n);return w},i.mapFindFirst=function(l,m){for(let w of l){let n=m(w);if(n!==void 0)return n}};class a{static{this.assertInvariants=!1}constructor(m){this._array=m,this._findLastMonotonousLastIdx=0}findLastMonotonous(m){if(a.assertInvariants){if(this._prevFindLastPredicate){for(let n of this._array)if(this._prevFindLastPredicate(n)&&!m(n))throw new Error("MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.")}this._prevFindLastPredicate=m}let w=d(this._array,m,this._findLastMonotonousLastIdx);return this._findLastMonotonousLastIdx=w+1,w===-1?void 0:this._array[w]}}function b(l,m){if(l.length===0)return;let w=l[0];for(let n=1;n<l.length;n++){let g=l[n];m(g,w)>0&&(w=g)}return w}i.MonotonousArray=a},9087:(k,i)=>{var c;Object.defineProperty(i,"__esModule",{value:!0}),i.SetWithKey=void 0,i.groupBy=function(_,a){let b=Object.create(null);for(let l of _){let m=a(l),w=b[m];w||(w=b[m]=[]),w.push(l)}return b},i.diffSets=function(_,a){let b=[],l=[];for(let m of _)a.has(m)||b.push(m);for(let m of a)_.has(m)||l.push(m);return{removed:b,added:l}},i.diffMaps=function(_,a){let b=[],l=[];for(let[m,w]of _)a.has(m)||b.push(w);for(let[m,w]of a)_.has(m)||l.push(w);return{removed:b,added:l}},i.intersection=function(_,a){let b=new Set;for(let l of a)_.has(l)&&b.add(l);return b};class d{static{c=Symbol.toStringTag}constructor(a,b){this.toKey=b,this._map=new Map,this[c]="SetWithKey";for(let l of a)this.add(l)}get size(){return this._map.size}add(a){let b=this.toKey(a);return this._map.set(b,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,b){this._map.forEach((l=>a.call(b,l,l,this)))}[Symbol.iterator](){return this.values()}}i.SetWithKey=d},9807:(k,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.BugIndicatingError=i.ErrorNoTelemetry=i.ExpectedError=i.NotSupportedError=i.NotImplementedError=i.ReadonlyError=i.CancellationError=i.errorHandler=i.ErrorHandler=void 0,i.setUnexpectedErrorHandler=function(f){i.errorHandler.setUnexpectedErrorHandler(f)},i.isSigPipeError=function(f){if(!f||typeof f!="object")return!1;let u=f;return u.code==="EPIPE"&&u.syscall?.toUpperCase()==="WRITE"},i.onUnexpectedError=function(f){_(f)||i.errorHandler.onUnexpectedError(f)},i.onUnexpectedExternalError=function(f){_(f)||i.errorHandler.onUnexpectedExternalError(f)},i.transformErrorForSerialization=function(f){if(f instanceof Error){let{name:u,message:h}=f;return{$isError:!0,name:u,message:h,stack:f.stacktrace||f.stack,noTelemetry:n.isErrorNoTelemetry(f)}}return f},i.transformErrorFromSerialization=function(f){let u;return f.noTelemetry?u=new n:(u=new Error,u.name=f.name),u.message=f.message,u.stack=f.stack,u},i.isCancellationError=_,i.canceled=function(){let f=new Error(d);return f.name=f.message,f},i.illegalArgument=function(f){return f?new Error(`Illegal argument: ${f}`):new Error("Illegal argument")},i.illegalState=function(f){return f?new Error(`Illegal state: ${f}`):new Error("Illegal state")},i.getErrorMessage=function(f){return f?f.message?f.message:f.stack?f.stack.split(`
5
5
  `)[0]:String(f):"Error"};class c{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(u){setTimeout((()=>{throw u.stack?n.isErrorNoTelemetry(u)?new n(u.message+`
6
6
 
@@ -52,10 +52,10 @@ ${be()}`)}function be(){return["Craig commands:"," craig Show the
52
52
  ${be()}`);return t}function Wa(e){let t=e.trim();if(t.length===0)throw new Error(`Repo id cannot be empty.
53
53
 
54
54
  ${be()}`);return t}import Hn from"node:path";Ae();import{mkdir as ja,readFile as Ha,writeFile as Ua}from"node:fs/promises";import qa from"node:path";async function Ne(e){try{let t=await Ha(e.configFile,"utf8"),r=JSON.parse(t);return on(r,e.configFile)}catch(t){if(Ka(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 nn(e,t){on(t,e.configFile),await ja(qa.dirname(e.configFile),{recursive:!0}),await Ua(e.configFile,`${JSON.stringify(t,null,2)}
55
- `,"utf8")}function on(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(!de.includes(s))throw new Error(`Craig config at ${t} is invalid. "runners.${s}" is not supported. Expected one of: ${de.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 p=o;if(p.enabled!==void 0&&typeof p.enabled!="boolean")throw new Error(`Craig config at ${t} is invalid. "runners.${s}.enabled" must be a boolean.`);if(p.path!==void 0&&(typeof p.path!="string"||p.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 Ka(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}We();import{readFile as Ya,readdir as Uf,rm as qf}from"node:fs/promises";import Qa from"node:path";async function mt(e,t){let r=await Ya(Wr(e,t),"utf8"),s=JSON.parse(r);return Ja(s,Wr(e,t))}async function nt(e,t){await ue(Wr(e,t.id),{...t,updatedAt:new Date().toISOString()})}function Wr(e,t){return Qa.join(e.sessionsDir,`${t}.json`)}function Ja(e,t){let r=tc(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")||!ec(r.attach)||!Za(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 Za(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 ec(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 tc(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??""}}Re();wt();Ce();function zt(e){return`'${e.replace(/'/g,"'\\''")}'`}import{accessSync as Ac,constants as Dc}from"node:fs";import{homedir as _n}from"node:os";import Qe from"node:path";var Lc=[Qe.join(_n(),".local","bin"),Qe.join(_n(),".cursor","bin"),"/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin"];function bn(e=process.env){return Oc([...(e.PATH??"").split(Qe.delimiter).filter(t=>t.length>0),...e.CRAIG_DISABLE_COMMAND_PATH_FALLBACKS==="1"?[]:Lc])}function at(e=process.env){return{...e,PATH:bn(e).join(Qe.delimiter)}}function Mc(e,t={}){if(e.includes(Qe.sep)){let r=Qe.isAbsolute(e)?e:Qe.resolve(t.cwd??process.cwd(),e);return wn(r)?r:null}for(let r of bn(t.env)){let s=Qe.join(r,e);if(wn(s))return s}return null}function ct(e,t={}){let r=Mc(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 wn(e){try{return Ac(e,Dc.X_OK),!0}catch{return!1}}function Oc(e){return[...new Set(e)]}Ae();Ce();import{spawn as Bc}from"node:child_process";import{createHash as $c}from"node:crypto";import Fc from"node:path";var Nc="craig";async function kn(e,t,r){let s=Kr(e,t),o=jc(),p=await ee("tmux",["new-session","-d","-P","-F","#{session_name} #{window_id} #{pane_id}","-s",s,"-n","runner",...o,"-c",r],{cwd:e}),k=Uc(p.stdout);return await Wc(e,s),k}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 ee("tmux",s,{cwd:e})}async function yn(e,t,r){await ee("tmux",["resize-window","-t",t,"-x",`${r.columns}`,"-y",`${r.rows}`],{cwd:e})}async function vn(e,t,r){await ee("tmux",["send-keys","-t",e,t,"C-m"],{cwd:r})}async function Sn(e,t,r){await ee("tmux",["pipe-pane","-o","-t",e,`cat >> ${zt(t)}`],{cwd:r})}async function Gt(e,t,r,s){let o=s??Tn(e);if(r?await ee("tmux",["select-window","-t",r],{cwd:e}):await ee("tmux",["select-window","-t",t],{cwd:e}),await ee("tmux",["select-pane","-t",t],{cwd:e}),process.env.TMUX){await ee("tmux",["switch-client","-t",o],{cwd:e});return}await Kc(e,["attach-session","-t",o])}function Tn(e){let r=Fc.basename(e).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"repo",s=$c("sha1").update(e).digest("hex").slice(0,8);return`${Nc}-${r}-${s}`}function Kr(e,t){return`${Tn(e)}-${t.toLowerCase()}`}function jc(){let e=Hc();return e?["-x",`${e.columns}`,"-y",`${e.rows}`]:[]}function Hc(){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 Uc(e){let t=qc(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 qc(e){return e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0)}async function Kc(e,t){await new Promise((r,s)=>{let o=Bc("tmux",t,{cwd:e,stdio:"inherit"});o.on("error",s),o.on("exit",p=>{if(p===0){r();return}s(new Error(`tmux ${t.join(" ")} failed with exit code ${p??"unknown"}.`))})})}var Vr={async prepare(e,t){let r=e.runnerSession.command[0]??we(e.runner)[0],s=at();await ee(ct(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:we(e.runner,e.prompt.value),s=ct(r[0],{cwd:e.worktreePath,env:at()});await vn(t.session.paneId,[s,...r.slice(1)].map(o=>zt(o)).join(" "),t.repoRoot)},async status(e){return e.runnerSession.lastKnownState},async stop(){},async collectArtifacts(){}};Ae();Ce();var Tt={async create(e,t){let r=await kn(t.repoRoot,t.taskId,t.worktreePath);t.logPath&&await Sn(r.paneId,t.logPath,t.repoRoot);let s=await Rn({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||Kr(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 Tt.snapshot(t,r);if(!s.alive)throw new Error(`Session ${t.id} is no longer live and cannot be attached.`);await Gt(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 yn(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 oe("tmux",["list-panes","-F","#{pane_id}","-t",e.paneId],{cwd:t});return Rn({paneId:e.paneId,windowTarget:e.windowTarget,alive:r.exitCode===0&&r.stdout.split(/\s+/).some(s=>s.trim()===e.paneId)})}async function Rn(e){return{paneId:e.paneId,windowTarget:e.windowTarget,alive:e.alive,capturedAt:new Date().toISOString()}}dt();Re();Pt();import{mkdir as Ct,rm as sl,writeFile as Zt}from"node:fs/promises";import ie from"node:path";Ce();async function En(e,t){let r=await oe("git",["show-ref","--verify","--quiet",`refs/heads/${t}`],{cwd:e});if(r.exitCode===0)return!0;if(r.exitCode===1)return!1;throw new Error(r.stderr.trim()||r.stdout.trim()||"Unable to check git branch state.")}async function zr(e,t,r,s="main"){let o=s.trim()||"main";if((await oe("git",["show-ref","--verify","--quiet",`refs/heads/${o}`],{cwd:e})).exitCode!==0)throw new Error(`Base branch '${o}' does not exist locally.`);let k=await rl(e,o);await ee("git",["worktree","add","-b",t,r,k],{cwd:e})}async function rl(e,t){return(await oe("git",["remote","get-url","origin"],{cwd:e})).exitCode!==0||(await oe("git",["fetch","origin",t],{cwd:e})).exitCode!==0?t:(await oe("git",["show-ref","--verify","--quiet",`refs/remotes/origin/${t}`],{cwd:e})).exitCode===0?`refs/remotes/origin/${t}`:t}async function Jt(e){let t=await oe("git",["status","--short"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"Unable to inspect git status.");return t.stdout.trim().length>0}async function An(e){await ee("git",["add","-A"],{cwd:e})}async function Dn(e,t){await ee("git",["commit","-m",t],{cwd:e})}async function Ln(e){let t=await ee("git",["show","-s","--format=%H%n%s","HEAD"],{cwd:e}),[r="",s=""]=t.stdout.trim().split(`
56
- `);if(!r||!s)throw new Error("Unable to read git HEAD commit metadata.");return{sha:r,message:s}}Ae();ot();async function Mn(e,t){let r=await Te(e),s=Bn(new Date),o=$n(r.taskIds,s);for(;;){let p=`task_${s}_${String(o).padStart(2,"0")}`,k=`craig/${p}`;if(!await En(t,k))return p;o+=1}}async function On(e){let t=await Te(e),r=Bn(new Date),s=$n(t.taskIds,r);return`task_${r}_${String(s).padStart(2,"0")}`}function Bn(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 $n(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 Nn=["AGENTS","md"].join(".");async function It(e,t,r,s={}){let o=await Le(e,t),p=await cl(e,o.id),k=await Mn(e,o.rootPath),i=s.sessionId??null,c=`craig/${k}`,d=ie.join(e.worktreesDir,o.id,k),_=ie.join(e.logsDir,`${k}.log`),a=ie.join(e.artifactsDir,k);await Ct(ie.dirname(d),{recursive:!0}),await Ct(a,{recursive:!0}),await Zt(_,"","utf8");let b=nl(e,{taskId:k,repoId:o.id,workspaceId:p.id,sessionId:i,repoRoot:o.rootPath,prompt:r,runner:s.runner??"codex",config:s.config??{},branch:c,worktreePath:d});return await se(e,b),await Ur(e,k),await zr(o.rootPath,c,d,o.defaultBranch),{repoId:o.id,repoRoot:o.rootPath,sessionId:i,workspaceId:p.id,task:b}}async function tr(e,t,r,s={}){let o=(await Me(e)).find(h=>h.id===t&&h.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 h=await It(e,o.primaryRepoId,r,s);return{...h,bundlePath:h.task.worktreePath,repoTargets:[]}}let p=o.discoveredRepoIds??[];if(p.length===0)throw new Error(`Project workspace ${t} has no discovered repos.`);let k=await On(e),i=new Date().toISOString(),c=s.runner??"codex",d=s.sessionId??null,_=`craig/${k}`,a=ie.join(e.craigDir,"task-bundles",k),b=ie.join(e.logsDir,`${k}.log`),l=ie.join(e.artifactsDir,k);await Ct(a,{recursive:!0}),await Ct(l,{recursive:!0}),await Zt(b,"","utf8");let m=await Promise.all(p.map(h=>Le(e,h))),w=ol(m),n=await Promise.all(m.map(h=>il(e,h,k,_,ie.join(a,w.get(h.id))))),g=n.find(h=>h.status==="ready")??n[0];if(!n.some(h=>h.status==="ready"))throw await sl(a,{recursive:!0,force:!0}),new Error(`No project repo targets could be provisioned for ${t}: ${n.map(h=>`${h.repoId}: ${h.failureReason??"unknown error"}`).join("; ")}`);await Zt(ie.join(a,"manifest.json"),JSON.stringify({taskId:k,workspaceId:t,prompt:r,repos:n.map(h=>({repoId:h.repoId,repoName:m.find(y=>y.id===h.repoId)?.name??h.repoId,path:ie.relative(a,h.worktreePath),status:h.status,worktreePath:h.worktreePath,failureReason:h.failureReason}))},null,2),"utf8"),await Zt(ie.join(a,Nn),al({taskId:k,workspaceId:t,prompt:r,repos:m,repoTargets:n,bundlePath:a}),"utf8");let f=Wn(k,r,i,c,s.config??{}),u={id:k,title:r,slug:jn(r),type:"project",status:"draft",runner:c,repoId:g.repoId,workspaceId:o.id,sessionId:d,selectedPtyTabId:f[0]?.id??null,linkedRepoIds:p.filter(h=>h!==g.repoId),repoRoot:a,worktreePath:a,branch:_,bundlePath:a,selectedRepoTargetId:g.repoId,repoTargets:n,ptyTabs:f,runnerSession:{command:we(c,r,s.config??{}),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:r},checks:g.checks,lastCommit:null,prs:[],artifacts:{logPath:ie.relative(e.workspaceRoot,b),checkSummaryPath:ie.relative(e.workspaceRoot,ie.join(l,"check-summary.json")),prDraftPath:null,prStatusPath:ie.relative(e.workspaceRoot,ie.join(l,"pr-status.json"))},cleanup:er(),lastFailureReason:n.every(h=>h.status==="unavailable")?"No project repo targets could be provisioned.":null,createdAt:i,updatedAt:i};return await se(e,u),await Ur(e,k),{repoId:g.repoId,repoRoot:a,sessionId:d,workspaceId:o.id,task:u,bundlePath:a,repoTargets:n}}function Wn(e,t,r,s="codex",o={}){let p=ye(s);return[{id:`${e}:agent`,kind:"agent",title:p.defaultAgentTitle,command:we(s,void 0,o),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function nl(e,t){let r=new Date().toISOString(),s=Wn(t.taskId,t.prompt,r,t.runner,t.config);return{id:t.taskId,title:t.prompt,slug:jn(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:we(t.runner,t.prompt,t.config),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:t.prompt},checks:{...Gr(ie.relative(e.workspaceRoot,e.configFile))},lastCommit:null,prs:[],artifacts:{logPath:ie.relative(e.workspaceRoot,ie.join(e.logsDir,`${t.taskId}.log`)),checkSummaryPath:ie.relative(e.workspaceRoot,ie.join(e.artifactsDir,t.taskId,"check-summary.json")),prDraftPath:null,prStatusPath:ie.relative(e.workspaceRoot,ie.join(e.artifactsDir,t.taskId,"pr-status.json"))},cleanup:er(),lastFailureReason:null,createdAt:r,updatedAt:r}}async function il(e,t,r,s,o){await Ct(ie.dirname(o),{recursive:!0});try{return await zr(t.rootPath,s,o,t.defaultBranch),{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"ready",failureReason:null,checks:Gr(ie.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Fn(),cleanup:er()}}catch(p){return{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"unavailable",failureReason:p instanceof Error?p.message:"Failed to create worktree.",checks:Gr(ie.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Fn(),cleanup:er()}}}function ol(e){let t=new Set(["manifest.json",Nn]),r=new Map;for(let s of e){let o=t.has(s.name)?`${s.name}-repo`:s.name,p=o,k=2;for(;t.has(p);)p=`${o}-${k}`,k+=1;t.add(p),r.set(s.id,p)}return r}function al(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,p=ie.relative(e.bundlePath,s.worktreePath),k=s.status==="ready"?"ready":`unavailable: ${s.failureReason??"unknown error"}`;return`- \`${p}/\` - ${o} (${s.repoId}, ${k})`}).join(`
55
+ `,"utf8")}function on(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(!de.includes(s))throw new Error(`Craig config at ${t} is invalid. "runners.${s}" is not supported. Expected one of: ${de.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 p=o;if(p.enabled!==void 0&&typeof p.enabled!="boolean")throw new Error(`Craig config at ${t} is invalid. "runners.${s}.enabled" must be a boolean.`);if(p.path!==void 0&&(typeof p.path!="string"||p.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 Ka(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}We();import{readFile as Ya,readdir as Uf,rm as qf}from"node:fs/promises";import Qa from"node:path";async function mt(e,t){let r=await Ya(Wr(e,t),"utf8"),s=JSON.parse(r);return Ja(s,Wr(e,t))}async function nt(e,t){await ue(Wr(e,t.id),{...t,updatedAt:new Date().toISOString()})}function Wr(e,t){return Qa.join(e.sessionsDir,`${t}.json`)}function Ja(e,t){let r=tc(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")||!ec(r.attach)||!Za(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 Za(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 ec(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 tc(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??""}}Re();wt();Ce();function zt(e){return`'${e.replace(/'/g,"'\\''")}'`}import{accessSync as Ac,constants as Dc}from"node:fs";import{homedir as _n}from"node:os";import Qe from"node:path";var Lc=[Qe.join(_n(),".local","bin"),Qe.join(_n(),".cursor","bin"),"/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin","/usr/sbin","/sbin"];function bn(e=process.env){return Oc([...(e.PATH??"").split(Qe.delimiter).filter(t=>t.length>0),...e.CRAIG_DISABLE_COMMAND_PATH_FALLBACKS==="1"?[]:Lc])}function at(e=process.env){return{...e,PATH:bn(e).join(Qe.delimiter)}}function Mc(e,t={}){if(e.includes(Qe.sep)){let r=Qe.isAbsolute(e)?e:Qe.resolve(t.cwd??process.cwd(),e);return wn(r)?r:null}for(let r of bn(t.env)){let s=Qe.join(r,e);if(wn(s))return s}return null}function ct(e,t={}){let r=Mc(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 wn(e){try{return Ac(e,Dc.X_OK),!0}catch{return!1}}function Oc(e){return[...new Set(e)]}Ae();Ce();import{spawn as Bc}from"node:child_process";import{createHash as $c}from"node:crypto";import Fc from"node:path";var Nc="craig";async function kn(e,t,r){let s=Kr(e,t),o=jc(),p=await ee("tmux",["new-session","-d","-P","-F","#{session_name} #{window_id} #{pane_id}","-s",s,"-n","runner",...o,"-c",r],{cwd:e}),k=Uc(p.stdout);return await Wc(e,s),k}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 ee("tmux",s,{cwd:e})}async function yn(e,t,r){await ee("tmux",["resize-window","-t",t,"-x",`${r.columns}`,"-y",`${r.rows}`],{cwd:e})}async function vn(e,t,r){await ee("tmux",["send-keys","-t",e,t,"C-m"],{cwd:r})}async function Sn(e,t,r){await ee("tmux",["pipe-pane","-o","-t",e,`cat >> ${zt(t)}`],{cwd:r})}async function Gt(e,t,r,s){let o=s??Tn(e);if(r?await ee("tmux",["select-window","-t",r],{cwd:e}):await ee("tmux",["select-window","-t",t],{cwd:e}),await ee("tmux",["select-pane","-t",t],{cwd:e}),process.env.TMUX){await ee("tmux",["switch-client","-t",o],{cwd:e});return}await Kc(e,["attach-session","-t",o])}function Tn(e){let r=Fc.basename(e).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"repo",s=$c("sha1").update(e).digest("hex").slice(0,8);return`${Nc}-${r}-${s}`}function Kr(e,t){return`${Tn(e)}-${t.toLowerCase()}`}function jc(){let e=Hc();return e?["-x",`${e.columns}`,"-y",`${e.rows}`]:[]}function Hc(){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 Uc(e){let t=qc(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 qc(e){return e.split(/\s+/).map(t=>t.trim()).filter(t=>t.length>0)}async function Kc(e,t){await new Promise((r,s)=>{let o=Bc("tmux",t,{cwd:e,stdio:"inherit"});o.on("error",s),o.on("exit",p=>{if(p===0){r();return}s(new Error(`tmux ${t.join(" ")} failed with exit code ${p??"unknown"}.`))})})}var Vr={async prepare(e,t){let r=e.runnerSession.command[0]??we(e.runner)[0],s=at();await ee(ct(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:we(e.runner,e.prompt.value),s=ct(r[0],{cwd:e.worktreePath,env:at()});await vn(t.session.paneId,[s,...r.slice(1)].map(o=>zt(o)).join(" "),t.repoRoot)},async status(e){return e.runnerSession.lastKnownState},async stop(){},async collectArtifacts(){}};Ae();Ce();var Rt={async create(e,t){let r=await kn(t.repoRoot,t.taskId,t.worktreePath);t.logPath&&await Sn(r.paneId,t.logPath,t.repoRoot);let s=await Rn({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||Kr(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 Gt(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 yn(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 oe("tmux",["list-panes","-F","#{pane_id}","-t",e.paneId],{cwd:t});return Rn({paneId:e.paneId,windowTarget:e.windowTarget,alive:r.exitCode===0&&r.stdout.split(/\s+/).some(s=>s.trim()===e.paneId)})}async function Rn(e){return{paneId:e.paneId,windowTarget:e.windowTarget,alive:e.alive,capturedAt:new Date().toISOString()}}dt();Re();Ct();import{mkdir as It,rm as sl,writeFile as Zt}from"node:fs/promises";import ie from"node:path";Ce();async function En(e,t){let r=await oe("git",["show-ref","--verify","--quiet",`refs/heads/${t}`],{cwd:e});if(r.exitCode===0)return!0;if(r.exitCode===1)return!1;throw new Error(r.stderr.trim()||r.stdout.trim()||"Unable to check git branch state.")}async function zr(e,t,r,s="main"){let o=s.trim()||"main";if((await oe("git",["show-ref","--verify","--quiet",`refs/heads/${o}`],{cwd:e})).exitCode!==0)throw new Error(`Base branch '${o}' does not exist locally.`);let k=await rl(e,o);await ee("git",["worktree","add","-b",t,r,k],{cwd:e})}async function rl(e,t){return(await oe("git",["remote","get-url","origin"],{cwd:e})).exitCode!==0||(await oe("git",["fetch","origin",t],{cwd:e})).exitCode!==0?t:(await oe("git",["show-ref","--verify","--quiet",`refs/remotes/origin/${t}`],{cwd:e})).exitCode===0?`refs/remotes/origin/${t}`:t}async function Jt(e){let t=await oe("git",["status","--short"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"Unable to inspect git status.");return t.stdout.trim().length>0}async function An(e){await ee("git",["add","-A"],{cwd:e})}async function Dn(e,t){await ee("git",["commit","-m",t],{cwd:e})}async function Ln(e){let t=await ee("git",["show","-s","--format=%H%n%s","HEAD"],{cwd:e}),[r="",s=""]=t.stdout.trim().split(`
56
+ `);if(!r||!s)throw new Error("Unable to read git HEAD commit metadata.");return{sha:r,message:s}}Ae();ot();async function Mn(e,t){let r=await Te(e),s=Bn(new Date),o=$n(r.taskIds,s);for(;;){let p=`task_${s}_${String(o).padStart(2,"0")}`,k=`craig/${p}`;if(!await En(t,k))return p;o+=1}}async function On(e){let t=await Te(e),r=Bn(new Date),s=$n(t.taskIds,r);return`task_${r}_${String(s).padStart(2,"0")}`}function Bn(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 $n(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 Nn=["AGENTS","md"].join(".");async function xt(e,t,r,s={}){let o=await Le(e,t),p=await cl(e,o.id),k=await Mn(e,o.rootPath),i=s.sessionId??null,c=`craig/${k}`,d=ie.join(e.worktreesDir,o.id,k),_=ie.join(e.logsDir,`${k}.log`),a=ie.join(e.artifactsDir,k);await It(ie.dirname(d),{recursive:!0}),await It(a,{recursive:!0}),await Zt(_,"","utf8");let b=nl(e,{taskId:k,repoId:o.id,workspaceId:p.id,sessionId:i,repoRoot:o.rootPath,prompt:r,runner:s.runner??"codex",config:s.config??{},branch:c,worktreePath:d});return await se(e,b),await Ur(e,k),await zr(o.rootPath,c,d,o.defaultBranch),{repoId:o.id,repoRoot:o.rootPath,sessionId:i,workspaceId:p.id,task:b}}async function tr(e,t,r,s={}){let o=(await Me(e)).find(h=>h.id===t&&h.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 h=await xt(e,o.primaryRepoId,r,s);return{...h,bundlePath:h.task.worktreePath,repoTargets:[]}}let p=o.discoveredRepoIds??[];if(p.length===0)throw new Error(`Project workspace ${t} has no discovered repos.`);let k=await On(e),i=new Date().toISOString(),c=s.runner??"codex",d=s.sessionId??null,_=`craig/${k}`,a=ie.join(e.craigDir,"task-bundles",k),b=ie.join(e.logsDir,`${k}.log`),l=ie.join(e.artifactsDir,k);await It(a,{recursive:!0}),await It(l,{recursive:!0}),await Zt(b,"","utf8");let m=await Promise.all(p.map(h=>Le(e,h))),w=ol(m),n=await Promise.all(m.map(h=>il(e,h,k,_,ie.join(a,w.get(h.id))))),g=n.find(h=>h.status==="ready")??n[0];if(!n.some(h=>h.status==="ready"))throw await sl(a,{recursive:!0,force:!0}),new Error(`No project repo targets could be provisioned for ${t}: ${n.map(h=>`${h.repoId}: ${h.failureReason??"unknown error"}`).join("; ")}`);await Zt(ie.join(a,"manifest.json"),JSON.stringify({taskId:k,workspaceId:t,prompt:r,repos:n.map(h=>({repoId:h.repoId,repoName:m.find(y=>y.id===h.repoId)?.name??h.repoId,path:ie.relative(a,h.worktreePath),status:h.status,worktreePath:h.worktreePath,failureReason:h.failureReason}))},null,2),"utf8"),await Zt(ie.join(a,Nn),al({taskId:k,workspaceId:t,prompt:r,repos:m,repoTargets:n,bundlePath:a}),"utf8");let f=Wn(k,r,i,c,s.config??{}),u={id:k,title:r,slug:jn(r),type:"project",status:"draft",runner:c,repoId:g.repoId,workspaceId:o.id,sessionId:d,selectedPtyTabId:f[0]?.id??null,linkedRepoIds:p.filter(h=>h!==g.repoId),repoRoot:a,worktreePath:a,branch:_,bundlePath:a,selectedRepoTargetId:g.repoId,repoTargets:n,ptyTabs:f,runnerSession:{command:we(c,r,s.config??{}),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:r},checks:g.checks,lastCommit:null,prs:[],artifacts:{logPath:ie.relative(e.workspaceRoot,b),checkSummaryPath:ie.relative(e.workspaceRoot,ie.join(l,"check-summary.json")),prDraftPath:null,prStatusPath:ie.relative(e.workspaceRoot,ie.join(l,"pr-status.json"))},cleanup:er(),lastFailureReason:n.every(h=>h.status==="unavailable")?"No project repo targets could be provisioned.":null,createdAt:i,updatedAt:i};return await se(e,u),await Ur(e,k),{repoId:g.repoId,repoRoot:a,sessionId:d,workspaceId:o.id,task:u,bundlePath:a,repoTargets:n}}function Wn(e,t,r,s="codex",o={}){let p=ye(s);return[{id:`${e}:agent`,kind:"agent",title:p.defaultAgentTitle,command:we(s,void 0,o),createdAt:r,updatedAt:r},{id:`${e}:terminal`,kind:"terminal",title:"Terminal",command:[],createdAt:r,updatedAt:r}]}function nl(e,t){let r=new Date().toISOString(),s=Wn(t.taskId,t.prompt,r,t.runner,t.config);return{id:t.taskId,title:t.prompt,slug:jn(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:we(t.runner,t.prompt,t.config),pid:null,startedAt:null,lastKnownState:"starting",exitCode:null,exitedAt:null},prompt:{source:"inline",value:t.prompt},checks:{...Gr(ie.relative(e.workspaceRoot,e.configFile))},lastCommit:null,prs:[],artifacts:{logPath:ie.relative(e.workspaceRoot,ie.join(e.logsDir,`${t.taskId}.log`)),checkSummaryPath:ie.relative(e.workspaceRoot,ie.join(e.artifactsDir,t.taskId,"check-summary.json")),prDraftPath:null,prStatusPath:ie.relative(e.workspaceRoot,ie.join(e.artifactsDir,t.taskId,"pr-status.json"))},cleanup:er(),lastFailureReason:null,createdAt:r,updatedAt:r}}async function il(e,t,r,s,o){await It(ie.dirname(o),{recursive:!0});try{return await zr(t.rootPath,s,o,t.defaultBranch),{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"ready",failureReason:null,checks:Gr(ie.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Fn(),cleanup:er()}}catch(p){return{repoId:t.id,branch:s,repoRoot:t.rootPath,worktreePath:o,status:"unavailable",failureReason:p instanceof Error?p.message:"Failed to create worktree.",checks:Gr(ie.relative(e.workspaceRoot,e.configFile)),lastCommit:null,pullRequest:Fn(),cleanup:er()}}}function ol(e){let t=new Set(["manifest.json",Nn]),r=new Map;for(let s of e){let o=t.has(s.name)?`${s.name}-repo`:s.name,p=o,k=2;for(;t.has(p);)p=`${o}-${k}`,k+=1;t.add(p),r.set(s.id,p)}return r}function al(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,p=ie.relative(e.bundlePath,s.worktreePath),k=s.status==="ready"?"ready":`unavailable: ${s.failureReason??"unknown error"}`;return`- \`${p}/\` - ${o} (${s.repoId}, ${k})`}).join(`
57
57
  `);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(`
58
- `)}function Gr(e){return{source:{type:"repo_config",path:e},lastRunAt:null,status:"not_run",commands:[],results:[]}}function Fn(){return{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,draft:!1,mergeable:!1,mergeStateStatus:null,reviewDecision:null,requiredChecks:[],comments:[],lastSyncedAt:null,lastSyncedHeadSha:null}}function er(){return{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}async function cl(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 jn(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}async function Un(e,t,r,s={}){let o=r.trim(),p=await Ne(e),k=s.runner??st(p);if(Kt(k,p),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 i=s.workspaceId?await tr(e,s.workspaceId,o,{runner:k,config:p}):await It(e,t,o,{runner:k,config:p}),c=i.task,d=we(k,o,p),_=`session_${c.id}`,a=c.artifacts.logPath?Hn.resolve(e.workspaceRoot,c.artifacts.logPath):Hn.join(e.logsDir,`${c.id}.log`);try{await Vr.prepare(c,{repoRoot:i.repoRoot});let b=await Tt.create(e,{sessionId:_,taskId:c.id,repoId:i.repoId,workspaceId:i.workspaceId,repoRoot:i.repoRoot,worktreePath:c.worktreePath,logPath:a,command:d});await Vr.launch(c,{repoRoot:i.repoRoot,session:b});let l=new Date().toISOString();b={...b,status:"running",startedAt:l,command:d};let m={...c,status:"running",runner:k,sessionId:b.id,selectedPtyTabId:c.selectedPtyTabId,runnerSession:{command:b.command,pid:null,startedAt:l,lastKnownState:"running",exitCode:null,exitedAt:null}};return await se(e,m),await nt(e,b),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??je(),selectedRepoId:m.repoId,selectedWorkspaceId:m.workspaceId,selectedTaskId:m.id,selectedPtyTabId:m.selectedPtyTabId}),{kind:"createTask",taskId:m.id,repoId:m.repoId,workspaceId:m.workspaceId,sessionId:b.id,status:m.status,branch:m.branch,worktreePath:m.worktreePath,runner:m.runner}}catch(b){let l={...c,sessionId:null,status:"draft",runnerSession:{...c.runnerSession,lastKnownState:"failed"},lastFailureReason:b instanceof Error?b.message:"Unknown Craig error"};throw await se(e,l),b}}xt();dt();Re();import{access as Dl}from"node:fs/promises";import si from"node:path";We();Re();import{mkdir as dl,readFile as fg,writeFile as pg}from"node:fs/promises";import ul from"node:path";Ce();import qn from"node:path";function rr(e,t){return t?qn.isAbsolute(t)?t:qn.join(e.repoRoot,t):null}function pe(e){return e.prs.length===0?null:[...e.prs].reverse().find(r=>r.status!=="merged"&&r.status!=="closed")??e.prs[e.prs.length-1]??null}function ir(e){return e.status==="merged"||e.status==="closed"}function Kn(e,t){let r=e.prs.findIndex(o=>o.number!==null&&o.number===t.number),s=r>=0?e.prs.map((o,p)=>p===r?t:o):[...e.prs,t];return{...e,prs:s}}var Vn=3,hl=1e3,fl=1e4;async function Et(e){let t=await oe("gh",["auth","status"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"GitHub CLI auth is required.")}async function Qr(e,t){let r=pe(t),s=r?.number?String(r.number):t.branch,o=await ee("gh",nr(s),{cwd:t.worktreePath}),p=JSON.parse(o.stdout);return Zr(e,t,p,r)}async function Jr(e,t){let r=await oe("gh",nr(t.branch),{cwd:t.worktreePath});if(r.exitCode!==0)return{discovered:!1,task:t};let s=JSON.parse(r.stdout);return{discovered:!0,task:await Zr(e,t,s,null)}}async function Gn(e){let t=await oe("git",["remote","get-url","origin"],{cwd:e});return t.exitCode!==0?null:yl(t.stdout.trim())}async function Xn(e,t,r){if(r.length===0)return[];let s=vl(r),o=await pl(e,["api","graphql","-f",`query=${s}`,"-F",`owner=${t.owner}`,"-F",`name=${t.name}`]),k=JSON.parse(o.stdout).data?.repository??{};return r.map((i,c)=>{let d=k[`item${c}`],_=Sl(d);return{id:i.id,found:_!==null,view:_}})}async function pl(e,t){let r;for(let s=0;s<=Vn;s+=1)try{return await ee("gh",t,{cwd:e})}catch(o){if(r=o,s===Vn||!gl(o))throw o;await _l(ml(s))}throw r}function gl(e){let t=e instanceof Error?e.message.toLowerCase():String(e).toLowerCase();return t.includes("rate limit")||t.includes("secondary rate limit")||t.includes("abuse detection")||t.includes("api rate limit exceeded")||t.includes("you have exceeded")}function ml(e){let t=Number(process.env.CRAIG_GH_RATE_LIMIT_RETRY_BASE_MS)||hl,r=Math.min(t*2**e,fl),s=Math.floor(Math.random()*Math.max(1,Math.floor(r*.25)));return r+s}function _l(e){return new Promise(t=>setTimeout(t,e))}async function At(e,t,r){let s=r.pullRequest.number?String(r.pullRequest.number):r.branch;if(r.pullRequest.number){let k=await ee("gh",nr(s),{cwd:r.worktreePath}),i=Yr(JSON.parse(k.stdout));return r.pullRequest=i,await Xr(e,t,r.repoId,i),"synced"}let o=await oe("gh",nr(s),{cwd:r.worktreePath});if(o.exitCode!==0)return"not_found";let p=Yr(JSON.parse(o.stdout));return r.pullRequest=p,await Xr(e,t,r.repoId,p),"discovered"}async function Yn(e,t,r){return Zr(e,t,r,pe(t))}async function Qn(e,t,r,s){return Xr(e,t,r,Yr(s))}async function Jn(e,t){let r=rr(e,t.artifacts.prStatusPath);r&&(await dl(ul.dirname(r),{recursive:!0}),await ue(r,{taskId:t.id,prs:t.prs}))}function wl(e){return e.mergeable&&!bl(e)&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}function bl(e){return e.reviewDecision==="REVIEW_REQUIRED"||e.reviewDecision==="CHANGES_REQUESTED"||e.mergeStateStatus==="REVIEW_REQUIRED"}function kl(e){if(e.length===0)return"checked";let t=[...e].reverse().find(r=>r.status!=="merged"&&r.status!=="closed")??e[e.length-1];return wl(t)?"merge_ready":t.status==="merged"?"merged":t.status==="open"?"pr_open":"checked"}function nr(e){return["pr","view",e,"--json","number,url,baseRefName,headRefName,headRefOid,state,isDraft,title,createdAt,updatedAt,mergedAt,mergeable,mergeStateStatus,reviewDecision,statusCheckRollup,comments"]}function yl(e){let t=e.replace(/\.git$/,""),r=t.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)$/);if(r?.[1]&&r[2])return{owner:r[1],name:r[2]};let s=t.match(/^git@github\.com:([^/]+)\/([^/]+)$/);if(s?.[1]&&s[2])return{owner:s[1],name:s[2]};let o=t.match(/^ssh:\/\/git@github\.com\/([^/]+)\/([^/]+)$/);return o?.[1]&&o[2]?{owner:o[1],name:o[2]}:null}function vl(e){return`
58
+ `)}function Gr(e){return{source:{type:"repo_config",path:e},lastRunAt:null,status:"not_run",commands:[],results:[]}}function Fn(){return{provider:"github",number:null,url:null,baseBranch:null,headBranch:null,status:null,draft:!1,mergeable:!1,mergeStateStatus:null,reviewDecision:null,requiredChecks:[],comments:[],lastSyncedAt:null,lastSyncedHeadSha:null}}function er(){return{paneClosedAt:null,worktreeRemovedAt:null,preservedWorktree:!1,warning:null}}async function cl(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 jn(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}async function Un(e,t,r,s={}){let o=r.trim(),p=await Ne(e),k=s.runner??st(p);if(Kt(k,p),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 i=s.workspaceId?await tr(e,s.workspaceId,o,{runner:k,config:p}):await xt(e,t,o,{runner:k,config:p}),c=i.task,d=we(k,o,p),_=`session_${c.id}`,a=c.artifacts.logPath?Hn.resolve(e.workspaceRoot,c.artifacts.logPath):Hn.join(e.logsDir,`${c.id}.log`);try{await Vr.prepare(c,{repoRoot:i.repoRoot});let b=await Rt.create(e,{sessionId:_,taskId:c.id,repoId:i.repoId,workspaceId:i.workspaceId,repoRoot:i.repoRoot,worktreePath:c.worktreePath,logPath:a,command:d});await Vr.launch(c,{repoRoot:i.repoRoot,session:b});let l=new Date().toISOString();b={...b,status:"running",startedAt:l,command:d};let m={...c,status:"running",runner:k,sessionId:b.id,selectedPtyTabId:c.selectedPtyTabId,runnerSession:{command:b.command,pid:null,startedAt:l,lastKnownState:"running",exitCode:null,exitedAt:null}};return await se(e,m),await nt(e,b),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??je(),selectedRepoId:m.repoId,selectedWorkspaceId:m.workspaceId,selectedTaskId:m.id,selectedPtyTabId:m.selectedPtyTabId}),{kind:"createTask",taskId:m.id,repoId:m.repoId,workspaceId:m.workspaceId,sessionId:b.id,status:m.status,branch:m.branch,worktreePath:m.worktreePath,runner:m.runner}}catch(b){let l={...c,sessionId:null,status:"draft",runnerSession:{...c.runnerSession,lastKnownState:"failed"},lastFailureReason:b instanceof Error?b.message:"Unknown Craig error"};throw await se(e,l),b}}Et();dt();Re();import{access as Dl}from"node:fs/promises";import si from"node:path";We();Re();import{mkdir as dl,readFile as fg,writeFile as pg}from"node:fs/promises";import ul from"node:path";Ce();import qn from"node:path";function rr(e,t){return t?qn.isAbsolute(t)?t:qn.join(e.repoRoot,t):null}function pe(e){return e.prs.length===0?null:[...e.prs].reverse().find(r=>r.status!=="merged"&&r.status!=="closed")??e.prs[e.prs.length-1]??null}function ir(e){return e.status==="merged"||e.status==="closed"}function Kn(e,t){let r=e.prs.findIndex(o=>o.number!==null&&o.number===t.number),s=r>=0?e.prs.map((o,p)=>p===r?t:o):[...e.prs,t];return{...e,prs:s}}var Vn=3,hl=1e3,fl=1e4;async function At(e){let t=await oe("gh",["auth","status"],{cwd:e});if(t.exitCode!==0)throw new Error(t.stderr.trim()||t.stdout.trim()||"GitHub CLI auth is required.")}async function Qr(e,t){let r=pe(t),s=r?.number?String(r.number):t.branch,o=await ee("gh",nr(s),{cwd:t.worktreePath}),p=JSON.parse(o.stdout);return Zr(e,t,p,r)}async function Jr(e,t){let r=await oe("gh",nr(t.branch),{cwd:t.worktreePath});if(r.exitCode!==0)return{discovered:!1,task:t};let s=JSON.parse(r.stdout);return{discovered:!0,task:await Zr(e,t,s,null)}}async function Gn(e){let t=await oe("git",["remote","get-url","origin"],{cwd:e});return t.exitCode!==0?null:yl(t.stdout.trim())}async function Xn(e,t,r){if(r.length===0)return[];let s=vl(r),o=await pl(e,["api","graphql","-f",`query=${s}`,"-F",`owner=${t.owner}`,"-F",`name=${t.name}`]),k=JSON.parse(o.stdout).data?.repository??{};return r.map((i,c)=>{let d=k[`item${c}`],_=Sl(d);return{id:i.id,found:_!==null,view:_}})}async function pl(e,t){let r;for(let s=0;s<=Vn;s+=1)try{return await ee("gh",t,{cwd:e})}catch(o){if(r=o,s===Vn||!gl(o))throw o;await _l(ml(s))}throw r}function gl(e){let t=e instanceof Error?e.message.toLowerCase():String(e).toLowerCase();return t.includes("rate limit")||t.includes("secondary rate limit")||t.includes("abuse detection")||t.includes("api rate limit exceeded")||t.includes("you have exceeded")}function ml(e){let t=Number(process.env.CRAIG_GH_RATE_LIMIT_RETRY_BASE_MS)||hl,r=Math.min(t*2**e,fl),s=Math.floor(Math.random()*Math.max(1,Math.floor(r*.25)));return r+s}function _l(e){return new Promise(t=>setTimeout(t,e))}async function Dt(e,t,r){let s=r.pullRequest.number?String(r.pullRequest.number):r.branch;if(r.pullRequest.number){let k=await ee("gh",nr(s),{cwd:r.worktreePath}),i=Yr(JSON.parse(k.stdout));return r.pullRequest=i,await Xr(e,t,r.repoId,i),"synced"}let o=await oe("gh",nr(s),{cwd:r.worktreePath});if(o.exitCode!==0)return"not_found";let p=Yr(JSON.parse(o.stdout));return r.pullRequest=p,await Xr(e,t,r.repoId,p),"discovered"}async function Yn(e,t,r){return Zr(e,t,r,pe(t))}async function Qn(e,t,r,s){return Xr(e,t,r,Yr(s))}async function Jn(e,t){let r=rr(e,t.artifacts.prStatusPath);r&&(await dl(ul.dirname(r),{recursive:!0}),await ue(r,{taskId:t.id,prs:t.prs}))}function wl(e){return e.mergeable&&!bl(e)&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}function bl(e){return e.reviewDecision==="REVIEW_REQUIRED"||e.reviewDecision==="CHANGES_REQUESTED"||e.mergeStateStatus==="REVIEW_REQUIRED"}function kl(e){if(e.length===0)return"checked";let t=[...e].reverse().find(r=>r.status!=="merged"&&r.status!=="closed")??e[e.length-1];return wl(t)?"merge_ready":t.status==="merged"?"merged":t.status==="open"?"pr_open":"checked"}function nr(e){return["pr","view",e,"--json","number,url,baseRefName,headRefName,headRefOid,state,isDraft,title,createdAt,updatedAt,mergedAt,mergeable,mergeStateStatus,reviewDecision,statusCheckRollup,comments"]}function yl(e){let t=e.replace(/\.git$/,""),r=t.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)$/);if(r?.[1]&&r[2])return{owner:r[1],name:r[2]};let s=t.match(/^git@github\.com:([^/]+)\/([^/]+)$/);if(s?.[1]&&s[2])return{owner:s[1],name:s[2]};let o=t.match(/^ssh:\/\/git@github\.com\/([^/]+)\/([^/]+)$/);return o?.[1]&&o[2]?{owner:o[1],name:o[2]}:null}function vl(e){return`
59
59
  query CraigPullRequestBatch($owner: String!, $name: String!) {
60
60
  repository(owner: $owner, name: $name) {
61
61
  ${e.map((r,s)=>{let o=`item${s}`;return r.mode==="number"?`${o}: pullRequest(number: ${Number(r.selector)}) { ...PrFields }`:`${o}: pullRequests(headRefName: ${JSON.stringify(r.selector)}, states: OPEN, first: 1, orderBy: { field: UPDATED_AT, direction: DESC }) { nodes { ...PrFields } }`}).join(`
@@ -136,10 +136,10 @@ fragment PrFields on PullRequest {
136
136
  }
137
137
  `}function Sl(e){if(!e||typeof e!="object")return null;let t="nodes"in e?e.nodes?.[0]??null:e;if(!t||typeof t!="object")return null;let r=t,s=r.statusCheckRollup?.contexts?.nodes??r.commits?.nodes?.[0]?.commit?.statusCheckRollup?.contexts?.nodes??[];return{number:r.number,url:r.url,baseRefName:r.baseRefName,headRefName:r.headRefName,headRefOid:r.headRefOid??null,state:r.state,isDraft:r.isDraft??!1,title:r.title??null,createdAt:r.createdAt??null,updatedAt:r.updatedAt??null,mergedAt:r.mergedAt??null,mergeable:r.mergeable,mergeStateStatus:r.mergeStateStatus,reviewDecision:r.reviewDecision??null,statusCheckRollup:s,comments:r.comments?.nodes??[]}}async function Zr(e,t,r,s){let o=Tl(r,s),p=Kn(t,o),k=kl(p.prs),i={...p,status:k};await Jn(e,i);let c=await he(e,t.id),d=c.status==="closed"?c.status:k,_=Kn({...c,status:d},o);return await se(e,_),_}async function Xr(e,t,r,s){let o=await he(e,t.id),p=(o.repoTargets??t.repoTargets??[]).map(i=>i.repoId===r?{...i,pullRequest:s}:i),k={...o,repoTargets:p};return await se(e,k),k}function Tl(e,t){let r=e.isDraft??!1,s=Rl(e.state,r);return{provider:"github",owner:t?.owner??null,repo:t?.repo??null,number:e.number,url:e.url,title:e.title??t?.title??null,status:s,draft:r,baseBranch:e.baseRefName,headBranch:e.headRefName,mergeable:e.mergeable==="MERGEABLE",mergeStateStatus:e.mergeStateStatus,reviewDecision:ei(e.reviewDecision??null),requiredChecks:Zn(e.statusCheckRollup),comments:ti(e.comments),createdAt:e.createdAt??t?.createdAt??null,updatedAt:e.updatedAt??t?.updatedAt??null,mergedAt:e.mergedAt??t?.mergedAt??null,lastSyncedAt:new Date().toISOString(),lastSyncedHeadSha:e.headRefOid??null}}function Yr(e){return{provider:"github",number:e.number,url:e.url,baseBranch:e.baseRefName,headBranch:e.headRefName,status:Pl(e.state),draft:e.isDraft??!1,mergeable:e.mergeable==="MERGEABLE",mergeStateStatus:e.mergeStateStatus,reviewDecision:ei(e.reviewDecision??null),requiredChecks:Zn(e.statusCheckRollup),comments:ti(e.comments),lastSyncedAt:new Date().toISOString(),lastSyncedHeadSha:e.headRefOid??null}}function Rl(e,t){return t?"draft":e==="OPEN"?"open":e==="MERGED"?"merged":e==="CLOSED"?"closed":null}function Pl(e){return e==="OPEN"?"open":e==="MERGED"?"merged":e==="CLOSED"?"closed":null}function Zn(e){let t=e.map(s=>Cl(s)).filter(s=>s!==null),r=new Map;for(let s of t){let o=r.get(s.name);(!o||Il(o,s))&&r.set(s.name,s)}return[...r.values()].map(s=>({name:s.name,status:s.status,conclusion:s.conclusion}))}function Cl(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:ri(s??null,t.conclusion??null),conclusion:t.conclusion??null,sortTime:xl(t)}:null}function Il(e,t){return e.sortTime!==null||t.sortTime!==null?(t.sortTime??0)>=(e.sortTime??0):sr(e)&&!sr(t)?!0:!sr(e)&&sr(t)?!1:zn(t.status)>=zn(e.status)}function sr(e){return e.conclusion?.toUpperCase()==="CANCELLED"}function zn(e){switch(e){case"pending":return 5;case"failed":return 4;case"success":return 3;case"skipped":return 2;default:return 1}}function xl(e){let t=e.completedAt??e.startedAt??e.createdAt??null;if(!t)return null;let r=new Date(t).getTime();return Number.isFinite(r)?r:null}function ei(e){return e==="APPROVED"||e==="CHANGES_REQUESTED"||e==="REVIEW_REQUIRED"?e:null}function ti(e){let t=Array.isArray(e)?e:e?.nodes;return Array.isArray(t)?t.map(El).filter(r=>r!==null).slice(-4):[]}function El(e){if(typeof e!="object"||e===null)return null;let t=e,r=Al(t.bodyText??t.body??"");return r?{author:typeof t.author=="string"?t.author:t.author?.login??null,body:r,createdAt:t.createdAt??null,url:t.url??null}:null}function Al(e){return e.replace(/\s+/g," ").trim()}function ri(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?ri(s,s):"unknown"}async function ae(e,t){try{return await he(e,t)}catch(r){throw $l(r)?new Error(`Craig task "${t}" was not found.`):r}}async function Ie(e){if(!await es(e.worktreePath))throw new Error(`Task ${e.id} worktree does not exist at ${e.worktreePath}. Repair or recreate the task before retrying.`)}function ts(e,t){return t.artifacts.logPath?si.isAbsolute(t.artifacts.logPath)?t.artifacts.logPath:si.join(e.workspaceRoot,t.artifacts.logPath):null}async function ni(e,t){let r=await es(t.worktreePath),s=ts(e,t),o=s?await es(s):!1;return{worktreeExists:r,logExists:o,recentFailureReason:t.lastFailureReason??null,runnerCommandText:t.runnerSession.command.join(" "),checksSummary:Ll(t),lastCommitSummary:Ml(t),prSummary:Ol(t),cleanupSummary:Bl(t)}}async function es(e){try{return await Dl(e),!0}catch{return!1}}function Ll(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 Ml(e){return e.lastCommit?`${e.lastCommit.sha.slice(0,7)} ${e.lastCommit.message}`:"not committed"}function Ol(e){if(e.type==="project"&&e.repoTargets?.length){let o=e.repoTargets.filter(c=>c.pullRequest.number);if(o.length===0)return"not linked";let p=o.map(c=>` ${c.repoId} #${c.pullRequest.number} ${c.pullRequest.status??"unknown"}`),k=o.reduce((c,d)=>{let _=d.pullRequest.status??"unknown";return c[_]=(c[_]??0)+1,c},{}),i=Object.entries(k).map(([c,d])=>`${d} ${c}`).join(", ");return`${o.length} PR${o.length!==1?"s":""} (${i})
138
138
  ${p.join(`
139
- `)}`}let t=pe(e);if(!t?.number||!t.url)return"not linked";let r=t.requiredChecks.length,s=r===1?"check":"checks";return`#${t.number} ${t.status??"unknown"} mergeable=${t.mergeable} mergeState=${t.mergeStateStatus??"unknown"} (${r} ${s})`}function Bl(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 $l(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}async function ii(e,t){let r=await ae(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),mt(e,r.sessionId)]),p=await Tt.attach(e,o,s.rootPath);return{kind:"attachTask",taskId:r.id,sessionId:p.id,disposition:"attached"}}Re();async function ai(e,t){let r=await ae(e,t),s=pe(r);return s?.number?(await Et(r.worktreePath),ir(s)?(await Jr(e,r)).task:Qr(e,r)):r}async function ar(e,t){let r=await ae(e,t),s=(r.repoTargets??[]).filter(k=>k.status==="ready"),o={synced:0,discovered:0,notFound:0};for(let k of s){await Et(k.worktreePath);let i=k.pullRequest.number?await At(e,r,k):await At(e,r,k).catch(()=>"not_found");o[i==="not_found"?"notFound":i]++}let p=await he(e,r.id);return p.status!=="closed"&&(p.status=li(p),await se(e,p)),o}async function ci(e,t){let r=new Map,s=new Map;for(let o of t){let p=rs(r,o);if(o.type==="project"&&o.repoTargets?.length){for(let d of o.repoTargets.filter(_=>_.status==="ready")){let _={id:`${o.id}:${d.repoId}`,task:o,targetRepoId:d.repoId,worktreePath:d.worktreePath,selector:d.pullRequest.number?String(d.pullRequest.number):d.branch,mode:d.pullRequest.number?"number":"head"};await oi(s,_).catch(async()=>{try{let a=d.pullRequest.number?await At(e,o,d):await At(e,o,d).catch(()=>"not_found");or(p,a,d.pullRequest.number??null,d.pullRequest.url??null)}catch{}})}continue}let k=pe(o),i=k?.number&&!ir(k),c={id:o.id,task:o,worktreePath:o.worktreePath,selector:i?String(k.number):o.branch,mode:i?"number":"head"};await oi(s,c).catch(async()=>{try{let{disposition:d,task:_}=await ss(e,o.id),a=pe(_);or(p,d,a?.number??null,a?.url??null)}catch{}})}for(let o of s.values())try{await Et(o.worktreePath);let p=await Xn(o.worktreePath,o.repository,o.items),k=new Map(p.map(i=>[i.id,i]));for(let i of o.items){let c=rs(r,i.task),d=k.get(i.id);if(!d?.found||!d.view){or(c,"not_found",null,null);continue}i.targetRepoId?await Qn(e,i.task,i.targetRepoId,d.view):await Yn(e,i.task,d.view),or(c,i.mode==="number"?"synced":"discovered",d.view.number,d.view.url)}}catch{}for(let o of t.filter(p=>p.type==="project"&&p.repoTargets?.length)){let p=await he(e,o.id);p.status!=="closed"&&(p.status=li(p),await se(e,p))}return t.map(o=>rs(r,o))}async function ss(e,t){let r=await ae(e,t);await Ie(r),await Et(r.worktreePath);let s=pe(r);if(s?.number&&!ir(s))return{disposition:"synced",task:await Qr(e,r)};let o=await Jr(e,r);return{disposition:o.discovered?"discovered":"not_found",task:o.task}}function li(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(Fl)?"merge_ready":r.some(s=>s.status==="open")?"pr_open":"checked"}async function oi(e,t){let r=await Gn(t.worktreePath);if(!r)throw new Error("GitHub repository remote could not be parsed.");let s=`${r.owner}/${r.name}`,o=e.get(s);if(o){o.items.push(t);return}e.set(s,{worktreePath:t.worktreePath,repository:r,items:[t]})}function rs(e,t){let r=e.get(t.id);if(r)return r;let s={taskId:t.id,synced:0,discovered:0,notFound:0,hadPr:t.type==="project"?!!t.repoTargets?.some(o=>o.pullRequest.number):!!pe(t)?.number,firstDiscoveredPrNumber:null,firstDiscoveredPrUrl:null};return e.set(t.id,s),s}function or(e,t,r,s){if(t==="synced"){e.synced+=1;return}if(t==="discovered"){e.discovered+=1,e.firstDiscoveredPrNumber??=r,e.firstDiscoveredPrUrl??=s;return}e.notFound+=1}function Fl(e){return e.mergeable&&e.reviewDecision!=="REVIEW_REQUIRED"&&e.reviewDecision!=="CHANGES_REQUESTED"&&e.mergeStateStatus!=="REVIEW_REQUIRED"&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}async function ns(e,t){let r=await ae(e,t);try{r.type==="project"&&r.repoTargets?.length?(await ar(e,t),r=await ae(e,t)):r.prs.some(p=>p.number)&&(r=await ai(e,t))}catch{}let s=await ni(e,r),o=r.sessionId?await mt(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 is(e,t){let r=await ae(e,t),s=ts(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}}Ce();async function os(e,t){let r=await ae(e,t);if(await Ie(r),(await ee("git",["status","--short"],{cwd:r.worktreePath})).stdout.trim().length===0)return{kind:"showTaskDiff",taskId:r.id,diffText:"",isEmpty:!0};let o=await Wl(r.worktreePath);return{kind:"showTaskDiff",taskId:r.id,diffText:o,isEmpty:!1}}async function Wl(e){let t=[],r=await ee("git",["diff","--stat","--patch","HEAD"],{cwd:e});r.stdout.trim().length>0&&t.push(r.stdout.trimEnd());let s=await jl(e);for(let o of s){let p=await oe("git",["diff","--no-index","--stat","--patch","--","/dev/null",o],{cwd:e});t.push(p.stdout.trimEnd())}return t.join(`
139
+ `)}`}let t=pe(e);if(!t?.number||!t.url)return"not linked";let r=t.requiredChecks.length,s=r===1?"check":"checks";return`#${t.number} ${t.status??"unknown"} mergeable=${t.mergeable} mergeState=${t.mergeStateStatus??"unknown"} (${r} ${s})`}function Bl(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 $l(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}async function ii(e,t){let r=await ae(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),mt(e,r.sessionId)]),p=await Rt.attach(e,o,s.rootPath);return{kind:"attachTask",taskId:r.id,sessionId:p.id,disposition:"attached"}}Re();async function ai(e,t){let r=await ae(e,t),s=pe(r);return s?.number?(await At(r.worktreePath),ir(s)?(await Jr(e,r)).task:Qr(e,r)):r}async function ar(e,t){let r=await ae(e,t),s=(r.repoTargets??[]).filter(k=>k.status==="ready"),o={synced:0,discovered:0,notFound:0};for(let k of s){await At(k.worktreePath);let i=k.pullRequest.number?await Dt(e,r,k):await Dt(e,r,k).catch(()=>"not_found");o[i==="not_found"?"notFound":i]++}let p=await he(e,r.id);return p.status!=="closed"&&(p.status=li(p),await se(e,p)),o}async function ci(e,t){let r=new Map,s=new Map;for(let o of t){let p=rs(r,o);if(o.type==="project"&&o.repoTargets?.length){for(let d of o.repoTargets.filter(_=>_.status==="ready")){let _={id:`${o.id}:${d.repoId}`,task:o,targetRepoId:d.repoId,worktreePath:d.worktreePath,selector:d.pullRequest.number?String(d.pullRequest.number):d.branch,mode:d.pullRequest.number?"number":"head"};await oi(s,_).catch(async()=>{try{let a=d.pullRequest.number?await Dt(e,o,d):await Dt(e,o,d).catch(()=>"not_found");or(p,a,d.pullRequest.number??null,d.pullRequest.url??null)}catch{}})}continue}let k=pe(o),i=k?.number&&!ir(k),c={id:o.id,task:o,worktreePath:o.worktreePath,selector:i?String(k.number):o.branch,mode:i?"number":"head"};await oi(s,c).catch(async()=>{try{let{disposition:d,task:_}=await ss(e,o.id),a=pe(_);or(p,d,a?.number??null,a?.url??null)}catch{}})}for(let o of s.values())try{await At(o.worktreePath);let p=await Xn(o.worktreePath,o.repository,o.items),k=new Map(p.map(i=>[i.id,i]));for(let i of o.items){let c=rs(r,i.task),d=k.get(i.id);if(!d?.found||!d.view){or(c,"not_found",null,null);continue}i.targetRepoId?await Qn(e,i.task,i.targetRepoId,d.view):await Yn(e,i.task,d.view),or(c,i.mode==="number"?"synced":"discovered",d.view.number,d.view.url)}}catch{}for(let o of t.filter(p=>p.type==="project"&&p.repoTargets?.length)){let p=await he(e,o.id);p.status!=="closed"&&(p.status=li(p),await se(e,p))}return t.map(o=>rs(r,o))}async function ss(e,t){let r=await ae(e,t);await Ie(r),await At(r.worktreePath);let s=pe(r);if(s?.number&&!ir(s))return{disposition:"synced",task:await Qr(e,r)};let o=await Jr(e,r);return{disposition:o.discovered?"discovered":"not_found",task:o.task}}function li(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(Fl)?"merge_ready":r.some(s=>s.status==="open")?"pr_open":"checked"}async function oi(e,t){let r=await Gn(t.worktreePath);if(!r)throw new Error("GitHub repository remote could not be parsed.");let s=`${r.owner}/${r.name}`,o=e.get(s);if(o){o.items.push(t);return}e.set(s,{worktreePath:t.worktreePath,repository:r,items:[t]})}function rs(e,t){let r=e.get(t.id);if(r)return r;let s={taskId:t.id,synced:0,discovered:0,notFound:0,hadPr:t.type==="project"?!!t.repoTargets?.some(o=>o.pullRequest.number):!!pe(t)?.number,firstDiscoveredPrNumber:null,firstDiscoveredPrUrl:null};return e.set(t.id,s),s}function or(e,t,r,s){if(t==="synced"){e.synced+=1;return}if(t==="discovered"){e.discovered+=1,e.firstDiscoveredPrNumber??=r,e.firstDiscoveredPrUrl??=s;return}e.notFound+=1}function Fl(e){return e.mergeable&&e.reviewDecision!=="REVIEW_REQUIRED"&&e.reviewDecision!=="CHANGES_REQUESTED"&&e.mergeStateStatus!=="REVIEW_REQUIRED"&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped")}async function ns(e,t){let r=await ae(e,t);try{r.type==="project"&&r.repoTargets?.length?(await ar(e,t),r=await ae(e,t)):r.prs.some(p=>p.number)&&(r=await ai(e,t))}catch{}let s=await ni(e,r),o=r.sessionId?await mt(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 is(e,t){let r=await ae(e,t),s=ts(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}}Ce();async function os(e,t){let r=await ae(e,t);if(await Ie(r),(await ee("git",["status","--short"],{cwd:r.worktreePath})).stdout.trim().length===0)return{kind:"showTaskDiff",taskId:r.id,diffText:"",isEmpty:!0};let o=await Wl(r.worktreePath);return{kind:"showTaskDiff",taskId:r.id,diffText:o,isEmpty:!1}}async function Wl(e){let t=[],r=await ee("git",["diff","--stat","--patch","HEAD"],{cwd:e});r.stdout.trim().length>0&&t.push(r.stdout.trimEnd());let s=await jl(e);for(let o of s){let p=await oe("git",["diff","--no-index","--stat","--patch","--","/dev/null",o],{cwd:e});t.push(p.stdout.trimEnd())}return t.join(`
140
140
 
141
141
  `)}async function jl(e){return(await ee("git",["ls-files","--others","--exclude-standard"],{cwd:e})).stdout.split(`
142
- `).map(r=>r.trim()).filter(r=>r.length>0)}async function as(e,t){let r=await ae(e,t);if(!r.sessionId)throw new Error(`Task ${r.id} does not have a Craig session.`);let s=await mt(e,r.sessionId).catch(o=>{throw Hl(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 Gt(e.repoRoot,s.paneId,s.windowTarget,s.sessionName),{kind:"focusTask",taskId:r.id,tmuxTarget:s.paneId}}function Hl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as Ul}from"node:child_process";async function cs(e,t){let r=await ae(e,t);await Ie(r);let o=(await Ne(e)).open?.command??[];if(o.length===0)return{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!1,command:null};let p=[...o,r.worktreePath];return await ql(p,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:p}}async function ql(e,t){await new Promise((r,s)=>{let[o,...p]=e,k=Ul(o,p,{cwd:t,stdio:"inherit"});k.on("error",s),k.on("exit",i=>{if(i===0){r();return}s(new Error(`${e.join(" ")} failed with exit code ${i??"unknown"}.`))})})}We();import{mkdir as Kl}from"node:fs/promises";import Vl from"node:path";Re();Ce();async function ls(e,t){let r=await ae(e,t);if(await Ie(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 Jt(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 Ne(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 se(e,r);let p=[];for(let k of o){let i=new Date().toISOString(),c=await oe("sh",["-lc",k],{cwd:r.worktreePath}),d=new Date().toISOString(),_=c.exitCode??1;if(p.push({command:k,startedAt:i,finishedAt:d,exitCode:_}),_!==0)return r.checks.results=p,r.checks.status="failed",r.checks.lastRunAt=d,r.status="review",r.lastFailureReason=c.stderr.trim()||c.stdout.trim()||`Check command failed: ${k}`,await di(e,r),await se(e,r),{kind:"runChecks",taskId:r.id,status:"failed",commands:o}}return r.checks.results=p,r.checks.status="passed",r.checks.lastRunAt=new Date().toISOString(),r.status="checked",r.lastFailureReason=null,await di(e,r),await se(e,r),{kind:"runChecks",taskId:r.id,status:"passed",commands:o}}async function di(e,t){let r=rr(e,t.artifacts.checkSummaryPath);r&&(await Kl(Vl.dirname(r),{recursive:!0}),await ue(r,{taskId:t.id,status:t.checks.status,lastRunAt:t.checks.lastRunAt,commands:t.checks.commands,results:t.checks.results}))}Re();async function ds(e,t){let r=await ae(e,t);await Ie(r);let s=await Jt(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 An(r.worktreePath),await Dn(r.worktreePath,o);let p=await Ln(r.worktreePath);return r.lastCommit={sha:p.sha,message:p.message,committedAt:new Date().toISOString()},r.lastFailureReason=null,await se(e,r),{kind:"commitTask",taskId:r.id,status:r.status,commitSha:p.sha,message:p.message}}ot();dt();Pt();wt();xt();Ot();Ce();import ed from"node:path";import{stat as td}from"node:fs/promises";async function ki(e,t){let r=ed.resolve(e.workspaceRoot,t);if(!(await td(r).catch(()=>null))?.isDirectory())throw new Error(`Repo path does not exist: ${r}`);let o=await Promise.resolve().then(()=>(Ot(),bi)).then(({addWorkspace:k})=>k(e,t)),p=o.repos[0];if(!p||o.workspace.kind==="project")throw new Error(`Repo path is not a git repository: ${r}`);return{kind:"createRepo",repo:p,workspaceId:o.workspace.id,created:o.created}}async function yi(e){return{kind:"listRepos",repos:await lt(e)}}async function vi(e,t){let r=await Le(e,t),o=(await Me(e)).filter(d=>d.primaryRepoId===t),p=o.filter(d=>d.status==="active"),k=await He(e,{repoId:t});if(p.length>0)throw new Error(`Cannot remove repo ${t} while active workspace records still reference it.`);if(k.tasks.length>0)throw new Error(`Cannot remove repo ${t} while task records still reference it.`);await Promise.all(o.map(d=>cr(e,d.id))),await Cn(e,t);let i=await Te(e);await it(e,{...i,repoIds:i.repoIds.filter(d=>d!==t)});let c=await De({uiStateFile:e.uiStateFile});return c?.selectedRepoId===t&&await Pe({uiStateFile:e.uiStateFile},{...c,selectedRepoId:null,selectedWorkspaceId:null,selectedTaskId:null}),{kind:"removeRepo",repoId:r.id,rootPath:r.rootPath}}dt();Re();async function Si(e,t,r){let[s,o]=await Promise.all([ae(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 p=s.linkedRepoIds.includes(o.id)?s.linkedRepoIds:[...s.linkedRepoIds,o.id];return await se(e,{...s,linkedRepoIds:p}),{kind:"addTaskLink",taskId:s.id,repoId:o.id,linkedRepoIds:p}}async function Ti(e,t){let r=await ae(e,t),s=await Promise.all(r.linkedRepoIds.map(o=>Le(e,o)));return{kind:"listTaskLinks",taskId:r.id,repos:s}}Ot();async function Ri(e,t){switch(e.kind){case"addWorkspace":return Dt(t.paths,e.path);case"addRepo":return ki(t.paths,e.path);case"listRepos":return yi(t.paths);case"removeRepo":return vi(t.paths,e.repoId);case"listWorkspaces":return us(t.paths,{archived:e.archived});case"archiveWorkspace":return Lt(t.paths,e.workspaceId);case"restoreWorkspace":return hs(t.paths,e.workspaceId);case"removeWorkspace":return Mt(t.paths,e.workspaceId);case"createTask":return Un(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?He(t.paths,{...e.repoId?{repoId:e.repoId}:{},...e.workspaceId?{workspaceId:e.workspaceId}:{}}):He(t.paths);case"attachTask":return ii(t.paths,e.taskId);case"addTaskLink":return Si(t.paths,e.taskId,e.repoId);case"listTaskLinks":return Ti(t.paths,e.taskId);case"refreshInteractiveState":throw new Error("Interactive refresh should be handled by the interactive app.");case"showTask":return ns(t.paths,e.taskId);case"showSelectedTask":return ns(t.paths,ut(t,"show"));case"streamTaskLogs":return is(t.paths,e.taskId);case"streamSelectedTaskLogs":return is(t.paths,ut(t,"logs"));case"showTaskDiff":return os(t.paths,e.taskId);case"showSelectedTaskDiff":return os(t.paths,ut(t,"diff"));case"focusTask":return as(t.paths,e.taskId);case"focusSelectedTask":return as(t.paths,ut(t,"focus"));case"openTask":return cs(t.paths,e.taskId);case"openSelectedTask":return cs(t.paths,ut(t,"open"));case"runChecks":return ls(t.paths,e.taskId);case"runSelectedTaskChecks":return ls(t.paths,ut(t,"check"));case"commitTask":return ds(t.paths,e.taskId);case"commitSelectedTask":return ds(t.paths,ut(t,"commit"));case"help":return{kind:"help",text:be()};case"exit":return{kind:"exit"};default:return rd(e)}}function rd(e){throw new Error(`Unsupported command: ${JSON.stringify(e)}`)}function ut(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>'.`)}We();import{mkdir as Ue,readFile as sd}from"node:fs/promises";import ve from"node:path";function Ve(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")}}ot();async function kt(e){let t=Ve(e);await Ue(t.craigDir,{recursive:!0}),await Promise.all([Ue(t.reposDir,{recursive:!0}),Ue(t.workspacesDir,{recursive:!0}),Ue(t.sessionsDir,{recursive:!0}),Ue(t.runtimeDir,{recursive:!0}),Ue(t.tasksDir,{recursive:!0}),Ue(t.jobsDir,{recursive:!0}),Ue(t.logsDir,{recursive:!0}),Ue(t.artifactsDir,{recursive:!0}),Ue(t.worktreesDir,{recursive:!0})]);try{let o=await sd(t.indexFile,"utf8"),p=JSON.parse(o);return jr(p,e,t.indexFile)}catch(o){if(!nd(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 ue(t.indexFile,s),s}function nd(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}function Pi(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(`
142
+ `).map(r=>r.trim()).filter(r=>r.length>0)}async function as(e,t){let r=await ae(e,t);if(!r.sessionId)throw new Error(`Task ${r.id} does not have a Craig session.`);let s=await mt(e,r.sessionId).catch(o=>{throw Hl(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 Gt(e.repoRoot,s.paneId,s.windowTarget,s.sessionName),{kind:"focusTask",taskId:r.id,tmuxTarget:s.paneId}}function Hl(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}import{spawn as Ul}from"node:child_process";async function cs(e,t){let r=await ae(e,t);await Ie(r);let o=(await Ne(e)).open?.command??[];if(o.length===0)return{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!1,command:null};let p=[...o,r.worktreePath];return await ql(p,e.repoRoot),{kind:"openTask",taskId:r.id,worktreePath:r.worktreePath,launched:!0,command:p}}async function ql(e,t){await new Promise((r,s)=>{let[o,...p]=e,k=Ul(o,p,{cwd:t,stdio:"inherit"});k.on("error",s),k.on("exit",i=>{if(i===0){r();return}s(new Error(`${e.join(" ")} failed with exit code ${i??"unknown"}.`))})})}We();import{mkdir as Kl}from"node:fs/promises";import Vl from"node:path";Re();Ce();async function ls(e,t){let r=await ae(e,t);if(await Ie(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 Jt(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 Ne(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 se(e,r);let p=[];for(let k of o){let i=new Date().toISOString(),c=await oe("sh",["-lc",k],{cwd:r.worktreePath}),d=new Date().toISOString(),_=c.exitCode??1;if(p.push({command:k,startedAt:i,finishedAt:d,exitCode:_}),_!==0)return r.checks.results=p,r.checks.status="failed",r.checks.lastRunAt=d,r.status="review",r.lastFailureReason=c.stderr.trim()||c.stdout.trim()||`Check command failed: ${k}`,await di(e,r),await se(e,r),{kind:"runChecks",taskId:r.id,status:"failed",commands:o}}return r.checks.results=p,r.checks.status="passed",r.checks.lastRunAt=new Date().toISOString(),r.status="checked",r.lastFailureReason=null,await di(e,r),await se(e,r),{kind:"runChecks",taskId:r.id,status:"passed",commands:o}}async function di(e,t){let r=rr(e,t.artifacts.checkSummaryPath);r&&(await Kl(Vl.dirname(r),{recursive:!0}),await ue(r,{taskId:t.id,status:t.checks.status,lastRunAt:t.checks.lastRunAt,commands:t.checks.commands,results:t.checks.results}))}Re();async function ds(e,t){let r=await ae(e,t);await Ie(r);let s=await Jt(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 An(r.worktreePath),await Dn(r.worktreePath,o);let p=await Ln(r.worktreePath);return r.lastCommit={sha:p.sha,message:p.message,committedAt:new Date().toISOString()},r.lastFailureReason=null,await se(e,r),{kind:"commitTask",taskId:r.id,status:r.status,commitSha:p.sha,message:p.message}}ot();dt();Ct();wt();Et();Bt();Ce();import ed from"node:path";import{stat as td}from"node:fs/promises";async function ki(e,t){let r=ed.resolve(e.workspaceRoot,t);if(!(await td(r).catch(()=>null))?.isDirectory())throw new Error(`Repo path does not exist: ${r}`);let o=await Promise.resolve().then(()=>(Bt(),bi)).then(({addWorkspace:k})=>k(e,t)),p=o.repos[0];if(!p||o.workspace.kind==="project")throw new Error(`Repo path is not a git repository: ${r}`);return{kind:"createRepo",repo:p,workspaceId:o.workspace.id,created:o.created}}async function yi(e){return{kind:"listRepos",repos:await lt(e)}}async function vi(e,t){let r=await Le(e,t),o=(await Me(e)).filter(d=>d.primaryRepoId===t),p=o.filter(d=>d.status==="active"),k=await He(e,{repoId:t});if(p.length>0)throw new Error(`Cannot remove repo ${t} while active workspace records still reference it.`);if(k.tasks.length>0)throw new Error(`Cannot remove repo ${t} while task records still reference it.`);await Promise.all(o.map(d=>cr(e,d.id))),await Cn(e,t);let i=await Te(e);await it(e,{...i,repoIds:i.repoIds.filter(d=>d!==t)});let c=await De({uiStateFile:e.uiStateFile});return c?.selectedRepoId===t&&await Pe({uiStateFile:e.uiStateFile},{...c,selectedRepoId:null,selectedWorkspaceId:null,selectedTaskId:null}),{kind:"removeRepo",repoId:r.id,rootPath:r.rootPath}}dt();Re();async function Si(e,t,r){let[s,o]=await Promise.all([ae(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 p=s.linkedRepoIds.includes(o.id)?s.linkedRepoIds:[...s.linkedRepoIds,o.id];return await se(e,{...s,linkedRepoIds:p}),{kind:"addTaskLink",taskId:s.id,repoId:o.id,linkedRepoIds:p}}async function Ti(e,t){let r=await ae(e,t),s=await Promise.all(r.linkedRepoIds.map(o=>Le(e,o)));return{kind:"listTaskLinks",taskId:r.id,repos:s}}Bt();async function Ri(e,t){switch(e.kind){case"addWorkspace":return Lt(t.paths,e.path);case"addRepo":return ki(t.paths,e.path);case"listRepos":return yi(t.paths);case"removeRepo":return vi(t.paths,e.repoId);case"listWorkspaces":return us(t.paths,{archived:e.archived});case"archiveWorkspace":return Mt(t.paths,e.workspaceId);case"restoreWorkspace":return hs(t.paths,e.workspaceId);case"removeWorkspace":return Ot(t.paths,e.workspaceId);case"createTask":return Un(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?He(t.paths,{...e.repoId?{repoId:e.repoId}:{},...e.workspaceId?{workspaceId:e.workspaceId}:{}}):He(t.paths);case"attachTask":return ii(t.paths,e.taskId);case"addTaskLink":return Si(t.paths,e.taskId,e.repoId);case"listTaskLinks":return Ti(t.paths,e.taskId);case"refreshInteractiveState":throw new Error("Interactive refresh should be handled by the interactive app.");case"showTask":return ns(t.paths,e.taskId);case"showSelectedTask":return ns(t.paths,ut(t,"show"));case"streamTaskLogs":return is(t.paths,e.taskId);case"streamSelectedTaskLogs":return is(t.paths,ut(t,"logs"));case"showTaskDiff":return os(t.paths,e.taskId);case"showSelectedTaskDiff":return os(t.paths,ut(t,"diff"));case"focusTask":return as(t.paths,e.taskId);case"focusSelectedTask":return as(t.paths,ut(t,"focus"));case"openTask":return cs(t.paths,e.taskId);case"openSelectedTask":return cs(t.paths,ut(t,"open"));case"runChecks":return ls(t.paths,e.taskId);case"runSelectedTaskChecks":return ls(t.paths,ut(t,"check"));case"commitTask":return ds(t.paths,e.taskId);case"commitSelectedTask":return ds(t.paths,ut(t,"commit"));case"help":return{kind:"help",text:be()};case"exit":return{kind:"exit"};default:return rd(e)}}function rd(e){throw new Error(`Unsupported command: ${JSON.stringify(e)}`)}function ut(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>'.`)}We();import{mkdir as Ue,readFile as sd}from"node:fs/promises";import ve from"node:path";function Ve(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")}}ot();async function kt(e){let t=Ve(e);await Ue(t.craigDir,{recursive:!0}),await Promise.all([Ue(t.reposDir,{recursive:!0}),Ue(t.workspacesDir,{recursive:!0}),Ue(t.sessionsDir,{recursive:!0}),Ue(t.runtimeDir,{recursive:!0}),Ue(t.tasksDir,{recursive:!0}),Ue(t.jobsDir,{recursive:!0}),Ue(t.logsDir,{recursive:!0}),Ue(t.artifactsDir,{recursive:!0}),Ue(t.worktreesDir,{recursive:!0})]);try{let o=await sd(t.indexFile,"utf8"),p=JSON.parse(o);return jr(p,e,t.indexFile)}catch(o){if(!nd(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 ue(t.indexFile,s),s}function nd(e){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&e.code==="ENOENT"}function Pi(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(`
143
143
  `);case"createRepo":return[`${e.created?"Registered":"Already registered"} repo ${e.repo.id}`,`Path: ${e.repo.rootPath}`,`Branch: ${e.repo.defaultBranch}`,`Workspace: ${e.workspaceId}`].join(`
144
144
  `);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(`
145
145
  `);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(`
@@ -148,10 +148,10 @@ ${p.join(`
148
148
  `);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} ${ad(t)} ${cd(t)} ${t.title}`)].join(`
149
149
  `);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}`,...id(e)].join(`
150
150
  `);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(`
151
- `);default:return od(e)}}function id(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 od(e){throw new Error(`Unsupported result: ${JSON.stringify(e)}`)}function ad(e){return e.checks.status}function cd(e){if(e.type==="project"&&e.repoTargets?.length){let r=e.repoTargets.filter(o=>o.pullRequest.number);if(r.length===0)return"-";let s=r.reduce((o,p)=>{let k=p.pullRequest.status??"unknown";return o[k]=(o[k]??0)+1,o},{});return Object.entries(s).map(([o,p])=>`${p} ${o}`).join(", ")}let t=e.prs[0];return t?.number?`#${t.number}:${t.status??"unknown"}`:"-"}dt();Pt();wt();import{createRequire as sf}from"node:module";import{readdir as nf,stat as of}from"node:fs/promises";import vt from"node:path";Re();xt();Ot();Ce();import{readFile as ld,stat as dd}from"node:fs/promises";import fs from"node:path";var ud=200*1024,hd=500*1024,lr="100000";async function Ii(e,t,r){if(e.type==="project"&&e.repoTargets?.length)return fd(e,t,r);try{let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),p=o?await Bt(e.worktreePath):null,[k,i]=await Promise.all([ur(e.worktreePath,s),o?ps(e.worktreePath,o,t.diffRows,p):Promise.resolve(me("No diff selected","No local changes found.","empty"))]),c=o?{[o]:i}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:c,selectedFile:k,selectedDiff:i,error:null}}catch(s){let o=s instanceof Error?s.message:"Unable to inspect task worktree.";return{...t,error:o}}}async function fd(e,t,r){let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),[p,k]=await Promise.all([Ei(e,s),(async()=>{if(!o)return me("No diff selected","No local changes found.","empty");let c=dr(e,o),d=c?await Bt(c.target.worktreePath).catch(()=>null):null;return Ai(e,o,t.diffRows,d)})()]),i=o?{[o]:k}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:i,selectedFile:p,selectedDiff:k}}async function xi(e,t={}){if(e.type==="project"&&e.repoTargets?.length)return pd(e,t);try{await Ie(e);let r=await Bt(e.worktreePath),[s,o]=await Promise.all([Di(e.worktreePath),Li(e.worktreePath,r)]),p=[...new Set(o.map(a=>a.path))],k=Ze(t.selectedFilePath??null,s),i=Ze(t.selectedDiffPath??null,p),[c,d]=await Promise.all([ur(e.worktreePath,k),i?ps(e.worktreePath,i,o,r):Promise.resolve(me("No diff selected","No local changes found.","empty"))]),_=i?{[i]:d}:{};return{taskId:e.id,fileRows:Bi(s),filePaths:s,diffRows:o,diffPaths:p,diffContents:_,selectedFilePath:k,selectedDiffPath:i,selectedFile:c,selectedDiff:d,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:me("Files unavailable",s,"error"),selectedDiff:me("Diff unavailable",s,"error"),error:s}}}async function pd(e,t){let r=(e.repoTargets??[]).filter(b=>b.status==="ready"),s=await Promise.all(r.map(async b=>{let l=await Bt(b.worktreePath).catch(()=>null),[m,w]=await Promise.all([Di(b.worktreePath).catch(()=>[]),Li(b.worktreePath,l).catch(()=>[])]);return{target:b,baseRef:l,targetFiles:m,targetDiffRows:w}})),o=[],p=[];for(let{target:b,targetFiles:l,targetDiffRows:m}of s)o.push(...l.map(w=>`${b.repoId}/${w}`)),p.push(...m.map(w=>({...w,path:`${b.repoId}/${w.path}`})));let k=[...new Set(p.map(b=>b.path))].sort(),i=Ze(t.selectedFilePath??null,o),c=Ze(t.selectedDiffPath??null,k),[d,_]=await Promise.all([Ei(e,i),(async()=>{if(!c)return me("No diff selected","No local changes found.","empty");let b=dr(e,c),l=b?s.find(m=>m.target.repoId===b.target.repoId):null;return Ai(e,c,p,l?.baseRef??null)})()]),a=c?{[c]:_}:{};return{taskId:e.id,fileRows:Bi(o),filePaths:o,diffRows:p,diffPaths:k,diffContents:a,selectedFilePath:i,selectedDiffPath:c,selectedFile:d,selectedDiff:_,error:null}}async function Ei(e,t){let r=dr(e,t);if(!r)return me("No file selected","No Git-visible files found.","empty");let s=await ur(r.target.worktreePath,r.relativePath);return{...s,path:t,title:t??s.title}}async function Ai(e,t,r,s=null){let o=dr(e,t);return o?{...await ps(o.target.worktreePath,o.relativePath,r.filter(k=>k.path.startsWith(`${o.target.repoId}/`)).map(k=>({...k,path:k.path.slice(o.target.repoId.length+1)})),s),path:t,title:t}:me(t,"Repo target is unavailable.","error",t)}function dr(e,t){if(!t)return null;let[r,...s]=t.split("/"),o=s.join("/"),p=(e.repoTargets??[]).find(k=>k.repoId===r&&k.status==="ready")??null;return!p||o.length===0?null:{target:p,relativePath:o}}async function Di(e){let t=await ee("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e});return $i(t.stdout)}async function Li(e,t){let[r,s,o,p]=await Promise.all([gd(e,t),Ci(e,"staged"),Ci(e,"unstaged"),md(e)]);return[...r,...s,...o,...p]}async function gd(e,t){if(!t)return[];let[r,s]=await Promise.all([ee("git",["diff","--name-status",`${t}...HEAD`],{cwd:e}),ee("git",["diff","--numstat",`${t}...HEAD`],{cwd:e})]),o=Mi(r.stdout),p=Oi(s.stdout);return o.map(k=>{let i=p.get(k.path)??{additions:null,deletions:null};return{group:"branch",path:k.path,status:k.status,additions:i.additions,deletions:i.deletions}}).sort((k,i)=>k.path.localeCompare(i.path))}async function Ci(e,t){let r=t==="staged"?["diff","--cached"]:["diff"],[s,o]=await Promise.all([ee("git",[...r,"--name-status"],{cwd:e}),ee("git",[...r,"--numstat"],{cwd:e})]),p=Mi(s.stdout),k=Oi(o.stdout);return p.map(i=>{let c=k.get(i.path)??{additions:null,deletions:null};return{group:t,path:i.path,status:i.status,additions:c.additions,deletions:c.deletions}}).sort((i,c)=>i.path.localeCompare(c.path))}async function md(e){let t=await ee("git",["ls-files","--others","--exclude-standard"],{cwd:e}),r=$i(t.stdout);return await Promise.all(r.map(async o=>{let p=await ur(e,o),k=p.status==="ready"?_d(p.lines):null;return{group:"untracked",path:o,status:"A",additions:k,deletions:0}}))}function Mi(e){return e.split(`
151
+ `);default:return od(e)}}function id(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 od(e){throw new Error(`Unsupported result: ${JSON.stringify(e)}`)}function ad(e){return e.checks.status}function cd(e){if(e.type==="project"&&e.repoTargets?.length){let r=e.repoTargets.filter(o=>o.pullRequest.number);if(r.length===0)return"-";let s=r.reduce((o,p)=>{let k=p.pullRequest.status??"unknown";return o[k]=(o[k]??0)+1,o},{});return Object.entries(s).map(([o,p])=>`${p} ${o}`).join(", ")}let t=e.prs[0];return t?.number?`#${t.number}:${t.status??"unknown"}`:"-"}dt();Ct();wt();import{createRequire as sf}from"node:module";import{readdir as nf,stat as of}from"node:fs/promises";import St from"node:path";Re();Et();Bt();Ce();import{readFile as ld,stat as dd}from"node:fs/promises";import fs from"node:path";var ud=200*1024,hd=500*1024,lr="100000";async function Ii(e,t,r){if(e.type==="project"&&e.repoTargets?.length)return fd(e,t,r);try{let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),p=o?await $t(e.worktreePath):null,[k,i]=await Promise.all([ur(e.worktreePath,s),o?ps(e.worktreePath,o,t.diffRows,p):Promise.resolve(me("No diff selected","No local changes found.","empty"))]),c=o?{[o]:i}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:c,selectedFile:k,selectedDiff:i,error:null}}catch(s){let o=s instanceof Error?s.message:"Unable to inspect task worktree.";return{...t,error:o}}}async function fd(e,t,r){let s=Ze(r.selectedFilePath??null,t.filePaths),o=Ze(r.selectedDiffPath??null,t.diffPaths),[p,k]=await Promise.all([Ei(e,s),(async()=>{if(!o)return me("No diff selected","No local changes found.","empty");let c=dr(e,o),d=c?await $t(c.target.worktreePath).catch(()=>null):null;return Ai(e,o,t.diffRows,d)})()]),i=o?{[o]:k}:{};return{...t,selectedFilePath:s,selectedDiffPath:o,diffContents:i,selectedFile:p,selectedDiff:k}}async function xi(e,t={}){if(e.type==="project"&&e.repoTargets?.length)return pd(e,t);try{await Ie(e);let r=await $t(e.worktreePath),[s,o]=await Promise.all([Di(e.worktreePath),Li(e.worktreePath,r)]),p=[...new Set(o.map(a=>a.path))],k=Ze(t.selectedFilePath??null,s),i=Ze(t.selectedDiffPath??null,p),[c,d]=await Promise.all([ur(e.worktreePath,k),i?ps(e.worktreePath,i,o,r):Promise.resolve(me("No diff selected","No local changes found.","empty"))]),_=i?{[i]:d}:{};return{taskId:e.id,fileRows:Bi(s),filePaths:s,diffRows:o,diffPaths:p,diffContents:_,selectedFilePath:k,selectedDiffPath:i,selectedFile:c,selectedDiff:d,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:me("Files unavailable",s,"error"),selectedDiff:me("Diff unavailable",s,"error"),error:s}}}async function pd(e,t){let r=(e.repoTargets??[]).filter(b=>b.status==="ready"),s=await Promise.all(r.map(async b=>{let l=await $t(b.worktreePath).catch(()=>null),[m,w]=await Promise.all([Di(b.worktreePath).catch(()=>[]),Li(b.worktreePath,l).catch(()=>[])]);return{target:b,baseRef:l,targetFiles:m,targetDiffRows:w}})),o=[],p=[];for(let{target:b,targetFiles:l,targetDiffRows:m}of s)o.push(...l.map(w=>`${b.repoId}/${w}`)),p.push(...m.map(w=>({...w,path:`${b.repoId}/${w.path}`})));let k=[...new Set(p.map(b=>b.path))].sort(),i=Ze(t.selectedFilePath??null,o),c=Ze(t.selectedDiffPath??null,k),[d,_]=await Promise.all([Ei(e,i),(async()=>{if(!c)return me("No diff selected","No local changes found.","empty");let b=dr(e,c),l=b?s.find(m=>m.target.repoId===b.target.repoId):null;return Ai(e,c,p,l?.baseRef??null)})()]),a=c?{[c]:_}:{};return{taskId:e.id,fileRows:Bi(o),filePaths:o,diffRows:p,diffPaths:k,diffContents:a,selectedFilePath:i,selectedDiffPath:c,selectedFile:d,selectedDiff:_,error:null}}async function Ei(e,t){let r=dr(e,t);if(!r)return me("No file selected","No Git-visible files found.","empty");let s=await ur(r.target.worktreePath,r.relativePath);return{...s,path:t,title:t??s.title}}async function Ai(e,t,r,s=null){let o=dr(e,t);return o?{...await ps(o.target.worktreePath,o.relativePath,r.filter(k=>k.path.startsWith(`${o.target.repoId}/`)).map(k=>({...k,path:k.path.slice(o.target.repoId.length+1)})),s),path:t,title:t}:me(t,"Repo target is unavailable.","error",t)}function dr(e,t){if(!t)return null;let[r,...s]=t.split("/"),o=s.join("/"),p=(e.repoTargets??[]).find(k=>k.repoId===r&&k.status==="ready")??null;return!p||o.length===0?null:{target:p,relativePath:o}}async function Di(e){let t=await ee("git",["ls-files","--cached","--others","--exclude-standard"],{cwd:e});return $i(t.stdout)}async function Li(e,t){let[r,s,o,p]=await Promise.all([gd(e,t),Ci(e,"staged"),Ci(e,"unstaged"),md(e)]);return[...r,...s,...o,...p]}async function gd(e,t){if(!t)return[];let[r,s]=await Promise.all([ee("git",["diff","--name-status",`${t}...HEAD`],{cwd:e}),ee("git",["diff","--numstat",`${t}...HEAD`],{cwd:e})]),o=Mi(r.stdout),p=Oi(s.stdout);return o.map(k=>{let i=p.get(k.path)??{additions:null,deletions:null};return{group:"branch",path:k.path,status:k.status,additions:i.additions,deletions:i.deletions}}).sort((k,i)=>k.path.localeCompare(i.path))}async function Ci(e,t){let r=t==="staged"?["diff","--cached"]:["diff"],[s,o]=await Promise.all([ee("git",[...r,"--name-status"],{cwd:e}),ee("git",[...r,"--numstat"],{cwd:e})]),p=Mi(s.stdout),k=Oi(o.stdout);return p.map(i=>{let c=k.get(i.path)??{additions:null,deletions:null};return{group:t,path:i.path,status:i.status,additions:c.additions,deletions:c.deletions}}).sort((i,c)=>i.path.localeCompare(c.path))}async function md(e){let t=await ee("git",["ls-files","--others","--exclude-standard"],{cwd:e}),r=$i(t.stdout);return await Promise.all(r.map(async o=>{let p=await ur(e,o),k=p.status==="ready"?_d(p.lines):null;return{group:"untracked",path:o,status:"A",additions:k,deletions:0}}))}function Mi(e){return e.split(`
152
152
  `).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 Oi(e){let t=new Map;for(let r of e.split(`
153
- `)){let s=r.trim();if(!s)continue;let[o="-",p="-",...k]=s.split(" "),i=k.join(" ");i&&t.set(i,{additions:o==="-"?null:Number(o),deletions:p==="-"?null:Number(p)})}return t}async function Bt(e){return(await oe("git",["show-ref","--verify","--quiet","refs/remotes/origin/main"],{cwd:e})).exitCode===0?"origin/main":(await oe("git",["show-ref","--verify","--quiet","refs/heads/main"],{cwd:e})).exitCode===0?"main":null}async function ur(e,t){if(!t)return me("No file selected","No Git-visible files found.","empty");let r=wd(e,t);try{let s=await dd(r);if(s.size>ud)return me(t,`File is ${s.size} bytes, above the 200 KB inline preview limit.`,"too_large",t,s.size);let o=await ld(r);return bd(o)?me(t,"Binary file preview is not available in Craig.","binary",t,o.byteLength):{path:t,status:"ready",title:t,lines:o.toString("utf8").split(`
154
- `),byteLength:o.byteLength}}catch(s){let o=s instanceof Error?s.message:"Unable to read file.";return me(t,o,"missing",t,null)}}async function ps(e,t,r,s=null){if(!t)return me("No diff selected","No local changes found.","empty");let o=[],p=r.filter(i=>i.path===t).map(i=>i.group);if(p.includes("branch")){let i=s??await Bt(e);if(i){let c=await ee("git",["diff","--stat","--patch",`--unified=${lr}`,`${i}...HEAD`,"--",t],{cwd:e});c.stdout.trim().length>0&&o.push(`branch
153
+ `)){let s=r.trim();if(!s)continue;let[o="-",p="-",...k]=s.split(" "),i=k.join(" ");i&&t.set(i,{additions:o==="-"?null:Number(o),deletions:p==="-"?null:Number(p)})}return t}async function $t(e){return(await oe("git",["show-ref","--verify","--quiet","refs/remotes/origin/main"],{cwd:e})).exitCode===0?"origin/main":(await oe("git",["show-ref","--verify","--quiet","refs/heads/main"],{cwd:e})).exitCode===0?"main":null}async function ur(e,t){if(!t)return me("No file selected","No Git-visible files found.","empty");let r=wd(e,t);try{let s=await dd(r);if(s.size>ud)return me(t,`File is ${s.size} bytes, above the 200 KB inline preview limit.`,"too_large",t,s.size);let o=await ld(r);return bd(o)?me(t,"Binary file preview is not available in Craig.","binary",t,o.byteLength):{path:t,status:"ready",title:t,lines:o.toString("utf8").split(`
154
+ `),byteLength:o.byteLength}}catch(s){let o=s instanceof Error?s.message:"Unable to read file.";return me(t,o,"missing",t,null)}}async function ps(e,t,r,s=null){if(!t)return me("No diff selected","No local changes found.","empty");let o=[],p=r.filter(i=>i.path===t).map(i=>i.group);if(p.includes("branch")){let i=s??await $t(e);if(i){let c=await ee("git",["diff","--stat","--patch",`--unified=${lr}`,`${i}...HEAD`,"--",t],{cwd:e});c.stdout.trim().length>0&&o.push(`branch
155
155
  ${c.stdout.trimEnd()}`)}}if(p.includes("staged")){let i=await ee("git",["diff","--cached","--stat","--patch",`--unified=${lr}`,"--",t],{cwd:e});i.stdout.trim().length>0&&o.push(`staged
156
156
  ${i.stdout.trimEnd()}`)}if(p.includes("unstaged")){let i=await ee("git",["diff","--stat","--patch",`--unified=${lr}`,"--",t],{cwd:e});i.stdout.trim().length>0&&o.push(`unstaged
157
157
  ${i.stdout.trimEnd()}`)}if(p.includes("untracked")){let i=await oe("git",["diff","--no-index","--stat","--patch",`--unified=${lr}`,"--","/dev/null",t],{cwd:e});i.stdout.trim().length>0&&o.push(`untracked
@@ -159,8 +159,8 @@ ${i.stdout.trimEnd()}`)}let k=o.join(`
159
159
 
160
160
  `);return k.length>hd?me(t,"Diff is above the 500 KB inline preview limit.","too_large",t,k.length):k.includes("\0")?me(t,"Binary diff preview is not available in Craig.","binary",t,k.length):{path:t,status:k.length>0?"ready":"empty",title:t,lines:k.length>0?k.split(`
161
161
  `):["No diff for this file."],byteLength:k.length}}function Bi(e){let t=[],r=new Set;for(let s of e){let o=s.split("/");for(let p=0;p<o.length-1;p+=1){let k=o.slice(0,p+1).join("/");r.has(k)||(r.add(k),t.push({kind:"directory",path:k,depth:p,label:o[p]??k}))}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 _d(e){return e.length===1&&e[0]===""?0:e.at(-1)===""?e.length-1:e.length}function $i(e){return[...new Set(e.split(`
162
- `).map(t=>t.trim()).filter(t=>t.length>0))].sort((t,r)=>t.localeCompare(r))}function wd(e,t){let r=fs.resolve(e,t),s=fs.resolve(e);if(r!==s&&!r.startsWith(`${s}${fs.sep}`))throw new Error(`File path escapes task worktree: ${t}`);return r}function bd(e){return e.subarray(0,Math.min(e.byteLength,8e3)).includes(0)}function me(e,t,r,s=null,o=null){return{path:s,status:r,title:e,lines:[t],byteLength:o}}Re();import{access as kd}from"node:fs/promises";async function Fi(e,t){let r=await ae(e,t),s=await yd(r.worktreePath),o={...r,status:"closed",cleanup:{...r.cleanup,preservedWorktree:s&&r.cleanup.worktreeRemovedAt===null,warning:null},lastFailureReason:null};return await se(e,o),o}async function yd(e){try{return await kd(e),!0}catch{return!1}}Ae();Ce();import Wt from"node:path";function Ni(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 Wi="\u{F024B} ",ji="\u{F0DCF} ",Hi="\u25CB",gs="\uEA64",Ui="\uEAFE",qi="\uEBDA",ms="\u25CB",_s="\u25CF",ws="\u2713",bs="\u2715";function Ki(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();wt();Ae();var vd=["tasks","center","inspector","actions"],Qi=["agent","terminal"],Ji=[],ne="inspection",__=[...Qi,...Ji],Zi=["commit","push","refresh-checks","close-task"],Sd=["refresh-checks","close-task"],eo=["task","checks","pr","setup-run","actions","next-action"],to=["diff","files","review"];function ro(e,t={}){let r=e?.activeTab==="files"?"file":e?.activeTab==="diff"?"diff":null,s=Nd(e?.openInspectionKind)??r,o=pt(t);return{inputMode:jd(e?.inputMode),focusedRegion:$d(e?.focusedRegion),selectedRepoId:ze(e?.selectedRepoId),selectedWorkspaceId:ze(e?.selectedWorkspaceId),selectedTaskId:ze(e?.selectedTaskId),selectedPtyTabId:ze(e?.selectedPtyTabId),selectedLeftItemId:Yd(ze(e?.selectedTaskId)),activeTab:r?ne:ze(e?.activeTab)??"agent",preferredPtyTabKind:Wd(e?.preferredPtyTabKind),inspectorSection:$t(e?.inspectorSection,eo,"task"),inspectionMode:Fd(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,reviewScrollOffset:0,selectedActionId:$t(e?.selectedActionId,Zi,"commit"),selectedProjectTargetId:null,selectedRunner:Hd(e?.selectedRunner,o,st(t)),centerTabRunner:null,actionMessage:null,footerToast:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:Td(),centerZoomed:!1}}function Td(){return{status:"idle",rows:[],error:null,scrolledBack:!1}}function so(e,t){return{...e??je(),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 gr(e,t,r={}){let s=Gd(e,t),o=ho(s),p=(o?.kind==="workspace"?t.workspaces?.find(_=>_.id===o.id)??null:null)??(o?.kind==="task"?t.workspaces?.find(_=>_.id===t.tasks.find(a=>a.id===o.id)?.workspaceId)??null:null)??t.workspaces?.find(_=>_.id===e.selectedWorkspaceId)??t.workspaces?.[0]??null,i=((o?.kind==="repo"?t.repos.find(_=>_.id===o.id)??null:o?.kind==="task"?t.repos.find(_=>_.id===t.tasks.find(a=>a.id===o.id)?.repoId)??null:null)??(p?.kind==="project"?t.repos.find(_=>_.id===e.selectedRepoId&&p.discoveredRepoIds?.includes(_.id))??null:null)??(p?.kind!=="project"?t.repos.find(_=>_.id===p?.primaryRepoId)??null:null)??t.repos.find(_=>_.id===e.selectedRepoId)??t.repos[0]??null)?.id??null,c=p?t.tasks.filter(_=>_.workspaceId===p.id):i?t.tasks.filter(_=>_.repoId===i):[],d=(o?.kind==="task"?c.find(_=>_.id===o.id)??null:null)??c.find(_=>_.id===e.selectedTaskId)??c[0]??null;return{...e,inputMode:r.resetInputMode?"control":e.inputMode,selectedLeftItemId:s,selectedWorkspaceId:p?.id??null,selectedRepoId:i,selectedTaskId:d?.id??null,...qd(d,e.activeTab,e.selectedPtyTabId),selectedFilePath:Md(e,t,d?.id??null),...Kd(e,t,d?.id??null),selectedDiffPath:Ld(e,t,d?.id??null),inspectorSection:$t(e.inspectorSection,eo,"task")}}function no(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return Rd(t)?X({state:{...e,inputMode:"control",centerZoomed:!1,actionMessage:null,focusedRegion:"center"},changed:!0,detachTerminal:!0}):X({state:e});if(t==="q"||t==="Q")return X({state:e,exit:!0});if(t==="ESCAPE")return X({state:{...e,actionMessage:null},changed:e.actionMessage!==null,pause:!0});if(t==="n"||t==="N")return X({state:{...e,focusedRegion:"tasks",actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0});if((t==="r"||t==="R")&&e.focusedRegion==="tasks"&&(ys(e.selectedLeftItemId)||vs(e.selectedLeftItemId)))return X({state:{...e,selectedRunner:Ss(e.selectedRunner,r.enabledRunnerIds),actionMessage:null,taskPromptError:null},changed:!0});if(t==="TAB"||t==="]")return Vi(e,1);if(t==="SHIFT_TAB"||t==="[")return Vi(e,-1);if(t==="z"||t==="Z")return X({state:{...e,centerZoomed:!e.centerZoomed,actionMessage:null},changed:!0});if(t==="UP"||t==="k")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,-1,r):zi(e,-1,r);if(t==="DOWN"||t==="j")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,1,r):zi(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??de,o=e.centerTabRunner?s.indexOf(e.centerTabRunner):-1,p=o===s.length-1?null:s[o+1];return X({state:{...e,centerTabRunner:p,actionMessage:null},changed:!0})}if((t==="+"||t==="a"||t==="A"||t==="t"||t==="T")&&e.focusedRegion==="center"&&e.selectedTaskId){let s=Ud(e,t);return X({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 X({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0});if((t==="X"||t==="x")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return X({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&pr(e.selectedLeftItemId)&&e.selectedTaskId)return X({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&Qd(e.selectedLeftItemId)&&e.selectedWorkspaceId)return X({state:{...e,actionMessage:null},changed:!0,removeWorkspace:!0});if(t==="x"&&e.focusedRegion==="center"&&Yi(e.activeTab,r.ptyTabIds??[]))return X({state:{...e,actionMessage:null},changed:!0,closePtyTab:!0});if(t==="LEFT"||t==="h"){if(e.focusedRegion==="center")return ks(e,-1,r.centerTabIds);if(e.focusedRegion==="inspector")return Gi(e,-1)}if(t==="RIGHT"||t==="l"){if(e.focusedRegion==="center")return ks(e,1,r.centerTabIds);if(e.focusedRegion==="inspector")return Gi(e,1)}if(tt(t)){if(e.focusedRegion==="tasks"&&(ys(e.selectedLeftItemId)||vs(e.selectedLeftItemId))){let s=fo(e.selectedLeftItemId),o=po(e.selectedLeftItemId);return X({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 X({state:{...e,actionMessage:null},changed:!0,openWorkspaceBrowser:!0});if(e.focusedRegion==="tasks"&&pr(e.selectedLeftItemId)&&e.selectedTaskId){let s=e.selectedPtyTabId??e.activeTab;return X({state:{...e,inputMode:"terminal",focusedRegion:"center",activeTab:s,selectedPtyTabId:s,preferredPtyTabKind:Ft(s)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0})}if(e.focusedRegion==="center"&&Yi(e.activeTab,r.ptyTabIds??[])&&e.selectedTaskId)return X({state:{...e,inputMode:"terminal",selectedPtyTabId:e.activeTab,preferredPtyTabKind:Ft(e.activeTab)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&e.activeTab===ne)return X({state:{...e,actionMessage:null},changed:!0,refreshInspection:!0});if(e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="files"){let s=e.selectedFileTreePath??e.selectedFilePath;if(s&&(r.fileTreeDirectoryIds??[]).includes(s))return X({state:Ed({...e,selectedFileTreePath:s}),changed:!0});let o=s&&(r.fileTreeFileIds??[]).includes(s)?s:e.selectedFilePath;return X({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"?X({state:{...e,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.focusedRegion==="inspector"&&e.inspectionMode==="review"?e.selectedActionId==="refresh-checks"?X({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?X({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):X({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.focusedRegion!=="actions"?X({state:e}):e.selectedActionId==="refresh-checks"?X({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?X({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):X({state:{...e,actionMessage:`Action queued: ${e.selectedActionId} (inspection surfaces land in phase 4.1).`},changed:!0})}return X({state:e})}function Nt(e,t){return{...e,terminal:t}}function io(e,t){return{...e,inputMode:"control",terminal:{status:"failed",rows:[],error:t}}}function Rd(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===`
163
- `}function oo(e){return e.length===1&&e>=" "&&e!=="\x7F"}function ao(e){return co(e)||Ft(e)!==null}function Pd(e){return Ji.includes(e)}function co(e){return Qi.includes(e)}function lo(e,t){return[...e?.ptyTabs.map(r=>r.id)??[],...t?.openInspectionKind?[ne]:[]]}var Cd=["tasks","center","inspector"];function Vi(e,t){return hr(e,"focusedRegion",Cd,t)}function ks(e,t,r){let s=hr(e,"activeTab",r&&r.length>0?r:zd(e),t);return!s.changed||Pd(s.state.activeTab)?s:{...s,state:{...s.state,selectedPtyTabId:s.state.activeTab,preferredPtyTabKind:Ft(s.state.activeTab)??s.state.preferredPtyTabKind}}}function zi(e,t,r){if(e.focusedRegion==="tasks")return Id(e,t,r.leftItemIds);if(e.focusedRegion==="center")return ks(e,t,r.centerTabIds);if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return uo(e,t,r);if(e.inspectionMode==="diff"){let s=fr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0},refreshInspection:!0}:s}if(r.projectTargetIds?.length){let s=fr(e,"selectedProjectTargetId",r.projectTargetIds,t);return s.changed?{...s,state:{...s.state,reviewScrollOffset:0}}:s}return hr(e,"selectedActionId",Sd,t)}return hr(e,"selectedActionId",Zi,t)}function Id(e,t,r){let s=fr(e,"selectedLeftItemId",r,t);if(!s.changed)return s;let o=ho(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,reviewScrollOffset: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,reviewScrollOffset: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,reviewScrollOffset:0},refreshInspection:!0};let p=fo(s.state.selectedLeftItemId);if(p)return{...s,state:{...s.state,selectedRepoId:p}};let k=po(s.state.selectedLeftItemId);return k?{...s,state:{...s.state,selectedWorkspaceId:k}}:s}function et(e,t,r){if(t===0)return X({state:e});if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return uo(e,t,r);if(e.inspectionMode==="diff"){let s=fr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,diffScrollOffset:0}}:s}return e.inspectionMode==="review"?Xi(e,"reviewScrollOffset",t,r.reviewRowCount??100,r.pageRows):X({state:e})}if(e.focusedRegion==="center"&&e.activeTab===ne){if(e.openInspectionKind==="file")return Xi(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return Ad(e,t,r)}return X({state:e})}function xd(e,t){if(e.inspectionMode===t)return X({state:e});let r=t==="diff"?"diff":t==="files"?"file":e.openInspectionKind,s=t==="diff"||t==="files"?ne:e.activeTab;return X({state:{...e,inspectionMode:t,activeTab:s,openInspectionKind:r,fileScrollOffset:t==="files"?0:e.fileScrollOffset,diffScrollOffset:t==="diff"?0:e.diffScrollOffset,reviewScrollOffset:t==="review"?0:e.reviewScrollOffset,actionMessage:null},changed:!0,refreshInspection:!0})}function Gi(e,t){return xd(e,Bd(e.inspectionMode,to,t))}function uo(e,t,r){let s=r.fileTreeRowIds&&r.fileTreeRowIds.length>0?r.fileTreeRowIds:r.filePathIds??[];if(s.length===0)return X({state:e});let o=e.selectedFileTreePath??e.selectedFilePath??s[0]??null,p=s.indexOf(o??""),k=Ge(p===-1?0:p+t,0,s.length-1),i=s[k]??null;if(i===e.selectedFileTreePath)return X({state:e});let c=i!==null&&(r.fileTreeFileIds??r.filePathIds??[]).includes(i);return X({state:{...e,selectedFileTreePath:i,selectedFilePath:c?i:e.selectedFilePath,activeTab:c?ne:e.activeTab,openInspectionKind:c?"file":e.openInspectionKind,fileScrollOffset:c?0:e.fileScrollOffset,actionMessage:null},changed:!0,refreshInspection:c})}function Ed(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 Xi(e,t,r,s,o=10){let p=Math.max(0,s-Math.max(1,o)),k=Ge(e[t]+r,0,p);return k===e[t]?X({state:e}):X({state:{...e,[t]:k,actionMessage:null},changed:!0})}function Ad(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return Dd(e,t,r);let s=r.diffLineCount??0,o=r.pageRows??10,p=Math.max(0,s-Math.max(1,o)),k=e.diffScrollOffset+t,i=r.diffPathIds??[];if(i.length===0||!e.selectedDiffPath){let _=Ge(k,0,p);return _===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:_,actionMessage:null},changed:!0})}let c=i.indexOf(e.selectedDiffPath);if(c===-1){let _=Ge(k,0,p);return _===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:_,actionMessage:null},changed:!0})}if(t>0&&k>p){let _=i[c+1]??null;return _?X({state:{...e,selectedDiffPath:_,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===p?X({state:e}):X({state:{...e,diffScrollOffset:p,actionMessage:null},changed:!0})}if(t<0&&k<0){let _=i[c-1]??null;return _?X({state:{...e,selectedDiffPath:_,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:Number.MAX_SAFE_INTEGER,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===0?X({state:e}):X({state:{...e,diffScrollOffset:0,actionMessage:null},changed:!0})}let d=Ge(k,0,p);return d===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:d,actionMessage:null},changed:!0})}function Dd(e,t,r){let s=r.diffLineCount??0,o=r.pageRows??10,p=Math.max(0,s-Math.max(1,o)),k=Ge(e.diffScrollOffset+t,0,p),i=Od(r.diffPathRanges??[],k)??e.selectedDiffPath;return k===e.diffScrollOffset&&i===e.selectedDiffPath?X({state:e}):X({state:{...e,diffScrollOffset:k,selectedDiffPath:i,actionMessage:null},changed:!0})}function Ld(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function Md(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedFilePath&&(t.inspection.filePaths??[]).includes(e.selectedFilePath)?e.selectedFilePath:t.inspection.selectedFilePath}function Od(e,t){return e.find(r=>t>=r.start&&t<r.end)?.path??e.at(-1)?.path??null}function hr(e,t,r,s){let o=r.indexOf(e[t]),p=Ge(o+s,0,r.length-1),k=r[p];return!k||k===e[t]?X({state:e}):X({state:{...e,[t]:k,actionMessage:null},changed:!0})}function fr(e,t,r,s,o=!1){if(r.length===0)return X({state:e});let p=r.indexOf(e[t]??r[0]??""),k=Ge(p===-1?0:p+s,0,r.length-1),i=r[k]??null;return i===e[t]?X({state:e}):X({state:{...e,[t]:i,actionMessage:null},changed:!0,refreshInspection:o})}function Bd(e,t,r){let s=t.indexOf(e);return t[Ge(s+r,0,t.length-1)]??e}function X(e){return{state:e.state,changed:e.changed??!1,exit:e.exit??!1,pause:e.pause??!1,attachTerminal:e.attachTerminal??!1,detachTerminal:e.detachTerminal??!1,beginTaskPrompt:e.beginTaskPrompt??!1,openWorkspaceBrowser:e.openWorkspaceBrowser??!1,createWorkspaceTask:e.createWorkspaceTask??!1,createPtyTab:e.createPtyTab??!1,createPtyTabKind:e.createPtyTabKind??null,createPtyTabRunner:e.createPtyTabRunner??null,closePtyTab:e.closePtyTab??!1,refreshPullRequestChecks:e.refreshPullRequestChecks??!1,closeTask:e.closeTask??!1,removeWorkspace:e.removeWorkspace??!1,refreshInspection:e.refreshInspection??!1}}function $t(e,t,r){return t.includes(e??"")?e:r}function $d(e){return e==="tabs"?"center":$t(e,vd,"tasks")}function Fd(e,t){return e==="checks"||e==="actions"||e==="review"?"review":$t(e,to,t)}function Nd(e){return e==="file"||e==="diff"?e:null}function Wd(e){return e==="terminal"?"terminal":"agent"}function jd(e){return e==="terminal"?"terminal":"control"}function Hd(e,t=[...de],r="codex"){return e&&gt(e)&&t.includes(e)?e:r}function Ss(e,t=de){let r=t.length>0?t:de,s=r.indexOf(e);return r[(s+1)%r.length]??r[0]??"codex"}function Ft(e){let t=de.join("|");return new RegExp(`:(?:agent|${t})(?:-\\d+)?$`).test(e)?"agent":/:terminal(?:-\d+)?$/.test(e)?"terminal":null}function Ud(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":Ft(e.activeTab)??e.preferredPtyTabKind}function qd(e,t,r){if(!e)return{activeTab:t===ne?t:"agent",selectedPtyTabId:null};let s=e.ptyTabs.find(i=>i.id===r)??null,o=e.selectedPtyTabId?e.ptyTabs.find(i=>i.id===e.selectedPtyTabId)??null:null,p=e.ptyTabs.find(i=>i.id===t)??null;if(p)return{activeTab:p.id,selectedPtyTabId:p.id};if(co(t)){let c=e.ptyTabs.find(d=>d.kind===t)??null??o??s??e.ptyTabs[0]??null;return{activeTab:c?.id??ne,selectedPtyTabId:c?.id??null}}if(t===ne)return{activeTab:ne,selectedPtyTabId:s?.id??o?.id??e.ptyTabs[0]?.id??null};let k=o??s??e.ptyTabs[0]??null;return{activeTab:k?.id??ne,selectedPtyTabId:k?.id??null}}function Kd(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?Vd(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:s,collapsedFileTreePaths:o}}function Vd(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 zd(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function Yi(e,t){return t.includes(e)}function Gd(e,t){let r=Xd(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 Xd(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="project"&&t.push(`new-task-workspace:${r.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 ho(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 Yd(e){return e?`task:${e}`:null}function pr(e){return typeof e=="string"&&e.startsWith("task:")}function ys(e){return typeof e=="string"&&e.startsWith("new-task:")}function vs(e){return typeof e=="string"&&e.startsWith("new-task-workspace:")}function Qd(e){return typeof e=="string"&&e.startsWith("workspace:")}function fo(e){return ys(e)?e.slice(9):null}function po(e){return vs(e)?e.slice(19):null}function Ge(e,t,r){return Math.min(r,Math.max(t,e))}var _r="empty",fe={lineNumber:"3b4261",gutter:"3b4261",keyword:"9d7cd8",string:"9ece6a",literal:"ff9e64",comment:"565f89",markup:"f7768e",diffAdd:"9ece6a",diffDelete:"f7768e",diffMeta:"565f89",diffHunk:"565f89"};function wo(e,t){let r=eu(t,e),s=t.repos.find(w=>w.id===e.selectedRepoId)??t.repos[0]??null,o=r?t.tasks.filter(w=>w.workspaceId===r.id):t.tasks,p=r?.kind==="project"?o:s?o.filter(w=>w.repoId===s.id):[],k=p.find(w=>w.id===e.selectedTaskId)??p[0]??null,i=k?.type==="project",c=Bu(t.tasks),d=su(e,k),_=ru(e,k,d),a=_.find(w=>w.id===d)??_[0]??{id:"agent",label:"CODEX"},b=t.inspection?.taskId===k?.id?t.inspection:null,l=s?.name??"no repo",m=k?Se(k.runner):Se(e.selectedRunner);return{inputMode:e.inputMode,modalInput:e.taskPromptInput!==null||e.workspaceBrowser!==null,focusedRegion:e.focusedRegion,actionMessage:e.actionMessage,footerToast:e.footerToast,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`:pr(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"?k===null?"n new task Tab tasks Esc pause ? help":d===ne?"\u2191\u2193/wheel/PgUp/PgDn scroll \u2190/\u2192 switch Tab inspector Esc pause ? help":`+ new tab a ${Se(e.centerTabRunner??k?.runner??e.selectedRunner)} r runner t terminal x close Enter attach Esc pause ? help`:e.inspectionMode==="review"?i?"\u2191\u2193 targets Wheel/PgUp/PgDn scroll R refresh checks X close task \u2190/\u2192 mode Esc pause ? help":"Wheel/PgUp/PgDn scroll 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:Wt.relative(process.env.HOME??"",t.workspaceRoot).length>0?`~/${Wt.relative(process.env.HOME??"",t.workspaceRoot)}`:t.workspaceRoot,agent:m},leftTree:Jd(e,t),runners:(t.enabledRunnerIds??["codex","cursor","claude"]).map(w=>$u(w,c[w])),centerHeader:{tabLabel:e.workspaceBrowser?"BROWSER":a.label,taskId:e.workspaceBrowser?"new workspace":k?.id??"no task",repo:l,agent:m},centerTranscript:tu(d,e,s,k,e.workspaceBrowser,b,r),tabs:_,rightContext:Ou(s,k),rightInspection:mu(e,k,b)}}function Jd(e,t){let r=[{text:"WORKSPACES",muted:!0,panelHeader:!0,focused:e.focusedRegion==="tasks"}];if(!t.workspaces)return Zd(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 p of s){let k=e.selectedLeftItemId===`workspace:${p.id}`;r.push({id:`workspace:${p.id}`,text:`${p.kind==="project"?"\u2261":"\u2013"} ${p.name??p.id}`,selected:k,focused:k&&e.focusedRegion==="tasks"});let i=p.kind==="project"?p.discoveredRepoIds??[]:[p.primaryRepoId],c=t.tasks.filter(d=>d.workspaceId===p.id);if(c.length===0)r.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let d of c){let _=e.selectedLeftItemId===`task:${d.id}`,a=_?"\u25B8":"\u2022",b=d.title.length>28?`${d.title.slice(0,25)}\u2026`:d.title,l={id:`task:${d.id}`,taskId:d.id,text:`${a} ${b}`,indent:2,selected:_,focused:_&&e.focusedRegion==="tasks"},m=ko(d);m&&(l.prBadge=m),r.push(l)}if(p.kind==="project"){let d=`new-task-workspace:${p.id}`,_=e.selectedLeftItemId===d;r.push({id:d,text:`+ New Project Task [${Se(e.selectedRunner)}]`,indent:2,selected:_,focused:_&&e.focusedRegion==="tasks",muted:!_})}if(p.kind==="repo"){let d=`new-task:${p.primaryRepoId}`,_=e.selectedLeftItemId===d;r.push({id:d,text:`+ New Task [${Se(e.selectedRunner)}]`,indent:2,selected:_,focused:_&&e.focusedRegion==="tasks",muted:!_})}else{r.push({text:` Repos (${i.length})`,indent:0,muted:!0});for(let d of i.slice(0,6)){let _=t.repos.find(a=>a.id===d);r.push({text:` \xB7 ${_?.name??d}`,indent:0,muted:!0})}i.length>6&&r.push({text:` \xB7 ${i.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 Zd(e,t,r,s){if(r.length===0)e.push({text:"No repos registered.",indent:2,muted:!0});else for(let p of r){let k=t.selectedLeftItemId===`repo:${p.id}`;e.push({id:`repo:${p.id}`,text:`\u2013 ${p.name}`,selected:k,focused:k&&t.focusedRegion==="tasks"});let i=s.filter(_=>_.repoId===p.id);if(i.length===0)e.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let _ of i){let a=t.selectedLeftItemId===`task:${_.id}`,b=a?"\u25B8":"\u2022",l=_.title.length>28?`${_.title.slice(0,25)}\u2026`:_.title,m={id:`task:${_.id}`,taskId:_.id,text:`${b} ${l}`,indent:2,selected:a,focused:a&&t.focusedRegion==="tasks"},w=ko(_);w&&(m.prBadge=w),e.push(m)}let c=`new-task:${p.id}`,d=t.selectedLeftItemId===c;e.push({id:c,text:`+ New Task [${Se(t.selectedRunner)}]`,indent:2,selected:d,focused:d&&t.focusedRegion==="tasks",muted:!d})}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 eu(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 tu(e,t,r,s,o,p=null,k=null){if(o){let c=o.entries.length===0?["No directories or git repos here."]:o.entries.map((d,_)=>{let a=_===o.selectedIndex?"\u25B8":" ",b=d.kind==="repo"?" [git repo]":"/";return`${a} ${d.name}${b}`});return Oe(["Browse for a workspace to register.",o.cwd,"",...c,"",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 c=k?.kind==="project",d=c?k.name??"this workspace":r.name,_=c?"Project Task":"Task";return Oe([`No tasks in ${d}.`,"",`Press n or choose + New ${_} to create one with ${Se(t.selectedRunner)}.`])}let i=s.ptyTabs.find(c=>c.id===e)??null;return i?i.kind==="agent"?Oe([`${i.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([`${i.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"?ou(s,p,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?au(s,p,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 ru(e,t,r){let s=t?.ptyTabs.map(p=>({id:p.id,label:nu(p)}))??[];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:iu(e)}]:[];return[...s,...o].map(p=>({...p,active:p.id===r,focused:e.focusedRegion==="center"&&p.id===r}))}function su(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 nu(e){return e.title.toUpperCase()}function iu(e){let t=e.openInspectionKind==="diff"?e.selectedDiffPath:e.selectedFilePath,r=t?Wt.basename(t):e.inspectionMode.toUpperCase();return e.openInspectionKind==="diff"?`${r} \u0394`:r}function ou(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=bo(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:""},...cu(s.lines,r,o)]}function au(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=bo(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:""},...lu(s.lines,r,o)]}function Oe(e){return e.map(t=>({text:t}))}function cu(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((p,k)=>{let i=o+k+1;return{text:`${`${String(i).padStart(s," ")} \u2502 `}${p}`,segments:[{text:String(i).padStart(s," "),style:{fg:fe.lineNumber}},{text:" \u2502 ",style:{fg:fe.gutter}},...Ts(p,r)],tone:"default"}})}function lu(e,t,r){let s=du(e),o=Math.max(0,Math.min(t,Math.max(0,s.length-1)));return s.slice(o).map(p=>uu(p,r))}function du(e){let t=[],r=0,s=0;for(let o of e){let p=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(o);if(p){r=Number.parseInt(p[1]??"0",10),s=Number.parseInt(p[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 uu(e,t){let r=go(e.oldNumber),s=go(e.newNumber),o=e.kind==="delete"?r:s,p=e.kind==="delete"?{bg:"2a1111",fallbackFg:fe.diffDelete}:e.kind==="add"?{bg:"10210f",fallbackFg:fe.diffAdd}:null,k=`${o} \u2502 ${e.text}`,i=p?fu(Ts(e.text,t),p.bg,p.fallbackFg):Ts(e.text,t),c=p?{fg:fe.lineNumber,bg:p.bg}:{fg:fe.lineNumber},d=p?{fg:fe.gutter,bg:p.bg}:{fg:fe.gutter};return{text:k,segments:[{text:o,style:c},{text:" \u2502 ",style:d},...i],fullBleed:p!==null}}function go(e){return e===null?" ":String(e).padStart(4," ")}function bo(e){let t=Wt.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 Ts(e,t){return t==="diff"?hu(e):t==="markdown"?pu(e):t==="json"?Rs(e,/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|-?\b\d+(?:\.\d+)?\b/g):t==="javascript"||t==="css"?Rs(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 hu(e){return e.startsWith("+")&&!e.startsWith("+++")?[{text:e,style:{fg:fe.diffAdd}}]:e.startsWith("-")&&!e.startsWith("---")?[{text:e,style:{fg:fe.diffDelete}}]:e.startsWith("@@")?[{text:e,style:{fg:fe.diffHunk}}]:e.startsWith("diff --git")||e.startsWith("index ")||e.startsWith("+++ ")||e.startsWith("--- ")?[{text:e,style:{fg:fe.diffMeta}}]:[{text:e}]}function fu(e,t,r){return e.map(s=>({text:s.text,style:{...s.style??{fg:r},bg:t}}))}function pu(e){return/^#{1,6}\s/.test(e)?[{text:e,style:{fg:fe.markup,bold:!0}}]:Rs(e,/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)]+\))/g)}function Rs(e,t){let r=[],s=0;for(let o of e.matchAll(t)){let p=o[0],k=o.index??0;k>s&&r.push({text:e.slice(s,k)}),r.push({text:p,style:gu(p)}),s=k+p.length}return s<e.length&&r.push({text:e.slice(s)}),r.length>0?r:[{text:e}]}function gu(e){return e.startsWith("//")||e.startsWith("/*")?{fg:fe.comment,italic:!0}:e.startsWith('"')||e.startsWith("'")||e.startsWith("`")?{fg:fe.string}:/^-?\d/.test(e)||e==="true"||e==="false"||e==="null"||e==="undefined"?{fg:fe.literal}:e.startsWith("**")||e.startsWith("[")||e.startsWith("`")?{fg:fe.markup}:{fg:fe.keyword}}function mu(e,t,r){let s=e.selectedProjectTargetId??t?.repoTargets?.[0]?.repoId??null,o=t?.type==="project"&&s?t.repoTargets?.find(i=>i.repoId===s)??null:null,p=t?.type==="project"?yo(t.repoTargets??[]):o?.pullRequest??(t?pe(t):null),k=[_u(e,p),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...k,...To(e,t)]}:e.inspectionMode==="files"?{title:"",rows:[...k,...Eu(e,r)]}:{title:"",rows:[...k,...Du(e,r)]}}function _u(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 c=0;c<s.length;c++){let d=s[c];c>0&&o.push({text:" "});let _=d.active?e.focusedRegion==="inspector"||e.focusedRegion==="actions"?"9ece6a":"7aa2f7":"565f89";o.push({text:d.label,style:{fg:_}})}let p=Ps(t),k=Cs(t);return o.push({text:" "},p,{text:" "},k),{id:"inspection-mode",text:o.map(c=>c.text).join(""),segments:o}}function mo(e){return[{text:" "},Ps(e),{text:" "},Cs(e)]}function ko(e){if(e.type==="project"&&e.repoTargets?.length){let r=yo(e.repoTargets);return r?mo(r):null}let t=pe(e);return t?.number?mo(t):null}function yo(e){let t=e.filter(o=>o.status==="ready"),r=t.map(o=>o.pullRequest).filter(o=>!!o.number);if(r.length===0)return null;let s=bu(r);return{number:-1,status:wu(r),draft:r.some(o=>o.draft),mergeable:r.length===t.length&&r.every(o=>o.mergeable),mergeStateStatus:null,reviewDecision:r.some(o=>o.reviewDecision==="CHANGES_REQUESTED")?"CHANGES_REQUESTED":r.some(o=>o.reviewDecision==="REVIEW_REQUIRED")?"REVIEW_REQUIRED":r.every(o=>o.reviewDecision==="APPROVED")?"APPROVED":null,requiredChecks:r.flatMap(o=>o.requiredChecks),aggregateReadiness:s}}function wu(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 bu(e){let t=e.map(r=>vo(r));return t.some(r=>r==="failed")?"failed":t.some(r=>r==="pending")?"pending":t.length>0&&t.every(r=>r==="success")?"success":"none"}function Ps(e){return!e||!e.number?{text:Hi,style:{fg:"565f89"}}:e.status==="merged"?{text:Ui,style:{fg:"9d7cd8"}}:e.status==="closed"?{text:qi,style:{fg:"f7768e"}}:e.status==="draft"||e.draft?{text:gs,style:{fg:"565f89"}}:{text:gs,style:{fg:"9ece6a"}}}function Cs(e){return e?.aggregateReadiness?_o(e.aggregateReadiness):_o(vo(e))}function _o(e){return e==="failed"?{text:bs,style:{fg:"f7768e"}}:e==="pending"?{text:_s,style:{fg:"e0af68"}}:e==="success"?{text:ws,style:{fg:"9ece6a"}}:{text:ms,style:{fg:"565f89"}}}function vo(e){let t=e?.requiredChecks??null;return e?.status==="merged"?"success":e?.status==="closed"||!e?.number||!t||t.length===0?"none":t.some(r=>r.status==="failed")||e.reviewDecision==="CHANGES_REQUESTED"?"failed":t.every(r=>r.status==="success"||r.status==="skipped")?So(e)?"failed":ku(e)?"success":"pending":"pending"}function ku(e){return!!(e.mergeable&&!e.draft&&!So(e)&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped"))}function So(e){return e.reviewDecision==="REVIEW_REQUIRED"||e.reviewDecision==="CHANGES_REQUESTED"||e.mergeStateStatus==="REVIEW_REQUIRED"}function To(e,t){if(!t)return[{id:"review-empty",text:"No task selected.",muted:!0}];if(t.type==="project"&&t.repoTargets?.length)return yu(e,t);let r=pe(t),s=Po("pr",t.branch,r??{number:null,url:null,baseBranch:null,headBranch:null,draft:!1,mergeable:!1,mergeStateStatus:null,reviewDecision:null,lastSyncedAt:null,requiredChecks:[],comments:[]}),o=t.prs.filter(p=>p!==r&&(p.status==="merged"||p.status==="closed")).length;return o>0&&s.push({id:"pr-history",text:`+ ${o} previous PR${o!==1?"s":""}`,muted:!0}),vu(s,e)}var mr=32;function yu(e,t){let r=[],s=t.repoTargets??[],o=e.selectedProjectTargetId??s[0]?.repoId??null;for(let k of s){let i=o===k.repoId,c=e.focusedRegion==="inspector"&&i,d=k.repoId.startsWith("repo_")?k.repoId.slice(5):k.repoId;if(k.status!=="ready"){let a=k.failureReason?k.failureReason.slice(0,14):k.status,b=mr-a.length-1,l=d.length>b?d.slice(0,b-1)+"\u2026":d,m=mr-l.length-a.length;r.push({id:`project-review:${k.repoId}`,text:l+" ".repeat(Math.max(1,m))+a,selected:i,focused:c,muted:!0})}else{let _=Ps(k.pullRequest),a=Cs(k.pullRequest),b=`${_.text} ${a.text}`,l=mr-b.length-1,m=d.length>l?d.slice(0,l-1)+"\u2026":d,w=mr-m.length-b.length,n=m+" ".repeat(Math.max(1,w));r.push({id:`project-review:${k.repoId}`,text:n+b,selected:i,focused:c,segments:[{text:n},{..._,text:_.text},{text:" "},{...a,text:a.text}]})}}let p=s.find(k=>k.repoId===o)??null;return p?.status==="ready"&&p.pullRequest.number&&(r.push({id:"target-detail-spacer",text:""}),r.push(...Po("target",p.branch,p.pullRequest))),r}function Ro(e,t){return To(e,t).length}function Po(e,t,r){let s=a=>`${e}-${a}`;if(!r.number)return[{id:s("no-pr"),text:t,muted:!0}];let o=[],p=`#${r.number}`;o.push(r.url?{id:s("pr-number"),text:`${p} Open in GitHub \u2197`,segments:[{text:p},{text:" Open in GitHub \u2197",style:{fg:"7aa2f7",underline:!0},href:r.url}]}:{id:s("pr-number"),text:p});let k=r.baseBranch??"?",i=r.headBranch??t;o.push({id:s("pr-branches"),text:`${k} \u2192 ${i}`,muted:!0});let c=Su(r.reviewDecision,r.mergeStateStatus),d=c&&c!=="review approved"?"merge blocked":r.mergeable?"merge ready":r.mergeStateStatus?`merge ${r.mergeStateStatus}`:"merge unknown";c?o.push({id:s("pr-merge"),text:`${d} \xB7 ${c}`,muted:!0,segments:[{text:d},{text:" \xB7 "},{text:c,style:{fg:Tu(r.reviewDecision,r.mergeStateStatus)}}]}):o.push({id:s("pr-merge"),text:d,muted:!0}),o.push({id:s("pr-synced"),text:`synced ${Co(r.lastSyncedAt)}`,muted:!0}),o.push({id:s("checks-spacer"),text:""}),o.push({id:s("checks-header"),text:"Checks"}),r.requiredChecks.length?o.push(...r.requiredChecks.map(Ru)):o.push({id:s("checks-none"),text:r.number?"No GitHub checks reported.":"No checks \u2014 sync after creating a PR.",muted:!0});let _=r.comments??[];return _.length>0&&(o.push({id:s("comments-spacer"),text:""}),o.push({id:s("comments-header"),text:`Review comments (${_.length})`}),o.push(..._.slice(-4).flatMap((a,b)=>Pu(a,s(`comment:${b}`))))),o}function vu(e,t){if(t.focusedRegion!=="inspector"||t.inspectionMode!=="review"||e.length===0)return e;let r=Math.max(0,Math.min(t.reviewScrollOffset,e.length-1));return e.map((s,o)=>({...s,selected:t.reviewScrollOffset===0&&s.selected||o===r,focused:t.reviewScrollOffset===0&&s.focused||o===r}))}function Su(e,t){return e==="CHANGES_REQUESTED"?"review changes requested":e==="REVIEW_REQUIRED"||t==="REVIEW_REQUIRED"?"review required":e==="APPROVED"?"review approved":null}function Tu(e,t){return e==="CHANGES_REQUESTED"?"f7768e":e==="APPROVED"?"9ece6a":e==="REVIEW_REQUIRED"||t==="REVIEW_REQUIRED"?"e0af68":"565f89"}function Co(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 Ru(e){let{icon:t,color:r}=Iu(e.status),s=e.name.length>16?`${e.name.slice(0,15)}\u2026`:e.name;return{id:`pr-check:${e.name}`,text:`${t} ${s.padEnd(16," ")} ${xu(e.status)}`,color:r,muted:!1}}function Pu(e,t){let r=e.author??"unknown",s=e.createdAt?` \xB7 ${Co(e.createdAt)}`:"",o=Cu(e.body,30),p=o.slice(0,4),k=p.length<o.length,i=[{id:`${t}:author`,text:`${r}${s}`,muted:!0},...p.map((c,d)=>({id:`${t}:body:${d}`,text:` ${k&&d===p.length-1?`${c}\u2026`:c}`,muted:!0}))];return i.push({id:`${t}:spacer`,text:"",muted:!0}),i}function Cu(e,t){let r=e.split(/\s+/).filter(Boolean);if(r.length===0)return[];let s=[],o="";for(let p of r){if(!o){o=p;continue}`${o} ${p}`.length<=t?o=`${o} ${p}`:(s.push(o),o=p)}return o&&s.push(o),s}function Iu(e){switch(e){case"success":return{icon:ws,color:"9ece6a"};case"pending":return{icon:_s,color:"e0af68"};case"failed":return{icon:bs,color:"f7768e"};case"skipped":return{icon:ms,color:"565f89"};default:return{icon:"?",color:"565f89"}}}function xu(e){return e==="success"?"passing":e==="failed"?"failing":e}function Eu(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(p=>[p.path,p.status])),s=Au(t.fileRows,e.collapsedFileTreePaths),o=e.selectedFileTreePath??t.selectedFilePath;return s.map(p=>{let k=p.kind==="file"?r.get(p.path):void 0,i=k==="A"?"9ece6a":k==="M"?"e0af68":k==="D"?"f7768e":k==="??"?"565f89":void 0,c=p.kind==="directory"?e.collapsedFileTreePaths.includes(p.path)?Wi:ji:Ni(p.label),d=p.kind==="file"?Ki(p.label):void 0,_=" ".repeat(p.depth),a=d?{text:c,style:{fg:d}}:{text:c},b=i?{text:p.label,style:{fg:i}}:{text:p.label},l=[{text:_},a,b];return{id:p.path,text:`${_}${c}${p.label}`,selected:p.path===o,focused:p.path===o&&e.focusedRegion==="inspector",muted:p.kind==="directory",segments:l}})}function Au(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let p=1;p<o.length;p+=1)if(r.has(o.slice(0,p).join("/")))return!1;return!0})}function Du(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(Lu(t))return Mu(e,t);let r=[];for(let s of["branch","staged","unstaged","untracked"]){let o=t.diffRows.filter(p=>p.group===s);o.length!==0&&(r.push({id:s,text:s.toUpperCase(),muted:!0}),r.push(...o.map(p=>Io(p,e,t))))}return r}function Lu(e){return e.filePaths.some(t=>t.startsWith("repo_"))||e.diffRows.some(t=>t.path.startsWith("repo_"))}function Mu(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 p=t.diffRows.filter(i=>i.path.startsWith(`${o}/`)),k=o.startsWith("repo_")?o.slice(5):o;r.push({id:`repo-diff:${o}`,text:k,muted:!0});for(let i of["branch","staged","unstaged","untracked"]){let c=p.filter(d=>d.group===i);c.length!==0&&(r.push({id:`repo-diff:${o}:${i}`,text:` ${i}`,muted:!0}),r.push(...c.map(d=>Io(d,e,t,o.length+1))))}}return r}function Io(e,t,r,s=0){let o=e.additions===null?"-":`+${e.additions}`,p=e.deletions===null?"-":`-${e.deletions}`,k=e.status==="A"||e.group==="untracked"?"9ece6a":e.status==="D"?"f7768e":"e0af68",i=s>0?e.path.slice(s):e.path;return{id:`${e.group}:${e.path}`,text:` ${e.status.padEnd(2," ")} ${i} ${o}/${p}`,selected:e.path===(t.selectedDiffPath??r.selectedDiffPath),focused:e.path===(t.selectedDiffPath??r.selectedDiffPath)&&t.focusedRegion==="inspector",color:k}}function Ou(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:Wt.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 Bu(e){return e.reduce((t,r)=>(t[r.runner]+=1,t),{codex:0,cursor:0,claude:0})}function $u(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 ht(e,t){return{width:Math.max(e??wr.width,wr.width),height:Math.max(t??wr.height,wr.height)}}import{spawn as ih}from"node:child_process";import{createHash as oh}from"node:crypto";import{createServer as ah,createConnection as Wo}from"node:net";import{openSync as ch}from"node:fs";import{mkdir as lh,readFile as Ms,rm as ft,writeFile as dh}from"node:fs/promises";import{tmpdir as uh}from"node:os";import yt from"node:path";import{createRequire as Vu}from"node:module";var Do=Fa(Eo(),1),Fu=1e3,Nu=["000000","cd3131","0dbc79","e5e510","2472c8","bc3fbc","11a8cd","e5e5e5","666666","f14c4c","23d18b","f5f543","3b8eea","d670d6","29b8db","ffffff"];function Lo(e){return new Do.default.Terminal({allowProposedApi:!0,cols:e.columns,rows:e.rows,scrollback:Fu,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function Mo(e,t){(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function xs(e,t){return new Promise(r=>{e.write(t,r)})}function Oo(e,t=0){let r=e.buffer.active,s=[],o=r.getNullCell(),p=r.baseY+r.cursorY,k=Math.max(0,r.baseY-t);for(let i=0;i<e.rows;i+=1){let c=r.getLine(k+i);if(!c){s.push({segments:[]});continue}let d=[];for(let _=0;_<e.cols;_+=1){let a=c.getCell(_,o);!a||a.getWidth()===0||d.push({text:a.getChars()||" ",style:Hu(a,k+i===p&&_===r.cursorX)})}s.push({segments:Wu(ju(d))})}return s}function Wu(e){let t=[];for(let r of e){let s=t.at(-1);if(s&&Ku(s.style,r.style)){s.text+=r.text;continue}let o={text:r.text};Bo(r.style)||(o.style=r.style),t.push(o)}return t}function ju(e){let t=e.length;for(;t>0;){let r=e[t-1];if(!r||r.text!==" "||!Bo(r.style))break;t-=1}return e.slice(0,t)}function Hu(e,t){let r={},s=Ao(e,"fg"),o=Ao(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 Ao(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"):Nu[o]??Uu(o)}function Uu(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(qu).map(p=>p.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 qu(e){return e===0?0:55+e*40}function Ku(e,t){return Is(e)===Is(t)}function Is(e){return e?[e.fg??"",e.bg??"",e.bold?"b":"",e.dim?"d":"",e.italic?"i":"",e.underline?"u":"",e.inverse?"v":""].join("|"):""}function Bo(e){return Is(e)===""}var zu=Vu(import.meta.url),Gu=/^CTRL_([A-Z])$/,Xu="\x1B[6n",Yu="\x1B[c",Qu="\x1B[?u",Ju={ENTER:"\r",KP_ENTER:"\r",SHIFT_ENTER:`
162
+ `).map(t=>t.trim()).filter(t=>t.length>0))].sort((t,r)=>t.localeCompare(r))}function wd(e,t){let r=fs.resolve(e,t),s=fs.resolve(e);if(r!==s&&!r.startsWith(`${s}${fs.sep}`))throw new Error(`File path escapes task worktree: ${t}`);return r}function bd(e){return e.subarray(0,Math.min(e.byteLength,8e3)).includes(0)}function me(e,t,r,s=null,o=null){return{path:s,status:r,title:e,lines:[t],byteLength:o}}Re();import{access as kd}from"node:fs/promises";async function Fi(e,t){let r=await ae(e,t),s=await yd(r.worktreePath),o={...r,status:"closed",cleanup:{...r.cleanup,preservedWorktree:s&&r.cleanup.worktreeRemovedAt===null,warning:null},lastFailureReason:null};return await se(e,o),o}async function yd(e){try{return await kd(e),!0}catch{return!1}}Ae();Ce();import jt from"node:path";function Ni(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 Wi="\u{F024B} ",ji="\u{F0DCF} ",Hi="\u25CB",gs="\uEA64",Ui="\uEAFE",qi="\uEBDA",ms="\u25CB",_s="\u25CF",ws="\u2713",bs="\u2715";function Ki(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();wt();Ae();var vd=["tasks","center","inspector","actions"],Qi=["agent","terminal"],Ji=[],ne="inspection",__=[...Qi,...Ji],Zi=["commit","push","refresh-checks","close-task"],Sd=["refresh-checks","close-task"],eo=["task","checks","pr","setup-run","actions","next-action"],to=["diff","files","review"];function ro(e,t={}){let r=e?.activeTab==="files"?"file":e?.activeTab==="diff"?"diff":null,s=Nd(e?.openInspectionKind)??r,o=pt(t);return{inputMode:jd(e?.inputMode),focusedRegion:$d(e?.focusedRegion),selectedRepoId:ze(e?.selectedRepoId),selectedWorkspaceId:ze(e?.selectedWorkspaceId),selectedTaskId:ze(e?.selectedTaskId),selectedPtyTabId:ze(e?.selectedPtyTabId),selectedLeftItemId:Yd(ze(e?.selectedTaskId)),activeTab:r?ne:ze(e?.activeTab)??"agent",preferredPtyTabKind:Wd(e?.preferredPtyTabKind),inspectorSection:Ft(e?.inspectorSection,eo,"task"),inspectionMode:Fd(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,reviewScrollOffset:0,selectedActionId:Ft(e?.selectedActionId,Zi,"commit"),selectedProjectTargetId:null,selectedRunner:Hd(e?.selectedRunner,o,st(t)),centerTabRunner:null,actionMessage:null,footerToast:null,taskPromptInput:null,taskPromptError:null,workspaceBrowser:null,terminal:Td(),centerZoomed:!1}}function Td(){return{status:"idle",rows:[],error:null,scrolledBack:!1}}function so(e,t){return{...e??je(),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 gr(e,t,r={}){let s=Gd(e,t),o=ho(s),p=(o?.kind==="workspace"?t.workspaces?.find(_=>_.id===o.id)??null:null)??(o?.kind==="task"?t.workspaces?.find(_=>_.id===t.tasks.find(a=>a.id===o.id)?.workspaceId)??null:null)??t.workspaces?.find(_=>_.id===e.selectedWorkspaceId)??t.workspaces?.[0]??null,i=((o?.kind==="repo"?t.repos.find(_=>_.id===o.id)??null:o?.kind==="task"?t.repos.find(_=>_.id===t.tasks.find(a=>a.id===o.id)?.repoId)??null:null)??(p?.kind==="project"?t.repos.find(_=>_.id===e.selectedRepoId&&p.discoveredRepoIds?.includes(_.id))??null:null)??(p?.kind!=="project"?t.repos.find(_=>_.id===p?.primaryRepoId)??null:null)??t.repos.find(_=>_.id===e.selectedRepoId)??t.repos[0]??null)?.id??null,c=p?t.tasks.filter(_=>_.workspaceId===p.id):i?t.tasks.filter(_=>_.repoId===i):[],d=(o?.kind==="task"?c.find(_=>_.id===o.id)??null:null)??c.find(_=>_.id===e.selectedTaskId)??c[0]??null;return{...e,inputMode:r.resetInputMode?"control":e.inputMode,selectedLeftItemId:s,selectedWorkspaceId:p?.id??null,selectedRepoId:i,selectedTaskId:d?.id??null,...qd(d,e.activeTab,e.selectedPtyTabId),selectedFilePath:Md(e,t,d?.id??null),...Kd(e,t,d?.id??null),selectedDiffPath:Ld(e,t,d?.id??null),inspectorSection:Ft(e.inspectorSection,eo,"task")}}function no(e,t,r={leftItemIds:[]}){if(e.inputMode==="terminal")return Rd(t)?X({state:{...e,inputMode:"control",centerZoomed:!1,actionMessage:null,focusedRegion:"center"},changed:!0,detachTerminal:!0}):X({state:e});if(t==="q"||t==="Q")return X({state:e,exit:!0});if(t==="ESCAPE")return X({state:{...e,actionMessage:null},changed:e.actionMessage!==null,pause:!0});if(t==="n"||t==="N")return X({state:{...e,focusedRegion:"tasks",actionMessage:null,taskPromptInput:"",taskPromptError:null},changed:!0,beginTaskPrompt:!0});if((t==="r"||t==="R")&&e.focusedRegion==="tasks"&&(ys(e.selectedLeftItemId)||vs(e.selectedLeftItemId)))return X({state:{...e,selectedRunner:Ss(e.selectedRunner,r.enabledRunnerIds),actionMessage:null,taskPromptError:null},changed:!0});if(t==="TAB"||t==="]")return Vi(e,1);if(t==="SHIFT_TAB"||t==="[")return Vi(e,-1);if(t==="z"||t==="Z")return X({state:{...e,centerZoomed:!e.centerZoomed,actionMessage:null},changed:!0});if(t==="UP"||t==="k")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,-1,r):zi(e,-1,r);if(t==="DOWN"||t==="j")return e.focusedRegion==="center"&&e.activeTab===ne?et(e,1,r):zi(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??de,o=e.centerTabRunner?s.indexOf(e.centerTabRunner):-1,p=o===s.length-1?null:s[o+1];return X({state:{...e,centerTabRunner:p,actionMessage:null},changed:!0})}if((t==="+"||t==="a"||t==="A"||t==="t"||t==="T")&&e.focusedRegion==="center"&&e.selectedTaskId){let s=Ud(e,t);return X({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 X({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0});if((t==="X"||t==="x")&&e.focusedRegion==="inspector"&&e.inspectionMode==="review")return X({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&pr(e.selectedLeftItemId)&&e.selectedTaskId)return X({state:{...e,selectedActionId:"close-task",actionMessage:null},changed:!0,closeTask:!0});if((t==="X"||t==="x")&&e.focusedRegion==="tasks"&&Qd(e.selectedLeftItemId)&&e.selectedWorkspaceId)return X({state:{...e,actionMessage:null},changed:!0,removeWorkspace:!0});if(t==="x"&&e.focusedRegion==="center"&&Yi(e.activeTab,r.ptyTabIds??[]))return X({state:{...e,actionMessage:null},changed:!0,closePtyTab:!0});if(t==="LEFT"||t==="h"){if(e.focusedRegion==="center")return ks(e,-1,r.centerTabIds);if(e.focusedRegion==="inspector")return Gi(e,-1)}if(t==="RIGHT"||t==="l"){if(e.focusedRegion==="center")return ks(e,1,r.centerTabIds);if(e.focusedRegion==="inspector")return Gi(e,1)}if(tt(t)){if(e.focusedRegion==="tasks"&&(ys(e.selectedLeftItemId)||vs(e.selectedLeftItemId))){let s=fo(e.selectedLeftItemId),o=po(e.selectedLeftItemId);return X({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 X({state:{...e,actionMessage:null},changed:!0,openWorkspaceBrowser:!0});if(e.focusedRegion==="tasks"&&pr(e.selectedLeftItemId)&&e.selectedTaskId){let s=e.selectedPtyTabId??e.activeTab;return X({state:{...e,inputMode:"terminal",focusedRegion:"center",activeTab:s,selectedPtyTabId:s,preferredPtyTabKind:Nt(s)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0})}if(e.focusedRegion==="center"&&Yi(e.activeTab,r.ptyTabIds??[])&&e.selectedTaskId)return X({state:{...e,inputMode:"terminal",selectedPtyTabId:e.activeTab,preferredPtyTabKind:Nt(e.activeTab)??e.preferredPtyTabKind,actionMessage:null},changed:!0,attachTerminal:!0});if(e.focusedRegion==="center"&&e.activeTab===ne)return X({state:{...e,actionMessage:null},changed:!0,refreshInspection:!0});if(e.focusedRegion==="inspector"&&e.selectedTaskId&&e.inspectionMode==="files"){let s=e.selectedFileTreePath??e.selectedFilePath;if(s&&(r.fileTreeDirectoryIds??[]).includes(s))return X({state:Ed({...e,selectedFileTreePath:s}),changed:!0});let o=s&&(r.fileTreeFileIds??[]).includes(s)?s:e.selectedFilePath;return X({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"?X({state:{...e,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.focusedRegion==="inspector"&&e.inspectionMode==="review"?e.selectedActionId==="refresh-checks"?X({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?X({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):X({state:{...e,selectedActionId:"refresh-checks",actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.focusedRegion!=="actions"?X({state:e}):e.selectedActionId==="refresh-checks"?X({state:{...e,actionMessage:null},changed:!0,refreshPullRequestChecks:!0}):e.selectedActionId==="close-task"?X({state:{...e,actionMessage:null},changed:!0,closeTask:!0}):X({state:{...e,actionMessage:`Action queued: ${e.selectedActionId} (inspection surfaces land in phase 4.1).`},changed:!0})}return X({state:e})}function Wt(e,t){return{...e,terminal:t}}function io(e,t){return{...e,inputMode:"control",terminal:{status:"failed",rows:[],error:t}}}function Rd(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===`
163
+ `}function oo(e){return e.length===1&&e>=" "&&e!=="\x7F"}function ao(e){return co(e)||Nt(e)!==null}function Pd(e){return Ji.includes(e)}function co(e){return Qi.includes(e)}function lo(e,t){return[...e?.ptyTabs.map(r=>r.id)??[],...t?.openInspectionKind?[ne]:[]]}var Cd=["tasks","center","inspector"];function Vi(e,t){return hr(e,"focusedRegion",Cd,t)}function ks(e,t,r){let s=hr(e,"activeTab",r&&r.length>0?r:zd(e),t);return!s.changed||Pd(s.state.activeTab)?s:{...s,state:{...s.state,selectedPtyTabId:s.state.activeTab,preferredPtyTabKind:Nt(s.state.activeTab)??s.state.preferredPtyTabKind}}}function zi(e,t,r){if(e.focusedRegion==="tasks")return Id(e,t,r.leftItemIds);if(e.focusedRegion==="center")return ks(e,t,r.centerTabIds);if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return uo(e,t,r);if(e.inspectionMode==="diff"){let s=fr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0},refreshInspection:!0}:s}if(r.projectTargetIds?.length){let s=fr(e,"selectedProjectTargetId",r.projectTargetIds,t);return s.changed?{...s,state:{...s.state,reviewScrollOffset:0}}:s}return hr(e,"selectedActionId",Sd,t)}return hr(e,"selectedActionId",Zi,t)}function Id(e,t,r){let s=fr(e,"selectedLeftItemId",r,t);if(!s.changed)return s;let o=ho(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,reviewScrollOffset: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,reviewScrollOffset: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,reviewScrollOffset:0},refreshInspection:!0};let p=fo(s.state.selectedLeftItemId);if(p)return{...s,state:{...s.state,selectedRepoId:p}};let k=po(s.state.selectedLeftItemId);return k?{...s,state:{...s.state,selectedWorkspaceId:k}}:s}function et(e,t,r){if(t===0)return X({state:e});if(e.focusedRegion==="inspector"){if(e.inspectionMode==="files")return uo(e,t,r);if(e.inspectionMode==="diff"){let s=fr(e,"selectedDiffPath",r.diffPathIds??[],t,!0);return s.changed?{...s,state:{...s.state,diffScrollOffset:0}}:s}return e.inspectionMode==="review"?Xi(e,"reviewScrollOffset",t,r.reviewRowCount??100,r.pageRows):X({state:e})}if(e.focusedRegion==="center"&&e.activeTab===ne){if(e.openInspectionKind==="file")return Xi(e,"fileScrollOffset",t,r.fileLineCount??0,r.pageRows);if(e.openInspectionKind==="diff")return Ad(e,t,r)}return X({state:e})}function xd(e,t){if(e.inspectionMode===t)return X({state:e});let r=t==="diff"?"diff":t==="files"?"file":e.openInspectionKind,s=t==="diff"||t==="files"?ne:e.activeTab;return X({state:{...e,inspectionMode:t,activeTab:s,openInspectionKind:r,fileScrollOffset:t==="files"?0:e.fileScrollOffset,diffScrollOffset:t==="diff"?0:e.diffScrollOffset,reviewScrollOffset:t==="review"?0:e.reviewScrollOffset,actionMessage:null},changed:!0,refreshInspection:!0})}function Gi(e,t){return xd(e,Bd(e.inspectionMode,to,t))}function uo(e,t,r){let s=r.fileTreeRowIds&&r.fileTreeRowIds.length>0?r.fileTreeRowIds:r.filePathIds??[];if(s.length===0)return X({state:e});let o=e.selectedFileTreePath??e.selectedFilePath??s[0]??null,p=s.indexOf(o??""),k=Ge(p===-1?0:p+t,0,s.length-1),i=s[k]??null;if(i===e.selectedFileTreePath)return X({state:e});let c=i!==null&&(r.fileTreeFileIds??r.filePathIds??[]).includes(i);return X({state:{...e,selectedFileTreePath:i,selectedFilePath:c?i:e.selectedFilePath,activeTab:c?ne:e.activeTab,openInspectionKind:c?"file":e.openInspectionKind,fileScrollOffset:c?0:e.fileScrollOffset,actionMessage:null},changed:!0,refreshInspection:c})}function Ed(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 Xi(e,t,r,s,o=10){let p=Math.max(0,s-Math.max(1,o)),k=Ge(e[t]+r,0,p);return k===e[t]?X({state:e}):X({state:{...e,[t]:k,actionMessage:null},changed:!0})}function Ad(e,t,r){if(r.diffPathRanges&&r.diffPathRanges.length>0)return Dd(e,t,r);let s=r.diffLineCount??0,o=r.pageRows??10,p=Math.max(0,s-Math.max(1,o)),k=e.diffScrollOffset+t,i=r.diffPathIds??[];if(i.length===0||!e.selectedDiffPath){let _=Ge(k,0,p);return _===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:_,actionMessage:null},changed:!0})}let c=i.indexOf(e.selectedDiffPath);if(c===-1){let _=Ge(k,0,p);return _===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:_,actionMessage:null},changed:!0})}if(t>0&&k>p){let _=i[c+1]??null;return _?X({state:{...e,selectedDiffPath:_,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:0,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===p?X({state:e}):X({state:{...e,diffScrollOffset:p,actionMessage:null},changed:!0})}if(t<0&&k<0){let _=i[c-1]??null;return _?X({state:{...e,selectedDiffPath:_,activeTab:ne,openInspectionKind:"diff",diffScrollOffset:Number.MAX_SAFE_INTEGER,actionMessage:null},changed:!0,refreshInspection:!0}):e.diffScrollOffset===0?X({state:e}):X({state:{...e,diffScrollOffset:0,actionMessage:null},changed:!0})}let d=Ge(k,0,p);return d===e.diffScrollOffset?X({state:e}):X({state:{...e,diffScrollOffset:d,actionMessage:null},changed:!0})}function Dd(e,t,r){let s=r.diffLineCount??0,o=r.pageRows??10,p=Math.max(0,s-Math.max(1,o)),k=Ge(e.diffScrollOffset+t,0,p),i=Od(r.diffPathRanges??[],k)??e.selectedDiffPath;return k===e.diffScrollOffset&&i===e.selectedDiffPath?X({state:e}):X({state:{...e,diffScrollOffset:k,selectedDiffPath:i,actionMessage:null},changed:!0})}function Ld(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedDiffPath&&(t.inspection.diffPaths??[]).includes(e.selectedDiffPath)?e.selectedDiffPath:t.inspection.selectedDiffPath}function Md(e,t,r){return!t.inspection||t.inspection.taskId!==r||e.selectedFilePath&&(t.inspection.filePaths??[]).includes(e.selectedFilePath)?e.selectedFilePath:t.inspection.selectedFilePath}function Od(e,t){return e.find(r=>t>=r.start&&t<r.end)?.path??e.at(-1)?.path??null}function hr(e,t,r,s){let o=r.indexOf(e[t]),p=Ge(o+s,0,r.length-1),k=r[p];return!k||k===e[t]?X({state:e}):X({state:{...e,[t]:k,actionMessage:null},changed:!0})}function fr(e,t,r,s,o=!1){if(r.length===0)return X({state:e});let p=r.indexOf(e[t]??r[0]??""),k=Ge(p===-1?0:p+s,0,r.length-1),i=r[k]??null;return i===e[t]?X({state:e}):X({state:{...e,[t]:i,actionMessage:null},changed:!0,refreshInspection:o})}function Bd(e,t,r){let s=t.indexOf(e);return t[Ge(s+r,0,t.length-1)]??e}function X(e){return{state:e.state,changed:e.changed??!1,exit:e.exit??!1,pause:e.pause??!1,attachTerminal:e.attachTerminal??!1,detachTerminal:e.detachTerminal??!1,beginTaskPrompt:e.beginTaskPrompt??!1,openWorkspaceBrowser:e.openWorkspaceBrowser??!1,createWorkspaceTask:e.createWorkspaceTask??!1,createPtyTab:e.createPtyTab??!1,createPtyTabKind:e.createPtyTabKind??null,createPtyTabRunner:e.createPtyTabRunner??null,closePtyTab:e.closePtyTab??!1,refreshPullRequestChecks:e.refreshPullRequestChecks??!1,closeTask:e.closeTask??!1,removeWorkspace:e.removeWorkspace??!1,refreshInspection:e.refreshInspection??!1}}function Ft(e,t,r){return t.includes(e??"")?e:r}function $d(e){return e==="tabs"?"center":Ft(e,vd,"tasks")}function Fd(e,t){return e==="checks"||e==="actions"||e==="review"?"review":Ft(e,to,t)}function Nd(e){return e==="file"||e==="diff"?e:null}function Wd(e){return e==="terminal"?"terminal":"agent"}function jd(e){return e==="terminal"?"terminal":"control"}function Hd(e,t=[...de],r="codex"){return e&&gt(e)&&t.includes(e)?e:r}function Ss(e,t=de){let r=t.length>0?t:de,s=r.indexOf(e);return r[(s+1)%r.length]??r[0]??"codex"}function Nt(e){let t=de.join("|");return new RegExp(`:(?:agent|${t})(?:-\\d+)?$`).test(e)?"agent":/:terminal(?:-\d+)?$/.test(e)?"terminal":null}function Ud(e,t){return t==="a"||t==="A"?"agent":t==="t"||t==="T"?"terminal":Nt(e.activeTab)??e.preferredPtyTabKind}function qd(e,t,r){if(!e)return{activeTab:t===ne?t:"agent",selectedPtyTabId:null};let s=e.ptyTabs.find(i=>i.id===r)??null,o=e.selectedPtyTabId?e.ptyTabs.find(i=>i.id===e.selectedPtyTabId)??null:null,p=e.ptyTabs.find(i=>i.id===t)??null;if(p)return{activeTab:p.id,selectedPtyTabId:p.id};if(co(t)){let c=e.ptyTabs.find(d=>d.kind===t)??null??o??s??e.ptyTabs[0]??null;return{activeTab:c?.id??ne,selectedPtyTabId:c?.id??null}}if(t===ne)return{activeTab:ne,selectedPtyTabId:s?.id??o?.id??e.ptyTabs[0]?.id??null};let k=o??s??e.ptyTabs[0]??null;return{activeTab:k?.id??ne,selectedPtyTabId:k?.id??null}}function Kd(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?Vd(t.inspection.fileRows??[],t.inspection.selectedFilePath):e.collapsedFileTreePaths;return{selectedFileTreePath:s,collapsedFileTreePaths:o}}function Vd(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 zd(e){return[e.selectedPtyTabId,e.openInspectionKind?ne:null].filter(t=>typeof t=="string")}function Yi(e,t){return t.includes(e)}function Gd(e,t){let r=Xd(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 Xd(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="project"&&t.push(`new-task-workspace:${r.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 ho(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 Yd(e){return e?`task:${e}`:null}function pr(e){return typeof e=="string"&&e.startsWith("task:")}function ys(e){return typeof e=="string"&&e.startsWith("new-task:")}function vs(e){return typeof e=="string"&&e.startsWith("new-task-workspace:")}function Qd(e){return typeof e=="string"&&e.startsWith("workspace:")}function fo(e){return ys(e)?e.slice(9):null}function po(e){return vs(e)?e.slice(19):null}function Ge(e,t,r){return Math.min(r,Math.max(t,e))}var _r="empty",fe={lineNumber:"3b4261",gutter:"3b4261",keyword:"9d7cd8",string:"9ece6a",literal:"ff9e64",comment:"565f89",markup:"f7768e",diffAdd:"9ece6a",diffDelete:"f7768e",diffMeta:"565f89",diffHunk:"565f89"};function wo(e,t){let r=eu(t,e),s=t.repos.find(w=>w.id===e.selectedRepoId)??t.repos[0]??null,o=r?t.tasks.filter(w=>w.workspaceId===r.id):t.tasks,p=r?.kind==="project"?o:s?o.filter(w=>w.repoId===s.id):[],k=p.find(w=>w.id===e.selectedTaskId)??p[0]??null,i=k?.type==="project",c=Bu(t.tasks),d=su(e,k),_=ru(e,k,d),a=_.find(w=>w.id===d)??_[0]??{id:"agent",label:"CODEX"},b=t.inspection?.taskId===k?.id?t.inspection:null,l=s?.name??"no repo",m=k?Se(k.runner):Se(e.selectedRunner);return{inputMode:e.inputMode,modalInput:e.taskPromptInput!==null||e.workspaceBrowser!==null,focusedRegion:e.focusedRegion,actionMessage:e.actionMessage,footerToast:e.footerToast,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`:pr(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"?k===null?"n new task Tab tasks Esc pause ? help":d===ne?"\u2191\u2193/wheel/PgUp/PgDn scroll \u2190/\u2192 switch Tab inspector Esc pause ? help":`+ new tab a ${Se(e.centerTabRunner??k?.runner??e.selectedRunner)} r runner t terminal x close Enter attach Esc pause ? help`:e.inspectionMode==="review"?i?"\u2191\u2193 targets Wheel/PgUp/PgDn scroll R refresh checks X close task \u2190/\u2192 mode Esc pause ? help":"Wheel/PgUp/PgDn scroll 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:jt.relative(process.env.HOME??"",t.workspaceRoot).length>0?`~/${jt.relative(process.env.HOME??"",t.workspaceRoot)}`:t.workspaceRoot,agent:m},leftTree:Jd(e,t),runners:(t.enabledRunnerIds??["codex","cursor","claude"]).map(w=>$u(w,c[w])),centerHeader:{tabLabel:e.workspaceBrowser?"BROWSER":a.label,taskId:e.workspaceBrowser?"new workspace":k?.id??"no task",repo:l,agent:m},centerTranscript:tu(d,e,s,k,e.workspaceBrowser,b,r),tabs:_,rightContext:Ou(s,k),rightInspection:mu(e,k,b)}}function Jd(e,t){let r=[{text:"WORKSPACES",muted:!0,panelHeader:!0,focused:e.focusedRegion==="tasks"}];if(!t.workspaces)return Zd(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 p of s){let k=e.selectedLeftItemId===`workspace:${p.id}`;r.push({id:`workspace:${p.id}`,text:`${p.kind==="project"?"\u2261":"\u2013"} ${p.name??p.id}`,selected:k,focused:k&&e.focusedRegion==="tasks"});let i=p.kind==="project"?p.discoveredRepoIds??[]:[p.primaryRepoId],c=t.tasks.filter(d=>d.workspaceId===p.id);if(c.length===0)r.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let d of c){let _=e.selectedLeftItemId===`task:${d.id}`,a=_?"\u25B8":"\u2022",b=d.title.length>28?`${d.title.slice(0,25)}\u2026`:d.title,l={id:`task:${d.id}`,taskId:d.id,text:`${a} ${b}`,indent:2,selected:_,focused:_&&e.focusedRegion==="tasks"},m=ko(d);m&&(l.prBadge=m),r.push(l)}if(p.kind==="project"){let d=`new-task-workspace:${p.id}`,_=e.selectedLeftItemId===d;r.push({id:d,text:`+ New Project Task [${Se(e.selectedRunner)}]`,indent:2,selected:_,focused:_&&e.focusedRegion==="tasks",muted:!_})}if(p.kind==="repo"){let d=`new-task:${p.primaryRepoId}`,_=e.selectedLeftItemId===d;r.push({id:d,text:`+ New Task [${Se(e.selectedRunner)}]`,indent:2,selected:_,focused:_&&e.focusedRegion==="tasks",muted:!_})}else{r.push({text:` Repos (${i.length})`,indent:0,muted:!0});for(let d of i.slice(0,6)){let _=t.repos.find(a=>a.id===d);r.push({text:` \xB7 ${_?.name??d}`,indent:0,muted:!0})}i.length>6&&r.push({text:` \xB7 ${i.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 Zd(e,t,r,s){if(r.length===0)e.push({text:"No repos registered.",indent:2,muted:!0});else for(let p of r){let k=t.selectedLeftItemId===`repo:${p.id}`;e.push({id:`repo:${p.id}`,text:`\u2013 ${p.name}`,selected:k,focused:k&&t.focusedRegion==="tasks"});let i=s.filter(_=>_.repoId===p.id);if(i.length===0)e.push({text:" \xB7 no tasks yet",indent:0,muted:!0});else for(let _ of i){let a=t.selectedLeftItemId===`task:${_.id}`,b=a?"\u25B8":"\u2022",l=_.title.length>28?`${_.title.slice(0,25)}\u2026`:_.title,m={id:`task:${_.id}`,taskId:_.id,text:`${b} ${l}`,indent:2,selected:a,focused:a&&t.focusedRegion==="tasks"},w=ko(_);w&&(m.prBadge=w),e.push(m)}let c=`new-task:${p.id}`,d=t.selectedLeftItemId===c;e.push({id:c,text:`+ New Task [${Se(t.selectedRunner)}]`,indent:2,selected:d,focused:d&&t.focusedRegion==="tasks",muted:!d})}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 eu(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 tu(e,t,r,s,o,p=null,k=null){if(o){let c=o.entries.length===0?["No directories or git repos here."]:o.entries.map((d,_)=>{let a=_===o.selectedIndex?"\u25B8":" ",b=d.kind==="repo"?" [git repo]":"/";return`${a} ${d.name}${b}`});return Oe(["Browse for a workspace to register.",o.cwd,"",...c,"",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 c=k?.kind==="project",d=c?k.name??"this workspace":r.name,_=c?"Project Task":"Task";return Oe([`No tasks in ${d}.`,"",`Press n or choose + New ${_} to create one with ${Se(t.selectedRunner)}.`])}let i=s.ptyTabs.find(c=>c.id===e)??null;return i?i.kind==="agent"?Oe([`${i.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([`${i.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"?ou(s,p,t.fileScrollOffset):e===ne&&t.openInspectionKind==="diff"?au(s,p,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 ru(e,t,r){let s=t?.ptyTabs.map(p=>({id:p.id,label:nu(p)}))??[];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:iu(e)}]:[];return[...s,...o].map(p=>({...p,active:p.id===r,focused:e.focusedRegion==="center"&&p.id===r}))}function su(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 nu(e){return e.title.toUpperCase()}function iu(e){let t=e.openInspectionKind==="diff"?e.selectedDiffPath:e.selectedFilePath,r=t?jt.basename(t):e.inspectionMode.toUpperCase();return e.openInspectionKind==="diff"?`${r} \u0394`:r}function ou(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=bo(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:""},...cu(s.lines,r,o)]}function au(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=bo(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:""},...lu(s.lines,r,o)]}function Oe(e){return e.map(t=>({text:t}))}function cu(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((p,k)=>{let i=o+k+1;return{text:`${`${String(i).padStart(s," ")} \u2502 `}${p}`,segments:[{text:String(i).padStart(s," "),style:{fg:fe.lineNumber}},{text:" \u2502 ",style:{fg:fe.gutter}},...Ts(p,r)],tone:"default"}})}function lu(e,t,r){let s=du(e),o=Math.max(0,Math.min(t,Math.max(0,s.length-1)));return s.slice(o).map(p=>uu(p,r))}function du(e){let t=[],r=0,s=0;for(let o of e){let p=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(o);if(p){r=Number.parseInt(p[1]??"0",10),s=Number.parseInt(p[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 uu(e,t){let r=go(e.oldNumber),s=go(e.newNumber),o=e.kind==="delete"?r:s,p=e.kind==="delete"?{bg:"2a1111",fallbackFg:fe.diffDelete}:e.kind==="add"?{bg:"10210f",fallbackFg:fe.diffAdd}:null,k=`${o} \u2502 ${e.text}`,i=p?fu(Ts(e.text,t),p.bg,p.fallbackFg):Ts(e.text,t),c=p?{fg:fe.lineNumber,bg:p.bg}:{fg:fe.lineNumber},d=p?{fg:fe.gutter,bg:p.bg}:{fg:fe.gutter};return{text:k,segments:[{text:o,style:c},{text:" \u2502 ",style:d},...i],fullBleed:p!==null}}function go(e){return e===null?" ":String(e).padStart(4," ")}function bo(e){let t=jt.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 Ts(e,t){return t==="diff"?hu(e):t==="markdown"?pu(e):t==="json"?Rs(e,/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|-?\b\d+(?:\.\d+)?\b/g):t==="javascript"||t==="css"?Rs(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 hu(e){return e.startsWith("+")&&!e.startsWith("+++")?[{text:e,style:{fg:fe.diffAdd}}]:e.startsWith("-")&&!e.startsWith("---")?[{text:e,style:{fg:fe.diffDelete}}]:e.startsWith("@@")?[{text:e,style:{fg:fe.diffHunk}}]:e.startsWith("diff --git")||e.startsWith("index ")||e.startsWith("+++ ")||e.startsWith("--- ")?[{text:e,style:{fg:fe.diffMeta}}]:[{text:e}]}function fu(e,t,r){return e.map(s=>({text:s.text,style:{...s.style??{fg:r},bg:t}}))}function pu(e){return/^#{1,6}\s/.test(e)?[{text:e,style:{fg:fe.markup,bold:!0}}]:Rs(e,/(`[^`]+`)|(\*\*[^*]+\*\*)|(\[[^\]]+\]\([^)]+\))/g)}function Rs(e,t){let r=[],s=0;for(let o of e.matchAll(t)){let p=o[0],k=o.index??0;k>s&&r.push({text:e.slice(s,k)}),r.push({text:p,style:gu(p)}),s=k+p.length}return s<e.length&&r.push({text:e.slice(s)}),r.length>0?r:[{text:e}]}function gu(e){return e.startsWith("//")||e.startsWith("/*")?{fg:fe.comment,italic:!0}:e.startsWith('"')||e.startsWith("'")||e.startsWith("`")?{fg:fe.string}:/^-?\d/.test(e)||e==="true"||e==="false"||e==="null"||e==="undefined"?{fg:fe.literal}:e.startsWith("**")||e.startsWith("[")||e.startsWith("`")?{fg:fe.markup}:{fg:fe.keyword}}function mu(e,t,r){let s=e.selectedProjectTargetId??t?.repoTargets?.[0]?.repoId??null,o=t?.type==="project"&&s?t.repoTargets?.find(i=>i.repoId===s)??null:null,p=t?.type==="project"?yo(t.repoTargets??[]):o?.pullRequest??(t?pe(t):null),k=[_u(e,p),{id:"mode-spacer",text:"",muted:!0}];return e.inspectionMode==="review"?{title:"",rows:[...k,...To(e,t)]}:e.inspectionMode==="files"?{title:"",rows:[...k,...Eu(e,r)]}:{title:"",rows:[...k,...Du(e,r)]}}function _u(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 c=0;c<s.length;c++){let d=s[c];c>0&&o.push({text:" "});let _=d.active?e.focusedRegion==="inspector"||e.focusedRegion==="actions"?"9ece6a":"7aa2f7":"565f89";o.push({text:d.label,style:{fg:_}})}let p=Ps(t),k=Cs(t);return o.push({text:" "},p,{text:" "},k),{id:"inspection-mode",text:o.map(c=>c.text).join(""),segments:o}}function mo(e){return[{text:" "},Ps(e),{text:" "},Cs(e)]}function ko(e){if(e.type==="project"&&e.repoTargets?.length){let r=yo(e.repoTargets);return r?mo(r):null}let t=pe(e);return t?.number?mo(t):null}function yo(e){let t=e.filter(o=>o.status==="ready"),r=t.map(o=>o.pullRequest).filter(o=>!!o.number);if(r.length===0)return null;let s=bu(r);return{number:-1,status:wu(r),draft:r.some(o=>o.draft),mergeable:r.length===t.length&&r.every(o=>o.mergeable),mergeStateStatus:null,reviewDecision:r.some(o=>o.reviewDecision==="CHANGES_REQUESTED")?"CHANGES_REQUESTED":r.some(o=>o.reviewDecision==="REVIEW_REQUIRED")?"REVIEW_REQUIRED":r.every(o=>o.reviewDecision==="APPROVED")?"APPROVED":null,requiredChecks:r.flatMap(o=>o.requiredChecks),aggregateReadiness:s}}function wu(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 bu(e){let t=e.map(r=>vo(r));return t.some(r=>r==="failed")?"failed":t.some(r=>r==="pending")?"pending":t.length>0&&t.every(r=>r==="success")?"success":"none"}function Ps(e){return!e||!e.number?{text:Hi,style:{fg:"565f89"}}:e.status==="merged"?{text:Ui,style:{fg:"9d7cd8"}}:e.status==="closed"?{text:qi,style:{fg:"f7768e"}}:e.status==="draft"||e.draft?{text:gs,style:{fg:"565f89"}}:{text:gs,style:{fg:"9ece6a"}}}function Cs(e){return e?.aggregateReadiness?_o(e.aggregateReadiness):_o(vo(e))}function _o(e){return e==="failed"?{text:bs,style:{fg:"f7768e"}}:e==="pending"?{text:_s,style:{fg:"e0af68"}}:e==="success"?{text:ws,style:{fg:"9ece6a"}}:{text:ms,style:{fg:"565f89"}}}function vo(e){let t=e?.requiredChecks??null;return e?.status==="merged"?"success":e?.status==="closed"||!e?.number||!t||t.length===0?"none":t.some(r=>r.status==="failed")||e.reviewDecision==="CHANGES_REQUESTED"?"failed":t.every(r=>r.status==="success"||r.status==="skipped")?So(e)?"failed":ku(e)?"success":"pending":"pending"}function ku(e){return!!(e.mergeable&&!e.draft&&!So(e)&&e.requiredChecks.length>0&&e.requiredChecks.every(t=>t.status==="success"||t.status==="skipped"))}function So(e){return e.reviewDecision==="REVIEW_REQUIRED"||e.reviewDecision==="CHANGES_REQUESTED"||e.mergeStateStatus==="REVIEW_REQUIRED"}function To(e,t){if(!t)return[{id:"review-empty",text:"No task selected.",muted:!0}];if(t.type==="project"&&t.repoTargets?.length)return yu(e,t);let r=pe(t),s=Po("pr",t.branch,r??{number:null,url:null,baseBranch:null,headBranch:null,draft:!1,mergeable:!1,mergeStateStatus:null,reviewDecision:null,lastSyncedAt:null,requiredChecks:[],comments:[]}),o=t.prs.filter(p=>p!==r&&(p.status==="merged"||p.status==="closed")).length;return o>0&&s.push({id:"pr-history",text:`+ ${o} previous PR${o!==1?"s":""}`,muted:!0}),vu(s,e)}var mr=32;function yu(e,t){let r=[],s=t.repoTargets??[],o=e.selectedProjectTargetId??s[0]?.repoId??null;for(let k of s){let i=o===k.repoId,c=e.focusedRegion==="inspector"&&i,d=k.repoId.startsWith("repo_")?k.repoId.slice(5):k.repoId;if(k.status!=="ready"){let a=k.failureReason?k.failureReason.slice(0,14):k.status,b=mr-a.length-1,l=d.length>b?d.slice(0,b-1)+"\u2026":d,m=mr-l.length-a.length;r.push({id:`project-review:${k.repoId}`,text:l+" ".repeat(Math.max(1,m))+a,selected:i,focused:c,muted:!0})}else{let _=Ps(k.pullRequest),a=Cs(k.pullRequest),b=`${_.text} ${a.text}`,l=mr-b.length-1,m=d.length>l?d.slice(0,l-1)+"\u2026":d,w=mr-m.length-b.length,n=m+" ".repeat(Math.max(1,w));r.push({id:`project-review:${k.repoId}`,text:n+b,selected:i,focused:c,segments:[{text:n},{..._,text:_.text},{text:" "},{...a,text:a.text}]})}}let p=s.find(k=>k.repoId===o)??null;return p?.status==="ready"&&p.pullRequest.number&&(r.push({id:"target-detail-spacer",text:""}),r.push(...Po("target",p.branch,p.pullRequest))),r}function Ro(e,t){return To(e,t).length}function Po(e,t,r){let s=a=>`${e}-${a}`;if(!r.number)return[{id:s("no-pr"),text:t,muted:!0}];let o=[],p=`#${r.number}`;o.push(r.url?{id:s("pr-number"),text:`${p} Open in GitHub \u2197`,segments:[{text:p},{text:" Open in GitHub \u2197",style:{fg:"7aa2f7",underline:!0},href:r.url}]}:{id:s("pr-number"),text:p});let k=r.baseBranch??"?",i=r.headBranch??t;o.push({id:s("pr-branches"),text:`${k} \u2192 ${i}`,muted:!0});let c=Su(r.reviewDecision,r.mergeStateStatus),d=c&&c!=="review approved"?"merge blocked":r.mergeable?"merge ready":r.mergeStateStatus?`merge ${r.mergeStateStatus}`:"merge unknown";c?o.push({id:s("pr-merge"),text:`${d} \xB7 ${c}`,muted:!0,segments:[{text:d},{text:" \xB7 "},{text:c,style:{fg:Tu(r.reviewDecision,r.mergeStateStatus)}}]}):o.push({id:s("pr-merge"),text:d,muted:!0}),o.push({id:s("pr-synced"),text:`synced ${Co(r.lastSyncedAt)}`,muted:!0}),o.push({id:s("checks-spacer"),text:""}),o.push({id:s("checks-header"),text:"Checks"}),r.requiredChecks.length?o.push(...r.requiredChecks.map(Ru)):o.push({id:s("checks-none"),text:r.number?"No GitHub checks reported.":"No checks \u2014 sync after creating a PR.",muted:!0});let _=r.comments??[];return _.length>0&&(o.push({id:s("comments-spacer"),text:""}),o.push({id:s("comments-header"),text:`Review comments (${_.length})`}),o.push(..._.slice(-4).flatMap((a,b)=>Pu(a,s(`comment:${b}`))))),o}function vu(e,t){if(t.focusedRegion!=="inspector"||t.inspectionMode!=="review"||e.length===0)return e;let r=Math.max(0,Math.min(t.reviewScrollOffset,e.length-1));return e.map((s,o)=>({...s,selected:t.reviewScrollOffset===0&&s.selected||o===r,focused:t.reviewScrollOffset===0&&s.focused||o===r}))}function Su(e,t){return e==="CHANGES_REQUESTED"?"review changes requested":e==="REVIEW_REQUIRED"||t==="REVIEW_REQUIRED"?"review required":e==="APPROVED"?"review approved":null}function Tu(e,t){return e==="CHANGES_REQUESTED"?"f7768e":e==="APPROVED"?"9ece6a":e==="REVIEW_REQUIRED"||t==="REVIEW_REQUIRED"?"e0af68":"565f89"}function Co(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 Ru(e){let{icon:t,color:r}=Iu(e.status),s=e.name.length>16?`${e.name.slice(0,15)}\u2026`:e.name;return{id:`pr-check:${e.name}`,text:`${t} ${s.padEnd(16," ")} ${xu(e.status)}`,color:r,muted:!1}}function Pu(e,t){let r=e.author??"unknown",s=e.createdAt?` \xB7 ${Co(e.createdAt)}`:"",o=Cu(e.body,30),p=o.slice(0,4),k=p.length<o.length,i=[{id:`${t}:author`,text:`${r}${s}`,muted:!0},...p.map((c,d)=>({id:`${t}:body:${d}`,text:` ${k&&d===p.length-1?`${c}\u2026`:c}`,muted:!0}))];return i.push({id:`${t}:spacer`,text:"",muted:!0}),i}function Cu(e,t){let r=e.split(/\s+/).filter(Boolean);if(r.length===0)return[];let s=[],o="";for(let p of r){if(!o){o=p;continue}`${o} ${p}`.length<=t?o=`${o} ${p}`:(s.push(o),o=p)}return o&&s.push(o),s}function Iu(e){switch(e){case"success":return{icon:ws,color:"9ece6a"};case"pending":return{icon:_s,color:"e0af68"};case"failed":return{icon:bs,color:"f7768e"};case"skipped":return{icon:ms,color:"565f89"};default:return{icon:"?",color:"565f89"}}}function xu(e){return e==="success"?"passing":e==="failed"?"failing":e}function Eu(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(p=>[p.path,p.status])),s=Au(t.fileRows,e.collapsedFileTreePaths),o=e.selectedFileTreePath??t.selectedFilePath;return s.map(p=>{let k=p.kind==="file"?r.get(p.path):void 0,i=k==="A"?"9ece6a":k==="M"?"e0af68":k==="D"?"f7768e":k==="??"?"565f89":void 0,c=p.kind==="directory"?e.collapsedFileTreePaths.includes(p.path)?Wi:ji:Ni(p.label),d=p.kind==="file"?Ki(p.label):void 0,_=" ".repeat(p.depth),a=d?{text:c,style:{fg:d}}:{text:c},b=i?{text:p.label,style:{fg:i}}:{text:p.label},l=[{text:_},a,b];return{id:p.path,text:`${_}${c}${p.label}`,selected:p.path===o,focused:p.path===o&&e.focusedRegion==="inspector",muted:p.kind==="directory",segments:l}})}function Au(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let p=1;p<o.length;p+=1)if(r.has(o.slice(0,p).join("/")))return!1;return!0})}function Du(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(Lu(t))return Mu(e,t);let r=[];for(let s of["branch","staged","unstaged","untracked"]){let o=t.diffRows.filter(p=>p.group===s);o.length!==0&&(r.push({id:s,text:s.toUpperCase(),muted:!0}),r.push(...o.map(p=>Io(p,e,t))))}return r}function Lu(e){return e.filePaths.some(t=>t.startsWith("repo_"))||e.diffRows.some(t=>t.path.startsWith("repo_"))}function Mu(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 p=t.diffRows.filter(i=>i.path.startsWith(`${o}/`)),k=o.startsWith("repo_")?o.slice(5):o;r.push({id:`repo-diff:${o}`,text:k,muted:!0});for(let i of["branch","staged","unstaged","untracked"]){let c=p.filter(d=>d.group===i);c.length!==0&&(r.push({id:`repo-diff:${o}:${i}`,text:` ${i}`,muted:!0}),r.push(...c.map(d=>Io(d,e,t,o.length+1))))}}return r}function Io(e,t,r,s=0){let o=e.additions===null?"-":`+${e.additions}`,p=e.deletions===null?"-":`-${e.deletions}`,k=e.status==="A"||e.group==="untracked"?"9ece6a":e.status==="D"?"f7768e":"e0af68",i=s>0?e.path.slice(s):e.path;return{id:`${e.group}:${e.path}`,text:` ${e.status.padEnd(2," ")} ${i} ${o}/${p}`,selected:e.path===(t.selectedDiffPath??r.selectedDiffPath),focused:e.path===(t.selectedDiffPath??r.selectedDiffPath)&&t.focusedRegion==="inspector",color:k}}function Ou(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:jt.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 Bu(e){return e.reduce((t,r)=>(t[r.runner]+=1,t),{codex:0,cursor:0,claude:0})}function $u(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 ht(e,t){return{width:Math.max(e??wr.width,wr.width),height:Math.max(t??wr.height,wr.height)}}import{spawn as ih}from"node:child_process";import{createHash as oh}from"node:crypto";import{createServer as ah,createConnection as Wo}from"node:net";import{openSync as ch}from"node:fs";import{mkdir as lh,readFile as Ms,rm as ft,writeFile as dh}from"node:fs/promises";import{tmpdir as uh}from"node:os";import yt from"node:path";import{createRequire as Vu}from"node:module";var Do=Fa(Eo(),1),Fu=1e3,Nu=["000000","cd3131","0dbc79","e5e510","2472c8","bc3fbc","11a8cd","e5e5e5","666666","f14c4c","23d18b","f5f543","3b8eea","d670d6","29b8db","ffffff"];function Lo(e){return new Do.default.Terminal({allowProposedApi:!0,cols:e.columns,rows:e.rows,scrollback:Fu,theme:{foreground:"#e6e6e6",background:"#0a0a0a"}})}function Mo(e,t){(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function xs(e,t){return new Promise(r=>{e.write(t,r)})}function Oo(e,t=0){let r=e.buffer.active,s=[],o=r.getNullCell(),p=r.baseY+r.cursorY,k=Math.max(0,r.baseY-t);for(let i=0;i<e.rows;i+=1){let c=r.getLine(k+i);if(!c){s.push({segments:[]});continue}let d=[];for(let _=0;_<e.cols;_+=1){let a=c.getCell(_,o);!a||a.getWidth()===0||d.push({text:a.getChars()||" ",style:Hu(a,k+i===p&&_===r.cursorX)})}s.push({segments:Wu(ju(d))})}return s}function Wu(e){let t=[];for(let r of e){let s=t.at(-1);if(s&&Ku(s.style,r.style)){s.text+=r.text;continue}let o={text:r.text};Bo(r.style)||(o.style=r.style),t.push(o)}return t}function ju(e){let t=e.length;for(;t>0;){let r=e[t-1];if(!r||r.text!==" "||!Bo(r.style))break;t-=1}return e.slice(0,t)}function Hu(e,t){let r={},s=Ao(e,"fg"),o=Ao(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 Ao(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"):Nu[o]??Uu(o)}function Uu(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(qu).map(p=>p.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 qu(e){return e===0?0:55+e*40}function Ku(e,t){return Is(e)===Is(t)}function Is(e){return e?[e.fg??"",e.bg??"",e.bold?"b":"",e.dim?"d":"",e.italic?"i":"",e.underline?"u":"",e.inverse?"v":""].join("|"):""}function Bo(e){return Is(e)===""}var zu=Vu(import.meta.url),Gu=/^CTRL_([A-Z])$/,Xu="\x1B[6n",Yu="\x1B[c",Qu="\x1B[?u",Ju={ENTER:"\r",KP_ENTER:"\r",SHIFT_ENTER:`
164
164
  `,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:""},br=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 p=this.sessions.get(r);if(p)if(p.status!=="running")Es(p),this.sessions.delete(r);else return this.attachedTabId=r,p.scrollbackLines=0,$o(p,s),this.getViewState(r);let k=this.createSession(t,r,s,o);return this.sessions.set(r,k),this.attachedTabId=r,this.getViewState(r)}write(t){let r=this.getAttachedSession();!r||r.status!=="running"||r.pty.write(t)}writeKey(t){let r=Zu(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}sessionTabIds(){return[...this.sessions.keys()]}disposeSession(t){let r=this.sessions.get(t);r&&(Es(r),this.sessions.delete(t),this.attachedTabId===t&&(this.attachedTabId=null))}disposeAll(){for(let t of this.sessions.values())Es(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:Oo(r.terminal,r.scrollbackLines),error:r.error,scrolledBack:r.scrollbackLines>0}:{status:"idle",rows:[],error:null,scrolledBack:!1}}createSession(t,r,s,o){let p=this.spawn??th().spawn,k=Lo(s),i=o??this.resolveSessionSpec(t,r),c=at({...this.env,...i.env??{}}),{executable:d,args:_}=rh(this.shell,i.command,{cwd:i.cwd,env:c}),a=p(d,_,{name:"xterm-256color",cols:s.columns,rows:s.rows,cwd:i.cwd,env:sh(c)}),b={taskId:t,tabId:r,pty:a,terminal:k,status:"running",error:null,disposables:[],scrollbackLines:0};return b.disposables.push(a.onData(l=>{nh(a,l),xs(b.terminal,l).then(()=>{this.onUpdate?.(b.tabId)})})),b.disposables.push(a.onExit(l=>{b.status="exited",xs(b.terminal,`\r
165
165
  [process exited ${l.exitCode}]`).then(()=>{this.onUpdate?.(b.tabId)})})),b}getAttachedSession(){return this.attachedTabId?this.sessions.get(this.attachedTabId)??null:null}};function Zu(e){if(e.length===1)return e;let t=Ju[e];if(t!==void 0)return t;let r=Gu.exec(e);return r?.[1]?String.fromCharCode(r[1].charCodeAt(0)-64):null}function $o(e,t){eh(e.pty,t),Mo(e.terminal,t)}function Es(e){for(let t of e.disposables)t.dispose();e.terminal.dispose(),e.pty.kill()}function eh(e,t){t.columns>0&&t.rows>0&&(e.cols!==t.columns||e.rows!==t.rows)&&e.resize(t.columns,t.rows)}function th(){return zu("node-pty")}function rh(e,t,r){if(t.length===0)return{executable:e,args:[]};let o=`${[ct(t[0],r),...t.slice(1)].map(Fo).join(" ")}; exec ${Fo(e)} -l`;return{executable:e,args:["-lc",o]}}function Fo(e){return`'${e.replaceAll("'","'\\''")}'`}function sh(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 nh(e,t){for(let r=0;r<As(t,Xu);r+=1)e.write("\x1B[1;1R");for(let r=0;r<As(t,Yu);r+=1)e.write("\x1B[?1;2c");for(let r=0;r<As(t,Qu);r+=1)e.write("\x1B[?0u")}function As(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 Os=3;async function jo(e){let t=Bs(e.paths);await hh(t,e.paths,e.spawnDaemon);let r=await zo(t.socketPath),s=new Ds(r,e);return await s.ready(),s}async function Ho(e,t={}){let r=Bs(e);await lh(e.runtimeDir,{recursive:!0}),await ft(r.socketPath,{force:!0});let s=new Ls(e,t),o=ah(p=>s.handleConnection(p));await wh(o,r.socketPath),await dh(r.pidPath,String(process.pid),"utf8"),await new Promise(p=>{let k=()=>{s.closeClients(),o.close(()=>p())};s.onShutdown=k,process.once("SIGTERM",k),process.once("SIGINT",k)}),await ft(r.socketPath,{force:!0}),await ft(r.pidPath,{force:!0}),s.disposeAll()}async function Uo(e){let t=Bs(e);return await yr(t.socketPath)?(await Ko(t.socketPath),!0):!1}var Ds=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!==Os)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 p=o.view??{status:"idle",rows:[],error:null};return this.viewCache.set(r,p),p}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})}}async pruneStale(t){await this.send({type:"pruneStale",keepTabIds:t})}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((k,i)=>{this.pending.set(r,{resolve:k,reject:i})});if(this.socket.destroyed)throw this.pending.delete(r),new Error("Craig PTY daemon connection is closed.");this.socket.write(`${JSON.stringify(s)}
166
166
  `);let p=await o;if(!p.ok)throw new Error(p.error);return p}handleData(t){this.buffer+=t;let r=this.buffer.indexOf(`
@@ -173,13 +173,13 @@ ${p.slice(-2e3)}`:""}`)}async function qo(e){let t=await _h(e).catch(()=>null);r
173
173
  `);if(d===-1)return;let _=p.slice(0,d);i(),o.end();try{r(JSON.parse(_))}catch(a){s(a instanceof Error?a:new Error(String(a)))}}),o.once("close",()=>i())})}async function No(e,t){let r=Date.now();for(;Date.now()-r<t;){if(!await yr(e))return;await $s(50)}}function zo(e){return new Promise((t,r)=>{let s=Wo(e);s.once("connect",()=>t(s)),s.once("error",r)})}function wh(e,t){return new Promise((r,s)=>{e.once("error",s),e.listen(t,r)})}function kr(e,t){if(!e.destroyed)try{e.write(`${JSON.stringify(t)}
174
174
  `)}catch{}}function Go(e){try{return process.kill(e,0),!0}catch{return!1}}function $s(e){return new Promise(t=>setTimeout(t,e))}function bh(e){throw new Error(`Unhandled daemon request: ${JSON.stringify(e)}`)}var kh=[" \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 Fs(){return[...kh]}var yh=["Start","Options","Exit"],vh=["Resume","Options","Exit"],Tr=2,Rr=2,Pr=2,Sh=new RegExp("\x1B\\[[0-?]*[ -/]*[@-~]","g"),Th=new RegExp("\x1B\\[(?:0)?m","g"),Rh=new RegExp("\x1B\\]8;;[^\x1B]*\x1B\\\\","g"),Ph=/https?:\/\/[^\s<>"']+/g,Ns="\x1B[0m",Qo="\x1B]8;;\x1B\\",re={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 Jo(e,t={}){return js(e,{subtitle:"crAIg is that you?",menuItems:yh,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0,versionText:t.versionText??null,updateText:t.updateText??null})}function Zo(e,t={}){return js(e,{subtitle:"Control mode is paused.",menuItems:vh,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0,versionText:t.versionText??null,updateText:t.updateText??null})}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."],Ch=["Help"];function Ws(e,t={}){return js(e,{subtitle:t.optionsSubtitle??"Configuration",menuItems:t.optionsMenuItems??Ch,menuIndex:t.menuIndex??0,optionsMessage:t.optionsMessage??null,color:t.color??!0})}function ea(e,t={}){let r=t.color??!0,s=re.overlay,o=new Array(e.height).fill(le(" ".repeat(e.width),r,s)),p=Fs(),k=Math.max(1,Math.floor((e.height-p.length-2-vr.length)/2));for(let _=0;_<p.length&&!(k+_>=e.height);_+=1)o[k+_]=le(na(p[_]??"",e.width),r,re.overlayLogo);let i=Math.max(...vr.map(_=>_.length)),c=Math.max(0,Math.floor((e.width-i)/2)),d=k+p.length+2;for(let _=0;_<vr.length;_+=1){let a=d+_;if(a>=e.height)break;let b=vr[_]??"";o[a]=le(Xe(" ".repeat(c)+b,e.width),r,s)}return o.join(`
175
175
  `)}function ta(e,t,r={}){let s=r.color??!0,o=Be.leftWidth,p=Be.rightWidth,k=Be.dividerWidth,i=r.centerOnly??!1,c=i?e.width:e.width-o-p-k*2,d=e.height-Be.topRailHeight-1,_=`CRAIG | ${t.topRail.workspacePath} | ${t.topRail.agent}`,a=le(Xe(_,e.width),s,re.rail),b=xh(t,o-Tr-Rr,d,s),l=Eh(t,c,d,s),m=Dh(t,p,d,s),w=t.inputMode==="terminal",n=[];for(let u=0;u<d;u+=1){if(i){n.push(Sr(l[u]??qe(),c,s,"center"));continue}let h=Sr(b[u]??qe(),o,s,"left"),y=le("\u2502",s,re.divider),T=Sr(l[u]??qe(),c,s,"center"),C=le("\u2502",s,re.divider),x=Sr(m[u]??qe(),p,s,"right");n.push(`${h}${y}${T}${C}${x}`)}let g=w||t.modalInput?re.panelBg:re.panelMuted,f=Ih(t.footerText,t.footerToast,e.width,s,g);return[a,...n,f].join(`
176
- `)}function Ih(e,t,r,s,o){let p=` ${e}`;if(!t)return le(Xe(p,r),s,o);let k=`\u2713 ${t}`,i=ke(k),c=ke(p),d=Math.max(1,r-c-i-2),_=c+d+i+2>r?Hs(p,Math.max(0,r-i-3)):p,a=Math.max(1,r-ke(_)-i-2),b=`${_}${" ".repeat(a)}${Ht(k,s,o)} `;return le(Xe(b,r),s,o)}function js(e,t){let r=new Array(e.height).fill(le(" ".repeat(e.width),t.color,re.overlay)),s=Fs(),o=Math.max(...t.menuItems.map(d=>d.length)),p=t.menuItems.map((d,_)=>`${_===t.menuIndex?">":" "} ${d.padEnd(o)}`),k=t.optionsMessage?["",t.optionsMessage]:[],i=[...s,"",t.subtitle,"",...p,...k],c=Math.max(1,Math.floor((e.height-i.length)/2));for(let d=0;d<i.length;d+=1){let _=na(i[d]??"",e.width);if(d<s.length){r[c+d]=le(_,t.color,re.overlayLogo);continue}if(d===s.length+1){r[c+d]=le(_,t.color,re.overlaySubtitle);continue}let a=d-(s.length+3),l=a>=0&&a<t.menuItems.length&&a===t.menuIndex?re.overlayMenuSelected:re.overlay;r[c+d]=le(_,t.color,l)}if(t.versionText){let d=t.updateText?" (update available)":"",_=`${t.versionText}${d} `,a=" ".repeat(Math.max(0,e.width-ke(_)));r[e.height-1]=le(`${a}${xr(_,t.color,re.overlay)}`,t.color,re.overlay)}return r.join(`
177
- `)}function xh(e,t,r,s){let o=Oh(e.runners),p=1,k=e.leftTree.map(c=>Mh(c,t,s));return[...Cr(k,r-p),o]}function Eh(e,t,r,s){let o=e.tabs.find(u=>u.active)?.label??"AGENT",p=Gh(e.tabs),k=e.inputMode==="terminal"?re.success:re.panelMuted,i=`${" ".repeat(p)}${Ir("\u2500".repeat(o.length+1),s,k)}`,c=[`${Ir(e.centerHeader.tabLabel,s,re.panelBg)} ${e.centerHeader.taskId}`,e.centerHeader.repo].join(" \xB7 "),d=e.tabs.find(u=>u.active)?.id??"agent",_=e.centerHeader.tabLabel==="BROWSER"||!ao(d)?e.centerTranscript.map(u=>({...u})):Ah(e),a=Bh(e.tabs,s,e.focusedRegion==="center"),b=" engaged ",l=b.length+2,m=e.inputMode==="terminal"?`${xr(b,s,re.panelBg)}${Ht("\u25CF",s,re.panelBg)} `:"",w=t-2,n=e.inputMode==="terminal"?" ".repeat(Math.max(0,w-ke(a)-l)):"",f=[{text:e.inputMode==="terminal"?`${a}${n}${m}`:a},{text:i,tone:"muted"},{text:c},qe(),..._];return Cr(f,r)}function Ah(e){if(e.terminal.error)return[{text:"terminal \u25B8 PTY unavailable"},qe(),{text:e.terminal.error},qe(),{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:aa(s.segments),segments:s.segments,fullBleed:!0}))}function Dh(e,t,r,s){let o=e.rightInspection?Lh(e.actionMessage?[...e.rightInspection.rows.slice(0,2),{id:"action-message",text:e.actionMessage},{id:"action-message-spacer",text:""},...e.rightInspection.rows.slice(2)]:e.rightInspection.rows,r):Cr([{text:"CONTEXT"},qe(),...e.rightContext.map(p=>$h(p,s)),...e.actionMessage?[qe(),{text:e.actionMessage}]:[]],r);return Cr(o,r)}function Lh(e,t){let r=e.slice(0,2),s=e.slice(2),o=Math.max(0,t-r.length),p=s.findIndex(i=>i.focused||i.selected),k=p===-1?0:Yh(p-Math.floor(o/2),0,Math.max(0,s.length-o));return[...r.map(i=>Xo(i)),...s.slice(k,k+o).map(i=>Xo(i))]}function Xo(e){let t=e.focused?"\u25B8 ":e.selected?"\u2022 ":" ",r=e.focused||e.selected?"selected":e.muted?"muted":"default",s=`${t}${e.text}`;if(e.segments)return{text:s,segments:[{text:t},...e.segments],tone:r};if(e.accentPrefix&&!e.muted){let o=e.text.indexOf(" "),p=o===-1?e.text:e.text.slice(0,o),k=o===-1?"":e.text.slice(o);return{text:s,segments:[{text:t},{text:p,style:{fg:"7aa2f7"}},{text:k}],tone:r}}return e.color?{text:s,segments:[{text:t},{text:e.text,style:{fg:e.color}}],tone:r}:{text:s,tone:r}}function Mh(e,t,r){let s=" ".repeat(e.indent??0),o=e.accentDot?" \u25CF":"",p=e.status?` ${e.status}`:"",k=e.accentDot?` ${Ht("\u25CF",r,e.selected?re.panelSelected:re.panelBg)}`:"",i=e.prBadge?e.prBadge.reduce((l,m)=>l+ke(m.text),0):0,c=t-ke(p)-ke(o)-i,d=e.selected?e.text:e.focused?Ht(e.text,r,re.panelBg):e.panelHeader?Ir(e.text,r,re.panelMuted):e.text,_=Xe(`${s}${d}`,Math.max(0,c)),a=e.selected?"selected":e.muted?"muted":"default";if(e.prBadge){let l=[{text:`${_}${p}${k}`},...e.prBadge];return{text:`${_}${p}${e.prBadge.map(w=>w.text).join("")}`,segments:l,tone:a}}return{text:`${_}${p}${k}`,tone:a}}function Oh(e){let t=e.map(s=>{let o=s.health>=1,p=parseInt(s.count,10),k=p>1?` (${p})`:"";return{text:`${o?"\u25CF":"\u25CB"} ${s.name}${k}`,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:re.success.fg}}):r.push({text:o.text,style:{fg:re.panelMuted.fg}})}return{text:t.map(s=>s.text).join(" "),segments:r,tone:"muted"}}function Bh(e,t,r){return e.map(s=>s.active?r?Ht(s.label,t,re.panelBg):Ir(s.label,t,re.panelBg):xr(s.label,t,re.panelBg)).join(" ")}function $h(e,t){return{text:`${e.label.padEnd(8," ")} ${e.mutedValue?xr(e.value,t,re.panelBg):e.value}`}}function Sr(e,t,r,s){let o=Fh(s,e.tone??"default"),p=Nh(e,r,o);if(s==="left"){if(e.fullBleed)return le(Xe(p,t),r,o);let i=t-Tr-Rr;if(e.rightAlign){let d=ke(p),_=Math.max(0,i-d),a=`${" ".repeat(Tr)}${" ".repeat(_)}${p}${" ".repeat(Rr)}`;return le(a,r,o)}let c=`${" ".repeat(Tr)}${Xe(p,i)}${" ".repeat(Rr)}`;return le(c,r,o)}return s==="center"&&e.fullBleed?Wh(e,t,r,o):le(Xe(` ${p}`,t),r,o)}function Fh(e,t){return t==="selected"||t==="focused"?re.panelSelected:t==="muted"?re.panelMuted:re.panelBg}function Cr(e,t){let r=e.slice(0,t);for(;r.length<t;)r.push(qe());return r}function qe(){return{text:""}}function Nh(e,t,r){return e.segments?e.segments.map(s=>ra(s,t,r)).join(""):e.text}function Wh(e,t,r,s){let o=" ".repeat(Pr),p=Math.max(0,t-Pr*2);if(!e.segments)return le(`${o}${Xe(e.text,p)}${o}`,r,s);let k=Uh(e.segments,p),i=`${o}${k.map(c=>ra(c,r,s)).join("")}${o}`;return le(i,r,s)}function ra(e,t,r){let s=e.href?`${sa(e.href)}${e.text}${Qo}`:jh(e.text);return!t||!e.style?s:`${jt(Vh(e.style,r))}${zh(e.style)}${s}${Ns}${jt(r)}`}function jh(e){return e.replace(Ph,t=>{let[r,s]=Hh(t);return`${sa(r)}${r}${Qo}${s}`})}function Hh(e){let t=e.length;for(;t>0&&".,;:!?)]}".includes(e[t-1]??"");)t-=1;return[e.slice(0,t),e.slice(t)]}function sa(e){return`\x1B]8;;${e}\x1B\\`}function Uh(e,t){let r=qh(e,t);return Kh(r,t)}function qh(e,t){let r=[],s=t;for(let o of e){if(s<=0)break;let p=ke(o.text);if(p<=s){r.push(o),s-=p;continue}let k=Hs(o.text,s);k.length>0&&r.push({...o,text:k}),s=0}return r}function Kh(e,t){let r=ke(aa(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 Vh(e,t){let r=e.inverse?e.bg??t.bg:e.fg,s=e.inverse?e.fg??t.fg:e.bg,o={},p=r??t.fg,k=s??t.bg;return p&&(o.fg=p),k&&(o.bg=k),o}function zh(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 Gh(e){let t=0;for(let r of e){if(r.active)return t;t+=r.label.length+3}return 0}function na(e,t){let r=Math.max(0,t-ke(e)),s=Math.floor(r/2),o=r-s;return`${" ".repeat(s)}${e}${" ".repeat(o)}`}function Xe(e,t){let r=ke(e);return r>=t?Xh(e,t):e+" ".repeat(t-r)}function Xh(e,t){if(t<=0)return"";if(ke(e)<=t)return e;let r=oa(e);return Hs(r,Math.max(0,t-1))+"\u2026"}function ke(e){let t=0;for(let r of Array.from(oa(e)))t+=ia(r);return t}function Hs(e,t){let r="",s=0;for(let o of Array.from(e)){let p=ia(o);if(s+p>t)break;r+=o,s+=p}return r}function ia(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 Yh(e,t,r){return Math.min(Math.max(e,t),r)}function oa(e){return e.replace(Rh,"").replace(Sh,"")}function aa(e){return e.map(t=>t.text).join("")}function le(e,t,r){if(!t)return e;let s=jt(r),o=e.replace(Th,`${Ns}${s}`);return`${s}${o}${Ns}`}function jt(e){let t=[];return e.fg&&t.push(`38;2;${Yo(e.fg).join(";")}`),e.bg&&t.push(`48;2;${Yo(e.bg).join(";")}`),`\x1B[${t.join(";")}m`}function Yo(e){return[Number.parseInt(e.slice(0,2),16),Number.parseInt(e.slice(2,4),16),Number.parseInt(e.slice(4,6),16)]}function Ht(e,t,r){return Us(e,t,re.success.fg,r)}function Ir(e,t,r){return Us(e,t,re.accent.fg,r)}function xr(e,t,r){return Us(e,t,re.mutedfg.fg,r)}function Us(e,t,r,s){if(!t)return e;let o=s.bg?{fg:r,bg:s.bg}:{fg:r};return`${jt(o)}${e}${jt(s)}`}var Qh="https://registry.npmjs.org/craig-cli/latest";var Er=null;function qs(){try{return"0.5.5"}catch{return"unknown"}}async function ca(){let e=qs(),t=Date.now();if(Er&&t-Er.cachedAt<36e5)return Er.result;let r=null;try{let o=await fetch(Qh,{signal:AbortSignal.timeout(5e3)});o.ok&&(r=(await o.json()).version??null)}catch{}let s={current:e,latest:r,updateAvailable:r!==null&&r!==e&&Jh(r,e)};return Er={result:s,cachedAt:t},s}function Jh(e,t){let r=d=>d.split(".").map(Number),[s=0,o=0,p=0]=r(e),[k=0,i=0,c=0]=r(t);return s!==k?s>k:o!==i?o>i:p>c}Ae();var Ks=["Runners","Help"];function Vs(e,t){return de.map(r=>{let s=ye(r),o=e.runners?.[r]?.enabled!==!1,p=e.runners?.[r]?.path?.trim(),k=t.pathEdit?.runner===r?`${t.pathEdit.value}_`:p&&p.length>0?p:`default (${s.executable})`;return`${s.displayName} ${o?"enabled":"disabled"} ${k}`})}function da(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 ua(e,t){return t==="UP"||t==="k"?{kind:"render",menuIndex:Math.max(0,e-1)}:t==="DOWN"||t==="j"?{kind:"render",menuIndex:Math.min(Ks.length-1,e+1)}:t==="ESCAPE"?{kind:"back"}:zs(t)?e===0?{kind:"runners"}:{kind:"help"}:{kind:"noop",menuIndex:e}}function ha(e,t,r,s){if(e.pathEdit)return Zh({...e,pathEdit:e.pathEdit},t,r);let o=Vs(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 i=de[e.menuIndex]??"codex";return{kind:"render",state:{...e,message:null,pathEdit:{runner:i,value:t.runners?.[i]?.path??""}}}}if(!zs(r))return{kind:"noop",state:e};let p=de[e.menuIndex]??"codex",k=t.runners?.[p]?.enabled!==!1;return k&&s.length<=1?{kind:"render",state:{...e,message:"At least one runner must stay enabled."}}:{kind:"save",config:ef(t,p,!k),state:{...e,message:`${ye(p).displayName} ${k?"disabled":"enabled"}.`}}}function Zh(e,t,r){if(r==="ESCAPE")return{kind:"render",state:la({...e,message:null})};if(r==="BACKSPACE")return{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:e.pathEdit.value.slice(0,-1)}}};if(zs(r)){let s=e.pathEdit.runner,o=e.pathEdit.value.trim();return{kind:"save",config:tf(t,s,o.length>0?o:null),state:la({...e,message:o.length>0?`${ye(s).displayName} executable saved.`:`${ye(s).displayName} executable reset to default.`})}}return rf(r)?{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:`${e.pathEdit.value}${r}`}}}:{kind:"noop",state:e}}function ef(e,t,r){return{...e,runners:{...e.runners??{},[t]:{...e.runners?.[t]??{},enabled:r}}}}function tf(e,t,r){let s={...e.runners?.[t]??{},...r?{path:r}:{}};return r||delete s.path,{...e,runners:{...e.runners??{},[t]:s}}}function la(e){let t={...e};return delete t.pathEdit,t}function zs(e){return e==="ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
178
- `}function rf(e){return e.length===1&&e>=" "&&e!=="\x7F"}var af=sf(import.meta.url),cf=af("terminal-kit"),lf=cf.terminal;async function ga(e={}){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("Craig terminal shell requires a TTY.");let t=e.workspaceRoot??process.cwd(),r=Ve(t);await kt(t);let s=await Ne(r),o=pt(s),p=e.uiStateFile?await De({uiStateFile:e.uiStateFile}):null,k=Promise.resolve(),i=Promise.resolve(),c=await Ut(t,void 0,o),d=gr(ro(p,s),c);c=await Ut(t,d,o);let _=()=>{},a={workspaceRoot:t,onUpdate:()=>_(),resolveSessionSpec:(m,w)=>ff(c,w,t)},b=e.ptyRuntime??await jo({...a,paths:r}),l=m=>{if(!e.uiStateFile)return;p=so(p,m);let w=p;k=k.then(()=>Pe({uiStateFile:e.uiStateFile},w),()=>Pe({uiStateFile:e.uiStateFile},w)),k.catch(()=>{})};return new Promise(m=>{let w=e.terminal??lf,n={mode:"overlay",variant:"boot",menuIndex:0,optionsMessage:null,shell:gr(d,c)},g=!1,f=!1,u=null,h=0,y=0,T=null,C=null,x=null,N=null,B=null,D=!1,A=`Craig v${qs()}`,E=null,q=0,K=!0,Y=null,F=()=>{},H=b;_=()=>{n.mode==="main"&&(n={mode:"main",shell:v(n.shell)},x||(x=setTimeout(()=>{x=null,n.mode==="main"&&F()},50)))};function v(M){return Nt(M,H.getViewState(P(M)))}function P(M){let L=R(M);return L?L.ptyTabs.some(O=>O.id===M.activeTab)?M.activeTab:M.activeTab==="agent"||M.activeTab==="terminal"?L.ptyTabs.find(O=>O.kind===M.activeTab)?.id??M.selectedPtyTabId:M.selectedPtyTabId:M.selectedPtyTabId}function S(M){return v(df(M,c))}function R(M){return c.tasks.find(L=>L.id===M.selectedTaskId)??null}async function $(){let M=c.tasks.flatMap(L=>L.ptyTabs.map(O=>O.id));await H.pruneStale?.(M),await H.hydrateSessions?.(M)}function W(){$().catch(()=>{}).then(()=>{n.mode==="main"&&(n={mode:"main",shell:S(n.shell)},F())})}function U(M,L){return N&&(clearTimeout(N),N=null),L?(N=setTimeout(()=>{N=null,!(n.mode!=="main"||n.shell.footerToast!==L)&&(n={mode:"main",shell:S({...n.shell,footerToast:null})},F())},3e3),{...M,footerToast:L}):{...M,footerToast:null}}function V(M){let L=i.then(M,M);return i=L.then(()=>{},()=>{}),L}function te(M){let L=R(M),O=c.inspection,j=O&&O.taskId===L?.id?O:null,G=uf(j?.fileRows??[],M.collapsedFileTreePaths);return{leftItemIds:hf(c),centerTabIds:lo(L,M),ptyTabIds:L?.ptyTabs.map(Z=>Z.id)??[],filePathIds:j?.filePaths??[],fileTreeRowIds:G.map(Z=>Z.path),fileTreeFileIds:G.filter(Z=>Z.kind==="file").map(Z=>Z.path),fileTreeDirectoryIds:G.filter(Z=>Z.kind==="directory").map(Z=>Z.path),diffPathIds:j?.diffPaths??[],diffPathRanges:[],fileLineCount:j?.selectedFile.lines.length??0,diffLineCount:j?.selectedDiff.lines.length??0,reviewRowCount:Ro(M,L),pageRows:Math.max(5,ht(w.width,w.height).height-Be.topRailHeight-9),enabledRunnerIds:o,projectTargetIds:L?.repoTargets?.map(Z=>Z.repoId)??[]}}async function I(M){await nn(r,M),s=M,o=pt(s),c={...c,enabledRunnerIds:o},n.mode==="main"?n={mode:"main",shell:S({...n.shell,selectedRunner:o.includes(n.shell.selectedRunner)?n.shell.selectedRunner:st(s)})}:n={...n,shell:S({...n.shell,selectedRunner:o.includes(n.shell.selectedRunner)?n.shell.selectedRunner:st(s)})}}async function Q(M){let L=M.selectedTaskId;L&&await V(async()=>{let O=await he(r,L);!O.ptyTabs.some(j=>j.id===M.activeTab)||O.selectedPtyTabId===M.activeTab||await se(r,{...O,selectedPtyTabId:M.activeTab})})}async function z(){let M=(n.mode==="main",n.shell);c=await Ut(t,M,o),n.mode==="main"?n={mode:"main",shell:S(n.shell)}:n={...n,shell:S(n.shell)}}async function J(M){let L=++q,O=ma(c.tasks,M),j=c.inspection,G;if(O&&j?.taskId===O.id){let Z={selectedFilePath:M.selectedFilePath,selectedDiffPath:M.selectedDiffPath},ce=await Ii(O,j,Z);if(L!==q)return;G={...c,inspection:ce}}else if(G=await Ut(t,M,o),L!==q)return;c=G,n.mode==="main"&&(n={mode:"main",shell:S(n.shell)},l(n.shell),F())}async function ge(M){let L=await Rf(M);n.mode==="main"&&(n={mode:"main",shell:S({...n.shell,workspaceBrowser:L,activeTab:n.shell.selectedPtyTabId??n.shell.activeTab,actionMessage:null})},F())}async function _e(M){try{let L=S(M),O=R(L),j=L.selectedPtyTabId;if(O&&L.focusedRegion==="tasks"){let ce=O.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ce?j=ce.id:(O=await Xs(O),await z(),j=O.selectedPtyTabId)}O&&!j&&(O=await Xs(O),await z(),j=O.selectedPtyTabId);let G=S({...L,activeTab:j??L.activeTab,selectedPtyTabId:j,focusedRegion:j?"center":L.focusedRegion});if(!G.selectedTaskId||!j){n={mode:"main",shell:G},F();return}n={mode:"main",shell:Nt({...G,inputMode:"terminal"},H.getViewState(j))},l(n.shell);let Z=await H.ensureSession(G.selectedTaskId,j,Ar(ht(w.width,w.height)));f=Gs(j),u=null,n={mode:"main",shell:Nt({...G,inputMode:"terminal"},Z)},l(n.shell)}catch(L){let O=L instanceof Error?L.message:"Failed to start PTY.";M.selectedTaskId&&M.selectedPtyTabId&&Gs(M.selectedPtyTabId)&&(await Ye(M.selectedTaskId,O).catch(()=>{}),await z().catch(()=>{})),n={mode:"main",shell:io(S(M),O)},l(n.shell)}F()}async function Ye(M,L){await V(async()=>{let O=await he(r,M);await se(r,{...O,status:O.status==="running"?"draft":O.status,runnerSession:{...O.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:L})})}async function xe(M,L,O){let j=S(M);if(!j.selectedTaskId)throw new Error("Select a task before creating a tab.");let G=await V(async()=>{let Z=await he(r,j.selectedTaskId),ce=L??mf(Z,j.activeTab,j.preferredPtyTabKind),Ee=fa(Z,ce,O??void 0,s),St={...Z,ptyTabs:[...Z.ptyTabs,Ee],selectedPtyTabId:Ee.id};return await se(r,St),St});return await z(),S({...j,activeTab:G.selectedPtyTabId??j.activeTab,selectedPtyTabId:G.selectedPtyTabId,preferredPtyTabKind:G.ptyTabs.at(-1)?.kind??j.preferredPtyTabKind,focusedRegion:"center",actionMessage:`Created tab: ${G.ptyTabs.at(-1)?.title??"tab"}`})}async function Ke(M){let L=S(M);if(!L.selectedTaskId)throw new Error("Select a task before closing a tab.");let{closedTab:O,nextSelectedTab:j}=await V(async()=>{let G=await he(r,L.selectedTaskId),Z=G.ptyTabs.findIndex(Br=>Br.id===L.activeTab);if(Z===-1)throw new Error("Only PTY tabs can be closed.");let ce=G.ptyTabs[Z],Ee=G.ptyTabs.filter(Br=>Br.id!==ce.id),St=Ee[Math.min(Z,Ee.length-1)]??Ee[Z-1]??null;return await se(r,{...G,ptyTabs:Ee,selectedPtyTabId:St?.id??null}),{closedTab:ce,nextSelectedTab:St}});return H.disposeSession(O.id),await z(),S({...L,activeTab:j?.id??(L.openInspectionKind?"inspection":L.activeTab),selectedPtyTabId:j?.id??null,focusedRegion:"center",actionMessage:`Closed tab: ${O.title}`})}async function rt(M){let L=S(M);if(!L.selectedTaskId)throw new Error("Select a task before refreshing PR checks.");let O=R(L),j=null,G=null;if(O?.type==="project"&&O.repoTargets?.length){let Z=await ar(r,L.selectedTaskId);await z();let ce=Z.synced+Z.discovered+Z.notFound;G=`Refreshed ${Z.synced}/${ce} targets`}else{let{disposition:Z,task:ce}=await ss(r,L.selectedTaskId);await z(),j=Z==="not_found"?`No PR found for ${ce.branch}`:null,Z!=="not_found"&&(G=`Refreshed checks: ${pe(ce)?.requiredChecks.length??0} reported`)}return S({...U(L,G),focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"refresh-checks",actionMessage:j})}async function wa(){if(D||n.mode!=="main")return;let M=c.tasks;D=!0;try{if(await ci(r,M),n.mode!=="main")return;c=await Ut(t,n.shell,o),n={mode:"main",shell:S(n.shell)},F()}catch{}finally{D=!1}}async function ba(M){let L=S(M);if(!L.selectedTaskId)throw new Error("Select a task before closing it.");let{taskBeforeClose:O,task:j}=await V(async()=>{let G=await he(r,L.selectedTaskId),Z=await Fi(r,L.selectedTaskId);return{taskBeforeClose:G,task:Z}});for(let G of O.ptyTabs)H.disposeSession(G.id);return await z(),S({...L,selectedActionId:"close-task",actionMessage:j.cleanup.preservedWorktree?`Archived task ${j.id}; worktree preserved`:`Archived task ${j.id}`})}async function ka(M){let L=S(M);if(!L.selectedWorkspaceId)throw new Error("Select a workspace before removing it.");if((await He(r,{workspaceId:L.selectedWorkspaceId,includeClosed:!0})).tasks.length>0)throw new Error(`Cannot remove workspace ${L.selectedWorkspaceId} while task records still reference it.`);await Lt(r,L.selectedWorkspaceId);let j=await Mt(r,L.selectedWorkspaceId);return await z(),S({...L,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null,selectedPtyTabId:null,selectedLeftItemId:null,actionMessage:`Removed workspace ${j.workspaceId}`})}async function Xs(M){let L=M.ptyTabs.find(G=>G.kind==="agent")??null;if(L){let G={...M,selectedPtyTabId:L.id};return await V(async()=>{let Z=await he(r,M.id),ce=Z.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ce&&await se(r,{...Z,selectedPtyTabId:ce.id})}),G}let O=fa(M,"agent",void 0,s),j={...M,ptyTabs:[...M.ptyTabs,O],selectedPtyTabId:O.id};return await V(async()=>{let G=await he(r,M.id),Z=G.ptyTabs.find(ce=>ce.kind==="agent")??null;if(Z){await se(r,{...G,selectedPtyTabId:Z.id});return}await se(r,{...G,ptyTabs:[...G.ptyTabs,O],selectedPtyTabId:O.id})}),j}F=()=>{ya();let M=ht(w.width,w.height),L=n.mode==="main"?ta(M,wo(S(n.shell),c),{centerOnly:n.shell.centerZoomed}):n.variant==="boot"?Jo(M,{menuIndex:n.menuIndex,optionsMessage:n.optionsMessage,versionText:A,updateText:E}):n.variant==="pause"?Zo(M,{menuIndex:n.menuIndex,optionsMessage:n.optionsMessage,versionText:A,updateText:E}):n.variant==="options"?Ws(M,{menuIndex:n.menuIndex,optionsMenuItems:Ks}):n.variant==="runners"?Ws(M,{menuIndex:qt(n).menuIndex,optionsMenuItems:Vs(s,qt(n)),optionsMessage:da(qt(n)),optionsSubtitle:"Runners"}):ea(M);K&&(w.moveTo(1,1),w.eraseDisplayBelow(),K=!1),w.noFormat(wf(L)),w.hideCursor(!0)};function ya(){let M=n.mode==="main"&&n.shell.inputMode==="terminal"?"terminal":"control";M!==Y&&(Y=M,w.grabInput(M==="terminal"?{mouse:"button"}:!0))}let va=()=>{process.stdout.off("resize",en),process.off("SIGCONT",tn),w.removeListener("key",Ys),w.removeListener("unknown",Qs),w.removeListener("mouse",Js),T&&(clearTimeout(T),T=null),C&&(clearTimeout(C),C=null),x&&(clearTimeout(x),x=null),N&&(clearTimeout(N),N=null),B&&(clearInterval(B),B=null),H.disposeAll(),w.grabInput(!1),w.hideCursor(!1),w.fullscreen(!1)},Mr=M=>{va(),m(M)},Sa=async()=>{if(n.mode!=="main"||g)return;let M=n.shell,L=M.taskPromptInput?.trim()??"";if(!M.selectedRepoId&&!M.selectedWorkspaceId){n={mode:"main",shell:S({...M,taskPromptError:"Select a workspace first."})},F();return}if(L.length===0){n={mode:"main",shell:S({...M,taskPromptError:"Task prompt cannot be empty."})},F();return}g=!0,n={mode:"main",shell:S({...M,actionMessage:`Creating ${M.selectedRunner} task in ${M.selectedWorkspaceId??M.selectedRepoId}...`})},F();let O=null;try{O=await _f(r,M.selectedRepoId,M.selectedWorkspaceId,L,M.selectedRunner),await z();let j=S({...n.shell,selectedRepoId:O.repoId,selectedWorkspaceId:O.workspaceId,selectedTaskId:O.id,selectedPtyTabId:O.selectedPtyTabId,selectedLeftItemId:`task:${O.id}`,activeTab:O.selectedPtyTabId??"agent",inputMode:"terminal",focusedRegion:"center",taskPromptInput:null,taskPromptError:null,actionMessage:null}),G=await H.ensureSession(O.id,j.selectedPtyTabId??_a(O,"agent"),Ar(ht(w.width,w.height)));f=Gs(j.selectedPtyTabId),n={mode:"main",shell:Nt(j,G)},l(n.shell)}catch(j){j instanceof Dr&&(O=j.task);let G=j instanceof Error?j.message:"Failed to create task.";O&&(await se(r,{...O,status:"draft",runnerSession:{...O.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:G}).catch(()=>{}),await z().catch(()=>{})),n={mode:"main",shell:S({...n.shell,inputMode:"control",selectedTaskId:O?.id??n.shell.selectedTaskId,selectedPtyTabId:O?.selectedPtyTabId??n.shell.selectedPtyTabId,selectedLeftItemId:O?`task:${O.id}`:n.shell.selectedLeftItemId,activeTab:O?.selectedPtyTabId??n.shell.activeTab,taskPromptInput:O?null:"",taskPromptError:G,actionMessage:null})}}finally{g=!1,F()}},Ta=M=>{if(n.mode!=="main")return;let L=n.shell;if(L.taskPromptInput!==null){if(M==="ESCAPE"){n={mode:"main",shell:S({...L,taskPromptInput:null,taskPromptError:null,actionMessage:null})},F();return}if(tt(M)){Sa();return}if(M==="BACKSPACE"){n={mode:"main",shell:S({...L,taskPromptInput:L.taskPromptInput.slice(0,-1),taskPromptError:null})},F();return}if(M==="CTRL_R"){n={mode:"main",shell:S({...L,selectedRunner:Ss(L.selectedRunner,o),taskPromptError:null})},F();return}oo(M)&&(n={mode:"main",shell:S({...L,taskPromptInput:`${L.taskPromptInput}${M}`,taskPromptError:null})},F())}},Ra=M=>{if(n.mode!=="main")return;let L=n.shell.workspaceBrowser;if(L){if(M==="ESCAPE"){n={mode:"main",shell:S({...n.shell,workspaceBrowser:null,actionMessage:null})},F();return}if(M==="UP"||M==="k"){n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,selectedIndex:Math.max(0,L.selectedIndex-1),error:null}})},F();return}if(M==="DOWN"||M==="j"){let O=Math.max(0,L.entries.length-1);n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,selectedIndex:Math.min(O,L.selectedIndex+1),error:null}})},F();return}if(M==="LEFT"||M==="h"){ge(vt.dirname(L.cwd)).catch(O=>{let j=O instanceof Error?O.message:"Failed to open parent directory.";n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,error:j}})},F()});return}if(M==="RIGHT"||M==="l"||tt(M)){let O=L.entries[L.selectedIndex]??null;if(!O)return;if((M==="RIGHT"||M==="l")&&(O.kind==="directory"||O.kind==="repo")){ge(O.path).catch(j=>{let G=j instanceof Error?j.message:"Failed to open directory.";n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,error:G}})},F()});return}Dt(r,O.path).then(async j=>{await z();let G=j.repos[0]??null;n={mode:"main",shell:S({...n.shell,workspaceBrowser:null,selectedLeftItemId:`workspace:${j.workspace.id}`,selectedWorkspaceId:j.workspace.id,selectedRepoId:G?.id??null,selectedTaskId:null,selectedPtyTabId:null,actionMessage:`Registered workspace: ${j.workspace.name??j.workspace.id}`})},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to add workspace.";n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,error:G}})},F()})}}},Ys=M=>{let L=typeof M=="string"?M:"";if(n.mode==="main"&&n.shell.taskPromptInput!==null){Ta(L);return}if(n.mode==="main"&&n.shell.workspaceBrowser!==null){Ra(L);return}if(n.mode==="main"){let O=no(n.shell,L,te(n.shell));if(O.exit){Mr(0);return}if(O.detachTerminal){H.detach(),n={mode:"main",shell:S(O.state)},l(n.shell),F();return}if(n.shell.inputMode==="terminal"){if(O.changed){n={mode:"main",shell:S(O.state)},l(n.shell),F();return}if(f&&tt(L)){f=!1;return}f&&(f=!1),u=kf(L)?{key:L,at:Date.now()}:null;let j=yf(L,n.shell.terminal.scrolledBack??!1);if(j!==0){Or(j);return}H.writeKey(L);return}if(L==="CTRL_C"){Mr(0);return}if(L==="?"&&n.shell.inputMode==="control"){n={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:n.shell},K=!0,F();return}if(O.pause){n={mode:"overlay",variant:"pause",menuIndex:0,optionsMessage:null,shell:S(O.state)},K=!0,F();return}if(O.beginTaskPrompt){n={mode:"main",shell:S(O.state)},l(n.shell),F();return}if(O.openWorkspaceBrowser){ge(t).catch(j=>{let G=j instanceof Error?j.message:"Failed to browse workspaces.";n={mode:"main",shell:S({...O.state,workspaceBrowser:{cwd:t,entries:[],selectedIndex:0,error:G}})},F()});return}if(O.createPtyTab){xe(O.state,O.createPtyTabKind,O.createPtyTabRunner).then(j=>{_e(j)}).catch(j=>{let G=j instanceof Error?j.message:"Failed to create tab.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.closePtyTab){Ke(O.state).then(j=>{n={mode:"main",shell:j},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to close tab.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.refreshPullRequestChecks){rt(O.state).then(j=>{n={mode:"main",shell:j},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to refresh PR checks.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.closeTask){ba(O.state).then(j=>{n={mode:"main",shell:j},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to close task.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.removeWorkspace){ka(O.state).then(j=>{n={mode:"main",shell:j},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to remove workspace.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.attachTerminal){_e(O.state);return}if(O.refreshInspection){n={mode:"main",shell:S(O.state)},l(n.shell),F(),J(n.shell).catch(j=>{let G=j instanceof Error?j.message:"Failed to refresh inspection.";n={mode:"main",shell:S({...n.shell,actionMessage:G})},F()});return}O.changed&&(n={mode:"main",shell:S(O.state)},Q(n.shell).catch(()=>{}),l(n.shell),F());return}if(n.variant==="help"){n.viaOptions&&n.parentVariant?n={mode:"overlay",variant:"options",menuIndex:1,optionsMessage:null,shell:n.shell,parentVariant:n.parentVariant}:n.parentVariant?n={mode:"overlay",variant:n.parentVariant,menuIndex:1,optionsMessage:null,shell:n.shell}:n={mode:"main",shell:S(n.shell)},K=!0,F();return}if(n.variant==="options"){Pa(L);return}if(n.variant==="runners"){Ca(L);return}if(n.optionsMessage){(L==="ESCAPE"||tt(L))&&(n={...n,optionsMessage:null},F());return}if(L==="UP"||L==="k"){n={...n,menuIndex:Math.max(0,n.menuIndex-1)},F();return}if(L==="DOWN"||L==="j"){n={...n,menuIndex:Math.min(2,n.menuIndex+1)},F();return}if(L==="ESCAPE"){n.variant==="pause"&&(n={mode:"main",shell:S(n.shell)},K=!0,F());return}if(tt(L)){if(n.menuIndex===0){n={mode:"main",shell:S({...n.shell,inputMode:"control"})},K=!0,F(),W();return}if(n.menuIndex===1){let O=n.variant==="boot"||n.variant==="pause"?n.variant:void 0;n={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:n.shell,...O!==void 0?{parentVariant:O}:{}},K=!0,F();return}Mr(0)}};function Pa(M){if(n.mode!=="overlay"||n.variant!=="options")return;let L=ua(n.menuIndex,M);if(L.kind!=="noop"){if(L.kind==="render"){n={...n,menuIndex:L.menuIndex},F();return}if(L.kind==="back"){n.parentVariant&&(n={mode:"overlay",variant:n.parentVariant,menuIndex:1,optionsMessage:null,shell:n.shell},K=!0,F());return}if(L.kind==="help"){let O=n.parentVariant;n={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:n.shell,viaOptions:!0,...O!==void 0?{parentVariant:O}:{}},K=!0,F();return}if(L.kind==="runners"){let O=n.parentVariant;n={mode:"overlay",variant:"runners",menuIndex:0,optionsMessage:null,shell:n.shell,...O!==void 0?{parentVariant:O}:{}},K=!0,F()}}}function Ca(M){if(n.mode!=="overlay"||n.variant!=="runners")return;let L=ha(qt(n),s,M,o);if(L.kind!=="noop"){if(L.kind==="back"){let O=n.parentVariant;n={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:n.shell,...O!==void 0?{parentVariant:O}:{}},K=!0,F();return}if(L.kind==="render"){n={...n,runnerOptions:L.state},F();return}I(L.config).then(()=>{n.mode!=="overlay"||n.variant!=="runners"||(n={...n,runnerOptions:L.state},F())}).catch(O=>{if(n.mode!=="overlay"||n.variant!=="runners")return;let j=O instanceof Error?O.message:"Failed to save runner option.";n={...n,runnerOptions:{...qt(n),message:j}},F()})}}let Qs=M=>{let L=bf(M);if(n.mode!=="main"||n.shell.inputMode!=="terminal"||L.length===0)return;if(L.includes("")){H.detach(),f=!1,u=null,n={mode:"main",shell:S({...n.shell,inputMode:"control",actionMessage:null,focusedRegion:"center"})},l(n.shell),F();return}let O=vf(L);if(O!==0){Or(O);return}let j=Sf(L);if(j){f=!1,u={key:j,at:Date.now()},H.writeKey(j);return}if(f&&L!=="\r"&&L!==`
176
+ `)}function Ih(e,t,r,s,o){let p=` ${e}`;if(!t)return le(Xe(p,r),s,o);let k=`\u2713 ${t}`,i=ke(k),c=ke(p),d=Math.max(1,r-c-i-2),_=c+d+i+2>r?Hs(p,Math.max(0,r-i-3)):p,a=Math.max(1,r-ke(_)-i-2),b=`${_}${" ".repeat(a)}${vt(k,s,o)} `;return le(Xe(b,r),s,o)}function js(e,t){let r=new Array(e.height).fill(le(" ".repeat(e.width),t.color,re.overlay)),s=Fs(),o=Math.max(...t.menuItems.map(d=>d.length)),p=t.menuItems.map((d,_)=>`${_===t.menuIndex?">":" "} ${d.padEnd(o)}`),k=t.optionsMessage?["",t.optionsMessage]:[],i=[...s,"",t.subtitle,"",...p,...k],c=Math.max(1,Math.floor((e.height-i.length)/2));for(let d=0;d<i.length;d+=1){let _=na(i[d]??"",e.width);if(d<s.length){r[c+d]=le(_,t.color,re.overlayLogo);continue}if(d===s.length+1){r[c+d]=le(_,t.color,re.overlaySubtitle);continue}let a=d-(s.length+3),l=a>=0&&a<t.menuItems.length&&a===t.menuIndex?re.overlayMenuSelected:re.overlay;r[c+d]=le(_,t.color,l)}if(t.versionText){let d=t.updateText?" (update available)":"",_=`${t.versionText}${d} `,a=" ".repeat(Math.max(0,e.width-ke(_)));r[e.height-1]=le(`${a}${xr(_,t.color,re.overlay)}`,t.color,re.overlay)}return r.join(`
177
+ `)}function xh(e,t,r,s){let o=Oh(e.runners),p=1,k=e.leftTree.map(c=>Mh(c,t,s));return[...Cr(k,r-p),o]}function Eh(e,t,r,s){let o=e.tabs.find(u=>u.active)?.label??"AGENT",p=Gh(e.tabs),k="\u2500".repeat(o.length+1),i=`${" ".repeat(p)}${e.inputMode==="terminal"?vt(k,s,re.panelBg):Ir(k,s,re.panelMuted)}`,c=[`${Ir(e.centerHeader.tabLabel,s,re.panelBg)} ${e.centerHeader.taskId}`,e.centerHeader.repo].join(" \xB7 "),d=e.tabs.find(u=>u.active)?.id??"agent",_=e.centerHeader.tabLabel==="BROWSER"||!ao(d)?e.centerTranscript.map(u=>({...u})):Ah(e),a=Bh(e.tabs,s,e.focusedRegion==="center"),b=" engaged ",l=b.length+2,m=e.inputMode==="terminal"?`${xr(b,s,re.panelBg)}${vt("\u25CF",s,re.panelBg)} `:"",w=t-2,n=e.inputMode==="terminal"?" ".repeat(Math.max(0,w-ke(a)-l)):"",f=[{text:e.inputMode==="terminal"?`${a}${n}${m}`:a},{text:i,tone:"muted"},{text:c},qe(),..._];return Cr(f,r)}function Ah(e){if(e.terminal.error)return[{text:"terminal \u25B8 PTY unavailable"},qe(),{text:e.terminal.error},qe(),{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:aa(s.segments),segments:s.segments,fullBleed:!0}))}function Dh(e,t,r,s){let o=e.rightInspection?Lh(e.actionMessage?[...e.rightInspection.rows.slice(0,2),{id:"action-message",text:e.actionMessage},{id:"action-message-spacer",text:""},...e.rightInspection.rows.slice(2)]:e.rightInspection.rows,r):Cr([{text:"CONTEXT"},qe(),...e.rightContext.map(p=>$h(p,s)),...e.actionMessage?[qe(),{text:e.actionMessage}]:[]],r);return Cr(o,r)}function Lh(e,t){let r=e.slice(0,2),s=e.slice(2),o=Math.max(0,t-r.length),p=s.findIndex(i=>i.focused||i.selected),k=p===-1?0:Yh(p-Math.floor(o/2),0,Math.max(0,s.length-o));return[...r.map(i=>Xo(i)),...s.slice(k,k+o).map(i=>Xo(i))]}function Xo(e){let t=e.focused?"\u25B8 ":e.selected?"\u2022 ":" ",r=e.focused||e.selected?"selected":e.muted?"muted":"default",s=`${t}${e.text}`;if(e.segments)return{text:s,segments:[{text:t},...e.segments],tone:r};if(e.accentPrefix&&!e.muted){let o=e.text.indexOf(" "),p=o===-1?e.text:e.text.slice(0,o),k=o===-1?"":e.text.slice(o);return{text:s,segments:[{text:t},{text:p,style:{fg:"7aa2f7"}},{text:k}],tone:r}}return e.color?{text:s,segments:[{text:t},{text:e.text,style:{fg:e.color}}],tone:r}:{text:s,tone:r}}function Mh(e,t,r){let s=" ".repeat(e.indent??0),o=e.accentDot?" \u25CF":"",p=e.status?` ${e.status}`:"",k=e.accentDot?` ${vt("\u25CF",r,e.selected?re.panelSelected:re.panelBg)}`:"",i=e.prBadge?e.prBadge.reduce((l,m)=>l+ke(m.text),0):0,c=t-ke(p)-ke(o)-i,d=e.selected?e.text:e.focused?vt(e.text,r,re.panelBg):e.panelHeader?Ir(e.text,r,re.panelMuted):e.text,_=Xe(`${s}${d}`,Math.max(0,c)),a=e.selected?"selected":e.muted?"muted":"default";if(e.prBadge){let l=[{text:`${_}${p}${k}`},...e.prBadge];return{text:`${_}${p}${e.prBadge.map(w=>w.text).join("")}`,segments:l,tone:a}}return{text:`${_}${p}${k}`,tone:a}}function Oh(e){let t=e.map(s=>{let o=s.health>=1,p=parseInt(s.count,10),k=p>1?` (${p})`:"";return{text:`${o?"\u25CF":"\u25CB"} ${s.name}${k}`,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:re.success.fg}}):r.push({text:o.text,style:{fg:re.panelMuted.fg}})}return{text:t.map(s=>s.text).join(" "),segments:r,tone:"muted"}}function Bh(e,t,r){return e.map(s=>s.active?r?vt(s.label,t,re.panelBg):Ir(s.label,t,re.panelBg):xr(s.label,t,re.panelBg)).join(" ")}function $h(e,t){return{text:`${e.label.padEnd(8," ")} ${e.mutedValue?xr(e.value,t,re.panelBg):e.value}`}}function Sr(e,t,r,s){let o=Fh(s,e.tone??"default"),p=Nh(e,r,o);if(s==="left"){if(e.fullBleed)return le(Xe(p,t),r,o);let i=t-Tr-Rr;if(e.rightAlign){let d=ke(p),_=Math.max(0,i-d),a=`${" ".repeat(Tr)}${" ".repeat(_)}${p}${" ".repeat(Rr)}`;return le(a,r,o)}let c=`${" ".repeat(Tr)}${Xe(p,i)}${" ".repeat(Rr)}`;return le(c,r,o)}return s==="center"&&e.fullBleed?Wh(e,t,r,o):le(Xe(` ${p}`,t),r,o)}function Fh(e,t){return t==="selected"||t==="focused"?re.panelSelected:t==="muted"?re.panelMuted:re.panelBg}function Cr(e,t){let r=e.slice(0,t);for(;r.length<t;)r.push(qe());return r}function qe(){return{text:""}}function Nh(e,t,r){return e.segments?e.segments.map(s=>ra(s,t,r)).join(""):e.text}function Wh(e,t,r,s){let o=" ".repeat(Pr),p=Math.max(0,t-Pr*2);if(!e.segments)return le(`${o}${Xe(e.text,p)}${o}`,r,s);let k=Uh(e.segments,p),i=`${o}${k.map(c=>ra(c,r,s)).join("")}${o}`;return le(i,r,s)}function ra(e,t,r){let s=e.href?`${sa(e.href)}${e.text}${Qo}`:jh(e.text);return!t||!e.style?s:`${Ht(Vh(e.style,r))}${zh(e.style)}${s}${Ns}${Ht(r)}`}function jh(e){return e.replace(Ph,t=>{let[r,s]=Hh(t);return`${sa(r)}${r}${Qo}${s}`})}function Hh(e){let t=e.length;for(;t>0&&".,;:!?)]}".includes(e[t-1]??"");)t-=1;return[e.slice(0,t),e.slice(t)]}function sa(e){return`\x1B]8;;${e}\x1B\\`}function Uh(e,t){let r=qh(e,t);return Kh(r,t)}function qh(e,t){let r=[],s=t;for(let o of e){if(s<=0)break;let p=ke(o.text);if(p<=s){r.push(o),s-=p;continue}let k=Hs(o.text,s);k.length>0&&r.push({...o,text:k}),s=0}return r}function Kh(e,t){let r=ke(aa(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 Vh(e,t){let r=e.inverse?e.bg??t.bg:e.fg,s=e.inverse?e.fg??t.fg:e.bg,o={},p=r??t.fg,k=s??t.bg;return p&&(o.fg=p),k&&(o.bg=k),o}function zh(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 Gh(e){let t=0;for(let r of e){if(r.active)return t;t+=r.label.length+3}return 0}function na(e,t){let r=Math.max(0,t-ke(e)),s=Math.floor(r/2),o=r-s;return`${" ".repeat(s)}${e}${" ".repeat(o)}`}function Xe(e,t){let r=ke(e);return r>=t?Xh(e,t):e+" ".repeat(t-r)}function Xh(e,t){if(t<=0)return"";if(ke(e)<=t)return e;let r=oa(e);return Hs(r,Math.max(0,t-1))+"\u2026"}function ke(e){let t=0;for(let r of Array.from(oa(e)))t+=ia(r);return t}function Hs(e,t){let r="",s=0;for(let o of Array.from(e)){let p=ia(o);if(s+p>t)break;r+=o,s+=p}return r}function ia(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 Yh(e,t,r){return Math.min(Math.max(e,t),r)}function oa(e){return e.replace(Rh,"").replace(Sh,"")}function aa(e){return e.map(t=>t.text).join("")}function le(e,t,r){if(!t)return e;let s=Ht(r),o=e.replace(Th,`${Ns}${s}`);return`${s}${o}${Ns}`}function Ht(e){let t=[];return e.fg&&t.push(`38;2;${Yo(e.fg).join(";")}`),e.bg&&t.push(`48;2;${Yo(e.bg).join(";")}`),`\x1B[${t.join(";")}m`}function Yo(e){return[Number.parseInt(e.slice(0,2),16),Number.parseInt(e.slice(2,4),16),Number.parseInt(e.slice(4,6),16)]}function vt(e,t,r){return Us(e,t,re.success.fg,r)}function Ir(e,t,r){return Us(e,t,re.accent.fg,r)}function xr(e,t,r){return Us(e,t,re.mutedfg.fg,r)}function Us(e,t,r,s){if(!t)return e;let o=s.bg?{fg:r,bg:s.bg}:{fg:r};return`${Ht(o)}${e}${Ht(s)}`}var Qh="https://registry.npmjs.org/craig-cli/latest";var Er=null;function qs(){try{return"0.5.6"}catch{return"unknown"}}async function ca(){let e=qs(),t=Date.now();if(Er&&t-Er.cachedAt<36e5)return Er.result;let r=null;try{let o=await fetch(Qh,{signal:AbortSignal.timeout(5e3)});o.ok&&(r=(await o.json()).version??null)}catch{}let s={current:e,latest:r,updateAvailable:r!==null&&r!==e&&Jh(r,e)};return Er={result:s,cachedAt:t},s}function Jh(e,t){let r=d=>d.split(".").map(Number),[s=0,o=0,p=0]=r(e),[k=0,i=0,c=0]=r(t);return s!==k?s>k:o!==i?o>i:p>c}Ae();var Ks=["Runners","Help"];function Vs(e,t){return de.map(r=>{let s=ye(r),o=e.runners?.[r]?.enabled!==!1,p=e.runners?.[r]?.path?.trim(),k=t.pathEdit?.runner===r?`${t.pathEdit.value}_`:p&&p.length>0?p:`default (${s.executable})`;return`${s.displayName} ${o?"enabled":"disabled"} ${k}`})}function da(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 ua(e,t){return t==="UP"||t==="k"?{kind:"render",menuIndex:Math.max(0,e-1)}:t==="DOWN"||t==="j"?{kind:"render",menuIndex:Math.min(Ks.length-1,e+1)}:t==="ESCAPE"?{kind:"back"}:zs(t)?e===0?{kind:"runners"}:{kind:"help"}:{kind:"noop",menuIndex:e}}function ha(e,t,r,s){if(e.pathEdit)return Zh({...e,pathEdit:e.pathEdit},t,r);let o=Vs(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 i=de[e.menuIndex]??"codex";return{kind:"render",state:{...e,message:null,pathEdit:{runner:i,value:t.runners?.[i]?.path??""}}}}if(!zs(r))return{kind:"noop",state:e};let p=de[e.menuIndex]??"codex",k=t.runners?.[p]?.enabled!==!1;return k&&s.length<=1?{kind:"render",state:{...e,message:"At least one runner must stay enabled."}}:{kind:"save",config:ef(t,p,!k),state:{...e,message:`${ye(p).displayName} ${k?"disabled":"enabled"}.`}}}function Zh(e,t,r){if(r==="ESCAPE")return{kind:"render",state:la({...e,message:null})};if(r==="BACKSPACE")return{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:e.pathEdit.value.slice(0,-1)}}};if(zs(r)){let s=e.pathEdit.runner,o=e.pathEdit.value.trim();return{kind:"save",config:tf(t,s,o.length>0?o:null),state:la({...e,message:o.length>0?`${ye(s).displayName} executable saved.`:`${ye(s).displayName} executable reset to default.`})}}return rf(r)?{kind:"render",state:{...e,pathEdit:{...e.pathEdit,value:`${e.pathEdit.value}${r}`}}}:{kind:"noop",state:e}}function ef(e,t,r){return{...e,runners:{...e.runners??{},[t]:{...e.runners?.[t]??{},enabled:r}}}}function tf(e,t,r){let s={...e.runners?.[t]??{},...r?{path:r}:{}};return r||delete s.path,{...e,runners:{...e.runners??{},[t]:s}}}function la(e){let t={...e};return delete t.pathEdit,t}function zs(e){return e==="ENTER"||e==="RETURN"||e==="CTRL_M"||e==="\r"||e===`
178
+ `}function rf(e){return e.length===1&&e>=" "&&e!=="\x7F"}var af=sf(import.meta.url),cf=af("terminal-kit"),lf=cf.terminal;async function ga(e={}){if(!process.stdin.isTTY||!process.stdout.isTTY)throw new Error("Craig terminal shell requires a TTY.");let t=e.workspaceRoot??process.cwd(),r=Ve(t);await kt(t);let s=await Ne(r),o=pt(s),p=e.uiStateFile?await De({uiStateFile:e.uiStateFile}):null,k=Promise.resolve(),i=Promise.resolve(),c=await Ut(t,void 0,o),d=gr(ro(p,s),c);c=await Ut(t,d,o);let _=()=>{},a={workspaceRoot:t,onUpdate:()=>_(),resolveSessionSpec:(m,w)=>ff(c,w,t)},b=e.ptyRuntime??await jo({...a,paths:r}),l=m=>{if(!e.uiStateFile)return;p=so(p,m);let w=p;k=k.then(()=>Pe({uiStateFile:e.uiStateFile},w),()=>Pe({uiStateFile:e.uiStateFile},w)),k.catch(()=>{})};return new Promise(m=>{let w=e.terminal??lf,n={mode:"overlay",variant:"boot",menuIndex:0,optionsMessage:null,shell:gr(d,c)},g=!1,f=!1,u=null,h=0,y=0,T=null,C=null,x=null,N=null,B=null,D=!1,A=`Craig v${qs()}`,E=null,q=0,K=!0,Y=null,F=()=>{},H=b;_=()=>{n.mode==="main"&&(n={mode:"main",shell:v(n.shell)},x||(x=setTimeout(()=>{x=null,n.mode==="main"&&F()},50)))};function v(M){return Wt(M,H.getViewState(P(M)))}function P(M){let L=R(M);return L?L.ptyTabs.some(O=>O.id===M.activeTab)?M.activeTab:M.activeTab==="agent"||M.activeTab==="terminal"?L.ptyTabs.find(O=>O.kind===M.activeTab)?.id??M.selectedPtyTabId:M.selectedPtyTabId:M.selectedPtyTabId}function S(M){return v(df(M,c))}function R(M){return c.tasks.find(L=>L.id===M.selectedTaskId)??null}async function $(){let M=c.tasks.flatMap(L=>L.ptyTabs.map(O=>O.id));await H.pruneStale?.(M),await H.hydrateSessions?.(M)}function W(){$().catch(()=>{}).then(()=>{n.mode==="main"&&(n={mode:"main",shell:S(n.shell)},F())})}function U(M,L){return N&&(clearTimeout(N),N=null),L?(N=setTimeout(()=>{N=null,!(n.mode!=="main"||n.shell.footerToast!==L)&&(n={mode:"main",shell:S({...n.shell,footerToast:null})},F())},3e3),{...M,footerToast:L}):{...M,footerToast:null}}function V(M){let L=i.then(M,M);return i=L.then(()=>{},()=>{}),L}function te(M){let L=R(M),O=c.inspection,j=O&&O.taskId===L?.id?O:null,G=uf(j?.fileRows??[],M.collapsedFileTreePaths);return{leftItemIds:hf(c),centerTabIds:lo(L,M),ptyTabIds:L?.ptyTabs.map(Z=>Z.id)??[],filePathIds:j?.filePaths??[],fileTreeRowIds:G.map(Z=>Z.path),fileTreeFileIds:G.filter(Z=>Z.kind==="file").map(Z=>Z.path),fileTreeDirectoryIds:G.filter(Z=>Z.kind==="directory").map(Z=>Z.path),diffPathIds:j?.diffPaths??[],diffPathRanges:[],fileLineCount:j?.selectedFile.lines.length??0,diffLineCount:j?.selectedDiff.lines.length??0,reviewRowCount:Ro(M,L),pageRows:Math.max(5,ht(w.width,w.height).height-Be.topRailHeight-9),enabledRunnerIds:o,projectTargetIds:L?.repoTargets?.map(Z=>Z.repoId)??[]}}async function I(M){await nn(r,M),s=M,o=pt(s),c={...c,enabledRunnerIds:o},n.mode==="main"?n={mode:"main",shell:S({...n.shell,selectedRunner:o.includes(n.shell.selectedRunner)?n.shell.selectedRunner:st(s)})}:n={...n,shell:S({...n.shell,selectedRunner:o.includes(n.shell.selectedRunner)?n.shell.selectedRunner:st(s)})}}async function Q(M){let L=M.selectedTaskId;L&&await V(async()=>{let O=await he(r,L);!O.ptyTabs.some(j=>j.id===M.activeTab)||O.selectedPtyTabId===M.activeTab||await se(r,{...O,selectedPtyTabId:M.activeTab})})}async function z(){let M=(n.mode==="main",n.shell);c=await Ut(t,M,o),n.mode==="main"?n={mode:"main",shell:S(n.shell)}:n={...n,shell:S(n.shell)}}async function J(M){let L=++q,O=ma(c.tasks,M),j=c.inspection,G;if(O&&j?.taskId===O.id){let Z={selectedFilePath:M.selectedFilePath,selectedDiffPath:M.selectedDiffPath},ce=await Ii(O,j,Z);if(L!==q)return;G={...c,inspection:ce}}else if(G=await Ut(t,M,o),L!==q)return;c=G,n.mode==="main"&&(n={mode:"main",shell:S(n.shell)},l(n.shell),F())}async function ge(M){let L=await Rf(M);n.mode==="main"&&(n={mode:"main",shell:S({...n.shell,workspaceBrowser:L,activeTab:n.shell.selectedPtyTabId??n.shell.activeTab,actionMessage:null})},F())}async function _e(M){try{let L=S(M),O=R(L),j=L.selectedPtyTabId;if(O&&L.focusedRegion==="tasks"){let ce=O.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ce?j=ce.id:(O=await Xs(O),await z(),j=O.selectedPtyTabId)}O&&!j&&(O=await Xs(O),await z(),j=O.selectedPtyTabId);let G=S({...L,activeTab:j??L.activeTab,selectedPtyTabId:j,focusedRegion:j?"center":L.focusedRegion});if(!G.selectedTaskId||!j){n={mode:"main",shell:G},F();return}n={mode:"main",shell:Wt({...G,inputMode:"terminal"},H.getViewState(j))},l(n.shell);let Z=await H.ensureSession(G.selectedTaskId,j,Ar(ht(w.width,w.height)));f=Gs(j),u=null,n={mode:"main",shell:Wt({...G,inputMode:"terminal"},Z)},l(n.shell)}catch(L){let O=L instanceof Error?L.message:"Failed to start PTY.";M.selectedTaskId&&M.selectedPtyTabId&&Gs(M.selectedPtyTabId)&&(await Ye(M.selectedTaskId,O).catch(()=>{}),await z().catch(()=>{})),n={mode:"main",shell:io(S(M),O)},l(n.shell)}F()}async function Ye(M,L){await V(async()=>{let O=await he(r,M);await se(r,{...O,status:O.status==="running"?"draft":O.status,runnerSession:{...O.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:L})})}async function xe(M,L,O){let j=S(M);if(!j.selectedTaskId)throw new Error("Select a task before creating a tab.");let G=await V(async()=>{let Z=await he(r,j.selectedTaskId),ce=L??mf(Z,j.activeTab,j.preferredPtyTabKind),Ee=fa(Z,ce,O??void 0,s),Tt={...Z,ptyTabs:[...Z.ptyTabs,Ee],selectedPtyTabId:Ee.id};return await se(r,Tt),Tt});return await z(),S({...j,activeTab:G.selectedPtyTabId??j.activeTab,selectedPtyTabId:G.selectedPtyTabId,preferredPtyTabKind:G.ptyTabs.at(-1)?.kind??j.preferredPtyTabKind,focusedRegion:"center",actionMessage:`Created tab: ${G.ptyTabs.at(-1)?.title??"tab"}`})}async function Ke(M){let L=S(M);if(!L.selectedTaskId)throw new Error("Select a task before closing a tab.");let{closedTab:O,nextSelectedTab:j}=await V(async()=>{let G=await he(r,L.selectedTaskId),Z=G.ptyTabs.findIndex(Br=>Br.id===L.activeTab);if(Z===-1)throw new Error("Only PTY tabs can be closed.");let ce=G.ptyTabs[Z],Ee=G.ptyTabs.filter(Br=>Br.id!==ce.id),Tt=Ee[Math.min(Z,Ee.length-1)]??Ee[Z-1]??null;return await se(r,{...G,ptyTabs:Ee,selectedPtyTabId:Tt?.id??null}),{closedTab:ce,nextSelectedTab:Tt}});return H.disposeSession(O.id),await z(),S({...L,activeTab:j?.id??(L.openInspectionKind?"inspection":L.activeTab),selectedPtyTabId:j?.id??null,focusedRegion:"center",actionMessage:`Closed tab: ${O.title}`})}async function rt(M){let L=S(M);if(!L.selectedTaskId)throw new Error("Select a task before refreshing PR checks.");let O=R(L),j=null,G=null;if(O?.type==="project"&&O.repoTargets?.length){let Z=await ar(r,L.selectedTaskId);await z();let ce=Z.synced+Z.discovered+Z.notFound;G=`Refreshed ${Z.synced}/${ce} targets`}else{let{disposition:Z,task:ce}=await ss(r,L.selectedTaskId);await z(),j=Z==="not_found"?`No PR found for ${ce.branch}`:null,Z!=="not_found"&&(G=`Refreshed checks: ${pe(ce)?.requiredChecks.length??0} reported`)}return S({...U(L,G),focusedRegion:"inspector",inspectionMode:"review",selectedActionId:"refresh-checks",actionMessage:j})}async function wa(){if(D||n.mode!=="main")return;let M=c.tasks;D=!0;try{if(await ci(r,M),n.mode!=="main")return;c=await Ut(t,n.shell,o),n={mode:"main",shell:S(n.shell)},F()}catch{}finally{D=!1}}async function ba(M){let L=S(M);if(!L.selectedTaskId)throw new Error("Select a task before closing it.");let{taskBeforeClose:O,task:j}=await V(async()=>{let G=await he(r,L.selectedTaskId),Z=await Fi(r,L.selectedTaskId);return{taskBeforeClose:G,task:Z}});for(let G of O.ptyTabs)H.disposeSession(G.id);return await z(),S({...L,selectedActionId:"close-task",actionMessage:j.cleanup.preservedWorktree?`Archived task ${j.id}; worktree preserved`:`Archived task ${j.id}`})}async function ka(M){let L=S(M);if(!L.selectedWorkspaceId)throw new Error("Select a workspace before removing it.");if((await He(r,{workspaceId:L.selectedWorkspaceId,includeClosed:!0})).tasks.length>0)throw new Error(`Cannot remove workspace ${L.selectedWorkspaceId} while task records still reference it.`);await Mt(r,L.selectedWorkspaceId);let j=await Ot(r,L.selectedWorkspaceId);return await z(),S({...L,selectedWorkspaceId:null,selectedRepoId:null,selectedTaskId:null,selectedPtyTabId:null,selectedLeftItemId:null,actionMessage:`Removed workspace ${j.workspaceId}`})}async function Xs(M){let L=M.ptyTabs.find(G=>G.kind==="agent")??null;if(L){let G={...M,selectedPtyTabId:L.id};return await V(async()=>{let Z=await he(r,M.id),ce=Z.ptyTabs.find(Ee=>Ee.kind==="agent")??null;ce&&await se(r,{...Z,selectedPtyTabId:ce.id})}),G}let O=fa(M,"agent",void 0,s),j={...M,ptyTabs:[...M.ptyTabs,O],selectedPtyTabId:O.id};return await V(async()=>{let G=await he(r,M.id),Z=G.ptyTabs.find(ce=>ce.kind==="agent")??null;if(Z){await se(r,{...G,selectedPtyTabId:Z.id});return}await se(r,{...G,ptyTabs:[...G.ptyTabs,O],selectedPtyTabId:O.id})}),j}F=()=>{ya();let M=ht(w.width,w.height),L=n.mode==="main"?ta(M,wo(S(n.shell),c),{centerOnly:n.shell.centerZoomed}):n.variant==="boot"?Jo(M,{menuIndex:n.menuIndex,optionsMessage:n.optionsMessage,versionText:A,updateText:E}):n.variant==="pause"?Zo(M,{menuIndex:n.menuIndex,optionsMessage:n.optionsMessage,versionText:A,updateText:E}):n.variant==="options"?Ws(M,{menuIndex:n.menuIndex,optionsMenuItems:Ks}):n.variant==="runners"?Ws(M,{menuIndex:qt(n).menuIndex,optionsMenuItems:Vs(s,qt(n)),optionsMessage:da(qt(n)),optionsSubtitle:"Runners"}):ea(M);K&&(w.moveTo(1,1),w.eraseDisplayBelow(),K=!1),w.noFormat(wf(L)),w.hideCursor(!0)};function ya(){let M=n.mode==="main"&&n.shell.inputMode==="terminal"?"terminal":"control";M!==Y&&(Y=M,w.grabInput(M==="terminal"?{mouse:"button"}:!0))}let va=()=>{process.stdout.off("resize",en),process.off("SIGCONT",tn),w.removeListener("key",Ys),w.removeListener("unknown",Qs),w.removeListener("mouse",Js),T&&(clearTimeout(T),T=null),C&&(clearTimeout(C),C=null),x&&(clearTimeout(x),x=null),N&&(clearTimeout(N),N=null),B&&(clearInterval(B),B=null),H.disposeAll(),w.grabInput(!1),w.hideCursor(!1),w.fullscreen(!1)},Mr=M=>{va(),m(M)},Sa=async()=>{if(n.mode!=="main"||g)return;let M=n.shell,L=M.taskPromptInput?.trim()??"";if(!M.selectedRepoId&&!M.selectedWorkspaceId){n={mode:"main",shell:S({...M,taskPromptError:"Select a workspace first."})},F();return}if(L.length===0){n={mode:"main",shell:S({...M,taskPromptError:"Task prompt cannot be empty."})},F();return}g=!0,n={mode:"main",shell:S({...M,actionMessage:`Creating ${M.selectedRunner} task in ${M.selectedWorkspaceId??M.selectedRepoId}...`})},F();let O=null;try{O=await _f(r,M.selectedRepoId,M.selectedWorkspaceId,L,M.selectedRunner),await z();let j=S({...n.shell,selectedRepoId:O.repoId,selectedWorkspaceId:O.workspaceId,selectedTaskId:O.id,selectedPtyTabId:O.selectedPtyTabId,selectedLeftItemId:`task:${O.id}`,activeTab:O.selectedPtyTabId??"agent",inputMode:"terminal",focusedRegion:"center",taskPromptInput:null,taskPromptError:null,actionMessage:null}),G=await H.ensureSession(O.id,j.selectedPtyTabId??_a(O,"agent"),Ar(ht(w.width,w.height)));f=Gs(j.selectedPtyTabId),n={mode:"main",shell:Wt(j,G)},l(n.shell)}catch(j){j instanceof Dr&&(O=j.task);let G=j instanceof Error?j.message:"Failed to create task.";O&&(await se(r,{...O,status:"draft",runnerSession:{...O.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:G}).catch(()=>{}),await z().catch(()=>{})),n={mode:"main",shell:S({...n.shell,inputMode:"control",selectedTaskId:O?.id??n.shell.selectedTaskId,selectedPtyTabId:O?.selectedPtyTabId??n.shell.selectedPtyTabId,selectedLeftItemId:O?`task:${O.id}`:n.shell.selectedLeftItemId,activeTab:O?.selectedPtyTabId??n.shell.activeTab,taskPromptInput:O?null:"",taskPromptError:G,actionMessage:null})}}finally{g=!1,F()}},Ta=M=>{if(n.mode!=="main")return;let L=n.shell;if(L.taskPromptInput!==null){if(M==="ESCAPE"){n={mode:"main",shell:S({...L,taskPromptInput:null,taskPromptError:null,actionMessage:null})},F();return}if(tt(M)){Sa();return}if(M==="BACKSPACE"){n={mode:"main",shell:S({...L,taskPromptInput:L.taskPromptInput.slice(0,-1),taskPromptError:null})},F();return}if(M==="CTRL_R"){n={mode:"main",shell:S({...L,selectedRunner:Ss(L.selectedRunner,o),taskPromptError:null})},F();return}oo(M)&&(n={mode:"main",shell:S({...L,taskPromptInput:`${L.taskPromptInput}${M}`,taskPromptError:null})},F())}},Ra=M=>{if(n.mode!=="main")return;let L=n.shell.workspaceBrowser;if(L){if(M==="ESCAPE"){n={mode:"main",shell:S({...n.shell,workspaceBrowser:null,actionMessage:null})},F();return}if(M==="UP"||M==="k"){n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,selectedIndex:Math.max(0,L.selectedIndex-1),error:null}})},F();return}if(M==="DOWN"||M==="j"){let O=Math.max(0,L.entries.length-1);n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,selectedIndex:Math.min(O,L.selectedIndex+1),error:null}})},F();return}if(M==="LEFT"||M==="h"){ge(St.dirname(L.cwd)).catch(O=>{let j=O instanceof Error?O.message:"Failed to open parent directory.";n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,error:j}})},F()});return}if(M==="RIGHT"||M==="l"||tt(M)){let O=L.entries[L.selectedIndex]??null;if(!O)return;if((M==="RIGHT"||M==="l")&&(O.kind==="directory"||O.kind==="repo")){ge(O.path).catch(j=>{let G=j instanceof Error?j.message:"Failed to open directory.";n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,error:G}})},F()});return}Lt(r,O.path).then(async j=>{await z();let G=j.repos[0]??null;n={mode:"main",shell:S({...n.shell,workspaceBrowser:null,selectedLeftItemId:`workspace:${j.workspace.id}`,selectedWorkspaceId:j.workspace.id,selectedRepoId:G?.id??null,selectedTaskId:null,selectedPtyTabId:null,actionMessage:`Registered workspace: ${j.workspace.name??j.workspace.id}`})},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to add workspace.";n={mode:"main",shell:S({...n.shell,workspaceBrowser:{...L,error:G}})},F()})}}},Ys=M=>{let L=typeof M=="string"?M:"";if(n.mode==="main"&&n.shell.taskPromptInput!==null){Ta(L);return}if(n.mode==="main"&&n.shell.workspaceBrowser!==null){Ra(L);return}if(n.mode==="main"){let O=no(n.shell,L,te(n.shell));if(O.exit){Mr(0);return}if(O.detachTerminal){H.detach(),n={mode:"main",shell:S(O.state)},l(n.shell),F();return}if(n.shell.inputMode==="terminal"){if(O.changed){n={mode:"main",shell:S(O.state)},l(n.shell),F();return}if(f&&tt(L)){f=!1;return}f&&(f=!1),u=kf(L)?{key:L,at:Date.now()}:null;let j=yf(L,n.shell.terminal.scrolledBack??!1);if(j!==0){Or(j);return}H.writeKey(L);return}if(L==="CTRL_C"){Mr(0);return}if(L==="?"&&n.shell.inputMode==="control"){n={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:n.shell},K=!0,F();return}if(O.pause){n={mode:"overlay",variant:"pause",menuIndex:0,optionsMessage:null,shell:S(O.state)},K=!0,F();return}if(O.beginTaskPrompt){n={mode:"main",shell:S(O.state)},l(n.shell),F();return}if(O.openWorkspaceBrowser){ge(t).catch(j=>{let G=j instanceof Error?j.message:"Failed to browse workspaces.";n={mode:"main",shell:S({...O.state,workspaceBrowser:{cwd:t,entries:[],selectedIndex:0,error:G}})},F()});return}if(O.createPtyTab){xe(O.state,O.createPtyTabKind,O.createPtyTabRunner).then(j=>{_e(j)}).catch(j=>{let G=j instanceof Error?j.message:"Failed to create tab.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.closePtyTab){Ke(O.state).then(j=>{n={mode:"main",shell:j},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to close tab.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.refreshPullRequestChecks){rt(O.state).then(j=>{n={mode:"main",shell:j},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to refresh PR checks.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.closeTask){ba(O.state).then(j=>{n={mode:"main",shell:j},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to close task.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.removeWorkspace){ka(O.state).then(j=>{n={mode:"main",shell:j},l(n.shell),F()}).catch(j=>{let G=j instanceof Error?j.message:"Failed to remove workspace.";n={mode:"main",shell:S({...O.state,actionMessage:G})},F()});return}if(O.attachTerminal){_e(O.state);return}if(O.refreshInspection){n={mode:"main",shell:S(O.state)},l(n.shell),F(),J(n.shell).catch(j=>{let G=j instanceof Error?j.message:"Failed to refresh inspection.";n={mode:"main",shell:S({...n.shell,actionMessage:G})},F()});return}O.changed&&(n={mode:"main",shell:S(O.state)},Q(n.shell).catch(()=>{}),l(n.shell),F());return}if(n.variant==="help"){n.viaOptions&&n.parentVariant?n={mode:"overlay",variant:"options",menuIndex:1,optionsMessage:null,shell:n.shell,parentVariant:n.parentVariant}:n.parentVariant?n={mode:"overlay",variant:n.parentVariant,menuIndex:1,optionsMessage:null,shell:n.shell}:n={mode:"main",shell:S(n.shell)},K=!0,F();return}if(n.variant==="options"){Pa(L);return}if(n.variant==="runners"){Ca(L);return}if(n.optionsMessage){(L==="ESCAPE"||tt(L))&&(n={...n,optionsMessage:null},F());return}if(L==="UP"||L==="k"){n={...n,menuIndex:Math.max(0,n.menuIndex-1)},F();return}if(L==="DOWN"||L==="j"){n={...n,menuIndex:Math.min(2,n.menuIndex+1)},F();return}if(L==="ESCAPE"){n.variant==="pause"&&(n={mode:"main",shell:S(n.shell)},K=!0,F());return}if(tt(L)){if(n.menuIndex===0){n={mode:"main",shell:S({...n.shell,inputMode:"control"})},K=!0,F(),W();return}if(n.menuIndex===1){let O=n.variant==="boot"||n.variant==="pause"?n.variant:void 0;n={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:n.shell,...O!==void 0?{parentVariant:O}:{}},K=!0,F();return}Mr(0)}};function Pa(M){if(n.mode!=="overlay"||n.variant!=="options")return;let L=ua(n.menuIndex,M);if(L.kind!=="noop"){if(L.kind==="render"){n={...n,menuIndex:L.menuIndex},F();return}if(L.kind==="back"){n.parentVariant&&(n={mode:"overlay",variant:n.parentVariant,menuIndex:1,optionsMessage:null,shell:n.shell},K=!0,F());return}if(L.kind==="help"){let O=n.parentVariant;n={mode:"overlay",variant:"help",menuIndex:0,optionsMessage:null,shell:n.shell,viaOptions:!0,...O!==void 0?{parentVariant:O}:{}},K=!0,F();return}if(L.kind==="runners"){let O=n.parentVariant;n={mode:"overlay",variant:"runners",menuIndex:0,optionsMessage:null,shell:n.shell,...O!==void 0?{parentVariant:O}:{}},K=!0,F()}}}function Ca(M){if(n.mode!=="overlay"||n.variant!=="runners")return;let L=ha(qt(n),s,M,o);if(L.kind!=="noop"){if(L.kind==="back"){let O=n.parentVariant;n={mode:"overlay",variant:"options",menuIndex:0,optionsMessage:null,shell:n.shell,...O!==void 0?{parentVariant:O}:{}},K=!0,F();return}if(L.kind==="render"){n={...n,runnerOptions:L.state},F();return}I(L.config).then(()=>{n.mode!=="overlay"||n.variant!=="runners"||(n={...n,runnerOptions:L.state},F())}).catch(O=>{if(n.mode!=="overlay"||n.variant!=="runners")return;let j=O instanceof Error?O.message:"Failed to save runner option.";n={...n,runnerOptions:{...qt(n),message:j}},F()})}}let Qs=M=>{let L=bf(M);if(n.mode!=="main"||n.shell.inputMode!=="terminal"||L.length===0)return;if(L.includes("")){H.detach(),f=!1,u=null,n={mode:"main",shell:S({...n.shell,inputMode:"control",actionMessage:null,focusedRegion:"center"})},l(n.shell),F();return}let O=vf(L);if(O!==0){Or(O);return}let j=Sf(L);if(j){f=!1,u={key:j,at:Date.now()},H.writeKey(j);return}if(f&&L!=="\r"&&L!==`
179
179
  `&&L!==`\r
180
- `&&(f=!1),Tf(f,u,L)){f=!1;return}H.write(L)},Js=M=>{if(n.mode!=="main")return;if(n.shell.inputMode==="control"){xa(pa(M));return}let L=pa(M);L!==0&&Or(L)};function Or(M){h+=M,!T&&(T=setTimeout(()=>{T=null;let L=h;h=0,L!==0&&(Ia(L),F())},16))}function Ia(M){H.scrollViewport(M),n={mode:"main",shell:v(n.shell)}}function Zs(){K=!0,w.fullscreen(!0)}function xa(M){M!==0&&(y+=M,!C&&(C=setTimeout(()=>{C=null;let L=y;if(y=0,L===0||n.mode!=="main"||n.shell.inputMode!=="control")return;let O=et(n.shell,L,te(n.shell));if(O.changed){if(O.refreshInspection){n={mode:"main",shell:S(O.state)},l(n.shell),F(),J(n.shell).catch(j=>{let G=j instanceof Error?j.message:"Failed to refresh inspection.";n={mode:"main",shell:S({...n.shell,actionMessage:G})},F()});return}n={mode:"main",shell:S(O.state)},l(n.shell),F()}},16)))}let en=()=>{Zs(),n.mode==="main"&&n.shell.inputMode==="terminal"&&(H.resize(Ar(ht(w.width,w.height))),n={mode:"main",shell:v(n.shell)}),F()},tn=()=>{Zs(),n.mode==="main"&&n.shell.inputMode==="terminal"&&(H.resize(Ar(ht(w.width,w.height))),n={mode:"main",shell:v(n.shell)}),F()};process.stdout.on("resize",en),process.on("SIGCONT",tn),w.grabInput(!0),Y="control",w.hideCursor(!0),w.fullscreen(!0),w.on("key",Ys),w.on("unknown",Qs),w.on("mouse",Js),B=setInterval(()=>{wa()},(s.github?.watchIntervalSeconds??5)*1e3),ca().then(M=>{M.updateAvailable&&M.latest&&(E=`Update available: v${M.latest}`,F())}),$().catch(()=>{}),F()})}async function Ut(e,t,r){let s=Ve(e),[o,p,k]=await Promise.all([lt(s),Me(s),He(s)]),i=ma(k.tasks,t),c=t?{selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath}:{},d=i?await xi(i,c):null;return{workspaceRoot:e,workspaces:p.filter(_=>_.status==="active"),repos:o,tasks:k.tasks,inspection:d,...r?{enabledRunnerIds:r}:{}}}function ma(e,t){return t?.selectedTaskId?e.find(r=>r.id===t.selectedTaskId)??null:null}function df(e,t){return gr(e,t)}function uf(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let p=1;p<o.length;p+=1)if(r.has(o.slice(0,p).join("/")))return!1;return!0})}function hf(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="project"&&t.push(`new-task-workspace:${r.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 ff(e,t,r){let s=e.tasks.find(i=>i.ptyTabs.some(c=>c.id===t))??null,o=s?.ptyTabs.find(i=>i.id===t)??null,p=s?.worktreePath??r,k=o?.kind==="agent"?gf(o):[];return s?.type==="project"?{cwd:p,command:k,env:{GIT_CEILING_DIRECTORIES:pf(process.env.GIT_CEILING_DIRECTORIES,p)}}:{cwd:p,command:k}}function pf(e,t){let r=(e??"").split(vt.delimiter).filter(s=>s.length>0);return r.includes(t)?r.join(vt.delimiter):[...r,t].join(vt.delimiter)}function gf(e){return e.command.length>0?e.command:["codex"]}function qt(e){return e.runnerOptions??{menuIndex:e.menuIndex,message:e.optionsMessage}}function mf(e,t,r){return e.ptyTabs.find(s=>s.id===t)?.kind??r}function fa(e,t,r,s={}){let o=r??e.runner,p=ye(o),k=t==="agent"?p.defaultAgentTitle:"Terminal",i=t==="agent"&&r&&r!==e.runner?`${e.id}:${r}`:`${e.id}:${t}`,c=new Set(e.ptyTabs.map(l=>l.id)),d=1,_=i;for(;c.has(_);)d+=1,_=`${i}-${d}`;let a=new Date().toISOString(),b=r&&r!==e.runner?r:void 0;return{id:_,kind:t,...b?{runner:b}:{},title:d===1?k:`${k} ${d}`,command:t==="agent"?we(o,void 0,s):[],createdAt:a,updatedAt:a}}async function _f(e,t,r,s,o){let p=await Ne(e);Kt(o,p);let k=r?await tr(e,r,s,{runner:o,config:p}):await It(e,t??"",s,{runner:o,config:p});try{let d=at();await ee(ct(Fr(o,p).executable,{cwd:k.repoRoot,env:d}),["--help"],{cwd:k.repoRoot,env:d})}catch(d){let _=d instanceof Error?d.message:"Failed to start runner.",a={...k.task,status:"draft",runnerSession:{...k.task.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:_};throw await se(e,a),new Dr(_,a)}let i=_a(k.task,"agent"),c={...k.task,status:"running",selectedPtyTabId:i,runnerSession:{...k.task.runnerSession,startedAt:new Date().toISOString(),lastKnownState:"running"}};return await se(e,c),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??je(),version:1,selectedRepoId:c.repoId,selectedWorkspaceId:c.workspaceId,selectedTaskId:c.id,selectedPtyTabId:c.selectedPtyTabId,inputMode:"control",focusedRegion:"center",activeTab:c.selectedPtyTabId??"agent",selectedActionId:"commit",updatedAt:new Date().toISOString()}),c}var Dr=class extends Error{task;constructor(t,r){super(t),this.name="InteractiveTaskStartupError",this.task=r}};function _a(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 Ar(e){return{columns:Math.max(20,e.width-Be.leftWidth-Be.rightWidth-Be.dividerWidth-Pr*2),rows:Math.max(5,e.height-Be.topRailHeight-5)}}function wf(e){return e.split(`
180
+ `&&(f=!1),Tf(f,u,L)){f=!1;return}H.write(L)},Js=M=>{if(n.mode!=="main")return;if(n.shell.inputMode==="control"){xa(pa(M));return}let L=pa(M);L!==0&&Or(L)};function Or(M){h+=M,!T&&(T=setTimeout(()=>{T=null;let L=h;h=0,L!==0&&(Ia(L),F())},16))}function Ia(M){H.scrollViewport(M),n={mode:"main",shell:v(n.shell)}}function Zs(){K=!0,w.fullscreen(!0)}function xa(M){M!==0&&(y+=M,!C&&(C=setTimeout(()=>{C=null;let L=y;if(y=0,L===0||n.mode!=="main"||n.shell.inputMode!=="control")return;let O=et(n.shell,L,te(n.shell));if(O.changed){if(O.refreshInspection){n={mode:"main",shell:S(O.state)},l(n.shell),F(),J(n.shell).catch(j=>{let G=j instanceof Error?j.message:"Failed to refresh inspection.";n={mode:"main",shell:S({...n.shell,actionMessage:G})},F()});return}n={mode:"main",shell:S(O.state)},l(n.shell),F()}},16)))}let en=()=>{Zs(),n.mode==="main"&&n.shell.inputMode==="terminal"&&(H.resize(Ar(ht(w.width,w.height))),n={mode:"main",shell:v(n.shell)}),F()},tn=()=>{Zs(),n.mode==="main"&&n.shell.inputMode==="terminal"&&(H.resize(Ar(ht(w.width,w.height))),n={mode:"main",shell:v(n.shell)}),F()};process.stdout.on("resize",en),process.on("SIGCONT",tn),w.grabInput(!0),Y="control",w.hideCursor(!0),w.fullscreen(!0),w.on("key",Ys),w.on("unknown",Qs),w.on("mouse",Js),B=setInterval(()=>{wa()},(s.github?.watchIntervalSeconds??5)*1e3),ca().then(M=>{M.updateAvailable&&M.latest&&(E=`Update available: v${M.latest}`,F())}),$().catch(()=>{}),F()})}async function Ut(e,t,r){let s=Ve(e),[o,p,k]=await Promise.all([lt(s),Me(s),He(s)]),i=ma(k.tasks,t),c=t?{selectedFilePath:t.selectedFilePath,selectedDiffPath:t.selectedDiffPath}:{},d=i?await xi(i,c):null;return{workspaceRoot:e,workspaces:p.filter(_=>_.status==="active"),repos:o,tasks:k.tasks,inspection:d,...r?{enabledRunnerIds:r}:{}}}function ma(e,t){return t?.selectedTaskId?e.find(r=>r.id===t.selectedTaskId)??null:null}function df(e,t){return gr(e,t)}function uf(e,t){let r=new Set(t);return e.filter(s=>{let o=s.path.split("/");for(let p=1;p<o.length;p+=1)if(r.has(o.slice(0,p).join("/")))return!1;return!0})}function hf(e){let t=[];if(e.workspaces?.length)for(let r of e.workspaces){t.push(`workspace:${r.id}`);for(let s of e.tasks.filter(o=>o.workspaceId===r.id))t.push(`task:${s.id}`);r.kind==="project"&&t.push(`new-task-workspace:${r.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 ff(e,t,r){let s=e.tasks.find(i=>i.ptyTabs.some(c=>c.id===t))??null,o=s?.ptyTabs.find(i=>i.id===t)??null,p=s?.worktreePath??r,k=o?.kind==="agent"?gf(o):[];return s?.type==="project"?{cwd:p,command:k,env:{GIT_CEILING_DIRECTORIES:pf(process.env.GIT_CEILING_DIRECTORIES,p)}}:{cwd:p,command:k}}function pf(e,t){let r=(e??"").split(St.delimiter).filter(s=>s.length>0);return r.includes(t)?r.join(St.delimiter):[...r,t].join(St.delimiter)}function gf(e){return e.command.length>0?e.command:["codex"]}function qt(e){return e.runnerOptions??{menuIndex:e.menuIndex,message:e.optionsMessage}}function mf(e,t,r){return e.ptyTabs.find(s=>s.id===t)?.kind??r}function fa(e,t,r,s={}){let o=r??e.runner,p=ye(o),k=t==="agent"?p.defaultAgentTitle:"Terminal",i=t==="agent"&&r&&r!==e.runner?`${e.id}:${r}`:`${e.id}:${t}`,c=new Set(e.ptyTabs.map(l=>l.id)),d=1,_=i;for(;c.has(_);)d+=1,_=`${i}-${d}`;let a=new Date().toISOString(),b=r&&r!==e.runner?r:void 0;return{id:_,kind:t,...b?{runner:b}:{},title:d===1?k:`${k} ${d}`,command:t==="agent"?we(o,void 0,s):[],createdAt:a,updatedAt:a}}async function _f(e,t,r,s,o){let p=await Ne(e);Kt(o,p);let k=r?await tr(e,r,s,{runner:o,config:p}):await xt(e,t??"",s,{runner:o,config:p});try{let d=at();await ee(ct(Fr(o,p).executable,{cwd:k.repoRoot,env:d}),["--help"],{cwd:k.repoRoot,env:d})}catch(d){let _=d instanceof Error?d.message:"Failed to start runner.",a={...k.task,status:"draft",runnerSession:{...k.task.runnerSession,lastKnownState:"failed",exitedAt:new Date().toISOString()},lastFailureReason:_};throw await se(e,a),new Dr(_,a)}let i=_a(k.task,"agent"),c={...k.task,status:"running",selectedPtyTabId:i,runnerSession:{...k.task.runnerSession,startedAt:new Date().toISOString(),lastKnownState:"running"}};return await se(e,c),await Pe({uiStateFile:e.uiStateFile},{...await De({uiStateFile:e.uiStateFile})??je(),version:1,selectedRepoId:c.repoId,selectedWorkspaceId:c.workspaceId,selectedTaskId:c.id,selectedPtyTabId:c.selectedPtyTabId,inputMode:"control",focusedRegion:"center",activeTab:c.selectedPtyTabId??"agent",selectedActionId:"commit",updatedAt:new Date().toISOString()}),c}var Dr=class extends Error{task;constructor(t,r){super(t),this.name="InteractiveTaskStartupError",this.task=r}};function _a(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 Ar(e){return{columns:Math.max(20,e.width-Be.leftWidth-Be.rightWidth-Be.dividerWidth-Pr*2),rows:Math.max(5,e.height-Be.topRailHeight-5)}}function wf(e){return e.split(`
181
181
  `).map((t,r)=>`\x1B[${r+1};1H${t}`).join("")}function bf(e){return typeof e=="string"?e:Buffer.isBuffer(e)?e.toString("utf8"):""}function kf(e){return e.length===1||tt(e)||e==="BACKSPACE"||e==="TAB"}function Gs(e){return typeof e=="string"&&new RegExp(`:(?:agent|${de.join("|")})(?:-\\d+)?$`).test(e)}function yf(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 pa(e){return e==="MOUSE_WHEEL_UP"?-3:e==="MOUSE_WHEEL_DOWN"?3:0}function vf(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 Sf(e){return e==="\x1B[13;2u"?"SHIFT_ENTER":null}function Tf(e,t,r){return r.length===0?!1:e&&(r==="\r"||r===`
182
182
  `||r===`\r
183
- `)?!0:!t||Date.now()-t.at>=30?!1:r===t.key?!0:r.length<=4&&r.split("").every(s=>s===t.key)}async function Rf(e){let t=await nf(e,{withFileTypes:!0}),r=[];for(let s of t){if(!s.isDirectory())continue;let o=vt.join(e,s.name);r.push({name:s.name,path:o,kind:await Pf(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 Pf(e){let t=vt.join(e,".git");return await of(t).catch(()=>null)!==null}function Lr(){return process.cwd()}async function Cf(){try{if(process.argv[2]==="__craig-daemon"){let i=process.argv[3]??Lr(),c=Ve(i);return await kt(i),await Ho(c),0}if(process.argv[2]==="__craig-daemon-shutdown"){let i=process.argv[3]??Lr(),c=Ve(i);return await kt(i),await Uo(c),0}let e=sn(process.argv.slice(2)),t=Lr(),r=Ve(t),s=await kt(t),o={paths:r};if(e.mode==="interactive")return await ga({uiStateFile:r.uiStateFile,workspaceRoot:r.workspaceRoot});if(!e.command)throw new Error("Command mode requires a command.");let p=await Ri(e.command,o),k=Pi(p);return k.length>0&&process.stdout.write(`${k}
183
+ `)?!0:!t||Date.now()-t.at>=30?!1:r===t.key?!0:r.length<=4&&r.split("").every(s=>s===t.key)}async function Rf(e){let t=await nf(e,{withFileTypes:!0}),r=[];for(let s of t){if(!s.isDirectory())continue;let o=St.join(e,s.name);r.push({name:s.name,path:o,kind:await Pf(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 Pf(e){let t=St.join(e,".git");return await of(t).catch(()=>null)!==null}function Lr(){return process.cwd()}async function Cf(){try{if(process.argv[2]==="__craig-daemon"){let i=process.argv[3]??Lr(),c=Ve(i);return await kt(i),await Ho(c),0}if(process.argv[2]==="__craig-daemon-shutdown"){let i=process.argv[3]??Lr(),c=Ve(i);return await kt(i),await Uo(c),0}let e=sn(process.argv.slice(2)),t=Lr(),r=Ve(t),s=await kt(t),o={paths:r};if(e.mode==="interactive")return await ga({uiStateFile:r.uiStateFile,workspaceRoot:r.workspaceRoot});if(!e.command)throw new Error("Command mode requires a command.");let p=await Ri(e.command,o),k=Pi(p);return k.length>0&&process.stdout.write(`${k}
184
184
  `),0}catch(e){let t=e instanceof Error?e.message:"Unknown Craig error";return process.stderr.write(`${t}
185
185
  `),1}}var If=await Cf();process.exit(If);