@sourcegraph/amp 0.0.1765641666-ge1df4f → 0.0.1765656079-g53c6e1
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
|
@@ -4244,11 +4244,11 @@ Actual: ${X}`)}async function XZ8(J,Q,Z){let{execSync:Y}=await import("node:ch
|
|
|
4244
4244
|
${D}`;if(X==="pnpm"&&D.includes("Unable to find the global bin directory"))M+=`
|
|
4245
4245
|
|
|
4246
4246
|
Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
|
|
4247
|
-
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()}})})}B0();B0();async function $41(J,Q){let Y=Q||"https://registry.npmjs.org";try{let X=new AbortController,G=setTimeout(()=>X.abort(),5000),V=await fetch(`${Y}/@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=qZ8(J,q),H=W<0,z,U;if(K.time){let D=K.time[J],M=K.time[q],L=Date.now();if(D)z=Math.floor((L-new Date(D).getTime())/3600000);if(M)U=Math.floor((L-new Date(M).getTime())/3600000)}return x.info("NPM version comparison",{currentVersion:J,latestVersion:q,compareResult:W,hasUpdate:H,currentVersionAge:z,latestVersionAge:U}),{hasUpdate:H,latestVersion:q,currentVersion:J,currentVersionAge:z,latestVersionAge:U,source:"npm"}}catch(X){return x.debug("Error checking npm version",{error:X}),{hasUpdate:!1,currentVersion:J,source:"npm"}}}function qZ8(J,Q){let Z=(V)=>{let[K,q]=V.split("-");return{parts:K?.split(".").map(Number)||[],label:q}},Y=Z(J),X=Z(Q),G=Math.max(Y.parts.length,X.parts.length);for(let V=0;V<G;V++){let K=Y.parts[V]||0,q=X.parts[V]||0;if(K<q)return-1;if(K>q)return 1}if(Y.label===X.label)return 0;if(!Y.label&&X.label)return 1;if(Y.label&&!X.label)return-1;if(Y.label&&X.label)return Y.label<X.label?-1:1;return 0}d0();function G41(J,Q){let Z=new p4,Y=Z.pipe(T8({shouldCountRefs:!1}));return setImmediate(async()=>{let X=new BK().scoped("update"),G=Y.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 MB(500),Z.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=pA(),W=await $41(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,D=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},z=await X41();if(!K)K=z==="pnpm"?"warn":"auto",X.debug("no configured update mode; selected default based on package manager",{packageManager:z,mode:K});if(K==="warn"){if(!H())Z.next("update-available");return}if(!z){if(X.debug("auto-update not supported, falling back to warn mode"),!H())Z.next("update-available");return}if(z==="binary"&&process.platform==="win32"){if(X.debug("binary auto-update not supported on Windows, falling back to warn mode"),!H())Z.next("update-available");return}try{await lm(W.latestVersion,z);let U=await xB(W.latestVersion),D={from:W.currentVersion,to:W.latestVersion,...U};if(U.status==="same")X.info("success",D),Z.next("updated");else X.warn("success with warning",D),Z.next("updated-with-warning")}catch(U){Z.next("update-error")}}catch(V){X.debug("check failed",{error:V})}finally{await MB(5000),Z.next("hidden"),G.unsubscribe(),Z.complete()}}),{state:Y}}import{stderr as Rq}from"node:process";function W46(J){let Q=new RA().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(Y)=>{await nC1(Y.force||!1,Y.verbose||!1,"0.0.
|
|
4247
|
+
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()}})})}B0();B0();async function $41(J,Q){let Y=Q||"https://registry.npmjs.org";try{let X=new AbortController,G=setTimeout(()=>X.abort(),5000),V=await fetch(`${Y}/@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=qZ8(J,q),H=W<0,z,U;if(K.time){let D=K.time[J],M=K.time[q],L=Date.now();if(D)z=Math.floor((L-new Date(D).getTime())/3600000);if(M)U=Math.floor((L-new Date(M).getTime())/3600000)}return x.info("NPM version comparison",{currentVersion:J,latestVersion:q,compareResult:W,hasUpdate:H,currentVersionAge:z,latestVersionAge:U}),{hasUpdate:H,latestVersion:q,currentVersion:J,currentVersionAge:z,latestVersionAge:U,source:"npm"}}catch(X){return x.debug("Error checking npm version",{error:X}),{hasUpdate:!1,currentVersion:J,source:"npm"}}}function qZ8(J,Q){let Z=(V)=>{let[K,q]=V.split("-");return{parts:K?.split(".").map(Number)||[],label:q}},Y=Z(J),X=Z(Q),G=Math.max(Y.parts.length,X.parts.length);for(let V=0;V<G;V++){let K=Y.parts[V]||0,q=X.parts[V]||0;if(K<q)return-1;if(K>q)return 1}if(Y.label===X.label)return 0;if(!Y.label&&X.label)return 1;if(Y.label&&!X.label)return-1;if(Y.label&&X.label)return Y.label<X.label?-1:1;return 0}d0();function G41(J,Q){let Z=new p4,Y=Z.pipe(T8({shouldCountRefs:!1}));return setImmediate(async()=>{let X=new BK().scoped("update"),G=Y.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 MB(500),Z.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=pA(),W=await $41(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,D=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},z=await X41();if(!K)K=z==="pnpm"?"warn":"auto",X.debug("no configured update mode; selected default based on package manager",{packageManager:z,mode:K});if(K==="warn"){if(!H())Z.next("update-available");return}if(!z){if(X.debug("auto-update not supported, falling back to warn mode"),!H())Z.next("update-available");return}if(z==="binary"&&process.platform==="win32"){if(X.debug("binary auto-update not supported on Windows, falling back to warn mode"),!H())Z.next("update-available");return}try{await lm(W.latestVersion,z);let U=await xB(W.latestVersion),D={from:W.currentVersion,to:W.latestVersion,...U};if(U.status==="same")X.info("success",D),Z.next("updated");else X.warn("success with warning",D),Z.next("updated-with-warning")}catch(U){Z.next("update-error")}}catch(V){X.debug("check failed",{error:V})}finally{await MB(5000),Z.next("hidden"),G.unsubscribe(),Z.complete()}}),{state:Y}}import{stderr as Rq}from"node:process";function W46(J){let Q=new RA().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(Y)=>{await nC1(Y.force||!1,Y.verbose||!1,"0.0.1765656079-g53c6e1"),process.exit()});J.addCommand(Q,{hidden:!0});let Z=new RA("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(Y)=>{await WZ8(Y.targetVersion)});J.addCommand(Z)}async function WZ8(J){if(process.env.AMP_SKIP_UPDATE_CHECK==="1")Rq.write(T6.yellow(`Note: AMP_SKIP_UPDATE_CHECK=1 is set, which disables automatic update checking. Manual updates will still work.
|
|
4248
4248
|
|
|
4249
4249
|
`));try{if(!J){Rq.write(T6.blue(`Checking for updates...
|
|
4250
|
-
`));let Z=pA(),{hasUpdate:Y,latestVersion:X}=await $41("0.0.
|
|
4251
|
-
`));let V=await xB("0.0.
|
|
4250
|
+
`));let Z=pA(),{hasUpdate:Y,latestVersion:X}=await $41("0.0.1765656079-g53c6e1",Z);if(!Y){Rq.write(T6.green(`✓ Amp CLI is already up to date: ${"0.0.1765656079-g53c6e1"} (${"released"} ${"2025-12-13T20:06:36.591Z"}${`, ${rI(new Date("2025-12-13T20:06:36.591Z"))} ago`})
|
|
4251
|
+
`));let V=await xB("0.0.1765656079-g53c6e1");if(V.warning)Rq.write(`
|
|
4252
4252
|
`+T6.yellow(V.warning)+`
|
|
4253
4253
|
`);process.exit(0)}if(!X)Rq.write(T6.yellow("[WARN] could not find latest version")),process.exit(0);J=X}Rq.write(T6.blue(`Updating to version ${J}...
|
|
4254
4254
|
`)),await lm(J,void 0,(Z)=>{Rq.write(T6.dim(`Running: ${Z}
|
|
@@ -4917,7 +4917,7 @@ Ctrl-X, Y, Z to unlock`;if(U){let a=W.text.replace(/`([^`]+)`/g,"$1")+`
|
|
|
4917
4917
|
`,A)])}),y];if(!q&&!U&&W.url){let b=W.url.replace(/^https?:\/\//,"");g.push(new i5({uri:W.url,text:b,style:new r({color:Z.secondary,underline:!0})}))}if(k&&!U)g.push(k);let p=new Q0({width:40,child:new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:g})});return j4.child(new B6({mainAxisAlignment:"center",crossAxisAlignment:"center",mainAxisSize:"min",children:[new wS1({width:sk1,height:tk1,agentMode:this.widget.agentMode,glow:this._glow,t:H,fps:0,shockwaves:this._shockwaves,onShockwave:P,...V==="disabled"&&{seed:42}}),new Q0({width:2}),p]}))}}B0();N8();G4();H7();N8();d0();function CF8(J,Q){return`${J}:${Q}`}class ek1{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 t1((Q)=>{return this.emitMainThread=(Z)=>Q.next(Z),()=>{this.emitMainThread=null}}),this.subthreadObservable=new t1((Q)=>{return this.emitSubthread=(Z)=>Q.next(Z),()=>{this.emitSubthread=null}}),this.workerStatusObservable=new t1((Q)=>{return this.emitWorkerStatus=(Z)=>Q.next(Z),()=>{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 Z=this.threadService.observePatches(Q).pipe(qM()).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,Z);let Y=J.status.subscribe((G)=>{if(this.workers.set(Q,G),this.emitWorkerStatus)this.emitWorkerStatus({threadID:Q,status:G})});this.workerStatusSubs.set(Q,Y);let X=J.subthreads.subscribe((G)=>{this.subthreadsMap.set(Q,G);for(let V of G){let K=CF8(Q,V.toolUse.id);if(this.subthreadPatchSubs.has(K))continue;let q=this.threadService.observePatches(V.threadID).pipe(qM()).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 Z=this.workerStatusSubs.get(J);if(Z)Z.unsubscribe(),this.workerStatusSubs.delete(J);let Y=this.subthreadsSubs.get(J);if(Y)Y.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 t1((Q)=>{return this.mainThreadObservable.subscribe((Z)=>{if(Z.threadID===J)Q.next(Z)})}),subthreads:new t1((Q)=>{return this.subthreadObservable.subscribe((Z)=>{if(Z.threadID===J)Q.next(Z)})}),workerStatus:new t1((Q)=>{return this.workerStatusObservable.subscribe((Z)=>{if(Z.threadID===J)Q.next(Z)})})}}get threadViewStates(){let J={};for(let[Q,Z]of this.threadsMap){let Y=this.workers.get(Q);if(Y)J[Q]=VA(Z,Y)}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 jF8(J,Q){switch(Q.type){case"subthread-patch":{let{thread:Z,subthread:Y}=Q,X=J.subagents[Y.threadID];if(!X){if(X={subThreadID:Z.id,parentToolID:Y.toolUse.id,taskDescription:Y.toolUse.input.description||"Task",isCompleted:!1,agentState:{type:"idle"}},J.mainThread){let W=dJ(J.mainThread);X.isCompleted=DJ6(W,Y.toolUse.id)}}let G=SF8(Z,X.agentState),V=X.agentState===G?X:{...X,agentState:G},K={...J.tools},q=vC(Z).items.filter((W)=>W.type==="toolResult");for(let W of q)K[W.id]={id:W.id,subthreadID:Z.id,toolRun:W.toolResult.run,toolUse:W.toolUse};return{subagents:{...J.subagents,[Y.threadID]:V},tools:K,items:J.items,viewState:J.viewState,todosList:J.todosList,mainThread:J.mainThread}}case"main-thread-patch":{let{thread:Z,subthreads:Y,workerStatus:X}=Q,G=dJ(Z),V={...J.subagents};for(let z of Y){let U=V[z.threadID];if(!U)continue;let D=DJ6(G,z.toolUse.id);V[z.threadID]={...U,isCompleted:D}}let{items:K}=vC(Z),q=VA(Z,X),W=sE({messages:Z.messages}),H=Array.isArray(W)?W:[];return{...J,subagents:V,items:K,viewState:q,todosList:H,mainThread:Z}}case"worker-status-change":{if(!J.mainThread)return J;let Z=VA(J.mainThread,Q.workerStatus);if(Z===J.viewState)return J;return{...J,viewState:Z}}default:return J}}function vC(J){let Q=[],Z=new Map,Y=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(Z.set(W.id,W),K)Y.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 z=X+1;z<J.messages.length;z++){let U=J.messages[z];if(U){for(let D of U.content)if(D.type==="tool_result"&&D.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=Z.get(q.toolUseID)??OY(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 DJ6(J,Q){let Z=J.get(Q);return(Z&&W3(Z.run))??!1}function SF8(J,Q){let Z=J.messages.at(-1);if(Z?.content.some((X)=>X.type==="tool_result"&&X.run.status==="blocked-on-user"))return x.info("Subagent status: idle (blocked-on-user)",{threadID:J.id}),{type:"idle"};if(vC(J).items.some((X)=>X.type==="toolResult"&&X.toolResult.run.status==="in-progress")){let X=Q?.type==="running-tools"?Q.startTime:Date.now();return x.info("Subagent status: running-tools",{threadID:J.id,startTime:X,hasStartTime:!!X}),{type:"running-tools",startTime:X}}if(Z&&Z.role==="assistant"&&Z.state.type==="streaming")switch(Z.content.at(-1)?.type){case"text":return x.info("Subagent status: streaming-text",{threadID:J.id}),{type:"streaming-text"};case"thinking":return x.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 x.info("Subagent status: running-tools (streaming tool_use)",{threadID:J.id,startTime:G,hasStartTime:!!G}),{type:"running-tools",startTime:G}}default:return x.info("Subagent status: streaming-text (default)",{threadID:J.id}),{type:"streaming-text"}}return x.info("Subagent status: idle (default)",{threadID:J.id}),{type:"idle"}}class Jy1 extends p0{props;constructor(J){super();this.props=J}createState(){return new MJ6}}class MJ6 extends g0{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 ek1(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),Z=Q.mainThread.subscribe((G)=>{this.dispatch({type:"main-thread-patch",thread:G.mainThread,subthreads:G.subthreads,workerStatus:G.workerStatus})});this.subscriptions.push(Z);let Y=Q.subthreads.subscribe((G)=>{this.dispatch({type:"subthread-patch",thread:G.thread,subthread:G.subthread})});this.subscriptions.push(Y);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=jF8(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 Z=(G)=>G===O5||G===r8||G===DY,Y=new Map;for(let G of this.state.items)if(G.type==="toolResult"&&Z(G.toolUse.name))Y.set(G.toolUse.id,{toolUseId:G.toolUse.id,toolName:G.toolUse.name,toolRun:G.toolResult.run});let X=Array.from(Y.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 z of H.tool_uses){let U=`${G}:progress:${W++}`;K.push({toolUse:aE(z.tool_name,z.input,U),toolRun:{status:z.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,(Z)=>this.switchWorker(Z),()=>this.currentWorker,this.recentThreadIDs)}}class Qy1 extends p0{props;constructor(J){super({key:J.key});this.props=J}createState(){return new LJ6}}class LJ6 extends g0{build(J){let Z=X6.of(J).colors,{todos:Y,title:X="TODOs"}=this.widget.props;if(!Array.isArray(Y)||Y.length===0)return new Q0({width:0,height:0});let G=Y.map((V)=>this.buildTodoItem(V,Z));return new b0({child:new W6({padding:z0.symmetric(1,0),child:new x0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new _1({text:new l(X,new r({bold:!0,color:Z.foreground}))}),...G]})})})}buildTodoItem(J,Q){let Z=this.getStatusIcon(J.status),Y=J.status==="completed",X=new r({bold:J.status==="in-progress",color:Q.foreground,dim:Y}),G=new r({bold:J.status==="in-progress",strikethrough:J.status==="completed",color:Q.foreground,dim:Y});return new B6({crossAxisAlignment:"start",children:[new _1({text:new l(Z,X)}),new Q0({width:1}),new c6({child:new _1({text:new l(J.content,G)})})]})}getStatusIcon(J){return J==="completed"?"✓":"•"}}class Zy1 extends I6{ad;onDismiss;onButtonClick;constructor({key:J,ad:Q,onDismiss:Z,onButtonClick:Y}){super({key:J});this.ad=Q,this.onDismiss=Z,this.onButtonClick=Y}build(J){let Q=X6.of(J),Z=Q.colors.primary,Y=Q.colors.foreground;return new b0({decoration:new M8(void 0,new U4(new V4(Z,1,"rounded"),new V4(Z,1,"rounded"),void 0,new V4(Z,1,"rounded"))),child:new W6({padding:z0.horizontal(1),child:new x0({children:[new B6({crossAxisAlignment:"start",children:[new c6({child:new _1({text:new l(this.ad.content,new r({color:Y}))})}),new Q0({width:4}),new i5({uri:"https://ampcode.com/free",text:"Ad",style:new r({color:Y,dim:!0})})]}),new B6({crossAxisAlignment:"start",children:[new yS1({text:this.ad.buttonLabel,onPressed:()=>this.onButtonClick?.(),padding:z0.horizontal(1),color:Z,reverse:!0}),new Q0({width:2}),new _1({text:new l(this.ad.destinationUrlHostname,new r({color:Y,dim:!0}))})]})]})})})}}class Yy1 extends p0{props;constructor(J){super();this.props=J}createState(){return new AJ6(this.props.autofocus??!0)}}class AJ6 extends g0{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"},Z=_4.sizeOf(J),Y=Math.min(60,Z.width-4),X=Z.height-4,G=[];if(this.widget.props.title)G.push(new _1({text:new l(this.widget.props.title,new r({bold:!0,color:H1.blue}))}),new Q0({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 Q0({height:1}));let V=[];if(this.widget.props.showCopyOption)V.push(new _1({text:new l("Enter to copy",new r({dim:!0}))}));return V.push(new _1({text:new l("Escape to close",new r({dim:!0}))})),G.push(new B6({children:V.flatMap((K,q)=>q<V.length-1?[K,new Q0({width:1}),new _1({text:new l("•",new r({dim:!0}))}),new Q0({width:1})]:[K]),mainAxisSize:"min"})),new j4({child:new b0({constraints:new A6(Y,Y,0,X),decoration:new M8(H1.default(),new U4(new V4(H1.blue,1,"rounded"),new V4(H1.blue,1,"rounded"),new V4(H1.blue,1,"rounded"),new V4(H1.blue,1,"rounded"))),padding:new z0(2,2,2,2),child:new F8({autofocus:this.autofocus,onKey:Q,child:new x0({children:G,mainAxisSize:"min"})})})})}}class u91 extends Error{constructor(J="Command timed out"){super(J);this.name="CommandTimeoutError",Object.setPrototypeOf(this,u91.prototype)}}class p91 extends Error{constructor(J){let Q=`${J.noun}: ${J.verb} command cancelled`;super(Q);this.name="CommandCancelledError",Object.setPrototypeOf(this,p91.prototype)}}function Xy1(J){let Q=J.match(/"([^"]*)"|'([^']*)'|([^\s"']+)/g);if(!Q)return[];return Q.map((Z)=>{if(Z.startsWith('"')&&Z.endsWith('"')||Z.startsWith("'")&&Z.endsWith("'"))return Z.slice(1,-1);return Z})}tW();B0();import{spawn as _F8}from"node:child_process";import{promises as kF8}from"node:fs";function OJ6(J){return J.kind==="executable"}function wJ6(J){return J.kind==="markdown"}var Fz=50000,EJ6=300000;async function $y1(J,Q,Z,Y={}){let{timeoutMs:X=EJ6,signal:G,source:V}=Y;try{let K=await Z.getCommand(J,V);if(!K)return{success:!1,output:"",error:`Command '${J}' not found`};if(!await Z.isCommandAvailable(J,V))return{success:!1,output:"",error:`Command '${J}' is not available for execution`};if(x.debug("Executing command",{commandName:J,filePath:K.filePath,args:Q}),wJ6(K))return await yF8(K,Q);else if(OJ6(K))return await xF8(K,Q,X,G);else return{success:!1,output:"",error:"Unsupported command type"}}catch(K){return x.error("Failed to execute command",{commandName:J,error:K}),{success:!1,output:"",error:K instanceof Error?K.message:"Unknown error occurred"}}}async function yF8(J,Q){try{if(Q.length>0)return{success:!1,output:"",error:"Markdown commands do not accept arguments"};let Z=await kF8.readFile(J.filePath,"utf8");return{success:!0,output:(Z.length>Fz?Z.slice(0,Fz)+`
|
|
4918
4918
|
... (output truncated at ${Fz} characters)`:Z).trim(),exitCode:0}}catch(Z){return{success:!1,output:"",error:Z instanceof Error?Z.message:"Failed to read markdown file"}}}async function xF8(J,Q,Z=EJ6,Y){return new Promise((X)=>{let[G,V]=vF8(J,Q);x.debug("Spawning command",{spawnCommand:G,spawnArgs:V.slice(0,10),filePath:J.filePath,timeoutMs:Z});let K=kw0(Y),q=!1,W=setTimeout(()=>{q=!0,K.abort(),x.warn("Command execution timed out",{commandName:J.name,timeoutMs:Z})},Z),H=_F8(G,V,{stdio:["pipe","pipe","pipe"],signal:K.signal,detached:!0}),z=[],U=[],D=0;H.stdout?.on("data",(M)=>{let L=M.toString();if(D+=L.length,D<=Fz)z.push(L);else{let A=Fz-(D-L.length);if(A>0)z.push(L.slice(0,A))}}),H.stderr?.on("data",(M)=>{let L=M.toString();if(D+=L.length,D<=Fz)U.push(L);else{let A=Fz-(D-L.length);if(A>0)U.push(L.slice(0,A))}}),H.on("close",(M)=>{if(clearTimeout(W),q){X({success:!1,output:z.join(""),error:`Command timed out after ${Z}ms`,exitCode:void 0});return}if(K.signal.aborted){X({success:!1,output:z.join(""),error:"The command was aborted",exitCode:M??void 0});return}let L=M===0||M===1,A=z.join(""),E=U.join(""),I=A;if(!L&&!A.trim()&&E.trim())I=E;else if(E.trim())I+=A?`
|
|
4919
4919
|
${E}`:E;if(D>Fz)I+=`
|
|
4920
|
-
... (output truncated at ${Fz} characters)`;X({success:L,output:I.trim(),error:!L?E.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 ${Z}ms`;else if(M.message.includes("operation was aborted")||M.name==="AbortError")L="The command was aborted";X({success:!1,output:z.join(""),error:L})})})}function vF8(J,Q){let{filePath:Z,interpreter:Y,extension:X}=J;if(process.platform==="win32")return hF8(Z,Y?[...Y]:null,X,Q);else return fF8(Z,Y?[...Y]:null,X,Q)}function fF8(J,Q,Z,Y){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Y]];else return[J,Y]}function hF8(J,Q,Z,Y){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Y]];switch(Z.toLowerCase()){case".bat":case".cmd":return["cmd.exe",["/c",J,...Y]];case".ps1":return["powershell.exe",["-ExecutionPolicy","Bypass","-File",J,...Y]];case".exe":return[J,Y];default:return[J,Y]}}B0();LY();R7();yb();LK();SZ();dG();eW();dK();N8();xb();H7();h_();d0();var sJ6=q6(vP(),1);import{writeFile as oJ6}from"fs/promises";import uq from"path";B0();SZ();class Gy1{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,Z])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1765641666-ge1df4f"},parameters:{metadata:{count:Z}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await ao(Q,this.configService)}catch(Q){x.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 BO extends p0{props;constructor(J){super();this.props=J}createState(){return new IJ6}}class IJ6 extends g0{_state;initState(){super.initState(),this._state=this.widget.props.initialState}build(J){let Q=(Z)=>{this.setState(()=>{this._state=Z(this._state)})};return this.widget.props.builder(J,Q,this._state)}}class PJ6 extends g0{controller=new nZ;focusNode=new G8({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=X6.of(J),{colors:Z,app:Y}=Q,X=this.widget.props.isRequiredArg??!0,G=this.controller.text.trim().length>0,V=!X||G,K=U4.all(new V4(Z.foreground,1,"solid")),q=new qz({controller:this.controller,focusNode:this.focusNode,placeholder:this.widget.props.placeholder??"Enter command argument...",onSubmitted:(D)=>{let M=D.trim();if(X&&M.length===0)return;this.widget.props.onSubmit(M)},autofocus:!0,style:{textColor:Z.foreground,border:null},maxLines:1}),W=new B6({children:[new b0({decoration:{color:H1.default()},child:new _1({text:new l(">",new r({color:Z.foreground}))})}),new c6({child:q})]}),H=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new r({color:Z.foreground})),new l(this.widget.props.commandName,new r({color:H1.yellow,bold:!0}))])})}),z=[];if(V)z.push(new l("Enter",new r({color:Y.keybind}))),z.push(new l(" to submit, ",new r({color:Z.foreground,dim:!0})));z.push(new l("Esc",new r({color:Y.keybind}))),z.push(new l(" to cancel",new r({color:Z.foreground,dim:!0})));let U=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,z)})});return new b0({decoration:{border:K,color:H1.default()},padding:z0.all(1),child:new x0({children:[H,new Q0({height:1}),W,new Q5,U]})})}}class ig extends p0{props;constructor(J){super();this.props=J}createState(){return new PJ6}}eW();class RJ6 extends g0{controller=new nZ;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new G8({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>=QU)return!1;let Q=LC(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=X6.of(J),{colors:Z,app:Y}=Q,G=_4.of(J).size.height,V=Math.max(Math.floor(G*0.5),10),K=new UO({controller:this.controller,triggers:[new XN],completionBuilder:this.widget.props.completionBuilder,ampURL:this.widget.props.ampURL,onSubmitted:(D)=>{this.widget.props.onSubmit(D.trim(),this.imageAttachments)},theme:Z,placeholder:this.widget.props.placeholder||"Enter your message...",enabled:this.widget.props.enabled??!0,autofocus:!0,clipboard:b8.instance.tuiInstance.clipboard,showMenuBelow:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),q=new F8({focusNode:this.focusNode,child:K}),W=new b0({constraints:new A6({maxHeight:V}),padding:z0.symmetric(1,0),child:q}),H=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new r({color:Z.foreground})),new l(this.widget.props.commandName,new r({color:H1.yellow,bold:!0}))])})}),z=new b0({padding:z0.symmetric(1,0),child:new _1({text:this.isConfirmingClearInput?new l("",void 0,[new l("Esc",new r({color:Y.keybind})),new l(" again to clear input",new r({color:Z.foreground,dim:!0}))]):new l("",void 0,[new l("Press ",new r({color:Z.foreground,dim:!0})),new l("Enter",new r({color:Y.keybind})),new l(" to submit, ",new r({color:Z.foreground,dim:!0})),new l("Esc",new r({color:Y.keybind})),new l(" to clear",new r({color:Z.foreground,dim:!0}))])})}),U=[H,new Q0({height:1}),new c6({child:W}),new Q0({height:1}),z];return new b0({decoration:{border:U4.all(new V4(Z.foreground,1,"solid")),color:H1.default()},padding:z0.all(1),child:new x0({children:U})})}}class fC extends p0{props;constructor(J){super();this.props=J}createState(){return new RJ6}}import{isDeepStrictEqual as uF8}from"node:util";var bF8=/[\\/_ +.#"@[({&]/,mF8=/[\\/_ +.#"@[({&]/g,gF8=/[\s-]/,TJ6=/[\s-]/g;function c91(J,Q,Z,Y,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=Y.charAt(G),W=Z.indexOf(q,X),H=0,z,U,D,M;while(W>=0){if(z=c91(J,Q,Z,Y,W+1,G+1,V),z>H){if(W===X)z*=1;else if(gF8.test(J.charAt(W-1))){if(z*=0.9,M=J.slice(X,W-1).match(TJ6),M&&X>0)z*=Math.pow(0.999,M.length)}else if(bF8.test(J.charAt(W-1))){if(z*=0.8,D=J.slice(X,W-1).match(mF8),D&&X>0)z*=Math.pow(0.999,D.length)}else if(z*=0.3,X>0)z*=Math.pow(0.999,W-X);if(J.charAt(W)!==Q.charAt(G))z*=0.9999}if(z<0.1&&(Z.charAt(W-1)===Y.charAt(G+1)||Y.charAt(G+1)===Y.charAt(G)&&Z.charAt(W-1)!==Y.charAt(G))){if(U=c91(J,Q,Z,Y,W+1,G+2,V),U*0.1>z)z=U*0.1}if(z>H)H=z;W=Z.indexOf(q,W+1)}return V[K]=H,H}function d91(J){return J.toLowerCase().replace(TJ6," ")}function CJ6(J,Q){let Z=c91(J,Q,d91(J),d91(Q),0,0,{}),Y=Q.trim().split(/\s+/);if(Y.length>1){let X=0,G=0;for(let K of Y){let q=c91(J,K,d91(J),d91(K),0,0,{});if(q===0)return Z;X+=q,G+=K.length}let V=X/Y.length*0.95;return Math.max(Z,V)}return Z}class hC{}class bC{}class l91{}class i91{}class jJ6 extends p0{child;onContext;constructor(J,Q){super();this.child=J;this.onContext=Q}createState(){return new SJ6}}class SJ6 extends g0{build(J){return this.widget.onContext(J),this.widget.child}}function pF8(J,Q){if(J==="")return{matches:!0,score:1};let Z=CJ6(Q,J);return{matches:Z>0.15,score:Z}}class f2 extends p0{props;debugLabel="FuzzyPicker";constructor(J){super();this.props=J}createState(){return new _J6}}class _J6 extends g0{controller=new nZ;focusNode;scrollController=new l5;selectedIndex=0;itemContexts=[];cachedQuery="";cachedItemsRef=null;cachedFiltered=[];initState(){this.scrollController.disableFollowMode(),this.focusNode=new G8({debugLabel:this.widget.debugLabel}),this.controller.addListener(()=>{this.selectedIndex=0,this.recomputeFilteredItems(),this.setState(),_8.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(!uF8(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 hC){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length-1)this.selectedIndex++,this.setState(),_8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof bC){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex>0)this.selectedIndex--,this.setState(),_8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof l91){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length){let Z=Q[this.selectedIndex];if(Z){if(!(this.widget.props.isItemDisabled?.(Z)??!1))this.widget.props.onAccept(Z)}}return"handled"}if(J instanceof i91)return this.widget.props.onDismiss?.(),"handled";return"ignored"};recomputeFilteredItems(){let J=this.controller.text,Q=this.widget.props.items,Z=Q.filter((Y)=>!this.widget.props.filterItem||this.widget.props.filterItem(Y,J)).map((Y)=>({item:Y,...pF8(J,this.widget.props.getLabel(Y))})).filter((Y)=>Y.matches).sort(this.widget.props.sortItems?(Y,X)=>this.widget.props.sortItems(Y,X,J):(Y,X)=>X.score-Y.score).map((Y)=>Y.item);this.cachedQuery=J,this.cachedItemsRef=Q,this.cachedFiltered=this.widget.props.maxRenderItems?Z.slice(0,this.widget.props.maxRenderItems):Z}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 Z=0,Y=Q.size.height;u81(J,{top:Z,bottom:Y},{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(),_8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null)};handleItemClick=(J,Q)=>{let Z=this.getFilteredItems();if(J>=0&&J<Z.length){let Y=Z[J],X=Y?this.widget.props.isItemDisabled?.(Y)??!1:!1;if(Q===1)this.selectedIndex=J,this.setState(),this.widget.props.onSelectionChange?.(Z[this.selectedIndex]??null);else if(Q===2&&!X){if(Y)this.widget.props.onAccept(Y)}}};build(J){let Q=X6.of(J),{colors:Z}=Q,Y=this.getFilteredItems(),X=U4.all(new V4(Z.foreground,1,"solid")),G=this.widget.props.enabled??!0,V=new qz({controller:this.controller,focusNode:this.focusNode,autofocus:!0,enabled:G,style:{textColor:Z.foreground,border:null},maxLines:1}),K=new ZX({shortcuts:new Map([[new X4("ArrowDown"),new hC],[new X4("ArrowUp"),new bC],[new X4("Tab"),new hC],[new X4("Tab",{shift:!0}),new bC],[new X4("n",{ctrl:!0}),new hC],[new X4("p",{ctrl:!0}),new bC],[new X4("Enter"),new l91],[new X4("Escape"),new i91]]),focusNode:this.focusNode,child:V}),q=new BJ({actions:new Map([[hC,new I8(this.invoke)],[bC,new I8(this.invoke)],[l91,new I8(this.invoke)],[i91,new I8(this.invoke)]]),child:K}),W=new B6({children:[new b0({decoration:{color:H1.default()},child:new _1({text:new l(">",new r({color:Z.foreground}))})}),new c6({child:q})]});this.itemContexts=[];let H;if(this.widget.props.isLoading){let L=this.widget.props.loadingText??"Loading...";H=new Q0({height:10,child:new j4({child:new _1({text:new l(L,new r({color:Z.foreground}))})})})}else if(Y.length===0&&this.widget.props.emptyStateText)H=new c6({child:new j4({child:new _1({text:new l(this.widget.props.emptyStateText,new r({color:Z.foreground,dim:!0}))})})});else{let L=Y.map((A,E)=>{let I=E===this.selectedIndex,P=this.widget.props.isItemDisabled?.(A)??!1,T;if(this.widget.props.renderItem)T=this.widget.props.renderItem(A,I,P,J);else{let k=I?H1.yellow:void 0,y=I?H1.black:Z.foreground;T=new b0({decoration:k?{color:k}:void 0,padding:z0.symmetric(2,0),child:new _1({text:new l(this.widget.props.getLabel(A),new r({color:y,dim:P}))})})}return new jJ6(new V8({onClick:(k)=>this.handleItemClick(E,k.clickCount),child:T}),(k)=>{this.itemContexts[E]=k})});H=new x0({children:L,crossAxisAlignment:"start"})}let z=new c6({child:new V8({onScroll:this.handleScroll,opaque:!1,child:new W5({controller:this.scrollController,autofocus:!1,child:H})})}),U=[];if(this.widget.props.title){let L=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l(this.widget.props.title,new r({color:H1.yellow,bold:!0}))})});U.push(L)}if(U.push(W,new Q0({height:1}),z),this.controller.text!==""){let L=Y.length>0?Y[this.selectedIndex]:void 0,A=L&&this.widget.props.buildDisabledReasonWidget?.(L);if(A)U.push(new b0({padding:z0.vertical(1),child:new j4({child:A})}));else U.push(new Q0({height:3}))}if(this.widget.props.footer)U.push(this.widget.props.footer);return new b0({decoration:{border:X,color:H1.default()},padding:z0.symmetric(1,0),child:new x0({children:U})})}}function kJ6(J){let Z=new Date().getTime()-J.getTime(),Y=Math.floor(Z/60000),X=Math.floor(Z/3600000),G=Math.floor(Z/86400000);if(Y<1)return"just now";if(Y<60)return`${Y}m ago`;if(X<24)return`${X}h ago`;if(G<7)return`${G}d ago`;return J.toLocaleDateString()}class Vy1 extends I6{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()),Z=Math.max(0,...Q.map((X)=>kJ6(X.pubDate).length));return new f2({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=X6.of(K),{colors:W}=q,H=G?H1.yellow:void 0,z=G?H1.black:W.foreground,U=H1.index(8),D=(M,L)=>new Q0({width:L,child:B6.end([new _1({text:new l(M,new r({color:U}))})])});return new b0({decoration:H?{color:H}:void 0,padding:z0.symmetric(2,0),child:new B6({children:[new c6({child:new _1({text:new l(X.title,new r({color:z})),overflow:"ellipsis",maxLines:1})}),new Q0({width:2}),D(kJ6(X.pubDate),Z)]})})}})}}class Ky1 extends p0{createState(){return new yJ6}}class yJ6 extends g0{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 r({color:this.isGreen?H1.green:H1.index(8),bold:!0})),maxLines:1})}}function dF8(J){let Q=new Map,Z=new Map,Y=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){Y.set(V.id,K.type);let q=K.threadID,W=Z.get(q)||[];W.push(V),Z.set(q,W)}else X.push(V)}return YX.flatten(X,(V)=>Z.get(V.id)).map((V)=>({...V.item,depth:V.depth,isLast:V.isLast,ancestorsAreLast:V.ancestorsAreLast,relationshipType:Y.get(V.item.id)}))}function qy1(J,Q,Z){return new _1({text:new l(`${J}${Q}`,new r({color:Z})),maxLines:1})}function cF8(J,Q,Z,Y){return[qy1("+",J,Y.success),Q5.horizontal(1),qy1("~",Q,Y.warning),Q5.horizontal(1),qy1("-",Z,Y.destructive)]}class n91 extends I6{props;debugLabel="ThreadContinuationPicker";constructor(J){super();this.props=J}build(J){let Q=this.props.filterByWorkspace&&this.props.currentWorkspaceURI?this.props.threads.filter((z)=>z.workspaceURI===this.props.currentWorkspaceURI):this.props.threads;if(this.props.excludeCurrentThread&&this.props.currentThreadID)Q=Q.filter((z)=>z.id!==this.props.currentThreadID);let Z=this.props.recentThreadIDs||[],Y=new Set(Z),X=this.props.currentThreadID,G=[...Q].sort((z,U)=>{if(X){if(z.id===X)return-1;if(U.id===X)return 1}let D=Z.indexOf(z.id),M=Z.indexOf(U.id);if(D!==-1&&M!==-1)return D-M;if(D!==-1)return-1;if(M!==-1)return 1;return 0}),V=dF8(G),K=Math.max(0,...V.map((z)=>z.description.timeAgo.length)),q=X6.of(J),W=new W6({padding:z0.symmetric(0,1),child:new j4({child:new _1({text:new l("",new r({color:q.colors.foreground,dim:!0}),[new l("Ctrl+T",new r({color:H1.blue,dim:!0})),new l(this.props.filterByWorkspace?" for all workspaces":" to filter by workspace",new r({color:q.colors.foreground,dim:!0}))])})})});return new f2({items:V,getLabel:(z)=>z.title,onAccept:(z)=>this.props.onSelect?.(z.id),onDismiss:this.props.onDismiss,onSelectionChange:(z)=>{if(this.props.previewController){if(z)this.props.previewController.select(z.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:(z,U,D,M)=>{let L=X6.of(M),{colors:A}=L,E=U?H1.yellow:void 0,I=U?H1.black:A.foreground,P=H1.index(8),T=(t,c)=>new Q0({width:c,child:B6.end([new _1({text:new l(t,new r({color:P}))})])}),k=this.props.threadViewStates[z.id],y=[],v=z.relationshipType==="handoff",g=new a81;if(z.depth>0){let t=[],c=z.ancestorsAreLast.slice(1);for(let D1 of c)t.push(new l(g.getAncestorPrefix(D1),new r({color:g.connectorColor,dim:g.connectorDim})));let J1=z.isLast?g.elbow:g.tee,q1=g.getConnectorText(J1);t.push(new l(q1,new r({color:g.connectorColor,dim:g.connectorDim}))),y.push(new _1({text:new l("",void 0,t)}))}let p=[],b=X===z.id?new l("(current) ",new r({color:H1.green})):Y.has(z.id)?new l("(visited) ",new r({color:A.foreground,dim:!0})):null;if(b)p.push(new _1({text:b}));if(k){if(k.state==="active"&&(k.interactionState==="tool-running"||k.interactionState===!1))p.push(new Ky1),p.push(new Q0({width:1}))}let a=z.title;if(z.relationshipType==="fork"){let t=a.match(/^Forked\((\d+)\): /);if(t)a=a.slice(t[0].length);else while(a.startsWith("Forked: "))a=a.slice(8);p.push(new _1({text:new l("[fork] ",new r({color:H1.blue}))}))}else if(v)p.push(new _1({text:new l("[handoff] ",new r({color:H1.index(208)}))}));if(z.agentMode==="plan"&&z.hasPlan)p.push(new _1({text:new l("[plan] ",new r({color:H1.magenta}))}));if(p.push(new c6({child:new _1({text:new l(a,new r({color:I})),overflow:"ellipsis",maxLines:1})})),p.push(new Q0({width:2})),z.diffStats&&(z.diffStats.added>0||z.diffStats.changed>0||z.diffStats.deleted>0)){let t=U?{success:P,warning:P,destructive:P}:A;p.push(...cF8(z.diffStats.added,z.diffStats.changed,z.diffStats.deleted,t)),p.push(new Q0({width:2}))}return p.push(T(z.description.timeAgo,K)),new b0({decoration:E?{color:E}:void 0,padding:z0.symmetric(2,0),child:new B6({children:[...y,...p]})})}})}}function xJ6(J){let Z=new Date().getTime()-J.getTime(),Y=Math.floor(Z/60000),X=Math.floor(Z/3600000),G=Math.floor(Z/86400000);if(Y<1)return"just now";if(Y<60)return`${Y}m ago`;if(X<24)return`${X}h ago`;if(G<7)return`${G}d ago`;return J.toLocaleDateString()}class Wy1 extends I6{props;debugLabel="ThreadFeedPicker";constructor(J){super();this.props=J}build(J){let Q=[...this.props.entries].sort((X,G)=>G.pubDate.getTime()-X.pubDate.getTime()),Z=Math.max(0,...Q.map((X)=>xJ6(X.pubDate).length));return new f2({items:Q,getLabel:(X)=>X.title,onAccept:(X)=>this.props.onSelect?.(X),onDismiss:this.props.onDismiss,title:this.props.title,emptyStateText:"No thread feed entries available",maxRenderItems:100,renderItem:(X,G,V,K)=>{let q=X6.of(K),{colors:W}=q,H=G?H1.yellow:void 0,z=G?H1.black:W.foreground,U=H1.index(8),D=X.authors.map((L)=>L.name).join(", ")||"Community",M=(L,A)=>new Q0({width:A,child:B6.end([new _1({text:new l(L,new r({color:U}))})])});return new b0({decoration:H?{color:H}:void 0,padding:z0.symmetric(2,0),child:new B6({children:[new c6({child:new _1({text:new l(X.title,new r({color:z})),overflow:"ellipsis",maxLines:1})}),new Q0({width:2}),new _1({text:new l(D,new r({color:U})),maxLines:1}),new Q0({width:2}),M(xJ6(X.pubDate),Z)]})})}})}}class Hy1 extends I6{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:
|
|
4920
|
+
... (output truncated at ${Fz} characters)`;X({success:L,output:I.trim(),error:!L?E.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 ${Z}ms`;else if(M.message.includes("operation was aborted")||M.name==="AbortError")L="The command was aborted";X({success:!1,output:z.join(""),error:L})})})}function vF8(J,Q){let{filePath:Z,interpreter:Y,extension:X}=J;if(process.platform==="win32")return hF8(Z,Y?[...Y]:null,X,Q);else return fF8(Z,Y?[...Y]:null,X,Q)}function fF8(J,Q,Z,Y){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Y]];else return[J,Y]}function hF8(J,Q,Z,Y){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Y]];switch(Z.toLowerCase()){case".bat":case".cmd":return["cmd.exe",["/c",J,...Y]];case".ps1":return["powershell.exe",["-ExecutionPolicy","Bypass","-File",J,...Y]];case".exe":return[J,Y];default:return[J,Y]}}B0();LY();R7();yb();LK();SZ();dG();eW();dK();N8();xb();H7();h_();d0();var sJ6=q6(vP(),1);import{writeFile as oJ6}from"fs/promises";import uq from"path";B0();SZ();class Gy1{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,Z])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1765656079-g53c6e1"},parameters:{metadata:{count:Z}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await ao(Q,this.configService)}catch(Q){x.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 BO extends p0{props;constructor(J){super();this.props=J}createState(){return new IJ6}}class IJ6 extends g0{_state;initState(){super.initState(),this._state=this.widget.props.initialState}build(J){let Q=(Z)=>{this.setState(()=>{this._state=Z(this._state)})};return this.widget.props.builder(J,Q,this._state)}}class PJ6 extends g0{controller=new nZ;focusNode=new G8({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=X6.of(J),{colors:Z,app:Y}=Q,X=this.widget.props.isRequiredArg??!0,G=this.controller.text.trim().length>0,V=!X||G,K=U4.all(new V4(Z.foreground,1,"solid")),q=new qz({controller:this.controller,focusNode:this.focusNode,placeholder:this.widget.props.placeholder??"Enter command argument...",onSubmitted:(D)=>{let M=D.trim();if(X&&M.length===0)return;this.widget.props.onSubmit(M)},autofocus:!0,style:{textColor:Z.foreground,border:null},maxLines:1}),W=new B6({children:[new b0({decoration:{color:H1.default()},child:new _1({text:new l(">",new r({color:Z.foreground}))})}),new c6({child:q})]}),H=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new r({color:Z.foreground})),new l(this.widget.props.commandName,new r({color:H1.yellow,bold:!0}))])})}),z=[];if(V)z.push(new l("Enter",new r({color:Y.keybind}))),z.push(new l(" to submit, ",new r({color:Z.foreground,dim:!0})));z.push(new l("Esc",new r({color:Y.keybind}))),z.push(new l(" to cancel",new r({color:Z.foreground,dim:!0})));let U=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,z)})});return new b0({decoration:{border:K,color:H1.default()},padding:z0.all(1),child:new x0({children:[H,new Q0({height:1}),W,new Q5,U]})})}}class ig extends p0{props;constructor(J){super();this.props=J}createState(){return new PJ6}}eW();class RJ6 extends g0{controller=new nZ;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new G8({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>=QU)return!1;let Q=LC(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=X6.of(J),{colors:Z,app:Y}=Q,G=_4.of(J).size.height,V=Math.max(Math.floor(G*0.5),10),K=new UO({controller:this.controller,triggers:[new XN],completionBuilder:this.widget.props.completionBuilder,ampURL:this.widget.props.ampURL,onSubmitted:(D)=>{this.widget.props.onSubmit(D.trim(),this.imageAttachments)},theme:Z,placeholder:this.widget.props.placeholder||"Enter your message...",enabled:this.widget.props.enabled??!0,autofocus:!0,clipboard:b8.instance.tuiInstance.clipboard,showMenuBelow:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),q=new F8({focusNode:this.focusNode,child:K}),W=new b0({constraints:new A6({maxHeight:V}),padding:z0.symmetric(1,0),child:q}),H=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new r({color:Z.foreground})),new l(this.widget.props.commandName,new r({color:H1.yellow,bold:!0}))])})}),z=new b0({padding:z0.symmetric(1,0),child:new _1({text:this.isConfirmingClearInput?new l("",void 0,[new l("Esc",new r({color:Y.keybind})),new l(" again to clear input",new r({color:Z.foreground,dim:!0}))]):new l("",void 0,[new l("Press ",new r({color:Z.foreground,dim:!0})),new l("Enter",new r({color:Y.keybind})),new l(" to submit, ",new r({color:Z.foreground,dim:!0})),new l("Esc",new r({color:Y.keybind})),new l(" to clear",new r({color:Z.foreground,dim:!0}))])})}),U=[H,new Q0({height:1}),new c6({child:W}),new Q0({height:1}),z];return new b0({decoration:{border:U4.all(new V4(Z.foreground,1,"solid")),color:H1.default()},padding:z0.all(1),child:new x0({children:U})})}}class fC extends p0{props;constructor(J){super();this.props=J}createState(){return new RJ6}}import{isDeepStrictEqual as uF8}from"node:util";var bF8=/[\\/_ +.#"@[({&]/,mF8=/[\\/_ +.#"@[({&]/g,gF8=/[\s-]/,TJ6=/[\s-]/g;function c91(J,Q,Z,Y,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=Y.charAt(G),W=Z.indexOf(q,X),H=0,z,U,D,M;while(W>=0){if(z=c91(J,Q,Z,Y,W+1,G+1,V),z>H){if(W===X)z*=1;else if(gF8.test(J.charAt(W-1))){if(z*=0.9,M=J.slice(X,W-1).match(TJ6),M&&X>0)z*=Math.pow(0.999,M.length)}else if(bF8.test(J.charAt(W-1))){if(z*=0.8,D=J.slice(X,W-1).match(mF8),D&&X>0)z*=Math.pow(0.999,D.length)}else if(z*=0.3,X>0)z*=Math.pow(0.999,W-X);if(J.charAt(W)!==Q.charAt(G))z*=0.9999}if(z<0.1&&(Z.charAt(W-1)===Y.charAt(G+1)||Y.charAt(G+1)===Y.charAt(G)&&Z.charAt(W-1)!==Y.charAt(G))){if(U=c91(J,Q,Z,Y,W+1,G+2,V),U*0.1>z)z=U*0.1}if(z>H)H=z;W=Z.indexOf(q,W+1)}return V[K]=H,H}function d91(J){return J.toLowerCase().replace(TJ6," ")}function CJ6(J,Q){let Z=c91(J,Q,d91(J),d91(Q),0,0,{}),Y=Q.trim().split(/\s+/);if(Y.length>1){let X=0,G=0;for(let K of Y){let q=c91(J,K,d91(J),d91(K),0,0,{});if(q===0)return Z;X+=q,G+=K.length}let V=X/Y.length*0.95;return Math.max(Z,V)}return Z}class hC{}class bC{}class l91{}class i91{}class jJ6 extends p0{child;onContext;constructor(J,Q){super();this.child=J;this.onContext=Q}createState(){return new SJ6}}class SJ6 extends g0{build(J){return this.widget.onContext(J),this.widget.child}}function pF8(J,Q){if(J==="")return{matches:!0,score:1};let Z=CJ6(Q,J);return{matches:Z>0.15,score:Z}}class f2 extends p0{props;debugLabel="FuzzyPicker";constructor(J){super();this.props=J}createState(){return new _J6}}class _J6 extends g0{controller=new nZ;focusNode;scrollController=new l5;selectedIndex=0;itemContexts=[];cachedQuery="";cachedItemsRef=null;cachedFiltered=[];initState(){this.scrollController.disableFollowMode(),this.focusNode=new G8({debugLabel:this.widget.debugLabel}),this.controller.addListener(()=>{this.selectedIndex=0,this.recomputeFilteredItems(),this.setState(),_8.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(!uF8(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 hC){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length-1)this.selectedIndex++,this.setState(),_8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof bC){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex>0)this.selectedIndex--,this.setState(),_8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof l91){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length){let Z=Q[this.selectedIndex];if(Z){if(!(this.widget.props.isItemDisabled?.(Z)??!1))this.widget.props.onAccept(Z)}}return"handled"}if(J instanceof i91)return this.widget.props.onDismiss?.(),"handled";return"ignored"};recomputeFilteredItems(){let J=this.controller.text,Q=this.widget.props.items,Z=Q.filter((Y)=>!this.widget.props.filterItem||this.widget.props.filterItem(Y,J)).map((Y)=>({item:Y,...pF8(J,this.widget.props.getLabel(Y))})).filter((Y)=>Y.matches).sort(this.widget.props.sortItems?(Y,X)=>this.widget.props.sortItems(Y,X,J):(Y,X)=>X.score-Y.score).map((Y)=>Y.item);this.cachedQuery=J,this.cachedItemsRef=Q,this.cachedFiltered=this.widget.props.maxRenderItems?Z.slice(0,this.widget.props.maxRenderItems):Z}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 Z=0,Y=Q.size.height;u81(J,{top:Z,bottom:Y},{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(),_8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null)};handleItemClick=(J,Q)=>{let Z=this.getFilteredItems();if(J>=0&&J<Z.length){let Y=Z[J],X=Y?this.widget.props.isItemDisabled?.(Y)??!1:!1;if(Q===1)this.selectedIndex=J,this.setState(),this.widget.props.onSelectionChange?.(Z[this.selectedIndex]??null);else if(Q===2&&!X){if(Y)this.widget.props.onAccept(Y)}}};build(J){let Q=X6.of(J),{colors:Z}=Q,Y=this.getFilteredItems(),X=U4.all(new V4(Z.foreground,1,"solid")),G=this.widget.props.enabled??!0,V=new qz({controller:this.controller,focusNode:this.focusNode,autofocus:!0,enabled:G,style:{textColor:Z.foreground,border:null},maxLines:1}),K=new ZX({shortcuts:new Map([[new X4("ArrowDown"),new hC],[new X4("ArrowUp"),new bC],[new X4("Tab"),new hC],[new X4("Tab",{shift:!0}),new bC],[new X4("n",{ctrl:!0}),new hC],[new X4("p",{ctrl:!0}),new bC],[new X4("Enter"),new l91],[new X4("Escape"),new i91]]),focusNode:this.focusNode,child:V}),q=new BJ({actions:new Map([[hC,new I8(this.invoke)],[bC,new I8(this.invoke)],[l91,new I8(this.invoke)],[i91,new I8(this.invoke)]]),child:K}),W=new B6({children:[new b0({decoration:{color:H1.default()},child:new _1({text:new l(">",new r({color:Z.foreground}))})}),new c6({child:q})]});this.itemContexts=[];let H;if(this.widget.props.isLoading){let L=this.widget.props.loadingText??"Loading...";H=new Q0({height:10,child:new j4({child:new _1({text:new l(L,new r({color:Z.foreground}))})})})}else if(Y.length===0&&this.widget.props.emptyStateText)H=new c6({child:new j4({child:new _1({text:new l(this.widget.props.emptyStateText,new r({color:Z.foreground,dim:!0}))})})});else{let L=Y.map((A,E)=>{let I=E===this.selectedIndex,P=this.widget.props.isItemDisabled?.(A)??!1,T;if(this.widget.props.renderItem)T=this.widget.props.renderItem(A,I,P,J);else{let k=I?H1.yellow:void 0,y=I?H1.black:Z.foreground;T=new b0({decoration:k?{color:k}:void 0,padding:z0.symmetric(2,0),child:new _1({text:new l(this.widget.props.getLabel(A),new r({color:y,dim:P}))})})}return new jJ6(new V8({onClick:(k)=>this.handleItemClick(E,k.clickCount),child:T}),(k)=>{this.itemContexts[E]=k})});H=new x0({children:L,crossAxisAlignment:"start"})}let z=new c6({child:new V8({onScroll:this.handleScroll,opaque:!1,child:new W5({controller:this.scrollController,autofocus:!1,child:H})})}),U=[];if(this.widget.props.title){let L=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l(this.widget.props.title,new r({color:H1.yellow,bold:!0}))})});U.push(L)}if(U.push(W,new Q0({height:1}),z),this.controller.text!==""){let L=Y.length>0?Y[this.selectedIndex]:void 0,A=L&&this.widget.props.buildDisabledReasonWidget?.(L);if(A)U.push(new b0({padding:z0.vertical(1),child:new j4({child:A})}));else U.push(new Q0({height:3}))}if(this.widget.props.footer)U.push(this.widget.props.footer);return new b0({decoration:{border:X,color:H1.default()},padding:z0.symmetric(1,0),child:new x0({children:U})})}}function kJ6(J){let Z=new Date().getTime()-J.getTime(),Y=Math.floor(Z/60000),X=Math.floor(Z/3600000),G=Math.floor(Z/86400000);if(Y<1)return"just now";if(Y<60)return`${Y}m ago`;if(X<24)return`${X}h ago`;if(G<7)return`${G}d ago`;return J.toLocaleDateString()}class Vy1 extends I6{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()),Z=Math.max(0,...Q.map((X)=>kJ6(X.pubDate).length));return new f2({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=X6.of(K),{colors:W}=q,H=G?H1.yellow:void 0,z=G?H1.black:W.foreground,U=H1.index(8),D=(M,L)=>new Q0({width:L,child:B6.end([new _1({text:new l(M,new r({color:U}))})])});return new b0({decoration:H?{color:H}:void 0,padding:z0.symmetric(2,0),child:new B6({children:[new c6({child:new _1({text:new l(X.title,new r({color:z})),overflow:"ellipsis",maxLines:1})}),new Q0({width:2}),D(kJ6(X.pubDate),Z)]})})}})}}class Ky1 extends p0{createState(){return new yJ6}}class yJ6 extends g0{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 r({color:this.isGreen?H1.green:H1.index(8),bold:!0})),maxLines:1})}}function dF8(J){let Q=new Map,Z=new Map,Y=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){Y.set(V.id,K.type);let q=K.threadID,W=Z.get(q)||[];W.push(V),Z.set(q,W)}else X.push(V)}return YX.flatten(X,(V)=>Z.get(V.id)).map((V)=>({...V.item,depth:V.depth,isLast:V.isLast,ancestorsAreLast:V.ancestorsAreLast,relationshipType:Y.get(V.item.id)}))}function qy1(J,Q,Z){return new _1({text:new l(`${J}${Q}`,new r({color:Z})),maxLines:1})}function cF8(J,Q,Z,Y){return[qy1("+",J,Y.success),Q5.horizontal(1),qy1("~",Q,Y.warning),Q5.horizontal(1),qy1("-",Z,Y.destructive)]}class n91 extends I6{props;debugLabel="ThreadContinuationPicker";constructor(J){super();this.props=J}build(J){let Q=this.props.filterByWorkspace&&this.props.currentWorkspaceURI?this.props.threads.filter((z)=>z.workspaceURI===this.props.currentWorkspaceURI):this.props.threads;if(this.props.excludeCurrentThread&&this.props.currentThreadID)Q=Q.filter((z)=>z.id!==this.props.currentThreadID);let Z=this.props.recentThreadIDs||[],Y=new Set(Z),X=this.props.currentThreadID,G=[...Q].sort((z,U)=>{if(X){if(z.id===X)return-1;if(U.id===X)return 1}let D=Z.indexOf(z.id),M=Z.indexOf(U.id);if(D!==-1&&M!==-1)return D-M;if(D!==-1)return-1;if(M!==-1)return 1;return 0}),V=dF8(G),K=Math.max(0,...V.map((z)=>z.description.timeAgo.length)),q=X6.of(J),W=new W6({padding:z0.symmetric(0,1),child:new j4({child:new _1({text:new l("",new r({color:q.colors.foreground,dim:!0}),[new l("Ctrl+T",new r({color:H1.blue,dim:!0})),new l(this.props.filterByWorkspace?" for all workspaces":" to filter by workspace",new r({color:q.colors.foreground,dim:!0}))])})})});return new f2({items:V,getLabel:(z)=>z.title,onAccept:(z)=>this.props.onSelect?.(z.id),onDismiss:this.props.onDismiss,onSelectionChange:(z)=>{if(this.props.previewController){if(z)this.props.previewController.select(z.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:(z,U,D,M)=>{let L=X6.of(M),{colors:A}=L,E=U?H1.yellow:void 0,I=U?H1.black:A.foreground,P=H1.index(8),T=(t,c)=>new Q0({width:c,child:B6.end([new _1({text:new l(t,new r({color:P}))})])}),k=this.props.threadViewStates[z.id],y=[],v=z.relationshipType==="handoff",g=new a81;if(z.depth>0){let t=[],c=z.ancestorsAreLast.slice(1);for(let D1 of c)t.push(new l(g.getAncestorPrefix(D1),new r({color:g.connectorColor,dim:g.connectorDim})));let J1=z.isLast?g.elbow:g.tee,q1=g.getConnectorText(J1);t.push(new l(q1,new r({color:g.connectorColor,dim:g.connectorDim}))),y.push(new _1({text:new l("",void 0,t)}))}let p=[],b=X===z.id?new l("(current) ",new r({color:H1.green})):Y.has(z.id)?new l("(visited) ",new r({color:A.foreground,dim:!0})):null;if(b)p.push(new _1({text:b}));if(k){if(k.state==="active"&&(k.interactionState==="tool-running"||k.interactionState===!1))p.push(new Ky1),p.push(new Q0({width:1}))}let a=z.title;if(z.relationshipType==="fork"){let t=a.match(/^Forked\((\d+)\): /);if(t)a=a.slice(t[0].length);else while(a.startsWith("Forked: "))a=a.slice(8);p.push(new _1({text:new l("[fork] ",new r({color:H1.blue}))}))}else if(v)p.push(new _1({text:new l("[handoff] ",new r({color:H1.index(208)}))}));if(z.agentMode==="plan"&&z.hasPlan)p.push(new _1({text:new l("[plan] ",new r({color:H1.magenta}))}));if(p.push(new c6({child:new _1({text:new l(a,new r({color:I})),overflow:"ellipsis",maxLines:1})})),p.push(new Q0({width:2})),z.diffStats&&(z.diffStats.added>0||z.diffStats.changed>0||z.diffStats.deleted>0)){let t=U?{success:P,warning:P,destructive:P}:A;p.push(...cF8(z.diffStats.added,z.diffStats.changed,z.diffStats.deleted,t)),p.push(new Q0({width:2}))}return p.push(T(z.description.timeAgo,K)),new b0({decoration:E?{color:E}:void 0,padding:z0.symmetric(2,0),child:new B6({children:[...y,...p]})})}})}}function xJ6(J){let Z=new Date().getTime()-J.getTime(),Y=Math.floor(Z/60000),X=Math.floor(Z/3600000),G=Math.floor(Z/86400000);if(Y<1)return"just now";if(Y<60)return`${Y}m ago`;if(X<24)return`${X}h ago`;if(G<7)return`${G}d ago`;return J.toLocaleDateString()}class Wy1 extends I6{props;debugLabel="ThreadFeedPicker";constructor(J){super();this.props=J}build(J){let Q=[...this.props.entries].sort((X,G)=>G.pubDate.getTime()-X.pubDate.getTime()),Z=Math.max(0,...Q.map((X)=>xJ6(X.pubDate).length));return new f2({items:Q,getLabel:(X)=>X.title,onAccept:(X)=>this.props.onSelect?.(X),onDismiss:this.props.onDismiss,title:this.props.title,emptyStateText:"No thread feed entries available",maxRenderItems:100,renderItem:(X,G,V,K)=>{let q=X6.of(K),{colors:W}=q,H=G?H1.yellow:void 0,z=G?H1.black:W.foreground,U=H1.index(8),D=X.authors.map((L)=>L.name).join(", ")||"Community",M=(L,A)=>new Q0({width:A,child:B6.end([new _1({text:new l(L,new r({color:U}))})])});return new b0({decoration:H?{color:H}:void 0,padding:z0.symmetric(2,0),child:new B6({children:[new c6({child:new _1({text:new l(X.title,new r({color:z})),overflow:"ellipsis",maxLines:1})}),new Q0({width:2}),new _1({text:new l(D,new r({color:U})),maxLines:1}),new Q0({width:2}),M(xJ6(X.pubDate),Z)]})})}})}}class Hy1 extends I6{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:
|
|
4921
4921
|
|
|
4922
4922
|
`,new r({color:H1.white,dim:!0})),new l(`"${this.props.newThreadTitle||"Untitled"}"`,new r({color:H1.white}))]),textAlign:"center"})})}}B0();class vJ6 extends g0{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){x.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){x.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 Z=this.widget.props.currentLabels||[],Y=this.labels.some((G)=>G.name===Q),X=Z.includes(Q);return!Y&&!X}build(J){let Q=X6.of(J),{colors:Z}=Q,Y=this.currentQuery.trim().toLowerCase(),X=Y.length>0?this.getValidationError(Y):null,G=this.getAvailableLabels(),K=[{id:"__create__",name:"__create_placeholder__",createdAt:"",__isCreateMarker:!0},...G];return new f2({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,z)=>{let U=W?H1.yellow:void 0,D=W?H1.black:Z.foreground;if("__isCreateMarker"in q&&q.__isCreateMarker){let L=this.currentQuery.trim().toLowerCase();return new b0({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 r({color:D})),new l(L,new r({color:D,bold:!0}))])})})}return new b0({decoration:U?{color:U}:void 0,padding:z0.symmetric(2,0),child:new _1({text:new l(q.name,new r({color:D}))})})},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 z=W.trim().toLowerCase();return z.length===0||q.name.includes(z)},sortItems:(q,W,H)=>{let z="__isCreateMarker"in q.item&&q.item.__isCreateMarker,U="__isCreateMarker"in W.item&&W.item.__isCreateMarker;if(z&&!U)return-1;if(!z&&U)return 1;return W.score-q.score}})}}class zy1 extends p0{props;constructor(J){super();this.props=J}createState(){return new vJ6}}class PV extends p0{props;constructor(J){super();this.props=J}createState(){return new fJ6}}class fJ6 extends g0{_spinner=new $X;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=X6.of(J),{colors:Z}=Q,Y=U4.all(new V4(Z.foreground,1,"solid")),X=this._spinner.toBraille(),G=new _1({textAlign:"center",text:new l("",void 0,[new l(X,new r({color:H1.yellow})),new l(" ",void 0),new l(this.widget.props.message,new r({color:Z.foreground}))])}),K=[new c6({child:new x0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[G]})})];if(this.widget.props.onAbort)K.push(new Q0({height:2,child:new b0({padding:z0.symmetric(2,0),child:new _1({text:new l("",new r({dim:!0}),[new l("Press ",new r({color:Z.foreground})),new l("Esc",new r({color:Z.info})),new l(" to cancel",new r({color:Z.foreground}))])})})}));let q=new b0({decoration:new M8(H1.default(),Y),child:new Q0({width:60,height:7,child:new x0({mainAxisAlignment:"start",children:K})})});if(this.widget.props.onAbort)return new F8({debugLabel:"LoadingDialog",autofocus:!0,onKey:(W)=>{if(W.key==="Escape")return this.widget.props.onAbort?.(),"handled";return"ignored"},child:q});return q}}class RV extends p0{props;constructor(J){super();this.props=J}createState(){return new hJ6}}class hJ6 extends g0{dispose(){super.dispose()}isWidgetMessage(J){return J instanceof EV}build(J){let Q=this.widget.props.message,Z=(()=>{if(this.isWidgetMessage(Q))return{title:Q.title,type:Q.type};if(Q instanceof Error&&Q.name==="CommandCancelledError")return{title:"Cancelled",type:"info",description:Q.message};if(Q instanceof Error&&Q.name==="CommandTimeoutError")return{title:"Timeout",type:"error",description:Q.message};let W=c81(Q);return{title:W.title,type:W.type,description:W.description}})(),Y=Z.type==="error"?H1.red:H1.yellow,X=U4.all(new V4(H1.default(),1,"solid")),G=new b0({padding:z0.symmetric(1,0),child:new _1({text:new l(Z.title,new r({color:Y,bold:!0}))})}),V=this.isWidgetMessage(Q)?Q.widget:new _1({text:new l(Z.description,new r({color:H1.default()})),selectable:!0}),K=new c6({child:new Vz({child:new b0({padding:z0.symmetric(1,0),child:V})})}),q=new b0({padding:z0.symmetric(1,0),child:new _1({text:this.widget.props.onRetry?new l("",void 0,[new l("Press ",new r({color:H1.default(),dim:!0})),new l("R",new r({color:H1.yellow})),new l(" to retry, ",new r({color:H1.default(),dim:!0})),new l("Esc",new r({color:H1.yellow})),new l(" to cancel",new r({color:H1.default(),dim:!0}))]):new l("Press any key to close",new r({color:H1.default(),dim:!0,italic:!0}))})});return new F8({onKey:(W)=>{if(this.widget.props.onRetry&&W.key==="r")return this.widget.props.onRetry(),"handled";if(W.key==="Escape")return this.widget.props.onDismiss(),"handled";if(!this.widget.props.onRetry)return this.widget.props.onDismiss(),"handled";return"ignored"},autofocus:!0,child:new b0({decoration:{border:X,color:H1.default()},padding:z0.all(1),child:new x0({mainAxisAlignment:"center",children:[G,new Q0({height:1}),K,q]})})})}}class Fy1 extends I6{build(){return new j4({child:new _1({text:new l("",void 0,[new l(`✓ Thread Shared
|
|
4923
4923
|
|
|
@@ -5010,7 +5010,7 @@ https://www.jetbrains.com/help/idea/managing-plugins.html#install_plugin_from_di
|
|
|
5010
5010
|
`)?`${K}...`:X,W=new r({color:H1.index(8)}),H=[new l(q,W)];if(V>0){let z=new r({color:Z.success});for(let U=1;U<=V;U++)H.push(new l(" ")),H.push(new l(`[${U}]`,z))}return new W6({padding:z0.only({bottom:0}),child:new B6({crossAxisAlignment:"start",children:[new W6({padding:z0.only({right:1}),child:new _1({text:new l("•",new r({color:H1.index(8)}))})}),new c6({child:new _1({text:new l("",void 0,H)})})]})})}}class ey1 extends p0{createState(){return new lQ6}}class lQ6 extends g0{_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 r({color:H1.red}),Z=new r({color:this._visible?H1.red:H1.transparent()});return new B6({children:[new _1({text:new l("⏺",Z)}),new Q0({width:1}),new _1({text:new l("Replay",Q)})]})}}class Jx1 extends I6{entry;width;constructor({key:J,entry:Q,width:Z}){super({key:J});this.entry=Q,this.width=Z}build(J){let Z=X6.of(J).colors.mutedForeground,Y=this.entry,X=Y.authors[0]?.name||"Community";if(X.includes("@"))X=X.split("@")[0]??X;let G=" · ",V=50,K=this.truncateToWidth(Y.title,V),q=`${G}${K}`,W=Math.max(1,this.width-q.length-2),H=Y.description.replace(/\s+/g," ").trim(),z=`@${X}: ${H}`,U=this.truncateToWidth(z,W),D=new _1({text:new l(U,new r({color:Z,dim:!0}))}),M=new _1({text:new l(q,new r({color:Z,dim:!0}))});return new V8({onClick:()=>v2(J,Y.link),cursor:"pointer",child:new Q0({width:this.width,height:1,child:new W6({padding:z0.horizontal(1),child:new B6({children:[new c6({child:new aB(new Q0({width:W,height:1,child:D}))}),M]})})})})}truncateToWidth(J,Q){if(J.length<=Q)return J;return J.slice(0,Q-1)+"…"}}d0();function KB8(J){let Z=new Date().getTime()-J.getTime(),Y=Math.floor(Z/3600000),X=Math.floor(Y/24),G=Math.floor(X/7),V=Math.floor(X/30);if(Y<1)return"Just now";if(Y<24)return`${Y}h ago`;if(X<7)return`${X}d ago`;if(G<=4)return`${G}w ago`;return`${V}mo ago`}class Qx1{threadHistoryService;constructor(J){this.threadHistoryService=J}async fetchThreadSummaries(J=""){try{let Q=await new Promise((Z)=>{let Y=this.threadHistoryService.observeThreadList().subscribe((X)=>{Y.unsubscribe(),Z(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(Q6((Q)=>this.formatThreadSummaries(Q,J)))}formatThreadSummaries(J,Q){return J.filter((Y)=>{if(!Q.trim())return!0;let X=Y.title?.toLowerCase()||"untitled",G=Y.id.toLowerCase(),V=Q.toLowerCase();return X.includes(V)||G.includes(V)}).map((Y)=>{let X=new Date(Y.userLastInteractedAt),G=KB8(X),V=Y.id.slice(-8),K=Y.env?.initial.trees?.[0]?.uri;return{id:Y.id,title:Y.title||"Untitled",updatedAt:new Date(Y.userLastInteractedAt).toISOString(),description:{timeAgo:G,title:Y.title||"Untitled",shortThreadID:V},diffStats:Y.summaryStats?.diffStats,workspaceURI:K,parentRelationships:Y.parentRelationships,hasPlan:Y.hasPlan,agentMode:Y.agentMode}})}}B0();N8();class Zx1{currentId=null;current=null;subscribeTimer=null;subscription=null;listeners=[];threadService=null;scrollController=new l5;constructor(){}setThreadService(J){this.threadService=J}async select(J){if(!this.threadService){x.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)}dispose(){this.cancelTimerAndSubscription(),this.scrollController.dispose(),this.listeners=[]}subscribeLive(J){if(!this.threadService){x.error("TUI assert failed: ThreadService used before being set");return}if(this.currentId!==J)return;this.subscription=this.threadService.observePatches(J).pipe(qM()).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 iQ6(J,Q){switch(J){case"update-available":return[new l("A newer Amp is available. Run ",new r({color:Q.foreground,dim:!0})),new l("amp update",new r({color:Q.warning}))];case"updated":return null;case"updated-with-warning":return[new l("Update complete, run ",new r({color:Q.foreground,dim:!0})),new l("amp update",new r({color:Q.warning})),new l(" to see warnings",new r({color:Q.foreground,dim:!0}))];case"update-error":return[new l("Update failed, run ",new r({color:Q.foreground,dim:!0})),new l("amp update",new r({color:Q.warning})),new l(" to see warnings",new r({color:Q.foreground,dim:!0}))];case"hidden":return null}}async function FB8(J){return new Promise((Q)=>{WB8("git",["branch","--show-current"],{cwd:J},(Z,Y)=>{if(Z){Q(null);return}let X=Y.trim();Q(X||null)})})}class JZ6 extends p0{dependencies;constructor(J){super();this.dependencies=J}createState(){return new L51}}class L51 extends g0{themeColors=null;themeApp=null;selectionListener=null;ideStatus=null;connectedClientsStatus=null;connectedClientsStatusExpanded=!1;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=[];dismissedEphemeralErrorKey=null;currentTitle=void 0;currentShellModeStatus=void 0;imageAttachments=[];displayMessage=null;executingCommand=null;isShowingJetBrainsInstaller=!1;isShowingIdePicker=!1;isShowingPalette=!1;paletteShowOptions=null;threadsForPicker=[];clustersForPicker=[];isLoadingThreads=!1;threadPreviewController=new Zx1;previewThread=null;planScrollController=(()=>{let J=new l5;return J.followMode=!1,J})();todoScrollController=(()=>{let J=new l5;return J.followMode=!1,J})();filterThreadPickerByWorkspace=!0;currentGitBranch=null;messageViewFocusNode=new G8({debugLabel:"MessageViewFocus"});autocompleteFocusNode=new G8({debugLabel:"AutocompleteFocus"});isTextfieldAndAutocompleteFocused=!1;submitDisabledHint=null;submitDisabledHintTimer=null;showImageUnsupportedHint=!1;imageUnsupportedHintTimer=null;adActionModal=null;threadFeedReader=null;currentThreadFeedEntry=null;threadFeedEntries=[];threadFeedSubscription=null;threadFeedRotationTimer=null;threadFeedHidden=!1;threadFeedTickerQueue=[];hasSubmittedFirstMessage=!1;currentUserInfo=null;newsFeedReader=null;newsFeedEntries=[];newsFeedSubscription=null;bottomGridUserHeight=void 0;bottomGridDragStartY=null;bottomGridDragStartHeight=null;previousThreadIdForHint=null;pendingMCPServers=[];mcpTrustSubscription=null;pendingOAuthRequest=null;mcpServers=[];mcpServersSubscription=null;cacheTimerState=null;cacheTimerSubscription=null;agentModeController=null;freeTierStatus={canUseAmpFree:!1};agentModePulseSeq=0;agentModeSlideProgress=null;agentModeSlideTimer=null;updateState="hidden";updateServiceSubscription=null;toastController=new uS1;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 initThreadFeed(){let J=await K6(this.widget.dependencies.configService.config);if(J.settings["feed.enabled"]===!1)this.threadFeedHidden=!0;let Q=J.settings.url,Z=Q.includes("localhost")||Q.includes("127.0.0.1");try{let V=await this.widget.dependencies.internalAPIClient.getUserInfo({},{config:this.widget.dependencies.configService});if(V.ok){let K=V.result,q="user"in K?K.user:K;this.currentUserInfo={username:q.username??void 0,displayName:q.displayName??void 0};let W="ffe10a0c-6c42-41ce-a3a6-38990fd6caf8";if(!Z&&K.team?.id!==W)return}else return}catch(V){x.debug("Failed to fetch user info for thread feed filtering",V);return}let Y="/threads.rss",X=async(V,K)=>{let q=V instanceof Request?V.url:V.toString();return m7(q,K,this.widget.dependencies.configService)},G=DP1();G.get("entries").then((V)=>{if(V){let K=this.filterEntries(V);if(this.threadFeedEntries=K,K.length>0&&!this.currentThreadFeedEntry){let q=[...K].sort((H,z)=>z.pubDate.getTime()-H.pubDate.getTime());this.threadFeedTickerQueue=[...q,...this.threadFeedTickerQueue];let W=this.getNextFeedEntry();if(W)this.setState(()=>{this.currentThreadFeedEntry=W})}}}),this.threadFeedReader=new YS1(G,X,{url:Y}),this.threadFeedSubscription=this.threadFeedReader.stream().subscribe({next:(V)=>{try{let K=this.filterEntries(V);if(K.length>0){this.threadFeedEntries=[...K,...this.threadFeedEntries];let q=[...K].sort((W,H)=>H.pubDate.getTime()-W.pubDate.getTime());if(this.threadFeedTickerQueue=[...q,...this.threadFeedTickerQueue],!this.currentThreadFeedEntry){let W=this.getNextFeedEntry();if(W)this.setState(()=>{this.currentThreadFeedEntry=W})}}}catch(K){x.error("Thread feed: error in next handler",K)}},error:(V)=>{x.error("Thread feed error:",V)}}),this.resetThreadFeedRotation()}filterEntries(J){if(!this.currentUserInfo)return J;let{username:Q,displayName:Z}=this.currentUserInfo;return J.filter((Y)=>{return!Y.authors.some((X)=>{let G=X.name;if(!G)return!1;return Q&&G===Q||Z&&G===Z||Q&&G.includes(Q)})})}rotateThreadFeed(){if(this.threadFeedRotationTimer)clearInterval(this.threadFeedRotationTimer);this.threadFeedRotationTimer=setInterval(()=>{let J=this.getNextFeedEntry();if(J)this.setState(()=>{this.currentThreadFeedEntry=J})},30000)}resetThreadFeedRotation(){this.rotateThreadFeed()}getNextFeedEntry(){if(this.threadFeedTickerQueue.length>0)return this.threadFeedTickerQueue.shift();return null}async initNewsFeed(){let J=async(Z)=>{return m7(Z,void 0,this.widget.dependencies.configService)},Q=DP1();this.newsFeedReader=new ZS1(Q,J,"/news.rss"),this.newsFeedSubscription=this.newsFeedReader.stream().subscribe({next:(Z)=>{if(Z.length>0)this.setState(()=>{this.newsFeedEntries=[...Z,...this.newsFeedEntries]})},error:(Z)=>{x.error("News feed error:",Z)}})}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})};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.isMessageViewInSelectionMode=!1,this.previousThreadIdForHint=J}),Q};async startReplay(){let J=this.widget.dependencies.replayMode;if(!J)return;let{thread:Q,typingEnabled:Z,baseWpm:Y}=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"&&Z){let W=V.content.filter((H)=>H.type==="text").map((H)=>H.text).join(`
|
|
5011
5011
|
`);if(W)await this.replayTypeMessage(W,Y)}if(V.role==="assistant"){let W=V.content.some((U)=>U.type==="tool_use"),H=X[G+1],z=H?.role==="user"&&H.content.some((U)=>U.type==="tool_result");if(W&&z){let U={...V,state:{type:"streaming"}};this.setState(()=>{this.replayDisplayedMessages=[...this.replayDisplayedMessages,U],this.textController.clear()});let D=J.thread.id;this.getMessageScrollController(D).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),b8.instance.stop()}async replayTypeMessage(J,Q){this.textController.clear();let Z=J.split(/(?<=\s)/),Y=60000/Q;for(let X of Z){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=Y/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 Z=J.items.filter((G)=>G.type==="toolResult").filter((G)=>G.toolResult.run.status==="in-progress"||G.toolResult.run.status==="queued"),Y=J.subagentActiveTools.filter((G)=>G.toolRun.status==="in-progress"||G.toolRun.status==="queued");return[...Z,...Y].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 r({color:J.foreground,dim:!0}));if(this.isExiting)return new l("Exiting...",new r({color:J.foreground,dim:!0}));if(this.isConfirmingExit)return new l("",void 0,[new l("Ctrl+C",new r({color:Q.keybind})),new l(" again to exit",new r({color:J.foreground,dim:!0}))]);if(this.isConfirmingClearInput)return new l("",void 0,[new l("Esc",new r({color:Q.keybind})),new l(" again to clear input",new r({color:J.foreground,dim:!0}))]);if(this.isShowingHelp)return new l("",void 0,[new l("Escape",new r({color:Q.keybind})),new l(" to close help",new r({color:J.foreground,dim:!0}))]);if(this.showImageUnsupportedHint){let X=this.getEffectiveAgentMode(),G=Kx1(X);return new l("",void 0,[new l("Images aren't supported in ",new r({color:J.warning,dim:!1})),new l(X,new r({color:G})),new l(" mode.",new r({color:J.warning,dim:!1}))])}if(this.isProcessing()||this.bashInvocations.length>0){if(this.isConfirmingCancelProcessing)return new l("",void 0,[new l("Esc",new r({color:Q.keybind})),new l(" again to cancel",new r({color:J.foreground,dim:!0}))]);return new l("",void 0,[new l("Esc",new r({color:Q.keybind})),new l(" to cancel",new r({color:J.foreground,dim:!0}))])}if(this.statusMessage)return new l(this.statusMessage,new r({color:J.foreground,dim:!0}));let Z=iQ6(this.updateState,J);if(Z)return new l("",void 0,Z);let Y=this.widget.dependencies.worker.thread;if(Y.agentMode==="plan"&&GA(Y))return new l("",void 0,[new l("Use command",new r({color:J.foreground})),new l(" plan: execute",new r({color:Q.command}))]);return null}isTranscriptEmpty(){let{threadState:J}=this.widget.dependencies;return J.items.length===0}handleMessageRestoreSubmit=async(J)=>{let{threadState:Q,worker:Z}=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 Z.cancel(),await Z.handle({type:"thread:truncate",fromIndex:X}),this.scrollMessageViewToBottom(),this.setState(()=>{this.imageAttachments=[]})}catch(G){x.error("Failed to edit message:",G)}};forkMessage=async(J)=>{let{threadState:Q,workerDeps:Z,threadSyncService:Y}=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 L3.getOrCreateForThread(Z,X),K=await AT(V,Y,G-1);await this.switchToExistingThread(K)}catch(V){x.error("Failed to fork thread:",V),this.showErrorMessage(`Failed to fork thread: ${V}`)}};handleMessageEditSubmit=async(J,Q)=>{let{threadState:Z,worker:Y}=this.widget.dependencies,X=Z.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 Y.cancel(),this.widget.dependencies.history.add(Q);let V=rB(Q);if(V)await Y.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){x.error(`Cannot edit message: This thread uses ${X.agentMode} mode. To change mode, create a new thread.`);return}await Y.handle({type:"user:message",message:q,index:G})}this.scrollMessageViewToBottom(),this.setState(()=>{this.imageAttachments=[]})}catch(V){x.error("Failed to edit message:",V)}};getAffectedFiles=async(J)=>{let{worker:Q}=this.widget.dependencies;try{return(await Q.getFilesAffectedByTruncation(J)).map(i2)}catch(Z){return x.error("Failed to get affected files:",Z),[]}};textController=new nZ;messageScrollControllers=new Map;getMessageScrollController(J){if(!this.messageScrollControllers.has(J))this.messageScrollControllers.set(J,new l5);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 Y=this.searchElementTreeByKey(J.child,Q);if(Y)return Y}if(J?.children)for(let Y of J.children){let X=this.searchElementTreeByKey(Y,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 Z=process.cwd().replace(process.env.HOME||"","~"),Y=Q?`amp - ${Q} - ${Z}`:"";process.stdout.write(qj1(Y))}}_handleTextCopy(J){if(J&&J.length>0)this.toastController.show("Selection copied to clipboard","success",2000)}textFieldKey=new a7("text-field");ideStatusSubscription=null;ideMessageSubscription=null;ideAppendToPromptSubscription=null;connectedClientsStatusSubscription=null;paletteCommands;paletteConfig;completionBuilder=null;textChangeListener=()=>{let J=this.textController.text;if(J==="/"){this.showCommandPalette(),this.textController.clear();return}let Q=rB(J);this.currentShellModeStatus=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}),_8.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(Z){let Y=Z instanceof Error?Z.message:String(Z);this.setState(()=>{this.displayMessage=Error(`Failed to connect to IDE: ${Y}`)})}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}),_8.instance.addPostFrameCallback(()=>{if(!this.isMessageViewInSelectionMode&&!this.isShowingPalette)this.autocompleteFocusNode.requestFocus()})},onCancel:()=>{this.exitApplication()}})};toggleThreadPickerWorkspaceFilter=()=>{this.setState(()=>{this.filterThreadPickerByWorkspace=!this.filterThreadPickerByWorkspace})};showCommandPalette(J){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 Ey1(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 Ry1(this.widget.dependencies.fuzzyServer);return this.completionBuilder}dismissPalette=()=>{this.setState(()=>{this.isShowingPalette=!1,this.paletteShowOptions=null})};getCommandPaletteContext=(J)=>{let{threadState:Q,recentThreadIDs:Z}=this.widget.dependencies;if(!Q.mainThread)return null;let Y=h0.file(process.cwd()),X=N6(Y);return{recentThreadIDs:Z,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,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,connectedClientsService:this.widget.dependencies.connectedClientsService,mcpService:this.widget.dependencies.mcpService,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);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 z=setTimeout(()=>G.abort(new u91("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},this.widget.dependencies.configService,G.signal);return clearTimeout(z),await this.switchToExistingThread(U),{ok:!0}}catch(U){if(clearTimeout(z),U instanceof Error&&(U.name==="AbortError"||U.message.includes("aborted")))throw G.signal.reason;throw U}}catch(H){return x.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 Ds({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,handleExecutePlan:async()=>{try{let G=Q.mainThread?.id;if(!G){this.setState(()=>{this.displayMessage=Error("No active thread")});return}let V=await this.widget.dependencies.threadService.createPlanExecutionThread(G,"smart");await this.switchToExistingThread(V)}catch(G){x.error("Failed to execute plan",G),this.setState(()=>{this.displayMessage=Error(`Failed to execute plan: ${G instanceof Error?G.message:String(G)}`)})}},planFileManager:this.widget.dependencies.planFileManager,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,currentThreadFeedEntry:this.currentThreadFeedEntry,threadFeedEntries:this.threadFeedEntries,threadFeedHidden:this.threadFeedHidden,newsFeedEntries:this.newsFeedEntries,setThreadFeedHidden:(G)=>{this.setState(()=>{this.threadFeedHidden=G})},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)}}};loadThreadsForPicker(){if(this.threadLoadSubscription)return;this.setState(()=>{this.isLoadingThreads=!0});let J=new Qx1(this.widget.dependencies.threadHistoryService);this.threadLoadSubscription=J.observeThreadSummaries("").subscribe({next:(Q)=>{this.setState(()=>{this.threadsForPicker=Q,this.clustersForPicker=aJ6(Q),this.isLoadingThreads=!1})},error:()=>{this.setState(()=>{this.isLoadingThreads=!1})}})}updateGitBranch=async()=>{let J=await FB8(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 Z=Date.now(),Y=`bash-${Z}-${Math.random().toString(36).substring(7)}`,X={cmd:J},G=new AbortController;this.widget.dependencies.worker.invokeBashTool(X,G.signal,Q===oB).subscribe({next:(V)=>{this.setState(()=>{if(this.bashInvocations.find((q)=>q.id===Y))this.bashInvocations=this.bashInvocations.map((q)=>q.id===Y?{...q,toolRun:V}:q);else{let q={id:Y,args:X,toolRun:V,startTime:Z,abortController:G,hidden:Q===oB};this.bashInvocations=[...this.bashInvocations,q]}})},error:()=>this.removeBashInvocation(Y),complete:()=>this.removeBashInvocation(Y)})};cancelBashInvocations=()=>{let J=this.bashInvocations.find((Q)=>Q.toolRun.status==="in-progress");if(J)J.abortController.abort()};toggleConnectedClientsStatus=()=>{this.setState(()=>{this.connectedClientsStatusExpanded=!this.connectedClientsStatusExpanded})};showContextDetailOverlay=()=>{this.setState(()=>{this.isShowingContextDetailOverlay=!0}),this.fetchThreadCostInfo()};fetchThreadCostInfo=q96(()=>{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 Z=J!==this.threadCostInfoLastUsageLedgerLength,Y=Q==="idle"&&this.lastInferenceState==="running";if(this.threadCostInfoLastUsageLedgerLength=J,this.lastInferenceState=Q,Z||Y)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=800,Q=16,Z=Q/J;this.agentModeSlideTimer=setInterval(()=>{this.setState(()=>{if(this.agentModeSlideProgress!==null){if(this.agentModeSlideProgress=Math.min(1,this.agentModeSlideProgress+Z),this.agentModeSlideProgress>=1){if(this.agentModeSlideProgress=null,this.agentModeSlideTimer)clearInterval(this.agentModeSlideTimer),this.agentModeSlideTimer=null}}})},Q)};handleInsertImage=(J)=>{let Q=this.getEffectiveAgentMode();if(!Zy(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>=QU)return!1;let Z=LC(J);if(typeof Z==="object")return this.setState(()=>{this.imageAttachments=[...this.imageAttachments,Z]}),!1;return this.setState(()=>{this.displayMessage=Error(`Failed to attach image: ${Z}`)}),!1};handlePopImage=()=>{if(this.imageAttachments.length>0)this.setState(()=>{this.imageAttachments=this.imageAttachments.slice(0,-1)})};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)x.error("Failed to destruct mysterious message",Q.error);else this.setState(()=>{this.mysteriousMessage=null,this.isShowingMysteriousMessageModal=!1})}).catch((Q)=>{x.error("Failed to destruct mysterious message",Q)})};openInEditor=async(J)=>{let{mkdtemp:Q,readFile:Z,unlink:Y,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 x$(W);try{let H=await Z(W,"utf-8");this.textController.text=H}catch(H){if(H?.code!=="ENOENT")x.error("Failed to read temporary file",H)}try{await Y(W),await X(q)}catch(H){x.warn("Failed to clean up temporary file",H)}}catch(q){x.error("Error opening editor:",q)}};onTextSubmitted=async(J)=>{if(!J.trim())return;let Q=rB(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(()=>{})};initState(){if(sY.getInstance().interceptConsole(),this.freeTierStatus=this.widget.dependencies.freeTierStatus,this.threadPreviewController.setThreadService(this.widget.dependencies.threadService),this.threadPreviewController.addListener(this.previewControllerListener),this.widget.dependencies.openThreadSwitcher)this.showStandaloneThreadPicker();b8.instance.on("key",()=>{this.lastUserInteractionTime=Date.now()}),b8.instance.on("mouse",()=>{this.lastUserInteractionTime=Date.now()}),b8.instance.on("paste",()=>{this.lastUserInteractionTime=Date.now()}),this.autocompleteFocusNode.addListener((Z)=>{_8.instance.addPostFrameCallback(()=>{this.setState(()=>{this.isTextfieldAndAutocompleteFocused=Z.hasFocus})})}),K6(this.widget.dependencies.configService.config).then((Z)=>{this.paletteConfig=Z,this.agentModeController=new qS1({initialCliMode:this.widget.dependencies.initialAgentMode,sessionState:this.widget.dependencies.sessionState??null,freeTierStatus:this.freeTierStatus,initialSettings:Z.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.balanceInfoSubscription=x06(async()=>{let Z=await this.widget.dependencies.internalAPIClient.userDisplayBalanceInfo({},{config:this.widget.dependencies.configService});if(!Z.ok)throw Z.error;return Z.result}).subscribe({next:(Z)=>{this.setState(()=>{this.userDisplayBalanceInfo=Z})},error:(Z)=>{x.debug("Failed to fetch user balance info",Z)}}),this.scheduleAdSubscriptionWithIdeReadiness();let{mcpTrustHandler:J}=this.widget.dependencies;this.mcpTrustSubscription=J.pendingServers$.subscribe((Z)=>{this.setState(()=>{this.pendingMCPServers=Z})}),bC1((Z)=>{this.setState(()=>{this.pendingOAuthRequest=Z})}),this.mcpServersSubscription=this.widget.dependencies.mcpService.servers.subscribe((Z)=>{this.setState(()=>{this.mcpServers=Z})}),this.cacheTimerSubscription=this.widget.dependencies.worker.cacheTimer.subscribe((Z)=>{this.setState(()=>{this.cacheTimerState=Z})}),this.ideStatusSubscription=this.widget.dependencies.ideClient.status.subscribe((Z)=>{let Y=this.isIdeReadyForAdContext();if(this.setState(()=>{this.ideStatus=Z}),!Y&&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(Z)=>{let Y=this.widget.dependencies.getCurrentWorker();if(!Y){x.warn("No active thread worker found to handle IDE message");return}await new Promise((X)=>setTimeout(X,50)),await Y.handle({type:"user:message",message:{content:[{type:"text",text:Z}]}}),x.debug("Message sent from IDE to agent",{message:Z.slice(0,100)})}),this.ideAppendToPromptSubscription=this.widget.dependencies.ideClient.appendToPrompt.subscribe((Z)=>{this.textController.insertText(Z),x.debug("Appended text to CLI prompt from IDE",{text:Z.slice(0,100)})}),this.connectedClientsStatusSubscription=this.widget.dependencies.connectedClientsService.status.subscribe((Z)=>{this.setState(()=>{this.connectedClientsStatus=Z})}),this.updateServiceSubscription=this.widget.dependencies.updateService.state.subscribe((Z)=>{this.setState(()=>{this.updateState=Z})}),this.mysteriousMessageSubscription=N81(this.widget.dependencies.configService).pipe(D5((Z)=>Z!=="pending"),Q6((Z)=>D81(Z)?Z.mysteriousMessage??null:null),B4((Z,Y)=>Z?.id===Y?.id)).subscribe((Z)=>{this.setState(()=>{if(Z?.id!==this.mysteriousMessage?.id)this.isShowingMysteriousMessageModal=!1;if(this.mysteriousMessage=Z,Z&&!this.mysterySequenceManager)this.mysterySequenceManager=new y81(new Map([[new k81(L51.MYSTERY_SEQUENCE),new Cg]])),this.mysteryKeyInterceptorUnsubscribe=b8.instance.addKeyInterceptor((Y)=>{if(!this.mysterySequenceManager)return!1;if(this.isShowingMysteriousMessageModal)return!1;let X=this.mysterySequenceManager.handleKeyEvent(Y);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(!Z)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((Z)=>{let Y=Z instanceof Error?Z.message:String(Z);this.setState(()=>{this.displayMessage=Error(`Failed to connect to IDE: ${Y}`)})});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.initThreadFeed(),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:Z}=this.widget.dependencies;this.maybeRefetchThreadCostInfo(Z.mainThread?.usageLedger?.events.length??0,Z.viewState.state==="active"?Z.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.connectedClientsStatusSubscription)this.connectedClientsStatusSubscription.unsubscribe();if(this.updateServiceSubscription)this.updateServiceSubscription.unsubscribe();if(this.agentModeController)this.agentModeController.removeListener(this.agentModeListener),this.agentModeController.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(bC1(null),this.mcpServersSubscription)this.mcpServersSubscription.unsubscribe();if(this.cacheTimerSubscription)this.cacheTimerSubscription.unsubscribe();if(this.threadLoadSubscription)this.threadLoadSubscription.unsubscribe();if(this.threadFeedSubscription)this.threadFeedSubscription.unsubscribe();if(this.newsFeedSubscription)this.newsFeedSubscription.unsubscribe();if(this.threadFeedRotationTimer)clearInterval(this.threadFeedRotationTimer);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(qj1("")),this.shouldUseProgressBar())process.stdout.write(W86())}getCurrentConfirmation(){let{threadState:J}=this.widget.dependencies,Y=[...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(Y.length===0)return null;let X=Y[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()},L51.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=jj1(this.widget.dependencies.internalAPIClient,this.widget.dependencies.configService,()=>{let J=this.agentModeController?.getMode();return(J&&U9(J)||this.randomAd===null)&&Cj1(this.lastUserInteractionTime)},this.widget.dependencies.codebaseContextService).subscribe({next:(J)=>{if(J){let Q=HB8(16).toString("hex");this.lastAdImpressionId=Q,Promise.resolve().then(() => (M51(),D51)).then(({recordAdEvent:Z})=>{let Y=this.widget.dependencies.worker.thread,X=Y.messages[Y.messages.length-1];Z("viewed",{adId:J.id,advertiserId:J.advertiserId,threadId:Y.id,messageId:X?.messageId,impressionId:Q,placement:"tui",matchType:J.metadata?.matchType,matchedPatterns:J.metadata?.matchedPatterns,candidateAdPoolCount:J.metadata?.candidateAdPoolCount,clientRegion:J.metadata?.clientRegion})})}this.setState(()=>{this.randomAd=J}),_8.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"){x.error("No current tool confirmation found");return}let Z=Q.tools[0]?.useBlock;if(!Z){x.error("No tool use block found in confirmation");return}if(J==="allow-all-session")EG("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 x.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 v2(this.context,X);return}if(J==="disable-librarian"){let X=await this.widget.dependencies.settingsStorage.get("tools.disable")??[];if(!X.includes(DY))await this.widget.dependencies.settingsStorage.set("tools.disable",[...X,DY],"global")}let Y=J!==null&&["yes","allow-all-session","allow-all-persistent","always-guarded"].includes(J);try{let X={type:"user:tool-input",toolUse:Z.id,value:{accepted:Y}};if(Q.subthreadID)await(await L3.getOrCreateForThread(this.widget.dependencies.workerDeps,Q.subthreadID)).handle(X);else await this.widget.dependencies.worker.handle(X)}catch(X){x.error("Failed to send tool confirmation:",X)}};showConfirmationOverlay=(J)=>{this.setState(()=>{this.isShowingConfirmationOverlay=!0,this.confirmationOverlayContent=J})};getErrorKey(J){return`${J.constructor.name}:${J.message}`}getCurrentEphemeralError(){let{threadState:J}=this.widget.dependencies,Q=J.viewState;if(Q.state!=="active"||!Q.ephemeralError)return null;let Z=this.getErrorKey(Q.ephemeralError);if(this.dismissedEphemeralErrorKey===Z)return null;return Q.ephemeralError}handleEphemeralErrorResponse=async(J)=>{let Q=this.getCurrentEphemeralError(),Z=this.widget.dependencies.worker;switch(J){case"retry":this.dismissedEphemeralErrorKey=null,await Z.retry();break;case"dismiss":if(Q)this.dismissedEphemeralErrorKey=this.getErrorKey(Q);break;case"new-thread":{this.setState(()=>{this.dismissedEphemeralErrorKey=null}),await this.startAndSwitchToNewThread();break}case"new-smart-thread":{this.agentModeController?.setMode("smart"),this.setState(()=>{this.dismissedEphemeralErrorKey=null}),H41({agentMode:"smart"}),await this.startAndSwitchToNewThread();break}case"handoff":{if(Q)this.dismissedEphemeralErrorKey=this.getErrorKey(Q);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 x$(Q.getSettingsFilePath())}catch(Z){let Y=Z instanceof Error?Z.message:String(Z);await this.showErrorMessage(`Failed to open settings: ${Y}`)}};cancelStreamingMessage=async()=>{await L3.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 Z=J.messages[Q];if(Z?.role==="user"&&!Z.interrupted){await this.widget.dependencies.worker.handle({type:"user:message:interrupt",messageIndex:Q});break}}};switchToExistingThread=async(J,Q={})=>{let{recordInNavigationHistory:Z=!0}=Q;if(Z){let Y=this.widget.dependencies.worker.thread.id;if(Y!==J)this.recordNavigation(Y)}try{x.info(`[switchToExistingThread] Switching to thread: ${J}`);let Y=await this.widget.dependencies.switchToThread(J);if(x.info(`[switchToExistingThread] Got worker for thread ${J}, thread.agentMode: ${Y.thread.agentMode}`),this.widget.dependencies.worker=Y,this.widget.dependencies.threadID=Y.thread.id,this.widget.dependencies.switchWorker(Y),x.info("[switchToExistingThread] Clearing agent mode"),this.agentModeController?.setMode(null),Y.thread.draft)if(x.info("[switchToExistingThread] Loading draft content into text controller"),this.textController.clear(),typeof Y.thread.draft==="string")this.textController.insertText(Y.thread.draft);else{let X=Y.thread.draft.filter((K)=>K.type==="text"),G=Y.thread.draft.filter((K)=>K.type==="image"),V=X.map((K)=>K.text).join(`
|
|
5012
5012
|
`);if(V)this.textController.insertText(V);if(G.length>0)this.setState(()=>{this.imageAttachments=G})}}catch(Y){throw x.error("Failed to switch to thread:",J,Y),Error(`Failed to switch to thread: ${J}`)}};sendUserMessage=async(J)=>{await this.proceedWithUserMessage(J)};proceedWithUserMessage=async(J)=>{this.cancelBashInvocations(),this.widget.dependencies.history.add(J);let Q=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker,Z=r2(Q.thread)===0,Y=this.getEffectiveAgentMode();if(Q.thread.agentMode&&!Z&&Y!==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(Z)this.startAgentModeSlide();if(await Q.handle({type:"user:message",message:{content:X,agentMode:Y}}),Z)H41({agentMode:Y});this.scrollMessageViewToBottom(),this.setState(()=>{if(this.imageAttachments=[],!this.hasSubmittedFirstMessage)this.hasSubmittedFirstMessage=!0}),_8.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((Y)=>Y.type==="handoff"&&Y.role==="child"))await this.widget.dependencies.threadService.discardHandoffThread(J.id).catch(()=>{})}let Q=this.getEffectiveAgentMode();H41({agentMode:Q}).catch((Z)=>{x.warn("Failed to save session state on exit:",Z)}).finally(()=>{b8.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=zB8();if(J===Q)return"~";if(J.startsWith(Q+sg.sep))return"~"+J.slice(Q.length);return J}shorten(J){let Q=J.split(sg.sep).filter(Boolean);if(Q.length<=5)return J;return[Q.slice(0,2).join(sg.sep),"…",Q.slice(-2).join(sg.sep)].join(sg.sep)}build(J){let Q=_4.of(J),Z=X6.of(J),Y=Z.base;this.themeColors=Y;let{colors:X,app:G}=Z;this.themeApp=G;let V=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker,K=V.thread.agentMode&&U9(V.thread.agentMode),q=this.widget.dependencies.features.some((K4)=>K4.name===hj1.UBI&&K4.enabled),W=this.widget.dependencies.freeTierStatus.canUseAmpFree&&q,H=(K||W)&&this.randomAd!==null,z=!K&&this.currentThreadFeedEntry!==null&&!this.threadFeedHidden,U=Boolean(H),{threadState:D}=this.widget.dependencies;this.updateTerminalTitle(),this.updateProgressBar();let M=this.getCurrentConfirmation(),L=this.widget.dependencies.replayMode,A=Boolean(L),E=D.items,I=D.mainThread||void 0,P=D.subagentToolsByParentID,T=D.todosList;if(A){let K4={...L.thread,messages:this.replayDisplayedMessages};E=vC(K4).items,I=K4,P={};let W4=sE({messages:this.replayDisplayedMessages});T=Array.isArray(W4)?W4:[]}let k=I?.id,y=I,v=A?this.replayDisplayedMessages.length===0:this.isTranscriptEmpty(),g=(K4)=>new f91({key:new a7(`preview-message-view-${K4.id}`),items:vC(K4).items,controller:this.threadPreviewController.scrollController,autofocus:!1,thread:K4,focusNode:new G8({debugLabel:"PreviewFocus"})}),p=this.previewThread,b=p?p.messages.length>2000?new x0({mainAxisSize:"max",children:[new c6({child:new Q0}),new W6({padding:z0.all(2),child:new j4({child:new _1({text:new l("Thread too long for preview",new r({color:X.mutedForeground,dim:!0}))})})})]}):g(p):v?new g91({agentMode:this.getEffectiveAgentMode(),mysteriousMessage:this.mysteriousMessage,mysterySequenceProgress:this.mysterySequenceProgress,onShowMysteryModal:this.handleShowMysteryModal,userDisplayBalanceInfo:this.userDisplayBalanceInfo}):new f91({key:k?new a7(`message-view-${k}`):void 0,items:E,subagentToolsByParentID:P,controller:k?this.getMessageScrollController(k):new l5,autofocus:!1,onCopy:A?void 0:this._handleTextCopy.bind(this),thread:y,onMessageEditSubmit:A?void 0:this.handleMessageEditSubmit,onMessageRestoreSubmit:A?void 0:this.handleMessageRestoreSubmit,onMessageForkSubmit:A?void 0:this.forkMessage,getAffectedFiles:A?void 0:this.getAffectedFiles,focusNode:this.messageViewFocusNode,onDismissFocus:()=>{if(this.setState(()=>{this.isMessageViewInSelectionMode=!1}),!this.isShowingIdePicker)this.autocompleteFocusNode.requestFocus()},isInSelectionMode:this.isMessageViewInSelectionMode}),a=Math.max(Math.floor(Q.size.height*0.4),12),V1=this.getCurrentEphemeralError(),t=Q.size.width<40,c=D.mainThread?En(D.mainThread):void 0,J1=P91(J),q1=this.buildBottomWidget(V1,M,X,Z,D,T,a,U,A,c,this.cacheTimerState??void 0,Q,J1),D1=new s81({threadViewState:D.viewState,threadTokenUsage:c,threadID:k??null,thread:D.mainThread??void 0,onFileChangesClick:()=>{this.setState(()=>{this.isShowingFileChangesOverlay=!this.isShowingFileChangesOverlay})},onShowIdePicker:this.openIdePicker,ideStatus:this.ideStatus,connectedClientsStatus:this.connectedClientsStatus,mcpServers:this.mcpServers,isNarrow:t,uiHint:this.getUIHint()??void 0,waitingForConfirmation:!!M,showingEphemeralError:Boolean(D.viewState.state==="active"&&D.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}),s=new o81({bashInvocations:this.bashInvocations}),o=[];if(z&&this.currentThreadFeedEntry)o.push(new Jx1({entry:this.currentThreadFeedEntry,width:Q.size.width}));let i=this.getEffectiveAgentMode(),F1=this.currentShellModeStatus,k1=Kx1(i),e=!F1?i.length+1:0,f1=Q.capabilities.animationSupport,R1=f1==="disabled"?0:f1==="slow"?30:60,W0=wK(i)?.uiHints?.fasterAnimation?3:1,T1=R1>0&&this.agentModePulseSeq>0?new f9({children:[q1,new f5({top:0,left:1,right:1,height:1,child:new ay1({color:k1,trigger:this.agentModePulseSeq,fps:R1,speed:W0,leftOffset:e})})]}):q1;o.push(new c6({child:b}),s);let n1=new f9({children:[new x0({mainAxisSize:"min",children:[H?new Zy1({ad:this.randomAd,onButtonClick:async()=>{let K4=this.randomAd;if(this.lastAdImpressionId)Promise.resolve().then(() => (M51(),D51)).then(({recordAdEvent:E9})=>{let Y5=this.widget.dependencies.worker.thread,l$=Y5.messages[Y5.messages.length-1];E9("clicked",{adId:K4.id,advertiserId:K4.advertiserId,threadId:Y5.id,messageId:l$?.messageId,impressionId:this.lastAdImpressionId,placement:"tui",actionType:"link_to",matchType:K4.metadata?.matchType,matchedPatterns:K4.metadata?.matchedPatterns,candidateAdPoolCount:K4.metadata?.candidateAdPoolCount,clientRegion:K4.metadata?.clientRegion})});if(!await v2(this.context,K4.shortDestinationUrl)){let Y5=b8.instance.tuiInstance.clipboard.isOsc52Supported();this.setState(()=>{this.adActionModal={showCopyOption:Y5,url:K4.shortDestinationUrl}})}}}):new Q0({height:0}),new b0({constraints:new A6(0,Q.size.width,0,a),child:T1})]}),U?new f5({top:0,left:0,right:0,child:new YZ6({userHeight:this.bottomGridUserHeight,maxHeight:a,onInitializeHeight:(K4)=>{this.setState(()=>{this.bottomGridUserHeight=Math.min(K4,a)})},onDrag:(K4)=>{if(this.bottomGridDragStartY===null)this.bottomGridDragStartY=Math.floor(K4.localPosition.y),this.bottomGridDragStartHeight=this.bottomGridUserHeight;let W4=Math.floor(K4.localPosition.y)-this.bottomGridDragStartY,E9=Math.max(4,this.bottomGridDragStartHeight-W4),Y5=Math.min(E9,a),l$=Math.floor(Y5);if(this.bottomGridUserHeight!==l$)this.setState(()=>{this.bottomGridUserHeight=l$})},onRelease:()=>{this.bottomGridDragStartY=null,this.bottomGridDragStartHeight=null}})}):new Q0({height:0})]});o.push(n1,new Q0({height:1,child:new W6({padding:z0.horizontal(1),child:D1})}));let U1=new x0({crossAxisAlignment:"stretch",mainAxisSize:"max",children:o}),O1=A&&L?.showIndicator!==!1?new f9({children:[U1,new f5({top:0,left:0,child:new ey1})]}):U1,A1=new I8(()=>{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.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.isConfirmingCancelProcessing){if(this.bashInvocations.length>0)this.cancelBashInvocations();if(this.isProcessing())this.markLastUserMessageAsInterrupted().catch((W4)=>{x.error("Failed to mark message as interrupted:",W4)}),this.cancelStreamingMessage().catch((W4)=>{x.error("Failed to cancel streaming message:",W4)});if(this.setState(()=>{this.isConfirmingCancelProcessing=!1}),this.cancelProcessingConfirmTimeout)clearTimeout(this.cancelProcessingConfirmTimeout),this.cancelProcessingConfirmTimeout=null;return"handled"}if(this.executingCommand)return x.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.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"}),P1=new I8(()=>{return this.onExitPressed(),"handled"}),S1=new I8(()=>{return this.setState(()=>{this.isShowingConsoleOverlay=!this.isShowingConsoleOverlay}),"handled"}),p1=new I8(()=>{return this.setState(()=>{this.isShowingMCPStatusModal=!this.isShowingMCPStatusModal}),"handled"}),m1=new I8(()=>{return LJ.instance.toggleAll(),"handled"}),o1=new I8(()=>{return this.widget.dependencies.configService.getLatest().then((K4)=>{EG("internal.showDetailedCosts",!(K4.settings["internal.showDetailedCosts"]??!1))}),"handled"}),G0=new I8(()=>{return b8.instance.toggleFrameStatsOverlay(),"handled"}),V0=new I8(()=>{return b8.instance.tuiInstance.getScreen().markForRefresh(),_8.instance.requestFrame(),"handled"}),R0=new I8(()=>{return this.toggleAgentMode(),"handled"}),k6=new I8(()=>{let W4=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:E9}=this.widget.dependencies,Y5=E9.mainThread?.id;return Y5?this.getMessageScrollController(Y5):null})();if(W4){let E9=Math.max(Math.floor(Q.size.height*0.4),10),Y5=Q.size.height-E9;W4.animatePageUp(Y5,100)}return"handled"}),g6=new I8(()=>{let W4=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:E9}=this.widget.dependencies,Y5=E9.mainThread?.id;return Y5?this.getMessageScrollController(Y5):null})();if(W4){let E9=Math.max(Math.floor(Q.size.height*0.4),10),Y5=Q.size.height-E9;W4.animatePageDown(Y5,100)}return"handled"}),x4=new I8(()=>{let W4=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:E9}=this.widget.dependencies,Y5=E9.mainThread?.id;return Y5?this.getMessageScrollController(Y5):null})();if(W4)W4.animateTo(0,100);return"handled"}),M4=new I8(()=>{let W4=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:E9}=this.widget.dependencies,Y5=E9.mainThread?.id;return Y5?this.getMessageScrollController(Y5):null})();if(W4)W4.animateTo(Number.MAX_SAFE_INTEGER,100);return"handled"}),w9=new I8(()=>{if(!this.isTextfieldAndAutocompleteFocused)return"ignored";let{threadState:K4}=this.widget.dependencies;if(!K4.mainThread?.messages.some((E9)=>E9.role==="user"||rE(E9)))return"ignored";return this.setState(()=>{this.isMessageViewInSelectionMode=!0}),"handled"}),w0=new I8((K4)=>{if(K4.direction==="previous")this.navigateHistoryPrevious();else this.navigateHistoryNext();return"handled"}),a0=new I8(()=>{if(!this.isTextfieldAndAutocompleteFocused)return"ignored";return d81().then(async(K4)=>{if(K4)try{this.handleInsertImage(K4)}finally{try{let{unlink:W4}=await import("node:fs/promises");await W4(K4)}catch{}}}),"handled"}),t6=new Map([[X4.ctrl("c"),new Og],[X4.ctrl("l"),new Rg],[X4.ctrl("o"),new m81],[X4.ctrl("v"),new Lg],[X4.alt("s"),new EC],[X4.ctrl("s"),new EC],[X4.alt("p"),new Pg],[X4.ctrl("r"),new Eg],[X4.alt("d"),new Ig],[X4.ctrl("t"),new Tg],[X4.key("PageUp"),new v81],[X4.key("PageDown"),new f81],[X4.key("Home"),new h81],[X4.key("End"),new b81],[X4.key("Escape"),new Ag],[X4.ctrl("p"),new IC("previous")],[X4.ctrl("n"),new IC("next")],[X4.key("Tab"),new jg]]);if(!u3())t6.set(X4.key("ArrowUp"),new jg);if(!1)t6.set(X4.alt("c"),new wg);let l8=new I8(()=>{if(this.isShowingStandalonePalette())return"handled";return this.showCommandPalette(),"handled"}),w7=new I8(()=>{return this.toggleThreadPickerWorkspaceFilter(),"handled"}),b5=new I8(()=>{if(this.mysteriousMessage)this.handleShowMysteryModal();return"handled"}),G7=new Map([[Ag,A1],[Rg,V0],[EC,R0],[m81,l8],[Lg,a0],[wg,S1],[j81,p1],[Eg,m1],[Ig,o1],[Pg,G0],[Tg,w7],[Og,P1],[v81,k6],[f81,g6],[h81,x4],[b81,M4],[jg,w9],[IC,w0],[Cg,b5]]),i8=[O1];if(this.isShowingConsoleOverlay)i8.push(new jy1);if(this.isShowingHelp&&this.paletteConfig)i8.push(new ky1({commands:this.getPaletteCommands().getAllCommands()}));if(this.isShowingMCPStatusModal)i8.push(new Ok1({servers:this.mcpServers,onDismiss:()=>{this.setState(()=>{this.isShowingMCPStatusModal=!1})}}));if(this.isShowingMysteriousMessageModal&&this.mysteriousMessage)i8.push(new sy1({message:this.mysteriousMessage,onDestruct:this.handleDestructMysteriousMessage}));if(this.adActionModal)i8.push(new Yy1({title:"Failed to open browser",message:this.adActionModal.url,showCopyOption:this.adActionModal.showCopyOption,onSelect:async(K4)=>{let W4=this.adActionModal.url;if(K4==="copy")try{await b8.instance.tuiInstance.clipboard.writeText(W4),this.setState(()=>{this.displayMessage=new aQ("Link copied to clipboard")})}catch(E9){x.error("Failed to copy to clipboard",{error:E9}),this.setState(()=>{this.displayMessage=Error("Failed to copy to clipboard")})}this.setState(()=>{this.adActionModal=null})}}));if(this.pendingMCPServers.length>0){let{mcpTrustHandler:K4}=this.widget.dependencies;i8.push(new oy1({servers:this.pendingMCPServers,onAlwaysTrust:K4.trustAlways.bind(K4),onTrustOnce:K4.trustOnce.bind(K4),onOpenSettings:this.handleMCPTrustOpenSettings,onDismiss:K4.deny.bind(K4)}))}if(this.pendingOAuthRequest)i8.push(new ty1({request:this.pendingOAuthRequest,onDismiss:()=>{this.setState(()=>{this.pendingOAuthRequest=null})}}));if(this.isShowingFileChangesOverlay)i8.push(new tS1({threadData:D}));if(this.isShowingContextDetailOverlay){let K4=this.threadCostInfo?.costBreakdownURL;i8.push(new Sy1({thread:D.mainThread??void 0,tokenUsage:c??void 0,cacheTimerState:this.cacheTimerState??void 0,costInfo:this.threadCostInfo,onDismiss:()=>{this.setState(()=>{this.isShowingContextDetailOverlay=!1})},onOpenCostBreakdown:K4?()=>{v2(J,K4)}:void 0}))}if(this.isShowingConfirmationOverlay)i8.push(new Ty1({details:this.confirmationOverlayContent}));let c9=this.getCommandPaletteContext(J);if(c9&&this.isShowingPalette&&this.paletteConfig)i8.push(new j4({child:new Py1({commandContext:c9,mainThread:D.mainThread,commands:this.getPaletteCommands(),onDismiss:this.dismissPalette,showOptions:this.paletteShowOptions??void 0})}));if(this.isShowingIdePicker)i8.push(new xy1({onCancel:this.dismissIdePicker,onSelect:this.handleIdeSelection,jetbrainsMode:this.widget.dependencies.jetbrainsMode}));let Y8=new f9({children:i8});if(this.isShowingJetBrainsInstaller)return new QO({child:new BJ({actions:G7,child:new ZX({shortcuts:t6,debugLabel:"jetbrains-installer-shortcuts",child:new ny1({configService:this.widget.dependencies.configService,ideClient:this.widget.dependencies.ideClient,onExit:()=>process.exit(0),onContinue:this.dismissJetBrainsInstaller})})})});return new Kz({controller:this.toastController,child:new QO({child:new pS1({controller:this.toastController,child:new BJ({actions:G7,child:new ZX({shortcuts:t6,debugLabel:"main-app-shortcuts",child:Y8})})})})})}buildScrollableTodoList(J,Q,Z){return new QZ6({todos:J,enabled:Q,controller:this.todoScrollController,appTheme:Z})}buildBottomWidget(J,Q,Z,Y,X,G,V,K,q,W,H,z,U){if(J)return new _y1({error:J,ampURL:this.widget.dependencies.ampURL,onResponse:this.handleEphemeralErrorResponse});if(Q){if(this.displayMessage)this.handleDisplayMessageDismiss();return new Cy1({confirmationRequest:Q,onResponse:this.onConfirmationResponse,onShowOverlay:this.showConfirmationOverlay})}if(this.displayMessage)return new ry1({message:this.displayMessage,onDismiss:this.handleDisplayMessageDismiss});let D=n81(Y),M=this.agentModeController?.isInRestrictedFreeMode()??!1,L=new UO({key:this.textFieldKey,controller:this.textController,triggers:q?[]:[new XN],completionBuilder:q?void 0:this.getCompletionBuilder(),ampURL:this.widget.dependencies.ampURL,onSubmitted:q?void 0:this.onTextSubmitted,theme:Z,placeholder:q?"Press Ctrl+C to exit":M?"Amp Free is not enabled. Press Ctrl+S to switch modes.":void 0,enabled:this.isTextfieldAndAutocompleteFocused&&!M&&!this.isShowingStandalonePalette(),shellPromptRules:D,focusNode:this.autocompleteFocusNode,autofocus:!this.isMessageViewInSelectionMode&&!this.isShowingStandalonePalette()&&!this.isShowingIdePicker,clipboard:b8.instance.tuiInstance.clipboard,onCopy:this._handleTextCopy.bind(this),onInsertImage:this.handleInsertImage,imageAttachments:this.imageAttachments,popImage:this.handlePopImage,previousThreadId:this.previousThreadIdForHint&&(X.mainThread?.messages.length??0)===0?this.previousThreadIdForHint:void 0,onPreviousThreadHintAccepted:()=>{let i=this.previousThreadIdForHint;if(i)this.setState(()=>{this.previousThreadIdForHint=null}),this.textController.text=`following: @${i} `},onDoubleAtTrigger:q?void 0:()=>{let i=this.textController.text,F1=this.textController.cursorPosition,e=i.slice(0,F1).lastIndexOf("@@");this.showCommandPalette({type:"standalone",commandId:"attach-plan",onBeforeExecute:()=>{if(e!==-1){let f1=this.textController.text,R1=f1.slice(0,e)+f1.slice(e+2);this.textController.text=R1,this.textController.cursorPosition=e}},onSubmit:()=>{this.dismissPalette()},onCancel:()=>{this.dismissPalette()}})}}),A=X.mainThread?.queuedMessages??[],E=Array.isArray(G)&&G.length>0,I=Array.isArray(A)&&A.length>0,P=X.mainThread?.agentMode==="plan"&&GA(X.mainThread),T,k;if(P){if(T=new aB(new h91({thread:X.mainThread,onExecute:async()=>{let i=this.getCommandPaletteContext();if(i)await this.getPaletteCommands().execute("execute-plan",i,void 0,new AbortController)},onEdit:async()=>{try{let i=process.env.EDITOR||process.env.VISUAL||"nano",{filePath:F1}=await this.widget.dependencies.planFileManager.ensureSync(X.mainThread.id);b8.instance.tuiInstance.suspend();let{execSync:k1}=await import("child_process");k1(`${i} "${F1}"`,{stdio:"inherit"}),b8.instance.tuiInstance.resume()}catch(i){x.error("Failed to edit plan",i),this.setState(()=>{this.displayMessage=Error("Failed to edit plan")})}},controller:this.planScrollController,appTheme:Y}),{clipBehavior:"antiAlias"}),I)k=new N51({queuedMessages:A});else if(E)k=this.buildScrollableTodoList(G,this.isTextfieldAndAutocompleteFocused&&!M,Y)}else T=I?new N51({queuedMessages:A}):void 0,k=E?this.buildScrollableTodoList(G,this.isTextfieldAndAutocompleteFocused&&!M,Y):void 0;let y=[],v=this.currentShellModeStatus;if(v)y.push({child:new _1({text:new l(v==="hidden"?"shell mode (incognito)":"shell mode",new r({color:v==="hidden"?Y.app.shellModeHidden:Y.app.shellMode}))}),position:"top-left"});let p=this.connectedClientsStatus&&this.connectedClientsStatus.enabled?this.connectedClientsStatusExpanded?(this.connectedClientsStatus?.clientID?.length??7)+3:3:0,b=this.agentModeController?.getVisibleModes()??[];if(!v&&b.length>1){let i=this.previewThread,F1=i?i.agentMode??this.getEffectiveAgentMode():this.getEffectiveAgentMode(),k1=Kx1(F1),e=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker,f1=i??e.thread,R1=r2(f1)>0,W0=this.agentModeSlideProgress!==null,T1,n1;if(W0){T1="top-left";let Z1=z.size.width-F1.length-4-p;n1=Math.floor(this.agentModeSlideProgress*Z1)}else if(R1)T1="top-right",n1=p;else T1="top-left",n1=void 0;if(i)y.push({child:new _1({text:new l(F1,new r({color:k1}))}),position:T1,offsetX:n1});else{let U1=!R1&&!W0,Z1=new _1({text:new l(F1,new r({color:k1}))});y.push({child:U1?new V8({child:Z1,onClick:this.toggleAgentMode,cursor:"pointer"}):Z1,position:T1,offsetX:n1})}}if(this.connectedClientsStatus&&this.connectedClientsStatus.enabled){let i=this.connectedClientsStatus,F1=i.mode||"disconnected",k1=!!i.errorMessage,e=i.clientID||"unknown",f1,R1;if(k1)f1="●",R1=H1.red;else if(F1==="presence")f1="○",R1=H1.yellow;else if(F1==="connected"&&i.connected)f1="●",R1=H1.green;else f1="○",R1=H1.yellow;let W0=this.connectedClientsStatusExpanded?`${e} ${f1}`:f1;y.push({child:new V8({child:new _1({text:new l(W0,new r({color:R1}))}),onClick:this.toggleConnectedClientsStatus,cursor:"pointer"}),position:"top-right",offsetX:-2})}let a=q?this.widget.dependencies.replayMode.thread.env?.initial.trees?.[0]?.uri:X.mainThread?.env?.initial.trees?.[0]?.uri,V1;if(a)V1=h0.parse(a).fsPath;else V1=process.cwd();let t=this.toHomeRelative(V1),c=this.shorten(t),J1=!q&&this.currentGitBranch?`${c} (${this.currentGitBranch})`:c;if(y.push({child:new _1({text:new l(J1,new r({color:Z.foreground,dim:!0}))}),position:"bottom-right"}),this.previousThreadIdForHint&&(X.mainThread?.messages.length??0)===0&&this.textController.text.trim()==="")y.push({child:new _1({text:new l("",void 0,[new l("press ",new r({color:Z.foreground,dim:!0})),new l("enter",new r({color:Y.app.keybind})),new l(" to reference the previous thread",new r({color:Z.foreground,dim:!0}))])}),position:"bottom-left"});let D1=this.previewThread,s=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker;if(r2(s.thread)>0&&!v&&!D1){let i=[],F1=new r({color:Z.foreground,dim:!0}),k1=new l(" · ",F1);if(W){let e=W.totalInputTokens/W.maxInputTokens,f1=Math.round(e*100),R1=Math.max(0,Math.min(f1,100)),W0=r81(e,W.maxInputTokens),T1=F1;if(W0==="danger")T1=new r({color:Z.destructive});else if(W0==="warning")T1=new r({color:Z.warning});else if(W0==="recommendation")T1=new r({color:Y.app.recommendation});let n1=Math.round(W.maxInputTokens/1000);i.push(new l(`${R1}% of ${n1}k`,T1))}if(U&&this.threadCostInfo){let e=e91(this.threadCostInfo,{colors:{foreground:Z.foreground},dim:!0});if(e.length>0){if(i.length>0)i.push(k1);i.push(...e)}}if(U&&H){let e=X.viewState.state==="active"&&X.viewState.inferenceState==="idle",f1=K96(H,e);if(f1){if(i.length>0)i.push(k1);let R1=F1;if(f1.urgency==="warning")R1=new r({color:Z.warning});i.push(new l(f1.text,R1))}}if(i.length>0){let e=new _1({text:new l("",void 0,i)});y.push({child:U?new V8({child:e,onClick:this.showContextDetailOverlay,cursor:"pointer"}):e,position:"top-left"})}}return new nS1({leftChild:new c6({child:L}),rightChild1:T,rightChild2:k,maxHeight:V,overlayTexts:y,borderColor:M||!this.isTextfieldAndAutocompleteFocused?H1.index(8):void 0,hasBanner:K,userHeight:this.bottomGridUserHeight,onInitializeHeight:(i)=>{this.setState(()=>{this.bottomGridUserHeight=Math.min(i,V)})},onDrag:(i)=>{if(this.bottomGridDragStartY===null)this.bottomGridDragStartY=Math.floor(i.localPosition.y),this.bottomGridDragStartHeight=this.bottomGridUserHeight;let F1=Math.floor(i.localPosition.y)-this.bottomGridDragStartY,k1=Math.max(4,this.bottomGridDragStartHeight-F1),e=Math.min(k1,V),f1=Math.floor(e);if(this.bottomGridUserHeight!==f1)this.setState(()=>{this.bottomGridUserHeight=f1})},onDragRelease:()=>{this.bottomGridDragStartY=null,this.bottomGridDragStartHeight=null},enableResize:!K})}}async function qx1(J){if((await J.configService.getLatest()).settings["terminal.animation"]===!1)b8.instance.tuiInstance.setOptions({queryOptions:{animationDisabled:!0}});let Y=()=>null,G=!1,V=new Jz(G,1000,J.inspectorPort),K=J.features.find((A)=>A.name===hj1.AMP_CONNECT)?.enabled??!1,q=new Jy1({threadService:J.threadService,worker:J.worker,builder:(A,E,I,P,T,k)=>{if(Y=T,J.threadDependencies&&K)VS1(J.threadDependencies,J.configService,T,P,J.connectedClientsService,J.startNewThread,J.switchToThread,J.clientId).catch((g)=>{x.error("Failed to start automatic presence:",g)});let y=T(),v={...J,worker:y,threadID:y.thread.id};return new JZ6({...v,threadState:E,workerController:I,switchWorker:P,getCurrentWorker:T,recentThreadIDs:k})}}),W=new aS1({configService:J.configService,child:q}),H=new wk1({configService:J.configService,child:W}),z=new xS1(H),U=new X6({data:PC.fromBaseTheme(v$.default()),child:z});try{await Ij1(U,{onRootElementMounted:(A)=>{if(x.info("TUI input ready for user interaction"),G)V.start(A)}})}finally{if(G)V.stop();if(J.threadDependencies&&K){let{stopGlobalSession:A}=await Promise.resolve().then(() => (KS1(),L56));A()}}let M=Y()?.thread.id||J.threadID,L=await J.threadService.get(M);if(L&&L.messages.length>0){let A=`${J.ampURL.replace(/\/$/,"")}/threads/${M}`;g56(L,A,J.stdout)}}function Kx1(J){let Z=wK(J)?.uiHints?.secondaryColor;if(Z)return H1.rgb(Z.r,Z.g,Z.b);return UB8(J)}class QZ6 extends p0{props;constructor(J){super();this.props=J}createState(){return new ZZ6}}class ZZ6 extends g0{viewportHeight=1;scrollListenerAttached=!1;initState(){if(!this.scrollListenerAttached)this.widget.props.controller.addListener(()=>{this.updateViewportHeight()}),this.scrollListenerAttached=!0}build(J){let{todos:Q,controller:Z,appTheme:Y}=this.widget.props;return new B6({crossAxisAlignment:"stretch",children:[new c6({child:new W5({controller:Z,autofocus:!1,child:new Qy1({todos:Q})})}),new MJ({controller:Z,thumbColor:Y.app.scrollbarThumb,trackColor:Y.app.scrollbarTrack,getScrollInfo:()=>{let{maxScrollExtent:X,offset:G}=Z,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=(Y,X=0)=>{if(Y&&"size"in Y&&"children"in Y){let G=Y.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},Z=Q(J);if(Z>0)return Z;if("size"in J){let Y=J.size;if(typeof Y?.height==="number"&&Y.height>0)return Y.height}return this.viewportHeight}}class YZ6 extends I6{props;constructor(J){super();this.props=J}build(J){return new V8({child:new Q0({height:1}),cursor:j9.NS_RESIZE,onDrag:(Q)=>{if(this.props.userHeight===void 0){let Y=J.findRenderObject()?.size.height??0;if(Y>0){this.props.onInitializeHeight(Y);return}}this.props.onDrag(Q)},onRelease:this.props.onRelease})}}function UB8(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 Z=[9,10,11,12,13,14,15,208,209,210,211,212,213,214,215],Y=Math.abs(Q)%Z.length;return H1.index(Z[Y])}Ej1();try{if(process.platform==="win32")await Promise.resolve().then(() => q6(Yj(),1))}catch{}if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(J){QZ.write(`Failed to change directory to ${process.env.AMP_PWD}: ${J}
|
|
5013
|
-
`)}var bv1=hv1.join(MW0||hv1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function vL8(J){process.emitWarning=function(Q,Z,Y,X){let G=typeof Q==="string"?Q:Q.message||String(Q),V=Z||"Warning",K=!1;J.warn(G,{name:V,code:Y})}}function SV(J,Q){if(J.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")EG("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(J.getOptionValueSourceWithGlobals("mode")==="cli")EG("experimental.agentMode",Q.mode);if(J.getOptionValueSourceWithGlobals("useSonnet")==="cli")EG("model.sonnet",Q.useSonnet)}async function gv1(J){try{await kL8(hv1.dirname(bv1),{recursive:!0}),await yL8(bv1,J,"utf-8")}catch(Q){x.debug("Failed to save last thread ID",Q)}}async function fL8(){try{return(await S$6(bv1,"utf-8")).trim()}catch(J){return null}}function hL8(J){return!!(J&&(J.endsWith("@sourcegraph.com")||J.endsWith("@ampcode.com")||J==="auth-bypass-user@example.com"))}async function bL8(J){try{let Q=await K5.getUserInfo({},{config:J,signal:AbortSignal.timeout(5000)});if(Q.ok)return Q.result}catch(Q){x.debug("Failed to fetch user info:",Q)}return}var T$6=[{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??C$,description:`Custom settings file path (overrides the default location ${C$})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(x).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${bA})`},{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:u3(),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:hW.SMART.key,description:`Set the agent mode (${dX().map((J)=>J.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:dX().map((J)=>J.mode).concat("large")}],C$6=(J)=>("deprecated"in J)&&J.deprecated===!0,mL8=(J)=>("hidden"in J)&&J.hidden===!0,gL8=(J)=>("default"in J),uL8=(J)=>("default"in J)?J.default:void 0;function pL8(J,Q){let Z=Q.args[0],Y=Q.commands.map((G)=>G.name());if(Z&&!Z.includes(" ")&&Z.length<30&&!/[./\\]/.test(Z)){let G=Y.filter((K)=>Z.includes(K)||K.includes(Z)),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 C8(T$.unknownCommand(Z),1,V)}}var _$6=null;function hA5(){return _$6}function Au(J){return{...J,getThreadEnvironment:m61,vfs:vI0({os:J.fileSystem},J.configService.config),fileChangeTrackerStorage:new nx(J.fileSystem),generateThreadTitle:Oi0,deleteThread:(Q)=>J.threadService.delete(Q)}}var uv1=h0.file(xL8.homedir()),k$6=process.env.XDG_CONFIG_HOME?h0.file(process.env.XDG_CONFIG_HOME):n0.joinPath(uv1,".config");async function c$(J,Q){BB0("0.0.
|
|
5013
|
+
`)}var bv1=hv1.join(MW0||hv1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function vL8(J){process.emitWarning=function(Q,Z,Y,X){let G=typeof Q==="string"?Q:Q.message||String(Q),V=Z||"Warning",K=!1;J.warn(G,{name:V,code:Y})}}function SV(J,Q){if(J.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")EG("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(J.getOptionValueSourceWithGlobals("mode")==="cli")EG("experimental.agentMode",Q.mode);if(J.getOptionValueSourceWithGlobals("useSonnet")==="cli")EG("model.sonnet",Q.useSonnet)}async function gv1(J){try{await kL8(hv1.dirname(bv1),{recursive:!0}),await yL8(bv1,J,"utf-8")}catch(Q){x.debug("Failed to save last thread ID",Q)}}async function fL8(){try{return(await S$6(bv1,"utf-8")).trim()}catch(J){return null}}function hL8(J){return!!(J&&(J.endsWith("@sourcegraph.com")||J.endsWith("@ampcode.com")||J==="auth-bypass-user@example.com"))}async function bL8(J){try{let Q=await K5.getUserInfo({},{config:J,signal:AbortSignal.timeout(5000)});if(Q.ok)return Q.result}catch(Q){x.debug("Failed to fetch user info:",Q)}return}var T$6=[{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??C$,description:`Custom settings file path (overrides the default location ${C$})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(x).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${bA})`},{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:u3(),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:hW.SMART.key,description:`Set the agent mode (${dX().map((J)=>J.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:dX().map((J)=>J.mode).concat("large")}],C$6=(J)=>("deprecated"in J)&&J.deprecated===!0,mL8=(J)=>("hidden"in J)&&J.hidden===!0,gL8=(J)=>("default"in J),uL8=(J)=>("default"in J)?J.default:void 0;function pL8(J,Q){let Z=Q.args[0],Y=Q.commands.map((G)=>G.name());if(Z&&!Z.includes(" ")&&Z.length<30&&!/[./\\]/.test(Z)){let G=Y.filter((K)=>Z.includes(K)||K.includes(Z)),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 C8(T$.unknownCommand(Z),1,V)}}var _$6=null;function hA5(){return _$6}function Au(J){return{...J,getThreadEnvironment:m61,vfs:vI0({os:J.fileSystem},J.configService.config),fileChangeTrackerStorage:new nx(J.fileSystem),generateThreadTitle:Oi0,deleteThread:(Q)=>J.threadService.delete(Q)}}var uv1=h0.file(xL8.homedir()),k$6=process.env.XDG_CONFIG_HOME?h0.file(process.env.XDG_CONFIG_HOME):n0.joinPath(uv1,".config");async function c$(J,Q){BB0("0.0.1765656079-g53c6e1");let Z=gH1({storage:J.settings,secretStorage:J.secrets,workspaceRoots:t1.of([h0.file(process.cwd())]),defaultAmpURL:J.ampURL,homeDir:uv1,userConfigDir:k$6}),{initializeCLITelemetry:Y}=await Promise.resolve().then(() => (M51(),D51));Y(Z);let X=await Z.getLatest();x.debug("Global configuration initialized",{settingsKeys:Object.keys(X.settings)});let{toolService:G,dispose:V}=vr0({configService:Z}),K=new Map,q=()=>K.clear(),W=new ZB1(Z,J.settings.getWorkspaceRootPath()),H=pE0({configService:Z,trustStore:W,createOAuthProvider:async(t,c,J1)=>{let q1=`${t}:${c}`,D1=K.get(q1);if(D1)return x.debug("Reusing existing OAuth provider for server",{serverName:t,serverUrl:c}),D1;x.debug("Creating OAuth provider for server",{serverName:t,serverUrl:c});let s=(async()=>{let o=new TM(J.secrets),i=await o.getClientInfo(t,c),F1=J1?.scopes??i?.scopes,k1=W66();x.info("OAuth headless mode check",{useHeadless:k1,executeMode:J.executeMode,envVar:process.env.AMP_HEADLESS_OAUTH,isTTY:r9.isTTY});let e=void 0;if(k1)e=J.executeMode?q66():K66(t);let f1=new PU1({storage:o,serverName:t,serverUrl:c,clientId:J1?.clientId??i?.clientId,clientSecret:J1?.clientSecret??i?.clientSecret,authUrl:J1?.authUrl??i?.authUrl,tokenUrl:J1?.tokenUrl??i?.tokenUrl,scopes:F1,headlessAuthHandler:e});return x.debug("OAuth provider created",{serverName:t,serverUrl:c,hasManualClientId:!!(J1?.clientId??i?.clientId),willUseDCR:!(J1?.clientId??i?.clientId),scopes:F1,headlessMode:k1,executeMode:J.executeMode}),f1})();return K.set(q1,s),s}}),z=b01({configService:Z,filesystem:J5,spawn:NA}),{initializeToolProviders:U,startToolProviders:D}=await Promise.resolve().then(() => (R$6(),P$6)),M;if(J.executeMode){let t=await U({toolService:G,providers:[H,z],initialTimeout:15000});M=t.registrations;for(let[c,J1]of t.initErrors)x.warn(`${c} provider initialization slow or failed:`,J1)}else M=D({toolService:G,providers:[H,z]});if(Q.jetbrains)eE("JetBrains");else if(Q.ide&&d66())eE("VS Code");else if(Q.ide&&c66())eE("Neovim");if(J.executeMode)NB0(!0);let L,A=F3.status.pipe(Q6((t)=>Boolean(t.connected&&t.authenticated)),B4()).subscribe((t)=>{if(t){if(!L)L=G.registerTool(Oa0)}else L?.dispose(),L=void 0}),E;if(!J.executeMode){let t=await J.settings.get("fuzzy.alwaysIncludePaths")??[];E=new r61(process.cwd(),{alwaysIncludePaths:t},!0)}else E=new class extends r61{async start(){}async query(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};if(!await J.secrets.get("apiKey",J.ampURL)){if(r9.write(`No API key found. Starting login flow...
|
|
5014
5014
|
`),!await dL8(J))await mA(),process.exit(1)}let I=await zR0({isDevelopment:!1}),P=new SP1(I,Z),T=new MP1(I,{lazy:!0}),k=new zB1(P,(t,c)=>{let J1=L3.get(t);if(J1)J1.handle(c).catch((q1)=>{x.error("Failed to apply artifact delta",q1)})}),y=Q.notifications!==void 0?Q.notifications:!J.executeMode,v=hr0({playNotificationSound:async(t)=>{if(y){fr0(t);let c=Oj1(),J1=wj1();if((!c||J1)&&X.settings["notifications.system.enabled"]!==!1){if(t==="idle")process.stdout.write("\x1B]777;notify;Amp;Agent is ready\x1B\\");else if(t==="requires-user-input")process.stdout.write("\x1B]777;notify;Amp;Waiting for approval\x1B\\")}}},windowFocused:()=>Promise.resolve(!1),threadService:P,configService:Z});x.info("Starting Amp background services");let g=Ei0({threadService:P,threadHistoryService:T,configService:Z,isExtensionDevelopment:!1}),p;F3.status.subscribe((t)=>{p=t});let b=new P$1({workspaceRoots:[h0.file(process.cwd())],getCurrentFile:()=>{if(!p?.openFile)return;try{return h0.parse(p.openFile)}catch(t){x.warn("Failed to parse current file URI",{uri:p.openFile,error:t});return}},getOpenFiles:()=>{if(!p?.visibleFiles?.length)return[];let t=p.openFile;return p.visibleFiles.filter((c)=>c!==t).map((c)=>{try{return h0.parse(c)}catch(J1){return x.warn("Failed to parse visible file URI",{uri:c,error:J1}),null}}).filter((c)=>c!==null)}}),a=new Pj1,V1={codebaseContextService:b,configService:Z,toolService:G,mcpService:H,trustStore:W,threadService:P,threadHistoryService:T,threadSyncService:g,planFileManager:k,threadStorage:I,secretStorage:J.secrets,settingsStorage:J.settings,fuzzyServer:E,notificationService:v,fileSystem:Q.jetbrains||Q.ide?kI0:J5,terminal:a};return{...V1,async asyncDispose(){if(V1.mcpService.hasAuthenticatingClients())x.info("Waiting for OAuth authentication to complete before exit..."),await V1.mcpService.waitForAuthentication();for(let t of M.values())t.dispose();await V1.mcpService.dispose(),q(),await V1.threadService.asyncDispose(),V1.configService.unsubscribe(),V(),V1.fuzzyServer.dispose(),V1.threadSyncService.dispose(),V1.settingsStorage[Symbol.dispose](),A.unsubscribe(),L?.dispose()}}}async function dL8(J){if(!J.executeMode){if(!await tC1("Would you like to log in to Amp? [(y)es, (n)o]: "))return r9.write(`Login cancelled. Run the command again to retry.
|
|
5015
5015
|
`),!1}return await y$6(J)}async function y$6(J){let Q=_L8(32).toString("hex"),Z=await sC1(J.ampURL,Q),Y=new AbortController;try{await lD(Z,Y.signal)}catch(G){x.error("Error opening browser",{error:G})}let X=await sC1(J.ampURL,Q,!1);r9.write(`If your browser does not open automatically, visit:
|
|
5016
5016
|
|
|
@@ -5020,7 +5020,7 @@ ${T6.blue.bold(X)}
|
|
|
5020
5020
|
Login successful! You can now use the Amp CLI.
|
|
5021
5021
|
`),!0}catch(G){return x.error("Login failed",{error:G}),QZ.write(`
|
|
5022
5022
|
Login failed: ${G instanceof Error?G.message:String(G)}
|
|
5023
|
-
`),!1}}function cL8(){let J=new RA().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)uT(),process.exit(0);let z=H.originalError??H;y06(z)}),J.option("-V, --version","Print the version number and exit",()=>{let z;try{z=`, ${rI(new Date("2025-12-
|
|
5023
|
+
`),!1}}function cL8(){let J=new RA().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)uT(),process.exit(0);let z=H.originalError??H;y06(z)}),J.option("-V, --version","Print the version number and exit",()=>{let z;try{z=`, ${rI(new Date("2025-12-13T20:06:36.591Z"))} ago`}catch{}r9.write(`0.0.1765656079-g53c6e1 (released 2025-12-13T20:06:36.591Z${z??""})
|
|
5024
5024
|
`),process.exit(0)}),J.addHelpText("after",g66()),J.configureHelp({formatHelp:u66}),J.command("logout").description("Log out by removing stored API key").action(async(H,z)=>{let U=z.optsWithGlobals(),D=await BQ(U);await aL8(D)}),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,z)=>{let U=z.optsWithGlobals(),D=await BQ(U);await nL8(D,await gC1(U,D.settings))});let Q=async(H,z,U)=>{gH1({storage:z.settings,secretStorage:z.secrets,workspaceRoots:t1.of([h0.file(process.cwd())]),defaultAmpURL:z.ampURL,homeDir:uv1,userConfigDir:k$6});let D={...z,executeMode:!1};await mv1(D,{...H,openThreadSwitcher:!0},U)},Z=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,z)=>{let U=z.optsWithGlobals(),D=await BQ(U);await j$6(U,D,z)});Z.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,z)=>{let U=z.optsWithGlobals(),D=await BQ(U);await QA8(U,D,z)}),Z.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,z,U)=>{let D=U.optsWithGlobals(),M=await BQ(D);if(z.pick)QZ.write(`${T6.yellow("Warning:")} The --pick flag is deprecated. The picker is now shown by default.
|
|
5025
5025
|
`);if(z.last||H||M.executeMode)await JA8(D,M,H,U);else await Q(D,M,U)}),Z.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,z,U)=>{let D=U.optsWithGlobals(),M=await BQ(D);await eL8(D,M,H,U)}),Z.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,z)=>{let U=z.optsWithGlobals(),D=await BQ(U);await j$6(U,D,z)}),Z.command("search <query>").alias("find").summary("Search threads").description(`Search for threads using a query DSL.
|
|
5026
5026
|
|
|
@@ -5036,8 +5036,8 @@ All matching is case-insensitive. File paths use partial matching.`).option("-n,
|
|
|
5036
5036
|
Or pipe via stdin: echo "your message" | amp --execute`);SV(Z,Q);let V=await c$(J,Q);_$6=V;let K=Au(V),q=await bL8(V.configService),W=hL8(q?.email);if((J.executeMode||Q.streamJson)&&U9(Q.mode)&&!W)throw new C8(`Execute mode is not permitted with --mode '${Q.mode}'`,1);let H=async(b)=>{let a=await S$6(b,"utf-8"),V1=JSON.parse(a);if(!cX(V1.id))throw new C8(T$.invalidThreadId);return V71(V,{visibility:Y,agentMode:Q.mode,thread:V1})},z=async(b)=>{if(!cX(b))throw new C8(T$.invalidThreadId);try{let[V1,t]=await Promise.all([K5.getThreadLinkInfo({thread:b},{config:V.configService}),K5.getUserInfo({},{config:V.configService})]);if(V1.ok&&t.ok){let c=V1.result.creatorUserID,J1=t.result.id;if(c&&c!==J1&&!process.env.AMP_RESUME_OTHER_USER_THREADS_INSECURE)throw new C8(`Cannot resume thread created by another user.
|
|
5037
5037
|
|
|
5038
5038
|
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(V1){if(V1 instanceof C8)throw V1;x.warn("Failed to validate thread ownership in CLI, allowing to open",{error:V1})}let a=await V.threadService.get(b)??void 0;return x.info(`[fetchAndStartThread] Loaded thread ${b}, agentMode: ${a?.agentMode??"undefined"}`),V71(V,{visibility:Y,agentMode:a?void 0:Q.mode,thread:a})},U=async()=>{try{if(Q.threadId)return z(Q.threadId);else return V71(V,{visibility:Y,agentMode:Q.mode})}catch(b){if(b instanceof C8)throw b;throw await Sm(b,Q.threadId),Error("handleError should have called process.exit()")}},D=async()=>{return V71(V,{visibility:Y,agentMode:Q.mode})};if(Q.format==="jsonl")QZ.write(`jsonl format is deprecated. Version "0.0.1752148945-gd8844f" or earlier is required to use jsonl format.
|
|
5039
|
-
`),await mA(),process.exit(1);if(J.executeMode&&Q.remote)await S46(X,G,V.configService),await V.asyncDispose(),process.exit(0);let M=await U();if(J.executeMode)w46(V.mcpService,J.settings),await a06(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,E=!1;if(Q.jetbrains||Q.ide){await SB0();let b=YI({jetbrainsOnly:Q.jetbrains});if(b.length===0){if(Q.jetbrains)A=!await V.configService.get("jetbrains.skipInstall")}else if(b.length===1){let a=b[0];if(a)F3.selectConfig(a)}else E=!0}let I=G41("0.0.
|
|
5040
|
-
`);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Z=process.stdout.isTTY&&process.stderr.isTTY,Y=await I66({...J,workspaceTrust:{current:!0,changes:m_},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 A46(J.mcpConfig);Y=O46(Y,G)}let X=await Y.get("url","global");if(!X)X=FZ;if(!IF(X))x.info("Targeting custom Amp server",{ampURL:X});return Y=DH0(Y),{executeMode:Q,isTTY:Z,ampURL:X,settings:Y,secrets:_46(await gC1(J,Y))}}function lL8(J){let Q={};for(let Z=0;Z<J.length;Z++){let Y=J[Z];if(Y?.startsWith("--")){let G=Y.slice(2).replace(/-([a-z])/g,(K,q)=>q.toUpperCase()),V=J[Z+1];if(V&&!V.startsWith("--"))Q[G]=V,Z++}}return Q}async function iL8(){let J=lL8(process.argv);if(I06({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),vL8(x),x.info("Starting Amp CLI.",{version:"0.0.
|
|
5039
|
+
`),await mA(),process.exit(1);if(J.executeMode&&Q.remote)await S46(X,G,V.configService),await V.asyncDispose(),process.exit(0);let M=await U();if(J.executeMode)w46(V.mcpService,J.settings),await a06(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,E=!1;if(Q.jetbrains||Q.ide){await SB0();let b=YI({jetbrainsOnly:Q.jetbrains});if(b.length===0){if(Q.jetbrains)A=!await V.configService.get("jetbrains.skipInstall")}else if(b.length===1){let a=b[0];if(a)F3.selectConfig(a)}else E=!0}let I=G41("0.0.1765656079-g53c6e1",V.settingsStorage),P=new K01(V.threadStorage),T=t1.of([h0.file(process.cwd())]),k=x$1(void 0,T),y=new V41(V.mcpService,J.settings.getWorkspaceRootPath());if(X)M.handle({type:"user:message",message:{content:[{type:"text",text:X}]}});let g=await(async()=>{try{let b=await K5.getUserFreeTierStatus({},{config:V.configService,signal:AbortSignal.timeout(5000)});if(b.ok)return x.info("User free tier status:",b),b.result}catch(b){throw x.error("Failed to fetch free tier status:",b),b}})(),p=await x46();x.info("Loaded session state:",p),await qx1({codebaseContextService:V.codebaseContextService,stdout:process.stdout,history:new d61,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,threadHistoryService:V.threadHistoryService,threadSyncService:V.threadSyncService,planFileManager:V.planFileManager,threadID:M.threadID,threadFuzzyIndexer:P,worker:M,workerDeps:K,configService:V.configService,internalAPIClient:K5,ampURL:J.ampURL,startNewThread:D,switchToThread:z,ideClient:F3,connectedClientsService:new jn,commandRegistry:k,mcpService:V.mcpService,mcpTrustHandler:y,showJetBrainsInstaller:A,showIdePicker:L,showIdePickerHint:E,openThreadSwitcher:Q.openThreadSwitcher,updateService:I,inspector:Q.inspector,inspectorPort:Q.inspectorPort,jetbrainsMode:Q.jetbrains,clientId:Q.clientId,sessionState:p,freeTierStatus:{canUseAmpFree:g.canUseAmpFree},workspace:q?.team??null,features:q?.features??[],isDogfooding:W,threadDependencies:V,initialAgentMode:Z.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0}),await V.asyncDispose(),process.exit(0)}async function BQ(J){if(J.interactive)QZ.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
5040
|
+
`);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Z=process.stdout.isTTY&&process.stderr.isTTY,Y=await I66({...J,workspaceTrust:{current:!0,changes:m_},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 A46(J.mcpConfig);Y=O46(Y,G)}let X=await Y.get("url","global");if(!X)X=FZ;if(!IF(X))x.info("Targeting custom Amp server",{ampURL:X});return Y=DH0(Y),{executeMode:Q,isTTY:Z,ampURL:X,settings:Y,secrets:_46(await gC1(J,Y))}}function lL8(J){let Q={};for(let Z=0;Z<J.length;Z++){let Y=J[Z];if(Y?.startsWith("--")){let G=Y.slice(2).replace(/-([a-z])/g,(K,q)=>q.toUpperCase()),V=J[Z+1];if(V&&!V.startsWith("--"))Q[G]=V,Z++}}return Q}async function iL8(){let J=lL8(process.argv);if(I06({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),vL8(x),x.info("Starting Amp CLI.",{version:"0.0.1765656079-g53c6e1",buildTimestamp:"2025-12-13T20:06:36.591Z"}),parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new C8(T$.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await cL8().parseAsync(process.argv)}XP1().startActiveSpan("main",async(J)=>{process.on("exit",()=>J.end()),await iL8().catch(Sm)});async function nL8(J,Q){if(process.env.AMP_URL)await J.settings.set("url",process.env.AMP_URL,"global"),r9.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
|
|
5041
5041
|
`);else if(!IF(J.ampURL))r9.write(`Logging in to ${new URL(J.ampURL).hostname}
|
|
5042
5042
|
`);let Z=process.env.AMP_API_KEY;if(Z)r9.write(`API key found in environment variable, storing...
|
|
5043
5043
|
`),await Q.set("apiKey",Z,J.ampURL),r9.write(`API key successfully stored.
|
|
@@ -5050,7 +5050,7 @@ This thread belongs to a different user and cannot be continued for security rea
|
|
|
5050
5050
|
`);else r9.write(`Successfully logged out from ${new URL(J.ampURL).hostname}.
|
|
5051
5051
|
`);process.exit(0)}async function oL8(J,Q,Z,Y,X){SV(X,J);let G=await c$(Q,J);try{let V=K71(Z);if(!V)q71(Z);let K=V,q=Y.trim();if(q.length===0)KX("Thread name cannot be empty");if(q.length>256)KX("Thread name cannot exceed 256 characters");if(!(await Xj(K,G)).messages.length)KX("Cannot rename an empty thread.");let H=Au(G);await(await L3.getOrCreateForThread(H,K)).handle({type:"title",value:q}),x.info("GOT HERE"),await G.threadSyncService.sync(),x.info("GOT THERE"),r9.write(T6.green(`✓ Thread ${K} renamed to "${q}"
|
|
5052
5052
|
`)),await G.asyncDispose(),process.exit(0)}catch(V){await G.asyncDispose();let K=`Failed to rename thread: ${V instanceof Error?V.message:String(V)}`;KX(K)}}async function rL8(J,Q,Z,Y){SV(Y,J);let X=await c$(Q,J);try{let G=K71(Z);if(!G)q71(Z);let K=await Xj(G,X),q=DT(K);r9.write(q+`
|
|
5053
|
-
`),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)}`;KX(V)}}async function sL8(J,Q,Z,Y,X){SV(X,J);let G=await c$(Q,J);try{let V=await pv1(Z),K=await Xj(V,G),q=Y.typing!==!1,W=parseInt(Y.wpm||"120",10),H=parseInt(Y.messageDelay||"1000",10),z=parseInt(Y.toolProgressDelay||"800",10),U=parseInt(Y.exitDelay||"3",10)*1000,D=Y.indicator!==!1,M=Au(G),L=K.id;await G.threadStorage.set(L,K);let A=await L3.getOrCreateForThread(M,L);await A.resume();let E=V01.fromWorker(A),I=new K01(G.threadStorage),P=t1.of([h0.file(process.cwd())]),T=x$1(void 0,P),k=new V41(G.mcpService,Q.settings.getWorkspaceRootPath()),y=G41("0.0.
|
|
5053
|
+
`),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)}`;KX(V)}}async function sL8(J,Q,Z,Y,X){SV(X,J);let G=await c$(Q,J);try{let V=await pv1(Z),K=await Xj(V,G),q=Y.typing!==!1,W=parseInt(Y.wpm||"120",10),H=parseInt(Y.messageDelay||"1000",10),z=parseInt(Y.toolProgressDelay||"800",10),U=parseInt(Y.exitDelay||"3",10)*1000,D=Y.indicator!==!1,M=Au(G),L=K.id;await G.threadStorage.set(L,K);let A=await L3.getOrCreateForThread(M,L);await A.resume();let E=V01.fromWorker(A),I=new K01(G.threadStorage),P=t1.of([h0.file(process.cwd())]),T=x$1(void 0,P),k=new V41(G.mcpService,Q.settings.getWorkspaceRootPath()),y=G41("0.0.1765656079-g53c6e1",G.settingsStorage);await qx1({codebaseContextService:G.codebaseContextService,stdout:process.stdout,history:new d61,fuzzyServer:G.fuzzyServer,settingsStorage:G.settingsStorage,threadService:G.threadService,threadHistoryService:G.threadHistoryService,threadSyncService:G.threadSyncService,planFileManager:G.planFileManager,threadID:L,threadFuzzyIndexer:I,worker:E,workerDeps:M,configService:G.configService,internalAPIClient:K5,ampURL:Q.ampURL,startNewThread:async()=>E,switchToThread:async()=>E,ideClient:F3,connectedClientsService:new jn,commandRegistry:T,mcpService:G.mcpService,mcpTrustHandler:k,showJetBrainsInstaller:!1,updateService:y,isDogfooding:!1,replayMode:{thread:K,typingEnabled:q,baseWpm:W,messageDelayMs:H,toolProgressDelayMs:z,exitDelayMs:U,showIndicator:D},freeTierStatus:{canUseAmpFree:!0},features:[]}),await G.asyncDispose(),process.exit(0)}catch(V){await G.asyncDispose(),await Sm(V,Z)}}async function tL8(J,Q,Z,Y,X){SV(Y,J);let G=await c$(Q,J);try{let V=K71(Z);if(!V)q71(Z);let K=V,q=await K5.getUserInfo({},{config:G.configService}),W=q.ok?q.result:null,H=K41(J,W);if(!H&&!X)KX("Must specify either --visibility or --support");if(H&&X)KX("Cannot specify both --visibility and --support at the same time");if(H instanceof Error)KX(H.message);if(H)await G.threadSyncService.updateThreadMeta(K,q41(H)),r9.write(T6.green("✓ ")+`Thread ${K} visibility changed to ${H}.
|
|
5054
5054
|
`);if(X){await Xj(K,G);let z=typeof X==="string"?X:void 0;await GR0(G.threadService,K,G.configService,z),r9.write(T6.green("✓ ")+`Thread ${K} has been shared with Amp support. These thread reports will be aggregated and analysed.
|
|
5055
5055
|
`)}await G.asyncDispose(),process.exit(0)}catch(V){await G.asyncDispose(),KX(`Failed to update thread: ${V instanceof Error?V.message:String(V)}`)}}async function eL8(J,Q,Z,Y){SV(Y,J);let X=await c$(Q,J),G=Au(X);try{let V=await pv1(Z),q=(await Xj(V,X)).messages.length-1,W=await L3.getOrCreateForThread(G,V),H=await AT(W,X.threadSyncService,q);await Promise.all([X.threadSyncService.uploadThread(V),X.threadSyncService.uploadThread(H)]),await gv1(H),r9.write(`${H}
|
|
5056
5056
|
`),await X.asyncDispose(),process.exit(0)}catch(V){QZ.write(`Error forking thread: ${V instanceof Error?V.message:String(V)}
|