@sourcegraph/amp 0.0.1765797045-g028cd2 → 0.0.1765797153-g028cd2
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
|
@@ -3877,11 +3877,11 @@ Actual: ${X}`)}async function TQ8(J,Q,Z){let{execSync:Y}=await import("node:ch
|
|
|
3877
3877
|
${D}`;if(X==="pnpm"&&D.includes("Unable to find the global bin directory"))M+=`
|
|
3878
3878
|
|
|
3879
3879
|
Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
|
|
3880
|
-
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()}})})}U0();U0();async function r61(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=kQ8(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 kQ8(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 s61(J,Q){let Z=new x4,Y=Z.pipe(B8({shouldCountRefs:!1}));return setImmediate(async()=>{let X=new FK().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 BB(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=gA(),W=await r61(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 o61();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 hm(W.latestVersion,z);let U=await _B(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 BB(5000),Z.next("hidden"),G.unsubscribe(),Z.complete()}}),{state:Y}}import{stderr as Pq}from"node:process";function b66(J){let Q=new IA().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 CC1(Y.force||!1,Y.verbose||!1,"0.0.
|
|
3880
|
+
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()}})})}U0();U0();async function r61(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=kQ8(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 kQ8(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 s61(J,Q){let Z=new x4,Y=Z.pipe(B8({shouldCountRefs:!1}));return setImmediate(async()=>{let X=new FK().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 BB(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=gA(),W=await r61(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 o61();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 hm(W.latestVersion,z);let U=await _B(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 BB(5000),Z.next("hidden"),G.unsubscribe(),Z.complete()}}),{state:Y}}import{stderr as Pq}from"node:process";function b66(J){let Q=new IA().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 CC1(Y.force||!1,Y.verbose||!1,"0.0.1765797153-g028cd2"),process.exit()});J.addCommand(Q,{hidden:!0});let Z=new IA("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 yQ8(Y.targetVersion)});J.addCommand(Z)}async function yQ8(J){if(process.env.AMP_SKIP_UPDATE_CHECK==="1")Pq.write(A6.yellow(`Note: AMP_SKIP_UPDATE_CHECK=1 is set, which disables automatic update checking. Manual updates will still work.
|
|
3881
3881
|
|
|
3882
3882
|
`));try{if(!J){Pq.write(A6.blue(`Checking for updates...
|
|
3883
|
-
`));let Z=gA(),{hasUpdate:Y,latestVersion:X}=await r61("0.0.
|
|
3884
|
-
`));let V=await _B("0.0.
|
|
3883
|
+
`));let Z=gA(),{hasUpdate:Y,latestVersion:X}=await r61("0.0.1765797153-g028cd2",Z);if(!Y){Pq.write(A6.green(`✓ Amp CLI is already up to date: ${"0.0.1765797153-g028cd2"} (${"released"} ${"2025-12-15T11:17:49.235Z"}${`, ${lI(new Date("2025-12-15T11:17:49.235Z"))} ago`})
|
|
3884
|
+
`));let V=await _B("0.0.1765797153-g028cd2");if(V.warning)Pq.write(`
|
|
3885
3885
|
`+A6.yellow(V.warning)+`
|
|
3886
3886
|
`);process.exit(0)}if(!X)Pq.write(A6.yellow("[WARN] could not find latest version")),process.exit(0);J=X}Pq.write(A6.blue(`Updating to version ${J}...
|
|
3887
3887
|
`)),await hm(J,void 0,(Z)=>{Pq.write(A6.dim(`Running: ${Z}
|
|
@@ -4551,7 +4551,7 @@ Ctrl-X, Y, Z to unlock`;if(U){let a=W.text.replace(/`([^`]+)`/g,"$1")+`
|
|
|
4551
4551
|
`,A)])}),k];if(!q&&!U&&W.url){let b=W.url.replace(/^https?:\/\//,"");m.push(new l5({uri:W.url,text:b,style:new t({color:Z.secondary,underline:!0})}))}if(y&&!U)m.push(y);let p=new Q0({width:40,child:new v0({crossAxisAlignment:"start",mainAxisSize:"min",children:m})});return j4.child(new E6({mainAxisAlignment:"center",crossAxisAlignment:"center",mainAxisSize:"min",children:[new YS1({width:_k1,height:kk1,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]}))}}U0();N8();z4();W7();N8();d0();function xz8(J,Q){return`${J}:${Q}`}class yk1{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(XM()).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=xz8(Q,V.toolUse.id);if(this.subthreadPatchSubs.has(K))continue;let q=this.threadService.observePatches(V.threadID).pipe(XM()).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]=$A(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 vz8(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=uJ(J.mainThread);X.isCompleted=x26(W,Y.toolUse.id)}}let G=fz8(Z,X.agentState),V=X.agentState===G?X:{...X,agentState:G},K={...J.tools},q=SC(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=uJ(Z),V={...J.subagents};for(let z of Y){let U=V[z.threadID];if(!U)continue;let D=x26(G,z.toolUse.id);V[z.threadID]={...U,isCompleted:D}}let{items:K}=SC(Z),q=$A(Z,X),W=nE({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=$A(J.mainThread,Q.workerStatus);if(Z===J.viewState)return J;return{...J,viewState:Z}}default:return J}}function SC(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)??AY(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 x26(J,Q){let Z=J.get(Q);return(Z&&W3(Z.run))??!1}function fz8(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(SC(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 xk1 extends p0{props;constructor(J){super();this.props=J}createState(){return new v26}}class v26 extends u0{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 yk1(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=vz8(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===M5||G===H9||G===MK,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:cE(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 vk1 extends p0{props;constructor(J){super({key:J.key});this.props=J}createState(){return new f26}}class f26 extends u0{build(J){let Z=$6.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 q6({padding:H0.symmetric(1,0),child:new v0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new _1({text:new l(X,new t({bold:!0,color:Z.foreground}))}),...G]})})})}buildTodoItem(J,Q){let Z=this.getStatusIcon(J.status),Y=J.status==="completed",X=new t({bold:J.status==="in-progress",color:Q.foreground,dim:Y}),G=new t({bold:J.status==="in-progress",strikethrough:J.status==="completed",color:Q.foreground,dim:Y});return new E6({crossAxisAlignment:"start",children:[new _1({text:new l(Z,X)}),new Q0({width:1}),new i6({child:new _1({text:new l(J.content,G)})})]})}getStatusIcon(J){return J==="completed"?"✓":"•"}}class fk1 extends x6{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=$6.of(J),Z=Q.colors.primary,Y=Q.colors.foreground;return new b0({decoration:new M8(void 0,new B4(new V4(Z,1,"rounded"),new V4(Z,1,"rounded"),void 0,new V4(Z,1,"rounded"))),child:new q6({padding:H0.horizontal(1),child:new v0({children:[new E6({crossAxisAlignment:"start",children:[new i6({child:new _1({text:new l(this.ad.content,new t({color:Y}))})}),new Q0({width:4}),new l5({uri:"https://ampcode.com/free",text:"Ad",style:new t({color:Y,dim:!0})})]}),new E6({crossAxisAlignment:"start",children:[new US1({text:this.ad.buttonLabel,onPressed:()=>this.onButtonClick?.(),padding:H0.horizontal(1),color:Z,reverse:!0}),new Q0({width:2}),new _1({text:new l(this.ad.destinationUrlHostname,new t({color:Y,dim:!0}))})]})]})})})}}class hk1 extends p0{props;constructor(J){super();this.props=J}createState(){return new h26(this.props.autofocus??!0)}}class h26 extends u0{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 t({bold:!0,color:z1.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 t({dim:!0}))}));return V.push(new _1({text:new l("Escape to close",new t({dim:!0}))})),G.push(new E6({children:V.flatMap((K,q)=>q<V.length-1?[K,new Q0({width:1}),new _1({text:new l("•",new t({dim:!0}))}),new Q0({width:1})]:[K]),mainAxisSize:"min"})),new j4({child:new b0({constraints:new M6(Y,Y,0,X),decoration:new M8(z1.default(),new B4(new V4(z1.blue,1,"rounded"),new V4(z1.blue,1,"rounded"),new V4(z1.blue,1,"rounded"),new V4(z1.blue,1,"rounded"))),padding:new H0(2,2,2,2),child:new z8({autofocus:this.autofocus,onKey:Q,child:new v0({children:G,mainAxisSize:"min"})})})})}}class R91 extends Error{constructor(J="Command timed out"){super(J);this.name="CommandTimeoutError",Object.setPrototypeOf(this,R91.prototype)}}class T91 extends Error{constructor(J){let Q=`${J.noun}: ${J.verb} command cancelled`;super(Q);this.name="CommandCancelledError",Object.setPrototypeOf(this,T91.prototype)}}function bk1(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})}oW();U0();import{spawn as hz8}from"node:child_process";import{promises as bz8}from"node:fs";function b26(J){return J.kind==="executable"}function m26(J){return J.kind==="markdown"}var Wz=50000,g26=300000;async function mk1(J,Q,Z,Y={}){let{timeoutMs:X=g26,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}),m26(K))return await mz8(K,Q);else if(b26(K))return await gz8(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 mz8(J,Q){try{if(Q.length>0)return{success:!1,output:"",error:"Markdown commands do not accept arguments"};let Z=await bz8.readFile(J.filePath,"utf8");return{success:!0,output:(Z.length>Wz?Z.slice(0,Wz)+`
|
|
4552
4552
|
... (output truncated at ${Wz} characters)`:Z).trim(),exitCode:0}}catch(Z){return{success:!1,output:"",error:Z instanceof Error?Z.message:"Failed to read markdown file"}}}async function gz8(J,Q,Z=g26,Y){return new Promise((X)=>{let[G,V]=uz8(J,Q);x.debug("Spawning command",{spawnCommand:G,spawnArgs:V.slice(0,10),filePath:J.filePath,timeoutMs:Z});let K=Ww0(Y),q=!1,W=setTimeout(()=>{q=!0,K.abort(),x.warn("Command execution timed out",{commandName:J.name,timeoutMs:Z})},Z),H=hz8(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<=Wz)z.push(L);else{let A=Wz-(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<=Wz)U.push(L);else{let A=Wz-(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?`
|
|
4553
4553
|
${E}`:E;if(D>Wz)I+=`
|
|
4554
|
-
... (output truncated at ${Wz} 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 uz8(J,Q){let{filePath:Z,interpreter:Y,extension:X}=J;if(process.platform==="win32")return dz8(Z,Y?[...Y]:null,X,Q);else return pz8(Z,Y?[...Y]:null,X,Q)}function pz8(J,Q,Z,Y){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Y]];else return[J,Y]}function dz8(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]}}U0();LY();P7();kW();jZ();mG();rW();pK();N8();Rb();W7();k_();d0();var BJ6=K6(uM(),1);import{writeFile as zJ6}from"fs/promises";import FJ6 from"path";U0();jZ();class gk1{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.1765797045-g028cd2"},parameters:{metadata:{count:Z}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await jo(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 zO extends p0{props;constructor(J){super();this.props=J}createState(){return new u26}}class u26 extends u0{_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 p26 extends u0{controller=new iZ;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=$6.of(J),{colors:Z,app:Y}=Q,X=this.widget.props.isRequiredArg??!0,G=this.controller.text.trim().length>0,V=!X||G,K=B4.all(new V4(Z.foreground,1,"solid")),q=new Gz({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 E6({children:[new b0({decoration:{color:z1.default()},child:new _1({text:new l(">",new t({color:Z.foreground}))})}),new i6({child:q})]}),H=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new t({color:Z.foreground})),new l(this.widget.props.commandName,new t({color:z1.yellow,bold:!0}))])})}),z=[];if(V)z.push(new l("Enter",new t({color:Y.keybind}))),z.push(new l(" to submit, ",new t({color:Z.foreground,dim:!0})));z.push(new l("Esc",new t({color:Y.keybind}))),z.push(new l(" to cancel",new t({color:Z.foreground,dim:!0})));let U=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l("",void 0,z)})});return new b0({decoration:{border:K,color:z1.default()},padding:H0.all(1),child:new v0({children:[H,new Q0({height:1}),W,new v5,U]})})}}class fg extends p0{props;constructor(J){super();this.props=J}createState(){return new p26}}rW();class d26 extends u0{controller=new iZ;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>=eF)return!1;let Q=FC(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=$6.of(J),{colors:Z,app:Y}=Q,G=_4.of(J).size.height,V=Math.max(Math.floor(G*0.5),10),K=new HO({controller:this.controller,triggers:[new JN],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:F9.instance.tuiInstance.clipboard,showMenuBelow:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),q=new z8({focusNode:this.focusNode,child:K}),W=new b0({constraints:new M6({maxHeight:V}),padding:H0.symmetric(1,0),child:q}),H=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new t({color:Z.foreground})),new l(this.widget.props.commandName,new t({color:z1.yellow,bold:!0}))])})}),z=new b0({padding:H0.symmetric(1,0),child:new _1({text:this.isConfirmingClearInput?new l("",void 0,[new l("Esc",new t({color:Y.keybind})),new l(" again to clear input",new t({color:Z.foreground,dim:!0}))]):new l("",void 0,[new l("Press ",new t({color:Z.foreground,dim:!0})),new l("Enter",new t({color:Y.keybind})),new l(" to submit, ",new t({color:Z.foreground,dim:!0})),new l("Esc",new t({color:Y.keybind})),new l(" to clear",new t({color:Z.foreground,dim:!0}))])})}),U=[H,new Q0({height:1}),new i6({child:W}),new Q0({height:1}),z];return new b0({decoration:{border:B4.all(new V4(Z.foreground,1,"solid")),color:z1.default()},padding:H0.all(1),child:new v0({children:U})})}}class _C extends p0{props;constructor(J){super();this.props=J}createState(){return new d26}}import{isDeepStrictEqual as nz8}from"node:util";var cz8=/[\\/_ +.#"@[({&]/,lz8=/[\\/_ +.#"@[({&]/g,iz8=/[\s-]/,c26=/[\s-]/g;function j91(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=j91(J,Q,Z,Y,W+1,G+1,V),z>H){if(W===X)z*=1;else if(iz8.test(J.charAt(W-1))){if(z*=0.9,M=J.slice(X,W-1).match(c26),M&&X>0)z*=Math.pow(0.999,M.length)}else if(cz8.test(J.charAt(W-1))){if(z*=0.8,D=J.slice(X,W-1).match(lz8),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=j91(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 C91(J){return J.toLowerCase().replace(c26," ")}function l26(J,Q){let Z=j91(J,Q,C91(J),C91(Q),0,0,{}),Y=Q.trim().split(/\s+/);if(Y.length>1){let X=0,G=0;for(let K of Y){let q=j91(J,K,C91(J),C91(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 kC{}class yC{}class S91{}class _91{}class i26 extends p0{child;onContext;constructor(J,Q){super();this.child=J;this.onContext=Q}createState(){return new n26}}class n26 extends u0{build(J){return this.widget.onContext(J),this.widget.child}}function az8(J,Q){if(J==="")return{matches:!0,score:1};let Z=l26(Q,J);return{matches:Z>0.15,score:Z}}class y2 extends p0{props;debugLabel="FuzzyPicker";constructor(J){super();this.props=J}createState(){return new a26}}class a26 extends u0{controller=new iZ;focusNode;scrollController=new Z7;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(),S8.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(!nz8(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 kC){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length-1)this.selectedIndex++,this.setState(),S8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof yC){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex>0)this.selectedIndex--,this.setState(),S8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof S91){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 _91)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,...az8(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;T81(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(),S8.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=$6.of(J),{colors:Z}=Q,Y=this.getFilteredItems(),X=B4.all(new V4(Z.foreground,1,"solid")),G=this.widget.props.enabled??!0,V=new Gz({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 kC],[new X4("ArrowUp"),new yC],[new X4("Tab"),new kC],[new X4("Tab",{shift:!0}),new yC],[new X4("n",{ctrl:!0}),new kC],[new X4("p",{ctrl:!0}),new yC],[new X4("Enter"),new S91],[new X4("Escape"),new _91]]),focusNode:this.focusNode,child:V}),q=new FJ({actions:new Map([[kC,new P8(this.invoke)],[yC,new P8(this.invoke)],[S91,new P8(this.invoke)],[_91,new P8(this.invoke)]]),child:K}),W=new E6({children:[new b0({decoration:{color:z1.default()},child:new _1({text:new l(">",new t({color:Z.foreground}))})}),new i6({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 t({color:Z.foreground}))})})})}else if(Y.length===0&&this.widget.props.emptyStateText)H=new i6({child:new j4({child:new _1({text:new l(this.widget.props.emptyStateText,new t({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 y=I?z1.yellow:void 0,k=I?z1.black:Z.foreground;T=new b0({decoration:y?{color:y}:void 0,padding:H0.symmetric(2,0),child:new _1({text:new l(this.widget.props.getLabel(A),new t({color:k,dim:P}))})})}return new i26(new I8({onClick:(y)=>this.handleItemClick(E,y.clickCount),child:T}),(y)=>{this.itemContexts[E]=y})});H=new v0({children:L,crossAxisAlignment:"start"})}let z=new i6({child:new I8({onScroll:this.handleScroll,opaque:!1,child:new f5({controller:this.scrollController,autofocus:!1,child:H})})}),U=[];if(this.widget.props.title){let L=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l(this.widget.props.title,new t({color:z1.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:H0.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:z1.default()},padding:H0.symmetric(1,0),child:new v0({children:U})})}}function o26(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 uk1 extends x6{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)=>o26(X.pubDate).length));return new y2({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=$6.of(K),{colors:W}=q,H=G?z1.yellow:void 0,z=G?z1.black:W.foreground,U=z1.index(8),D=(M,L)=>new Q0({width:L,child:E6.end([new _1({text:new l(M,new t({color:U}))})])});return new b0({decoration:H?{color:H}:void 0,padding:H0.symmetric(2,0),child:new E6({children:[new i6({child:new _1({text:new l(X.title,new t({color:z})),overflow:"ellipsis",maxLines:1})}),new Q0({width:2}),D(o26(X.pubDate),Z)]})})}})}}class pk1 extends p0{createState(){return new r26}}class r26 extends u0{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 t({color:this.isGreen?z1.green:z1.index(8),bold:!0})),maxLines:1})}}function oz8(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 dk1(J,Q,Z){return new _1({text:new l(`${J}${Q}`,new t({color:Z})),maxLines:1})}function rz8(J,Q,Z,Y){return[dk1("+",J,Y.success),v5.horizontal(1),dk1("~",Q,Y.warning),v5.horizontal(1),dk1("-",Z,Y.destructive)]}class k91 extends x6{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=oz8(G),K=Math.max(0,...V.map((z)=>z.description.timeAgo.length)),q=$6.of(J),W=new q6({padding:H0.symmetric(0,1),child:new j4({child:new _1({text:new l("",new t({color:q.colors.foreground,dim:!0}),[new l("Ctrl+T",new t({color:z1.blue,dim:!0})),new l(this.props.filterByWorkspace?" for all workspaces":" to filter by workspace",new t({color:q.colors.foreground,dim:!0}))])})})});return new y2({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=$6.of(M),{colors:A}=L,E=U?z1.yellow:void 0,I=U?z1.black:A.foreground,P=z1.index(8),T=(e,c)=>new Q0({width:c,child:E6.end([new _1({text:new l(e,new t({color:P}))})])}),y=this.props.threadViewStates[z.id],k=[],v=z.relationshipType==="handoff",m=new x81;if(z.depth>0){let e=[],c=z.ancestorsAreLast.slice(1);for(let D1 of c)e.push(new l(m.getAncestorPrefix(D1),new t({color:m.connectorColor,dim:m.connectorDim})));let J1=z.isLast?m.elbow:m.tee,K1=m.getConnectorText(J1);e.push(new l(K1,new t({color:m.connectorColor,dim:m.connectorDim}))),k.push(new _1({text:new l("",void 0,e)}))}let p=[],b=X===z.id?new l("(current) ",new t({color:z1.green})):Y.has(z.id)?new l("(visited) ",new t({color:A.foreground,dim:!0})):null;if(b)p.push(new _1({text:b}));if(y){if(y.state==="active"&&(y.interactionState==="tool-running"||y.interactionState===!1))p.push(new pk1),p.push(new Q0({width:1}))}let a=z.title;if(z.relationshipType==="fork"){let e=a.match(/^Forked\((\d+)\): /);if(e)a=a.slice(e[0].length);else while(a.startsWith("Forked: "))a=a.slice(8);p.push(new _1({text:new l("[fork] ",new t({color:z1.blue}))}))}else if(v)p.push(new _1({text:new l("[handoff] ",new t({color:z1.index(208)}))}));if(p.push(new i6({child:new _1({text:new l(a,new t({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 e=U?{success:P,warning:P,destructive:P}:A;p.push(...rz8(z.diffStats.added,z.diffStats.changed,z.diffStats.deleted,e)),p.push(new Q0({width:2}))}return p.push(T(z.description.timeAgo,K)),new b0({decoration:E?{color:E}:void 0,padding:H0.symmetric(2,0),child:new E6({children:[...k,...p]})})}})}}function s26(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 ck1 extends x6{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)=>s26(X.pubDate).length));return new y2({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=$6.of(K),{colors:W}=q,H=G?z1.yellow:void 0,z=G?z1.black:W.foreground,U=z1.index(8),D=X.authors.map((L)=>L.name).join(", ")||"Community",M=(L,A)=>new Q0({width:A,child:E6.end([new _1({text:new l(L,new t({color:U}))})])});return new b0({decoration:H?{color:H}:void 0,padding:H0.symmetric(2,0),child:new E6({children:[new i6({child:new _1({text:new l(X.title,new t({color:z})),overflow:"ellipsis",maxLines:1})}),new Q0({width:2}),new _1({text:new l(D,new t({color:U})),maxLines:1}),new Q0({width:2}),M(s26(X.pubDate),Z)]})})}})}}class lk1 extends x6{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:
|
|
4554
|
+
... (output truncated at ${Wz} 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 uz8(J,Q){let{filePath:Z,interpreter:Y,extension:X}=J;if(process.platform==="win32")return dz8(Z,Y?[...Y]:null,X,Q);else return pz8(Z,Y?[...Y]:null,X,Q)}function pz8(J,Q,Z,Y){if(Q&&Q.length>0&&Q[0])return[Q[0],[...Q.slice(1),J,...Y]];else return[J,Y]}function dz8(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]}}U0();LY();P7();kW();jZ();mG();rW();pK();N8();Rb();W7();k_();d0();var BJ6=K6(uM(),1);import{writeFile as zJ6}from"fs/promises";import FJ6 from"path";U0();jZ();class gk1{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.1765797153-g028cd2"},parameters:{metadata:{count:Z}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(J);await jo(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 zO extends p0{props;constructor(J){super();this.props=J}createState(){return new u26}}class u26 extends u0{_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 p26 extends u0{controller=new iZ;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=$6.of(J),{colors:Z,app:Y}=Q,X=this.widget.props.isRequiredArg??!0,G=this.controller.text.trim().length>0,V=!X||G,K=B4.all(new V4(Z.foreground,1,"solid")),q=new Gz({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 E6({children:[new b0({decoration:{color:z1.default()},child:new _1({text:new l(">",new t({color:Z.foreground}))})}),new i6({child:q})]}),H=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new t({color:Z.foreground})),new l(this.widget.props.commandName,new t({color:z1.yellow,bold:!0}))])})}),z=[];if(V)z.push(new l("Enter",new t({color:Y.keybind}))),z.push(new l(" to submit, ",new t({color:Z.foreground,dim:!0})));z.push(new l("Esc",new t({color:Y.keybind}))),z.push(new l(" to cancel",new t({color:Z.foreground,dim:!0})));let U=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l("",void 0,z)})});return new b0({decoration:{border:K,color:z1.default()},padding:H0.all(1),child:new v0({children:[H,new Q0({height:1}),W,new v5,U]})})}}class fg extends p0{props;constructor(J){super();this.props=J}createState(){return new p26}}rW();class d26 extends u0{controller=new iZ;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>=eF)return!1;let Q=FC(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=$6.of(J),{colors:Z,app:Y}=Q,G=_4.of(J).size.height,V=Math.max(Math.floor(G*0.5),10),K=new HO({controller:this.controller,triggers:[new JN],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:F9.instance.tuiInstance.clipboard,showMenuBelow:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),q=new z8({focusNode:this.focusNode,child:K}),W=new b0({constraints:new M6({maxHeight:V}),padding:H0.symmetric(1,0),child:q}),H=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l("",void 0,[new l("Command: ",new t({color:Z.foreground})),new l(this.widget.props.commandName,new t({color:z1.yellow,bold:!0}))])})}),z=new b0({padding:H0.symmetric(1,0),child:new _1({text:this.isConfirmingClearInput?new l("",void 0,[new l("Esc",new t({color:Y.keybind})),new l(" again to clear input",new t({color:Z.foreground,dim:!0}))]):new l("",void 0,[new l("Press ",new t({color:Z.foreground,dim:!0})),new l("Enter",new t({color:Y.keybind})),new l(" to submit, ",new t({color:Z.foreground,dim:!0})),new l("Esc",new t({color:Y.keybind})),new l(" to clear",new t({color:Z.foreground,dim:!0}))])})}),U=[H,new Q0({height:1}),new i6({child:W}),new Q0({height:1}),z];return new b0({decoration:{border:B4.all(new V4(Z.foreground,1,"solid")),color:z1.default()},padding:H0.all(1),child:new v0({children:U})})}}class _C extends p0{props;constructor(J){super();this.props=J}createState(){return new d26}}import{isDeepStrictEqual as nz8}from"node:util";var cz8=/[\\/_ +.#"@[({&]/,lz8=/[\\/_ +.#"@[({&]/g,iz8=/[\s-]/,c26=/[\s-]/g;function j91(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=j91(J,Q,Z,Y,W+1,G+1,V),z>H){if(W===X)z*=1;else if(iz8.test(J.charAt(W-1))){if(z*=0.9,M=J.slice(X,W-1).match(c26),M&&X>0)z*=Math.pow(0.999,M.length)}else if(cz8.test(J.charAt(W-1))){if(z*=0.8,D=J.slice(X,W-1).match(lz8),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=j91(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 C91(J){return J.toLowerCase().replace(c26," ")}function l26(J,Q){let Z=j91(J,Q,C91(J),C91(Q),0,0,{}),Y=Q.trim().split(/\s+/);if(Y.length>1){let X=0,G=0;for(let K of Y){let q=j91(J,K,C91(J),C91(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 kC{}class yC{}class S91{}class _91{}class i26 extends p0{child;onContext;constructor(J,Q){super();this.child=J;this.onContext=Q}createState(){return new n26}}class n26 extends u0{build(J){return this.widget.onContext(J),this.widget.child}}function az8(J,Q){if(J==="")return{matches:!0,score:1};let Z=l26(Q,J);return{matches:Z>0.15,score:Z}}class y2 extends p0{props;debugLabel="FuzzyPicker";constructor(J){super();this.props=J}createState(){return new a26}}class a26 extends u0{controller=new iZ;focusNode;scrollController=new Z7;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(),S8.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(!nz8(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 kC){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex<Q.length-1)this.selectedIndex++,this.setState(),S8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof yC){let Q=this.getFilteredItems();if(Q.length>0&&this.selectedIndex>0)this.selectedIndex--,this.setState(),S8.instance.addPostFrameCallback(()=>{this.ensureSelectedItemVisible()}),this.widget.props.onSelectionChange?.(Q[this.selectedIndex]??null);return"handled"}if(J instanceof S91){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 _91)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,...az8(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;T81(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(),S8.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=$6.of(J),{colors:Z}=Q,Y=this.getFilteredItems(),X=B4.all(new V4(Z.foreground,1,"solid")),G=this.widget.props.enabled??!0,V=new Gz({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 kC],[new X4("ArrowUp"),new yC],[new X4("Tab"),new kC],[new X4("Tab",{shift:!0}),new yC],[new X4("n",{ctrl:!0}),new kC],[new X4("p",{ctrl:!0}),new yC],[new X4("Enter"),new S91],[new X4("Escape"),new _91]]),focusNode:this.focusNode,child:V}),q=new FJ({actions:new Map([[kC,new P8(this.invoke)],[yC,new P8(this.invoke)],[S91,new P8(this.invoke)],[_91,new P8(this.invoke)]]),child:K}),W=new E6({children:[new b0({decoration:{color:z1.default()},child:new _1({text:new l(">",new t({color:Z.foreground}))})}),new i6({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 t({color:Z.foreground}))})})})}else if(Y.length===0&&this.widget.props.emptyStateText)H=new i6({child:new j4({child:new _1({text:new l(this.widget.props.emptyStateText,new t({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 y=I?z1.yellow:void 0,k=I?z1.black:Z.foreground;T=new b0({decoration:y?{color:y}:void 0,padding:H0.symmetric(2,0),child:new _1({text:new l(this.widget.props.getLabel(A),new t({color:k,dim:P}))})})}return new i26(new I8({onClick:(y)=>this.handleItemClick(E,y.clickCount),child:T}),(y)=>{this.itemContexts[E]=y})});H=new v0({children:L,crossAxisAlignment:"start"})}let z=new i6({child:new I8({onScroll:this.handleScroll,opaque:!1,child:new f5({controller:this.scrollController,autofocus:!1,child:H})})}),U=[];if(this.widget.props.title){let L=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l(this.widget.props.title,new t({color:z1.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:H0.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:z1.default()},padding:H0.symmetric(1,0),child:new v0({children:U})})}}function o26(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 uk1 extends x6{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)=>o26(X.pubDate).length));return new y2({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=$6.of(K),{colors:W}=q,H=G?z1.yellow:void 0,z=G?z1.black:W.foreground,U=z1.index(8),D=(M,L)=>new Q0({width:L,child:E6.end([new _1({text:new l(M,new t({color:U}))})])});return new b0({decoration:H?{color:H}:void 0,padding:H0.symmetric(2,0),child:new E6({children:[new i6({child:new _1({text:new l(X.title,new t({color:z})),overflow:"ellipsis",maxLines:1})}),new Q0({width:2}),D(o26(X.pubDate),Z)]})})}})}}class pk1 extends p0{createState(){return new r26}}class r26 extends u0{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 t({color:this.isGreen?z1.green:z1.index(8),bold:!0})),maxLines:1})}}function oz8(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 dk1(J,Q,Z){return new _1({text:new l(`${J}${Q}`,new t({color:Z})),maxLines:1})}function rz8(J,Q,Z,Y){return[dk1("+",J,Y.success),v5.horizontal(1),dk1("~",Q,Y.warning),v5.horizontal(1),dk1("-",Z,Y.destructive)]}class k91 extends x6{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=oz8(G),K=Math.max(0,...V.map((z)=>z.description.timeAgo.length)),q=$6.of(J),W=new q6({padding:H0.symmetric(0,1),child:new j4({child:new _1({text:new l("",new t({color:q.colors.foreground,dim:!0}),[new l("Ctrl+T",new t({color:z1.blue,dim:!0})),new l(this.props.filterByWorkspace?" for all workspaces":" to filter by workspace",new t({color:q.colors.foreground,dim:!0}))])})})});return new y2({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=$6.of(M),{colors:A}=L,E=U?z1.yellow:void 0,I=U?z1.black:A.foreground,P=z1.index(8),T=(e,c)=>new Q0({width:c,child:E6.end([new _1({text:new l(e,new t({color:P}))})])}),y=this.props.threadViewStates[z.id],k=[],v=z.relationshipType==="handoff",m=new x81;if(z.depth>0){let e=[],c=z.ancestorsAreLast.slice(1);for(let D1 of c)e.push(new l(m.getAncestorPrefix(D1),new t({color:m.connectorColor,dim:m.connectorDim})));let J1=z.isLast?m.elbow:m.tee,K1=m.getConnectorText(J1);e.push(new l(K1,new t({color:m.connectorColor,dim:m.connectorDim}))),k.push(new _1({text:new l("",void 0,e)}))}let p=[],b=X===z.id?new l("(current) ",new t({color:z1.green})):Y.has(z.id)?new l("(visited) ",new t({color:A.foreground,dim:!0})):null;if(b)p.push(new _1({text:b}));if(y){if(y.state==="active"&&(y.interactionState==="tool-running"||y.interactionState===!1))p.push(new pk1),p.push(new Q0({width:1}))}let a=z.title;if(z.relationshipType==="fork"){let e=a.match(/^Forked\((\d+)\): /);if(e)a=a.slice(e[0].length);else while(a.startsWith("Forked: "))a=a.slice(8);p.push(new _1({text:new l("[fork] ",new t({color:z1.blue}))}))}else if(v)p.push(new _1({text:new l("[handoff] ",new t({color:z1.index(208)}))}));if(p.push(new i6({child:new _1({text:new l(a,new t({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 e=U?{success:P,warning:P,destructive:P}:A;p.push(...rz8(z.diffStats.added,z.diffStats.changed,z.diffStats.deleted,e)),p.push(new Q0({width:2}))}return p.push(T(z.description.timeAgo,K)),new b0({decoration:E?{color:E}:void 0,padding:H0.symmetric(2,0),child:new E6({children:[...k,...p]})})}})}}function s26(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 ck1 extends x6{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)=>s26(X.pubDate).length));return new y2({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=$6.of(K),{colors:W}=q,H=G?z1.yellow:void 0,z=G?z1.black:W.foreground,U=z1.index(8),D=X.authors.map((L)=>L.name).join(", ")||"Community",M=(L,A)=>new Q0({width:A,child:E6.end([new _1({text:new l(L,new t({color:U}))})])});return new b0({decoration:H?{color:H}:void 0,padding:H0.symmetric(2,0),child:new E6({children:[new i6({child:new _1({text:new l(X.title,new t({color:z})),overflow:"ellipsis",maxLines:1})}),new Q0({width:2}),new _1({text:new l(D,new t({color:U})),maxLines:1}),new Q0({width:2}),M(s26(X.pubDate),Z)]})})}})}}class lk1 extends x6{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:
|
|
4555
4555
|
|
|
4556
4556
|
`,new t({color:z1.white,dim:!0})),new l(`"${this.props.newThreadTitle||"Untitled"}"`,new t({color:z1.white}))]),textAlign:"center"})})}}U0();class t26 extends u0{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=$6.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 y2({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?z1.yellow:void 0,D=W?z1.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:H0.symmetric(2,0),child:new _1({text:new l("",void 0,[new l("Create new label: ",new t({color:D})),new l(L,new t({color:D,bold:!0}))])})})}return new b0({decoration:U?{color:U}:void 0,padding:H0.symmetric(2,0),child:new _1({text:new l(q.name,new t({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 ik1 extends p0{props;constructor(J){super();this.props=J}createState(){return new t26}}class EV extends p0{props;constructor(J){super();this.props=J}createState(){return new e26}}class e26 extends u0{_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=$6.of(J),{colors:Z}=Q,Y=B4.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 t({color:z1.yellow})),new l(" ",void 0),new l(this.widget.props.message,new t({color:Z.foreground}))])}),K=[new i6({child:new v0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[G]})})];if(this.widget.props.onAbort)K.push(new Q0({height:2,child:new b0({padding:H0.symmetric(2,0),child:new _1({text:new l("",new t({dim:!0}),[new l("Press ",new t({color:Z.foreground})),new l("Esc",new t({color:Z.info})),new l(" to cancel",new t({color:Z.foreground}))])})})}));let q=new b0({decoration:new M8(z1.default(),Y),child:new Q0({width:60,height:7,child:new v0({mainAxisAlignment:"start",children:K})})});if(this.widget.props.onAbort)return new z8({debugLabel:"LoadingDialog",autofocus:!0,onKey:(W)=>{if(W.key==="Escape")return this.widget.props.onAbort?.(),"handled";return"ignored"},child:q});return q}}class IV extends p0{props;constructor(J){super();this.props=J}createState(){return new JJ6}}class JJ6 extends u0{dispose(){super.dispose()}isWidgetMessage(J){return J instanceof OV}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=S81(Q);return{title:W.title,type:W.type,description:W.description}})(),Y=Z.type==="error"?z1.red:z1.yellow,X=B4.all(new V4(z1.default(),1,"solid")),G=new b0({padding:H0.symmetric(1,0),child:new _1({text:new l(Z.title,new t({color:Y,bold:!0}))})}),V=this.isWidgetMessage(Q)?Q.widget:new _1({text:new l(Z.description,new t({color:z1.default()})),selectable:!0}),K=new i6({child:new Yz({child:new b0({padding:H0.symmetric(1,0),child:V})})}),q=new b0({padding:H0.symmetric(1,0),child:new _1({text:this.widget.props.onRetry?new l("",void 0,[new l("Press ",new t({color:z1.default(),dim:!0})),new l("R",new t({color:z1.yellow})),new l(" to retry, ",new t({color:z1.default(),dim:!0})),new l("Esc",new t({color:z1.yellow})),new l(" to cancel",new t({color:z1.default(),dim:!0}))]):new l("Press any key to close",new t({color:z1.default(),dim:!0,italic:!0}))})});return new z8({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:z1.default()},padding:H0.all(1),child:new v0({mainAxisAlignment:"center",children:[G,new Q0({height:1}),K,q]})})})}}class nk1 extends x6{build(){return new j4({child:new _1({text:new l("",void 0,[new l(`✓ Thread Shared
|
|
4557
4557
|
|
|
@@ -4644,7 +4644,7 @@ https://www.jetbrains.com/help/idea/managing-plugins.html#install_plugin_from_di
|
|
|
4644
4644
|
`)?`${K}...`:X,W=new t({color:z1.index(8)}),H=[new l(q,W)];if(V>0){let z=new t({color:Z.success});for(let U=1;U<=V;U++)H.push(new l(" ")),H.push(new l(`[${U}]`,z))}return new q6({padding:H0.only({bottom:0}),child:new E6({crossAxisAlignment:"start",children:[new q6({padding:H0.only({right:1}),child:new _1({text:new l("•",new t({color:z1.index(8)}))})}),new i6({child:new _1({text:new l("",void 0,H)})})]})})}}class xy1 extends p0{createState(){return new qQ6}}class qQ6 extends u0{_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 t({color:z1.red}),Z=new t({color:this._visible?z1.red:z1.transparent()});return new E6({children:[new _1({text:new l("⏺",Z)}),new Q0({width:1}),new _1({text:new l("Replay",Q)})]})}}class vy1 extends x6{entry;width;constructor({key:J,entry:Q,width:Z}){super({key:J});this.entry=Q,this.width=Z}build(J){let Z=$6.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 t({color:Z,dim:!0}))}),M=new _1({text:new l(q,new t({color:Z,dim:!0}))});return new I8({onClick:()=>k2(J,Y.link),cursor:"pointer",child:new Q0({width:this.width,height:1,child:new q6({padding:H0.horizontal(1),child:new E6({children:[new i6({child:new BC(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 UU8(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 fy1{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(J6((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=UU8(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,agentMode:Y.agentMode}})}}U0();N8();class hy1{currentId=null;current=null;subscribeTimer=null;subscription=null;listeners=[];threadService=null;scrollController=new Z7;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(XM()).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 WQ6(J,Q){switch(J){case"update-available":return[new l("A newer Amp is available. Run ",new t({color:Q.foreground,dim:!0})),new l("amp update",new t({color:Q.warning}))];case"updated":return null;case"updated-with-warning":return[new l("Update complete, run ",new t({color:Q.foreground,dim:!0})),new l("amp update",new t({color:Q.warning})),new l(" to see warnings",new t({color:Q.foreground,dim:!0}))];case"update-error":return[new l("Update failed, run ",new t({color:Q.foreground,dim:!0})),new l("amp update",new t({color:Q.warning})),new l(" to see warnings",new t({color:Q.foreground,dim:!0}))];case"hidden":return null}}async function LU8(J){return new Promise((Q)=>{NU8("git",["branch","--show-current"],{cwd:J},(Z,Y)=>{if(Z){Q(null);return}let X=Y.trim();Q(X||null)})})}class MQ6 extends p0{dependencies;constructor(J){super();this.dependencies=J}createState(){return new Y51}}class Y51 extends u0{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 hy1;previewThread=null;todoScrollController=(()=>{let J=new Z7;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 wS1;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 H6(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 g7(q,K,this.widget.dependencies.configService)},G=tI1();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 bj1(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 g7(Z,void 0,this.widget.dependencies.configService)},Q=tI1();this.newsFeedReader=new hj1(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(`
|
|
4645
4645
|
`);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),F9.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 t({color:J.foreground,dim:!0}));if(this.isExiting)return new l("Exiting...",new t({color:J.foreground,dim:!0}));if(this.isConfirmingExit)return new l("",void 0,[new l("Ctrl+C",new t({color:Q.keybind})),new l(" again to exit",new t({color:J.foreground,dim:!0}))]);if(this.isConfirmingClearInput)return new l("",void 0,[new l("Esc",new t({color:Q.keybind})),new l(" again to clear input",new t({color:J.foreground,dim:!0}))]);if(this.isShowingHelp)return new l("",void 0,[new l("Escape",new t({color:Q.keybind})),new l(" to close help",new t({color:J.foreground,dim:!0}))]);if(this.showImageUnsupportedHint){let Y=this.getEffectiveAgentMode(),X=dy1(Y);return new l("",void 0,[new l("Images aren't supported in ",new t({color:J.warning,dim:!1})),new l(Y,new t({color:X})),new l(" mode.",new t({color:J.warning,dim:!1}))])}if(this.isProcessing()||this.bashInvocations.length>0){if(this.isConfirmingCancelProcessing)return new l("",void 0,[new l("Esc",new t({color:Q.keybind})),new l(" again to cancel",new t({color:J.foreground,dim:!0}))]);return new l("",void 0,[new l("Esc",new t({color:Q.keybind})),new l(" to cancel",new t({color:J.foreground,dim:!0}))])}if(this.statusMessage)return new l(this.statusMessage,new t({color:J.foreground,dim:!0}));let Z=WQ6(this.updateState,J);if(Z)return new l("",void 0,Z);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 b3.getOrCreateForThread(Z,X),K=await BT(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=iB(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(j3)}catch(Z){return x.error("Failed to get affected files:",Z),[]}};textController=new iZ;messageScrollControllers=new Map;getMessageScrollController(J){if(!this.messageScrollControllers.has(J))this.messageScrollControllers.set(J,new Z7);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(cC1(Y))}}_handleTextCopy(J){if(J&&J.length>0)this.toastController.show("Selection copied to clipboard","success",2000)}textFieldKey=new o7("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=iB(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}),S8.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}),S8.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 Yy1(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 Gy1(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=f0.file(process.cwd()),X=C6(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,skillService:this.widget.dependencies.skillService,openInEditor:this.openInEditor,takeImageAttachments:()=>{let G=this.imageAttachments;return this.setState(()=>{this.imageAttachments=[]}),G},setImageAttachments:(G)=>{this.setState(()=>{this.imageAttachments=G})},editorDispatch:(G)=>{switch(G.type){case"set-input":this.textController.clear(),this.textController.insertText(G.input);break;case"insert-text":this.textController.insertText(G.text);break;case"clear":this.textController.clear();break}},submitMessage:(G)=>{return this.proceedWithUserMessage(G)},exitApp:this.exitApplication,openHelp:()=>{this.setState(()=>{this.isShowingHelp=!0})},settingsStorage:this.widget.dependencies.settingsStorage,clientId:this.widget.dependencies.clientId,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 R91("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 Ar({filesystem:this.widget.dependencies.worker.fs.fileSystemReader(),configService:this.widget.dependencies.configService,threadService:this.widget.dependencies.threadService},Q.mainThread,G)).map((K)=>({uri:K.uri,type:K.type}))},openIdePicker:()=>{this.openIdePicker()},getAgentMode:()=>{return this.agentModeController?.getMode()??null},setAgentMode:(G)=>{this.agentModeController?.setMode(G)},toggleAgentMode:this.toggleAgentMode,getEffectiveAgentMode:()=>this.getEffectiveAgentMode(),getEditorText:()=>this.textController.text,workspace:this.widget.dependencies.workspace??null,completionBuilder:this.getCompletionBuilder(),threads:this.threadsForPicker,clusters:this.clustersForPicker,previewController:this.threadPreviewController,isLoadingThreads:this.isLoadingThreads,filterByWorkspace:this.filterThreadPickerByWorkspace,currentWorkspace:X,threadViewStates:this.widget.dependencies.workerController.threadViewStates,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 fy1(this.widget.dependencies.threadHistoryService);this.threadLoadSubscription=J.observeThreadSummaries("").subscribe({next:(Q)=>{this.setState(()=>{this.threadsForPicker=Q,this.clustersForPicker=HJ6(Q),this.isLoadingThreads=!1})},error:()=>{this.setState(()=>{this.isLoadingThreads=!1})}})}updateGitBranch=async()=>{let J=await LU8(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===lB).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===lB};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=j86(()=>{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(!sk(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>=eF)return!1;let Z=FC(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 v$(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=iB(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();F9.instance.on("key",()=>{this.lastUserInteractionTime=Date.now()}),F9.instance.on("mouse",()=>{this.lastUserInteractionTime=Date.now()}),F9.instance.on("paste",()=>{this.lastUserInteractionTime=Date.now()}),this.autocompleteFocusNode.addListener((Z)=>{S8.instance.addPostFrameCallback(()=>{this.setState(()=>{this.isTextfieldAndAutocompleteFocused=Z.hasFocus})})}),H6(this.widget.dependencies.configService.config).then((Z)=>{this.paletteConfig=Z,this.agentModeController=new cj1({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=K06(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})}),LC1((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=Z81(this.widget.dependencies.configService).pipe(U5((Z)=>Z!=="pending"),J6((Z)=>Y81(Z)?Z.mysteriousMessage??null:null),H4((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 L81(new Map([[new M81(Y51.MYSTERY_SEQUENCE),new Lg]])),this.mysteryKeyInterceptorUnsubscribe=F9.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(LC1(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(cC1("")),this.shouldUseProgressBar())process.stdout.write(S46())}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()},Y51.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=Wj1(this.widget.dependencies.internalAPIClient,this.widget.dependencies.configService,()=>{let J=this.agentModeController?.getMode();return(J&&z9(J)||this.randomAd===null)&&qj1(this.lastUserInteractionTime)},this.widget.dependencies.codebaseContextService).subscribe({next:(J)=>{if(J){let Q=DU8(16).toString("hex");this.lastAdImpressionId=Q,Promise.resolve().then(() => (Z51(),Q51)).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}),S8.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 k2(this.context,X);return}if(J==="disable-librarian"){let X=await this.widget.dependencies.settingsStorage.get("tools.disable")??[];if(!X.includes(MK))await this.widget.dependencies.settingsStorage.set("tools.disable",[...X,MK],"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 b3.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}),Z41({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 v$(Q.getSettingsFilePath())}catch(Z){let Y=Z instanceof Error?Z.message:String(Z);await this.showErrorMessage(`Failed to open settings: ${Y}`)}};cancelStreamingMessage=async()=>{await b3.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(`
|
|
4646
4646
|
`);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=a2(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)Z41({agentMode:Y});this.scrollMessageViewToBottom(),this.setState(()=>{if(this.imageAttachments=[],!this.hasSubmittedFirstMessage)this.hasSubmittedFirstMessage=!0}),S8.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();Z41({agentMode:Q}).catch((Z)=>{x.warn("Failed to save session state on exit:",Z)}).finally(()=>{F9.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=MU8();if(J===Q)return"~";if(J.startsWith(Q+ug.sep))return"~"+J.slice(Q.length);return J}shorten(J){let Q=J.split(ug.sep).filter(Boolean);if(Q.length<=5)return J;return[Q.slice(0,2).join(ug.sep),"…",Q.slice(-2).join(ug.sep)].join(ug.sep)}build(J){let Q=_4.of(J),Z=$6.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&&z9(V.thread.agentMode),q=this.widget.dependencies.features.some((K4)=>K4.name===Mj1.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=SC(K4).items,I=K4,P={};let W4=nE({messages:this.replayDisplayedMessages});T=Array.isArray(W4)?W4:[]}let y=I?.id,k=I,v=A?this.replayDisplayedMessages.length===0:this.isTranscriptEmpty(),m=(K4)=>new w91({key:new o7(`preview-message-view-${K4.id}`),items:SC(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 v0({mainAxisSize:"max",children:[new i6({child:new Q0}),new q6({padding:H0.all(2),child:new j4({child:new _1({text:new l("Thread too long for preview",new t({color:X.mutedForeground,dim:!0}))})})})]}):m(p):v?new P91({agentMode:this.getEffectiveAgentMode(),mysteriousMessage:this.mysteriousMessage,mysterySequenceProgress:this.mysterySequenceProgress,onShowMysteryModal:this.handleShowMysteryModal,userDisplayBalanceInfo:this.userDisplayBalanceInfo}):new w91({key:y?new o7(`message-view-${y}`):void 0,items:E,subagentToolsByParentID:P,controller:y?this.getMessageScrollController(y):new Z7,autofocus:!1,onCopy:A?void 0:this._handleTextCopy.bind(this),thread:k,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),X1=this.getCurrentEphemeralError(),e=Q.size.width<40,c=D.mainThread?Un(D.mainThread):void 0,J1=H91(J),K1=this.buildBottomWidget(X1,M,X,Z,D,T,a,U,A,c,this.cacheTimerState??void 0,Q,J1),D1=new h81({threadViewState:D.viewState,threadTokenUsage:c,threadID:y??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:e,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}),r=new v81({bashInvocations:this.bashInvocations}),o=[];if(z&&this.currentThreadFeedEntry)o.push(new vy1({entry:this.currentThreadFeedEntry,width:Q.size.width}));let i=this.getEffectiveAgentMode(),U1=this.currentShellModeStatus,k1=dy1(i),s=!U1?i.length+1:0,f1=Q.capabilities.animationSupport,T1=f1==="disabled"?0:f1==="slow"?30:60,V0=AK(i)?.uiHints?.fasterAnimation?3:1,C1=T1>0&&this.agentModePulseSeq>0?new f9({children:[K1,new x5({top:0,left:1,right:1,height:1,child:new Cy1({color:k1,trigger:this.agentModePulseSeq,fps:T1,speed:V0,leftOffset:s})})]}):K1;o.push(new i6({child:b}),r);let o1=new f9({children:[new v0({mainAxisSize:"min",children:[H?new fk1({ad:this.randomAd,onButtonClick:async()=>{let K4=this.randomAd;if(this.lastAdImpressionId)Promise.resolve().then(() => (Z51(),Q51)).then(({recordAdEvent:w9})=>{let J5=this.widget.dependencies.worker.thread,i$=J5.messages[J5.messages.length-1];w9("clicked",{adId:K4.id,advertiserId:K4.advertiserId,threadId:J5.id,messageId:i$?.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 k2(this.context,K4.shortDestinationUrl)){let J5=F9.instance.tuiInstance.clipboard.isOsc52Supported();this.setState(()=>{this.adActionModal={showCopyOption:J5,url:K4.shortDestinationUrl}})}}}):new Q0({height:0}),new b0({constraints:new M6(0,Q.size.width,0,a),child:C1})]}),U?new x5({top:0,left:0,right:0,child:new OQ6({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,w9=Math.max(4,this.bottomGridDragStartHeight-W4),J5=Math.min(w9,a),i$=Math.floor(J5);if(this.bottomGridUserHeight!==i$)this.setState(()=>{this.bottomGridUserHeight=i$})},onRelease:()=>{this.bottomGridDragStartY=null,this.bottomGridDragStartHeight=null}})}):new Q0({height:0})]});o.push(o1,new Q0({height:1,child:new q6({padding:H0.horizontal(1),child:D1})}));let F1=new v0({crossAxisAlignment:"stretch",mainAxisSize:"max",children:o}),O1=A&&L?.showIndicator!==!1?new f9({children:[F1,new x5({top:0,left:0,child:new xy1})]}):F1,A1=new P8(()=>{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 P8(()=>{return this.onExitPressed(),"handled"}),S1=new P8(()=>{return this.setState(()=>{this.isShowingConsoleOverlay=!this.isShowingConsoleOverlay}),"handled"}),p1=new P8(()=>{return this.setState(()=>{this.isShowingMCPStatusModal=!this.isShowingMCPStatusModal}),"handled"}),m1=new P8(()=>{return NJ.instance.toggleAll(),"handled"}),a1=new P8(()=>{return this.widget.dependencies.configService.getLatest().then((K4)=>{EG("internal.showDetailedCosts",!(K4.settings["internal.showDetailedCosts"]??!1))}),"handled"}),G0=new P8(()=>{return F9.instance.toggleFrameStatsOverlay(),"handled"}),K0=new P8(()=>{return F9.instance.tuiInstance.getScreen().markForRefresh(),S8.instance.requestFrame(),"handled"}),R0=new P8(()=>{return this.toggleAgentMode(),"handled"}),_6=new P8(()=>{let W4=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:w9}=this.widget.dependencies,J5=w9.mainThread?.id;return J5?this.getMessageScrollController(J5):null})();if(W4){let w9=Math.max(Math.floor(Q.size.height*0.4),10),J5=Q.size.height-w9;W4.animatePageUp(J5,100)}return"handled"}),m6=new P8(()=>{let W4=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:w9}=this.widget.dependencies,J5=w9.mainThread?.id;return J5?this.getMessageScrollController(J5):null})();if(W4){let w9=Math.max(Math.floor(Q.size.height*0.4),10),J5=Q.size.height-w9;W4.animatePageDown(J5,100)}return"handled"}),v4=new P8(()=>{let W4=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:w9}=this.widget.dependencies,J5=w9.mainThread?.id;return J5?this.getMessageScrollController(J5):null})();if(W4)W4.animateTo(0,100);return"handled"}),M4=new P8(()=>{let W4=this.isShowingPalette&&this.previewThread?this.threadPreviewController.scrollController:(()=>{let{threadState:w9}=this.widget.dependencies,J5=w9.mainThread?.id;return J5?this.getMessageScrollController(J5):null})();if(W4)W4.animateTo(Number.MAX_SAFE_INTEGER,100);return"handled"}),O9=new P8(()=>{if(!this.isTextfieldAndAutocompleteFocused)return"ignored";let{threadState:K4}=this.widget.dependencies;if(!K4.mainThread?.messages.some((w9)=>w9.role==="user"||iE(w9)))return"ignored";return this.setState(()=>{this.isMessageViewInSelectionMode=!0}),"handled"}),w0=new P8((K4)=>{if(K4.direction==="previous")this.navigateHistoryPrevious();else this.navigateHistoryNext();return"handled"}),a0=new P8(()=>{if(!this.isTextfieldAndAutocompleteFocused)return"ignored";return j81().then(async(K4)=>{if(K4)try{this.handleInsertImage(K4)}finally{try{let{unlink:W4}=await import("node:fs/promises");await W4(K4)}catch{}}}),"handled"}),s6=new Map([[X4.ctrl("c"),new zg],[X4.ctrl("l"),new Dg],[X4.ctrl("o"),new P81],[X4.ctrl("v"),new Wg],[X4.alt("s"),new MC],[X4.ctrl("s"),new MC],[X4.alt("p"),new Ng],[X4.ctrl("r"),new Ug],[X4.alt("d"),new Bg],[X4.ctrl("t"),new Mg],[X4.key("PageUp"),new O81],[X4.key("PageDown"),new w81],[X4.key("Home"),new E81],[X4.key("End"),new I81],[X4.key("Escape"),new Hg],[X4.ctrl("p"),new LC("previous")],[X4.ctrl("n"),new LC("next")],[X4.key("Tab"),new Ag]]);if(!g3())s6.set(X4.key("ArrowUp"),new Ag);if(!1)s6.set(X4.alt("c"),new Fg);let d8=new P8(()=>{if(this.isShowingStandalonePalette())return"handled";return this.showCommandPalette(),"handled"}),O7=new P8(()=>{return this.toggleThreadPickerWorkspaceFilter(),"handled"}),b5=new P8(()=>{if(this.mysteriousMessage)this.handleShowMysteryModal();return"handled"}),$7=new Map([[Hg,A1],[Dg,K0],[MC,R0],[P81,d8],[Wg,a0],[Fg,S1],[B81,p1],[Ug,m1],[Bg,a1],[Ng,G0],[Mg,O7],[zg,P1],[O81,_6],[w81,m6],[E81,v4],[I81,M4],[Ag,O9],[LC,w0],[Lg,b5]]),c8=[O1];if(this.isShowingConsoleOverlay)c8.push(new qy1);if(this.isShowingHelp&&this.paletteConfig)c8.push(new zy1({commands:this.getPaletteCommands().getAllCommands()}));if(this.isShowingMCPStatusModal)c8.push(new Zk1({servers:this.mcpServers,onDismiss:()=>{this.setState(()=>{this.isShowingMCPStatusModal=!1})}}));if(this.isShowingMysteriousMessageModal&&this.mysteriousMessage)c8.push(new _y1({message:this.mysteriousMessage,onDestruct:this.handleDestructMysteriousMessage}));if(this.adActionModal)c8.push(new hk1({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 F9.instance.tuiInstance.clipboard.writeText(W4),this.setState(()=>{this.displayMessage=new nZ("Link copied to clipboard")})}catch(w9){x.error("Failed to copy to clipboard",{error:w9}),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;c8.push(new jy1({servers:this.pendingMCPServers,onAlwaysTrust:K4.trustAlways.bind(K4),onTrustOnce:K4.trustOnce.bind(K4),onOpenSettings:this.handleMCPTrustOpenSettings,onDismiss:K4.deny.bind(K4)}))}if(this.pendingOAuthRequest)c8.push(new ky1({request:this.pendingOAuthRequest,onDismiss:()=>{this.setState(()=>{this.pendingOAuthRequest=null})}}));if(this.isShowingFileChangesOverlay)c8.push(new yS1({threadData:D}));if(this.isShowingContextDetailOverlay){let K4=this.threadCostInfo?.costBreakdownURL;c8.push(new Wy1({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?()=>{k2(J,K4)}:void 0}))}if(this.isShowingConfirmationOverlay)c8.push(new Vy1({details:this.confirmationOverlayContent}));let l9=this.getCommandPaletteContext(J);if(l9&&this.isShowingPalette&&this.paletteConfig)c8.push(new j4({child:new $y1({commandContext:l9,mainThread:D.mainThread,commands:this.getPaletteCommands(),onDismiss:this.dismissPalette,showOptions:this.paletteShowOptions??void 0})}));if(this.isShowingIdePicker)c8.push(new Uy1({onCancel:this.dismissIdePicker,onSelect:this.handleIdeSelection,jetbrainsMode:this.widget.dependencies.jetbrainsMode}));let Y8=new f9({children:c8});if(this.isShowingJetBrainsInstaller)return new tA({child:new FJ({actions:$7,child:new ZX({shortcuts:s6,debugLabel:"jetbrains-installer-shortcuts",child:new Ty1({configService:this.widget.dependencies.configService,ideClient:this.widget.dependencies.ideClient,onExit:()=>process.exit(0),onContinue:this.dismissJetBrainsInstaller})})})});return new Xz({controller:this.toastController,child:new tA({child:new ES1({controller:this.toastController,child:new FJ({actions:$7,child:new ZX({shortcuts:s6,debugLabel:"main-app-shortcuts",child:Y8})})})})})}buildScrollableTodoList(J,Q,Z){return new LQ6({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 Hy1({error:J,ampURL:this.widget.dependencies.ampURL,onResponse:this.handleEphemeralErrorResponse});if(Q){if(this.displayMessage)this.handleDisplayMessageDismiss();return new Ky1({confirmationRequest:Q,onResponse:this.onConfirmationResponse,onShowOverlay:this.showConfirmationOverlay})}if(this.displayMessage)return new Sy1({message:this.displayMessage,onDismiss:this.handleDisplayMessageDismiss});let D=y81(Y),M=this.agentModeController?.isInRestrictedFreeMode()??!1,L=new HO({key:this.textFieldKey,controller:this.textController,triggers:q?[]:[new JN],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:F9.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 o=this.previousThreadIdForHint;if(o)this.setState(()=>{this.previousThreadIdForHint=null}),this.textController.text=`following: @${o} `},onDoubleAtTrigger:q?void 0:()=>{let o=this.textController.text,i=this.textController.cursorPosition,k1=o.slice(0,i).lastIndexOf("@@");this.showCommandPalette({type:"standalone",commandId:"attach-plan",onBeforeExecute:()=>{if(k1!==-1){let s=this.textController.text,f1=s.slice(0,k1)+s.slice(k1+2);this.textController.text=f1,this.textController.cursorPosition=k1}},onSubmit:()=>{this.dismissPalette()},onCancel:()=>{this.dismissPalette()}})}}),A=X.mainThread?.queuedMessages??[],E=Array.isArray(G)&&G.length>0,P=Array.isArray(A)&&A.length>0?new yy1({queuedMessages:A}):void 0,T=E?this.buildScrollableTodoList(G,this.isTextfieldAndAutocompleteFocused&&!M,Y):void 0,y=[],k=this.currentShellModeStatus;if(k)y.push({child:new _1({text:new l(k==="hidden"?"shell mode (incognito)":"shell mode",new t({color:k==="hidden"?Y.app.shellModeHidden:Y.app.shellMode}))}),position:"top-left"});let m=this.connectedClientsStatus&&this.connectedClientsStatus.enabled?this.connectedClientsStatusExpanded?(this.connectedClientsStatus?.clientID?.length??7)+3:3:0,p=this.agentModeController?.getVisibleModes()??[];if(!k&&p.length>1){let o=this.previewThread,i=o?o.agentMode??this.getEffectiveAgentMode():this.getEffectiveAgentMode(),U1=dy1(i),k1=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker,s=o??k1.thread,f1=a2(s)>0,T1=this.agentModeSlideProgress!==null,V0,C1;if(T1){V0="top-left";let F1=z.size.width-i.length-4-m;C1=Math.floor(this.agentModeSlideProgress*F1)}else if(f1)V0="top-right",C1=m;else V0="top-left",C1=void 0;if(o)y.push({child:new _1({text:new l(i,new t({color:U1}))}),position:V0,offsetX:C1});else{let o1=!f1&&!T1,F1=new _1({text:new l(i,new t({color:U1}))});y.push({child:o1?new I8({child:F1,onClick:this.toggleAgentMode,cursor:"pointer"}):F1,position:V0,offsetX:C1})}}if(this.connectedClientsStatus&&this.connectedClientsStatus.enabled){let o=this.connectedClientsStatus,i=o.mode||"disconnected",U1=!!o.errorMessage,k1=o.clientID||"unknown",s,f1;if(U1)s="●",f1=z1.red;else if(i==="presence")s="○",f1=z1.yellow;else if(i==="connected"&&o.connected)s="●",f1=z1.green;else s="○",f1=z1.yellow;let T1=this.connectedClientsStatusExpanded?`${k1} ${s}`:s;y.push({child:new I8({child:new _1({text:new l(T1,new t({color:f1}))}),onClick:this.toggleConnectedClientsStatus,cursor:"pointer"}),position:"top-right",offsetX:-2})}let b=q?this.widget.dependencies.replayMode.thread.env?.initial.trees?.[0]?.uri:X.mainThread?.env?.initial.trees?.[0]?.uri,a;if(b)a=f0.parse(b).fsPath;else a=process.cwd();let X1=this.toHomeRelative(a),e=this.shorten(X1),c=!q&&this.currentGitBranch?`${e} (${this.currentGitBranch})`:e;if(y.push({child:new _1({text:new l(c,new t({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 t({color:Z.foreground,dim:!0})),new l("enter",new t({color:Y.app.keybind})),new l(" to reference the previous thread",new t({color:Z.foreground,dim:!0}))])}),position:"bottom-left"});let K1=this.previewThread,D1=this.widget.dependencies.getCurrentWorker()||this.widget.dependencies.worker;if(a2(D1.thread)>0&&!k&&!K1){let o=[],i=new t({color:Z.foreground,dim:!0}),U1=new l(" · ",i);if(W){let k1=W.totalInputTokens/W.maxInputTokens,s=Math.round(k1*100),f1=Math.max(0,Math.min(s,100)),T1=f81(k1,W.maxInputTokens),V0=i;if(T1==="danger")V0=new t({color:Z.destructive});else if(T1==="warning")V0=new t({color:Z.warning});else if(T1==="recommendation")V0=new t({color:Y.app.recommendation});let C1=Math.round(W.maxInputTokens/1000);o.push(new l(`${f1}% of ${C1}k`,V0))}if(U&&this.threadCostInfo){let k1=b91(this.threadCostInfo,{colors:{foreground:Z.foreground},dim:!0});if(k1.length>0){if(o.length>0)o.push(U1);o.push(...k1)}}if(U&&H){let k1=X.viewState.state==="active"&&X.viewState.inferenceState==="idle",s=C86(H,k1);if(s){if(o.length>0)o.push(U1);let f1=i;if(s.urgency==="warning")f1=new t({color:Z.warning});o.push(new l(s.text,f1))}}if(o.length>0){let k1=new _1({text:new l("",void 0,o)});y.push({child:U?new I8({child:k1,onClick:this.showContextDetailOverlay,cursor:"pointer"}):k1,position:"top-left"})}}return new CS1({leftChild:new i6({child:L}),rightChild1:P,rightChild2:T,maxHeight:V,overlayTexts:y,borderColor:M||!this.isTextfieldAndAutocompleteFocused?z1.index(8):void 0,hasBanner:K,userHeight:this.bottomGridUserHeight,onInitializeHeight:(o)=>{this.setState(()=>{this.bottomGridUserHeight=Math.min(o,V)})},onDrag:(o)=>{if(this.bottomGridDragStartY===null)this.bottomGridDragStartY=Math.floor(o.localPosition.y),this.bottomGridDragStartHeight=this.bottomGridUserHeight;let i=Math.floor(o.localPosition.y)-this.bottomGridDragStartY,U1=Math.max(4,this.bottomGridDragStartHeight-i),k1=Math.min(U1,V),s=Math.floor(k1);if(this.bottomGridUserHeight!==s)this.setState(()=>{this.bottomGridUserHeight=s})},onDragRelease:()=>{this.bottomGridDragStartY=null,this.bottomGridDragStartHeight=null},enableResize:!K})}}async function cy1(J){if((await J.configService.getLatest()).settings["terminal.animation"]===!1)F9.instance.tuiInstance.setOptions({queryOptions:{animationDisabled:!0}});let Y=()=>null,G=!1,V=new rH(G,1000,J.inspectorPort),K=J.features.find((A)=>A.name===Mj1.AMP_CONNECT)?.enabled??!1,q=new xk1({threadService:J.threadService,worker:J.worker,builder:(A,E,I,P,T,y)=>{if(Y=T,J.threadDependencies&&K)pj1(J.threadDependencies,J.configService,T,P,J.connectedClientsService,J.startNewThread,J.switchToThread,J.clientId).catch((m)=>{x.error("Failed to start automatic presence:",m)});let k=T(),v={...J,worker:k,threadID:k.thread.id};return new MQ6({...v,threadState:E,workerController:I,switchWorker:P,getCurrentWorker:T,recentThreadIDs:y})}}),W=new jS1({configService:J.configService,child:q}),H=new Yk1({configService:J.configService,child:W}),z=new BS1(H),U=new $6({data:AC.fromBaseTheme(f$.default()),child:z});try{await $j1(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(() => (dj1(),m96));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 dy1(J){let Z=AK(J)?.uiHints?.secondaryColor;if(Z)return z1.rgb(Z.r,Z.g,Z.b);return AU8(J)}class LQ6 extends p0{props;constructor(J){super();this.props=J}createState(){return new AQ6}}class AQ6 extends u0{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 E6({crossAxisAlignment:"stretch",children:[new i6({child:new f5({controller:Z,autofocus:!1,child:new vk1({todos:Q})})}),new aQ({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 OQ6 extends x6{props;constructor(J){super();this.props=J}build(J){return new I8({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 AU8(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 z1.index(Z[Y])}Xj1();try{if(process.platform==="win32")await Promise.resolve().then(() => K6(tC(),1))}catch{}if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(J){JZ.write(`Failed to change directory to ${process.env.AMP_PWD}: ${J}
|
|
4647
|
-
`)}var Lv1=Mv1.join(eq0||Mv1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function uM8(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 CV(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 Ov1(J){try{await bM8(Mv1.dirname(Lv1),{recursive:!0}),await mM8(Lv1,J,"utf-8")}catch(Q){x.debug("Failed to save last thread ID",Q)}}async function pM8(){try{return(await aX6(Lv1,"utf-8")).trim()}catch(J){return null}}function dM8(J){return!!(J&&(J.endsWith("@sourcegraph.com")||J.endsWith("@ampcode.com")||J==="auth-bypass-user@example.com"))}async function cM8(J){try{let Q=await G5.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 lX6=[{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??j$,description:`Custom settings file path (overrides the default location ${j$})`},{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 ${fA})`},{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:g3(),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:xW.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")}],iX6=(J)=>("deprecated"in J)&&J.deprecated===!0,lM8=(J)=>("hidden"in J)&&J.hidden===!0,iM8=(J)=>("default"in J),nM8=(J)=>("default"in J)?J.default:void 0;function aM8(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(C$.unknownCommand(Z),1,V)}}var oX6=null;function pM5(){return oX6}function Wu(J){let Q=tT0({configService:J.configService,filesystem:J.fileSystem});return{...J,getThreadEnvironment:S61,vfs:lE0({os:J.fileSystem},J.configService.config),skillService:Q,fileChangeTrackerStorage:new Wv(J.fileSystem),generateThreadTitle:ol0,deleteThread:(Z)=>J.threadService.delete(Z)}}var wv1=f0.file(gM8.homedir()),rX6=process.env.XDG_CONFIG_HOME?f0.file(process.env.XDG_CONFIG_HOME):n0.joinPath(wv1,".config");async function l$(J,Q){aU0("0.0.
|
|
4647
|
+
`)}var Lv1=Mv1.join(eq0||Mv1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function uM8(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 CV(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 Ov1(J){try{await bM8(Mv1.dirname(Lv1),{recursive:!0}),await mM8(Lv1,J,"utf-8")}catch(Q){x.debug("Failed to save last thread ID",Q)}}async function pM8(){try{return(await aX6(Lv1,"utf-8")).trim()}catch(J){return null}}function dM8(J){return!!(J&&(J.endsWith("@sourcegraph.com")||J.endsWith("@ampcode.com")||J==="auth-bypass-user@example.com"))}async function cM8(J){try{let Q=await G5.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 lX6=[{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??j$,description:`Custom settings file path (overrides the default location ${j$})`},{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 ${fA})`},{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:g3(),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:xW.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")}],iX6=(J)=>("deprecated"in J)&&J.deprecated===!0,lM8=(J)=>("hidden"in J)&&J.hidden===!0,iM8=(J)=>("default"in J),nM8=(J)=>("default"in J)?J.default:void 0;function aM8(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(C$.unknownCommand(Z),1,V)}}var oX6=null;function pM5(){return oX6}function Wu(J){let Q=tT0({configService:J.configService,filesystem:J.fileSystem});return{...J,getThreadEnvironment:S61,vfs:lE0({os:J.fileSystem},J.configService.config),skillService:Q,fileChangeTrackerStorage:new Wv(J.fileSystem),generateThreadTitle:ol0,deleteThread:(Z)=>J.threadService.delete(Z)}}var wv1=f0.file(gM8.homedir()),rX6=process.env.XDG_CONFIG_HOME?f0.file(process.env.XDG_CONFIG_HOME):n0.joinPath(wv1,".config");async function l$(J,Q){aU0("0.0.1765797153-g028cd2");let Z=IH1({storage:J.settings,secretStorage:J.secrets,workspaceRoots:t1.of([f0.file(process.cwd())]),defaultAmpURL:J.ampURL,homeDir:wv1,userConfigDir:rX6}),{initializeCLITelemetry:Y}=await Promise.resolve().then(() => (Z51(),Q51));Y(Z);let X=await Z.getLatest();x.debug("Global configuration initialized",{settingsKeys:Object.keys(X.settings)});let{toolService:G,dispose:V}=qr0({configService:Z}),K=new Map,q=()=>K.clear(),W=new uU1(Z,J.settings.getWorkspaceRootPath()),H=AE0({configService:Z,trustStore:W,createOAuthProvider:async(X1,e,c)=>{let J1=`${X1}:${e}`,K1=K.get(J1);if(K1)return x.debug("Reusing existing OAuth provider for server",{serverName:X1,serverUrl:e}),K1;x.debug("Creating OAuth provider for server",{serverName:X1,serverUrl:e});let D1=(async()=>{let r=new OM(J.secrets),o=await r.getClientInfo(X1,e),i=c?.scopes??o?.scopes,U1=b06();x.info("OAuth headless mode check",{useHeadless:U1,executeMode:J.executeMode,envVar:process.env.AMP_HEADLESS_OAUTH,isTTY:o9.isTTY});let k1=void 0;if(U1)k1=J.executeMode?h06():f06(X1);let s=new WU1({storage:r,serverName:X1,serverUrl:e,clientId:c?.clientId??o?.clientId,clientSecret:c?.clientSecret??o?.clientSecret,authUrl:c?.authUrl??o?.authUrl,tokenUrl:c?.tokenUrl??o?.tokenUrl,scopes:i,headlessAuthHandler:k1});return x.debug("OAuth provider created",{serverName:X1,serverUrl:e,hasManualClientId:!!(c?.clientId??o?.clientId),willUseDCR:!(c?.clientId??o?.clientId),scopes:i,headlessMode:U1,executeMode:J.executeMode}),s})();return K.set(J1,D1),D1}}),z=j01({configService:Z,filesystem:p9,spawn:UA}),{initializeToolProviders:U,startToolProviders:D}=await Promise.resolve().then(() => (cX6(),dX6)),M;if(J.executeMode){let X1=await U({toolService:G,providers:[H,z],initialTimeout:15000});M=X1.registrations;for(let[e,c]of X1.initErrors)x.warn(`${e} provider initialization slow or failed:`,c)}else M=D({toolService:G,providers:[H,z]});if(Q.jetbrains)oE("JetBrains");else if(Q.ide&&D66())oE("VS Code");else if(Q.ide&&M66())oE("Neovim");if(J.executeMode)oU0(!0);let L,A=R7.status.pipe(J6((X1)=>Boolean(X1.connected&&X1.authenticated)),H4()).subscribe((X1)=>{if(X1){if(!L)L=G.registerTool(on0)}else L?.dispose(),L=void 0}),E;if(!J.executeMode){let X1=await J.settings.get("fuzzy.alwaysIncludePaths")??[];E=new u61(process.cwd(),{alwaysIncludePaths:X1},!0)}else E=new class extends u61{async start(){}async query(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};if(!await J.secrets.get("apiKey",J.ampURL)){if(o9.write(`No API key found. Starting login flow...
|
|
4648
4648
|
`),!await oM8(J))await hA(),process.exit(1)}let I=await XC0({isDevelopment:!1}),P=new HP1(I,Z),T=new eI1(I,{lazy:!0}),y=Q.notifications!==void 0?Q.notifications:!J.executeMode,k=Hr0({playNotificationSound:async(X1)=>{if(y){Wr0(X1);let e=Zj1(),c=Yj1();if((!e||c)&&X.settings["notifications.system.enabled"]!==!1){if(X1==="idle")process.stdout.write("\x1B]777;notify;Amp;Agent is ready\x1B\\");else if(X1==="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 v=sl0({threadService:P,threadHistoryService:T,configService:Z,isExtensionDevelopment:!1}),m;R7.status.subscribe((X1)=>{m=X1});let p=new q$1({workspaceRoots:[f0.file(process.cwd())],getCurrentFile:()=>{if(!m?.openFile)return;try{return f0.parse(m.openFile)}catch(X1){x.warn("Failed to parse current file URI",{uri:m.openFile,error:X1});return}},getOpenFiles:()=>{if(!m?.visibleFiles?.length)return[];let X1=m.openFile;return m.visibleFiles.filter((e)=>e!==X1).map((e)=>{try{return f0.parse(e)}catch(c){return x.warn("Failed to parse visible file URI",{uri:e,error:c}),null}}).filter((e)=>e!==null)}}),b=new Gj1,a={codebaseContextService:p,configService:Z,toolService:G,mcpService:H,trustStore:W,threadService:P,threadHistoryService:T,threadSyncService:v,threadStorage:I,secretStorage:J.secrets,settingsStorage:J.settings,fuzzyServer:E,notificationService:k,fileSystem:Q.jetbrains||Q.ide?pE0:p9,terminal:b};return{...a,async asyncDispose(){if(a.mcpService.hasAuthenticatingClients())x.info("Waiting for OAuth authentication to complete before exit..."),await a.mcpService.waitForAuthentication();for(let X1 of M.values())X1.dispose();await a.mcpService.dispose(),q(),await a.threadService.asyncDispose(),a.configService.unsubscribe(),V(),a.fuzzyServer.dispose(),a.threadSyncService.dispose(),a.settingsStorage[Symbol.dispose](),A.unsubscribe(),L?.dispose()}}}async function oM8(J){if(!J.executeMode){if(!await yC1("Would you like to log in to Amp? [(y)es, (n)o]: "))return o9.write(`Login cancelled. Run the command again to retry.
|
|
4649
4649
|
`),!1}return await sX6(J)}async function sX6(J){let Q=hM8(32).toString("hex"),Z=await kC1(J.ampURL,Q),Y=new AbortController;try{await uD(Z,Y.signal)}catch(G){x.error("Error opening browser",{error:G})}let X=await kC1(J.ampURL,Q,!1);o9.write(`If your browser does not open automatically, visit:
|
|
4650
4650
|
|
|
@@ -4654,7 +4654,7 @@ ${A6.blue.bold(X)}
|
|
|
4654
4654
|
Login successful! You can now use the Amp CLI.
|
|
4655
4655
|
`),!0}catch(G){return x.error("Login failed",{error:G}),JZ.write(`
|
|
4656
4656
|
Login failed: ${G instanceof Error?G.message:String(G)}
|
|
4657
|
-
`),!1}}function rM8(){let J=new IA().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)fT(),process.exit(0);let z=H.originalError??H;V06(z)}),J.option("-V, --version","Print the version number and exit",()=>{let z;try{z=`, ${lI(new Date("2025-12-15T11:
|
|
4657
|
+
`),!1}}function rM8(){let J=new IA().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)fT(),process.exit(0);let z=H.originalError??H;V06(z)}),J.option("-V, --version","Print the version number and exit",()=>{let z;try{z=`, ${lI(new Date("2025-12-15T11:17:49.235Z"))} ago`}catch{}o9.write(`0.0.1765797153-g028cd2 (released 2025-12-15T11:17:49.235Z${z??""})
|
|
4658
4658
|
`),process.exit(0)}),J.addHelpText("after",U66()),J.configureHelp({formatHelp:B66}),J.command("logout").description("Log out by removing stored API key").action(async(H,z)=>{let U=z.optsWithGlobals(),D=await zQ(U);await JL8(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 zQ(U);await eM8(D,await OC1(U,D.settings))});let Q=async(H,z,U)=>{IH1({storage:z.settings,secretStorage:z.secrets,workspaceRoots:t1.of([f0.file(process.cwd())]),defaultAmpURL:z.ampURL,homeDir:wv1,userConfigDir:rX6});let D={...z,executeMode:!1};await Av1(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 zQ(U);await nX6(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 zQ(U);await VL8(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 zQ(D);if(z.pick)JZ.write(`${A6.yellow("Warning:")} The --pick flag is deprecated. The picker is now shown by default.
|
|
4659
4659
|
`);if(z.last||H||M.executeMode)await GL8(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 zQ(D);await $L8(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 zQ(U);await nX6(U,D,z)}),Z.command("search <query>").alias("find").summary("Search threads").description(`Search for threads using a query DSL.
|
|
4660
4660
|
|
|
@@ -4670,8 +4670,8 @@ All matching is case-insensitive. File paths use partial matching.`).option("-n,
|
|
|
4670
4670
|
Or pipe via stdin: echo "your message" | amp --execute`);CV(Z,Q);let V=await l$(J,Q);oX6=V;let K=Wu(V),q=await cM8(V.configService),W=dM8(q?.email);if((J.executeMode||Q.streamJson)&&z9(Q.mode)&&!W)throw new C8(`Execute mode is not permitted with --mode '${Q.mode}'`,1);let H=async(b)=>{let a=await aX6(b,"utf-8"),X1=JSON.parse(a);if(!lX(X1.id))throw new C8(C$.invalidThreadId);return l51(V,{visibility:Y,agentMode:Q.mode,thread:X1})},z=async(b)=>{if(!lX(b))throw new C8(C$.invalidThreadId);try{let[X1,e]=await Promise.all([G5.getThreadLinkInfo({thread:b},{config:V.configService}),G5.getUserInfo({},{config:V.configService})]);if(X1.ok&&e.ok){let c=X1.result.creatorUserID,J1=e.result.id;if(c&&c!==J1&&!process.env.AMP_RESUME_OTHER_USER_THREADS_INSECURE)throw new C8(`Cannot resume thread created by another user.
|
|
4671
4671
|
|
|
4672
4672
|
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(X1){if(X1 instanceof C8)throw X1;x.warn("Failed to validate thread ownership in CLI, allowing to open",{error:X1})}let a=await V.threadService.get(b)??void 0;return x.info(`[fetchAndStartThread] Loaded thread ${b}, agentMode: ${a?.agentMode??"undefined"}`),l51(V,{visibility:Y,agentMode:a?void 0:Q.mode,thread:a})},U=async()=>{try{if(Q.threadId)return z(Q.threadId);else return l51(V,{visibility:Y,agentMode:Q.mode})}catch(b){if(b instanceof C8)throw b;throw await wm(b,Q.threadId),Error("handleError should have called process.exit()")}},D=async()=>{return l51(V,{visibility:Y,agentMode:Q.mode})};if(Q.format==="jsonl")JZ.write(`jsonl format is deprecated. Version "0.0.1752148945-gd8844f" or earlier is required to use jsonl format.
|
|
4673
|
-
`),await hA(),process.exit(1);if(J.executeMode&&Q.remote)await X46(X,G,V.configService),await V.asyncDispose(),process.exit(0);let M=await U();if(J.executeMode)r66(V.mcpService,J.settings),await w06(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 KB0();let b=eE({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)R7.selectConfig(a)}else E=!0}let I=s61("0.0.
|
|
4674
|
-
`);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Z=process.stdout.isTTY&&process.stderr.isTTY,Y=await t06({...J,workspaceTrust:{current:!0,changes:x_},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 a66(J.mcpConfig);Y=o66(Y,G)}let X=await Y.get("url","global");if(!X)X=zZ;if(!OF(X))x.info("Targeting custom Amp server",{ampURL:X});return Y=tW0(Y),{executeMode:Q,isTTY:Z,ampURL:X,settings:Y,secrets:$46(await OC1(J,Y))}}function sM8(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 tM8(){let J=sM8(process.argv);if(t16({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),uM8(x),x.info("Starting Amp CLI.",{version:"0.0.
|
|
4673
|
+
`),await hA(),process.exit(1);if(J.executeMode&&Q.remote)await X46(X,G,V.configService),await V.asyncDispose(),process.exit(0);let M=await U();if(J.executeMode)r66(V.mcpService,J.settings),await w06(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 KB0();let b=eE({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)R7.selectConfig(a)}else E=!0}let I=s61("0.0.1765797153-g028cd2",V.settingsStorage),P=new e11(V.threadStorage),T=t1.of([f0.file(process.cwd())]),y=M$1(void 0,T),k=new t61(V.mcpService,J.settings.getWorkspaceRootPath());if(X)M.handle({type:"user:message",message:{content:[{type:"text",text:X}]}});let m=await(async()=>{try{let b=await G5.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 K46();x.info("Loaded session state:",p),await cy1({codebaseContextService:V.codebaseContextService,stdout:process.stdout,history:new x61,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,threadHistoryService:V.threadHistoryService,threadSyncService:V.threadSyncService,threadID:M.threadID,threadFuzzyIndexer:P,worker:M,workerDeps:K,skillService:K.skillService,configService:V.configService,internalAPIClient:G5,ampURL:J.ampURL,startNewThread:D,switchToThread:z,ideClient:R7,connectedClientsService:new An,commandRegistry:y,mcpService:V.mcpService,mcpTrustHandler:k,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:m.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 zQ(J){if(J.interactive)JZ.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
4674
|
+
`);let Q=!!J.execute||!process.stdout.isTTY&&!J.streamJson,Z=process.stdout.isTTY&&process.stderr.isTTY,Y=await t06({...J,workspaceTrust:{current:!0,changes:x_},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 a66(J.mcpConfig);Y=o66(Y,G)}let X=await Y.get("url","global");if(!X)X=zZ;if(!OF(X))x.info("Targeting custom Amp server",{ampURL:X});return Y=tW0(Y),{executeMode:Q,isTTY:Z,ampURL:X,settings:Y,secrets:$46(await OC1(J,Y))}}function sM8(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 tM8(){let J=sM8(process.argv);if(t16({logLevel:J.logLevel||process.env.AMP_LOG_LEVEL,logFile:J.logFile||process.env.AMP_LOG_FILE}),uM8(x),x.info("Starting Amp CLI.",{version:"0.0.1765797153-g028cd2",buildTimestamp:"2025-12-15T11:17:49.235Z"}),parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new C8(C$.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await rM8().parseAsync(process.argv)}pI1().startActiveSpan("main",async(J)=>{process.on("exit",()=>J.end()),await tM8().catch(wm)});async function eM8(J,Q){if(process.env.AMP_URL)await J.settings.set("url",process.env.AMP_URL,"global"),o9.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
|
|
4675
4675
|
`);else if(!OF(J.ampURL))o9.write(`Logging in to ${new URL(J.ampURL).hostname}
|
|
4676
4676
|
`);let Z=process.env.AMP_API_KEY;if(Z)o9.write(`API key found in environment variable, storing...
|
|
4677
4677
|
`),await Q.set("apiKey",Z,J.ampURL),o9.write(`API key successfully stored.
|
|
@@ -4684,7 +4684,7 @@ This thread belongs to a different user and cannot be continued for security rea
|
|
|
4684
4684
|
`);else o9.write(`Successfully logged out from ${new URL(J.ampURL).hostname}.
|
|
4685
4685
|
`);process.exit(0)}async function QL8(J,Q,Z,Y,X){CV(X,J);let G=await l$(Q,J);try{let V=i51(Z);if(!V)n51(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 eC(K,G)).messages.length)KX("Cannot rename an empty thread.");let H=Wu(G);await(await b3.getOrCreateForThread(H,K)).handle({type:"title",value:q}),x.info("GOT HERE"),await G.threadSyncService.sync(),x.info("GOT THERE"),o9.write(A6.green(`✓ Thread ${K} renamed to "${q}"
|
|
4686
4686
|
`)),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 ZL8(J,Q,Z,Y){CV(Y,J);let X=await l$(Q,J);try{let G=i51(Z);if(!G)n51(Z);let K=await eC(G,X),q=zT(K);o9.write(q+`
|
|
4687
|
-
`),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 YL8(J,Q,Z,Y,X){CV(X,J);let G=await l$(Q,J);try{let V=await Ev1(Z),K=await eC(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=Wu(G),L=K.id;await G.threadStorage.set(L,K);let A=await b3.getOrCreateForThread(M,L);await A.resume();let E=t11.fromWorker(A),I=new e11(G.threadStorage),P=t1.of([f0.file(process.cwd())]),T=M$1(void 0,P),y=new t61(G.mcpService,Q.settings.getWorkspaceRootPath()),k=s61("0.0.
|
|
4687
|
+
`),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 YL8(J,Q,Z,Y,X){CV(X,J);let G=await l$(Q,J);try{let V=await Ev1(Z),K=await eC(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=Wu(G),L=K.id;await G.threadStorage.set(L,K);let A=await b3.getOrCreateForThread(M,L);await A.resume();let E=t11.fromWorker(A),I=new e11(G.threadStorage),P=t1.of([f0.file(process.cwd())]),T=M$1(void 0,P),y=new t61(G.mcpService,Q.settings.getWorkspaceRootPath()),k=s61("0.0.1765797153-g028cd2",G.settingsStorage);await cy1({codebaseContextService:G.codebaseContextService,stdout:process.stdout,history:new x61,fuzzyServer:G.fuzzyServer,settingsStorage:G.settingsStorage,threadService:G.threadService,threadHistoryService:G.threadHistoryService,threadSyncService:G.threadSyncService,threadID:L,threadFuzzyIndexer:I,worker:E,workerDeps:M,skillService:M.skillService,configService:G.configService,internalAPIClient:G5,ampURL:Q.ampURL,startNewThread:async()=>E,switchToThread:async()=>E,ideClient:R7,connectedClientsService:new An,commandRegistry:T,mcpService:G.mcpService,mcpTrustHandler:y,showJetBrainsInstaller:!1,updateService:k,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 wm(V,Z)}}async function XL8(J,Q,Z,Y,X){CV(Y,J);let G=await l$(Q,J);try{let V=i51(Z);if(!V)n51(Z);let K=V,q=await G5.getUserInfo({},{config:G.configService}),W=q.ok?q.result:null,H=e61(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,J41(H)),o9.write(A6.green("✓ ")+`Thread ${K} visibility changed to ${H}.
|
|
4688
4688
|
`);if(X){await eC(K,G);let z=typeof X==="string"?X:void 0;await NP0(G.threadService,K,G.configService,z),o9.write(A6.green("✓ ")+`Thread ${K} has been shared with Amp support. These thread reports will be aggregated and analysed.
|
|
4689
4689
|
`)}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 $L8(J,Q,Z,Y){CV(Y,J);let X=await l$(Q,J),G=Wu(X);try{let V=await Ev1(Z),q=(await eC(V,X)).messages.length-1,W=await b3.getOrCreateForThread(G,V),H=await BT(W,X.threadSyncService,q);await Promise.all([X.threadSyncService.uploadThread(V),X.threadSyncService.uploadThread(H)]),await Ov1(H),o9.write(`${H}
|
|
4690
4690
|
`),await X.asyncDispose(),process.exit(0)}catch(V){JZ.write(`Error forking thread: ${V instanceof Error?V.message:String(V)}
|