@sourcegraph/amp 0.0.1766188897-g93b033 → 0.0.1766203476-g15bfc0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +9 -9
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -3903,11 +3903,11 @@ Actual: ${X}`)}async function zU8(J,Q,Y){let{execSync:Z}=await import("node:ch
|
|
|
3903
3903
|
${B}`;if(X==="pnpm"&&B.includes("Unable to find the global bin directory"))M+=`
|
|
3904
3904
|
|
|
3905
3905
|
Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
|
|
3906
|
-
npm install -g @sourcegraph/amp`;K(Error(M))}},error:(U)=>{if(!H)H=!0,K(Error(`Failed to spawn ${X}: ${U.message}`))},complete:()=>{if(!H)H=!0,V()}})})}N0();N0();async function t91(J,Q){let Z=Q||"https://registry.npmjs.org";try{let X=new AbortController,G=setTimeout(()=>X.abort(),5000),V=await fetch(`${Z}/@sourcegraph/amp`,{signal:X.signal});if(clearTimeout(G),!V.ok)return{hasUpdate:!1,currentVersion:J,source:"npm"};let K=await V.json(),q=K["dist-tags"]?.latest;if(!q)return{hasUpdate:!1,currentVersion:J,source:"npm"};let W=MU8(J,q),H=W<0,F,U;if(K.time){let B=K.time[J],M=K.time[q],L=Date.now();if(B)F=Math.floor((L-new Date(B).getTime())/3600000);if(M)U=Math.floor((L-new Date(M).getTime())/3600000)}return v.info("NPM version comparison",{currentVersion:J,latestVersion:q,compareResult:W,hasUpdate:H,currentVersionAge:F,latestVersionAge:U}),{hasUpdate:H,latestVersion:q,currentVersion:J,currentVersionAge:F,latestVersionAge:U,source:"npm"}}catch(X){return v.debug("Error checking npm version",{error:X}),{hasUpdate:!1,currentVersion:J,source:"npm"}}}function MU8(J,Q){let Y=(V)=>{let[K,q]=V.split("-");return{parts:K?.split(".").map(Number)||[],label:q}},Z=Y(J),X=Y(Q),G=Math.max(Z.parts.length,X.parts.length);for(let V=0;V<G;V++){let K=Z.parts[V]||0,q=X.parts[V]||0;if(K<q)return-1;if(K>q)return 1}if(Z.label===X.label)return 0;if(!Z.label&&X.label)return 1;if(Z.label&&!X.label)return-1;if(Z.label&&X.label)return Z.label<X.label?-1:1;return 0}s0();function e91(J,Q){let Y=new r4,Z=Y.pipe(z8({shouldCountRefs:!1}));return setImmediate(async()=>{let X=new Yq().scoped("update"),G=Z.subscribe({next:(V)=>{X.debug("emit new state",V)}});try{let V=process.env.AMP_TEST_UPDATE_STATUS;if(V){X.debug("using fake update status for testing",{status:V}),await rC(500),Y.next(V);return}if(process.env.AMP_SKIP_UPDATE_CHECK==="1"){X.debug("checking disabled via AMP_SKIP_UPDATE_CHECK environment variable");return}let K=await Q.get("updates.mode");if(K==="disabled"){X.debug("checking disabled");return}X.debug("checking",{currentVersion:J,mode:K});let q=NI(),W=await t91(J,q);if(!(W.latestVersion&&W.hasUpdate)){X.debug("no update available");return}let H=()=>{if(W.currentVersionAge!==void 0&&W.latestVersionAge!==void 0){let U=W.currentVersionAge-W.latestVersionAge,B=0.5;if(Math.abs(U)<0.5)return X.debug("versions too close together, suppressing update warning",{currentVersionAge:W.currentVersionAge,latestVersionAge:W.latestVersionAge,ageDifferenceHours:U}),!0}return!1},F=await s91();if(!K)K=F==="pnpm"?"warn":"auto",X.debug("no configured update mode; selected default based on package manager",{packageManager:F,mode:K});if(K==="warn"){if(!H())Y.next("update-available");return}if(!F){if(X.debug("auto-update not supported, falling back to warn mode"),!H())Y.next("update-available");return}if(F==="binary"&&process.platform==="win32"){if(X.debug("binary auto-update not supported on Windows, falling back to warn mode"),!H())Y.next("update-available");return}try{await Zp(W.latestVersion,F);let U=await rN(W.latestVersion),B={from:W.currentVersion,to:W.latestVersion,...U};if(U.status==="same")X.info("success",B),Y.next("updated");else X.warn("success with warning",B),Y.next("updated-with-warning")}catch(U){Y.next("update-error")}}catch(V){X.debug("check failed",{error:V})}finally{await rC(5000),Y.next("hidden"),G.unsubscribe(),Y.complete()}}),{state:Z}}ps();import{stderr as DW}from"node:process";function hJ6(J){let Q=new sV().name("install").description("Install required tools like ripgrep to $AMP_HOME/bin").option("--force","Force reinstallation even if already installed").option("--verbose","Show installation progress and results").action(async(Z)=>{await Ly1(Z.force||!1,Z.verbose||!1,"0.0.
|
|
3906
|
+
npm install -g @sourcegraph/amp`;K(Error(M))}},error:(U)=>{if(!H)H=!0,K(Error(`Failed to spawn ${X}: ${U.message}`))},complete:()=>{if(!H)H=!0,V()}})})}N0();N0();async function t91(J,Q){let Z=Q||"https://registry.npmjs.org";try{let X=new AbortController,G=setTimeout(()=>X.abort(),5000),V=await fetch(`${Z}/@sourcegraph/amp`,{signal:X.signal});if(clearTimeout(G),!V.ok)return{hasUpdate:!1,currentVersion:J,source:"npm"};let K=await V.json(),q=K["dist-tags"]?.latest;if(!q)return{hasUpdate:!1,currentVersion:J,source:"npm"};let W=MU8(J,q),H=W<0,F,U;if(K.time){let B=K.time[J],M=K.time[q],L=Date.now();if(B)F=Math.floor((L-new Date(B).getTime())/3600000);if(M)U=Math.floor((L-new Date(M).getTime())/3600000)}return v.info("NPM version comparison",{currentVersion:J,latestVersion:q,compareResult:W,hasUpdate:H,currentVersionAge:F,latestVersionAge:U}),{hasUpdate:H,latestVersion:q,currentVersion:J,currentVersionAge:F,latestVersionAge:U,source:"npm"}}catch(X){return v.debug("Error checking npm version",{error:X}),{hasUpdate:!1,currentVersion:J,source:"npm"}}}function MU8(J,Q){let Y=(V)=>{let[K,q]=V.split("-");return{parts:K?.split(".").map(Number)||[],label:q}},Z=Y(J),X=Y(Q),G=Math.max(Z.parts.length,X.parts.length);for(let V=0;V<G;V++){let K=Z.parts[V]||0,q=X.parts[V]||0;if(K<q)return-1;if(K>q)return 1}if(Z.label===X.label)return 0;if(!Z.label&&X.label)return 1;if(Z.label&&!X.label)return-1;if(Z.label&&X.label)return Z.label<X.label?-1:1;return 0}s0();function e91(J,Q){let Y=new r4,Z=Y.pipe(z8({shouldCountRefs:!1}));return setImmediate(async()=>{let X=new Yq().scoped("update"),G=Z.subscribe({next:(V)=>{X.debug("emit new state",V)}});try{let V=process.env.AMP_TEST_UPDATE_STATUS;if(V){X.debug("using fake update status for testing",{status:V}),await rC(500),Y.next(V);return}if(process.env.AMP_SKIP_UPDATE_CHECK==="1"){X.debug("checking disabled via AMP_SKIP_UPDATE_CHECK environment variable");return}let K=await Q.get("updates.mode");if(K==="disabled"){X.debug("checking disabled");return}X.debug("checking",{currentVersion:J,mode:K});let q=NI(),W=await t91(J,q);if(!(W.latestVersion&&W.hasUpdate)){X.debug("no update available");return}let H=()=>{if(W.currentVersionAge!==void 0&&W.latestVersionAge!==void 0){let U=W.currentVersionAge-W.latestVersionAge,B=0.5;if(Math.abs(U)<0.5)return X.debug("versions too close together, suppressing update warning",{currentVersionAge:W.currentVersionAge,latestVersionAge:W.latestVersionAge,ageDifferenceHours:U}),!0}return!1},F=await s91();if(!K)K=F==="pnpm"?"warn":"auto",X.debug("no configured update mode; selected default based on package manager",{packageManager:F,mode:K});if(K==="warn"){if(!H())Y.next("update-available");return}if(!F){if(X.debug("auto-update not supported, falling back to warn mode"),!H())Y.next("update-available");return}if(F==="binary"&&process.platform==="win32"){if(X.debug("binary auto-update not supported on Windows, falling back to warn mode"),!H())Y.next("update-available");return}try{await Zp(W.latestVersion,F);let U=await rN(W.latestVersion),B={from:W.currentVersion,to:W.latestVersion,...U};if(U.status==="same")X.info("success",B),Y.next("updated");else X.warn("success with warning",B),Y.next("updated-with-warning")}catch(U){Y.next("update-error")}}catch(V){X.debug("check failed",{error:V})}finally{await rC(5000),Y.next("hidden"),G.unsubscribe(),Y.complete()}}),{state:Z}}ps();import{stderr as DW}from"node:process";function hJ6(J){let Q=new sV().name("install").description("Install required tools like ripgrep to $AMP_HOME/bin").option("--force","Force reinstallation even if already installed").option("--verbose","Show installation progress and results").action(async(Z)=>{await Ly1(Z.force||!1,Z.verbose||!1,"0.0.1766203476-g15bfc0"),process.exit()});J.addCommand(Q,{hidden:!0});let Y=new sV("update").summary("Update Amp CLI").description("Update Amp CLI to the latest version. You can specify a particular version to install, or leave blank to get the latest stable release.").option("--target-version <version>","Update to a specific version").allowUnknownOption(!1).action(async(Z)=>{await LU8(Z.targetVersion)});J.addCommand(Y)}async function LU8(J){if(process.env.AMP_SKIP_UPDATE_CHECK==="1")DW.write(V6.yellow(`Note: AMP_SKIP_UPDATE_CHECK=1 is set, which disables automatic update checking. Manual updates will still work.
|
|
3907
3907
|
|
|
3908
3908
|
`));try{if(!J){DW.write(V6.blue(`Checking for updates...
|
|
3909
|
-
`));let Y=NI(),{hasUpdate:Z,latestVersion:X}=await t91("0.0.
|
|
3910
|
-
`));let V=await rN("0.0.
|
|
3909
|
+
`));let Y=NI(),{hasUpdate:Z,latestVersion:X}=await t91("0.0.1766203476-g15bfc0",Y);if(!Z){DW.write(V6.green(`✓ Amp CLI is already up to date: ${"0.0.1766203476-g15bfc0"} (${"released"} ${"2025-12-20T04:09:49.568Z"}${`, ${_R(new Date("2025-12-20T04:09:49.568Z"))} ago`})
|
|
3910
|
+
`));let V=await rN("0.0.1766203476-g15bfc0");if(V.warning)DW.write(`
|
|
3911
3911
|
`+V6.yellow(V.warning)+`
|
|
3912
3912
|
`);process.exit(0)}if(!X)DW.write(V6.yellow("[WARN] could not find latest version")),process.exit(0);J=X}DW.write(V6.blue(`Updating to version ${J}...
|
|
3913
3913
|
`)),await Zp(J,void 0,(Y)=>{DW.write(V6.dim(`Running: ${Y}
|
|
@@ -4627,7 +4627,7 @@ Ctrl-X, Y, Z to unlock`;if(U){let c=W.text.replace(/`([^`]+)`/g,"$1")+`
|
|
|
4627
4627
|
`,A)])}),S];if(!q&&!U&&W.url){let b=W.url.replace(/^https?:\/\//,"");f.push(new J7({uri:W.url,text:b,style:new Q1({color:Y.secondary,underline:!0})}))}if(C&&!U)f.push(C);let m=new X0({width:40,child:new v0({crossAxisAlignment:"start",mainAxisSize:"min",children:f})});return j4.child(new U6({mainAxisAlignment:"center",crossAxisAlignment:"center",mainAxisSize:"min",children:[new xx1({width:Nf1,height:Df1,agentMode:this.widget.agentMode,glow:this._glow,t:H,fps:0,shockwaves:this._shockwaves,onShockwave:P,...V==="disabled"&&{seed:42}}),new X0({width:2}),m]}))}}N0();U8();f4();L7();U8();s0();function CP8(J,Q){return`${J}:${Q}`}class Mf1{threadService;workers=new Map;threadsMap=new Map;subthreadsMap=new Map;mainThreadSubs=new Map;subthreadsSubs=new Map;workerStatusSubs=new Map;subthreadPatchSubs=new Map;mainThreadObservable;subthreadObservable;workerStatusObservable;emitMainThread=null;emitSubthread=null;emitWorkerStatus=null;constructor(J){this.threadService=J;this.mainThreadObservable=new Q0((Q)=>{return this.emitMainThread=(Y)=>Q.next(Y),()=>{this.emitMainThread=null}}),this.subthreadObservable=new Q0((Q)=>{return this.emitSubthread=(Y)=>Q.next(Y),()=>{this.emitSubthread=null}}),this.workerStatusObservable=new Q0((Q)=>{return this.emitWorkerStatus=(Y)=>Q.next(Y),()=>{this.emitWorkerStatus=null}})}registerWorker(J){let Q=J.thread.id;if(this.workers.has(Q))this.unregisterWorker(Q);this.threadsMap.set(Q,J.thread),this.subthreadsMap.set(Q,[]),this.workers.set(Q,{state:"initial"});let Y=this.threadService.observePatches(Q).pipe(IL()).subscribe((G)=>{this.threadsMap.set(Q,G);let V=this.subthreadsMap.get(Q)||[],K=this.workers.get(Q)||{state:"initial"};if(this.emitMainThread)this.emitMainThread({threadID:Q,mainThread:G,subthreads:V,workerStatus:K})});this.mainThreadSubs.set(Q,Y);let Z=J.status.subscribe((G)=>{if(this.workers.set(Q,G),this.emitWorkerStatus)this.emitWorkerStatus({threadID:Q,status:G})});this.workerStatusSubs.set(Q,Z);let X=J.subthreads.subscribe((G)=>{this.subthreadsMap.set(Q,G);for(let V of G){let K=CP8(Q,V.toolUse.id);if(this.subthreadPatchSubs.has(K))continue;let q=this.threadService.observePatches(V.threadID).pipe(IL()).subscribe((W)=>{if(this.emitSubthread)this.emitSubthread({threadID:Q,thread:W,subthread:V})});this.subthreadPatchSubs.set(K,q)}});this.subthreadsSubs.set(Q,X)}unregisterWorker(J){let Q=this.mainThreadSubs.get(J);if(Q)Q.unsubscribe(),this.mainThreadSubs.delete(J);let Y=this.workerStatusSubs.get(J);if(Y)Y.unsubscribe(),this.workerStatusSubs.delete(J);let Z=this.subthreadsSubs.get(J);if(Z)Z.unsubscribe(),this.subthreadsSubs.delete(J);for(let[X,G]of this.subthreadPatchSubs.entries())if(X.startsWith(`${J}:`))G.unsubscribe(),this.subthreadPatchSubs.delete(X);this.workers.delete(J),this.threadsMap.delete(J),this.subthreadsMap.delete(J)}observeThread(J){return{mainThread:new Q0((Q)=>{return this.mainThreadObservable.subscribe((Y)=>{if(Y.threadID===J)Q.next(Y)})}),subthreads:new Q0((Q)=>{return this.subthreadObservable.subscribe((Y)=>{if(Y.threadID===J)Q.next(Y)})}),workerStatus:new Q0((Q)=>{return this.workerStatusObservable.subscribe((Y)=>{if(Y.threadID===J)Q.next(Y)})})}}get threadViewStates(){let J={};for(let[Q,Y]of this.threadsMap){let Z=this.workers.get(Q);if(Z)J[Q]=xO(Y,Z)}return J}dispose(){for(let J of this.mainThreadSubs.values())J.unsubscribe();for(let J of this.subthreadsSubs.values())J.unsubscribe();for(let J of this.workerStatusSubs.values())J.unsubscribe();for(let J of this.subthreadPatchSubs.values())J.unsubscribe();this.mainThreadSubs.clear(),this.subthreadsSubs.clear(),this.workerStatusSubs.clear(),this.subthreadPatchSubs.clear(),this.workers.clear(),this.threadsMap.clear(),this.subthreadsMap.clear()}}function jP8(J,Q){switch(Q.type){case"subthread-patch":{let{thread:Y,subthread:Z}=Q,X=J.subagents[Z.threadID];if(!X){if(X={subThreadID:Y.id,parentToolID:Z.toolUse.id,taskDescription:Z.toolUse.input.description||"Task",isCompleted:!1,agentState:{type:"idle"}},J.mainThread){let W=$Q(J.mainThread);X.isCompleted=dV6(W,Z.toolUse.id)}}let G=SP8(Y,X.agentState),V=X.agentState===G?X:{...X,agentState:G},K={...J.tools},q=DS(Y).items.filter((W)=>W.type==="toolResult");for(let W of q)K[W.id]={id:W.id,subthreadID:Y.id,toolRun:W.toolResult.run,toolUse:W.toolUse};return{subagents:{...J.subagents,[Z.threadID]:V},tools:K,items:J.items,viewState:J.viewState,todosList:J.todosList,mainThread:J.mainThread}}case"main-thread-patch":{let{thread:Y,subthreads:Z,workerStatus:X}=Q,G=$Q(Y),V={...J.subagents};for(let F of Z){let U=V[F.threadID];if(!U)continue;let B=dV6(G,F.toolUse.id);V[F.threadID]={...U,isCompleted:B}}let{items:K}=DS(Y),q=xO(Y,X),W=jU({messages:Y.messages}),H=Array.isArray(W)?W:[];return{...J,subagents:V,items:K,viewState:q,todosList:H,mainThread:Y}}case"worker-status-change":{if(!J.mainThread)return J;let Y=xO(J.mainThread,Q.workerStatus);if(Y===J.viewState)return J;return{...J,viewState:Y}}default:return J}}function DS(J){let Q=[],Y=new Map,Z=new Set;for(let[X,G]of J.messages.entries()){let V=`${G.role}-${X}`;switch(G.role){case"assistant":{let K=G.state.type==="streaming";for(let W of G.content)if(W.type==="tool_use"){if(Y.set(W.id,W),K)Z.add(W.id)}if(G.content.some((W)=>W.type==="text"&&W.text.trim()||W.type==="thinking"))Q.push({type:"message",id:V,message:G});for(let W of G.content)if(W.type==="tool_use"){let H=!1;for(let F=X+1;F<J.messages.length;F++){let U=J.messages[F];if(U){for(let B of U.content)if(B.type==="tool_result"&&B.toolUseID===W.id){H=!0;break}}if(H)break}if(!H)Q.push({type:"toolResult",id:W.id,toolUse:W,toolResult:{type:"tool_result",toolUseID:W.id,run:{status:K?"in-progress":"queued"}}})}break}case"info":Q.push({type:"message",id:V,message:G});break;case"user":{let K=G.content.some((q)=>q.type==="text"&&q.text.trim()||q.type==="image");for(let q of G.content)if(q.type==="tool_result"){let W=Y.get(q.toolUseID)??pZ(J,q.toolUseID);if(!W)throw Error(`(bug) tool use ${q.toolUseID} not found`);Q.push({type:"toolResult",id:q.toolUseID,toolUse:W,toolResult:q})}if(K)Q.push({type:"message",id:V,message:G});break}}}return{items:Q}}function dV6(J,Q){let Y=J.get(Q);return(Y&&y7(Y.run))??!1}function SP8(J,Q){let Y=J.messages.at(-1);if(Y?.content.some((X)=>X.type==="tool_result"&&X.run.status==="blocked-on-user"))return v.info("Subagent status: idle (blocked-on-user)",{threadID:J.id}),{type:"idle"};if(DS(J).items.some((X)=>X.type==="toolResult"&&X.toolResult.run.status==="in-progress")){let X=Q?.type==="running-tools"?Q.startTime:Date.now();return v.info("Subagent status: running-tools",{threadID:J.id,startTime:X,hasStartTime:!!X}),{type:"running-tools",startTime:X}}if(Y&&Y.role==="assistant"&&Y.state.type==="streaming")switch(Y.content.at(-1)?.type){case"text":return v.info("Subagent status: streaming-text",{threadID:J.id}),{type:"streaming-text"};case"thinking":return v.info("Subagent status: streaming-thinking",{threadID:J.id}),{type:"streaming-thinking"};case"tool_use":{let G=Q?.type==="running-tools"?Q.startTime:Date.now();return v.info("Subagent status: running-tools (streaming tool_use)",{threadID:J.id,startTime:G,hasStartTime:!!G}),{type:"running-tools",startTime:G}}default:return v.info("Subagent status: streaming-text (default)",{threadID:J.id}),{type:"streaming-text"}}return v.info("Subagent status: idle (default)",{threadID:J.id}),{type:"idle"}}class Lf1 extends d0{props;constructor(J){super();this.props=J}createState(){return new cV6}}class cV6 extends p0{state={subagents:{},tools:{},items:[],viewState:{state:"initial",interactionState:!1,toolState:{running:0,blocked:0}},todosList:[],mainThread:null};workerController;subscriptions=[];recentThreadIDs=[];currentWorker;constructor(){super();this.workerController=null,this.currentWorker=null}addToRecentThreads(J){this.setState(()=>{let Q=this.recentThreadIDs.indexOf(J);if(Q!==-1)this.recentThreadIDs.splice(Q,1);if(this.recentThreadIDs.unshift(J),this.recentThreadIDs.length>50)this.recentThreadIDs.pop()})}initState(){let{threadService:J,worker:Q}=this.widget.props;this.workerController=new Mf1(J),this.currentWorker=Q,this.setupSubscriptions(Q),this.addToRecentThreads(Q.thread.id)}dispose(){this.cleanup()}didUpdateWidget(J){if(J.props.threadService!==this.widget.props.threadService||J.props.worker!==this.widget.props.worker)this.cleanup(),this.setupSubscriptions(this.widget.props.worker)}setupSubscriptions(J){this.workerController.registerWorker(J);let Q=this.workerController.observeThread(J.thread.id),Y=Q.mainThread.subscribe((G)=>{this.dispatch({type:"main-thread-patch",thread:G.mainThread,subthreads:G.subthreads,workerStatus:G.workerStatus})});this.subscriptions.push(Y);let Z=Q.subthreads.subscribe((G)=>{this.dispatch({type:"subthread-patch",thread:G.thread,subthread:G.subthread})});this.subscriptions.push(Z);let X=Q.workerStatus.subscribe((G)=>{this.dispatch({type:"worker-status-change",workerStatus:G.status})});this.subscriptions.push(X)}cleanup(){this.subscriptions.forEach((J)=>J.unsubscribe()),this.subscriptions=[]}switchWorker(J){this.cleanup(),this.setState(()=>{this.currentWorker=J}),this.setState(()=>{this.state={subagents:{},tools:{},items:[],viewState:{state:"initial",interactionState:!1,toolState:{running:0,blocked:0}},todosList:[],mainThread:null}}),this.setupSubscriptions(J),this.addToRecentThreads(J.thread.id)}dispatch(J){this.setState(()=>{this.state=jP8(this.state,J)})}getThreadData(){let J=Object.values(this.state.tools).map((G)=>({toolUse:G.toolUse,toolRun:G.toolRun,subthreadID:G.subthreadID})),Q={};for(let G of Object.values(this.state.subagents)){let V=J.filter((K)=>K.subthreadID===G.subThreadID);Q[G.parentToolID]=V}let Y=(G)=>G===o5||G===A9||G===Gq,Z=new Map;for(let G of this.state.items)if(G.type==="toolResult"&&Y(G.toolUse.name))Z.set(G.toolUse.id,{toolUseId:G.toolUse.id,toolName:G.toolUse.name,toolRun:G.toolResult.run});let X=Array.from(Z.values());for(let{toolUseId:G,toolRun:V}of X){let K=[],q;if(V.status==="in-progress"||V.status==="done"||V.status==="error"||V.status==="cancelled")q=V.progress;if(q){let W=0;for(let H of q)if(H.tool_uses)for(let F of H.tool_uses){let U=`${G}:progress:${W++}`;K.push({toolUse:KP(F.tool_name,F.input,U),toolRun:{status:F.status}})}}Q[G]=K}return{...this.state,subagents:Object.values(this.state.subagents),subagentActiveTools:J,subagentToolsByParentID:Q}}build(J){let Q=this.getThreadData();return this.widget.props.builder(J,Q,this.workerController,(Y)=>this.switchWorker(Y),()=>this.currentWorker,this.recentThreadIDs)}}class Af1 extends d0{props;constructor(J){super({key:J.key});this.props=J}createState(){return new lV6}}class lV6 extends p0{build(J){let Y=H6.of(J).colors,{todos:Z,title:X="TODOs"}=this.widget.props;if(!Array.isArray(Z)||Z.length===0)return new X0({width:0,height:0});let G=Z.map((V)=>this.buildTodoItem(V,Y));return new g0({child:new N6({padding:z0.symmetric(1,0),child:new v0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new _1({text:new l(X,new Q1({bold:!0,color:Y.foreground}))}),...G]})})})}buildTodoItem(J,Q){let Y=this.getStatusIcon(J.status),Z=J.status==="completed",X=new Q1({bold:J.status==="in-progress",color:Q.foreground,dim:Z}),G=new Q1({bold:J.status==="in-progress",strikethrough:J.status==="completed",color:Q.foreground,dim:Z});return new U6({crossAxisAlignment:"start",children:[new _1({text:new l(Y,X)}),new X0({width:1}),new t6({child:new _1({text:new l(J.content,G)})})]})}getStatusIcon(J){return J==="completed"?"✓":"•"}}class Of1 extends a6{ad;onDismiss;onButtonClick;constructor({key:J,ad:Q,onDismiss:Y,onButtonClick:Z}){super({key:J});this.ad=Q,this.onDismiss=Y,this.onButtonClick=Z}build(J){let Q=H6.of(J),Y=Q.colors.primary,Z=Q.colors.foreground;return new g0({decoration:new T8(void 0,new B4(new W4(Y,1,"rounded"),new W4(Y,1,"rounded"),void 0,new W4(Y,1,"rounded"))),child:new N6({padding:z0.horizontal(1),child:new v0({children:[new U6({crossAxisAlignment:"start",children:[new t6({child:new _1({text:new l(this.ad.content,new Q1({color:Z}))})}),new X0({width:4}),new J7({uri:"https://ampcode.com/free",text:"Ad",style:new Q1({color:Z,dim:!0})})]}),new U6({crossAxisAlignment:"start",children:[new cx1({text:this.ad.buttonLabel,onPressed:()=>this.onButtonClick?.(),padding:z0.horizontal(1),color:Y,reverse:!0}),new X0({width:2}),new _1({text:new l(this.ad.destinationUrlHostname,new Q1({color:Z,dim:!0}))})]})]})})})}}class If1 extends d0{props;constructor(J){super();this.props=J}createState(){return new nV6(this.props.autofocus??!0)}}class nV6 extends p0{autofocus;constructor(J){super();this.autofocus=J}build(J){let Q=(K)=>{if(K.key==="Enter"&&this.widget.props.showCopyOption)return this.widget.props.onSelect("copy"),"handled";if(K.ctrlKey&&K.key==="c"||K.key==="Escape")return this.widget.props.onSelect(null),"handled";return"ignored"},Y=C4.sizeOf(J),Z=Math.min(60,Y.width-4),X=Y.height-4,G=[];if(this.widget.props.title)G.push(new _1({text:new l(this.widget.props.title,new Q1({bold:!0,color:D1.blue}))}),new X0({height:1}));if(this.widget.props.message)G.push(new _1({text:new l(this.widget.props.message,void 0,void 0,{uri:this.widget.props.message,id:"ad-link"})}));if(this.widget.props.message)G.push(new X0({height:1}));let V=[];if(this.widget.props.showCopyOption)V.push(new _1({text:new l("Enter to copy",new Q1({dim:!0}))}));return V.push(new _1({text:new l("Escape to close",new Q1({dim:!0}))})),G.push(new U6({children:V.flatMap((K,q)=>q<V.length-1?[K,new X0({width:1}),new _1({text:new l("•",new Q1({dim:!0}))}),new X0({width:1})]:[K]),mainAxisSize:"min"})),new j4({child:new g0({constraints:new I6(Z,Z,0,X),decoration:new T8(D1.default(),new B4(new W4(D1.blue,1,"rounded"),new W4(D1.blue,1,"rounded"),new W4(D1.blue,1,"rounded"),new W4(D1.blue,1,"rounded"))),padding:new z0(2,2,2,2),child:new w8({autofocus:this.autofocus,onKey:Q,child:new v0({children:G,mainAxisSize:"min"})})})})}}function wf1(J){let Q=J.match(/"([^"]*)"|'([^']*)'|([^\s"']+)/g);if(!Q)return[];return Q.map((Y)=>{if(Y.startsWith('"')&&Y.endsWith('"')||Y.startsWith("'")&&Y.endsWith("'"))return Y.slice(1,-1);return Y})}aH();N0();import{spawn as _P8}from"node:child_process";import{promises as kP8}from"node:fs";function iV6(J){return J.kind==="executable"}function aV6(J){return J.kind==="markdown"}var Uz=50000,oV6=300000;async function Ef1(J,Q,Y,Z={}){let{timeoutMs:X=oV6,signal:G,source:V}=Z;try{let K=await Y.getCommand(J,V);if(!K)return{success:!1,output:"",error:`Command '${J}' not found`};if(!await Y.isCommandAvailable(J,V))return{success:!1,output:"",error:`Command '${J}' is not available for execution`};if(v.debug("Executing command",{commandName:J,filePath:K.filePath,args:Q}),aV6(K))return await yP8(K,Q);else if(iV6(K))return await xP8(K,Q,X,G);else return{success:!1,output:"",error:"Unsupported command type"}}catch(K){return v.error("Failed to execute command",{commandName:J,error:K}),{success:!1,output:"",error:K instanceof Error?K.message:"Unknown error occurred"}}}async function yP8(J,Q){try{if(Q.length>0)return{success:!1,output:"",error:"Markdown commands do not accept arguments"};let Y=await kP8.readFile(J.filePath,"utf8");return{success:!0,output:(Y.length>Uz?Y.slice(0,Uz)+`
|
|
4628
4628
|
... (output truncated at ${Uz} characters)`:Y).trim(),exitCode:0}}catch(Y){return{success:!1,output:"",error:Y instanceof Error?Y.message:"Failed to read markdown file"}}}async function xP8(J,Q,Y=oV6,Z){return new Promise((X)=>{let[G,V]=vP8(J,Q);v.debug("Spawning command",{spawnCommand:G,spawnArgs:V.slice(0,10),filePath:J.filePath,timeoutMs:Y});let K=tT0(Z),q=!1,W=setTimeout(()=>{q=!0,K.abort(),v.warn("Command execution timed out",{commandName:J.name,timeoutMs:Y})},Y),H=_P8(G,V,{stdio:["pipe","pipe","pipe"],signal:K.signal,detached:!0}),F=[],U=[],B=0;H.stdout?.on("data",(M)=>{let L=M.toString();if(B+=L.length,B<=Uz)F.push(L);else{let A=Uz-(B-L.length);if(A>0)F.push(L.slice(0,A))}}),H.stderr?.on("data",(M)=>{let L=M.toString();if(B+=L.length,B<=Uz)U.push(L);else{let A=Uz-(B-L.length);if(A>0)U.push(L.slice(0,A))}}),H.on("close",(M)=>{if(clearTimeout(W),q){X({success:!1,output:F.join(""),error:`Command timed out after ${Y}ms`,exitCode:void 0});return}if(K.signal.aborted){X({success:!1,output:F.join(""),error:"The command was aborted",exitCode:M??void 0});return}let L=M===0||M===1,A=F.join(""),I=U.join(""),E=A;if(!L&&!A.trim()&&I.trim())E=I;else if(I.trim())E+=A?`
|
|
4629
4629
|
${I}`:I;if(B>Uz)E+=`
|
|
4630
|
-
... (output truncated at ${Uz} characters)`;X({success:L,output:E.trim(),error:!L?I.trim()||"Command failed":void 0,exitCode:M??void 0})}),H.on("error",(M)=>{clearTimeout(W);let L=M.message;if(q)L=`Command timed out after ${Y}ms`;else if(M.message.includes("operation was aborted")||M.name==="AbortError")L="The command was aborted";X({success:!1,output:F.join(""),error:L})})})}function vP8(J,Q){let{filePath:Y,interpreter:Z,extension:X}=J;if(process.platform==="win32")return fP8(Y,Z?[...Z]:null,X,Q);else return hP8(Y,Z?[...Z]:null,X,Q)}function hP8(J,Q,Y,Z){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Z]];else return[J,Z]}function fP8(J,Q,Y,Z){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Z]];switch(Y.toLowerCase()){case".bat":case".cmd":return["cmd.exe",["/c",J,...Z]];case".ps1":return["powershell.exe",["-ExecutionPolicy","Bypass","-File",J,...Z]];case".exe":return[J,Z];default:return[J,Z]}}N0();L$();q7();TR();vH();UQ();LV();oH();vq();U8();Bm();L7();Py();s0();var RK6=Q6(wB(),1);import{writeFile as OK6}from"fs/promises";import IK6 from"path";N0();UQ();class Pf1{enabled;configService;commandCounts=new Map;timer=null;bufferTimeMs=1e4;constructor(J,Q){this.enabled=J;this.configService=Q;this.startTimer()}startTimer(){this.timer=setInterval(()=>{this.flushEvents()},this.bufferTimeMs)}async flushEvents(){if(this.commandCounts.size===0||!await this.enabled())return;let J=Array.from(this.commandCounts.entries()).map(([Q,Y])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1766188897-g93b033"},parameters:{metadata:{count:Y}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await Gt(Q,this.configService)}catch(Q){v.error("Failed to export command telemetry events",Q)}}async submit(J){if(!await this.enabled()||this.timer===null)return;let Q=this.commandCounts.get(J)||0;this.commandCounts.set(J,Q+1)}async dispose(){if(await this.flushEvents(),this.timer!==null)clearInterval(this.timer),this.timer=null}}class pI extends d0{props;constructor(J){super();this.props=J}createState(){return new rV6}}class rV6 extends p0{_state;initState(){super.initState(),this._state=this.widget.props.initialState}build(J){let Q=(Y)=>{this.setState(()=>{this._state=Y(this._state)})};return this.widget.props.builder(J,Q,this._state)}}class sV6 extends p0{controller=new MZ;focusNode=new D8({debugLabel:"CommandArgumentPrompt",onKey:(J)=>{if(J.key==="Escape")return this.widget.props.onDismiss(),"handled";return"ignored"}});_textListener=()=>{this.setState(()=>{})};initState(){this.focusNode.requestFocus(),this.controller.addListener(this._textListener)}dispose(){this.controller.removeListener(this._textListener),this.focusNode.dispose()}build(J){let Q=H6.of(J),{colors:Y,app:Z}=Q,X=this.widget.props.isRequiredArg??!0,G=this.controller.text.trim().length>0,V=!X||G,K=B4.all(new W4(Y.foreground,1,"solid")),q=new Kz({controller:this.controller,focusNode:this.focusNode,placeholder:this.widget.props.placeholder??"Enter command argument...",onSubmitted:(B)=>{let M=B.trim();if(X&&M.length===0)return;this.widget.props.onSubmit(M)},autofocus:!0,style:{textColor:Y.foreground,border:null},maxLines:1}),W=new U6({children:[new g0({decoration:{color:D1.default()},child:new _1({text:new l(">",new Q1({color:Y.foreground}))})}),new t6({child:q})]}),H=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new Q1({color:Y.foreground})),new l(this.widget.props.commandName,new Q1({color:D1.yellow,bold:!0}))])})}),F=[];if(V)F.push(new l("Enter",new Q1({color:Z.keybind}))),F.push(new l(" to submit, ",new Q1({color:Y.foreground,dim:!0})));F.push(new l("Esc",new Q1({color:Z.keybind}))),F.push(new l(" to cancel",new Q1({color:Y.foreground,dim:!0})));let U=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,F)})});return new g0({decoration:{border:K,color:D1.default()},padding:z0.all(1),child:new v0({children:[H,new X0({height:1}),W,new p5,U]})})}}class Yd extends d0{props;constructor(J){super();this.props=J}createState(){return new sV6}}oH();class tV6 extends p0{controller=new MZ;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new D8({debugLabel:"CommandMultilinePrompt",onKey:(J)=>{if(J.key==="Escape"){if(this.isConfirmingClearInput){if(this.controller.clear(),this.setState(()=>{this.isConfirmingClearInput=!1,this.imageAttachments=[],this.imagePaths=[]}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;return"handled"}if(this.controller.text.trim()!==""||this.imageAttachments.length>0){if(this.setState(()=>{this.isConfirmingClearInput=!0}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout);return this.clearInputConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingClearInput=!1}),this.clearInputConfirmTimeout=null},1000),"handled"}return this.widget.props.onDismiss(),"handled"}return"ignored"}});initState(){if(this.widget.props.initialText)this.controller.text=this.widget.props.initialText;if(this.widget.props.initialImages)this.imageAttachments=[...this.widget.props.initialImages];this.focusNode.requestFocus()}_handleInsertImage=(J)=>{if(this.imageAttachments.length>=ZB)return!1;let Q=sj(J);if(typeof Q==="object")return this.setState(()=>{this.imageAttachments=[...this.imageAttachments,Q],this.imagePaths=[...this.imagePaths,J]}),!1;return!1};_handlePopImage=()=>{if(this.imageAttachments.length>0)this.setState(()=>{this.imageAttachments=this.imageAttachments.slice(0,-1),this.imagePaths=this.imagePaths.slice(0,-1)})};dispose(){if(this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;this.focusNode.dispose(),this.controller.dispose()}build(J){let Q=H6.of(J),{colors:Y,app:Z}=Q,G=C4.of(J).size.height,V=Math.max(Math.floor(G*0.5),10),K=new uI({controller:this.controller,triggers:[new jW],completionBuilder:this.widget.props.completionBuilder,ampURL:this.widget.props.ampURL,onSubmitted:(B)=>{this.widget.props.onSubmit(B.trim(),this.imageAttachments)},theme:Y,placeholder:this.widget.props.placeholder||"Enter your message...",enabled:this.widget.props.enabled??!0,autofocus:!0,clipboard:y8.instance.tuiInstance.clipboard,autoOverlayPosition:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),q=new w8({focusNode:this.focusNode,child:K}),W=new g0({constraints:new I6({maxHeight:V}),padding:z0.symmetric(1,0),child:q}),H=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new Q1({color:Y.foreground})),new l(this.widget.props.commandName,new Q1({color:D1.yellow,bold:!0}))])})}),F=new g0({padding:z0.symmetric(1,0),child:new _1({text:this.isConfirmingClearInput?new l("",void 0,[new l("Esc",new Q1({color:Z.keybind})),new l(" again to clear input",new Q1({color:Y.foreground,dim:!0}))]):new l("",void 0,[new l("Press ",new Q1({color:Y.foreground,dim:!0})),new l("Enter",new Q1({color:Z.keybind})),new l(" to submit, ",new Q1({color:Y.foreground,dim:!0})),new l("Esc",new Q1({color:Z.keybind})),new l(" to clear",new Q1({color:Y.foreground,dim:!0}))])})}),U=[H,new X0({height:1}),new t6({child:W}),new X0({height:1}),F];return new g0({decoration:{border:B4.all(new W4(Y.foreground,1,"solid")),color:D1.default()},padding:z0.all(1),child:new v0({children:U})})}}class Rf1 extends d0{props;constructor(J){super();this.props=J}createState(){return new tV6}}import{isDeepStrictEqual as uP8}from"node:util";var bP8=/[\\/_ +.#"@[({&]/,gP8=/[\\/_ +.#"@[({&]/g,mP8=/[\s-]/,eV6=/[\s-]/g;function k31(J,Q,Y,Z,X,G,V){if(G===Q.length){if(X===J.length)return 1;return 0.99}let K=`${X},${G}`;if(V[K]!==void 0)return V[K];let q=Z.charAt(G),W=Y.indexOf(q,X),H=0,F,U,B,M;while(W>=0){if(F=k31(J,Q,Y,Z,W+1,G+1,V),F>H){if(W===X)F*=1;else if(mP8.test(J.charAt(W-1))){if(F*=0.9,M=J.slice(X,W-1).match(eV6),M&&X>0)F*=Math.pow(0.999,M.length)}else if(bP8.test(J.charAt(W-1))){if(F*=0.8,B=J.slice(X,W-1).match(gP8),B&&X>0)F*=Math.pow(0.999,B.length)}else if(F*=0.3,X>0)F*=Math.pow(0.999,W-X);if(J.charAt(W)!==Q.charAt(G))F*=0.9999}if(F<0.1&&(Y.charAt(W-1)===Z.charAt(G+1)||Z.charAt(G+1)===Z.charAt(G)&&Y.charAt(W-1)!==Z.charAt(G))){if(U=k31(J,Q,Y,Z,W+1,G+2,V),U*0.1>F)F=U*0.1}if(F>H)H=F;W=Y.indexOf(q,W+1)}return V[K]=H,H}function _31(J){return J.toLowerCase().replace(eV6," ")}function JK6(J,Q){let Y=k31(J,Q,_31(J),_31(Q),0,0,{}),Z=Q.trim().split(/\s+/);if(Z.length>1){let X=0,G=0;for(let K of Z){let q=k31(J,K,_31(J),_31(K),0,0,{});if(q===0)return Y;X+=q,G+=K.length}let V=X/Z.length*0.95;return Math.max(Y,V)}return Y}class MS{}class LS{}class y31{}class x31{}class QK6 extends d0{child;onContext;constructor(J,Q){super();this.child=J;this.onContext=Q}createState(){return new YK6}}class YK6 extends p0{build(J){return this.widget.onContext(J),this.widget.child}}function pP8(J,Q){if(J==="")return{matches:!0,score:1};let Y=JK6(Q,J);return{matches:Y>0.15,score:Y}}class vJ extends d0{props;debugLabel="FuzzyPicker";constructor(J){super();this.props=J}createState(){return new ZK6}}class ZK6 extends p0{controller=new MZ;focusNode;scrollController=new A5;selectedIndex=0;itemContexts=[];cachedQuery="";cachedItemsRef=null;cachedFiltered=[];initState(){this.scrollController.disableFollowMode(),this.focusNode=new D8({debugLabel:this.widget.debugLabel}),this.controller.addListener(()=>{this.selectedIndex=0,this.recomputeFilteredItems(),this.setState(),n8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()});let Q=this.cachedFiltered;this.widget.props.onSelectionChange?.(Q[0]??null)}),this.recomputeFilteredItems();let J=this.cachedFiltered;this.widget.props.onSelectionChange?.(J[0]??null),this.ensureSelectedItemVisible()}didUpdateWidget(J){if(!uP8(J.props.items,this.widget.props.items)){this.recomputeFilteredItems(),this.ensureSelectedItemVisible();let Q=this.cachedFiltered;this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null)}}dispose(){this.widget.props.onSelectionChange?.(null),this.controller.dispose(),this.focusNode.dispose(),this.scrollController.dispose()}invoke=(J)=>{if(J instanceof MS){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length-1)this.selectedIndex++,this.setState(),n8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof LS){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex>0)this.selectedIndex--,this.setState(),n8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof y31){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length){let Y=Q[this.selectedIndex];if(Y){if(!(this.widget.props.isItemDisabled?.(Y)??!1))this.widget.props.onAccept(Y)}}return"handled"}if(J instanceof x31)return this.widget.props.onDismiss?.(),"handled";return"ignored"};recomputeFilteredItems(){let J=this.controller.text,Q=this.widget.props.items,Y=Q.filter((Z)=>!this.widget.props.filterItem||this.widget.props.filterItem(Z,J)).map((Z)=>({item:Z,...pP8(J,this.widget.props.getLabel(Z))})).filter((Z)=>Z.matches).sort(this.widget.props.sortItems?(Z,X)=>this.widget.props.sortItems(Z,X,J):(Z,X)=>X.score-Z.score).map((Z)=>Z.item);this.cachedQuery=J,this.cachedItemsRef=Q,this.cachedFiltered=this.widget.props.maxRenderItems?Y.slice(0,this.widget.props.maxRenderItems):Y}getFilteredItems(){let J=this.controller.text,Q=this.widget.props.items;if(this.cachedQuery===J&&this.cachedItemsRef===Q)return this.cachedFiltered;return this.recomputeFilteredItems(),this.cachedFiltered}ensureSelectedItemVisible(){let J=this.itemContexts[this.selectedIndex];if(!J)return;let Q=J.findRenderObject();if(!Q)return;let Y=0,Z=Q.size.height;I71(J,{top:Y,bottom:Z},{padding:1})}handleScroll=(J)=>{let Q=this.getFilteredItems();if(Q.length===0)return;if(J.direction==="down")if(this.selectedIndex<Q.length-1)this.selectedIndex++;else return;else if(this.selectedIndex>0)this.selectedIndex--;else return;this.setState(),n8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null)};handleItemClick=(J,Q)=>{let Y=this.getFilteredItems();if(J>=0&&J<Y.length){let Z=Y[J],X=Z?this.widget.props.isItemDisabled?.(Z)??!1:!1;if(Q===1)this.selectedIndex=J,this.setState(),this.widget.props.onSelectionChange?.(Y[this.selectedIndex]??null);else if(Q===2&&!X){if(Z)this.widget.props.onAccept(Z)}}};build(J){let Q=H6.of(J),{colors:Y}=Q,Z=this.getFilteredItems(),X=B4.all(new W4(Y.foreground,1,"solid")),G=this.widget.props.enabled??!0,V=new Kz({controller:this.controller,focusNode:this.focusNode,autofocus:!0,enabled:G,style:{textColor:Y.foreground,border:null},maxLines:1}),K=new yX({shortcuts:new Map([[new N4("ArrowDown"),new MS],[new N4("ArrowUp"),new LS],[new N4("Tab"),new MS],[new N4("Tab",{shift:!0}),new LS],[new N4("n",{ctrl:!0}),new MS],[new N4("p",{ctrl:!0}),new LS],[new N4("Enter"),new y31],[new N4("Escape"),new x31]]),focusNode:this.focusNode,child:V}),q=new SJ({actions:new Map([[MS,new C8(this.invoke)],[LS,new C8(this.invoke)],[y31,new C8(this.invoke)],[x31,new C8(this.invoke)]]),child:K}),W=new U6({children:[new g0({decoration:{color:D1.default()},child:new _1({text:new l(">",new Q1({color:Y.foreground}))})}),new t6({child:q})]});this.itemContexts=[];let H;if(this.widget.props.isLoading){let L=this.widget.props.loadingText??"Loading...";H=new X0({height:10,child:new j4({child:new _1({text:new l(L,new Q1({color:Y.foreground}))})})})}else if(Z.length===0&&this.widget.props.emptyStateText)H=new t6({child:new j4({child:new _1({text:new l(this.widget.props.emptyStateText,new Q1({color:Y.foreground,dim:!0}))})})});else{let L=Z.map((A,I)=>{let E=I===this.selectedIndex,P=this.widget.props.isItemDisabled?.(A)??!1,R;if(this.widget.props.renderItem)R=this.widget.props.renderItem(A,E,P,J);else{let C=E?D1.yellow:void 0,S=E?D1.black:Y.foreground;R=new g0({decoration:C?{color:C}:void 0,padding:z0.symmetric(2,0),child:new _1({text:new l(this.widget.props.getLabel(A),new Q1({color:S,dim:P}))})})}return new QK6(new M8({onClick:(C)=>this.handleItemClick(I,C.clickCount),child:R}),(C)=>{this.itemContexts[I]=C})});H=new v0({children:L,crossAxisAlignment:"start"})}let F=new t6({child:new M8({onScroll:this.handleScroll,opaque:!1,child:new e9({controller:this.scrollController,autofocus:!1,child:H})})}),U=[];if(this.widget.props.title){let L=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l(this.widget.props.title,new Q1({color:D1.yellow,bold:!0}))})});U.push(L)}if(U.push(W,new X0({height:1}),F),this.controller.text!==""){let L=Z.length>0?Z[this.selectedIndex]:void 0,A=L&&this.widget.props.buildDisabledReasonWidget?.(L);if(A)U.push(new g0({padding:z0.vertical(1),child:new j4({child:A})}));else U.push(new X0({height:3}))}if(this.widget.props.footer)U.push(this.widget.props.footer);return new g0({decoration:{border:X,color:D1.default()},padding:z0.symmetric(1,0),child:new v0({children:U})})}}function XK6(J){let Y=new Date().getTime()-J.getTime(),Z=Math.floor(Y/60000),X=Math.floor(Y/3600000),G=Math.floor(Y/86400000);if(Z<1)return"just now";if(Z<60)return`${Z}m ago`;if(X<24)return`${X}h ago`;if(G<7)return`${G}d ago`;return J.toLocaleDateString()}class Tf1 extends a6{props;debugLabel="NewsFeedPicker";constructor(J){super();this.props=J}build(J){let Q=[...this.props.entries].sort((X,G)=>G.pubDate.getTime()-X.pubDate.getTime()),Y=Math.max(0,...Q.map((X)=>XK6(X.pubDate).length));return new vJ({items:Q,getLabel:(X)=>X.title,onAccept:(X)=>this.props.onSelect?.(X),onDismiss:this.props.onDismiss,title:this.props.title,emptyStateText:"No news entries available",maxRenderItems:100,renderItem:(X,G,V,K)=>{let q=H6.of(K),{colors:W}=q,H=G?D1.yellow:void 0,F=G?D1.black:W.foreground,U=D1.index(8),B=(M,L)=>new X0({width:L,child:U6.end([new _1({text:new l(M,new Q1({color:U}))})])});return new g0({decoration:H?{color:H}:void 0,padding:z0.symmetric(2,0),child:new U6({children:[new t6({child:new _1({text:new l(X.title,new Q1({color:F})),overflow:"ellipsis",maxLines:1})}),new X0({width:2}),B(XK6(X.pubDate),Y)]})})}})}}class Cf1 extends d0{createState(){return new $K6}}class $K6 extends p0{isGreen=!0;timer;initState(){this.timer=setInterval(()=>{this.isGreen=!this.isGreen,this.setState()},700)}dispose(){if(this.timer)clearInterval(this.timer);super.dispose()}build(J){return new _1({text:new l("●",new Q1({color:this.isGreen?D1.green:D1.index(8),bold:!0})),maxLines:1})}}function dP8(J){let Q=new Map,Y=new Map,Z=new Map,X=[];for(let V of J)Q.set(V.id,V);for(let V of J){let K=V.parentRelationships.find((q)=>q.role==="child"&&Q.has(q.threadID)&&(q.type==="fork"||q.type==="handoff"));if(K){Z.set(V.id,K.type);let q=K.threadID,W=Y.get(q)||[];W.push(V),Y.set(q,W)}else X.push(V)}return vX.flatten(X,(V)=>Y.get(V.id)).map((V)=>({...V.item,depth:V.depth,isLast:V.isLast,ancestorsAreLast:V.ancestorsAreLast,relationshipType:Z.get(V.item.id)}))}function jf1(J,Q,Y){return new _1({text:new l(`${J}${Q}`,new Q1({color:Y})),maxLines:1})}function cP8(J,Q,Y,Z){return[jf1("+",J,Z.success),p5.horizontal(1),jf1("~",Q,Z.warning),p5.horizontal(1),jf1("-",Y,Z.destructive)]}class v31 extends a6{props;debugLabel="ThreadContinuationPicker";constructor(J){super();this.props=J}build(J){let Q=this.props.filterByWorkspace&&this.props.currentWorkspaceURI?this.props.threads.filter((F)=>F.workspaceURI===this.props.currentWorkspaceURI):this.props.threads;if(this.props.excludeCurrentThread&&this.props.currentThreadID)Q=Q.filter((F)=>F.id!==this.props.currentThreadID);let Y=this.props.recentThreadIDs||[],Z=new Set(Y),X=this.props.currentThreadID,G=[...Q].sort((F,U)=>{if(X){if(F.id===X)return-1;if(U.id===X)return 1}let B=Y.indexOf(F.id),M=Y.indexOf(U.id);if(B!==-1&&M!==-1)return B-M;if(B!==-1)return-1;if(M!==-1)return 1;return 0}),V=dP8(G),K=Math.max(0,...V.map((F)=>F.description.timeAgo.length)),q=H6.of(J),W=new N6({padding:z0.symmetric(0,1),child:new j4({child:new _1({text:new l("",new Q1({color:q.colors.foreground,dim:!0}),[new l("Ctrl+T",new Q1({color:D1.blue,dim:!0})),new l(this.props.filterByWorkspace?" for all workspaces":" to filter by workspace",new Q1({color:q.colors.foreground,dim:!0}))])})})});return new vJ({items:V,getLabel:(F)=>F.title,onAccept:(F)=>this.props.onSelect?.(F.id),onDismiss:this.props.onDismiss,onSelectionChange:(F)=>{if(this.props.previewController){if(F)this.props.previewController.select(F.id)}},title:this.props.title,isLoading:this.props.isLoading,loadingText:"Loading threads...",emptyStateText:"No threads match your filter",maxRenderItems:200,footer:this.props.isLoading?void 0:W,renderItem:(F,U,B,M)=>{let L=H6.of(M),{colors:A}=L,I=U?D1.yellow:void 0,E=U?D1.black:A.foreground,P=D1.index(8),R=(r,p)=>new X0({width:p,child:U6.end([new _1({text:new l(r,new Q1({color:P}))})])}),C=this.props.threadViewStates[F.id],S=[],k=F.relationshipType==="handoff",f=new _71;if(F.depth>0){let r=[],p=F.ancestorsAreLast.slice(1);for(let Z1 of p)r.push(new l(f.getAncestorPrefix(Z1),new Q1({color:f.connectorColor,dim:f.connectorDim})));let t=F.isLast?f.elbow:f.tee,J1=f.getConnectorText(t);r.push(new l(J1,new Q1({color:f.connectorColor,dim:f.connectorDim}))),S.push(new _1({text:new l("",void 0,r)}))}let m=[],b=X===F.id?new l("(current) ",new Q1({color:D1.green})):Z.has(F.id)?new l("(visited) ",new Q1({color:A.foreground,dim:!0})):null;if(b)m.push(new _1({text:b}));if(C){if(C.state==="active"&&(C.interactionState==="tool-running"||C.inferenceState==="running"))m.push(new Cf1),m.push(new X0({width:1}))}let c=F.title;if(F.relationshipType==="fork"){let r=c.match(/^Forked\((\d+)\): /);if(r)c=c.slice(r[0].length);else while(c.startsWith("Forked: "))c=c.slice(8);m.push(new _1({text:new l("[fork] ",new Q1({color:D1.blue}))}))}else if(k)m.push(new _1({text:new l("[handoff] ",new Q1({color:D1.index(208)}))}));if(m.push(new t6({child:new _1({text:new l(c,new Q1({color:E})),overflow:"ellipsis",maxLines:1})})),m.push(new X0({width:2})),F.diffStats&&(F.diffStats.added>0||F.diffStats.changed>0||F.diffStats.deleted>0)){let r=U?{success:P,warning:P,destructive:P}:A;m.push(...cP8(F.diffStats.added,F.diffStats.changed,F.diffStats.deleted,r)),m.push(new X0({width:2}))}return m.push(R(F.description.timeAgo,K)),new g0({decoration:I?{color:I}:void 0,padding:z0.symmetric(2,0),child:new U6({children:[...S,...m]})})}})}}class Sf1 extends a6{props;constructor(J){super();this.props=J}build(){return new j4({child:new _1({text:new l("",void 0,[new l(`Forked to new thread:
|
|
4630
|
+
... (output truncated at ${Uz} characters)`;X({success:L,output:E.trim(),error:!L?I.trim()||"Command failed":void 0,exitCode:M??void 0})}),H.on("error",(M)=>{clearTimeout(W);let L=M.message;if(q)L=`Command timed out after ${Y}ms`;else if(M.message.includes("operation was aborted")||M.name==="AbortError")L="The command was aborted";X({success:!1,output:F.join(""),error:L})})})}function vP8(J,Q){let{filePath:Y,interpreter:Z,extension:X}=J;if(process.platform==="win32")return fP8(Y,Z?[...Z]:null,X,Q);else return hP8(Y,Z?[...Z]:null,X,Q)}function hP8(J,Q,Y,Z){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Z]];else return[J,Z]}function fP8(J,Q,Y,Z){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Z]];switch(Y.toLowerCase()){case".bat":case".cmd":return["cmd.exe",["/c",J,...Z]];case".ps1":return["powershell.exe",["-ExecutionPolicy","Bypass","-File",J,...Z]];case".exe":return[J,Z];default:return[J,Z]}}N0();L$();q7();TR();vH();UQ();LV();oH();vq();U8();Bm();L7();Py();s0();var RK6=Q6(wB(),1);import{writeFile as OK6}from"fs/promises";import IK6 from"path";N0();UQ();class Pf1{enabled;configService;commandCounts=new Map;timer=null;bufferTimeMs=1e4;constructor(J,Q){this.enabled=J;this.configService=Q;this.startTimer()}startTimer(){this.timer=setInterval(()=>{this.flushEvents()},this.bufferTimeMs)}async flushEvents(){if(this.commandCounts.size===0||!await this.enabled())return;let J=Array.from(this.commandCounts.entries()).map(([Q,Y])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1766203476-g15bfc0"},parameters:{metadata:{count:Y}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await Gt(Q,this.configService)}catch(Q){v.error("Failed to export command telemetry events",Q)}}async submit(J){if(!await this.enabled()||this.timer===null)return;let Q=this.commandCounts.get(J)||0;this.commandCounts.set(J,Q+1)}async dispose(){if(await this.flushEvents(),this.timer!==null)clearInterval(this.timer),this.timer=null}}class pI extends d0{props;constructor(J){super();this.props=J}createState(){return new rV6}}class rV6 extends p0{_state;initState(){super.initState(),this._state=this.widget.props.initialState}build(J){let Q=(Y)=>{this.setState(()=>{this._state=Y(this._state)})};return this.widget.props.builder(J,Q,this._state)}}class sV6 extends p0{controller=new MZ;focusNode=new D8({debugLabel:"CommandArgumentPrompt",onKey:(J)=>{if(J.key==="Escape")return this.widget.props.onDismiss(),"handled";return"ignored"}});_textListener=()=>{this.setState(()=>{})};initState(){this.focusNode.requestFocus(),this.controller.addListener(this._textListener)}dispose(){this.controller.removeListener(this._textListener),this.focusNode.dispose()}build(J){let Q=H6.of(J),{colors:Y,app:Z}=Q,X=this.widget.props.isRequiredArg??!0,G=this.controller.text.trim().length>0,V=!X||G,K=B4.all(new W4(Y.foreground,1,"solid")),q=new Kz({controller:this.controller,focusNode:this.focusNode,placeholder:this.widget.props.placeholder??"Enter command argument...",onSubmitted:(B)=>{let M=B.trim();if(X&&M.length===0)return;this.widget.props.onSubmit(M)},autofocus:!0,style:{textColor:Y.foreground,border:null},maxLines:1}),W=new U6({children:[new g0({decoration:{color:D1.default()},child:new _1({text:new l(">",new Q1({color:Y.foreground}))})}),new t6({child:q})]}),H=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new Q1({color:Y.foreground})),new l(this.widget.props.commandName,new Q1({color:D1.yellow,bold:!0}))])})}),F=[];if(V)F.push(new l("Enter",new Q1({color:Z.keybind}))),F.push(new l(" to submit, ",new Q1({color:Y.foreground,dim:!0})));F.push(new l("Esc",new Q1({color:Z.keybind}))),F.push(new l(" to cancel",new Q1({color:Y.foreground,dim:!0})));let U=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,F)})});return new g0({decoration:{border:K,color:D1.default()},padding:z0.all(1),child:new v0({children:[H,new X0({height:1}),W,new p5,U]})})}}class Yd extends d0{props;constructor(J){super();this.props=J}createState(){return new sV6}}oH();class tV6 extends p0{controller=new MZ;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new D8({debugLabel:"CommandMultilinePrompt",onKey:(J)=>{if(J.key==="Escape"){if(this.isConfirmingClearInput){if(this.controller.clear(),this.setState(()=>{this.isConfirmingClearInput=!1,this.imageAttachments=[],this.imagePaths=[]}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;return"handled"}if(this.controller.text.trim()!==""||this.imageAttachments.length>0){if(this.setState(()=>{this.isConfirmingClearInput=!0}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout);return this.clearInputConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingClearInput=!1}),this.clearInputConfirmTimeout=null},1000),"handled"}return this.widget.props.onDismiss(),"handled"}return"ignored"}});initState(){if(this.widget.props.initialText)this.controller.text=this.widget.props.initialText;if(this.widget.props.initialImages)this.imageAttachments=[...this.widget.props.initialImages];this.focusNode.requestFocus()}_handleInsertImage=(J)=>{if(this.imageAttachments.length>=ZB)return!1;let Q=sj(J);if(typeof Q==="object")return this.setState(()=>{this.imageAttachments=[...this.imageAttachments,Q],this.imagePaths=[...this.imagePaths,J]}),!1;return!1};_handlePopImage=()=>{if(this.imageAttachments.length>0)this.setState(()=>{this.imageAttachments=this.imageAttachments.slice(0,-1),this.imagePaths=this.imagePaths.slice(0,-1)})};dispose(){if(this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;this.focusNode.dispose(),this.controller.dispose()}build(J){let Q=H6.of(J),{colors:Y,app:Z}=Q,G=C4.of(J).size.height,V=Math.max(Math.floor(G*0.5),10),K=new uI({controller:this.controller,triggers:[new jW],completionBuilder:this.widget.props.completionBuilder,ampURL:this.widget.props.ampURL,onSubmitted:(B)=>{this.widget.props.onSubmit(B.trim(),this.imageAttachments)},theme:Y,placeholder:this.widget.props.placeholder||"Enter your message...",enabled:this.widget.props.enabled??!0,autofocus:!0,clipboard:y8.instance.tuiInstance.clipboard,autoOverlayPosition:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),q=new w8({focusNode:this.focusNode,child:K}),W=new g0({constraints:new I6({maxHeight:V}),padding:z0.symmetric(1,0),child:q}),H=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new Q1({color:Y.foreground})),new l(this.widget.props.commandName,new Q1({color:D1.yellow,bold:!0}))])})}),F=new g0({padding:z0.symmetric(1,0),child:new _1({text:this.isConfirmingClearInput?new l("",void 0,[new l("Esc",new Q1({color:Z.keybind})),new l(" again to clear input",new Q1({color:Y.foreground,dim:!0}))]):new l("",void 0,[new l("Press ",new Q1({color:Y.foreground,dim:!0})),new l("Enter",new Q1({color:Z.keybind})),new l(" to submit, ",new Q1({color:Y.foreground,dim:!0})),new l("Esc",new Q1({color:Z.keybind})),new l(" to clear",new Q1({color:Y.foreground,dim:!0}))])})}),U=[H,new X0({height:1}),new t6({child:W}),new X0({height:1}),F];return new g0({decoration:{border:B4.all(new W4(Y.foreground,1,"solid")),color:D1.default()},padding:z0.all(1),child:new v0({children:U})})}}class Rf1 extends d0{props;constructor(J){super();this.props=J}createState(){return new tV6}}import{isDeepStrictEqual as uP8}from"node:util";var bP8=/[\\/_ +.#"@[({&]/,gP8=/[\\/_ +.#"@[({&]/g,mP8=/[\s-]/,eV6=/[\s-]/g;function k31(J,Q,Y,Z,X,G,V){if(G===Q.length){if(X===J.length)return 1;return 0.99}let K=`${X},${G}`;if(V[K]!==void 0)return V[K];let q=Z.charAt(G),W=Y.indexOf(q,X),H=0,F,U,B,M;while(W>=0){if(F=k31(J,Q,Y,Z,W+1,G+1,V),F>H){if(W===X)F*=1;else if(mP8.test(J.charAt(W-1))){if(F*=0.9,M=J.slice(X,W-1).match(eV6),M&&X>0)F*=Math.pow(0.999,M.length)}else if(bP8.test(J.charAt(W-1))){if(F*=0.8,B=J.slice(X,W-1).match(gP8),B&&X>0)F*=Math.pow(0.999,B.length)}else if(F*=0.3,X>0)F*=Math.pow(0.999,W-X);if(J.charAt(W)!==Q.charAt(G))F*=0.9999}if(F<0.1&&(Y.charAt(W-1)===Z.charAt(G+1)||Z.charAt(G+1)===Z.charAt(G)&&Y.charAt(W-1)!==Z.charAt(G))){if(U=k31(J,Q,Y,Z,W+1,G+2,V),U*0.1>F)F=U*0.1}if(F>H)H=F;W=Y.indexOf(q,W+1)}return V[K]=H,H}function _31(J){return J.toLowerCase().replace(eV6," ")}function JK6(J,Q){let Y=k31(J,Q,_31(J),_31(Q),0,0,{}),Z=Q.trim().split(/\s+/);if(Z.length>1){let X=0,G=0;for(let K of Z){let q=k31(J,K,_31(J),_31(K),0,0,{});if(q===0)return Y;X+=q,G+=K.length}let V=X/Z.length*0.95;return Math.max(Y,V)}return Y}class MS{}class LS{}class y31{}class x31{}class QK6 extends d0{child;onContext;constructor(J,Q){super();this.child=J;this.onContext=Q}createState(){return new YK6}}class YK6 extends p0{build(J){return this.widget.onContext(J),this.widget.child}}function pP8(J,Q){if(J==="")return{matches:!0,score:1};let Y=JK6(Q,J);return{matches:Y>0.15,score:Y}}class vJ extends d0{props;debugLabel="FuzzyPicker";constructor(J){super();this.props=J}createState(){return new ZK6}}class ZK6 extends p0{controller=new MZ;focusNode;scrollController=new A5;selectedIndex=0;itemContexts=[];cachedQuery="";cachedItemsRef=null;cachedFiltered=[];initState(){this.scrollController.disableFollowMode(),this.focusNode=new D8({debugLabel:this.widget.debugLabel}),this.controller.addListener(()=>{this.selectedIndex=0,this.recomputeFilteredItems(),this.setState(),n8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()});let Q=this.cachedFiltered;this.widget.props.onSelectionChange?.(Q[0]??null)}),this.recomputeFilteredItems();let J=this.cachedFiltered;this.widget.props.onSelectionChange?.(J[0]??null),this.ensureSelectedItemVisible()}didUpdateWidget(J){if(!uP8(J.props.items,this.widget.props.items)){this.recomputeFilteredItems(),this.ensureSelectedItemVisible();let Q=this.cachedFiltered;this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null)}}dispose(){this.widget.props.onSelectionChange?.(null),this.controller.dispose(),this.focusNode.dispose(),this.scrollController.dispose()}invoke=(J)=>{if(J instanceof MS){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length-1)this.selectedIndex++,this.setState(),n8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof LS){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex>0)this.selectedIndex--,this.setState(),n8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof y31){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length){let Y=Q[this.selectedIndex];if(Y){if(!(this.widget.props.isItemDisabled?.(Y)??!1))this.widget.props.onAccept(Y)}}return"handled"}if(J instanceof x31)return this.widget.props.onDismiss?.(),"handled";return"ignored"};recomputeFilteredItems(){let J=this.controller.text,Q=this.widget.props.items,Y=Q.filter((Z)=>!this.widget.props.filterItem||this.widget.props.filterItem(Z,J)).map((Z)=>({item:Z,...pP8(J,this.widget.props.getLabel(Z))})).filter((Z)=>Z.matches).sort(this.widget.props.sortItems?(Z,X)=>this.widget.props.sortItems(Z,X,J):(Z,X)=>X.score-Z.score).map((Z)=>Z.item);this.cachedQuery=J,this.cachedItemsRef=Q,this.cachedFiltered=this.widget.props.maxRenderItems?Y.slice(0,this.widget.props.maxRenderItems):Y}getFilteredItems(){let J=this.controller.text,Q=this.widget.props.items;if(this.cachedQuery===J&&this.cachedItemsRef===Q)return this.cachedFiltered;return this.recomputeFilteredItems(),this.cachedFiltered}ensureSelectedItemVisible(){let J=this.itemContexts[this.selectedIndex];if(!J)return;let Q=J.findRenderObject();if(!Q)return;let Y=0,Z=Q.size.height;I71(J,{top:Y,bottom:Z},{padding:1})}handleScroll=(J)=>{let Q=this.getFilteredItems();if(Q.length===0)return;if(J.direction==="down")if(this.selectedIndex<Q.length-1)this.selectedIndex++;else return;else if(this.selectedIndex>0)this.selectedIndex--;else return;this.setState(),n8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null)};handleItemClick=(J,Q)=>{let Y=this.getFilteredItems();if(J>=0&&J<Y.length){let Z=Y[J],X=Z?this.widget.props.isItemDisabled?.(Z)??!1:!1;if(Q===1)this.selectedIndex=J,this.setState(),this.widget.props.onSelectionChange?.(Y[this.selectedIndex]??null);else if(Q===2&&!X){if(Z)this.widget.props.onAccept(Z)}}};build(J){let Q=H6.of(J),{colors:Y}=Q,Z=this.getFilteredItems(),X=B4.all(new W4(Y.foreground,1,"solid")),G=this.widget.props.enabled??!0,V=new Kz({controller:this.controller,focusNode:this.focusNode,autofocus:!0,enabled:G,style:{textColor:Y.foreground,border:null},maxLines:1}),K=new yX({shortcuts:new Map([[new N4("ArrowDown"),new MS],[new N4("ArrowUp"),new LS],[new N4("Tab"),new MS],[new N4("Tab",{shift:!0}),new LS],[new N4("n",{ctrl:!0}),new MS],[new N4("p",{ctrl:!0}),new LS],[new N4("Enter"),new y31],[new N4("Escape"),new x31]]),focusNode:this.focusNode,child:V}),q=new SJ({actions:new Map([[MS,new C8(this.invoke)],[LS,new C8(this.invoke)],[y31,new C8(this.invoke)],[x31,new C8(this.invoke)]]),child:K}),W=new U6({children:[new g0({decoration:{color:D1.default()},child:new _1({text:new l(">",new Q1({color:Y.foreground}))})}),new t6({child:q})]});this.itemContexts=[];let H;if(this.widget.props.isLoading){let L=this.widget.props.loadingText??"Loading...";H=new X0({height:10,child:new j4({child:new _1({text:new l(L,new Q1({color:Y.foreground}))})})})}else if(Z.length===0&&this.widget.props.emptyStateText)H=new t6({child:new j4({child:new _1({text:new l(this.widget.props.emptyStateText,new Q1({color:Y.foreground,dim:!0}))})})});else{let L=Z.map((A,I)=>{let E=I===this.selectedIndex,P=this.widget.props.isItemDisabled?.(A)??!1,R;if(this.widget.props.renderItem)R=this.widget.props.renderItem(A,E,P,J);else{let C=E?D1.yellow:void 0,S=E?D1.black:Y.foreground;R=new g0({decoration:C?{color:C}:void 0,padding:z0.symmetric(2,0),child:new _1({text:new l(this.widget.props.getLabel(A),new Q1({color:S,dim:P}))})})}return new QK6(new M8({onClick:(C)=>this.handleItemClick(I,C.clickCount),child:R}),(C)=>{this.itemContexts[I]=C})});H=new v0({children:L,crossAxisAlignment:"start"})}let F=new t6({child:new M8({onScroll:this.handleScroll,opaque:!1,child:new e9({controller:this.scrollController,autofocus:!1,child:H})})}),U=[];if(this.widget.props.title){let L=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l(this.widget.props.title,new Q1({color:D1.yellow,bold:!0}))})});U.push(L)}if(U.push(W,new X0({height:1}),F),this.controller.text!==""){let L=Z.length>0?Z[this.selectedIndex]:void 0,A=L&&this.widget.props.buildDisabledReasonWidget?.(L);if(A)U.push(new g0({padding:z0.vertical(1),child:new j4({child:A})}));else U.push(new X0({height:3}))}if(this.widget.props.footer)U.push(this.widget.props.footer);return new g0({decoration:{border:X,color:D1.default()},padding:z0.symmetric(1,0),child:new v0({children:U})})}}function XK6(J){let Y=new Date().getTime()-J.getTime(),Z=Math.floor(Y/60000),X=Math.floor(Y/3600000),G=Math.floor(Y/86400000);if(Z<1)return"just now";if(Z<60)return`${Z}m ago`;if(X<24)return`${X}h ago`;if(G<7)return`${G}d ago`;return J.toLocaleDateString()}class Tf1 extends a6{props;debugLabel="NewsFeedPicker";constructor(J){super();this.props=J}build(J){let Q=[...this.props.entries].sort((X,G)=>G.pubDate.getTime()-X.pubDate.getTime()),Y=Math.max(0,...Q.map((X)=>XK6(X.pubDate).length));return new vJ({items:Q,getLabel:(X)=>X.title,onAccept:(X)=>this.props.onSelect?.(X),onDismiss:this.props.onDismiss,title:this.props.title,emptyStateText:"No news entries available",maxRenderItems:100,renderItem:(X,G,V,K)=>{let q=H6.of(K),{colors:W}=q,H=G?D1.yellow:void 0,F=G?D1.black:W.foreground,U=D1.index(8),B=(M,L)=>new X0({width:L,child:U6.end([new _1({text:new l(M,new Q1({color:U}))})])});return new g0({decoration:H?{color:H}:void 0,padding:z0.symmetric(2,0),child:new U6({children:[new t6({child:new _1({text:new l(X.title,new Q1({color:F})),overflow:"ellipsis",maxLines:1})}),new X0({width:2}),B(XK6(X.pubDate),Y)]})})}})}}class Cf1 extends d0{createState(){return new $K6}}class $K6 extends p0{isGreen=!0;timer;initState(){this.timer=setInterval(()=>{this.isGreen=!this.isGreen,this.setState()},700)}dispose(){if(this.timer)clearInterval(this.timer);super.dispose()}build(J){return new _1({text:new l("●",new Q1({color:this.isGreen?D1.green:D1.index(8),bold:!0})),maxLines:1})}}function dP8(J){let Q=new Map,Y=new Map,Z=new Map,X=[];for(let V of J)Q.set(V.id,V);for(let V of J){let K=V.parentRelationships.find((q)=>q.role==="child"&&Q.has(q.threadID)&&(q.type==="fork"||q.type==="handoff"));if(K){Z.set(V.id,K.type);let q=K.threadID,W=Y.get(q)||[];W.push(V),Y.set(q,W)}else X.push(V)}return vX.flatten(X,(V)=>Y.get(V.id)).map((V)=>({...V.item,depth:V.depth,isLast:V.isLast,ancestorsAreLast:V.ancestorsAreLast,relationshipType:Z.get(V.item.id)}))}function jf1(J,Q,Y){return new _1({text:new l(`${J}${Q}`,new Q1({color:Y})),maxLines:1})}function cP8(J,Q,Y,Z){return[jf1("+",J,Z.success),p5.horizontal(1),jf1("~",Q,Z.warning),p5.horizontal(1),jf1("-",Y,Z.destructive)]}class v31 extends a6{props;debugLabel="ThreadContinuationPicker";constructor(J){super();this.props=J}build(J){let Q=this.props.filterByWorkspace&&this.props.currentWorkspaceURI?this.props.threads.filter((F)=>F.workspaceURI===this.props.currentWorkspaceURI):this.props.threads;if(this.props.excludeCurrentThread&&this.props.currentThreadID)Q=Q.filter((F)=>F.id!==this.props.currentThreadID);let Y=this.props.recentThreadIDs||[],Z=new Set(Y),X=this.props.currentThreadID,G=[...Q].sort((F,U)=>{if(X){if(F.id===X)return-1;if(U.id===X)return 1}let B=Y.indexOf(F.id),M=Y.indexOf(U.id);if(B!==-1&&M!==-1)return B-M;if(B!==-1)return-1;if(M!==-1)return 1;return 0}),V=dP8(G),K=Math.max(0,...V.map((F)=>F.description.timeAgo.length)),q=H6.of(J),W=new N6({padding:z0.symmetric(0,1),child:new j4({child:new _1({text:new l("",new Q1({color:q.colors.foreground,dim:!0}),[new l("Ctrl+T",new Q1({color:D1.blue,dim:!0})),new l(this.props.filterByWorkspace?" for all workspaces":" to filter by workspace",new Q1({color:q.colors.foreground,dim:!0}))])})})});return new vJ({items:V,getLabel:(F)=>F.title,onAccept:(F)=>this.props.onSelect?.(F.id),onDismiss:this.props.onDismiss,onSelectionChange:(F)=>{if(this.props.previewController){if(F)this.props.previewController.select(F.id)}},title:this.props.title,isLoading:this.props.isLoading,loadingText:"Loading threads...",emptyStateText:"No threads match your filter",maxRenderItems:200,footer:this.props.isLoading?void 0:W,renderItem:(F,U,B,M)=>{let L=H6.of(M),{colors:A}=L,I=U?D1.yellow:void 0,E=U?D1.black:A.foreground,P=D1.index(8),R=(r,p)=>new X0({width:p,child:U6.end([new _1({text:new l(r,new Q1({color:P}))})])}),C=this.props.threadViewStates[F.id],S=[],k=F.relationshipType==="handoff",f=new _71;if(F.depth>0){let r=[],p=F.ancestorsAreLast.slice(1);for(let Z1 of p)r.push(new l(f.getAncestorPrefix(Z1),new Q1({color:f.connectorColor,dim:f.connectorDim})));let t=F.isLast?f.elbow:f.tee,J1=f.getConnectorText(t);r.push(new l(J1,new Q1({color:f.connectorColor,dim:f.connectorDim}))),S.push(new _1({text:new l("",void 0,r)}))}let m=[],b=X===F.id?new l("(current) ",new Q1({color:D1.green})):Z.has(F.id)?new l("(visited) ",new Q1({color:A.foreground,dim:!0})):null;if(b)m.push(new _1({text:b}));if(C){if(C.state==="active"&&(C.interactionState==="tool-running"||C.inferenceState==="running"))m.push(new Cf1),m.push(new X0({width:1}))}let c=F.title;if(F.relationshipType==="fork"){let r=c.match(/^Forked\((\d+)\): /);if(r)c=c.slice(r[0].length);else while(c.startsWith("Forked: "))c=c.slice(8);m.push(new _1({text:new l("[fork] ",new Q1({color:D1.blue}))}))}else if(k)m.push(new _1({text:new l("[handoff] ",new Q1({color:D1.index(208)}))}));if(m.push(new t6({child:new _1({text:new l(c,new Q1({color:E})),overflow:"ellipsis",maxLines:1})})),m.push(new X0({width:2})),F.diffStats&&(F.diffStats.added>0||F.diffStats.changed>0||F.diffStats.deleted>0)){let r=U?{success:P,warning:P,destructive:P}:A;m.push(...cP8(F.diffStats.added,F.diffStats.changed,F.diffStats.deleted,r)),m.push(new X0({width:2}))}return m.push(R(F.description.timeAgo,K)),new g0({decoration:I?{color:I}:void 0,padding:z0.symmetric(2,0),child:new U6({children:[...S,...m]})})}})}}class Sf1 extends a6{props;constructor(J){super();this.props=J}build(){return new j4({child:new _1({text:new l("",void 0,[new l(`Forked to new thread:
|
|
4631
4631
|
|
|
4632
4632
|
`,new Q1({color:D1.white,dim:!0})),new l(`"${this.props.newThreadTitle||"Untitled"}"`,new Q1({color:D1.white}))]),textAlign:"center"})})}}N0();class GK6 extends p0{labels=[];isLoading=!0;currentQuery="";initState(){this.loadLabels()}async loadLabels(){try{let J=await this.widget.props.internalAPIClient.getUserLabels({query:""},{config:this.widget.props.configService});if(!J.ok){v.error("Failed to load labels",J.error),this.isLoading=!1,this.labels=[],this.setState();return}this.labels=J.result,this.isLoading=!1,this.setState()}catch(J){v.error("Failed to load labels",J),this.isLoading=!1,this.labels=[],this.setState()}}getValidationError(J){if(J.length===0)return null;if(J.length>32)return"Label name cannot exceed 32 characters";if(!/^[a-z0-9][a-z0-9-]*$/.test(J))return"Label must be lowercase alphanumeric with hyphens, starting with a letter or number";return null}isValidLabelName(J){return this.getValidationError(J)===null&&J.length>0}getAvailableLabels(){let J=this.widget.props.currentLabels||[];return this.labels.filter((Q)=>!J.includes(Q.name))}shouldShowCreateMarker(J){if(J.length===0||this.isLoading)return!1;let Q=J.trim().toLowerCase();if(!this.isValidLabelName(Q))return!1;let Y=this.widget.props.currentLabels||[],Z=this.labels.some((G)=>G.name===Q),X=Y.includes(Q);return!Z&&!X}build(J){let Q=H6.of(J),{colors:Y}=Q,Z=this.currentQuery.trim().toLowerCase(),X=Z.length>0?this.getValidationError(Z):null,G=this.getAvailableLabels(),K=[{id:"__create__",name:"__create_placeholder__",createdAt:"",__isCreateMarker:!0},...G];return new vJ({title:"Add Label",items:K,getLabel:(q)=>{if("__isCreateMarker"in q)return this.currentQuery.trim().toLowerCase();return q.name},onAccept:(q)=>{if("__isCreateMarker"in q)this.widget.props.onSelect(this.currentQuery.trim().toLowerCase());else this.widget.props.onSelect(q.name)},onDismiss:this.widget.props.onDismiss,isLoading:this.isLoading,loadingText:"Loading labels...",emptyStateText:X||"Type to create a new label",renderItem:(q,W,H,F)=>{let U=W?D1.yellow:void 0,B=W?D1.black:Y.foreground;if("__isCreateMarker"in q&&q.__isCreateMarker){let L=this.currentQuery.trim().toLowerCase();return new g0({decoration:U?{color:U}:void 0,padding:z0.symmetric(2,0),child:new _1({text:new l("",void 0,[new l("Create new label: ",new Q1({color:B})),new l(L,new Q1({color:B,bold:!0}))])})})}return new g0({decoration:U?{color:U}:void 0,padding:z0.symmetric(2,0),child:new _1({text:new l(q.name,new Q1({color:B}))})})},filterItem:(q,W)=>{if(this.currentQuery!==W)this.currentQuery=W,setTimeout(()=>this.setState(),0);if("__isCreateMarker"in q&&q.__isCreateMarker)return this.shouldShowCreateMarker(W);let F=W.trim().toLowerCase();return F.length===0||q.name.includes(F)},sortItems:(q,W,H)=>{let F="__isCreateMarker"in q.item&&q.item.__isCreateMarker,U="__isCreateMarker"in W.item&&W.item.__isCreateMarker;if(F&&!U)return-1;if(!F&&U)return 1;return W.score-q.score}})}}class _f1 extends d0{props;constructor(J){super();this.props=J}createState(){return new GK6}}class dI extends d0{props;constructor(J){super();this.props=J}createState(){return new VK6}}class VK6 extends p0{_spinner=new DY;animationInterval=null;initState(){super.initState(),this.animationInterval=setInterval(()=>{this._spinner.step(),this.setState(()=>{})},100)}dispose(){if(this.animationInterval)clearInterval(this.animationInterval),this.animationInterval=null;super.dispose()}build(J){let Q=H6.of(J),{colors:Y}=Q,Z=B4.all(new W4(Y.foreground,1,"solid")),X=this._spinner.toBraille(),G=new _1({textAlign:"center",text:new l("",void 0,[new l(X,new Q1({color:D1.yellow})),new l(" ",void 0),new l(this.widget.props.message,new Q1({color:Y.foreground}))])}),K=[new t6({child:new v0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[G]})})];if(this.widget.props.onAbort)K.push(new X0({height:2,child:new g0({padding:z0.symmetric(2,0),child:new _1({text:new l("",new Q1({dim:!0}),[new l("Press ",new Q1({color:Y.foreground})),new l("Esc",new Q1({color:Y.info})),new l(" to cancel",new Q1({color:Y.foreground}))])})})}));let q=new g0({decoration:new T8(D1.default(),Z),child:new X0({width:60,height:7,child:new v0({mainAxisAlignment:"start",children:K})})});if(this.widget.props.onAbort)return new w8({debugLabel:"LoadingDialog",autofocus:!0,onKey:(W)=>{if(W.key==="Escape")return this.widget.props.onAbort?.(),"handled";return"ignored"},child:q});return q}}class cI extends d0{props;constructor(J){super();this.props=J}createState(){return new KK6}}class KK6 extends p0{scrollController=new A5;scrollAreaKey=new EQ("message-dialog-scroll-area");viewportHeight=20;initState(){super.initState(),this.scrollController.followMode=!1,this.scrollController.addListener(()=>{this.setState()})}dispose(){this.scrollController.dispose(),super.dispose()}isWidgetMessage(J){return J instanceof xX}getViewportHeight(){let Q=this.scrollAreaKey.currentElement?.renderObject;if(Q&&"size"in Q){let Y=Q.size;if(typeof Y.height==="number"&&Y.height>0)return this.viewportHeight=Y.height,Y.height}return this.viewportHeight}build(J){let Q=H6.of(J),Y=this.widget.props.message,Z=(()=>{if(this.isWidgetMessage(Y))return{title:Y.title,type:Y.type};if(Y instanceof Error&&Y.name==="CommandCancelledError")return{title:"Cancelled",type:"info",description:Y.message};if(Y instanceof Error&&Y.name==="CommandTimeoutError")return{title:"Timeout",type:"error",description:Y.message};let H=T71(Y);return{title:H.title,type:H.type,description:H.description}})(),X=Z.type==="error"?D1.red:D1.yellow,G=B4.all(new W4(D1.default(),1,"solid")),V=new g0({padding:z0.symmetric(1,0),child:new _1({text:new l(Z.title,new Q1({color:X,bold:!0}))})}),K=this.isWidgetMessage(Y)?Y.widget:new _1({text:new l(Z.description,new Q1({color:D1.default()})),selectable:!0}),q=new t6({child:new Gz({child:new g0({padding:z0.symmetric(1,0),child:new U6({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new t6({child:new e9({controller:this.scrollController,autofocus:!0,child:K})}),new I2({controller:this.scrollController,thumbColor:Q.app.scrollbarThumb,trackColor:Q.app.scrollbarTrack,getScrollInfo:()=>{let H=this.scrollController.maxScrollExtent,F=this.scrollController.offset,U=this.getViewportHeight(),B=H+U;return{totalContentHeight:Math.max(B,0),viewportHeight:Math.max(U,1),scrollOffset:Math.max(F,0)}}})]})})})}),W=new g0({padding:z0.symmetric(1,0),child:new _1({text:this.widget.props.onRetry?new l("",void 0,[new l("Press ",new Q1({color:D1.default(),dim:!0})),new l("R",new Q1({color:D1.yellow})),new l(" to retry, ",new Q1({color:D1.default(),dim:!0})),new l("Esc",new Q1({color:D1.yellow})),new l(" to cancel",new Q1({color:D1.default(),dim:!0}))]):new l("Press any key to close",new Q1({color:D1.default(),dim:!0,italic:!0}))})});return new w8({onKey:(H)=>{if(this.widget.props.onRetry&&H.key==="r")return this.widget.props.onRetry(),"handled";if(H.key==="Escape")return this.widget.props.onDismiss(),"handled";if(!this.widget.props.onRetry)return this.widget.props.onDismiss(),"handled";return"ignored"},autofocus:!1,child:new g0({decoration:{border:G,color:D1.default()},padding:z0.all(1),child:new v0({mainAxisAlignment:"center",children:[V,new X0({height:1}),q,W]})})})}}class kf1 extends a6{build(){return new j4({child:new _1({text:new l("",void 0,[new l(`✓ Thread Shared
|
|
4633
4633
|
|
|
@@ -4736,7 +4736,7 @@ https://www.jetbrains.com/help/idea/managing-plugins.html#install_plugin_from_di
|
|
|
4736
4736
|
`)?`${K}...`:X,W=new Q1({color:D1.index(8)}),H=[new l(q,W)];if(V>0){let F=new Q1({color:Y.success});for(let U=1;U<=V;U++)H.push(new l(" ")),H.push(new l(`[${U}]`,F))}return new N6({padding:z0.only({bottom:0}),child:new U6({crossAxisAlignment:"start",children:[new N6({padding:z0.only({right:1}),child:new _1({text:new l("•",new Q1({color:D1.index(8)}))})}),new t6({child:new _1({text:new l("",void 0,H)})})]})})}}class Wg1 extends d0{createState(){return new RH6}}class RH6 extends p0{_animationTimer;_visible=!0;initState(){super.initState(),this._startAnimation()}dispose(){this._stopAnimation(),super.dispose()}_startAnimation(){this._animationTimer=setInterval(()=>{this.setState(()=>{this._visible=!this._visible})},500)}_stopAnimation(){if(this._animationTimer)clearInterval(this._animationTimer),this._animationTimer=void 0}build(J){let Q=new Q1({color:D1.red}),Y=new Q1({color:this._visible?D1.red:D1.transparent()});return new U6({children:[new _1({text:new l("⏺",Y)}),new X0({width:1}),new _1({text:new l("Replay",Q)})]})}}s0();function ZS8(J){let Y=new Date().getTime()-J.getTime(),Z=Math.floor(Y/3600000),X=Math.floor(Z/24),G=Math.floor(X/7),V=Math.floor(X/30);if(Z<1)return"Just now";if(Z<24)return`${Z}h ago`;if(X<7)return`${X}d ago`;if(G<=4)return`${G}w ago`;return`${V}mo ago`}class Hg1{threadHistoryService;constructor(J){this.threadHistoryService=J}async fetchThreadSummaries(J=""){try{let Q=await new Promise((Y)=>{let Z=this.threadHistoryService.observeThreadList().subscribe((X)=>{Z.unsubscribe(),Y(X)})});return{ok:!0,threads:this.formatThreadSummaries(Q,J)}}catch(Q){return{ok:!1,errorMsg:Q instanceof Error?Q.message:"An unexpected error occurred"}}}observeThreadSummaries(J=""){return this.threadHistoryService.observeHistory().pipe(X6((Q)=>this.formatThreadSummaries(Q,J)))}formatThreadSummaries(J,Q){return J.filter((Z)=>{if(Z.mainThreadID)return!1;if(!Q.trim())return!0;let X=Z.title?.toLowerCase()||"untitled",G=Z.id.toLowerCase(),V=Q.toLowerCase();return X.includes(V)||G.includes(V)}).map((Z)=>{let X=new Date(Z.userLastInteractedAt),G=ZS8(X),V=Z.id.slice(-8),K=Z.env?.initial.trees?.[0]?.uri;return{id:Z.id,title:Z.title||"Untitled",updatedAt:new Date(Z.userLastInteractedAt).toISOString(),description:{timeAgo:G,title:Z.title||"Untitled",shortThreadID:V},diffStats:Z.summaryStats?.diffStats,workspaceURI:K,parentRelationships:Z.parentRelationships,agentMode:Z.agentMode,details:{messageCount:Z.summaryStats?.messageCount}}})}}N0();U8();U8();Tb();function TH6(J){let Q=SD0(J),Y=Array.from(Q.entries()).map(([V,K])=>({path:V,diffStats:K})),Z=rm0(J),G=qP(J)?.totalInputTokens??0;return{filesAffected:Y,totalTokens:G,totalCredits:Z}}class Fg1{currentId=null;current=null;statsCache=new Map;subscribeTimer=null;subscription=null;listeners=[];threadService=null;scrollController=new A5;constructor(){}setThreadService(J){this.threadService=J}async select(J){if(!this.threadService){v.error("TUI assert failed: ThreadService used before being set");return}if(this.currentId===J)return;this.cancelTimerAndSubscription(),this.currentId=J;let Q=await this.threadService.get(J);if(Q){if(this.currentId===J)this.current=Q,this.notifyListeners()}this.subscribeTimer=setTimeout(()=>{this.subscribeLive(J)},1000)}clear(){this.cancelTimerAndSubscription(),this.currentId=null,this.current=null,this.notifyListeners()}addListener(J){this.listeners.push(J)}removeListener(J){let Q=this.listeners.indexOf(J);if(Q!==-1)this.listeners.splice(Q,1)}getCurrentThread(){return this.current}getCurrentStats(){if(!this.current)return null;let J=this.statsCache.get(this.current.id);if(J&&J.version===this.current.v)return J.stats;let Q=TH6(this.current);return this.statsCache.set(this.current.id,{stats:Q,version:this.current.v}),Q}dispose(){this.cancelTimerAndSubscription(),this.scrollController.dispose(),this.listeners=[]}subscribeLive(J){if(!this.threadService){v.error("TUI assert failed: ThreadService used before being set");return}if(this.currentId!==J)return;this.subscription=this.threadService.observePatches(J).pipe(IL()).subscribe((Q)=>{if(this.currentId===J)this.current=Q,this.notifyListeners()})}cancelTimerAndSubscription(){if(this.subscribeTimer)clearTimeout(this.subscribeTimer),this.subscribeTimer=null;if(this.subscription)this.subscription.unsubscribe(),this.subscription=null}notifyListeners(){for(let J of this.listeners)J(this.current)}}function CH6(J,Q){switch(J){case"update-available":return[new l("A newer Amp is available. Run ",new Q1({color:Q.foreground,dim:!0})),new l("amp update",new Q1({color:Q.warning}))];case"updated":return null;case"updated-with-warning":return[new l("Update complete, run ",new Q1({color:Q.foreground,dim:!0})),new l("amp update",new Q1({color:Q.warning})),new l(" to see warnings",new Q1({color:Q.foreground,dim:!0}))];case"update-error":return[new l("Update failed, run ",new Q1({color:Q.foreground,dim:!0})),new l("amp update",new Q1({color:Q.warning})),new l(" to see warnings",new Q1({color:Q.foreground,dim:!0}))];case"hidden":return null}}async function KS8(J){return new Promise((Q)=>{$S8("git",["branch","--show-current"],{cwd:J},(Y,Z)=>{if(Y){Q(null);return}let X=Z.trim();Q(X||null)})})}class yH6 extends d0{dependencies;constructor(J){super();this.dependencies=J}createState(){return new P21}}class P21 extends p0{themeColors=null;themeApp=null;selectionListener=null;ideStatus=null;randomAd=null;adSubscription=null;adReadinessTimeout=null;threadLoadSubscription=null;lastAdImpressionId=null;lastUserInteractionTime=Date.now();isConfirmingExit=!1;isExiting=!1;isConfirmingClearInput=!1;isConfirmingCancelProcessing=!1;statusMessage=null;statusMessageTimer=null;isShowingHelp=!1;isShowingConsoleOverlay=!1;isShowingMCPStatusModal=!1;isShowingConfirmationOverlay=!1;isShowingFileChangesOverlay=!1;isShowingContextDetailOverlay=!1;threadCostInfo=void 0;threadCostInfoThreadID=void 0;threadCostInfoLastUsageLedgerLength=0;lastInferenceState=void 0;confirmationOverlayContent="";exitConfirmTimeout=null;clearInputConfirmTimeout=null;cancelProcessingConfirmTimeout=null;historyIndex=-1;historyDraft=null;bashInvocations=[];currentTitle=void 0;currentShellModeStatus=void 0;imageAttachments=[];pendingSkills=[];pendingSkillsSubscription=null;displayMessage=null;executingCommand=null;isShowingJetBrainsInstaller=!1;isShowingIdePicker=!1;isShowingPalette=!1;paletteShowOptions=null;threadsForPicker=[];clustersForPicker=[];isLoadingThreads=!1;threadPreviewController=new Fg1;previewThread=null;todoScrollController=(()=>{let J=new A5;return J.followMode=!1,J})();filterThreadPickerByWorkspace=!0;currentGitBranch=null;messageViewFocusNode=new D8({debugLabel:"MessageViewFocus"});autocompleteFocusNode=new D8({debugLabel:"AutocompleteFocus"});isTextfieldAndAutocompleteFocused=!1;submitDisabledHint=null;submitDisabledHintTimer=null;showImageUnsupportedHint=!1;imageUnsupportedHintTimer=null;imagePreviewIndex=null;adActionModal=null;newsFeedReader=null;newsFeedEntries=[];newsFeedSubscription=null;bottomGridUserHeight=void 0;bottomGridDragStartY=null;bottomGridDragStartHeight=null;previousThreadIdForHint=null;handoffController=null;handoffState={isInHandoffMode:!1,isGeneratingHandoff:!1,isConfirmingAbortHandoff:!1,pendingHandoffPrompt:null,spinner:null};pendingMCPServers=[];mcpTrustSubscription=null;pendingOAuthRequest=null;mcpServers=[];mcpServersSubscription=null;agentModeController=null;freeTierStatus={canUseAmpFree:!1};agentModePulseSeq=0;agentModeSlideProgress=null;agentModeSlideTimer=null;updateState="hidden";updateServiceSubscription=null;toastController=new tx1;isMessageViewInSelectionMode=!1;threadBackStack=[];threadForwardStack=[];replayDisplayedMessages=[];replayAbortController=new AbortController;replayTypingTimer=null;mysteriousMessage=null;isShowingMysteriousMessageModal=!1;mysteriousMessageSubscription=null;mysterySequenceManager=null;mysterySequenceProgress=null;mysteryKeyInterceptorUnsubscribe=null;static MYSTERY_SEQUENCE=["ctrl+x","y","z"];userDisplayBalanceInfo=null;balanceInfoSubscription=null;async initNewsFeed(){let J=async(Y)=>{return N5(Y,void 0,this.widget.dependencies.configService)},Q=ns0();this.newsFeedReader=new Ax1(Q,J,"/news.rss"),this.newsFeedSubscription=this.newsFeedReader.stream().subscribe({next:(Y)=>{if(Y.length>0)this.setState(()=>{this.newsFeedEntries=[...Y,...this.newsFeedEntries]})},error:(Y)=>{v.error("News feed error:",Y)}})}recordNavigation(J){this.threadBackStack.push(J),this.threadForwardStack=[]}navigateBack=async()=>{if(this.threadBackStack.length===0)return;let J=this.widget.dependencies.worker.thread.id,Q=this.threadBackStack.pop();this.threadForwardStack.push(J),await this.switchToExistingThread(Q,{recordInNavigationHistory:!1})};navigateForward=async()=>{if(this.threadForwardStack.length===0)return;let J=this.widget.dependencies.worker.thread.id,Q=this.threadForwardStack.pop();this.threadBackStack.push(J),await this.switchToExistingThread(Q,{recordInNavigationHistory:!1})};onThreadSwitch(){this.handoffController?.resetUIState(),this.isMessageViewInSelectionMode=!1}startAndSwitchToNewThread=async()=>{let J=this.widget.dependencies.worker.thread.id;this.recordNavigation(J);let Q=await this.widget.dependencies.startNewThread();return this.widget.dependencies.worker=Q,this.widget.dependencies.threadID=Q.thread.id,this.widget.dependencies.switchWorker(Q),this.setState(()=>{this.onThreadSwitch(),this.previousThreadIdForHint=J}),Q};async startReplay(){let J=this.widget.dependencies.replayMode;if(!J)return;let{thread:Q,typingEnabled:Y,baseWpm:Z}=J,X=Q.messages;for(let G=0;G<X.length;G++){if(this.replayAbortController.signal.aborted)break;let V=X[G];if(!V)continue;if(G>0)await this.replaySleep(J.messageDelayMs);if(V.role==="user"&&Y){let W=V.content.filter((H)=>H.type==="text").map((H)=>H.text).join(`
|
|
4737
4737
|
`);if(W)await this.replayTypeMessage(W,Z)}if(V.role==="assistant"){let W=V.content.some((U)=>U.type==="tool_use"),H=X[G+1],F=H?.role==="user"&&H.content.some((U)=>U.type==="tool_result");if(W&&F){let U={...V,state:{type:"streaming"}};this.setState(()=>{this.replayDisplayedMessages=[...this.replayDisplayedMessages,U],this.textController.clear()});let B=J.thread.id;this.getMessageScrollController(B).scrollToBottom(),await this.replaySleep(J.toolProgressDelayMs),this.setState(()=>{this.replayDisplayedMessages=[...this.replayDisplayedMessages.slice(0,-1),V]});continue}}this.setState(()=>{this.replayDisplayedMessages=[...this.replayDisplayedMessages,V],this.textController.clear()});let K=J.thread.id;this.getMessageScrollController(K).scrollToBottom()}await this.replaySleep(J.exitDelayMs),y8.instance.stop()}async replayTypeMessage(J,Q){this.textController.clear();let Y=J.split(/(?<=\s)/),Z=60000/Q;for(let X of Y){if(this.replayAbortController.signal.aborted)break;if(this.looksLikePastedContent(X.trim())){await this.replaySleep(150),this.textController.text=this.textController.text+X,this.textController.cursorPosition=this.textController.text.length,this.setState(()=>{}),await this.replaySleep(300);continue}let G=Z/X.length;for(let V of X){this.textController.text=this.textController.text+V,this.textController.cursorPosition=this.textController.text.length,this.setState(()=>{});let K=0.8+Math.random()*0.4,q=G*K;await this.replaySleep(q)}}}looksLikePastedContent(J){if(/^[a-z][a-z0-9+.-]*:\/\//i.test(J))return!0;if(J.startsWith("/")&&J.length>10)return!0;if(/^[a-z]:\\/i.test(J))return!0;if(/^[a-f0-9]{7,40}$/i.test(J))return!0;if(/^T-[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}$/i.test(J))return!0;return!1}replaySleep(J){return new Promise((Q)=>{this.replayTypingTimer=setTimeout(Q,J)})}getEffectiveAgentMode(){return this.agentModeController?.getEffectiveMode()??"smart"}isProcessing(){let{threadState:J}=this.widget.dependencies;if(!J.mainThread)return!1;if(J.viewState.state!=="active")return!1;if(Boolean(J.viewState.inferenceState==="running"))return!0;let Y=J.items.filter((G)=>G.type==="toolResult").filter((G)=>G.toolResult.run.status==="in-progress"||G.toolResult.run.status==="queued"),Z=J.subagentActiveTools.filter((G)=>G.toolRun.status==="in-progress"||G.toolRun.status==="queued");return[...Y,...Z].length>0}showSubmitDisabledHint(J){if(this.submitDisabledHintTimer)clearTimeout(this.submitDisabledHintTimer);this.setState(()=>{this.submitDisabledHint=J}),this.submitDisabledHintTimer=setTimeout(()=>{this.setState(()=>{this.submitDisabledHint=null}),this.submitDisabledHintTimer=null},3000)}getUIHint(){let J=this.themeColors?.colorScheme;if(!J)return null;let Q=this.themeApp;if(!Q)return null;if(this.submitDisabledHint)return new l(this.submitDisabledHint,new Q1({color:J.foreground,dim:!0}));if(this.isExiting)return new l("Exiting...",new Q1({color:J.foreground,dim:!0}));if(this.isConfirmingExit)return new l("",void 0,[new l("Ctrl+C",new Q1({color:Q.keybind})),new l(" again to exit",new Q1({color:J.foreground,dim:!0}))]);if(this.isConfirmingClearInput)return new l("",void 0,[new l("Esc",new Q1({color:Q.keybind})),new l(" again to clear input",new Q1({color:J.foreground,dim:!0}))]);if(this.isShowingHelp)return new l("",void 0,[new l("Escape",new Q1({color:Q.keybind})),new l(" to close help",new Q1({color:J.foreground,dim:!0}))]);if(this.showImageUnsupportedHint){let Z=this.getEffectiveAgentMode(),X=E21(Z);return new l("",void 0,[new l("Images aren't supported in ",new Q1({color:J.warning,dim:!1})),new l(Z,new Q1({color:X})),new l(" mode.",new Q1({color:J.warning,dim:!1}))])}if(this.isProcessing()||this.bashInvocations.length>0){if(this.isConfirmingCancelProcessing)return new l("",void 0,[new l("Esc",new Q1({color:Q.keybind})),new l(" again to cancel",new Q1({color:J.foreground,dim:!0}))]);return new l("",void 0,[new l("Esc",new Q1({color:Q.keybind})),new l(" to cancel",new Q1({color:J.foreground,dim:!0}))])}if(this.statusMessage)return new l(this.statusMessage,new Q1({color:J.foreground,dim:!0}));let Y=CH6(this.updateState,J);if(Y)return new l("",void 0,Y);return null}getParentThreadInfo(){let J=this.previewThread??this.widget.dependencies.threadState.mainThread;if(!J)return null;let Q=wL(J).filter((V)=>V.type==="fork"||V.type==="handoff");if(Q.length===0)return null;let Y=Q[0],Z=Y.threadID,G=this.threadsForPicker.find((V)=>V.id===Z)?.title??Z.slice(-8);return{type:Y.type==="handoff"?"handoff":"fork",title:G}}isTranscriptEmpty(){let{threadState:J}=this.widget.dependencies;return J.items.length===0}handleMessageRestoreSubmit=async(J)=>{let{threadState:Q,worker:Y}=this.widget.dependencies;if(!Q.mainThread?.id)return;let X=Q.mainThread?.messages.findIndex((G)=>G===J);if(X===void 0||X===-1)return;try{this.cancelBashInvocations(),await Y.cancel(),await Y.handle({type:"thread:truncate",fromIndex:X}),this.scrollMessageViewToBottom(),this.setState(()=>{this.imageAttachments=[]})}catch(G){v.error("Failed to edit message:",G)}};forkMessage=async(J)=>{let{threadState:Q,workerDeps:Y,threadSyncService:Z}=this.widget.dependencies,X=Q.mainThread?.id;if(!X)return;let G=Q.mainThread?.messages.findIndex((V)=>V===J);if(G===void 0||G<=0)return;try{let V=await r3.getOrCreateForThread(Y,X),K=await $j(V,Z,G-1);await this.switchToExistingThread(K)}catch(V){v.error("Failed to fork thread:",V),this.showErrorMessage(`Failed to fork thread: ${V}`)}};handleMessageEditSubmit=async(J,Q)=>{let{threadState:Y,worker:Z}=this.widget.dependencies,X=Y.mainThread;if(!X)return;let G=X.messages.findIndex((V)=>V.messageId!==void 0&&V.messageId===J.messageId);if(G===-1)return;try{this.cancelBashInvocations(),await Z.cancel(),this.widget.dependencies.history.add(Q);let V=VD(Q);if(V)await Z.handle({type:"thread:truncate",fromIndex:G}),this.invokeBashCommand(V.cmd,{visibility:V.visibility});else{let K=[{type:"text",text:Q}];if(this.imageAttachments.length>0)K.push(...this.imageAttachments);let q={content:K,agentMode:X.agentMode},W=G===0;if(X.agentMode&&!W&&q.agentMode!==X.agentMode){v.error(`Cannot edit message: This thread uses ${X.agentMode} mode. To change mode, create a new thread.`);return}await Z.handle({type:"user:message",message:q,index:G})}this.scrollMessageViewToBottom(),this.setState(()=>{this.imageAttachments=[]})}catch(V){v.error("Failed to edit message:",V)}};getAffectedFiles=async(J)=>{let{worker:Q,threadState:Y}=this.widget.dependencies;try{let Z=Y.mainThread;if(!Z)return[];let X=Z.messages.findIndex((V)=>V===J);if(X===-1)return[];return(await Q.getFilesAffectedByTruncation(X)).map(u3)}catch(Z){return v.error("Failed to get affected files:",Z),[]}};textController=new MZ;messageScrollControllers=new Map;getMessageScrollController(J){if(!this.messageScrollControllers.has(J))this.messageScrollControllers.set(J,new A5);return this.messageScrollControllers.get(J)}scrollMessageViewToBottom(){let{threadState:J}=this.widget.dependencies,Q=J.mainThread?.id;if(!Q)return;this.getMessageScrollController(Q).scrollToBottom()}findElementByKey(J){return this.searchElementTreeByKey(this.context.element,J)}searchElementTreeByKey(J,Q){if(!J)return null;if(J?.widget?.key?.value===Q)return J;if(J?.child){let Z=this.searchElementTreeByKey(J.child,Q);if(Z)return Z}if(J?.children)for(let Z of J.children){let X=this.searchElementTreeByKey(Z,Q);if(X)return X}return null}setupSelectionListener(){let J=this.findElementByKey("message-view-selection-area");if(J?.state){let Q=J.state;if(Q?.controller&&!this.selectionListener)this.selectionListener=()=>{this.setState(()=>{})},Q.controller.addListener(this.selectionListener),Q.controller.onSelectionCopied=()=>{this.toastController.show("Selection copied to clipboard","success",2000)}}}updateTerminalTitle(){let{threadState:J}=this.widget.dependencies,Q=J.mainThread?.title;if(Q!==this.currentTitle){this.currentTitle=Q;let Y=process.cwd().replace(process.env.HOME||"","~"),Z=Q?`amp - ${Q} - ${Y}`:"";process.stdout.write(xy1(Z))}}_handleTextCopy(J){if(J&&J.length>0)this.toastController.show("Selection copied to clipboard","success",2000)}textFieldKey=new V3("text-field");ideStatusSubscription=null;ideMessageSubscription=null;ideAppendToPromptSubscription=null;paletteCommands;paletteConfig;completionBuilder=null;textChangeListener=()=>{let J=this.textController.text;if(J==="/"&&!this.handoffState.isGeneratingHandoff){this.showCommandPalette(),this.textController.clear();return}let Q=VD(J);this.currentShellModeStatus=this.handoffState.isInHandoffMode?void 0:Q?.visibility,this.setState(()=>{})};navigateHistoryPrevious=()=>{let J=this.widget.dependencies.history.previous();if(J!==null){if(this.historyIndex===-1)this.historyDraft=this.textController.text;this.historyIndex++,this.textController.text=J,this.textController.moveCursorToStart()}};navigateHistoryNext=()=>{let J=this.widget.dependencies.history.next();if(J!==null)this.historyIndex--,this.textController.text=J,this.textController.moveCursorToEnd();else if(this.historyIndex>-1)this.historyIndex=-1,this.textController.text=this.historyDraft||"",this.textController.moveCursorToEnd(),this.historyDraft=null};resetHistory=()=>{this.widget.dependencies.history.reset(),this.historyIndex=-1,this.historyDraft=null};openJetBrainsInstaller=()=>{this.setState(()=>{this.isShowingJetBrainsInstaller=!0})};dismissJetBrainsInstaller=()=>{this.setState(()=>{this.isShowingJetBrainsInstaller=!1})};openIdePicker=()=>{this.setState(()=>{this.isShowingIdePicker=!0})};dismissIdePicker=()=>{this.setState(()=>{this.isShowingIdePicker=!1}),n8.instance.addPostFrameCallback(()=>{this.autocompleteFocusNode.requestFocus()})};handleIdeSelection=async(J,Q)=>{if(this.widget.dependencies.ideClient.getSelectedConfig()?.pid===J.pid){this.dismissIdePicker();return}try{await this.connectToSelectedIde(J,Q)}catch(Y){let Z=Y instanceof Error?Y.message:String(Y);this.setState(()=>{this.displayMessage=Error(`Failed to connect to IDE: ${Z}`)})}this.widget.dependencies.ideClient.selectConfig(J),this.dismissIdePicker()};async connectToSelectedIde(J,Q){await this.widget.dependencies.ideClient.start(J,!0,Q)}previewControllerListener=(J)=>{this.setState(()=>{this.previewThread=J})};showStandaloneThreadPicker=()=>{this.showCommandPalette({type:"standalone",commandId:"continue",onSubmit:()=>{this.threadPreviewController.clear(),this.setState(()=>{this.isShowingPalette=!1,this.paletteShowOptions=null}),n8.instance.addPostFrameCallback(()=>{if(!this.isMessageViewInSelectionMode&&!this.isShowingPalette)this.autocompleteFocusNode.requestFocus()})},onCancel:()=>{this.exitApplication()}})};toggleThreadPickerWorkspaceFilter=()=>{this.setState(()=>{this.filterThreadPickerByWorkspace=!this.filterThreadPickerByWorkspace})};showCommandPalette(J){if(this.handoffState.isGeneratingHandoff)return;if(this.setState(()=>{this.isShowingPalette=!this.isShowingPalette,this.paletteShowOptions=J??null}),this.isShowingPalette)this.loadThreadsForPicker()}isShowingStandalonePalette(){return this.isShowingPalette&&this.paletteShowOptions?.type==="standalone"}getPaletteCommands(){if(!this.paletteCommands){if(!this.paletteConfig)throw Error("Config not yet available");this.paletteCommands=new lf1(this.widget.dependencies.configService,this.widget.dependencies.commandRegistry,(J)=>{this.setState(()=>{this.executingCommand=J})},()=>{this.setState(()=>{this.executingCommand=null})},this.widget.dependencies.isDogfooding,this.paletteConfig)}return this.paletteCommands}getCompletionBuilder(){if(!this.completionBuilder)this.completionBuilder=new af1(this.widget.dependencies.fuzzyServer);return this.completionBuilder}dismissPalette=()=>{this.setState(()=>{this.isShowingPalette=!1,this.paletteShowOptions=null})};getCommandPaletteContext=(J)=>{let{threadState:Q,recentThreadIDs:Y}=this.widget.dependencies;if(!Q.mainThread)return null;let Z=b0.file(process.cwd()),X=v6(Z);return{recentThreadIDs:Y,currentThreadID:Q.mainThread.id,context:J,worker:this.widget.dependencies.worker,editorState:this.textController,isProcessing:this.isProcessing(),thread:Q.mainThread,ampURL:this.widget.dependencies.ampURL,threadService:this.widget.dependencies.threadService,threadSyncService:this.widget.dependencies.threadSyncService,configService:this.widget.dependencies.configService,skillService:this.widget.dependencies.skillService,openInEditor:this.openInEditor,takeImageAttachments:()=>{let G=this.imageAttachments;return this.setState(()=>{this.imageAttachments=[]}),G},setImageAttachments:(G)=>{this.setState(()=>{this.imageAttachments=G})},editorDispatch:(G)=>{switch(G.type){case"set-input":this.textController.clear(),this.textController.insertText(G.input);break;case"insert-text":this.textController.insertText(G.text);break;case"clear":this.textController.clear();break}},submitMessage:(G)=>{return this.proceedWithUserMessage(G)},exitApp:this.exitApplication,openHelp:()=>{this.setState(()=>{this.isShowingHelp=!0})},settingsStorage:this.widget.dependencies.settingsStorage,clientId:this.widget.dependencies.clientId,mcpService:this.widget.dependencies.mcpService,toolboxService:this.widget.dependencies.toolboxService,startNewThread:async()=>{await this.startAndSwitchToNewThread()},navigateBack:this.navigateBack,navigateForward:this.navigateForward,canNavigateBack:this.threadBackStack.length>0,canNavigateForward:this.threadForwardStack.length>0,canUseAmpFree:this.widget.dependencies.freeTierStatus.canUseAmpFree,switchToThread:async(G)=>{return await this.switchToExistingThread(G),this.setState(()=>{this.isMessageViewInSelectionMode=!1}),this.widget.dependencies.worker},generateHandoffPrompt:async(G,V,K)=>{let q=this.widget.dependencies.threadState.mainThread?.id;if(!q)throw Error("No active thread");let W=setTimeout(()=>{K.throwIfAborted()},60000);try{let H=await this.widget.dependencies.threadService.generateHandoffPrompt(q,G,V,this.widget.dependencies.configService,K,this.widget.dependencies.worker.fs.fileSystemReader());return clearTimeout(W),H}catch(H){throw clearTimeout(W),H}},handleHandoff:async(G,V)=>{let{goal:K,generatedPrompt:q,images:W}=V;if(!K&&!q)return{ok:!1,error:Error("Either goal or generatedPrompt required")};try{let H=this.widget.dependencies.threadState.mainThread?.id;if(!H)return{ok:!1,error:Error("No active thread")};let F=setTimeout(()=>G.abort(new $S("Handoff took too long and was aborted (timeout: 60s)")),60000);try{let U=await this.widget.dependencies.threadService.createHandoffThread(H,{goal:K,generatedPrompt:q,images:W,filesystem:this.widget.dependencies.worker.fs.fileSystemReader()},this.widget.dependencies.configService,G.signal);return clearTimeout(F),await this.switchToExistingThread(U),{ok:!0}}catch(U){if(clearTimeout(F),U instanceof Error&&(U.name==="AbortError"||U.message.includes("aborted")))throw G.signal.reason;throw U}}catch(H){return v.error("Failed to create handoff thread",H),{ok:!1,error:H instanceof Error?H:Error(String(H))}}},getGuidanceFiles:async(G)=>{if(!Q.mainThread)return[];return(await st({filesystem:this.widget.dependencies.worker.fs.fileSystemReader(),configService:this.widget.dependencies.configService,threadService:this.widget.dependencies.threadService},Q.mainThread,G)).map((K)=>({uri:K.uri,type:K.type}))},openIdePicker:()=>{this.openIdePicker()},getAgentMode:()=>{return this.agentModeController?.getMode()??null},setAgentMode:(G)=>{this.agentModeController?.setMode(G)},toggleAgentMode:this.toggleAgentMode,getEffectiveAgentMode:()=>this.getEffectiveAgentMode(),getEditorText:()=>this.textController.text,workspace:this.widget.dependencies.workspace??null,completionBuilder:this.getCompletionBuilder(),threads:this.threadsForPicker,clusters:this.clustersForPicker,previewController:this.threadPreviewController,isLoadingThreads:this.isLoadingThreads,filterByWorkspace:this.filterThreadPickerByWorkspace,currentWorkspace:X,threadViewStates:this.widget.dependencies.workerController.threadViewStates,newsFeedEntries:this.newsFeedEntries,showMCPStatusModal:()=>{this.setState(()=>{this.isShowingMCPStatusModal=!0})},internalAPIClient:this.widget.dependencies.internalAPIClient,features:this.widget.dependencies.features,showStatusMessage:(G,V=2000)=>{if(this.statusMessageTimer)clearTimeout(this.statusMessageTimer);this.setState(()=>{this.statusMessage=G}),this.statusMessageTimer=setTimeout(()=>{this.setState(()=>{this.statusMessage=null}),this.statusMessageTimer=null},V)},showToast:(G,V="success",K)=>{this.toastController.show(G,V,K)},enterHandoffMode:this.enterHandoffMode,addPendingSkill:(G)=>{(this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker).addPendingSkill(G)}}};loadThreadsForPicker(){if(this.threadLoadSubscription)return;this.setState(()=>{this.isLoadingThreads=!0});let J=new Hg1(this.widget.dependencies.threadHistoryService);this.threadLoadSubscription=J.observeThreadSummaries("").subscribe({next:(Q)=>{this.setState(()=>{this.threadsForPicker=Q,this.clustersForPicker=AK6(Q),this.isLoadingThreads=!1})},error:()=>{this.setState(()=>{this.isLoadingThreads=!1})}})}updateGitBranch=async()=>{let J=await KS8(process.cwd());this.setState(()=>{this.currentGitBranch=J})};removeBashInvocation=(J)=>{this.setState(()=>{this.bashInvocations=this.bashInvocations.filter((Q)=>Q.id!==J)})};invokeBashCommand=(J,{visibility:Q})=>{let Y=Date.now(),Z=`bash-${Y}-${Math.random().toString(36).substring(7)}`,X={cmd:J},G=new AbortController;this.widget.dependencies.worker.invokeBashTool(X,G.signal,Q===GD).subscribe({next:(V)=>{this.setState(()=>{if(this.bashInvocations.find((q)=>q.id===Z))this.bashInvocations=this.bashInvocations.map((q)=>q.id===Z?{...q,toolRun:V}:q);else{let q={id:Z,args:X,toolRun:V,startTime:Y,abortController:G,hidden:Q===GD};this.bashInvocations=[...this.bashInvocations,q]}})},error:()=>this.removeBashInvocation(Z),complete:()=>this.removeBashInvocation(Z)})};cancelBashInvocations=()=>{let J=this.bashInvocations.find((Q)=>Q.toolRun.status==="in-progress");if(J)J.abortController.abort()};showContextDetailOverlay=()=>{this.setState(()=>{this.isShowingContextDetailOverlay=!0}),this.fetchThreadCostInfo()};fetchThreadCostInfo=FY6(()=>{let J=this.widget.dependencies.threadID;this.widget.dependencies.internalAPIClient.threadDisplayCostInfo({threadID:J},{config:this.widget.dependencies.configService}).then((Q)=>{if(Q.ok)this.setState(()=>{this.threadCostInfo=Q.result,this.threadCostInfoThreadID=J})}).catch(()=>{this.setState(()=>{this.threadCostInfo=void 0,this.threadCostInfoThreadID=J})})},150);maybeRefetchThreadCostInfo=(J,Q)=>{let Y=J!==this.threadCostInfoLastUsageLedgerLength,Z=Q==="idle"&&this.lastInferenceState==="running";if(this.threadCostInfoLastUsageLedgerLength=J,this.lastInferenceState=Q,Y||Z)this.fetchThreadCostInfo()};toggleAgentMode=()=>{if(!this.agentModeController)return;if(this.agentModeController.toggle())this.setState(()=>{this.showImageUnsupportedHint=!1,this.agentModePulseSeq++})};startAgentModeSlide=()=>{if(this.agentModeSlideTimer)clearInterval(this.agentModeSlideTimer);this.setState(()=>{this.agentModeSlideProgress=0});let J=400,Q=16,Y=Q/J;this.agentModeSlideTimer=setInterval(()=>{this.setState(()=>{if(this.agentModeSlideProgress!==null){if(this.agentModeSlideProgress=Math.min(1,this.agentModeSlideProgress+Y),this.agentModeSlideProgress>=1){if(this.agentModeSlideProgress=null,this.agentModeSlideTimer)clearInterval(this.agentModeSlideTimer),this.agentModeSlideTimer=null}}})},Q)};handleInsertImage=(J)=>{let Q=this.getEffectiveAgentMode();if(!uy(Q)){if(this.imageUnsupportedHintTimer)clearTimeout(this.imageUnsupportedHintTimer);return this.setState(()=>{this.showImageUnsupportedHint=!0}),this.imageUnsupportedHintTimer=setTimeout(()=>{this.setState(()=>{this.showImageUnsupportedHint=!1}),this.imageUnsupportedHintTimer=null},5000),!1}if(this.imageAttachments.length>=ZB)return!1;let Y=sj(J);if(typeof Y==="object")return this.setState(()=>{this.imageAttachments=[...this.imageAttachments,Y]}),!1;return this.setState(()=>{this.displayMessage=Error(`Failed to attach image: ${Y}`)}),!1};handlePopImage=()=>{if(this.imageAttachments.length>0)this.setState(()=>{this.imageAttachments=this.imageAttachments.slice(0,-1)})};handleImageClick=(J)=>{this.setState(()=>{this.imagePreviewIndex=J})};handleImagePreviewDismiss=()=>{this.setState(()=>{this.imagePreviewIndex=null})};handleImageRemove=(J)=>{this.setState(()=>{this.imageAttachments=this.imageAttachments.filter((Q,Y)=>Y!==J),this.imagePreviewIndex=null})};handleShowMysteryModal=()=>{if(this.mysteriousMessage)this.setState(()=>{this.isShowingMysteriousMessageModal=!0})};handleDestructMysteriousMessage=()=>{if(!this.mysteriousMessage)return;let J=this.mysteriousMessage.id;this.widget.dependencies.internalAPIClient.markAsReadMysteriousMessage({messageId:J},{config:this.widget.dependencies.configService}).then((Q)=>{if(!Q.ok)v.error("Failed to destruct mysterious message",Q.error);else this.setState(()=>{this.mysteriousMessage=null,this.isShowingMysteriousMessageModal=!1})}).catch((Q)=>{v.error("Failed to destruct mysterious message",Q)})};enterHandoffMode=()=>{this.handoffController?.enter(),this.dismissPalette()};exitHandoffMode=()=>{this.handoffController?.exit()};submitHandoff=async(J)=>{let Q=this.imageAttachments;if(this.resetHistory(),this.setState(()=>{this.imageAttachments=[]}),!this.handoffController){this.showSubmitDisabledHint("Handoff controller not initialized");return}let Y=await this.handoffController.submit(J,Q);if(!Y.ok&&Y.error.message!=="Cancelled")this.displayMessage=Y.error,this.setState(()=>{})};openInEditor=async(J)=>{let{mkdtemp:Q,readFile:Y,unlink:Z,rmdir:X,writeFile:G}=await import("node:fs/promises"),{tmpdir:V}=await import("node:os"),K=await import("node:path");try{let q=await Q(K.join(V(),"amp-edit-")),W=K.join(q,"message.amp.md");await G(W,J,"utf-8"),await NG(W);try{let H=await Y(W,"utf-8");this.textController.text=H}catch(H){if(H?.code!=="ENOENT")v.error("Failed to read temporary file",H)}try{await Z(W),await X(q)}catch(H){v.warn("Failed to clean up temporary file",H)}}catch(q){v.error("Error opening editor:",q)}};onTextSubmitted=async(J)=>{if(!J.trim()&&this.imageAttachments.length===0)return;if(this.handoffState.isInHandoffMode){await this.submitHandoff(J);return}let Q=VD(J);if(Q)if(!Q.cmd){this.showSubmitDisabledHint("No command provided");return}else if(this.isProcessing()){this.showSubmitDisabledHint("Unable to use shell mode while agent is active");return}else{this.invokeBashCommand(Q.cmd,{visibility:Q.visibility}),this.widget.dependencies.history.add(J),this.textController.clear(),this.resetHistory();return}this.textController.clear(),this.resetHistory(),await this.updateGitBranch(),await this.sendUserMessage(J)};agentModeListener=()=>{this.setState(()=>{})};handoffListener=(J)=>{this.setState(()=>{this.handoffState=J})};initState(){if(TX.getInstance().interceptConsole(),this.freeTierStatus=this.widget.dependencies.freeTierStatus,this.threadPreviewController.setThreadService(this.widget.dependencies.threadService),this.threadPreviewController.addListener(this.previewControllerListener),this.handoffController=new Yv1({threadService:this.widget.dependencies.threadService,configService:this.widget.dependencies.configService,getMainThread:()=>this.widget.dependencies.threadState.mainThread,getFilesystemReader:()=>this.widget.dependencies.worker.fs.fileSystemReader(),switchToThread:(Y)=>this.switchToExistingThread(Y)}),this.handoffController.addListener(this.handoffListener),this.widget.dependencies.openThreadSwitcher)this.showStandaloneThreadPicker();y8.instance.on("key",()=>{this.lastUserInteractionTime=Date.now()}),y8.instance.on("mouse",()=>{this.lastUserInteractionTime=Date.now()}),y8.instance.on("paste",()=>{this.lastUserInteractionTime=Date.now()}),this.autocompleteFocusNode.addListener((Y)=>{n8.instance.addPostFrameCallback(()=>{this.setState(()=>{this.isTextfieldAndAutocompleteFocused=Y.hasFocus})})}),L6(this.widget.dependencies.configService.config).then((Y)=>{this.paletteConfig=Y,this.agentModeController=new Ox1({initialCliMode:this.widget.dependencies.initialAgentMode,sessionState:this.widget.dependencies.sessionState??null,freeTierStatus:this.freeTierStatus,initialSettings:Y.settings,config$:this.widget.dependencies.configService.config,getThread:()=>this.widget.dependencies.getCurrentWorker()?.thread??this.widget.dependencies.worker.thread}),this.agentModeController.addListener(this.agentModeListener)}),this.updateGitBranch(),this.loadThreadsForPicker(),this.balanceInfoSubscription=cr0(async()=>{let Y=await this.widget.dependencies.internalAPIClient.userDisplayBalanceInfo({},{config:this.widget.dependencies.configService});if(!Y.ok)throw Y.error;return Y.result}).subscribe({next:(Y)=>{this.setState(()=>{this.userDisplayBalanceInfo=Y})},error:(Y)=>{v.debug("Failed to fetch user balance info",Y)}}),this.scheduleAdSubscriptionWithIdeReadiness();let{mcpTrustHandler:J}=this.widget.dependencies;this.mcpTrustSubscription=J.pendingServers$.subscribe((Y)=>{this.setState(()=>{this.pendingMCPServers=Y})}),Wy1((Y)=>{this.setState(()=>{this.pendingOAuthRequest=Y})}),this.mcpServersSubscription=this.widget.dependencies.mcpService.servers.subscribe((Y)=>{this.setState(()=>{this.mcpServers=Y})}),this.pendingSkillsSubscription=this.widget.dependencies.worker.pendingSkills.subscribe((Y)=>{this.setState(()=>{this.pendingSkills=Y})}),this.ideStatusSubscription=this.widget.dependencies.ideClient.status.subscribe((Y)=>{let Z=this.isIdeReadyForAdContext();if(this.setState(()=>{this.ideStatus=Y}),!Z&&this.isIdeReadyForAdContext()){if(this.adReadinessTimeout)clearTimeout(this.adReadinessTimeout),this.adReadinessTimeout=null;if(!this.adSubscription)this.subscribeToAds()}}),this.ideMessageSubscription=this.widget.dependencies.ideClient.messages.subscribe(async(Y)=>{let Z=this.widget.dependencies.getCurrentWorker();if(!Z){v.warn("No active thread worker found to handle IDE message");return}await new Promise((X)=>setTimeout(X,50)),await Z.handle({type:"user:message",message:{content:[{type:"text",text:Y}]}}),v.debug("Message sent from IDE to agent",{message:Y.slice(0,100)})}),this.ideAppendToPromptSubscription=this.widget.dependencies.ideClient.appendToPrompt.subscribe((Y)=>{this.textController.insertText(Y),v.debug("Appended text to CLI prompt from IDE",{text:Y.slice(0,100)})}),this.updateServiceSubscription=this.widget.dependencies.updateService.state.subscribe((Y)=>{this.setState(()=>{this.updateState=Y})}),this.mysteriousMessageSubscription=o51(this.widget.dependencies.configService).pipe(T5((Y)=>Y!=="pending"),X6((Y)=>r51(Y)?Y.mysteriousMessage??null:null),I4((Y,Z)=>Y?.id===Z?.id)).subscribe((Y)=>{this.setState(()=>{if(Y?.id!==this.mysteriousMessage?.id)this.isShowingMysteriousMessageModal=!1;if(this.mysteriousMessage=Y,Y&&!this.mysterySequenceManager)this.mysterySequenceManager=new U71(new Map([[new z71(P21.MYSTERY_SEQUENCE),new hp]])),this.mysteryKeyInterceptorUnsubscribe=y8.instance.addKeyInterceptor((Z)=>{if(!this.mysterySequenceManager)return!1;if(this.isShowingMysteriousMessageModal)return!1;let X=this.mysterySequenceManager.handleKeyEvent(Z);if(X.consumed){if(X.intent)this.handleShowMysteryModal();return this.setState(()=>{this.mysterySequenceProgress=X.progress}),!0}else if(this.mysterySequenceProgress)this.setState(()=>{this.mysterySequenceProgress=null});return!1});else if(!Y)this.mysteryKeyInterceptorUnsubscribe?.(),this.mysteryKeyInterceptorUnsubscribe=null,this.mysterySequenceManager?.dispose(),this.mysterySequenceManager=null,this.mysterySequenceProgress=null})}),this.textController.addListener(this.textChangeListener),this.updateTerminalTitle();let Q=this.widget.dependencies.ideClient.getSelectedConfig();if(Q)this.connectToSelectedIde(Q,"auto-startup").catch((Y)=>{let Z=Y instanceof Error?Y.message:String(Y);this.setState(()=>{this.displayMessage=Error(`Failed to connect to IDE: ${Z}`)})});else if(this.widget.dependencies.showIdePicker)this.openIdePicker();else if(this.widget.dependencies.showIdePickerHint)this.toastController.show("Use /ide to connect to an IDE","success",5000);else if(this.widget.dependencies.showJetBrainsInstaller)this.openJetBrainsInstaller();if(this.widget.dependencies.replayMode)setTimeout(()=>this.startReplay(),100);this.initNewsFeed()}didUpdateWidget(J){super.didUpdateWidget(J),this.setupSelectionListener();let Q=this.widget.dependencies.threadID;if(this.threadCostInfoThreadID!==void 0&&this.threadCostInfoThreadID!==Q)this.threadCostInfo=void 0,this.threadCostInfoThreadID=void 0,this.threadCostInfoLastUsageLedgerLength=0,this.fetchThreadCostInfo();let{threadState:Y}=this.widget.dependencies;this.maybeRefetchThreadCostInfo(Y.mainThread?.usageLedger?.events.length??0,Y.viewState.state==="active"?Y.viewState.inferenceState:void 0)}dispose(){if(this.replayAbortController.abort(),this.replayTypingTimer)clearTimeout(this.replayTypingTimer);if(this.ideStatusSubscription)this.ideStatusSubscription.unsubscribe();if(this.ideMessageSubscription)this.ideMessageSubscription.unsubscribe();if(this.ideAppendToPromptSubscription)this.ideAppendToPromptSubscription.unsubscribe();if(this.updateServiceSubscription)this.updateServiceSubscription.unsubscribe();if(this.agentModeController)this.agentModeController.removeListener(this.agentModeListener),this.agentModeController.dispose();if(this.handoffController)this.handoffController.removeListener(this.handoffListener),this.handoffController.dispose();if(this.adReadinessTimeout)clearTimeout(this.adReadinessTimeout),this.adReadinessTimeout=null;if(this.adSubscription)this.adSubscription.unsubscribe();if(this.balanceInfoSubscription)this.balanceInfoSubscription.unsubscribe();if(this.mcpTrustSubscription)this.mcpTrustSubscription.unsubscribe();if(Wy1(null),this.mcpServersSubscription)this.mcpServersSubscription.unsubscribe();if(this.pendingSkillsSubscription)this.pendingSkillsSubscription.unsubscribe();if(this.threadLoadSubscription)this.threadLoadSubscription.unsubscribe();if(this.newsFeedSubscription)this.newsFeedSubscription.unsubscribe();if(this.agentModeSlideTimer)clearInterval(this.agentModeSlideTimer),this.agentModeSlideTimer=null;if(this.mysteriousMessageSubscription)this.mysteriousMessageSubscription.unsubscribe();if(this.mysteryKeyInterceptorUnsubscribe?.(),this.mysterySequenceManager?.dispose(),this.threadPreviewController.removeListener(this.previewControllerListener),this.threadPreviewController.dispose(),this.toastController.dispose(),this.exitConfirmTimeout)clearTimeout(this.exitConfirmTimeout),this.exitConfirmTimeout=null;if(this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;this.textController.removeListener(this.textChangeListener);for(let J of this.messageScrollControllers.values())J.dispose();if(this.messageScrollControllers.clear(),process.stdout.write(xy1("")),this.shouldUseProgressBar())process.stdout.write(CQ6())}getCurrentConfirmation(){let{threadState:J}=this.widget.dependencies,Z=[...J.items.filter((K)=>K.type==="toolResult").map((K)=>({toolUse:K.toolUse,toolRun:K.toolResult.run,subthreadID:void 0})),...J.subagentActiveTools].filter((K)=>K.toolRun.status==="blocked-on-user");if(Z.length===0)return null;let X=Z[0],G=X.toolRun.status==="blocked-on-user"?X.toolRun.toAllow??[]:[],V=X.toolRun.status==="blocked-on-user"?X.toolRun.reason:void 0;return{type:"tool-use",tools:[{useBlock:X.toolUse,toAllow:G}],subthreadID:X.subthreadID,reason:V}}shouldUseProgressBar(){return!1}updateProgressBar(){}static AD_READINESS_TIMEOUT_MS=1000;scheduleAdSubscriptionWithIdeReadiness(){if(this.isIdeReadyForAdContext()){this.subscribeToAds();return}this.adReadinessTimeout=setTimeout(()=>{if(this.adReadinessTimeout=null,!this.adSubscription)this.subscribeToAds()},P21.AD_READINESS_TIMEOUT_MS)}isIdeReadyForAdContext(){let J=this.ideStatus;if(!J||!J.enabled)return!1;return Boolean(J.openFile||J.visibleFiles&&J.visibleFiles.length>0)}subscribeToAds(){if(this.adSubscription)return;this.adSubscription=Jx1(this.widget.dependencies.internalAPIClient,this.widget.dependencies.configService,()=>{let J=this.agentModeController?.getMode();return(J&&O9(J)||this.randomAd===null)&&ey1(this.lastUserInteractionTime)},this.widget.dependencies.codebaseContextService,()=>this.widget.dependencies.worker.thread).subscribe({next:(J)=>{if(J){let Q=GS8(16).toString("hex");if(this.lastAdImpressionId=Q,Promise.resolve().then(() => (w21(),I21)).then(({recordAdEvent:Y})=>{let Z=this.widget.dependencies.worker.thread,X=Z.messages[Z.messages.length-1];Y("viewed",{adId:J.id,advertiserId:J.advertiserId,threadId:Z.id,messageId:X?.messageId,impressionId:Q,placement:"tui",matchType:J.metadata?.matchType,matchedPatterns:J.metadata?.matchedPatterns,candidateAdPoolCount:J.metadata?.candidateAdPoolCount,clientRegion:J.metadata?.clientRegion})}),J.externalImpressionUrl)this.widget.dependencies.internalAPIClient.recordAdImpression({adId:J.id,externalImpressionUrl:J.externalImpressionUrl},{config:this.widget.dependencies.configService}).catch(()=>{})}this.setState(()=>{this.randomAd=J}),n8.instance.addPostFrameCallback(()=>{if(!this.isMessageViewInSelectionMode&&!this.isShowingPalette&&!this.isShowingIdePicker)this.autocompleteFocusNode.requestFocus()})}})}onConfirmationResponse=async(J)=>{let Q=this.getCurrentConfirmation();if(!Q||Q.type!=="tool-use"){v.error("No current tool confirmation found");return}let Y=Q.tools[0]?.useBlock;if(!Y){v.error("No tool use block found in confirmation");return}if(J==="allow-all-session")XV("dangerouslyAllowAll",!0);if(J==="allow-all-persistent")try{await this.widget.dependencies.settingsStorage.set("dangerouslyAllowAll",!0,"global")}catch(X){if(X&&X instanceof Error)this.setState(()=>{this.displayMessage=X});else v.error("Failed to write dangerouslyAllowAll setting:",X);return}if(J==="always-guarded"){let X=Q.tools[0]?.toAllow??[],G=await this.widget.dependencies.settingsStorage.get("guardedFiles.allowlist")||[],V=[...X,...G];await this.widget.dependencies.settingsStorage.set("guardedFiles.allowlist",V,"global")}if(J==="connect-github"){let X=new URL("/settings#code-host-connections",this.widget.dependencies.ampURL).toString();await LZ(this.context,X);return}if(J==="disable-librarian"){let X=await this.widget.dependencies.settingsStorage.get("tools.disable")??[];if(!X.includes(Gq))await this.widget.dependencies.settingsStorage.set("tools.disable",[...X,Gq],"global")}let Z=J!==null&&["yes","allow-all-session","allow-all-persistent","always-guarded"].includes(J);try{let X={type:"user:tool-input",toolUse:Y.id,value:{accepted:Z}};if(Q.subthreadID)await(await r3.getOrCreateForThread(this.widget.dependencies.workerDeps,Q.subthreadID)).handle(X);else await this.widget.dependencies.worker.handle(X)}catch(X){v.error("Failed to send tool confirmation:",X)}};showConfirmationOverlay=(J)=>{this.setState(()=>{this.isShowingConfirmationOverlay=!0,this.confirmationOverlayContent=J})};getCurrentEphemeralError(){let{threadState:J}=this.widget.dependencies,Q=J.viewState;if(Q.state!=="active"||!Q.ephemeralError)return null;return Q.ephemeralError}handleEphemeralErrorResponse=async(J)=>{let Q=this.widget.dependencies.worker;switch(J){case"retry":await Q.retry();break;case"dismiss":Q.dismissEphemeralError();break;case"new-thread":Q.dismissEphemeralError(),await this.startAndSwitchToNewThread();break;case"new-smart-thread":this.agentModeController?.setMode("smart"),Q.dismissEphemeralError(),X51({agentMode:"smart"}),await this.startAndSwitchToNewThread();break;case"handoff":Q.dismissEphemeralError(),this.showCommandPalette({type:"normal",commandId:"handoff"});break}this.setState(()=>{})};handleDisplayMessageDismiss=()=>{this.setState(()=>{this.displayMessage=null})};handleMCPTrustOpenSettings=async()=>{let{mcpTrustHandler:J,settingsStorage:Q}=this.widget.dependencies;await J.deny();try{await NG(Q.getSettingsFilePath())}catch(Y){let Z=Y instanceof Error?Y.message:String(Y);await this.showErrorMessage(`Failed to open settings: ${Z}`)}};cancelStreamingMessage=async()=>{await r3.cancel(this.widget.dependencies.threadID)};markLastUserMessageAsInterrupted=async()=>{let J=this.widget.dependencies.threadState.mainThread;if(!J)return;for(let Q=J.messages.length-1;Q>=0;Q--){let Y=J.messages[Q];if(Y?.role==="user"&&!Y.interrupted){await this.widget.dependencies.worker.handle({type:"user:message:interrupt",messageIndex:Q});break}}};switchToExistingThread=async(J,Q={})=>{let{recordInNavigationHistory:Y=!0}=Q;if(Y){let Z=this.widget.dependencies.worker.thread.id;if(Z!==J)this.recordNavigation(Z)}try{v.info(`[switchToExistingThread] Switching to thread: ${J}`);let Z=await this.widget.dependencies.switchToThread(J);if(v.info(`[switchToExistingThread] Got worker for thread ${J}, thread.agentMode: ${Z.thread.agentMode}`),this.widget.dependencies.worker=Z,this.widget.dependencies.threadID=Z.thread.id,this.widget.dependencies.switchWorker(Z),v.info("[switchToExistingThread] Clearing agent mode"),this.agentModeController?.setMode(null),this.onThreadSwitch(),Z.thread.draft)if(v.info("[switchToExistingThread] Loading draft content into text controller"),this.textController.clear(),typeof Z.thread.draft==="string")this.textController.insertText(Z.thread.draft);else{let X=Z.thread.draft.filter((K)=>K.type==="text"),G=Z.thread.draft.filter((K)=>K.type==="image"),V=X.map((K)=>K.text).join(`
|
|
4738
4738
|
`);if(V)this.textController.insertText(V);if(G.length>0)this.setState(()=>{this.imageAttachments=G})}}catch(Z){throw v.error("Failed to switch to thread:",J,Z),Error(`Failed to switch to thread: ${J}`)}};sendUserMessage=async(J)=>{await this.proceedWithUserMessage(J)};proceedWithUserMessage=async(J)=>{this.cancelBashInvocations(),this.handoffController?.clearPendingPrompt(),this.widget.dependencies.history.add(J);let Q=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker,Y=G2(Q.thread)===0,Z=this.getEffectiveAgentMode();if(Q.thread.agentMode&&!Y&&Z!==Q.thread.agentMode){await this.showErrorMessage(`This thread uses ${Q.thread.agentMode} mode. To change mode, edit the first message or create a new thread.`);return}let X=[{type:"text",text:J}];if(this.imageAttachments.length>0)X.push(...this.imageAttachments);if(Y)this.startAgentModeSlide();if(await Q.handle({type:"user:message",message:{content:X,agentMode:Z}}),Y)X51({agentMode:Z});this.scrollMessageViewToBottom(),this.setState(()=>{this.imageAttachments=[]}),n8.instance.addPostFrameCallback(()=>{if(!this.isMessageViewInSelectionMode&&!this.isShowingPalette&&!this.isShowingIdePicker)this.autocompleteFocusNode.requestFocus()})};async showErrorMessage(J){this.setState(()=>{this.displayMessage=Error(J)})}exitApplication=async()=>{this.setState(()=>{this.isExiting=!0});let J=this.widget.dependencies.threadState.mainThread;if(J?.messages.length===0){if(J.relationships?.find((Z)=>Z.type==="handoff"&&Z.role==="child"))await this.widget.dependencies.threadService.discardHandoffThread(J.id).catch(()=>{})}let Q=this.getEffectiveAgentMode();X51({agentMode:Q}).catch((Y)=>{v.warn("Failed to save session state on exit:",Y)}).finally(()=>{y8.instance.stop()})};onExitPressed=()=>{if(this.isConfirmingExit){if(this.exitConfirmTimeout)clearTimeout(this.exitConfirmTimeout),this.exitConfirmTimeout=null;this.exitApplication()}else{if(this.setState(()=>{this.isConfirmingExit=!0}),this.exitConfirmTimeout)clearTimeout(this.exitConfirmTimeout);this.exitConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingExit=!1}),this.exitConfirmTimeout=null},1000)}};toHomeRelative(J){let Q=VS8();if(J===Q)return"~";if(J.startsWith(Q+Od.sep))return"~"+J.slice(Q.length);return J}shorten(J){let Q=J.split(Od.sep).filter(Boolean);if(Q.length<=5)return J;return[Q.slice(0,2).join(Od.sep),"…",Q.slice(-2).join(Od.sep)].join(Od.sep)}build(J){let Q=C4.of(J),Y=H6.of(J),Z=Y.base;this.themeColors=Z;let{colors:X,app:G}=Y;this.themeApp=G;let V=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker,K=V.thread.agentMode&&O9(V.thread.agentMode),q=this.widget.dependencies.features.some((_6)=>_6.name===HY6.UBI&&_6.enabled),W=this.widget.dependencies.freeTierStatus.canUseAmpFree&&q,H=(K||W)&&this.randomAd!==null,F=Boolean(H),{threadState:U}=this.widget.dependencies;this.updateTerminalTitle(),this.updateProgressBar();let B=this.getCurrentConfirmation(),M=this.widget.dependencies.replayMode,L=Boolean(M),A=U.items,I=U.mainThread||void 0,E=U.subagentToolsByParentID,P=U.todosList;if(L){let _6={...M.thread,messages:this.replayDisplayedMessages};A=DS(_6).items,I=_6,E={};let O6=jU({messages:this.replayDisplayedMessages});P=Array.isArray(O6)?O6:[]}let R=I?.id,C=I,S=L?this.replayDisplayedMessages.length===0:this.isTranscriptEmpty(),k=(_6)=>new T31({key:new V3(`preview-message-view-${_6.id}`),items:DS(_6).items,controller:this.threadPreviewController.scrollController,autofocus:!1,thread:_6,focusNode:new D8({debugLabel:"PreviewFocus"})}),f=this.previewThread,m=f?f.messages.length>2000?new v0({mainAxisSize:"max",children:[new t6({child:new X0}),new N6({padding:z0.all(2),child:new j4({child:new _1({text:new l("Thread too long for preview",new Q1({color:X.mutedForeground,dim:!0}))})})})]}):k(f):S?new S31({agentMode:this.getEffectiveAgentMode(),mysteriousMessage:this.mysteriousMessage,mysterySequenceProgress:this.mysterySequenceProgress,onShowMysteryModal:this.handleShowMysteryModal,userDisplayBalanceInfo:this.userDisplayBalanceInfo}):new T31({key:R?new V3(`message-view-${R}`):void 0,items:A,subagentToolsByParentID:E,controller:R?this.getMessageScrollController(R):new A5,autofocus:!1,onCopy:L?void 0:this._handleTextCopy.bind(this),thread:C,onMessageEditSubmit:L?void 0:this.handleMessageEditSubmit,onMessageRestoreSubmit:L?void 0:this.handleMessageRestoreSubmit,onMessageForkSubmit:L?void 0:this.forkMessage,getAffectedFiles:L?void 0:this.getAffectedFiles,focusNode:this.messageViewFocusNode,onDismissFocus:()=>{if(this.setState(()=>{this.isMessageViewInSelectionMode=!1}),!this.isShowingIdePicker)this.autocompleteFocusNode.requestFocus()},isInSelectionMode:this.isMessageViewInSelectionMode,isInHandoffMode:this.handoffState.isInHandoffMode,completionBuilder:L?void 0:this.getCompletionBuilder()}),b=Math.max(Math.floor(Q.size.height*0.4),12),c=this.getCurrentEphemeralError(),Y1=Q.size.width<40,r=U.mainThread?qP(U.mainThread):void 0,p=N31(J),t=this.buildBottomWidget(c,B,X,Y,U,P,b,F,L,r,Q,p),J1=new p71({threadViewState:U.viewState,threadTokenUsage:r,threadID:R??null,thread:U.mainThread??void 0,onFileChangesClick:()=>{this.setState(()=>{this.isShowingFileChangesOverlay=!this.isShowingFileChangesOverlay})},onShowIdePicker:this.openIdePicker,ideStatus:this.ideStatus,mcpServers:this.mcpServers,isNarrow:Y1,uiHint:this.getUIHint()??void 0,waitingForConfirmation:!!B,showingEphemeralError:Boolean(U.viewState.state==="active"&&U.viewState.ephemeralError),runningBashInvocations:this.bashInvocations.length>0,executingCommand:this.executingCommand?.name??null,executingCommandNoun:this.executingCommand?.noun??null,executingCommandVerb:this.executingCommand?.verb??null,executingCommandMessage:this.executingCommand?.statusMessage??null}),Z1=new k71({bashInvocations:this.bashInvocations}),n=[],o=this.getEffectiveAgentMode(),i=this.currentShellModeStatus,q1=E21(o),T1=!i?o.length+1:0,e=Q.capabilities.animationSupport,N1=e==="disabled"?0:e==="slow"?30:60,L1=YV(o)?.uiHints?.fasterAnimation?3:1,t1=N1>0&&this.agentModePulseSeq>0?new X5({children:[t,new L5({top:0,left:1,right:1,height:1,child:new Xg1({color:q1,trigger:this.agentModePulseSeq,fps:N1,speed:L1,leftOffset:T1})})]}):t;n.push(new t6({child:m}),Z1);let R1=new X5({children:[new v0({mainAxisSize:"min",children:[H?new Of1({ad:this.randomAd,onButtonClick:async()=>{let _6=this.randomAd;if(this.lastAdImpressionId)Promise.resolve().then(() => (w21(),I21)).then(({recordAdEvent:Z8})=>{let j8=this.widget.dependencies.worker.thread,W3=j8.messages[j8.messages.length-1];Z8("clicked",{adId:_6.id,advertiserId:_6.advertiserId,threadId:j8.id,messageId:W3?.messageId,impressionId:this.lastAdImpressionId,placement:"tui",actionType:"link_to",matchType:_6.metadata?.matchType,matchedPatterns:_6.metadata?.matchedPatterns,candidateAdPoolCount:_6.metadata?.candidateAdPoolCount,clientRegion:_6.metadata?.clientRegion})});if(!await LZ(this.context,_6.shortDestinationUrl)){let j8=y8.instance.tuiInstance.clipboard.isOsc52Supported();this.setState(()=>{this.adActionModal={showCopyOption:j8,url:_6.shortDestinationUrl}})}}}):new X0({height:0}),new g0({constraints:new I6(0,Q.size.width,0,b),child:t1})]}),F?new L5({top:0,left:0,right:0,child:new hH6({userHeight:this.bottomGridUserHeight,maxHeight:b,onInitializeHeight:(_6)=>{this.setState(()=>{this.bottomGridUserHeight=Math.min(_6,b)})},onDrag:(_6)=>{if(this.bottomGridDragStartY===null)this.bottomGridDragStartY=Math.floor(_6.localPosition.y),this.bottomGridDragStartHeight=this.bottomGridUserHeight;let O6=Math.floor(_6.localPosition.y)-this.bottomGridDragStartY,Z8=Math.max(4,this.bottomGridDragStartHeight-O6),j8=Math.min(Z8,b),W3=Math.floor(j8);if(this.bottomGridUserHeight!==W3)this.setState(()=>{this.bottomGridUserHeight=W3})},onRelease:()=>{this.bottomGridDragStartY=null,this.bottomGridDragStartHeight=null}})}):new X0({height:0})]}),f1=this.getParentThreadInfo();if(f1&&!L){let _6=f1.type==="handoff"?"Handed off from":"Forked from",O6=f1.type==="handoff"?G.handoffMode:X.primary,Z8=40,j8=B9(f1.title),W3=j8.length>40?j8.slice(0,39).join("")+"…":f1.title;n.push(new X0({height:1,child:new U6({mainAxisAlignment:"end",children:[new M8({cursor:"pointer",onClick:()=>{this.showCommandPalette({type:"standalone",commandId:"thread-map",onSubmit:this.dismissPalette,onCancel:this.dismissPalette})},child:new N6({padding:z0.only({right:2}),child:new _1({text:new l("",void 0,[new l("↳ ",new Q1({color:O6})),new l(`${_6}: `,new Q1({color:X.mutedForeground,dim:!0})),new l(W3,new Q1({color:X.foreground}))])})})})]})}))}n.push(R1,new X0({height:1,child:new N6({padding:z0.horizontal(1),child:J1})}));let V1=new v0({crossAxisAlignment:"stretch",mainAxisSize:"max",children:n}),B1=L&&M?.showIndicator!==!1?new X5({children:[V1,new L5({top:0,left:0,child:new Wg1})]}):V1,F1=new C8(()=>{if(this.isShowingPalette)return this.dismissPalette(),"handled";if(this.isShowingMCPStatusModal)return this.setState(()=>{this.isShowingMCPStatusModal=!1}),"handled";if(this.pendingMCPServers.length>0)return this.widget.dependencies.mcpTrustHandler.deny(),"handled";if(this.getCurrentEphemeralError())return this.handleEphemeralErrorResponse("dismiss"),"handled";if(this.displayMessage)return this.handleDisplayMessageDismiss(),"handled";if(this.isShowingHelp)return this.setState(()=>{this.isShowingHelp=!1}),"handled";if(this.isShowingFileChangesOverlay)return this.setState(()=>{this.isShowingFileChangesOverlay=!1}),"handled";if(this.isShowingContextDetailOverlay)return this.setState(()=>{this.isShowingContextDetailOverlay=!1}),"handled";if(this.isShowingIdePicker)return this.dismissIdePicker(),"handled";if(this.isShowingJetBrainsInstaller)return this.dismissJetBrainsInstaller(),"handled";if(this.isShowingConfirmationOverlay)return this.setState(()=>{this.isShowingConfirmationOverlay=!1,this.confirmationOverlayContent=""}),"handled";if(this.isShowingConsoleOverlay)return this.setState(()=>{this.isShowingConsoleOverlay=!1}),"handled";if(this.handoffState.isInHandoffMode){if(this.handoffState.isGeneratingHandoff)this.handoffController?.cancelGeneration();else this.exitHandoffMode();return"handled"}if(this.textController.hasSelection)return this.textController.clearSelection(),"handled";if(this.isConfirmingClearInput){if(this.textController.clear(),this.setState(()=>{this.isConfirmingClearInput=!1,this.imageAttachments=[]}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;return"handled"}if(this.handoffState.isConfirmingAbortHandoff&&this.handoffController){let O6=this.handoffController.getPendingPrompt();return this.textController.clear(),this.setState(()=>{this.imageAttachments=[]}),this.handoffController.confirmAbort().then((Z8)=>{if(Z8&&O6)this.textController.text=O6,this.handoffController?.clearPendingPrompt()}),"handled"}if(this.isConfirmingCancelProcessing){if(this.bashInvocations.length>0)this.cancelBashInvocations();if(this.isProcessing())this.markLastUserMessageAsInterrupted().catch((O6)=>{v.error("Failed to mark message as interrupted:",O6)}),this.cancelStreamingMessage().catch((O6)=>{v.error("Failed to cancel streaming message:",O6)});if(this.setState(()=>{this.isConfirmingCancelProcessing=!1}),this.cancelProcessingConfirmTimeout)clearTimeout(this.cancelProcessingConfirmTimeout),this.cancelProcessingConfirmTimeout=null;return"handled"}if(this.executingCommand)return v.info("Canceling executing command:",this.executingCommand.name),this.executingCommand.abortController.abort(),"handled";if(this.bashInvocations.length>0||this.isProcessing()){if(this.setState(()=>{this.isConfirmingCancelProcessing=!0}),this.cancelProcessingConfirmTimeout)clearTimeout(this.cancelProcessingConfirmTimeout);return this.cancelProcessingConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingCancelProcessing=!1}),this.cancelProcessingConfirmTimeout=null},1000),"handled"}if(this.handoffController?.getEmptyHandoffParentThreadID())return this.handoffController.startAbortConfirmation(),"handled";if(this.textController.text.trim()!==""||this.imageAttachments.length>0){if(this.setState(()=>{this.isConfirmingClearInput=!0}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout);return this.clearInputConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingClearInput=!1}),this.clearInputConfirmTimeout=null},1000),"handled"}return"ignored"}),E1=new C8(()=>{return this.onExitPressed(),"handled"}),I1=new C8(()=>{return this.setState(()=>{this.isShowingConsoleOverlay=!this.isShowingConsoleOverlay}),"handled"}),h1=new C8(()=>{return this.setState(()=>{this.isShowingMCPStatusModal=!this.isShowingMCPStatusModal}),"handled"}),g1=new C8(()=>{return xJ.instance.toggleAll(),"handled"}),o1=new C8(()=>{return this.widget.dependencies.configService.getLatest().then((_6)=>{XV("internal.showDetailedCosts",!(_6.settings["internal.showDetailedCosts"]??!1))}),"handled"}),x1=new C8(()=>{return y8.instance.toggleFrameStatsOverlay(),"handled"}),r1=new C8(()=>{return y8.instance.tuiInstance.getScreen().markForRefresh(),n8.instance.requestFrame(),"handled"}),V0=new C8(()=>{return this.toggleAgentMode(),"handled"}),l0=new C8(()=>{let O6=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:Z8}=this.widget.dependencies,j8=Z8.mainThread?.id;return j8?this.getMessageScrollController(j8):null})();if(O6){let Z8=Math.max(Math.floor(Q.size.height*0.4),10),j8=Q.size.height-Z8;O6.animatePageUp(j8,100)}return"handled"}),e0=new C8(()=>{let O6=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:Z8}=this.widget.dependencies,j8=Z8.mainThread?.id;return j8?this.getMessageScrollController(j8):null})();if(O6){let Z8=Math.max(Math.floor(Q.size.height*0.4),10),j8=Q.size.height-Z8;O6.animatePageDown(j8,100)}return"handled"}),D6=new C8(()=>{let O6=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:Z8}=this.widget.dependencies,j8=Z8.mainThread?.id;return j8?this.getMessageScrollController(j8):null})();if(O6)O6.animateTo(0,100);return"handled"}),A6=new C8(()=>{let O6=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:Z8}=this.widget.dependencies,j8=Z8.mainThread?.id;return j8?this.getMessageScrollController(j8):null})();if(O6)O6.animateTo(Number.MAX_SAFE_INTEGER,100);return"handled"}),F4=new C8(()=>{if(!this.isTextfieldAndAutocompleteFocused)return"ignored";if(this.handoffState.isInHandoffMode)return"ignored";let{threadState:_6}=this.widget.dependencies;if(!_6.mainThread?.messages.some((Z8)=>Z8.role==="user"||HP(Z8)))return"ignored";return this.setState(()=>{this.isMessageViewInSelectionMode=!0}),"handled"}),H0=new C8((_6)=>{if(_6.direction==="previous")this.navigateHistoryPrevious();else this.navigateHistoryNext();return"handled"}),j0=new C8(()=>{if(!this.isTextfieldAndAutocompleteFocused)return"ignored";return P71().then(async(_6)=>{if(_6)try{this.handleInsertImage(_6)}finally{try{let{unlink:O6}=await import("node:fs/promises");await O6(_6)}catch{}}}),"handled"}),R0=new Map([[N4.ctrl("c"),new jp],[N4.ctrl("l"),new xp],[N4.ctrl("o"),new A71],[N4.ctrl("v"),new Tp],[N4.alt("s"),new QS],[N4.ctrl("s"),new QS],[N4.alt("p"),new yp],[N4.ctrl("r"),new _p],[N4.alt("d"),new kp],[N4.ctrl("t"),new vp],[N4.key("PageUp"),new N71],[N4.key("PageDown"),new D71],[N4.key("Home"),new M71],[N4.key("End"),new L71],[N4.key("Escape"),new Cp],[N4.ctrl("p"),new YS("previous")],[N4.ctrl("n"),new YS("next")],[N4.key("Tab"),new fp]]);if(!e3())R0.set(N4.key("ArrowUp"),new fp);if(!1)R0.set(N4.alt("c"),new Sp);let u6=new C8(()=>{if(this.isShowingStandalonePalette())return"handled";return this.showCommandPalette(),"handled"}),W8=new C8(()=>{return this.toggleThreadPickerWorkspaceFilter(),"handled"}),U4=new C8(()=>{if(this.mysteriousMessage)this.handleShowMysteryModal();return"handled"}),R4=new Map([[Cp,F1],[xp,r1],[QS,V0],[A71,u6],[Tp,j0],[Sp,I1],[W71,h1],[_p,g1],[kp,o1],[yp,x1],[vp,W8],[jp,E1],[N71,l0],[D71,e0],[M71,D6],[L71,A6],[fp,F4],[YS,H0],[hp,U4]]),z4=[B1];if(this.isShowingConsoleOverlay)z4.push(new sf1);if(this.isShowingHelp&&this.paletteConfig)z4.push(new Jb1({commands:this.getPaletteCommands().getAllCommands()}));if(this.isShowingMCPStatusModal)z4.push(new uh1({servers:this.mcpServers,onDismiss:()=>{this.setState(()=>{this.isShowingMCPStatusModal=!1})}}));if(this.isShowingMysteriousMessageModal&&this.mysteriousMessage)z4.push(new Vg1({message:this.mysteriousMessage,onDestruct:this.handleDestructMysteriousMessage}));if(this.adActionModal)z4.push(new If1({title:"Failed to open browser",message:this.adActionModal.url,showCopyOption:this.adActionModal.showCopyOption,onSelect:async(_6)=>{let O6=this.adActionModal.url;if(_6==="copy")try{await y8.instance.tuiInstance.clipboard.writeText(O6),this.setState(()=>{this.displayMessage=new MY("Link copied to clipboard")})}catch(Z8){v.error("Failed to copy to clipboard",{error:Z8}),this.setState(()=>{this.displayMessage=Error("Failed to copy to clipboard")})}this.setState(()=>{this.adActionModal=null})}}));if(this.pendingMCPServers.length>0){let{mcpTrustHandler:_6}=this.widget.dependencies;z4.push(new $g1({servers:this.pendingMCPServers,onAlwaysTrust:_6.trustAlways.bind(_6),onTrustOnce:_6.trustOnce.bind(_6),onOpenSettings:this.handleMCPTrustOpenSettings,onDismiss:_6.deny.bind(_6)}))}if(this.pendingOAuthRequest)z4.push(new Kg1({request:this.pendingOAuthRequest,onDismiss:()=>{this.setState(()=>{this.pendingOAuthRequest=null})}}));if(this.isShowingFileChangesOverlay)z4.push(new zv1({threadData:U}));if(this.isShowingContextDetailOverlay){let _6=this.threadCostInfo?.costBreakdownURL;z4.push(new tf1({thread:U.mainThread??void 0,tokenUsage:r??void 0,costInfo:this.threadCostInfo,onDismiss:()=>{this.setState(()=>{this.isShowingContextDetailOverlay=!1})},onOpenCostBreakdown:_6?()=>{LZ(J,_6)}:void 0}))}if(this.isShowingConfirmationOverlay)z4.push(new of1({details:this.confirmationOverlayContent}));if(this.imagePreviewIndex!==null&&this.imagePreviewIndex<this.imageAttachments.length){let _6=this.imageAttachments[this.imagePreviewIndex];if(_6)z4.push(new j4({child:new cb1({image:_6,imageIndex:this.imagePreviewIndex,onDismiss:this.handleImagePreviewDismiss,onRemove:()=>this.handleImageRemove(this.imagePreviewIndex)})}))}let o6=this.getCommandPaletteContext(J);if(o6&&this.isShowingPalette&&this.paletteConfig)z4.push(new j4({child:new if1({commandContext:o6,mainThread:U.mainThread,commands:this.getPaletteCommands(),onDismiss:this.dismissPalette,showOptions:this.paletteShowOptions??void 0})}));if(this.isShowingIdePicker)z4.push(new Yb1({onCancel:this.dismissIdePicker,onSelect:this.handleIdeSelection,jetbrainsMode:this.widget.dependencies.jetbrainsMode}));let l6=new X5({children:z4});if(this.isShowingJetBrainsInstaller)return new CI({child:new SJ({actions:R4,child:new yX({shortcuts:R0,debugLabel:"jetbrains-installer-shortcuts",child:new Zg1({configService:this.widget.dependencies.configService,ideClient:this.widget.dependencies.ideClient,onExit:()=>process.exit(0),onContinue:this.dismissJetBrainsInstaller})})})});return new Vz({controller:this.toastController,child:new CI({child:new ex1({controller:this.toastController,child:new SJ({actions:R4,child:new yX({shortcuts:R0,debugLabel:"main-app-shortcuts",child:l6})})})})})}buildScrollableTodoList(J,Q,Y){return new xH6({todos:J,enabled:Q,controller:this.todoScrollController,appTheme:Y})}buildBottomWidget(J,Q,Y,Z,X,G,V,K,q,W,H,F){if(J)return new ef1({error:J,ampURL:this.widget.dependencies.ampURL,onResponse:this.handleEphemeralErrorResponse});if(Q){if(this.displayMessage)this.handleDisplayMessageDismiss();return new rf1({confirmationRequest:Q,onResponse:this.onConfirmationResponse,onShowOverlay:this.showConfirmationOverlay})}if(this.displayMessage)return new Gg1({message:this.displayMessage,onDismiss:this.handleDisplayMessageDismiss});let U=this.handoffState.isInHandoffMode?[]:S71(Z),B=this.agentModeController?.isInRestrictedFreeMode()??!1,M=new uI({key:this.textFieldKey,controller:this.textController,triggers:q?[]:[new jW],completionBuilder:q?void 0:this.getCompletionBuilder(),ampURL:this.widget.dependencies.ampURL,onSubmitted:q?void 0:this.onTextSubmitted,theme:Y,placeholder:q?"Press Ctrl+C to exit":B?"Amp Free is not enabled. Press Ctrl+S to switch modes.":void 0,enabled:this.isTextfieldAndAutocompleteFocused&&!B&&!this.isShowingStandalonePalette()&&!this.handoffState.isGeneratingHandoff,shellPromptRules:U,focusNode:this.autocompleteFocusNode,autofocus:!this.isMessageViewInSelectionMode&&!this.isShowingStandalonePalette()&&!this.isShowingIdePicker,clipboard:y8.instance.tuiInstance.clipboard,onCopy:this._handleTextCopy.bind(this),onInsertImage:this.handleInsertImage,imageAttachments:this.imageAttachments,popImage:this.handlePopImage,onImageClick:this.handleImageClick,previousThreadId:this.previousThreadIdForHint&&(X.mainThread?.messages.length??0)===0?this.previousThreadIdForHint:void 0,onPreviousThreadHintAccepted:()=>{let Z1=this.previousThreadIdForHint;if(Z1)this.setState(()=>{this.previousThreadIdForHint=null}),this.textController.text=`following: @${Z1} `},onDoubleAtTrigger:q?void 0:()=>{let Z1=this.textController.text,n=this.textController.cursorPosition,i=Z1.slice(0,n).lastIndexOf("@@");this.showCommandPalette({type:"standalone",commandId:"mention-thread",onBeforeExecute:()=>{if(i!==-1){let q1=this.textController.text,T1=q1.slice(0,i)+q1.slice(i+2);this.textController.text=T1,this.textController.cursorPosition=i}},onSubmit:()=>{this.dismissPalette()},onCancel:()=>{this.dismissPalette()}})},pendingSkills:this.pendingSkills,onClearPendingSkill:(Z1)=>{(this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker).removePendingSkill(Z1)},popSkill:()=>{let Z1=this.pendingSkills[this.pendingSkills.length-1];if(Z1)(this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker).removePendingSkill(Z1.name)}}),L=X.mainThread?.queuedMessages??[],A=Array.isArray(G)&&G.length>0,E=Array.isArray(L)&&L.length>0?new qg1({queuedMessages:L}):void 0,P=A?this.buildScrollableTodoList(G,this.isTextfieldAndAutocompleteFocused&&!B,Z):void 0,R=[],C=this.currentShellModeStatus;if(C)R.push({child:new _1({text:new l(C==="hidden"?"shell mode (incognito)":"shell mode",new Q1({color:C==="hidden"?Z.app.shellModeHidden:Z.app.shellMode}))}),position:"top-left"});if(this.handoffState.isInHandoffMode){let Z1=new Q1({color:Z.app.handoffMode}),n=this.handoffState.isGeneratingHandoff&&this.handoffState.spinner?new l("",void 0,[new l("handoff ",Z1),new l(this.handoffState.spinner.toBraille(),Z1)]):new l("handoff (submit a goal for the new thread)",Z1);if(R.push({child:new _1({text:n}),position:"top-left"}),this.handoffState.isGeneratingHandoff)R.push({child:new _1({text:new l("",void 0,[new l("Esc",new Q1({color:Z.app.keybind})),new l(" to cancel",new Q1({color:Y.foreground,dim:!0}))])}),position:"bottom-left"})}let S=this.handoffController?.getEmptyHandoffParentThreadID()??null,k=this.agentModeController?.getVisibleModes()??[];if(!C&&!this.handoffState.isInHandoffMode&&!S&&k.length>1){let Z1=this.previewThread,n=Z1?Z1.agentMode??this.getEffectiveAgentMode():this.getEffectiveAgentMode(),o=E21(n),i=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker,q1=Z1??i.thread,T1=G2(q1)>0,e=this.agentModeSlideProgress!==null,N1,L1,t1=(V1)=>Math.pow(V1,4);if(e){N1="top-left";let X1=H.size.width-n.length-4,B1=t1(this.agentModeSlideProgress);L1=Math.floor(B1*X1)}else if(T1)N1="top-right",L1=0;else N1="top-left",L1=void 0;let R1=T1&&!e,f1;if(e){let V1=t1(this.agentModeSlideProgress??0);f1=new Q1({color:o,dim:V1>0.3})}else if(R1)f1=new Q1({color:Y.foreground,dim:!0});else f1=new Q1({color:o});if(Z1)R.push({child:new _1({text:new l(n,f1)}),position:N1,offsetX:L1});else{let V1=!T1&&!e,X1=new _1({text:new l(n,f1)});R.push({child:V1?new M8({child:X1,onClick:this.toggleAgentMode,cursor:"pointer"}):X1,position:N1,offsetX:L1})}}let f=q?this.widget.dependencies.replayMode.thread.env?.initial.trees?.[0]?.uri:X.mainThread?.env?.initial.trees?.[0]?.uri,m;if(f)m=b0.parse(f).fsPath;else m=process.cwd();let b=this.toHomeRelative(m),c=this.shorten(b),Y1=!q&&this.currentGitBranch?`${c} (${this.currentGitBranch})`:c;if(R.push({child:new _1({text:new l(Y1,new Q1({color:Y.foreground,dim:!0}))}),position:"bottom-right"}),S){let Z1=this.getEffectiveAgentMode(),n=E21(Z1);R.push({child:new _1({text:new l(Z1,new Q1({color:n}))}),position:"top-left"});let o=this.handoffState.isConfirmingAbortHandoff?" again to abort ":" to abort ";R.push({child:new _1({text:new l("",void 0,[new l("Esc",new Q1({color:Z.app.keybind})),new l(o,new Q1({color:Y.foreground,dim:!0})),new l("handoff",new Q1({color:Z.app.handoffMode}))])}),position:"bottom-left"})}if(!S&&this.previousThreadIdForHint&&(X.mainThread?.messages.length??0)===0&&this.textController.text.trim()==="")R.push({child:new _1({text:new l("",void 0,[new l("press ",new Q1({color:Y.foreground,dim:!0})),new l("enter",new Q1({color:Z.app.keybind})),new l(" to reference the previous thread",new Q1({color:Y.foreground,dim:!0}))])}),position:"bottom-left"});let p=this.previewThread,t=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker;if(G2(t.thread)>0&&!C&&!this.handoffState.isInHandoffMode&&!p){let Z1=[],n=new Q1({color:Y.foreground,dim:!0}),o=new l(" · ",n);if(W){let i=W.totalInputTokens/W.maxInputTokens,q1=Math.round(i*100),T1=Math.max(0,Math.min(q1,100)),e=u71(i,W.maxInputTokens),N1=n;if(e==="danger")N1=new Q1({color:Y.destructive});else if(e==="warning")N1=new Q1({color:Y.warning});else if(e==="recommendation")N1=new Q1({color:Z.app.recommendation});let L1=Math.round(W.maxInputTokens/1000);Z1.push(new l(`${T1}% of ${L1}k`,N1))}if(F&&this.threadCostInfo){let i=p31(this.threadCostInfo,{colors:{foreground:Y.foreground},dim:!0});if(i.length>0){if(Z1.length>0)Z1.push(o);Z1.push(...i)}}if(Z1.length>0){let i=new _1({text:new l("",void 0,Z1)});R.push({child:F?new M8({child:i,onClick:this.showContextDetailOverlay,cursor:"pointer"}):i,position:"top-left"})}}return new Kv1({leftChild:new t6({child:M}),rightChild1:E,rightChild2:P,maxHeight:V,overlayTexts:R,borderColor:B||!this.isTextfieldAndAutocompleteFocused||this.handoffState.isGeneratingHandoff?D1.index(8):void 0,hasBanner:K,userHeight:this.bottomGridUserHeight,onInitializeHeight:(Z1)=>{this.setState(()=>{this.bottomGridUserHeight=Math.min(Z1,V)})},onDrag:(Z1)=>{if(this.bottomGridDragStartY===null)this.bottomGridDragStartY=Math.floor(Z1.localPosition.y),this.bottomGridDragStartHeight=this.bottomGridUserHeight;let n=Math.floor(Z1.localPosition.y)-this.bottomGridDragStartY,o=Math.max(4,this.bottomGridDragStartHeight-n),i=Math.min(o,V),q1=Math.floor(i);if(this.bottomGridUserHeight!==q1)this.setState(()=>{this.bottomGridUserHeight=q1})},onDragRelease:()=>{this.bottomGridDragStartY=null,this.bottomGridDragStartHeight=null},enableResize:!K})}}async function Ng1(J){if((await J.configService.getLatest()).settings["terminal.animation"]===!1)y8.instance.tuiInstance.setOptions({queryOptions:{animationDisabled:!0}});let Z=()=>null,G=!1;if(G)process.env.AMP_INSPECTOR_ENABLED="1";let V=new Jz(G,1000,J.inspectorPort),K=new Lf1({threadService:J.threadService,worker:J.worker,builder:(L,A,I,E,P,R)=>{Z=P;let C=P(),S={...J,worker:C,threadID:C.thread.id};return new yH6({...S,threadState:A,workerController:I,switchWorker:E,getCurrentWorker:P,recentThreadIDs:R})}}),q=new qv1({configService:J.configService,child:K}),W=new ph1({configService:J.configService,child:q}),H=new lx1(W),F=new H6({data:ZS.fromBaseTheme(DG.default()),child:H});try{await oy1(F,{onRootElementMounted:(L)=>{if(v.info("TUI input ready for user interaction"),G)V.start(L),EZ6(L)}})}finally{if(G)V.stop(),PZ6()}let B=Z()?.thread.id||J.threadID,M=await J.threadService.get(B);if(M&&M.messages.length>0){let L=`${J.ampURL.replace(/\/$/,"")}/threads/${B}`;iZ6(M,L,J.stdout)}}function E21(J){let Y=YV(J)?.uiHints?.secondaryColor;if(Y)return D1.rgb(Y.r,Y.g,Y.b);return qS8(J)}class xH6 extends d0{props;constructor(J){super();this.props=J}createState(){return new vH6}}class vH6 extends p0{viewportHeight=1;scrollListenerAttached=!1;initState(){if(!this.scrollListenerAttached)this.widget.props.controller.addListener(()=>{this.updateViewportHeight()}),this.scrollListenerAttached=!0}build(J){let{todos:Q,controller:Y,appTheme:Z}=this.widget.props;return new U6({crossAxisAlignment:"stretch",children:[new t6({child:new e9({controller:Y,autofocus:!1,child:new Af1({todos:Q})})}),new I2({controller:Y,thumbColor:Z.app.scrollbarThumb,trackColor:Z.app.scrollbarTrack,getScrollInfo:()=>{let{maxScrollExtent:X,offset:G}=Y,V=this.viewportHeight,K=X+V;return{totalContentHeight:Math.max(K,0),viewportHeight:Math.max(V,1),scrollOffset:Math.max(G,0)}}})]})}updateViewportHeight(){let J=this.getViewportHeight();if(J!==this.viewportHeight)this.viewportHeight=J}getViewportHeight(){let J=this.context.findRenderObject();if(!J)return this.viewportHeight;let Q=(Z,X=0)=>{if(Z&&"size"in Z&&"children"in Z){let G=Z.children||[];for(let V of G){if(V&&"size"in V){let q=V.size;if(typeof q?.height==="number"&&q.height>0)return q.height}let K=Q(V,X+1);if(K>0)return K}}return 0},Y=Q(J);if(Y>0)return Y;if("size"in J){let Z=J.size;if(typeof Z?.height==="number"&&Z.height>0)return Z.height}return this.viewportHeight}}class hH6 extends a6{props;constructor(J){super();this.props=J}build(J){return new M8({child:new X0({height:1}),cursor:E9.NS_RESIZE,onDrag:(Q)=>{if(this.props.userHeight===void 0){let Z=J.findRenderObject()?.size.height??0;if(Z>0){this.props.onInitializeHeight(Z);return}}this.props.onDrag(Q)},onRelease:this.props.onRelease})}}function qS8(J){let Q=0;for(let X=0;X<J.length;X++){let G=J.charCodeAt(X);Q=(Q<<5)-Q+G,Q=Q&Q}let Y=[9,10,11,12,13,14,15,208,209,210,211,212,213,214,215],Z=Math.abs(Q)%Y.length;return D1.index(Y[Z])}ay1();try{if(process.platform==="win32")await Promise.resolve().then(() => Q6(iS(),1))}catch{}if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(J){RY.write(`Failed to change directory to ${process.env.AMP_PWD}: ${J}
|
|
4739
|
-
`)}var lm1=cm1.join(PB0||cm1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function Sx8(J){process.emitWarning=function(Q,Y,Z,X){let G=typeof Q==="string"?Q:Q.message||String(Q),V=Y||"Warning",K=!1;J.warn(G,{name:V,code:Z})}}function CG(J,Q){if(J.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")XV("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(J.getOptionValueSourceWithGlobals("mode")==="cli")XV("experimental.agentMode",Q.mode);if(J.getOptionValueSourceWithGlobals("useSonnet")==="cli")XV("model.sonnet",Q.useSonnet)}async function im1(J){try{await Tx8(cm1.dirname(lm1),{recursive:!0}),await Cx8(lm1,J,"utf-8")}catch(Q){v.debug("Failed to save last thread ID",Q)}}async function _x8(){try{return(await qB6(lm1,"utf-8")).trim()}catch(J){return null}}function kx8(J){return!!(J&&(J.endsWith("@sourcegraph.com")||J.endsWith("@ampcode.com")||J==="auth-bypass-user@example.com"))}async function yx8(J){try{let Q=await B5.getUserInfo({},{config:J,signal:AbortSignal.timeout(5000)});if(Q.ok)return Q.result}catch(Q){v.debug("Failed to fetch user info:",Q)}return}var GB6=[{name:"notifications",long:"notifications",type:"flag",description:(J)=>`${J?"Enable":"Disable"} sound notifications (enabled by default when not in execute mode)`},{name:"color",long:"color",type:"flag",description:(J)=>`${J?"Enable":"Disable"} color output (enabled by default if stdout and stderr are sent to a TTY)`,deprecated:!0},{name:"settingsFile",long:"settings-file",type:"option",default:process.env.AMP_SETTINGS_FILE??WG,description:`Custom settings file path (overrides the default location ${WG})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(v).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${FI})`},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","jsonl","new-ui"],hidden:!0,deprecated:!0},{name:"dangerouslyAllowAll",long:"dangerously-allow-all",type:"switch",default:!1,description:"Disable all command confirmation prompts (agent will execute all commands without asking)"},{name:"jetbrains",long:"jetbrains",type:"flag",default:e3(),description:(J)=>J?"Enable JetBrains integration. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration"},{name:"ide",long:"ide",type:"flag",default:!0,description:(J)=>J?"Enable IDE connection (default). When enabled, Amp automatically includes your open IDE's file and text selection with every message.":"Disable IDE connection"},{name:"interactive",long:"interactive",type:"flag",description:(J)=>J?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0},{name:"mcpConfig",long:"mcp-config",type:"option",description:"JSON configuration or file path for MCP servers to merge with existing settings"},{name:"useSonnet",long:"use-sonnet",type:"flag",description:(J)=>J?"Use Claude Sonnet 4.5 instead of Claude Opus 4.5":"Use default model (Claude Opus 4.5)"},{name:"tryOpus",long:"try-opus",type:"switch",default:!1,description:"(deprecated) Opus 4.5 is now the default in smart mode",hidden:!0,deprecated:!0},{name:"mode",long:"mode",short:"m",type:"option",default:GP.SMART.key,description:`Set the agent mode (${M$().map((J)=>J.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:M$().map((J)=>J.mode).concat("large")}],VB6=(J)=>("deprecated"in J)&&J.deprecated===!0,xx8=(J)=>("hidden"in J)&&J.hidden===!0,vx8=(J)=>("default"in J),hx8=(J)=>("default"in J)?J.default:void 0;function fx8(J,Q){let Y=Q.args[0],Z=Q.commands.map((G)=>G.name());if(Y&&!Y.includes(" ")&&Y.length<30&&!/[./\\]/.test(Y)){let G=Z.filter((K)=>Y.includes(K)||K.includes(Y)),V="Run amp --help for a list of available commands.";if(G.length>0)V=`Did you mean: ${G.join(", ")}? Or run amp --help for all commands.`;throw new b8(qG.unknownCommand(Y),1,V)}}var WB6=null;function ib5(){return WB6}function cd(J){return{...J,getThreadEnvironment:y91,vfs:lj0({os:J.fileSystem},J.configService.config),skillService:J.skillService,fileChangeTrackerStorage:new rh(J.fileSystem),generateThreadTitle:Y16,deleteThread:(Q)=>J.threadService.delete(Q)}}var am1=b0.file(jx8.homedir()),HB6=process.env.XDG_CONFIG_HOME?b0.file(process.env.XDG_CONFIG_HOME):i0.joinPath(am1,".config");async function uX(J,Q){TA0("0.0.
|
|
4739
|
+
`)}var lm1=cm1.join(PB0||cm1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function Sx8(J){process.emitWarning=function(Q,Y,Z,X){let G=typeof Q==="string"?Q:Q.message||String(Q),V=Y||"Warning",K=!1;J.warn(G,{name:V,code:Z})}}function CG(J,Q){if(J.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")XV("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(J.getOptionValueSourceWithGlobals("mode")==="cli")XV("experimental.agentMode",Q.mode);if(J.getOptionValueSourceWithGlobals("useSonnet")==="cli")XV("model.sonnet",Q.useSonnet)}async function im1(J){try{await Tx8(cm1.dirname(lm1),{recursive:!0}),await Cx8(lm1,J,"utf-8")}catch(Q){v.debug("Failed to save last thread ID",Q)}}async function _x8(){try{return(await qB6(lm1,"utf-8")).trim()}catch(J){return null}}function kx8(J){return!!(J&&(J.endsWith("@sourcegraph.com")||J.endsWith("@ampcode.com")||J==="auth-bypass-user@example.com"))}async function yx8(J){try{let Q=await B5.getUserInfo({},{config:J,signal:AbortSignal.timeout(5000)});if(Q.ok)return Q.result}catch(Q){v.debug("Failed to fetch user info:",Q)}return}var GB6=[{name:"notifications",long:"notifications",type:"flag",description:(J)=>`${J?"Enable":"Disable"} sound notifications (enabled by default when not in execute mode)`},{name:"color",long:"color",type:"flag",description:(J)=>`${J?"Enable":"Disable"} color output (enabled by default if stdout and stderr are sent to a TTY)`,deprecated:!0},{name:"settingsFile",long:"settings-file",type:"option",default:process.env.AMP_SETTINGS_FILE??WG,description:`Custom settings file path (overrides the default location ${WG})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(v).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${FI})`},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","jsonl","new-ui"],hidden:!0,deprecated:!0},{name:"dangerouslyAllowAll",long:"dangerously-allow-all",type:"switch",default:!1,description:"Disable all command confirmation prompts (agent will execute all commands without asking)"},{name:"jetbrains",long:"jetbrains",type:"flag",default:e3(),description:(J)=>J?"Enable JetBrains integration. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration"},{name:"ide",long:"ide",type:"flag",default:!0,description:(J)=>J?"Enable IDE connection (default). When enabled, Amp automatically includes your open IDE's file and text selection with every message.":"Disable IDE connection"},{name:"interactive",long:"interactive",type:"flag",description:(J)=>J?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0},{name:"mcpConfig",long:"mcp-config",type:"option",description:"JSON configuration or file path for MCP servers to merge with existing settings"},{name:"useSonnet",long:"use-sonnet",type:"flag",description:(J)=>J?"Use Claude Sonnet 4.5 instead of Claude Opus 4.5":"Use default model (Claude Opus 4.5)"},{name:"tryOpus",long:"try-opus",type:"switch",default:!1,description:"(deprecated) Opus 4.5 is now the default in smart mode",hidden:!0,deprecated:!0},{name:"mode",long:"mode",short:"m",type:"option",default:GP.SMART.key,description:`Set the agent mode (${M$().map((J)=>J.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:M$().map((J)=>J.mode).concat("large")}],VB6=(J)=>("deprecated"in J)&&J.deprecated===!0,xx8=(J)=>("hidden"in J)&&J.hidden===!0,vx8=(J)=>("default"in J),hx8=(J)=>("default"in J)?J.default:void 0;function fx8(J,Q){let Y=Q.args[0],Z=Q.commands.map((G)=>G.name());if(Y&&!Y.includes(" ")&&Y.length<30&&!/[./\\]/.test(Y)){let G=Z.filter((K)=>Y.includes(K)||K.includes(Y)),V="Run amp --help for a list of available commands.";if(G.length>0)V=`Did you mean: ${G.join(", ")}? Or run amp --help for all commands.`;throw new b8(qG.unknownCommand(Y),1,V)}}var WB6=null;function ib5(){return WB6}function cd(J){return{...J,getThreadEnvironment:y91,vfs:lj0({os:J.fileSystem},J.configService.config),skillService:J.skillService,fileChangeTrackerStorage:new rh(J.fileSystem),generateThreadTitle:Y16,deleteThread:(Q)=>J.threadService.delete(Q)}}var am1=b0.file(jx8.homedir()),HB6=process.env.XDG_CONFIG_HOME?b0.file(process.env.XDG_CONFIG_HOME):i0.joinPath(am1,".config");async function uX(J,Q){TA0("0.0.1766203476-g15bfc0");let Y=pU1({storage:J.settings,secretStorage:J.secrets,workspaceRoots:Q0.of([b0.file(process.cwd())]),defaultAmpURL:J.ampURL,homeDir:am1,userConfigDir:HB6}),{initializeCLITelemetry:Z}=await Promise.resolve().then(() => (w21(),I21));Z(Y);let X=await Y.getLatest();v.debug("Global configuration initialized",{settingsKeys:Object.keys(X.settings)});let{toolService:G,dispose:V}=F86({configService:Y}),K=new Map,q=()=>K.clear(),W=new dM1(Y,J.settings.getWorkspaceRootPath()),H=$x0({configService:Y,filesystem:r9}),F=Aj0({configService:Y,trustStore:W,skillMCPServers:H.skillMCPServers,createOAuthProvider:async(r,p,t)=>{let J1=`${r}:${p}`,Z1=K.get(J1);if(Z1)return v.debug("Reusing existing OAuth provider for server",{serverName:r,serverUrl:p}),Z1;v.debug("Creating OAuth provider for server",{serverName:r,serverUrl:p});let n=(async()=>{let o=new JA(J.secrets),i=await o.getClientInfo(r,p),q1=t?.scopes??i?.scopes,T1=h26();v.info("OAuth headless mode check",{useHeadless:T1,executeMode:J.executeMode,envVar:process.env.AMP_HEADLESS_OAUTH,isTTY:$5.isTTY});let e=void 0;if(T1)e=J.executeMode?v26():x26(r);let N1=new gM1({storage:o,serverName:r,serverUrl:p,clientId:t?.clientId??i?.clientId,clientSecret:t?.clientSecret??i?.clientSecret,authUrl:t?.authUrl??i?.authUrl,tokenUrl:t?.tokenUrl??i?.tokenUrl,scopes:q1,headlessAuthHandler:e});return v.debug("OAuth provider created",{serverName:r,serverUrl:p,hasManualClientId:!!(t?.clientId??i?.clientId),willUseDCR:!(t?.clientId??i?.clientId),scopes:q1,headlessMode:T1,executeMode:J.executeMode}),N1})();return K.set(J1,n),n}}),U=Yu({configService:Y,filesystem:r9,spawn:hN,skillToolboxDirs:H.skillToolboxDirs}),{initializeToolProviders:B,startToolProviders:M}=await Promise.resolve().then(() => ($B6(),XB6)),L;if(J.executeMode){let r=await B({toolService:G,providers:[F,U],initialTimeout:15000});L=r.registrations;for(let[p,t]of r.initErrors)v.warn(`${p} provider initialization slow or failed:`,t)}else L=M({toolService:G,providers:[F,U]});if(Q.jetbrains)xP("JetBrains");else if(Q.ide&&BJ6())xP("VS Code");else if(Q.ide&&NJ6())xP("Neovim");if(J.executeMode)CA0(!0);let A,I=v7.status.pipe(X6((r)=>Boolean(r.connected&&r.authenticated)),I4()).subscribe((r)=>{if(r){if(!A)A=G.registerTool(Y66)}else A?.dispose(),A=void 0}),E;if(!J.executeMode){let r=await J.settings.get("fuzzy.alwaysIncludePaths")??[];E=new d91(process.cwd(),{alwaysIncludePaths:r},!0)}else E=new class extends d91{async start(){}async query(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};if(!await J.secrets.get("apiKey",J.ampURL)){if($5.write(`No API key found. Starting login flow...
|
|
4740
4740
|
`),!await bx8(J))await zI(),process.exit(1)}let P=await Hx0({isDevelopment:!1}),R=new QS1(P,Y),C=new qj1(P,{lazy:!0}),S=Q.notifications!==void 0?Q.notifications:!J.executeMode,k=U86({playNotificationSound:async(r)=>{if(S){z86(r);let p=ny1(),t=iy1();if((!p||t)&&X.settings["notifications.system.enabled"]!==!1){if(r==="idle")process.stdout.write("\x1B]777;notify;Amp;Agent is ready\x1B\\");else if(r==="requires-user-input")process.stdout.write("\x1B]777;notify;Amp;Waiting for approval\x1B\\")}}},windowFocused:()=>Promise.resolve(!1),threadService:R,configService:Y});v.info("Starting Amp background services");let f=X16({threadService:R,threadHistoryService:C,configService:Y,isExtensionDevelopment:!1}),m;v7.status.subscribe((r)=>{m=r});let b=new wq1({workspaceRoots:[b0.file(process.cwd())],getCurrentFile:()=>{if(!m?.openFile)return;try{return b0.parse(m.openFile)}catch(r){v.warn("Failed to parse current file URI",{uri:m.openFile,error:r});return}},getOpenFiles:()=>{if(!m?.visibleFiles?.length)return[];let r=m.openFile;return m.visibleFiles.filter((p)=>p!==r).map((p)=>{try{return b0.parse(p)}catch(t){return v.warn("Failed to parse visible file URI",{uri:p,error:t}),null}}).filter((p)=>p!==null)}}),c=new ry1,Y1={codebaseContextService:b,configService:Y,toolService:G,mcpService:F,skillService:H,toolboxService:U,trustStore:W,threadService:R,threadHistoryService:C,threadSyncService:f,threadStorage:P,secretStorage:J.secrets,settingsStorage:J.settings,fuzzyServer:E,notificationService:k,fileSystem:Q.jetbrains||Q.ide?pj0:r9,terminal:c};return{...Y1,async asyncDispose(){if(Y1.mcpService.hasAuthenticatingClients())v.info("Waiting for OAuth authentication to complete before exit..."),await Y1.mcpService.waitForAuthentication();for(let r of L.values())r.dispose();await Y1.mcpService.dispose(),q(),await Y1.threadService.asyncDispose(),Y1.configService.unsubscribe(),V(),Y1.fuzzyServer.dispose(),Y1.threadSyncService.dispose(),Y1.settingsStorage[Symbol.dispose](),I.unsubscribe(),A?.dispose()}}}async function bx8(J){if(!J.executeMode){if(!await Ey1("Would you like to log in to Amp? [(y)es, (n)o]: "))return $5.write(`Login cancelled. Run the command again to retry.
|
|
4741
4741
|
`),!1}return await FB6(J)}async function FB6(J){let Q=Rx8(32).toString("hex"),Y=await wy1(J.ampURL,Q),Z=new AbortController;try{await SU(Y,Z.signal)}catch(G){v.error("Error opening browser",{error:G})}let X=await wy1(J.ampURL,Q,!1);$5.write(`If your browser does not open automatically, visit:
|
|
4742
4742
|
|
|
@@ -4746,7 +4746,7 @@ ${V6.blue.bold(X)}
|
|
|
4746
4746
|
Login successful! You can now use the Amp CLI.
|
|
4747
4747
|
`),!0}catch(G){return v.error("Login failed",{error:G}),RY.write(`
|
|
4748
4748
|
Login failed: ${G instanceof Error?G.message:String(G)}
|
|
4749
|
-
`),!1}}function gx8(){let J=new sV().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});J.exitOverride((H)=>{if(H.code==="commander.help"||H.code==="commander.version"||H.exitCode===0)Tj(),process.exit(0);let F=H.originalError??H;W26(F)}),J.option("-V, --version","Print the version number and exit",()=>{let F;try{F=`, ${_R(new Date("2025-12-
|
|
4749
|
+
`),!1}}function gx8(){let J=new sV().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});J.exitOverride((H)=>{if(H.code==="commander.help"||H.code==="commander.version"||H.exitCode===0)Tj(),process.exit(0);let F=H.originalError??H;W26(F)}),J.option("-V, --version","Print the version number and exit",()=>{let F;try{F=`, ${_R(new Date("2025-12-20T04:09:49.568Z"))} ago`}catch{}$5.write(`0.0.1766203476-g15bfc0 (released 2025-12-20T04:09:49.568Z${F??""})
|
|
4750
4750
|
`),process.exit(0)}),J.addHelpText("after",FJ6()),J.configureHelp({formatHelp:zJ6}),J.command("logout").description("Log out by removing stored API key").action(async(H,F)=>{let U=F.optsWithGlobals(),B=await mJ(U);await dx8(B)}),J.command("login").description("Log in to Amp").addHelpText("after","If AMP_URL is set during login, it will be persisted to global settings for future CLI invocations, though AMP_URL will continue to take precedence.").action(async(H,F)=>{let U=F.optsWithGlobals(),B=await mJ(U);await px8(B,await Fy1(U,B.settings))});let Q=async(H,F,U)=>{pU1({storage:F.settings,secretStorage:F.secrets,workspaceRoots:Q0.of([b0.file(process.cwd())]),defaultAmpURL:F.ampURL,homeDir:am1,userConfigDir:HB6});let B={...F,executeMode:!1};await nm1(B,{...H,openThreadSwitcher:!0},U)},Y=J.command("threads").alias("t").alias("thread").summary("Manage threads").description("Thread management commands. When no subcommand is provided, defaults to listing threads.").action(async(H,F)=>{let U=F.optsWithGlobals(),B=await mJ(U);await KB6(U,B,F)});Y.command("new").alias("n").summary("Create a new thread").description("Create a new thread and print its ID. The thread will be empty. You can set the visibility using the --visibility option.").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").action(async(H,F)=>{let U=F.optsWithGlobals(),B=await mJ(U);await rx8(U,B,F)}),Y.command("continue [threadId]").alias("c").summary("Continue an existing thread").description("Continue an existing thread by resuming the conversation. By default, shows an interactive picker with the most recently used thread at the top. Use --last to continue the last thread directly without the picker.").option("--last","Continue the last thread directly without showing the picker").option("--pick","Pick a thread interactively from a list (DEPRECATED: picker is now the default)").action(async(H,F,U)=>{let B=U.optsWithGlobals(),M=await mJ(B);if(F.pick)RY.write(`${V6.yellow("Warning:")} The --pick flag is deprecated. The picker is now shown by default.
|
|
4751
4751
|
`);if(F.last||H||M.executeMode)await ox8(B,M,H,U);else await Q(B,M,U)}),Y.command("fork [threadId]").alias("f").summary("Fork an existing thread").description("Create a new thread by forking an existing one. This copies the conversation history up to the current point and creates a new thread where you can explore different directions. If no thread ID is provided, the most recently used thread will be forked.").action(async(H,F,U)=>{let B=U.optsWithGlobals(),M=await mJ(B);await ax8(B,M,H,U)}),Y.command("list").alias("l").alias("ls").summary("List all threads").description("List all your threads with their IDs, names, and last modified times.").action(async(H,F)=>{let U=F.optsWithGlobals(),B=await mJ(U);await KB6(U,B,F)}),Y.command("search <query>").alias("find").summary("Search threads").description(`Search for threads using a query DSL.
|
|
4752
4752
|
|
|
@@ -4762,8 +4762,8 @@ All matching is case-insensitive. File paths use partial matching.`).option("-n,
|
|
|
4762
4762
|
Or pipe via stdin: echo "your message" | amp --execute`);CG(Y,Q);let V=await uX(J,Q);WB6=V;let K=cd(V),q=await yx8(V.configService),W=kx8(q?.email);if((J.executeMode||Q.streamJson)&&O9(Q.mode)&&!W)throw new b8(`Execute mode is not permitted with --mode '${Q.mode}'`,1);let H=async(b)=>{let c=await qB6(b,"utf-8"),Y1=JSON.parse(c);if(!O$(Y1.id))throw new b8(qG.invalidThreadId);return zJ1(V,{visibility:Z,agentMode:Q.mode,thread:Y1})},F=async(b)=>{if(!O$(b))throw new b8(qG.invalidThreadId);try{let[Y1,r]=await Promise.all([B5.getThreadLinkInfo({thread:b},{config:V.configService}),B5.getUserInfo({},{config:V.configService})]);if(Y1.ok&&r.ok){let p=Y1.result.creatorUserID,t=r.result.id;if(p&&p!==t&&!process.env.AMP_RESUME_OTHER_USER_THREADS_INSECURE)throw new b8(`Cannot resume thread created by another user.
|
|
4763
4763
|
|
|
4764
4764
|
This thread belongs to a different user and cannot be continued for security reasons. Set AMP_RESUME_OTHER_USER_THREADS_INSECURE=1 to bypass this check.`)}}catch(Y1){if(Y1 instanceof b8)throw Y1;v.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Y1})}let c=await V.threadService.get(b)??void 0;return v.info(`[fetchAndStartThread] Loaded thread ${b}, agentMode: ${c?.agentMode??"undefined"}`),zJ1(V,{visibility:Z,agentMode:c?void 0:Q.mode,thread:c})},U=async()=>{try{if(Q.threadId)return F(Q.threadId);else return zJ1(V,{visibility:Z,agentMode:Q.mode})}catch(b){if(b instanceof b8)throw b;throw await pu(b,Q.threadId),Error("handleError should have called process.exit()")}},B=async()=>{return zJ1(V,{visibility:Z,agentMode:Q.mode})};if(Q.format==="jsonl")RY.write(`jsonl format is deprecated. Version "0.0.1752148945-gd8844f" or earlier is required to use jsonl format.
|
|
4765
|
-
`),await zI(),process.exit(1);if(J.executeMode&&Q.remote)await YQ6(X,G,V.configService),await V.asyncDispose(),process.exit(0);let M=await U();if(J.executeMode)aJ6(V.mcpService,J.settings),await A26(M,M.threadID,X,G,V,!!Q.streamJson,!!Q.streamJsonInput,!!Q.stats,J.ampURL,W,Q.mode),await V.asyncDispose(),process.exit(0);let L=!1,A=!1,I=!1;if(Q.jetbrains||Q.ide){await gA0();let b=fP({jetbrainsOnly:Q.jetbrains});if(b.length===0){if(Q.jetbrains)A=!await V.configService.get("jetbrains.skipInstall")}else if(b.length===1){let c=b[0];if(c)v7.selectConfig(c)}else I=!0}let E=e91("0.0.
|
|
4766
|
-
`);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Y=process.stdout.isTTY&&process.stderr.isTTY,Z=await r26({...J,workspaceTrust:{current:!0,changes:Ty},getHook:process.env.AMP_URL?(G,V)=>{if(G==="url")return Promise.resolve(process.env.AMP_URL);return V()}:void 0});if(J.mcpConfig){let G=await nJ6(J.mcpConfig);Z=iJ6(Z,G)}let X=await Z.get("url","global");if(!X)X=pY;if(!_U(X))v.info("Targeting custom Amp server",{ampURL:X});return Z=tD0(Z),{executeMode:Q,isTTY:Y,ampURL:X,settings:Z,secrets:ZQ6(await Fy1(J,Z))}}function mx8(J){let Q={};for(let Y=0;Y<J.length;Y++){let Z=J[Y];if(Z?.startsWith("--")){let G=Z.slice(2).replace(/-([a-z])/g,(K,q)=>q.toUpperCase()),V=J[Y+1];if(V&&!V.startsWith("--"))Q[G]=V,Y++}}return Q}async function ux8(){let J=mx8(process.argv);if(Q26({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),Sx8(v),v.info("Starting Amp CLI.",{version:"0.0.
|
|
4765
|
+
`),await zI(),process.exit(1);if(J.executeMode&&Q.remote)await YQ6(X,G,V.configService),await V.asyncDispose(),process.exit(0);let M=await U();if(J.executeMode)aJ6(V.mcpService,J.settings),await A26(M,M.threadID,X,G,V,!!Q.streamJson,!!Q.streamJsonInput,!!Q.stats,J.ampURL,W,Q.mode),await V.asyncDispose(),process.exit(0);let L=!1,A=!1,I=!1;if(Q.jetbrains||Q.ide){await gA0();let b=fP({jetbrainsOnly:Q.jetbrains});if(b.length===0){if(Q.jetbrains)A=!await V.configService.get("jetbrains.skipInstall")}else if(b.length===1){let c=b[0];if(c)v7.selectConfig(c)}else I=!0}let E=e91("0.0.1766203476-g15bfc0",V.settingsStorage),P=new b41(V.threadStorage),R=Q0.of([b0.file(process.cwd())]),C=Eq1(void 0,R),S=new J51(V.mcpService,J.settings.getWorkspaceRootPath());if(X)M.handle({type:"user:message",message:{content:[{type:"text",text:X}]}});let f=await(async()=>{try{let b=await B5.getUserFreeTierStatus({},{config:V.configService,signal:AbortSignal.timeout(5000)});if(b.ok)return v.info("User free tier status:",b),b.result}catch(b){throw v.error("Failed to fetch free tier status:",b),b}})(),m=await GQ6();v.info("Loaded session state:",m),await Ng1({codebaseContextService:V.codebaseContextService,stdout:process.stdout,history:new h91,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,threadHistoryService:V.threadHistoryService,threadSyncService:V.threadSyncService,threadID:M.threadID,threadFuzzyIndexer:P,worker:M,workerDeps:K,skillService:K.skillService,configService:V.configService,internalAPIClient:B5,ampURL:J.ampURL,startNewThread:B,switchToThread:F,ideClient:v7,commandRegistry:C,mcpService:V.mcpService,toolboxService:V.toolboxService,mcpTrustHandler:S,showJetBrainsInstaller:A,showIdePicker:L,showIdePickerHint:I,openThreadSwitcher:Q.openThreadSwitcher,updateService:E,inspector:Q.inspector,inspectorPort:Q.inspectorPort,jetbrainsMode:Q.jetbrains,clientId:Q.clientId,sessionState:m,freeTierStatus:{canUseAmpFree:f.canUseAmpFree},workspace:q?.team??null,features:q?.features??[],isDogfooding:W,threadDependencies:V,initialAgentMode:Y.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0}),await V.asyncDispose(),process.exit(0)}async function mJ(J){if(J.interactive)RY.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
4766
|
+
`);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Y=process.stdout.isTTY&&process.stderr.isTTY,Z=await r26({...J,workspaceTrust:{current:!0,changes:Ty},getHook:process.env.AMP_URL?(G,V)=>{if(G==="url")return Promise.resolve(process.env.AMP_URL);return V()}:void 0});if(J.mcpConfig){let G=await nJ6(J.mcpConfig);Z=iJ6(Z,G)}let X=await Z.get("url","global");if(!X)X=pY;if(!_U(X))v.info("Targeting custom Amp server",{ampURL:X});return Z=tD0(Z),{executeMode:Q,isTTY:Y,ampURL:X,settings:Z,secrets:ZQ6(await Fy1(J,Z))}}function mx8(J){let Q={};for(let Y=0;Y<J.length;Y++){let Z=J[Y];if(Z?.startsWith("--")){let G=Z.slice(2).replace(/-([a-z])/g,(K,q)=>q.toUpperCase()),V=J[Y+1];if(V&&!V.startsWith("--"))Q[G]=V,Y++}}return Q}async function ux8(){let J=mx8(process.argv);if(Q26({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),Sx8(v),v.info("Starting Amp CLI.",{version:"0.0.1766203476-g15bfc0",buildTimestamp:"2025-12-20T04:09:49.568Z"}),parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new b8(qG.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await gx8().parseAsync(process.argv)}eC1().startActiveSpan("main",async(J)=>{process.on("exit",()=>J.end()),await ux8().catch(pu)});async function px8(J,Q){if(process.env.AMP_URL)await J.settings.set("url",process.env.AMP_URL,"global"),$5.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
|
|
4767
4767
|
`);else if(!_U(J.ampURL))$5.write(`Logging in to ${new URL(J.ampURL).hostname}
|
|
4768
4768
|
`);let Y=process.env.AMP_API_KEY;if(Y)$5.write(`API key found in environment variable, storing...
|
|
4769
4769
|
`),await Q.set("apiKey",Y,J.ampURL),$5.write(`API key successfully stored.
|
|
@@ -4776,7 +4776,7 @@ This thread belongs to a different user and cannot be continued for security rea
|
|
|
4776
4776
|
`);else $5.write(`Successfully logged out from ${new URL(J.ampURL).hostname}.
|
|
4777
4777
|
`);process.exit(0)}async function cx8(J,Q,Y,Z,X){CG(X,J);let G=await uX(Q,J);try{let V=UJ1(Y);if(!V)BJ1(Y);let K=V,q=Z.trim();if(q.length===0)mX("Thread name cannot be empty");if(q.length>256)mX("Thread name cannot exceed 256 characters");if(!(await aS(K,G)).messages.length)mX("Cannot rename an empty thread.");let H=cd(G);await(await r3.getOrCreateForThread(H,K)).handle({type:"title",value:q}),v.info("GOT HERE"),await G.threadSyncService.sync(),v.info("GOT THERE"),$5.write(V6.green(`✓ Thread ${K} renamed to "${q}"
|
|
4778
4778
|
`)),await G.asyncDispose(),process.exit(0)}catch(V){await G.asyncDispose();let K=`Failed to rename thread: ${V instanceof Error?V.message:String(V)}`;mX(K)}}async function lx8(J,Q,Y,Z){CG(Z,J);let X=await uX(Q,J);try{let G=UJ1(Y);if(!G)BJ1(Y);let K=await aS(G,X),q=sC(K);$5.write(q+`
|
|
4779
|
-
`),await X.asyncDispose(),process.exit(0)}catch(G){await X.asyncDispose();let V=`Failed to render thread as markdown: ${G instanceof Error?G.message:String(G)}`;mX(V)}}async function nx8(J,Q,Y,Z,X){CG(X,J);let G=await uX(Q,J);try{let V=await om1(Y),K=await aS(V,G),q=Z.typing!==!1,W=parseInt(Z.wpm||"120",10),H=parseInt(Z.messageDelay||"1000",10),F=parseInt(Z.toolProgressDelay||"800",10),U=parseInt(Z.exitDelay||"3",10)*1000,B=Z.indicator!==!1,M=cd(G),L=K.id;await G.threadStorage.set(L,K);let A=await r3.getOrCreateForThread(M,L);await A.resume();let I=f41.fromWorker(A),E=new b41(G.threadStorage),P=Q0.of([b0.file(process.cwd())]),R=Eq1(void 0,P),C=new J51(G.mcpService,Q.settings.getWorkspaceRootPath()),S=e91("0.0.
|
|
4779
|
+
`),await X.asyncDispose(),process.exit(0)}catch(G){await X.asyncDispose();let V=`Failed to render thread as markdown: ${G instanceof Error?G.message:String(G)}`;mX(V)}}async function nx8(J,Q,Y,Z,X){CG(X,J);let G=await uX(Q,J);try{let V=await om1(Y),K=await aS(V,G),q=Z.typing!==!1,W=parseInt(Z.wpm||"120",10),H=parseInt(Z.messageDelay||"1000",10),F=parseInt(Z.toolProgressDelay||"800",10),U=parseInt(Z.exitDelay||"3",10)*1000,B=Z.indicator!==!1,M=cd(G),L=K.id;await G.threadStorage.set(L,K);let A=await r3.getOrCreateForThread(M,L);await A.resume();let I=f41.fromWorker(A),E=new b41(G.threadStorage),P=Q0.of([b0.file(process.cwd())]),R=Eq1(void 0,P),C=new J51(G.mcpService,Q.settings.getWorkspaceRootPath()),S=e91("0.0.1766203476-g15bfc0",G.settingsStorage),k=Yu({configService:G.configService,filesystem:r9,spawn:hN,skillToolboxDirs:G.skillService.skillToolboxDirs});await Ng1({codebaseContextService:G.codebaseContextService,stdout:process.stdout,history:new h91,fuzzyServer:G.fuzzyServer,settingsStorage:G.settingsStorage,threadService:G.threadService,threadHistoryService:G.threadHistoryService,threadSyncService:G.threadSyncService,threadID:L,threadFuzzyIndexer:E,worker:I,workerDeps:M,skillService:M.skillService,configService:G.configService,internalAPIClient:B5,ampURL:Q.ampURL,startNewThread:async()=>I,switchToThread:async()=>I,ideClient:v7,commandRegistry:R,mcpService:G.mcpService,toolboxService:k,mcpTrustHandler:C,showJetBrainsInstaller:!1,updateService:S,isDogfooding:!1,replayMode:{thread:K,typingEnabled:q,baseWpm:W,messageDelayMs:H,toolProgressDelayMs:F,exitDelayMs:U,showIndicator:B},freeTierStatus:{canUseAmpFree:!0},features:[]}),await G.asyncDispose(),process.exit(0)}catch(V){await G.asyncDispose(),await pu(V,Y)}}async function ix8(J,Q,Y,Z,X){CG(Z,J);let G=await uX(Q,J);try{let V=UJ1(Y);if(!V)BJ1(Y);let K=V,q=await B5.getUserInfo({},{config:G.configService}),W=q.ok?q.result:null,H=Q51(J,W);if(!H&&!X)mX("Must specify either --visibility or --support");if(H&&X)mX("Cannot specify both --visibility and --support at the same time");if(H instanceof Error)mX(H.message);if(H)await G.threadSyncService.updateThreadMeta(K,Y51(H)),$5.write(V6.green("✓ ")+`Thread ${K} visibility changed to ${H}.
|
|
4780
4780
|
`);if(X){await aS(K,G);let F=typeof X==="string"?X:void 0;await N_0(G.threadService,K,G.configService,F),$5.write(V6.green("✓ ")+`Thread ${K} has been shared with Amp support. These thread reports will be aggregated and analysed.
|
|
4781
4781
|
`)}await G.asyncDispose(),process.exit(0)}catch(V){await G.asyncDispose(),mX(`Failed to update thread: ${V instanceof Error?V.message:String(V)}`)}}async function ax8(J,Q,Y,Z){CG(Z,J);let X=await uX(Q,J),G=cd(X);try{let V=await om1(Y),q=(await aS(V,X)).messages.length-1,W=await r3.getOrCreateForThread(G,V),H=await $j(W,X.threadSyncService,q);await Promise.all([X.threadSyncService.uploadThread(V),X.threadSyncService.uploadThread(H)]),await im1(H),$5.write(`${H}
|
|
4782
4782
|
`),await X.asyncDispose(),process.exit(0)}catch(V){RY.write(`Error forking thread: ${V instanceof Error?V.message:String(V)}
|