@sourcegraph/amp 0.0.1751635281-g3a463c → 0.0.1751636404-g3a463c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.js +5 -5
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -7408,7 +7408,7 @@ ${B.join(`
7408
7408
  `)}function P4A(A,Q,B,J){let D=Q.map((K)=>{let G=K.range?`(L${K.range.type==="full"?K.range.start.line:K.range.start.line})`:"",q=K.severity||"info",Y=q==="error"?"red":q==="warning"?"yellow":"gray",F=J&&B.includeFilePaths?ar6.relative(J,K.path):K.path,E=B.includeFilePaths?`${F}${G!==""?" ":""}${G}`:G,w=A.print(K.message,{foreground:Y});return{location:E,messageFormatted:w,filePathLength:B.includeFilePaths?0:dM(E)}}),Z=Math.max(...D.map((K)=>K.filePathLength),1)+2;return D.map((K)=>{let G=" ".repeat(Math.max(0,Z-K.filePathLength));return`${K.location}${G}${K.messageFormatted}`}).join(`
7409
7409
  `)}function rr6(A,Q){if(A.state!=="active")return{type:"idle"};let B=cC(Q);if(B)return B;if(A.state==="active"){let J=[];for(let D of Q.messages)if(D.role==="user"){for(let z of D.content)if(z.type==="tool_result"&&z.run.status==="in-progress")J.push(z)}if(J.length>0){let D=J[0],z=y7(Q,D.toolUseID);if(z){let Z=J.slice(1).map((X)=>{return y7(Q,X.toolUseID)?.name||"tool"}).filter(Boolean);return x51(z.name,J.length,Date.now(),z.input,Z.length>0?Z:void 0)}}}return{type:"idle"}}class Qk1{dependencies;subthreads=new Map;nextAgentNumber=1;events=new q8;constructor(A){this.dependencies=A}get events$(){return this.events}async trackSubthread(A,Q,B){if(this.subthreads.has(A))return;try{let J=await nX.getOrCreateForThread({configService:this.dependencies.configService,threadService:this.dependencies.threadService,toolService:this.dependencies.toolService,getThreadEnvironment:Nf,systemPromptService:this.dependencies.systemPromptService,threadSummaryService:this.dependencies.threadSummaryService,createFileSystem:await Rd,threadHistoryService:this.dependencies.threadHistoryService,mcpService:this.dependencies.mcpService},A);await J.resume();let D=this.nextAgentNumber++,z={threadID:A,worker:J,agentNumber:D,printedMessageIndexes:new Set,printedToolRuns:new Set,requestedToolConfirmations:new Set,taskDescription:Q,isCompleted:!1};if(this.subthreads.set(A,z),Q&&B)this.events.next({type:"subagent-started",subThreadID:A,agentNumber:D,taskDescription:Q,taskPrompt:B});J.status.subscribe(async(X)=>{if(!z.isCompleted){if(X.state==="active"&&X.inferenceState==="cancelled"){z.isCompleted=!0,this.events.next({type:"subagent-cancelled",subThreadID:A,agentNumber:z.agentNumber,taskDescription:z.taskDescription||"Task cancelled"});return}if(X.state==="active"&&X.ephemeralError){z.isCompleted=!0,this.events.next({type:"subagent-error",subThreadID:A,agentNumber:z.agentNumber,taskDescription:z.taskDescription||"Task failed",error:X.ephemeralError.message||"Unknown error occurred"});return}try{let K=await i6(this.dependencies.threadService.observe(A).pipe(t7((G)=>G!==void 0)));if(K){let G=rr6(X,K);if(this.events.next({type:"subagent-status",subThreadID:A,agentNumber:z.agentNumber,taskDescription:z.taskDescription||"Running task",agentState:G}),X.state==="active"){let q=[];for(let Y of K.messages)if(Y.role==="user"){for(let F of Y.content)if(F.type==="tool_result"&&F.run.status==="in-progress")q.push(F)}for(let Y of q){let F=y7(K,Y.toolUseID);if(F){let E=`${A}-${F.id}`;if(!z.toolStartTimes)z.toolStartTimes=new Map;if(!z.toolStartTimes.has(E))z.toolStartTimes.set(E,Date.now());this.events.next({type:"tool-status",toolUse:F,status:"running",startTime:z.toolStartTimes.get(E),subthreadID:A})}}}}}catch(K){f1.error(`Failed to get thread for status update: ${A}`,K)}}}),bW(this.dependencies.threadService.observe(A).pipe(t7((X)=>X!==void 0))).observable.subscribe((X)=>{if(!X)return;let K=Wz(X,"assistant");if(ma(K)&&!z.isCompleted){z.isCompleted=!0,this.events.next({type:"subagent-cancelled",subThreadID:A,agentNumber:z.agentNumber,taskDescription:z.taskDescription||"Task cancelled"});return}if(K?.state?.type==="error"&&!z.isCompleted){z.isCompleted=!0,this.events.next({type:"subagent-error",subThreadID:A,agentNumber:z.agentNumber,taskDescription:z.taskDescription||"Task failed",error:K.state.error.message||"Unknown error occurred"});return}for(let F of X.messages)if(F.role==="user"){for(let E of F.content)if(E.type==="tool_result"){let w=y7(X,E.toolUseID);if(w&&!z.printedToolRuns.has(E.toolUseID)){let H=E.run.status==="done"?"completed":E.run.status==="error"?"error":E.run.status==="cancelled"?"cancelled":void 0;if(H){z.printedToolRuns.add(E.toolUseID);let M=`${A}-${w.id}`,W=z.toolStartTimes?.get(M);if(this.events.next({type:"tool-status",toolUse:w,status:H,startTime:W,endTime:Date.now(),subthreadID:A}),z.toolStartTimes)z.toolStartTimes.delete(M)}}}}let q=Wz(X,"user")?.content.filter((F)=>F.type==="tool_result"&&F.run.status==="blocked-on-user")??[];if(q.length>0&&!z.isCompleted){let F=[];for(let E of q){let w=y7(X,E.toolUseID);if(w&&w.name===s4&&E.run.status==="blocked-on-user"&&E.userInput===void 0&&!z.requestedToolConfirmations.has(E.toolUseID))F.push({useBlock:w,toAllow:E.run.toAllow}),z.requestedToolConfirmations.add(E.toolUseID)}if(F.length>0)this.events.next({type:"subthread-tool-request",subThreadID:A,agentNumber:z.agentNumber,taskDescription:z.taskDescription||"Running task",tools:F})}if(K?.state.type==="complete"&&K?.state.stopReason==="end_turn"&&!z.isCompleted){z.isCompleted=!0;let F=K.content.filter((E)=>E.type==="text").map((E)=>E.text).join(`
7410
7410
 
7411
- `);this.events.next({type:"subagent-finished",subThreadID:A,agentNumber:z.agentNumber,taskDescription:z.taskDescription||"Task completed",result:F})}if(!z.isCompleted){let F=bf(X,z.printedMessageIndexes,z.printedToolRuns);if(F.blocks.length>0)this.events.next({type:"subthread-message",subThreadID:A,agentNumber:z.agentNumber,blocks:F.blocks})}}),f1.debug(`Started tracking subthread ${A}`)}catch(J){f1.error(`Failed to track subthread ${A}`,J)}}scanForTaskToolSubthreads(A){for(let Q of A.messages)if(Q.role==="user"){for(let B of Q.content)if(B.type==="tool_result"){let J=y7(A,B.toolUseID);if(J?.name===ZQ&&(B.run.status==="in-progress"||B.run.status==="done"||B.run.status==="cancelled")){let D="progress"in B.run?B.run.progress:void 0,z=dy(D);if(z)this.trackSubthread(z,J.input?.description,J.input?.prompt).catch((Z)=>{f1.error(`Failed to track Task tool subthread ${z}`,Z)})}}}}async handleToolConfirmations(A,Q){let B=this.subthreads.get(A);if(!B){f1.error(`No tracker found for subthread ${A}`);return}f1.info(`Sending tool confirmations to subthread ${A}`,{toolCount:Q.size,responses:Array.from(Q.entries()).map(([J,D])=>({id:J,accepted:D}))});for(let[J,D]of Q)f1.info("Sending tool confirmation to subthread worker",{subThreadID:A,toolUseID:J,accepted:D}),await B.worker.handle({type:"user:tool-input",toolUse:J,value:{accepted:D}})}dispose(){for(let A of this.subthreads.values())A.worker.dispose();this.subthreads.clear(),this.events.complete()}}S2();function S4A(A){let Q=["prompt is too long","exceed context limit"],B=A.error?.type==="invalid_request_error"&&Q.some((D)=>A.error?.message?.includes(D)),J=Q.some((D)=>A.message?.includes(D));return B||J}var v4A="Out of credits";Iz();hP();$a();e6();aU();h51();uX();E91();mP();import{readdir as or6}from"node:fs/promises";import{homedir as tr6}from"node:os";async function $4A(A,Q){let J=!(await w91(A,Q)).some((z)=>z.type==="project"),D=await er6();return{shouldGenerate:J&&D}}async function er6(){let A=process.cwd(),Q=tr6();if(A===Q)return!1;try{return(await or6(A)).length>0}catch{return!1}}async function f4A(A){await A.handle({type:"user:message",message:{content:[{type:"text",text:Em0}]}})}S2();function n3(A,Q){return(B,J)=>{let D=Q(B,J);if(J.type!=="tick")f1.debug("Transition",{name:A,before:B,event:J,after:D});return D}}zk1();async function h4A({threadSyncService:A,configService:Q,threadService:B,threadHistoryService:J,mcpService:D,fileWatcher:z,fuzzyServer:Z,summaryService:X,settingsStorage:K,threadStorage:G,toolService:q,systemPromptService:Y,subthreadTracker:F},{threadID:E,isContinued:w,ui:H}){let M=OT(),W=new Set,I=bW(B.observe(E).pipe(t7((v)=>v!==void 0))),N=new Set,V=new Map;await i6(I.observable);let _=await Rd,T=await nX.getOrCreateForThread({configService:Q,threadService:B,toolService:q,getThreadEnvironment:Nf,systemPromptService:Y,threadSummaryService:X,createFileSystem:_,threadHistoryService:J,mcpService:D},E);await T.resume().catch((v)=>{f1.error("Initial resume",v)});let R=T.status.pipe(x6((v)=>{return{type:"worker-state",status:v}})),j=I.observable.pipe(x6((v)=>{return{type:"thread-state",thread:v}})),P=new q8,$=new q8,k=H(YA.from($)).pipe(x6((v)=>({type:"ui-input",input:v}))),m=F.events$.pipe(x6((v)=>v)),d=M.status.pipe(x6((v)=>({type:"lsp-status",lspState:v}))),S=Ta.pipe(x6((v)=>({type:"jetbrains-status",jetbrainsState:v}))),g=mU(R,j,mU(P,k,m,d,S)),b=new q8;async function u(){if($.next({type:"state",state:{type:"shutting-down"}}),await A?.sync().catch((v)=>{f1.error("Thread sync error",v,{threadID:E})}),F.dispose(),await M.stopAllServers(),T.dispose(),A)A.dispose();B.dispose(),await D.dispose(),z[Symbol.dispose](),Z.dispose(),$.complete(),b.next()}let f=g.pipe(FZ(()=>{u()})).pipe(KT(n3("threadSession",function(v,l){function a(A1){f1.info(`Processing user message: ${A1.slice(0,50)}${A1.length>50?"...":""}`);let K1="tokenUsage"in v?v.tokenUsage:void 0;if(K1&&K1.used/K1.maxAvailable>u51.CRITICAL)return f1.info("Blocking message at worker boundary - critical token usage"),$.next({type:"confirm",confirmation:{type:"compaction",severity:"critical"}}),{type:"confirming-compaction",severity:"critical",tokenUsage:v.tokenUsage,compactionPromptState:"final",updateState:"updateState"in v?v.updateState:"none",toolConfirmationStatus:"toolConfirmationStatus"in v?v.toolConfirmationStatus:new Map,currentAssistantMessageIndex:("currentAssistantMessageIndex"in v?v.currentAssistantMessageIndex:null)??null,hasBeenIdle:"hasBeenIdle"in v?v.hasBeenIdle:!1,threadTitle:"threadTitle"in v?v.threadTitle:null,confirmationQueue:"confirmationQueue"in v?v.confirmationQueue:[]};T.handle({type:"user:message",message:{content:[{type:"text",text:A1}]}}).then(()=>{if(A)A.sync().catch((N1)=>{f1.error("Thread sync after submit error",N1,{threadID:E})})}).catch((N1)=>{f1.error("Handle user message failed",N1)}),$.next({type:"state",state:{type:"waiting-on-model",startTime:Date.now()}});let D1=I.value.last;if(D1){let N1=cC(D1);if(N1)$.next({type:"state",state:N1})}return{...v,type:"awaiting-agent",displayedError:null}}async function z1(){$.next({type:"state",state:{type:"compacting"}});let A1=await X.summarizeThread(E);await T.handle({type:"summary:created",summary:{type:"internal",summary:A1.summary}})}function t(){if(v.type==="awaiting-user-message")return f1.debug("already accepting, ignoring event",{state:v,event:l}),v;let A1="tokenUsage"in v?v.tokenUsage:void 0;if(A?.sync()?.catch((K1)=>{f1.error("Thread sync error",K1,{threadID:E})}),A1&&v.type!=="confirming-compaction"&&v.type!=="compacting"){let K1=A1.used/A1.maxAvailable,D1=void 0,N1=v.compactionPromptState;if(K1>u51.CRITICAL)D1="critical",N1="final";else if(K1>u51.WARNING&&v.compactionPromptState==="none")D1="moderate",N1="first";else if(K1>u51.SEVERE&&v.compactionPromptState==="first")D1="severe",N1="final";if(D1)return $.next({type:"confirm",confirmation:{type:"compaction",severity:D1}}),{type:"confirming-compaction",severity:D1,tokenUsage:v.tokenUsage,compactionPromptState:N1,updateState:v.updateState,toolConfirmationStatus:v.toolConfirmationStatus,currentAssistantMessageIndex:v.currentAssistantMessageIndex,hasBeenIdle:v.hasBeenIdle,threadTitle:v.threadTitle,confirmationQueue:v.confirmationQueue}}if($.next({type:"accept-message",initial:!v.hasBeenIdle&&!w}),v.type==="awaiting-agent")v.cancelledWithMessage=void 0;if(A1)$.next({type:"token-usage",tokenUsage:A1});return{...v,type:"awaiting-user-message",hasBeenIdle:!0,tokenUsage:A1??null}}function G1(A1){if(A1.length>0)f1.info(`Updating allowlist with ${A1.length} entries`,{entries:A1}),K.get("commands.allowlist","global").then((K1)=>{let D1=[...K1??[],...A1];return K.set("commands.allowlist",D1,"global")}).catch((K1)=>{f1.error("Failed to update allowlist",K1)})}if(v.type==="closing")return v;if(l.type==="thread-state"){let A1=l.thread.title||null;if(v.threadTitle!==A1&&A1!==null)$.next({type:"thread-title",title:A1});if(F.scanForTaskToolSubthreads(l.thread),w&&W.size===0&&l.thread.messages.length>0){let D1=bf(l.thread,W,N);if(D1.blocks.length>0)$.next({type:"messages",blocks:D1.blocks})}let K1=v.tokenUsage;if(l.thread){let D1=ha(l.thread);if(D1)K1={used:D1.totalInputTokens,maxAvailable:D1.maxInputTokens},$.next({type:"token-usage",tokenUsage:K1})}if(v.type==="awaiting-user-confirmation")if(l.thread.messages.at(-1)?.content.some((D1)=>D1.type==="tool_result"&&(D1.run.status==="in-progress"||D1.run.status==="done"))){let D1=cC(l.thread);if(D1)$.next({type:"state",state:D1});else $.next({type:"state",state:{type:"waiting-on-model",startTime:Date.now()}});return{...v,type:"awaiting-agent",displayedError:null,tokenUsage:K1}}else return{...v,type:"awaiting-user-confirmation",tokenUsage:K1};if(v.type==="awaiting-agent"||v.type==="compacting"){let D1=l.thread.messages.at(-1),N1=bf(l.thread,W,N),n=N1.blocks;if(D1?.role==="assistant"&&D1.state.type==="streaming"&&N1.blocks.length===0){n=[{type:"message",data:[l.thread.messages.length-1,D1]}];let P1=cC(l.thread);if(P1)$.next({type:"state",state:P1})}if(n.length>0){for(let Y1 of n)if(Y1.type==="toolResult"){let[P1,O1]=Y1.data,T1=O1.run.status==="done"?"completed":O1.run.status==="error"?"error":O1.run.status==="cancelled"?"cancelled":"running";if(T1!=="running")$.next({type:"tool-status",toolUse:P1,status:T1,startTime:V.get(P1.id),endTime:Date.now()}),V.delete(P1.id)}$.next({type:"messages",blocks:n})}if(l.thread.messages.at(-1)?.content.some((Y1)=>Y1.type==="summary"))return{...t(),tokenUsage:null,compactionPromptState:"none"};if(D1?.role==="assistant"&&D1?.state.type==="complete"&&D1?.state.stopReason==="end_turn"){$.next({type:"state",state:{type:"idle"}});let Y1=t();return{...Y1,tokenUsage:K1??Y1.tokenUsage}}if(!I)throw new Error("unexpected: thread is required when waiting for tool input");let r=Wz(l.thread,"assistant"),e=r?l.thread.messages.indexOf(r):null;if(e!==null&&e!==v.currentAssistantMessageIndex)f1.info("New assistant message detected, clearing tool confirmations",{oldIndex:v.currentAssistantMessageIndex,newIndex:e,previousToolCount:v.toolConfirmationStatus.size}),v.toolConfirmationStatus.clear(),v.currentAssistantMessageIndex=e;let X1=Wz(l.thread,"user")?.content.filter((Y1)=>Y1.type==="tool_result"&&Y1.run.status==="blocked-on-user")??[],q1=new Set(r?.content.filter((Y1)=>Y1.type==="tool_use").map((Y1)=>Y1.id)??[]),F1=!1;for(let Y1 of X1){if(!q1.has(Y1.toolUseID))continue;let P1=y7(l.thread,Y1.toolUseID),O1=v.toolConfirmationStatus.get(Y1.toolUseID);if(P1&&P1.name===s4&&Y1.run.status==="blocked-on-user"&&O1===void 0){if(v.toolConfirmationStatus.set(Y1.toolUseID,"awaiting"),F1=!0,f1.info("Added new tool to confirmation tracking",{toolUseID:Y1.toolUseID,toolName:P1.name}),!V.has(P1.id))V.set(P1.id,Date.now());$.next({type:"tool-status",toolUse:P1,status:"blocked-on-user",startTime:V.get(P1.id)})}}if(F1){let Y1=Array.from(v.toolConfirmationStatus.entries()).filter(([P1,O1])=>O1==="awaiting");if(Y1.length>0){let[P1]=Y1[0],O1=X1.find((V1)=>V1.toolUseID===P1),T1=O1?y7(l.thread,O1.toolUseID):null;if(O1&&T1)return f1.info(`Starting tool confirmation process for ${Y1.length} tools`,{firstToolID:P1,toolName:T1.name}),$.next({type:"confirm",confirmation:{type:"tool-use",tools:[{useBlock:T1,toAllow:O1.run.status==="blocked-on-user"?O1.run.toAllow:void 0}]}}),{...v,type:"collecting-tool-confirmations",currentToolID:P1,tokenUsage:K1}}}}}else if(l.type==="worker-state"){if(v.type==="awaiting-user-confirmation"&&l.status.state==="active"&&l.status.ephemeralError)return v;if(v.type==="collecting-tool-confirmations")return f1.info("Already collecting tool confirmations, ignoring worker-state event"),v;let A1=I.value.last?.messages.at(-1),K1=v.tokenUsage;if(l.status.state==="active"){let D1=I.value.last;if(D1){let N1=ha(D1);if(N1)K1={used:N1.totalInputTokens,maxAvailable:N1.maxInputTokens},$.next({type:"token-usage",tokenUsage:K1})}}if(v.type==="confirming-compaction"||v.type==="compacting")return{...v,tokenUsage:K1};switch(l.status.state){case"initial":if(v.type==="initializing")return v;return t();case"active":if(l.status.ephemeralError)if(l.status.ephemeralError.message.includes(v4A)){if(v.type==="out-of-credits")return v;return $.next({type:"confirm",confirmation:{type:"out-of-credits"}}),{...v,type:"out-of-credits",tokenUsage:K1}}else if(S4A(l.status.ephemeralError))return f1.info("Context limit error, triggering compaction",{error:l.status.ephemeralError,tokenUsage:K1}),$.next({type:"confirm",confirmation:{type:"compaction",severity:"critical"}}),{type:"confirming-compaction",severity:"critical",tokenUsage:v.tokenUsage,compactionPromptState:v.compactionPromptState,updateState:v.updateState,toolConfirmationStatus:v.toolConfirmationStatus,currentAssistantMessageIndex:v.currentAssistantMessageIndex,hasBeenIdle:v.hasBeenIdle,threadTitle:v.threadTitle,confirmationQueue:v.confirmationQueue};else if(l.status.ephemeralError.message.includes("401 unauthorized"))return $.next({type:"error",error:{type:"unauthorized"},retryable:!1}),f.unsubscribe(),{...v,type:"closing"};else{let D1=l.status.ephemeralError.message;if(f1.error("Ephemeral error",{error:D1}),v.type==="awaiting-agent"&&v.displayedError!==D1)return $.next({type:"error",error:{type:"other",error:D1},retryable:!1}),{...v,type:"awaiting-user-confirmation",tokenUsage:K1};else return v}switch(l.status.inferenceState){case"running":{let D1=I.value.last;if(D1){let N1=cC(D1);if(N1)$.next({type:"state",state:N1});else $.next({type:"state",state:{type:"waiting-on-model",startTime:Date.now()}})}else $.next({type:"state",state:{type:"waiting-on-model",startTime:Date.now()}})}if(v.type==="initializing")return{...v,tokenUsage:K1};return{...v,type:"awaiting-agent",displayedError:null,tokenUsage:K1};case"cancelled":if(v.type==="initializing")return{...v,tokenUsage:K1};if($.next({type:"cancelled"}),$.next({type:"state",state:{type:"idle"}}),v.type==="awaiting-agent"&&v.cancelledWithMessage)return v.cancelledWithMessage=void 0,{...v,tokenUsage:K1};else return{...t(),tokenUsage:K1};case"idle":if(v.type==="initializing")return{...v,tokenUsage:K1};if(A1?.content.some((D1)=>D1.type==="tool_result"&&D1.run.status==="blocked-on-user"))return{...v,type:"awaiting-user-confirmation",tokenUsage:K1};else if(I.value.last?.messages.some((D1)=>D1.role==="user"&&D1.content.some((N1)=>N1.type==="tool_result"&&N1.run.status==="in-progress"))??!1){let D1=I.value.last?.messages.flatMap((n)=>n.content).filter((n)=>n.type==="tool_result"&&("run"in n)&&("status"in n.run)&&n.run.status==="in-progress"),N1=D1?.length??0;if(N1>0){for(let X1 of D1||[]){let q1=y7(I.value.last,X1.toolUseID);if(q1){if(!V.has(X1.toolUseID))V.set(X1.toolUseID,Date.now());$.next({type:"tool-status",toolUse:q1,status:"running",startTime:V.get(X1.toolUseID)})}}let n=N1===1&&D1?.[0]&&I.value.last?y7(I.value.last,D1[0].toolUseID):void 0,r=N1>1&&D1&&I.value.last?D1.slice(1,Math.min(4,D1.length)).map((X1)=>{return y7(I.value.last,X1.toolUseID)?.name||"tool"}).filter(Boolean):void 0,e=n?x51(n.name,N1,Date.now(),n.input,r):{type:"running-tools",toolCount:N1,startTime:Date.now(),queuedTools:r};$.next({type:"state",state:e})}else{let n=I.value.last;if(n){let r=cC(n);if(r)$.next({type:"state",state:r});else $.next({type:"state",state:{type:"idle"}})}else $.next({type:"state",state:{type:"idle"}})}return{...v,type:"awaiting-agent",displayedError:null,tokenUsage:K1}}else if(A1?.role==="assistant"&&A1?.state.type==="complete"&&A1?.state.stopReason==="end_turn")return $.next({type:"state",state:{type:"idle"}}),{...t(),tokenUsage:K1}}}}else if(l.type==="batch-tool-confirmations-complete")if(v.type==="collecting-tool-confirmations"&&v.subthreadContext)return f1.info("Sending batch tool confirmations to subthread",{subThreadID:v.subthreadContext.subThreadID,toolCount:l.responses.size,responses:Array.from(l.responses.entries()).map(([A1,K1])=>({id:A1,accepted:K1}))}),F.handleToolConfirmations(v.subthreadContext.subThreadID,l.responses).catch((A1)=>{f1.error("Failed to send subthread tool confirmations",A1)}),f1.info("Transitioning to awaiting-agent after sending subthread confirmations"),$.next({type:"state",state:{type:"running-tools",startTime:Date.now()}}),{...v,type:"awaiting-agent",displayedError:null};else return f1.info("Sending batch tool confirmations to worker",{toolCount:l.responses.size,responses:Array.from(l.responses.entries()).map(([A1,K1])=>({id:A1,accepted:K1}))}),l.responses.forEach((A1,K1)=>{f1.info("Sending individual tool confirmation to worker",{toolUseID:K1,accepted:A1}),T.handle({type:"user:tool-input",toolUse:K1,value:{accepted:A1}}),v.toolConfirmationStatus.set(K1,"sent")}),f1.info("Transitioning to awaiting-agent after sending batch confirmations"),$.next({type:"state",state:{type:"running-tools",startTime:Date.now()}}),{...v,type:"awaiting-agent",displayedError:null};else if(l.type==="summary:created"){let A1=I.value.last;if(A1){let K1=ha(A1);if(K1){let D1={used:K1.totalInputTokens,maxAvailable:K1.maxInputTokens},N1=v.type==="compacting"?v.preCompactionTokenUsage:null;if(N1){let n=N1.used,r=D1.used,e=n-r,X1=n>0?e/n*100:0;if(e<=0)f1.warn("Compaction did not reduce token usage",{preUsed:n,postUsed:r,reduction:e,threadID:E});else if(X1<10)f1.warn("Compaction reduction was minimal",{preUsed:n,postUsed:r,reduction:e,reductionPercent:X1.toFixed(1),threadID:E});else f1.info("Compaction successful",{preUsed:n,postUsed:r,reduction:e,reductionPercent:X1.toFixed(1),threadID:E})}else f1.warn("No pre-compaction token usage available for validation",{threadID:E});$.next({type:"token-usage",tokenUsage:D1})}}return t()}else if(l.type==="compaction-result")if(l.result)return t();else return $.next({type:"error",error:{type:"other",error:"Compaction failed"},retryable:!1}),$.next({type:"confirm",confirmation:{type:"compaction",severity:l.severity}}),{...v,type:"confirming-compaction",severity:l.severity};else if(l.type==="update-start-updating")return{...v,updateState:"updating"};else if(l.type==="update-result")if(l.success)return setTimeout(()=>{P.next({type:"clear-update-status"})},1e4),{...v,updateState:"success"};else return setTimeout(()=>{P.next({type:"clear-update-status"})},1e4),{...v,updateState:"error"};else if(l.type==="clear-update-status")return{...v,updateState:"none"};else if(l.type==="agent-file-check-complete"){if(v.type==="checking-agent-file")if(l.shouldGenerate)return $.next({type:"confirm",confirmation:{type:"agent-file-creation"}}),{...v,type:"confirming-agent-file-creation"};else return t()}else if(l.type==="tool-status")return $.next({type:"tool-status",toolUse:l.toolUse,status:l.status,startTime:l.startTime,endTime:l.endTime,subthreadID:l.subthreadID}),v;else if(l.type==="subagent-started"){if(v.type==="initializing")return v;return $.next({type:"subagent-started",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription}),v}else if(l.type==="subagent-status")return $.next({type:"subagent-status",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription,agentState:l.agentState}),v;else if(l.type==="subthread-message"){if(l.blocks.length>0)$.next({type:"subthread-messages",subThreadID:l.subThreadID,blocks:l.blocks});return v}else if(l.type==="historic-thread"){if(v.type!=="initializing")throw new Error(`Historic thread event received in unexpected state: ${v.type}`);if(w&&W.size===0&&l.messages.length>0){let K1=bf({id:E,messages:l.messages},W,N);if(K1.blocks.length>0)$.next({type:"messages",blocks:K1.blocks})}let A1={...v,hasThread:!0};if(A1.hasUI&&A1.hasThread)return t();return A1}else if(l.type==="subagent-finished")return $.next({type:"subagent-finished",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription,result:l.result}),v;else if(l.type==="subagent-cancelled")return $.next({type:"subagent-cancelled",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription}),v;else if(l.type==="subagent-error")return $.next({type:"subagent-error",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription,error:l.error}),v;else if(l.type==="subthread-tool-request"){if(l.tools.length>0){if(f1.info(`Received tool confirmation request from subthread ${l.subThreadID}`,{subThreadID:l.subThreadID,agentNumber:l.agentNumber,toolCount:l.tools.length,tools:l.tools.map((A1)=>A1.useBlock.name),queueLength:v.confirmationQueue.length}),v.type==="collecting-tool-confirmations"||v.confirmationQueue.length>0)return f1.info("Queueing tool confirmation request",{subThreadID:l.subThreadID,agentNumber:l.agentNumber,currentQueueLength:v.confirmationQueue.length}),{...v,confirmationQueue:[...v.confirmationQueue,{type:"subthread-tool-request",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription,tools:l.tools}]};return $.next({type:"confirm",confirmation:{type:"tool-use",tools:l.tools,subthreadID:l.subThreadID,agentNumber:l.agentNumber}}),{...v,type:"collecting-tool-confirmations",currentToolID:l.tools[0]?.useBlock.id||null,subthreadContext:{subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription}}}return v}else if(l.type==="lsp-status")return $.next({type:"lsp-status",lspState:l.lspState}),v;else if(l.type==="jetbrains-status")return $.next({type:"jetbrains-status",jetbrainsState:l.jetbrainsState}),v;else if(l.type==="ui-input"){if(l.input.type==="initialized")if(v.type==="initializing"){let A1={...v,hasUI:!0};if(A1.hasUI&&A1.hasThread)if(I.value.last?.messages.length===0)return f1.info("Checking agent file status"),$4A({filesystem:_(E),configService:Q,threadService:B},I.value.last).then((D1)=>{P.next({type:"agent-file-check-complete",shouldGenerate:D1.shouldGenerate})}).catch((D1)=>{f1.error("Agent file check failed",D1),P.next({type:"agent-file-check-complete",shouldGenerate:!1})}),{...v,type:"checking-agent-file"};else return t();return A1}else throw new Error(`UI initialized event received in unexpected state: ${v.type}`);else if(l.input.type=="message"){let{message:A1}=l.input;return a(A1)}else if(l.input.type==="interrupt")if(v.type==="awaiting-agent"){if($.next({type:"cancelled"}),nX.cancel(E),l.input.message)v.cancelledWithMessage=l.input.message;return v}else return v;else if(l.input.type==="exit")return f.unsubscribe(),{...v,type:"closing"};else if(l.input.type==="retry")return nX.retry(E),{...v,type:"awaiting-agent",displayedError:null};else if(l.input.type==="confirmation"){if(v.type==="out-of-credits"&&l.input.confirmation.type==="out-of-credits")nX.retry(E);else if(v.type==="confirming-compaction"&&l.input.confirmation.type==="compaction")if(l.input.allow){let A1="tokenUsage"in v?v.tokenUsage:void 0;return $.next({type:"state",state:{type:"compacting"}}),z1().then(()=>{f1.info("Compaction completed successfully",{preCompactionTokenUsage:A1}),P.next({type:"compaction-result",result:!0,severity:v.severity})}).catch((K1)=>{f1.error("Compaction failed",K1),P.next({type:"compaction-result",result:!1,severity:v.severity})}),{...v,type:"compacting",preCompactionTokenUsage:A1}}else return f1.info("Compaction cancelled"),t();else if(v.type==="collecting-tool-confirmations"&&l.input.confirmation.type==="tool-use"){if(!v.currentToolID)return f1.error("No current tool ID in collecting-tool-confirmations state"),v;if(f1.info(`Received confirmation for tool: ${l.input.allow?"accepted":"rejected"}`,{toolUseID:v.currentToolID,subthreadID:l.input.confirmation.subthreadID}),l.input.confirmation.subthreadID&&v.subthreadContext){f1.info("Sending tool confirmation to subthread",{subThreadID:v.subthreadContext.subThreadID,toolUseID:v.currentToolID,accepted:l.input.allow});let N1=new Map([[v.currentToolID,l.input.allow]]);if(F.handleToolConfirmations(v.subthreadContext.subThreadID,N1).catch((n)=>{f1.error("Failed to send subthread tool confirmation",n)}),v.confirmationQueue.length>0){let n=v.confirmationQueue[0],r=v.confirmationQueue.slice(1);return f1.info("Processing next queued confirmation request",{subThreadID:n.subThreadID,agentNumber:n.agentNumber,remainingQueueLength:r.length}),$.next({type:"confirm",confirmation:{type:"tool-use",tools:n.tools,subthreadID:n.subThreadID,agentNumber:n.agentNumber}}),{...v,type:"collecting-tool-confirmations",currentToolID:n.tools[0]?.useBlock.id||null,subthreadContext:{subThreadID:n.subThreadID,agentNumber:n.agentNumber,taskDescription:n.taskDescription},confirmationQueue:r}}return f1.info("Transitioning to awaiting-agent after sending subthread confirmation"),$.next({type:"state",state:{type:"running-tools",startTime:Date.now()}}),{...v,type:"awaiting-agent",displayedError:null}}v.toolConfirmationStatus.set(v.currentToolID,l.input.allow?"confirmed":"rejected"),G1(l.input.confirmation.addToAllowList);let A1=Array.from(v.toolConfirmationStatus.entries()).filter(([N1,n])=>n==="awaiting");if(A1.length>0){let[N1]=A1[0];if(!I.value.isSet)return f1.error("Thread not available for finding next tool"),v;let e=(I.value.last.messages.at(-1)?.content.filter((q1)=>q1.type==="tool_result"&&q1.run.status==="blocked-on-user")??[]).find((q1)=>q1.toolUseID===N1),X1=e?y7(I.value.last,e.toolUseID):null;if(e&&X1)return f1.info(`Asking confirmation for next tool: ${X1.name}`,{toolUseID:N1,remainingCount:A1.length}),$.next({type:"confirm",confirmation:{type:"tool-use",tools:[{useBlock:X1,toAllow:e.run.status==="blocked-on-user"?e.run.toAllow:void 0}]}}),{...v,currentToolID:N1}}let K1=Array.from(v.toolConfirmationStatus.entries()).filter(([N1,n])=>n==="confirmed"||n==="rejected");f1.info("All tool confirmations collected, sending batch response",{totalTools:K1.length,responses:K1.map(([N1,n])=>({id:N1,accepted:n==="confirmed"}))});let D1=new Map(K1.map(([N1,n])=>[N1,n==="confirmed"]));return P.next({type:"batch-tool-confirmations-complete",responses:D1}),$.next({type:"state",state:{type:"running-tools",startTime:Date.now()}}),{...v,type:"awaiting-agent",displayedError:null}}else if(l.input.confirmation.type==="agent-file-creation"&&v.type==="confirming-agent-file-creation")if(l.input.allow)return f4A(T).catch((A1)=>{f1.error("Agent file generation failed",A1)}),$.next({type:"state",state:{type:"generating-agent-file"}}),{...v,type:"awaiting-agent",displayedError:null};else return t();return v}}return v}),{type:"initializing",hasUI:!1,hasThread:!1,tokenUsage:null,compactionPromptState:"none",updateState:"none",toolConfirmationStatus:new Map,currentAssistantMessageIndex:null,hasBeenIdle:!1,threadTitle:null,confirmationQueue:[]})).subscribe({error:(v)=>{f1.error("Error in state machine",v),u()}});if(w)G.get(E).then((v)=>{if(v&&v.messages)f1.info("Sending historic messages for initialization",{threadId:E,messageCount:v.messages.length}),P.next({type:"historic-thread",messages:v.messages});else f1.info("Sending empty messages for continued thread without stored messages",{threadId:E}),P.next({type:"historic-thread",messages:[]})});else f1.info("Sending empty messages for new thread initialization",{threadId:E}),P.next({type:"historic-thread",messages:[]});return Do6(P).catch((v)=>{f1.debug("Update check startup failed",v)}),await i6(b)}async function Do6(A){try{let Q=await Bk1("0.0.1751635281-g3a463c");if(Q.hasUpdate&&Q.latestVersion)A.next({type:"update-start-updating"}),setTimeout(async()=>{try{await Dk1(Q.latestVersion),A.next({type:"update-result",success:!0,version:Q.latestVersion})}catch(B){f1.info("Update failed",B),A.next({type:"update-result",success:!1,version:Q.latestVersion})}},100);else f1.info("No update available")}catch(Q){f1.debug("Update check failed",Q)}}var u51={WARNING:0.8,SEVERE:0.9,CRITICAL:0.98};S2();uX();e6();bq();function m4A(A){let{stdout:Q,threadID:B,pipedInput:J}=A;function D(z){Q.write(JSON.stringify(z)+`
7411
+ `);this.events.next({type:"subagent-finished",subThreadID:A,agentNumber:z.agentNumber,taskDescription:z.taskDescription||"Task completed",result:F})}if(!z.isCompleted){let F=bf(X,z.printedMessageIndexes,z.printedToolRuns);if(F.blocks.length>0)this.events.next({type:"subthread-message",subThreadID:A,agentNumber:z.agentNumber,blocks:F.blocks})}}),f1.debug(`Started tracking subthread ${A}`)}catch(J){f1.error(`Failed to track subthread ${A}`,J)}}scanForTaskToolSubthreads(A){for(let Q of A.messages)if(Q.role==="user"){for(let B of Q.content)if(B.type==="tool_result"){let J=y7(A,B.toolUseID);if(J?.name===ZQ&&(B.run.status==="in-progress"||B.run.status==="done"||B.run.status==="cancelled")){let D="progress"in B.run?B.run.progress:void 0,z=dy(D);if(z)this.trackSubthread(z,J.input?.description,J.input?.prompt).catch((Z)=>{f1.error(`Failed to track Task tool subthread ${z}`,Z)})}}}}async handleToolConfirmations(A,Q){let B=this.subthreads.get(A);if(!B){f1.error(`No tracker found for subthread ${A}`);return}f1.info(`Sending tool confirmations to subthread ${A}`,{toolCount:Q.size,responses:Array.from(Q.entries()).map(([J,D])=>({id:J,accepted:D}))});for(let[J,D]of Q)f1.info("Sending tool confirmation to subthread worker",{subThreadID:A,toolUseID:J,accepted:D}),await B.worker.handle({type:"user:tool-input",toolUse:J,value:{accepted:D}})}dispose(){for(let A of this.subthreads.values())A.worker.dispose();this.subthreads.clear(),this.events.complete()}}S2();function S4A(A){let Q=["prompt is too long","exceed context limit"],B=A.error?.type==="invalid_request_error"&&Q.some((D)=>A.error?.message?.includes(D)),J=Q.some((D)=>A.message?.includes(D));return B||J}var v4A="Out of credits";Iz();hP();$a();e6();aU();h51();uX();E91();mP();import{readdir as or6}from"node:fs/promises";import{homedir as tr6}from"node:os";async function $4A(A,Q){let J=!(await w91(A,Q)).some((z)=>z.type==="project"),D=await er6();return{shouldGenerate:J&&D}}async function er6(){let A=process.cwd(),Q=tr6();if(A===Q)return!1;try{return(await or6(A)).length>0}catch{return!1}}async function f4A(A){await A.handle({type:"user:message",message:{content:[{type:"text",text:Em0}]}})}S2();function n3(A,Q){return(B,J)=>{let D=Q(B,J);if(J.type!=="tick")f1.debug("Transition",{name:A,before:B,event:J,after:D});return D}}zk1();async function h4A({threadSyncService:A,configService:Q,threadService:B,threadHistoryService:J,mcpService:D,fileWatcher:z,fuzzyServer:Z,summaryService:X,settingsStorage:K,threadStorage:G,toolService:q,systemPromptService:Y,subthreadTracker:F},{threadID:E,isContinued:w,ui:H}){let M=OT(),W=new Set,I=bW(B.observe(E).pipe(t7((v)=>v!==void 0))),N=new Set,V=new Map;await i6(I.observable);let _=await Rd,T=await nX.getOrCreateForThread({configService:Q,threadService:B,toolService:q,getThreadEnvironment:Nf,systemPromptService:Y,threadSummaryService:X,createFileSystem:_,threadHistoryService:J,mcpService:D},E);await T.resume().catch((v)=>{f1.error("Initial resume",v)});let R=T.status.pipe(x6((v)=>{return{type:"worker-state",status:v}})),j=I.observable.pipe(x6((v)=>{return{type:"thread-state",thread:v}})),P=new q8,$=new q8,k=H(YA.from($)).pipe(x6((v)=>({type:"ui-input",input:v}))),m=F.events$.pipe(x6((v)=>v)),d=M.status.pipe(x6((v)=>({type:"lsp-status",lspState:v}))),S=Ta.pipe(x6((v)=>({type:"jetbrains-status",jetbrainsState:v}))),g=mU(R,j,mU(P,k,m,d,S)),b=new q8;async function u(){if($.next({type:"state",state:{type:"shutting-down"}}),await A?.sync().catch((v)=>{f1.error("Thread sync error",v,{threadID:E})}),F.dispose(),await M.stopAllServers(),T.dispose(),A)A.dispose();B.dispose(),await D.dispose(),z[Symbol.dispose](),Z.dispose(),$.complete(),b.next()}let f=g.pipe(FZ(()=>{u()})).pipe(KT(n3("threadSession",function(v,l){function a(A1){f1.info(`Processing user message: ${A1.slice(0,50)}${A1.length>50?"...":""}`);let K1="tokenUsage"in v?v.tokenUsage:void 0;if(K1&&K1.used/K1.maxAvailable>u51.CRITICAL)return f1.info("Blocking message at worker boundary - critical token usage"),$.next({type:"confirm",confirmation:{type:"compaction",severity:"critical"}}),{type:"confirming-compaction",severity:"critical",tokenUsage:v.tokenUsage,compactionPromptState:"final",updateState:"updateState"in v?v.updateState:"none",toolConfirmationStatus:"toolConfirmationStatus"in v?v.toolConfirmationStatus:new Map,currentAssistantMessageIndex:("currentAssistantMessageIndex"in v?v.currentAssistantMessageIndex:null)??null,hasBeenIdle:"hasBeenIdle"in v?v.hasBeenIdle:!1,threadTitle:"threadTitle"in v?v.threadTitle:null,confirmationQueue:"confirmationQueue"in v?v.confirmationQueue:[]};T.handle({type:"user:message",message:{content:[{type:"text",text:A1}]}}).then(()=>{if(A)A.sync().catch((N1)=>{f1.error("Thread sync after submit error",N1,{threadID:E})})}).catch((N1)=>{f1.error("Handle user message failed",N1)}),$.next({type:"state",state:{type:"waiting-on-model",startTime:Date.now()}});let D1=I.value.last;if(D1){let N1=cC(D1);if(N1)$.next({type:"state",state:N1})}return{...v,type:"awaiting-agent",displayedError:null}}async function z1(){$.next({type:"state",state:{type:"compacting"}});let A1=await X.summarizeThread(E);await T.handle({type:"summary:created",summary:{type:"internal",summary:A1.summary}})}function t(){if(v.type==="awaiting-user-message")return f1.debug("already accepting, ignoring event",{state:v,event:l}),v;let A1="tokenUsage"in v?v.tokenUsage:void 0;if(A?.sync()?.catch((K1)=>{f1.error("Thread sync error",K1,{threadID:E})}),A1&&v.type!=="confirming-compaction"&&v.type!=="compacting"){let K1=A1.used/A1.maxAvailable,D1=void 0,N1=v.compactionPromptState;if(K1>u51.CRITICAL)D1="critical",N1="final";else if(K1>u51.WARNING&&v.compactionPromptState==="none")D1="moderate",N1="first";else if(K1>u51.SEVERE&&v.compactionPromptState==="first")D1="severe",N1="final";if(D1)return $.next({type:"confirm",confirmation:{type:"compaction",severity:D1}}),{type:"confirming-compaction",severity:D1,tokenUsage:v.tokenUsage,compactionPromptState:N1,updateState:v.updateState,toolConfirmationStatus:v.toolConfirmationStatus,currentAssistantMessageIndex:v.currentAssistantMessageIndex,hasBeenIdle:v.hasBeenIdle,threadTitle:v.threadTitle,confirmationQueue:v.confirmationQueue}}if($.next({type:"accept-message",initial:!v.hasBeenIdle&&!w}),v.type==="awaiting-agent")v.cancelledWithMessage=void 0;if(A1)$.next({type:"token-usage",tokenUsage:A1});return{...v,type:"awaiting-user-message",hasBeenIdle:!0,tokenUsage:A1??null}}function G1(A1){if(A1.length>0)f1.info(`Updating allowlist with ${A1.length} entries`,{entries:A1}),K.get("commands.allowlist","global").then((K1)=>{let D1=[...K1??[],...A1];return K.set("commands.allowlist",D1,"global")}).catch((K1)=>{f1.error("Failed to update allowlist",K1)})}if(v.type==="closing")return v;if(l.type==="thread-state"){let A1=l.thread.title||null;if(v.threadTitle!==A1&&A1!==null)$.next({type:"thread-title",title:A1});if(F.scanForTaskToolSubthreads(l.thread),w&&W.size===0&&l.thread.messages.length>0){let D1=bf(l.thread,W,N);if(D1.blocks.length>0)$.next({type:"messages",blocks:D1.blocks})}let K1=v.tokenUsage;if(l.thread){let D1=ha(l.thread);if(D1)K1={used:D1.totalInputTokens,maxAvailable:D1.maxInputTokens},$.next({type:"token-usage",tokenUsage:K1})}if(v.type==="awaiting-user-confirmation")if(l.thread.messages.at(-1)?.content.some((D1)=>D1.type==="tool_result"&&(D1.run.status==="in-progress"||D1.run.status==="done"))){let D1=cC(l.thread);if(D1)$.next({type:"state",state:D1});else $.next({type:"state",state:{type:"waiting-on-model",startTime:Date.now()}});return{...v,type:"awaiting-agent",displayedError:null,tokenUsage:K1}}else return{...v,type:"awaiting-user-confirmation",tokenUsage:K1};if(v.type==="awaiting-agent"||v.type==="compacting"){let D1=l.thread.messages.at(-1),N1=bf(l.thread,W,N),n=N1.blocks;if(D1?.role==="assistant"&&D1.state.type==="streaming"&&N1.blocks.length===0){n=[{type:"message",data:[l.thread.messages.length-1,D1]}];let P1=cC(l.thread);if(P1)$.next({type:"state",state:P1})}if(n.length>0){for(let Y1 of n)if(Y1.type==="toolResult"){let[P1,O1]=Y1.data,T1=O1.run.status==="done"?"completed":O1.run.status==="error"?"error":O1.run.status==="cancelled"?"cancelled":"running";if(T1!=="running")$.next({type:"tool-status",toolUse:P1,status:T1,startTime:V.get(P1.id),endTime:Date.now()}),V.delete(P1.id)}$.next({type:"messages",blocks:n})}if(l.thread.messages.at(-1)?.content.some((Y1)=>Y1.type==="summary"))return{...t(),tokenUsage:null,compactionPromptState:"none"};if(D1?.role==="assistant"&&D1?.state.type==="complete"&&D1?.state.stopReason==="end_turn"){$.next({type:"state",state:{type:"idle"}});let Y1=t();return{...Y1,tokenUsage:K1??Y1.tokenUsage}}if(!I)throw new Error("unexpected: thread is required when waiting for tool input");let r=Wz(l.thread,"assistant"),e=r?l.thread.messages.indexOf(r):null;if(e!==null&&e!==v.currentAssistantMessageIndex)f1.info("New assistant message detected, clearing tool confirmations",{oldIndex:v.currentAssistantMessageIndex,newIndex:e,previousToolCount:v.toolConfirmationStatus.size}),v.toolConfirmationStatus.clear(),v.currentAssistantMessageIndex=e;let X1=Wz(l.thread,"user")?.content.filter((Y1)=>Y1.type==="tool_result"&&Y1.run.status==="blocked-on-user")??[],q1=new Set(r?.content.filter((Y1)=>Y1.type==="tool_use").map((Y1)=>Y1.id)??[]),F1=!1;for(let Y1 of X1){if(!q1.has(Y1.toolUseID))continue;let P1=y7(l.thread,Y1.toolUseID),O1=v.toolConfirmationStatus.get(Y1.toolUseID);if(P1&&P1.name===s4&&Y1.run.status==="blocked-on-user"&&O1===void 0){if(v.toolConfirmationStatus.set(Y1.toolUseID,"awaiting"),F1=!0,f1.info("Added new tool to confirmation tracking",{toolUseID:Y1.toolUseID,toolName:P1.name}),!V.has(P1.id))V.set(P1.id,Date.now());$.next({type:"tool-status",toolUse:P1,status:"blocked-on-user",startTime:V.get(P1.id)})}}if(F1){let Y1=Array.from(v.toolConfirmationStatus.entries()).filter(([P1,O1])=>O1==="awaiting");if(Y1.length>0){let[P1]=Y1[0],O1=X1.find((V1)=>V1.toolUseID===P1),T1=O1?y7(l.thread,O1.toolUseID):null;if(O1&&T1)return f1.info(`Starting tool confirmation process for ${Y1.length} tools`,{firstToolID:P1,toolName:T1.name}),$.next({type:"confirm",confirmation:{type:"tool-use",tools:[{useBlock:T1,toAllow:O1.run.status==="blocked-on-user"?O1.run.toAllow:void 0}]}}),{...v,type:"collecting-tool-confirmations",currentToolID:P1,tokenUsage:K1}}}}}else if(l.type==="worker-state"){if(v.type==="awaiting-user-confirmation"&&l.status.state==="active"&&l.status.ephemeralError)return v;if(v.type==="collecting-tool-confirmations")return f1.info("Already collecting tool confirmations, ignoring worker-state event"),v;let A1=I.value.last?.messages.at(-1),K1=v.tokenUsage;if(l.status.state==="active"){let D1=I.value.last;if(D1){let N1=ha(D1);if(N1)K1={used:N1.totalInputTokens,maxAvailable:N1.maxInputTokens},$.next({type:"token-usage",tokenUsage:K1})}}if(v.type==="confirming-compaction"||v.type==="compacting")return{...v,tokenUsage:K1};switch(l.status.state){case"initial":if(v.type==="initializing")return v;return t();case"active":if(l.status.ephemeralError)if(l.status.ephemeralError.message.includes(v4A)){if(v.type==="out-of-credits")return v;return $.next({type:"confirm",confirmation:{type:"out-of-credits"}}),{...v,type:"out-of-credits",tokenUsage:K1}}else if(S4A(l.status.ephemeralError))return f1.info("Context limit error, triggering compaction",{error:l.status.ephemeralError,tokenUsage:K1}),$.next({type:"confirm",confirmation:{type:"compaction",severity:"critical"}}),{type:"confirming-compaction",severity:"critical",tokenUsage:v.tokenUsage,compactionPromptState:v.compactionPromptState,updateState:v.updateState,toolConfirmationStatus:v.toolConfirmationStatus,currentAssistantMessageIndex:v.currentAssistantMessageIndex,hasBeenIdle:v.hasBeenIdle,threadTitle:v.threadTitle,confirmationQueue:v.confirmationQueue};else if(l.status.ephemeralError.message.includes("401 unauthorized"))return $.next({type:"error",error:{type:"unauthorized"},retryable:!1}),f.unsubscribe(),{...v,type:"closing"};else{let D1=l.status.ephemeralError.message;if(f1.error("Ephemeral error",{error:D1}),v.type==="awaiting-agent"&&v.displayedError!==D1)return $.next({type:"error",error:{type:"other",error:D1},retryable:!1}),{...v,type:"awaiting-user-confirmation",tokenUsage:K1};else return v}switch(l.status.inferenceState){case"running":{let D1=I.value.last;if(D1){let N1=cC(D1);if(N1)$.next({type:"state",state:N1});else $.next({type:"state",state:{type:"waiting-on-model",startTime:Date.now()}})}else $.next({type:"state",state:{type:"waiting-on-model",startTime:Date.now()}})}if(v.type==="initializing")return{...v,tokenUsage:K1};return{...v,type:"awaiting-agent",displayedError:null,tokenUsage:K1};case"cancelled":if(v.type==="initializing")return{...v,tokenUsage:K1};if($.next({type:"cancelled"}),$.next({type:"state",state:{type:"idle"}}),v.type==="awaiting-agent"&&v.cancelledWithMessage)return v.cancelledWithMessage=void 0,{...v,tokenUsage:K1};else return{...t(),tokenUsage:K1};case"idle":if(v.type==="initializing")return{...v,tokenUsage:K1};if(A1?.content.some((D1)=>D1.type==="tool_result"&&D1.run.status==="blocked-on-user"))return{...v,type:"awaiting-user-confirmation",tokenUsage:K1};else if(I.value.last?.messages.some((D1)=>D1.role==="user"&&D1.content.some((N1)=>N1.type==="tool_result"&&N1.run.status==="in-progress"))??!1){let D1=I.value.last?.messages.flatMap((n)=>n.content).filter((n)=>n.type==="tool_result"&&("run"in n)&&("status"in n.run)&&n.run.status==="in-progress"),N1=D1?.length??0;if(N1>0){for(let X1 of D1||[]){let q1=y7(I.value.last,X1.toolUseID);if(q1){if(!V.has(X1.toolUseID))V.set(X1.toolUseID,Date.now());$.next({type:"tool-status",toolUse:q1,status:"running",startTime:V.get(X1.toolUseID)})}}let n=N1===1&&D1?.[0]&&I.value.last?y7(I.value.last,D1[0].toolUseID):void 0,r=N1>1&&D1&&I.value.last?D1.slice(1,Math.min(4,D1.length)).map((X1)=>{return y7(I.value.last,X1.toolUseID)?.name||"tool"}).filter(Boolean):void 0,e=n?x51(n.name,N1,Date.now(),n.input,r):{type:"running-tools",toolCount:N1,startTime:Date.now(),queuedTools:r};$.next({type:"state",state:e})}else{let n=I.value.last;if(n){let r=cC(n);if(r)$.next({type:"state",state:r});else $.next({type:"state",state:{type:"idle"}})}else $.next({type:"state",state:{type:"idle"}})}return{...v,type:"awaiting-agent",displayedError:null,tokenUsage:K1}}else if(A1?.role==="assistant"&&A1?.state.type==="complete"&&A1?.state.stopReason==="end_turn")return $.next({type:"state",state:{type:"idle"}}),{...t(),tokenUsage:K1}}}}else if(l.type==="batch-tool-confirmations-complete")if(v.type==="collecting-tool-confirmations"&&v.subthreadContext)return f1.info("Sending batch tool confirmations to subthread",{subThreadID:v.subthreadContext.subThreadID,toolCount:l.responses.size,responses:Array.from(l.responses.entries()).map(([A1,K1])=>({id:A1,accepted:K1}))}),F.handleToolConfirmations(v.subthreadContext.subThreadID,l.responses).catch((A1)=>{f1.error("Failed to send subthread tool confirmations",A1)}),f1.info("Transitioning to awaiting-agent after sending subthread confirmations"),$.next({type:"state",state:{type:"running-tools",startTime:Date.now()}}),{...v,type:"awaiting-agent",displayedError:null};else return f1.info("Sending batch tool confirmations to worker",{toolCount:l.responses.size,responses:Array.from(l.responses.entries()).map(([A1,K1])=>({id:A1,accepted:K1}))}),l.responses.forEach((A1,K1)=>{f1.info("Sending individual tool confirmation to worker",{toolUseID:K1,accepted:A1}),T.handle({type:"user:tool-input",toolUse:K1,value:{accepted:A1}}),v.toolConfirmationStatus.set(K1,"sent")}),f1.info("Transitioning to awaiting-agent after sending batch confirmations"),$.next({type:"state",state:{type:"running-tools",startTime:Date.now()}}),{...v,type:"awaiting-agent",displayedError:null};else if(l.type==="summary:created"){let A1=I.value.last;if(A1){let K1=ha(A1);if(K1){let D1={used:K1.totalInputTokens,maxAvailable:K1.maxInputTokens},N1=v.type==="compacting"?v.preCompactionTokenUsage:null;if(N1){let n=N1.used,r=D1.used,e=n-r,X1=n>0?e/n*100:0;if(e<=0)f1.warn("Compaction did not reduce token usage",{preUsed:n,postUsed:r,reduction:e,threadID:E});else if(X1<10)f1.warn("Compaction reduction was minimal",{preUsed:n,postUsed:r,reduction:e,reductionPercent:X1.toFixed(1),threadID:E});else f1.info("Compaction successful",{preUsed:n,postUsed:r,reduction:e,reductionPercent:X1.toFixed(1),threadID:E})}else f1.warn("No pre-compaction token usage available for validation",{threadID:E});$.next({type:"token-usage",tokenUsage:D1})}}return t()}else if(l.type==="compaction-result")if(l.result)return t();else return $.next({type:"error",error:{type:"other",error:"Compaction failed"},retryable:!1}),$.next({type:"confirm",confirmation:{type:"compaction",severity:l.severity}}),{...v,type:"confirming-compaction",severity:l.severity};else if(l.type==="update-start-updating")return{...v,updateState:"updating"};else if(l.type==="update-result")if(l.success)return setTimeout(()=>{P.next({type:"clear-update-status"})},1e4),{...v,updateState:"success"};else return setTimeout(()=>{P.next({type:"clear-update-status"})},1e4),{...v,updateState:"error"};else if(l.type==="clear-update-status")return{...v,updateState:"none"};else if(l.type==="agent-file-check-complete"){if(v.type==="checking-agent-file")if(l.shouldGenerate)return $.next({type:"confirm",confirmation:{type:"agent-file-creation"}}),{...v,type:"confirming-agent-file-creation"};else return t()}else if(l.type==="tool-status")return $.next({type:"tool-status",toolUse:l.toolUse,status:l.status,startTime:l.startTime,endTime:l.endTime,subthreadID:l.subthreadID}),v;else if(l.type==="subagent-started"){if(v.type==="initializing")return v;return $.next({type:"subagent-started",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription}),v}else if(l.type==="subagent-status")return $.next({type:"subagent-status",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription,agentState:l.agentState}),v;else if(l.type==="subthread-message"){if(l.blocks.length>0)$.next({type:"subthread-messages",subThreadID:l.subThreadID,blocks:l.blocks});return v}else if(l.type==="historic-thread"){if(v.type!=="initializing")throw new Error(`Historic thread event received in unexpected state: ${v.type}`);if(w&&W.size===0&&l.messages.length>0){let K1=bf({id:E,messages:l.messages},W,N);if(K1.blocks.length>0)$.next({type:"messages",blocks:K1.blocks})}let A1={...v,hasThread:!0};if(A1.hasUI&&A1.hasThread)return t();return A1}else if(l.type==="subagent-finished")return $.next({type:"subagent-finished",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription,result:l.result}),v;else if(l.type==="subagent-cancelled")return $.next({type:"subagent-cancelled",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription}),v;else if(l.type==="subagent-error")return $.next({type:"subagent-error",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription,error:l.error}),v;else if(l.type==="subthread-tool-request"){if(l.tools.length>0){if(f1.info(`Received tool confirmation request from subthread ${l.subThreadID}`,{subThreadID:l.subThreadID,agentNumber:l.agentNumber,toolCount:l.tools.length,tools:l.tools.map((A1)=>A1.useBlock.name),queueLength:v.confirmationQueue.length}),v.type==="collecting-tool-confirmations"||v.confirmationQueue.length>0)return f1.info("Queueing tool confirmation request",{subThreadID:l.subThreadID,agentNumber:l.agentNumber,currentQueueLength:v.confirmationQueue.length}),{...v,confirmationQueue:[...v.confirmationQueue,{type:"subthread-tool-request",subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription,tools:l.tools}]};return $.next({type:"confirm",confirmation:{type:"tool-use",tools:l.tools,subthreadID:l.subThreadID,agentNumber:l.agentNumber}}),{...v,type:"collecting-tool-confirmations",currentToolID:l.tools[0]?.useBlock.id||null,subthreadContext:{subThreadID:l.subThreadID,agentNumber:l.agentNumber,taskDescription:l.taskDescription}}}return v}else if(l.type==="lsp-status")return $.next({type:"lsp-status",lspState:l.lspState}),v;else if(l.type==="jetbrains-status")return $.next({type:"jetbrains-status",jetbrainsState:l.jetbrainsState}),v;else if(l.type==="ui-input"){if(l.input.type==="initialized")if(v.type==="initializing"){let A1={...v,hasUI:!0};if(A1.hasUI&&A1.hasThread)if(I.value.last?.messages.length===0)return f1.info("Checking agent file status"),$4A({filesystem:_(E),configService:Q,threadService:B},I.value.last).then((D1)=>{P.next({type:"agent-file-check-complete",shouldGenerate:D1.shouldGenerate})}).catch((D1)=>{f1.error("Agent file check failed",D1),P.next({type:"agent-file-check-complete",shouldGenerate:!1})}),{...v,type:"checking-agent-file"};else return t();return A1}else throw new Error(`UI initialized event received in unexpected state: ${v.type}`);else if(l.input.type=="message"){let{message:A1}=l.input;return a(A1)}else if(l.input.type==="interrupt")if(v.type==="awaiting-agent"){if($.next({type:"cancelled"}),nX.cancel(E),l.input.message)v.cancelledWithMessage=l.input.message;return v}else return v;else if(l.input.type==="exit")return f.unsubscribe(),{...v,type:"closing"};else if(l.input.type==="retry")return nX.retry(E),{...v,type:"awaiting-agent",displayedError:null};else if(l.input.type==="confirmation"){if(v.type==="out-of-credits"&&l.input.confirmation.type==="out-of-credits")nX.retry(E);else if(v.type==="confirming-compaction"&&l.input.confirmation.type==="compaction")if(l.input.allow){let A1="tokenUsage"in v?v.tokenUsage:void 0;return $.next({type:"state",state:{type:"compacting"}}),z1().then(()=>{f1.info("Compaction completed successfully",{preCompactionTokenUsage:A1}),P.next({type:"compaction-result",result:!0,severity:v.severity})}).catch((K1)=>{f1.error("Compaction failed",K1),P.next({type:"compaction-result",result:!1,severity:v.severity})}),{...v,type:"compacting",preCompactionTokenUsage:A1}}else return f1.info("Compaction cancelled"),t();else if(v.type==="collecting-tool-confirmations"&&l.input.confirmation.type==="tool-use"){if(!v.currentToolID)return f1.error("No current tool ID in collecting-tool-confirmations state"),v;if(f1.info(`Received confirmation for tool: ${l.input.allow?"accepted":"rejected"}`,{toolUseID:v.currentToolID,subthreadID:l.input.confirmation.subthreadID}),l.input.confirmation.subthreadID&&v.subthreadContext){f1.info("Sending tool confirmation to subthread",{subThreadID:v.subthreadContext.subThreadID,toolUseID:v.currentToolID,accepted:l.input.allow});let N1=new Map([[v.currentToolID,l.input.allow]]);if(F.handleToolConfirmations(v.subthreadContext.subThreadID,N1).catch((n)=>{f1.error("Failed to send subthread tool confirmation",n)}),v.confirmationQueue.length>0){let n=v.confirmationQueue[0],r=v.confirmationQueue.slice(1);return f1.info("Processing next queued confirmation request",{subThreadID:n.subThreadID,agentNumber:n.agentNumber,remainingQueueLength:r.length}),$.next({type:"confirm",confirmation:{type:"tool-use",tools:n.tools,subthreadID:n.subThreadID,agentNumber:n.agentNumber}}),{...v,type:"collecting-tool-confirmations",currentToolID:n.tools[0]?.useBlock.id||null,subthreadContext:{subThreadID:n.subThreadID,agentNumber:n.agentNumber,taskDescription:n.taskDescription},confirmationQueue:r}}return f1.info("Transitioning to awaiting-agent after sending subthread confirmation"),$.next({type:"state",state:{type:"running-tools",startTime:Date.now()}}),{...v,type:"awaiting-agent",displayedError:null}}v.toolConfirmationStatus.set(v.currentToolID,l.input.allow?"confirmed":"rejected"),G1(l.input.confirmation.addToAllowList);let A1=Array.from(v.toolConfirmationStatus.entries()).filter(([N1,n])=>n==="awaiting");if(A1.length>0){let[N1]=A1[0];if(!I.value.isSet)return f1.error("Thread not available for finding next tool"),v;let e=(I.value.last.messages.at(-1)?.content.filter((q1)=>q1.type==="tool_result"&&q1.run.status==="blocked-on-user")??[]).find((q1)=>q1.toolUseID===N1),X1=e?y7(I.value.last,e.toolUseID):null;if(e&&X1)return f1.info(`Asking confirmation for next tool: ${X1.name}`,{toolUseID:N1,remainingCount:A1.length}),$.next({type:"confirm",confirmation:{type:"tool-use",tools:[{useBlock:X1,toAllow:e.run.status==="blocked-on-user"?e.run.toAllow:void 0}]}}),{...v,currentToolID:N1}}let K1=Array.from(v.toolConfirmationStatus.entries()).filter(([N1,n])=>n==="confirmed"||n==="rejected");f1.info("All tool confirmations collected, sending batch response",{totalTools:K1.length,responses:K1.map(([N1,n])=>({id:N1,accepted:n==="confirmed"}))});let D1=new Map(K1.map(([N1,n])=>[N1,n==="confirmed"]));return P.next({type:"batch-tool-confirmations-complete",responses:D1}),$.next({type:"state",state:{type:"running-tools",startTime:Date.now()}}),{...v,type:"awaiting-agent",displayedError:null}}else if(l.input.confirmation.type==="agent-file-creation"&&v.type==="confirming-agent-file-creation")if(l.input.allow)return f4A(T).catch((A1)=>{f1.error("Agent file generation failed",A1)}),$.next({type:"state",state:{type:"generating-agent-file"}}),{...v,type:"awaiting-agent",displayedError:null};else return t();return v}}return v}),{type:"initializing",hasUI:!1,hasThread:!1,tokenUsage:null,compactionPromptState:"none",updateState:"none",toolConfirmationStatus:new Map,currentAssistantMessageIndex:null,hasBeenIdle:!1,threadTitle:null,confirmationQueue:[]})).subscribe({error:(v)=>{f1.error("Error in state machine",v),u()}});if(w)G.get(E).then((v)=>{if(v&&v.messages)f1.info("Sending historic messages for initialization",{threadId:E,messageCount:v.messages.length}),P.next({type:"historic-thread",messages:v.messages});else f1.info("Sending empty messages for continued thread without stored messages",{threadId:E}),P.next({type:"historic-thread",messages:[]})});else f1.info("Sending empty messages for new thread initialization",{threadId:E}),P.next({type:"historic-thread",messages:[]});return Do6(P).catch((v)=>{f1.debug("Update check startup failed",v)}),await i6(b)}async function Do6(A){try{let Q=await Bk1("0.0.1751636404-g3a463c");if(Q.hasUpdate&&Q.latestVersion)A.next({type:"update-start-updating"}),setTimeout(async()=>{try{await Dk1(Q.latestVersion),A.next({type:"update-result",success:!0,version:Q.latestVersion})}catch(B){f1.info("Update failed",B),A.next({type:"update-result",success:!1,version:Q.latestVersion})}},100);else f1.info("No update available")}catch(Q){f1.debug("Update check failed",Q)}}var u51={WARNING:0.8,SEVERE:0.9,CRITICAL:0.98};S2();uX();e6();bq();function m4A(A){let{stdout:Q,threadID:B,pipedInput:J}=A;function D(z){Q.write(JSON.stringify(z)+`
7412
7412
  `)}return(z)=>{let Z=new q8;if(!J)throw new Error("JSONL UI requires piped input (non-interactive mode)");return f1.debug("setting up JSONL UI"),z.pipe(Zi({onSubscribe:()=>{D({type:"initial",threadID:B}),CT().then(()=>{Z.next({type:"initialized"})})},onUnsubscribe:()=>{f1.debug("JSONL UI stopped")}})).pipe(FZ(()=>{Z.complete()})).pipe(KT(n3("JSONL",(X,K)=>{if(f1.debug("JSONL UI event",{event:K}),X.type==="shutting-down")return X;switch(K.type){case"messages":{let G=(E)=>{return E.map((w)=>{if(w.type==="text"){let{type:H,text:M}=w;return{type:H,text:M}}else if(w.type==="image"){let{type:H,source:M}=w;return{type:H,source:M}}else if(w.type==="tool_result"){let{type:H,toolUseID:M,run:W,userInput:I}=w;return{type:H,toolUseID:M,run:W,userInput:I}}else if(w.type==="thinking"){let{type:H,thinking:M}=w;return{type:H,thinking:M}}else if(w.type==="redacted_thinking"){let{type:H,data:M}=w;return{type:H,data:M}}else if(w.type==="tool_use"){let{type:H,id:M,name:W,input:I}=w,N={type:H,id:M,name:W};if(I!==void 0)N.input=I;return N}else if(w.type==="server_tool_use"){let{type:H,id:M,name:W,input:I}=w;return{type:H,id:M,name:W,input:I}}else if(w.type==="web_search_tool_result"){let{type:H,content:M}=w;return{type:H,content:M}}else if(w.type==="summary"){let{type:H,summary:M}=w;return{type:H,summary:M}}return w})},q=(E)=>{switch(E.status){case"blocked-on-user":case"rejected-by-user":return{status:E.status,toAllow:E.toAllow};case"error":return{status:"error",error:typeof E.error==="object"&&"message"in E.error?E.error:{message:String(E.error)}};case"cancelled":case"in-progress":return{status:E.status,progress:E.progress};case"done":return{status:"done",progress:E.progress,result:E.result,files:E.files};default:return{status:E.status}}},Y=[],F=[];for(let E of K.blocks)if(E.type==="message"){let[w,H]=E.data;if(H.role==="user"){let{role:M,content:W,meta:I}=H,N={role:M,content:G(W),meta:I};Y.push([w,N])}else if(H.role==="assistant"){let{role:M,content:W,state:I}=H,N={role:M,content:G(W),state:I};Y.push([w,N])}else if(H.role==="info"){let{role:M,content:W}=H,I={role:M,content:G(W)};Y.push([w,I])}else Y.push([w,H])}else if(E.type==="toolResult"){let[w,H]=E.data;if(w.input&&H.run!==void 0){let M={type:w.type,id:w.id,name:w.name,input:{}},W={type:H.type,toolUseID:H.toolUseID,run:q(Z5(H.run))};F.push([M,W])}else f1.warn("Skipping tool result",{useBlock:w,resultBlock:H})}return D({type:"messages",messages:Y,toolResults:F}),X}case"cancelled":return D({type:"cancelled"}),X;case"tool-status":return D({type:"tool-status",toolUse:{id:K.toolUse.id,name:K.toolUse.name,input:K.toolUse.input},status:K.status,startTime:K.startTime,endTime:K.endTime,subthreadID:K.subthreadID}),X;case"token-usage":return D({type:"token-usage",tokenUsage:K.tokenUsage}),X;case"accept-message":if(X.type==="initializing")return f1.info("Sending piped input",{pipedInput:J}),Z.next({type:"message",message:J}),{type:"running"};else return Z.next({type:"exit"}),X;case"error":return D({type:"error",error:K.error}),Z.next({type:"exit"}),X;case"confirm":{if(K.confirmation.type==="tool-use")for(let{useBlock:G}of K.confirmation.tools){if(G.name===s4&&G.input&&typeof G.input==="object"&&"cmd"in G.input)D({type:"tool-rejected",tool:G.name,command:String(G.input.cmd),message:`Tool call rejected. To allow automatically, add to ${PE}: {"amp.commands.allowlist": [${JSON.stringify(G.input.cmd)}]}`});Z.next({type:"confirmation",confirmation:{type:"tool-use",toolUseID:G.id,addToAllowList:[]},allow:!1})}else if(K.confirmation.type==="compaction")Z.next({type:"confirmation",confirmation:K.confirmation,allow:!0});else if(K.confirmation.type==="agent-file-creation")Z.next({type:"confirmation",confirmation:K.confirmation,allow:!1});else if(K.confirmation.type==="out-of-credits")D({type:"out-of-credits",message:"Insufficient usage balance. Visit https://ampcode.com/pay to buy more usage."}),Z.next({type:"exit"});else Z.next({type:"confirmation",confirmation:K.confirmation,allow:!1});return X}case"subagent-started":return D({type:"subagent-started",subThreadID:K.subThreadID,agentNumber:K.agentNumber,taskDescription:K.taskDescription}),X;case"subagent-finished":return D({type:"subagent-finished",subThreadID:K.subThreadID,agentNumber:K.agentNumber,taskDescription:K.taskDescription,result:K.result}),X;case"subagent-cancelled":return D({type:"subagent-cancelled",subThreadID:K.subThreadID,agentNumber:K.agentNumber,taskDescription:K.taskDescription}),X;case"subagent-error":return D({type:"subagent-error",subThreadID:K.subThreadID,agentNumber:K.agentNumber,taskDescription:K.taskDescription,error:K.error}),X;case"subagent-status":return D({type:"subagent-status",subThreadID:K.subThreadID,agentNumber:K.agentNumber,taskDescription:K.taskDescription,agentState:K.agentState}),X;case"subthread-messages":{let G=K.blocks.filter((Y)=>Y.type==="message").length,q=K.blocks.filter((Y)=>Y.type==="toolResult").length;return D({type:"subthread-activity",subThreadID:K.subThreadID,messageCount:G,toolResultCount:q}),X}case"state":switch(K.state.type){case"shutting-down":return D({type:"shutdown"}),{type:"shutting-down"};default:return D({type:"state",state:K.state.type}),X}case"lsp-status":return D({type:"lsp-status",lspState:K.lspState}),X}return X}),{type:"initializing"})).subscribe({error:(X)=>{f1.error("Error in JSONL UI:",X),D({type:"error",error:{type:"other",error:X.toString()}}),Z.next({type:"exit"})}}),YA.from(Z)}}S2();uX();S2();import{exec as xf}from"node:child_process";function hf(A="idle"){try{if(A==="idle"){if(process.platform==="darwin")xf("afplay /System/Library/Sounds/Submarine.aiff");else if(process.platform==="win32")xf("powershell [console]::beep(800,200)");else if(process.platform==="linux")xf("paplay /usr/share/sounds/freedesktop/stereo/message.oga || beep")}else if(A==="requires-user-input"){if(process.platform==="darwin")xf("afplay /System/Library/Sounds/Ping.aiff");else if(process.platform==="win32")xf("powershell [console]::beep(1000,300)");else if(process.platform==="linux")xf("paplay /usr/share/sounds/freedesktop/stereo/dialog-information.oga || beep -f 1000 -l 100")}}catch(Q){f1.error(`Failed to play notification sound (${A}):`,Q)}}e6();S2();import{mkdir as u4A,readFile as p4A,writeFile as Zk1,open as zo6}from"node:fs/promises";import{homedir as Zo6}from"node:os";import Ld from"node:path";var Xo6=Ld.join(Vf||Ld.join(Zo6(),".local/share"),"amp"),Ko6=Ld.join(Xo6,"history.jsonl"),Go6=1000;class _d{history=[];index=-1;loaded=!1;historyFile;maxSize;constructor(A){this.historyFile=A?.historyFile||Ko6,this.maxSize=A?.maxSize||Go6,this.ensureLoaded()}async ensureLoaded(){if(!this.loaded)this.history=await this.readHistoryFromDisk(),this.loaded=!0}async readHistoryFromDisk(){try{let A=await p4A(this.historyFile,"utf-8");if(!A.trim())return[];return this.parseJsonlContent(A)}catch(A){if(A.code!=="ENOENT")return f1.warn("Failed to read history file",{error:A.message}),[];if(this.historyFile.endsWith(".jsonl")){let Q=this.historyFile.replace(".jsonl",".json");try{let B=await p4A(Q,"utf-8");if(B.trim()){let J=JSON.parse(B);f1.info("Migrating from old history.json to history.jsonl",{oldFile:Q,newFile:this.historyFile,size:J.length}),await this.writeHistoryToDisk(J);try{await import("node:fs/promises").then((D)=>D.unlink(Q))}catch{}return J}}catch{}}return[]}}parseJsonlContent(A){let Q=A.trim().split(`
7413
7413
  `),B=[];for(let J of Q)if(J.trim())try{let D=JSON.parse(J);if(typeof D==="string")B.push(D);else f1.warn("Skipping non-string entry in history",{line:J,type:typeof D})}catch(D){f1.warn("Skipping invalid JSONL line in history",{line:J})}return f1.info("Loaded history from JSONL file",{file:this.historyFile,size:B.length}),B}async writeHistoryToDisk(A){await u4A(Ld.dirname(this.historyFile),{recursive:!0});let Q=A.map((B)=>JSON.stringify(B)).join(`
7414
7414
  `)+`
@@ -7536,7 +7536,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
7536
7536
  `),l=0,a=0;for(let z1=0;z1<v.length;z1++){let t=b6.default(v[z1]).length;if(l+t>=Y){a=l;break}l+=t+1}if(Y>a){let z1=b6.default.substr(G,a,Y-a);N((t)=>[z1,...t.slice(0,9)]),q((t)=>{let G1=b6.default(t);return G1.slice(0,a).join("")+G1.slice(Y).join("")}),F(a)}return}if(u.ctrl&&b==="k"){let v=G.split(`
7537
7537
  `),l=0,a=b6.default(G).length;for(let z1=0;z1<v.length;z1++){let t=b6.default(v[z1]).length;if(l+t>=Y){a=l+t;break}l+=t+1}if(Y<a){let z1=b6.default.substr(G,Y,a-Y);N((t)=>[z1,...t.slice(0,9)]),q((t)=>{let G1=b6.default(t);return G1.slice(0,Y).join("")+G1.slice(a).join("")})}return}if(u.ctrl&&b==="w"||u.alt&&u.backspace||u.ctrl&&u.backspace){if(Y>0){let v=yQA(G,Y),l=b6.default.substr(G,v,Y-v);N((a)=>[l,...a.slice(0,9)]),q((a)=>{let z1=b6.default(a);return z1.slice(0,v).join("")+z1.slice(Y).join("")}),F(v)}return}if(u.ctrl&&b==="d"||u.delete){if(Y<b6.default(G).length){let v=b6.default.substr(G,Y,1);N((l)=>[v,...l.slice(0,9)]),q((l)=>{let a=b6.default(l);return a.slice(0,Y).join("")+a.slice(Y+1).join("")})}return}if(u.alt&&b==="d"){if(Y<b6.default(G).length){let v=gQA(G,Y),l=b6.default.substr(G,Y,v-Y);N((a)=>[l,...a.slice(0,9)]),q((a)=>{let z1=b6.default(a);return z1.slice(0,Y).join("")+z1.slice(v).join("")})}return}if(u.ctrl&&b==="y"){if(I.length>0){let v=I[0];q((l)=>{let a=b6.default(l);return a.slice(0,Y).join("")+v+a.slice(Y).join("")}),F((l)=>l+b6.default(v).length)}return}let f=u.return&&(u.shift||u.meta||u.ctrl)||!u.return&&b==="\r"||u.escape&&u.meta&&!b||b==="\x1B[27;2;13~"||b==="[27;2;13~"||b==="\x1B[13;2u";if(f1.debug("Modified Enter detection",{isModifiedEnter:f,"key.return":u.return,"key.shift":u.shift,"key.meta":u.meta,"key.ctrl":u.ctrl,keyInput:JSON.stringify(b),hasContent:G.trim().length>0}),f){if($)return;q((v)=>{let l=b6.default(v);return l.slice(0,Y).join("")+`
7538
7538
  `+l.slice(Y).join("")}),F((v)=>v+1);return}if(u.return&&!u.shift&&!u.meta&&!u.ctrl){if($)return;if(G.trim().length>0)g(G.trim());else return;return}if(!u.ctrl&&!u.meta&&!u.tab&&b)q((v)=>{let l=b6.default(v);return l.slice(0,Y).join("")+b+l.slice(Y).join("")}),F((v)=>v+b6.default(b).length)});let g=async(b)=>{if(K({virtualLine:0,column:0}),F(0),w(!0),q(""),N([]),_(!1),R(null),Q)Q.add(b),Q.reset();try{A(b)}catch(u){f1.error("Failed to submit message",u)}finally{w(!1)}};return TA(y6,{flexDirection:"column",width:"100%",flexGrow:1,flexShrink:0,ref:Z,children:M.map((b,u)=>TA(y6,{flexShrink:0,flexDirection:"row",children:TA(y6,{flexGrow:1,flexShrink:0,width:"100%",children:u===X.virtualLine?M9(Ry1,{children:[TA(g6,{dimColor:B,children:b6.default.substr(b.content,0,X.column)||""}),TA(g6,{inverse:!B,dimColor:B,children:b6.default(b.content)[X.column]??" "}),TA(g6,{dimColor:B,children:b6.default.substr(b.content,X.column+1)||""})]}):TA(g6,{dimColor:B,children:b.content||" "})})},u))})}function u12(A,Q){let B=A.split(`
7539
- `),J=[],D=0;for(let z of B){let Z=b6.default(z);if(Z.length<=Q)J.push({type:"start",content:z,originalLine:D,start:0,end:Z.length});else{let X=z.match(/\S+| +/g)||[""],K="",G=0,q=0,Y=!0;for(let F of X){let E=/^ +$/.test(F),w=b6.default(F).length;if(b6.default(K).length+w<=Q)K+=F;else{if(K){let H=K.replace(/ +$/,""),M=b6.default(K),W=b6.default(H);J.push({type:Y?"start":"continuation",content:H,originalLine:D,start:G,end:G+W.length}),q=G+M.length,Y=!1}if(E){q+=w,G=q,K="";continue}if(G=q,w>Q){let H=b6.default(F);for(let M=0;M<H.length;M+=Q){let W=H.slice(M,M+Q).join("");J.push({type:Y?"start":"continuation",content:W,originalLine:D,start:G+M,end:G+M+b6.default(W).length}),Y=!1}q+=w,G=q,K=""}else K=F}if(!E||b6.default(K).length>0)q+=w}if(K){let F=b6.default(K);J.push({type:Y?"start":"continuation",content:K,originalLine:D,start:G,end:G+F.length})}}D++}return J}var t71=G6(z4(),1);function Py1({options:A,onSelect:Q,title:B}){let[J,D]=t71.useState(0);if(oM((z,Z)=>{if(Z.downArrow||Z.ctrl&&z.toLowerCase()==="n"||Z.tab&&!Z.shift)D((X)=>(X+1)%A.length);else if(Z.upArrow||Z.ctrl&&z.toLowerCase()==="p"||Z.shift&&Z.tab)D((X)=>(X-1+A.length)%A.length);else if(Z.return&&A[J])Q(A[J].value);else if(Z.escape)Q(null);else if(Z.ctrlC)Q(null)}),t71.useEffect(()=>{D(0)},[A]),A.length===0)return null;return M9(y6,{flexDirection:"column",borderStyle:"round",paddingX:1,children:[B&&TA(y6,{marginBottom:1,children:TA(g6,{bold:!0,children:B})}),A.map((z,Z)=>TA(y6,{children:M9(g6,{bold:Z===J,color:Z===J?"blue":void 0,children:[Z===J?"» ":" ",z.label]})},Z))]})}async function c12(A,Q){try{return await A.query(Q)}catch(B){return f1.error("Completion failed",B),[]}}var xQA=10;function l12({messages:A,agentState:Q}){if(Q.type!=="streaming-thinking"&&Q.type!=="streaming-text")return null;let B=A.findLast((z)=>z.type==="message"&&z.data[1].role==="assistant"&&z.data[1].state?.type==="streaming");if(!B||B.type!=="message")return null;let[,J]=B.data;if(!J.content.some((z)=>z.type==="thinking"||z.type==="text"))return null;return TA(y6,{flexDirection:"column",marginBottom:1,children:J.content.map((z,Z)=>{if(z.type==="thinking"){let X=z.thinking,K=cd(X,!0);return TA(y6,{flexDirection:"column",marginTop:Z>0?1:0,children:K.map((G,q)=>TA(y6,{children:TA(g6,{children:G})},q))},Z)}else if(z.type==="text")return TA(y6,{marginTop:Z>0?1:0,children:TA(jy1,{children:z.text})},Z);return null})})}function d12(A,Q){let B;switch(A.type){case"tool-use":{if(A.tools.length===1){let J=A.tools[0];if(J?.useBlock)B=i12(J.useBlock);else B="Confirm tool call"}else B=`Confirm ${A.tools.length} tool calls`;break}case"compaction":B=`Compact thread? (${A.severity} token usage)`;break;case"out-of-credits":B="Insufficient usage balance. Retry?";break;case"agent-file-creation":B="Create AGENT.md file for this codebase?";break}if(Q&&Q.total>1)B=`[${Q.current}/${Q.total}] ${B}`;return B}function i12(A){if(A.name===s4){let Q=A.input;return"Run "+al.print(Q.cmd,{foreground:"green",style:"bold"})+`${Q.cwd?` in ${Q.cwd}`:""}?`}else return al.print(`Invoke tool ${A.name} with args ${JSON.stringify(A.input)}?`,{foreground:"yellow"})}function a12(A){switch(A.type){case"tool-use":{let B=A.subthreadID===void 0&&A.tools.some((D)=>D.toAllow),J=[{value:"yes",label:"Yes"},{value:"no",label:"No"}];if(B)J.push({value:"always",label:"Always (add to allowlist)"});return J}case"compaction":return[{value:"yes",label:"Yes"},...A.severity!=="critical"?[{value:"no",label:"No"}]:[]];case"out-of-credits":case"agent-file-creation":return[{value:"yes",label:"Yes"},{value:"no",label:"No"}]}}function n12({todos:A}){if(!Array.isArray(A)||A.length===0)return null;return M9(y6,{borderStyle:"round",paddingX:1,flexDirection:"column",flexGrow:1,flexShrink:0,children:[TA(y6,{children:M9(g6,{bold:!0,children:["TODOs (",A.length,")"]})}),A.map((Q,B)=>TA(y6,{gap:1,children:M9(g6,{wrap:"truncate",children:[TA(g6,{children:"• "}),TA(g6,{bold:Q.status==="in-progress",strikethrough:Q.status==="completed",children:Q.content})]})},Q.id))]})}function hQA(A){return A.filter((Q)=>Q.type==="message").map((Q)=>Q.data[1])}function mQA({outputs:A,inputs:Q,history:B,fuzzyServer:J,useNotifications:D}){let z=Ny1(),[Z,X]=Dk(),[K]=Q_.useState(()=>new q8);Q_.useEffect(()=>{return()=>{K.complete()}},[K]);let[G,q]=Q_.useState({type:"running",agentState:{type:"idle"},tokenUsage:null,lspState:null,jetbrainsState:null,todos:[],showCancelled:!1,rerendering:!1,confirmationQueue:[],currentConfirmation:void 0,totalConfirmations:0,threadTitle:"Untitled",messages:[],activeTools:new Map,subagents:new Map,completions:[],selectedCompletionIndex:0,currentMention:void 0}),Y=(M)=>{q((W)=>{if(W.type!=="confirming"||!W.currentConfirmation)return W;let I=W.currentConfirmation,N=W.confirmationQueue.slice(1),V=M===null?"no":M;if(I.type==="tool-use")for(let{useBlock:T,toAllow:R}of I.tools){let j=V==="yes"||V==="always",P=V==="always"&&R?R:[];Q.next({type:"confirmation",allow:j,confirmation:{type:"tool-use",toolUseID:T.id,addToAllowList:P,subthreadID:I.subthreadID}})}else{let T=V==="yes";Q.next({type:"confirmation",allow:T,confirmation:{type:I.type}})}let _=N[0];if(_)return{...W,type:"confirming",currentConfirmation:_,confirmationQueue:N};else return{...W,type:"running",currentConfirmation:void 0,confirmationQueue:N,totalConfirmations:0}})};Q_.useEffect(()=>{let M=A.subscribe((W)=>{switch(W.type){case"state":{switch(W.state.type){case"shutting-down":q({...G,type:"exiting"}),CT().then(()=>{z.exit()});break;case"idle":if(D)hf("idle");q((I)=>({...I,agentState:W.state}));break;default:q((I)=>({...I,agentState:W.state}));break}break}case"messages":{q((I)=>{let N=[...I.messages,...W.blocks],V=hQA(N),_=ua({messages:V});return{...I,messages:N,todos:Array.isArray(_)?_:[],showCancelled:!1}});break}case"token-usage":{q((I)=>({...I,tokenUsage:W.tokenUsage}));break}case"lsp-status":{q((I)=>({...I,lspState:W.lspState}));break}case"jetbrains-status":{q((I)=>({...I,jetbrainsState:W.jetbrainsState}));break}case"cancelled":{q((I)=>({...I,showCancelled:!0,activeTools:new Map,subagents:new Map}));break}case"tool-status":{q((I)=>{let N=new Map(I.activeTools);if(W.toolUse.name===ZQ)return{...I,activeTools:N};if(W.status==="completed"||W.status==="error"||W.status==="cancelled")N.delete(W.toolUse.id);else{let V=W.subthreadID;N.set(W.toolUse.id,{toolUse:W.toolUse,status:W.status,startTime:W.startTime,endTime:W.endTime,subthreadID:V})}return{...I,activeTools:N}});break}case"subthread-messages":break;case"subagent-started":{q((I)=>({...I,subagents:new Map(I.subagents).set(W.subThreadID,{subThreadID:W.subThreadID,agentNumber:W.agentNumber,taskDescription:W.taskDescription,status:"running",startTime:Date.now()})}));break}case"subagent-finished":{q((I)=>{let N=new Map(I.subagents);return N.delete(W.subThreadID),{...I,subagents:N}});break}case"subagent-cancelled":{q((I)=>{let N=new Map(I.subagents);return N.delete(W.subThreadID),{...I,subagents:N}});break}case"subagent-error":{q((I)=>{let N=new Map(I.subagents);return N.delete(W.subThreadID),{...I,subagents:N}});break}case"subagent-status":{q((I)=>{let N=new Map(I.subagents),V=N.get(W.subThreadID);if(V)N.set(W.subThreadID,{...V,agentState:W.agentState});return{...I,subagents:N}});break}case"confirm":{if(D)hf("requires-user-input");q((I)=>{let N=[...I.confirmationQueue,W.confirmation];if(I.type==="running"&&N.length===1)return{...I,type:"confirming",currentConfirmation:W.confirmation,confirmationQueue:N,totalConfirmations:N.length};else return{...I,confirmationQueue:N,totalConfirmations:Math.max(I.totalConfirmations,N.length)}});break}case"thread-title":{q((I)=>({...I,threadTitle:W.title}));break}default:f1.info("unhandled ui output",W);break}});return()=>{M.unsubscribe()}},[A,z]);let F=async(M,W)=>{let I=await c12(J,M);q((N)=>({...N,completions:I,selectedCompletionIndex:0,currentMention:W}))},E=()=>{q((M)=>({...M,completions:[],selectedCompletionIndex:0,currentMention:void 0}))},w=(M)=>{if(M!==null)K.next(M),q((W)=>({...W,completions:[],selectedCompletionIndex:0,currentMention:void 0}));else E()};Q_.useEffect(()=>{let M=null,W=()=>{q((I)=>({...I,rerendering:!0})),process.stdout.write("\x1B[2J"),process.stdout.write("\x1B[3J"),process.stdout.write("\x1B[H"),M=setTimeout(()=>{q((I)=>({...I,rerendering:!1}))},xQA)};return process.stdout.on("resize",W),()=>{if(M)clearTimeout(M);process.stdout.off("resize",W)}},[]),oM((M,W)=>{if(G.type==="expanded-view")return;if(G.type==="confirming")return;if(W.escape)Q.next({type:"interrupt"});else if(W.ctrl&&M.toLowerCase()==="r")q({...G,type:"expanded-view"});else if(W.ctrlL)q((I)=>({...I,rerendering:!0})),process.stdout.write("\x1B[2J"),process.stdout.write("\x1B[3J"),process.stdout.write("\x1B[H"),setTimeout(()=>{q((I)=>({...I,rerendering:!1}))},xQA);else if(W.ctrlC)if(G.type==="confirming-exit")Q.next({type:"exit"});else q({...G,type:"confirming-exit"}),setTimeout(()=>{q({...G,type:"running"})},1000)});let H=Z>100;if(G.type==="expanded-view"){let M=hQA(G.messages);return TA(kQA,{threadName:G.threadTitle,messages:M,onExit:()=>q({...G,type:"running"})})}return M9(y6,{flexDirection:"column",minHeight:"100%",flexGrow:1,height:G.rerendering&&G.messages.length==0?0:"auto",children:[!G.rerendering&&TA(l71,{items:G.messages,children:(M,W)=>TA(y6,{children:TA(s12,{block:M,marginTop:W===0?0:1},W)},W)}),G.showCancelled&&TA(y6,{marginTop:1,children:TA(g6,{color:"gray",children:"Cancelled"})}),G.type!=="exiting"&&M9(y6,{flexDirection:"column",marginTop:1,children:[TA(l12,{messages:G.messages,agentState:G.agentState}),TA(VQA,{agentState:G.agentState,activeTools:G.activeTools,subagents:G.subagents}),TA(vQA,{activeTools:G.activeTools,subagents:G.subagents,messages:G.messages}),G.type==="confirming"&&G.currentConfirmation&&TA(y6,{marginBottom:1,children:TA(Py1,{title:d12(G.currentConfirmation,{current:G.totalConfirmations-G.confirmationQueue.length,total:G.totalConfirmations}),options:a12(G.currentConfirmation),onSelect:Y})}),M9(y6,{flexDirection:H?"row-reverse":"column",children:[G.todos.length>0&&TA(y6,{flexGrow:0,flexShrink:0,width:H?"auto":"100%",children:TA(n12,{todos:G.todos})}),TA(y6,{flexGrow:1,borderStyle:"round",paddingX:1,children:TA(bQA,{onSubmit:(M)=>{Q.next({type:"message",message:M})},history:B,disabled:G.type==="confirming",onCompletionRequest:F,onCompletionCancel:E,selectedCompletions:K})})]}),G.completions.length>0&&(()=>{let M=Math.min(10,Math.max(3,Math.floor(X*0.4))),W=G.completions.slice(0,M);return TA(y6,{marginBottom:1,children:TA(Py1,{title:`File mentions (${W.length}${G.completions.length>M?`/${G.completions.length}`:""})`,options:W.map((I)=>({value:I,label:I})),onSelect:w})})})(),M9(y6,{gap:2,children:[M9(y6,{flexGrow:1,children:[G.type==="confirming-exit"&&TA(g6,{dimColor:!0,children:"Ctrl+C again to exit"}),G.type==="confirming"&&TA(g6,{dimColor:!0,children:"Escape to cancel"}),G.type==="running"&&M9(y6,{gap:1,children:[TA(y6,{gap:1,children:TA(g6,{dimColor:!0,children:"Enter to submit,"})}),TA(y6,{gap:1,children:TA(g6,{dimColor:!0,children:"Ctrl+R to expand"})})]})]}),M9(y6,{flexGrow:0,gap:2,children:[TA(o12,{lspState:G.lspState}),TA(t12,{jetbrainsStatus:G.jetbrainsState}),G.tokenUsage&&TA(r12,{tokenUsage:G.tokenUsage})]})]})]})]})}function s12({block:A,marginTop:Q=0}){if(A.type==="message"){let[,B]=A.data;if(B.role==="assistant"&&B.state?.type==="streaming")return null;if(!B.content.some((D)=>D.type==="text"&&B.role!=="info"))return null;return TA(y6,{flexDirection:"column",gap:1,marginTop:Q,children:B.content.map((D,z)=>{if(D.type==="text")switch(B.role){case"assistant":return TA(y6,{children:TA(jy1,{children:D.text})},z);case"user":return TA(y6,{borderStyle:"bold",borderColor:"green",borderLeft:!0,borderTop:!1,borderBottom:!1,borderRight:!1,paddingLeft:1,children:TA(g6,{color:"green",italic:!0,children:D.text})},z);case"info":return TA(y6,{children:TA(g6,{color:"gray",children:D.text})},z)}else if(D.type==="thinking"){let Z=D.thinking,X=cd(Z,!1);if(X.length===0)return null;return TA(y6,{flexDirection:"column",children:X.map((K,G)=>TA(y6,{children:TA(g6,{children:K})},G))},z)}return null})})}else if(A.type==="toolResult"){let[B,J]=A.data,D=o71(B,J,!1);if(D.length===0)return null;return TA(y6,{marginTop:Q,flexDirection:"column",children:D.map((z,Z)=>TA(y6,{children:TA(g6,{children:z})},Z))})}}function r12({tokenUsage:A}){let Q=A.used/A.maxAvailable,B=Math.round(Q*100),J=Math.max(0,Math.min(B,100)),D="▁▂▃▄▅▆▇█",z=Math.floor(J*8/100),X="▁▂▃▄▅▆▇█"[Math.max(0,Math.min(z,7))],K=`${J}% ┃${X}┃`,G=0.8,q=0.9,Y;if(Q>=0.9)Y="red";else if(Q>=0.8)Y="yellow";return TA(g6,{color:Y,children:K})}function o12({lspState:A}){if(!A||Object.keys(A.servers).length===0)return null;let Q=Object.values(A.servers).map((B)=>{let J=B.status==="active"?"✓":B.status==="starting"?"⧗":"×",D=B.status==="active"?"green":B.status==="starting"?"yellow":"red";return{symbol:J,serverName:B.serverName,color:D}});return TA(y6,{gap:1,children:Q.map(({symbol:B,serverName:J,color:D},z)=>M9(g6,{color:D,children:[B," ",J]},z))})}function t12({jetbrainsStatus:A}){if(!A||!A.enabled)return null;let Q=process.cwd(),B=A.productName&&A.openFile&&A.workspace===Q,J;if(!A.productName)J=" IDE Not Running. To fix this problem, start your JetBrains IDE, exit this session and run `amp threads continue`.";else if(!A.workspace)J=" Workspace Not Found. To fix this problem, open a project in your JetBrains IDE.";else if(A.workspace!==Q)J=` Workspace Mismatch. The currently open project "${A.workspace}" does not match the working directory of Amp CLI ("${Q}").`;return TA(y6,{gap:B?1:2,children:M9(g6,{color:B?"green":"red",children:[B?"✓":"×"," ",A.productName??"JetBrains"," ",B?"• "+p12.basename(A.openFile??""):J]})})}global.React=Sy1.default;function uQA(A){return JA.level=1,(Q)=>{let B=new q8;return Iy1(Sy1.default.createElement(mQA,{inputs:B,outputs:Q,history:A.history,fuzzyServer:A.fuzzyServer,useNotifications:A.useNotifications}),{patchConsole:!0,exitOnCtrlC:!1,stdout:A.stdout}).waitUntilExit().then(()=>{B.complete()}).catch((D)=>{B.next({type:"exit"})}),YA.from(B)}}var $y1=vy1.join(kAA||vy1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");async function fy1(A){try{await A02(vy1.dirname($y1),{recursive:!0}),await B02($y1,A,"utf-8")}catch(Q){f1.debug("Failed to save last thread ID",Q)}}async function e71(){try{return(await Q02($y1,"utf-8")).trim()}catch(A){return null}}var J02=[{name:"notifications",long:"notifications",type:"flag",default:!1,description:(A)=>`${A?"Enable":"Disable"} sound notifications (enabled by default when interactive)`},{name:"interactive",long:"interactive",type:"switch",default:!1,description:"Force interactive mode"},{name:"color",long:"color",type:"flag",description:(A)=>`${A?"Enable":"Disable"} color output (enabled by default if stdout and stderr are sent to a TTY)`},{name:"settingsFile",long:"settings-file",type:"option",description:`Custom settings file path (overrides the default location ${PE})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(f1).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:"Set log file location"},{name:"format",long:"format",type:"option",default:"ui",description:"Output format (ui: interactive terminal, jsonl: JSON Lines for scripts)",choices:["ui","jsonl","new-ui"],hidden:!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:process.env.TERMINAL_EMULATOR?.includes("JetBrains")??!1,description:(A)=>`${A?"Enable":"Disable"} JetBrains integration. Requires the JetBrains MCP plugin to be installed and you must start Amp in the same directory as your JetBrains project. When enabled, Amp CLI automatically includes your open JetBrains file and text selection with every message, just like it does in VS Code.`,hidden:!0}];function D02(A,Q){let B=Q.args[0],J=Q.commands.map((z)=>z.name());if(B&&!B.includes(" ")&&B.length<30&&!/[./\\]/.test(B)){let z=J.filter((X)=>B.includes(X)||X.includes(B)),Z="Run amp --help for a list of available commands.";if(z.length>0)Z=`Did you mean: ${z.join(", ")}? Or run amp --help for all commands.`;throw new QX(Jq.unknownCommand(B),1,Z)}}class cQA{async environment(){let A=process.cwd(),Q=j8.file(A),B=AG1(null),J=await rn1(Q,B,{workingDirectory:Q});return{workspacePaths:[A],workingDirectory:A,rootDirectoryListing:J}}}async function B_(A,Q){gf({logLevel:Q.logLevel||process.env.AMP_LOG_LEVEL,logFile:Q.logFile||process.env.AMP_LOG_FILE}),zl1("0.0.1751635281-g3a463c");let B=Q.settingsFile??process.env.AMP_SETTINGS_FILE;f1.info("Using settings file",{settingsFile:B});let J=el(),D=lv1({settingsFile:B}),z=process.env.AMP_API_KEY;if(z)await J.set("apiKey",z,A.ampURL);let Z=xX1({storage:D,secretStorage:J,workspaceRoots:YA.of([j8.file(process.cwd())]),defaultAmpURL:A.ampURL}),X=new cQA,K=gq(),G=oa1({configService:Z,toolService:K});try{await G.initialized}catch(_){f1.warn("Failed to wait for MCP servers, continuing anyway:",_)}let q=await i6(u8);if(Q.dangerouslyAllowAll)q.settings.dangerouslyAllowAll=!0;if(Q.jetbrains){if(q.settings["jetbrains.enabled"]=!0,Ta.subscribe((T)=>{f1.info("jetbrains-status",T)}),await IX1(),!await jc1())l2.write(A.printer.print("Error: ",{foreground:"red",style:"bold"})+"JetBrains IDE not running."),process.exit(1)}let Y=q.settings["experimental.reviewTool"]??!1,F=q.settings["experimental.tools"]??[];pP1(K,!1,Y,F);let E,w;if(A.isInteractiveMode){E=new v51,await E.start();try{await A4A(E,process.cwd())}catch(_){f1.error("Failed to index files for fuzzy completion",_)}w=Q4A(E,process.cwd())}else E=new class extends v51{async start(){}async query(){return[]}dispose(){}},w={[Symbol.dispose]:()=>{}};if(!await J.get("apiKey",A.ampURL)){if(G7.write(`No API key found. Starting login flow...
7539
+ `),J=[],D=0;for(let z of B){let Z=b6.default(z);if(Z.length<=Q)J.push({type:"start",content:z,originalLine:D,start:0,end:Z.length});else{let X=z.match(/\S+| +/g)||[""],K="",G=0,q=0,Y=!0;for(let F of X){let E=/^ +$/.test(F),w=b6.default(F).length;if(b6.default(K).length+w<=Q)K+=F;else{if(K){let H=K.replace(/ +$/,""),M=b6.default(K),W=b6.default(H);J.push({type:Y?"start":"continuation",content:H,originalLine:D,start:G,end:G+W.length}),q=G+M.length,Y=!1}if(E){q+=w,G=q,K="";continue}if(G=q,w>Q){let H=b6.default(F);for(let M=0;M<H.length;M+=Q){let W=H.slice(M,M+Q).join("");J.push({type:Y?"start":"continuation",content:W,originalLine:D,start:G+M,end:G+M+b6.default(W).length}),Y=!1}q+=w,G=q,K=""}else K=F}if(!E||b6.default(K).length>0)q+=w}if(K){let F=b6.default(K);J.push({type:Y?"start":"continuation",content:K,originalLine:D,start:G,end:G+F.length})}}D++}return J}var t71=G6(z4(),1);function Py1({options:A,onSelect:Q,title:B}){let[J,D]=t71.useState(0);if(oM((z,Z)=>{if(Z.downArrow||Z.ctrl&&z.toLowerCase()==="n"||Z.tab&&!Z.shift)D((X)=>(X+1)%A.length);else if(Z.upArrow||Z.ctrl&&z.toLowerCase()==="p"||Z.shift&&Z.tab)D((X)=>(X-1+A.length)%A.length);else if(Z.return&&A[J])Q(A[J].value);else if(Z.escape)Q(null);else if(Z.ctrlC)Q(null)}),t71.useEffect(()=>{D(0)},[A]),A.length===0)return null;return M9(y6,{flexDirection:"column",borderStyle:"round",paddingX:1,children:[B&&TA(y6,{marginBottom:1,children:TA(g6,{bold:!0,children:B})}),A.map((z,Z)=>TA(y6,{children:M9(g6,{bold:Z===J,color:Z===J?"blue":void 0,children:[Z===J?"» ":" ",z.label]})},Z))]})}async function c12(A,Q){try{return await A.query(Q)}catch(B){return f1.error("Completion failed",B),[]}}var xQA=10;function l12({messages:A,agentState:Q}){if(Q.type!=="streaming-thinking"&&Q.type!=="streaming-text")return null;let B=A.findLast((z)=>z.type==="message"&&z.data[1].role==="assistant"&&z.data[1].state?.type==="streaming");if(!B||B.type!=="message")return null;let[,J]=B.data;if(!J.content.some((z)=>z.type==="thinking"||z.type==="text"))return null;return TA(y6,{flexDirection:"column",marginBottom:1,children:J.content.map((z,Z)=>{if(z.type==="thinking"){let X=z.thinking,K=cd(X,!0);return TA(y6,{flexDirection:"column",marginTop:Z>0?1:0,children:K.map((G,q)=>TA(y6,{children:TA(g6,{children:G})},q))},Z)}else if(z.type==="text")return TA(y6,{marginTop:Z>0?1:0,children:TA(jy1,{children:z.text})},Z);return null})})}function d12(A,Q){let B;switch(A.type){case"tool-use":{if(A.tools.length===1){let J=A.tools[0];if(J?.useBlock)B=i12(J.useBlock);else B="Confirm tool call"}else B=`Confirm ${A.tools.length} tool calls`;break}case"compaction":B=`Compact thread? (${A.severity} token usage)`;break;case"out-of-credits":B="Insufficient usage balance. Retry?";break;case"agent-file-creation":B="Create AGENT.md file for this codebase?";break}if(Q&&Q.total>1)B=`[${Q.current}/${Q.total}] ${B}`;return B}function i12(A){if(A.name===s4){let Q=A.input;return"Run "+al.print(Q.cmd,{foreground:"green",style:"bold"})+`${Q.cwd?` in ${Q.cwd}`:""}?`}else return al.print(`Invoke tool ${A.name} with args ${JSON.stringify(A.input)}?`,{foreground:"yellow"})}function a12(A){switch(A.type){case"tool-use":{let B=A.subthreadID===void 0&&A.tools.some((D)=>D.toAllow),J=[{value:"yes",label:"Yes"},{value:"no",label:"No"}];if(B)J.push({value:"always",label:"Always (add to allowlist)"});return J}case"compaction":return[{value:"yes",label:"Yes"},...A.severity!=="critical"?[{value:"no",label:"No"}]:[]];case"out-of-credits":case"agent-file-creation":return[{value:"yes",label:"Yes"},{value:"no",label:"No"}]}}function n12({todos:A}){if(!Array.isArray(A)||A.length===0)return null;return M9(y6,{borderStyle:"round",paddingX:1,flexDirection:"column",flexGrow:1,flexShrink:0,children:[TA(y6,{children:M9(g6,{bold:!0,children:["TODOs (",A.length,")"]})}),A.map((Q,B)=>TA(y6,{gap:1,children:M9(g6,{wrap:"truncate",children:[TA(g6,{children:"• "}),TA(g6,{bold:Q.status==="in-progress",strikethrough:Q.status==="completed",children:Q.content})]})},Q.id))]})}function hQA(A){return A.filter((Q)=>Q.type==="message").map((Q)=>Q.data[1])}function mQA({outputs:A,inputs:Q,history:B,fuzzyServer:J,useNotifications:D}){let z=Ny1(),[Z,X]=Dk(),[K]=Q_.useState(()=>new q8);Q_.useEffect(()=>{return()=>{K.complete()}},[K]);let[G,q]=Q_.useState({type:"running",agentState:{type:"idle"},tokenUsage:null,lspState:null,jetbrainsState:null,todos:[],showCancelled:!1,rerendering:!1,confirmationQueue:[],currentConfirmation:void 0,totalConfirmations:0,threadTitle:"Untitled",messages:[],activeTools:new Map,subagents:new Map,completions:[],selectedCompletionIndex:0,currentMention:void 0}),Y=(M)=>{q((W)=>{if(W.type!=="confirming"||!W.currentConfirmation)return W;let I=W.currentConfirmation,N=W.confirmationQueue.slice(1),V=M===null?"no":M;if(I.type==="tool-use")for(let{useBlock:T,toAllow:R}of I.tools){let j=V==="yes"||V==="always",P=V==="always"&&R?R:[];Q.next({type:"confirmation",allow:j,confirmation:{type:"tool-use",toolUseID:T.id,addToAllowList:P,subthreadID:I.subthreadID}})}else{let T=V==="yes";Q.next({type:"confirmation",allow:T,confirmation:{type:I.type}})}let _=N[0];if(_)return{...W,type:"confirming",currentConfirmation:_,confirmationQueue:N};else return{...W,type:"running",currentConfirmation:void 0,confirmationQueue:N,totalConfirmations:0}})};Q_.useEffect(()=>{let M=A.subscribe((W)=>{switch(W.type){case"state":{switch(W.state.type){case"shutting-down":q({...G,type:"exiting"}),CT().then(()=>{z.exit()});break;case"idle":if(D)hf("idle");q((I)=>({...I,agentState:W.state}));break;default:q((I)=>({...I,agentState:W.state}));break}break}case"messages":{q((I)=>{let N=[...I.messages,...W.blocks],V=hQA(N),_=ua({messages:V});return{...I,messages:N,todos:Array.isArray(_)?_:[],showCancelled:!1}});break}case"token-usage":{q((I)=>({...I,tokenUsage:W.tokenUsage}));break}case"lsp-status":{q((I)=>({...I,lspState:W.lspState}));break}case"jetbrains-status":{q((I)=>({...I,jetbrainsState:W.jetbrainsState}));break}case"cancelled":{q((I)=>({...I,showCancelled:!0,activeTools:new Map,subagents:new Map}));break}case"tool-status":{q((I)=>{let N=new Map(I.activeTools);if(W.toolUse.name===ZQ)return{...I,activeTools:N};if(W.status==="completed"||W.status==="error"||W.status==="cancelled")N.delete(W.toolUse.id);else{let V=W.subthreadID;N.set(W.toolUse.id,{toolUse:W.toolUse,status:W.status,startTime:W.startTime,endTime:W.endTime,subthreadID:V})}return{...I,activeTools:N}});break}case"subthread-messages":break;case"subagent-started":{q((I)=>({...I,subagents:new Map(I.subagents).set(W.subThreadID,{subThreadID:W.subThreadID,agentNumber:W.agentNumber,taskDescription:W.taskDescription,status:"running",startTime:Date.now()})}));break}case"subagent-finished":{q((I)=>{let N=new Map(I.subagents);return N.delete(W.subThreadID),{...I,subagents:N}});break}case"subagent-cancelled":{q((I)=>{let N=new Map(I.subagents);return N.delete(W.subThreadID),{...I,subagents:N}});break}case"subagent-error":{q((I)=>{let N=new Map(I.subagents);return N.delete(W.subThreadID),{...I,subagents:N}});break}case"subagent-status":{q((I)=>{let N=new Map(I.subagents),V=N.get(W.subThreadID);if(V)N.set(W.subThreadID,{...V,agentState:W.agentState});return{...I,subagents:N}});break}case"confirm":{if(D)hf("requires-user-input");q((I)=>{let N=[...I.confirmationQueue,W.confirmation];if(I.type==="running"&&N.length===1)return{...I,type:"confirming",currentConfirmation:W.confirmation,confirmationQueue:N,totalConfirmations:N.length};else return{...I,confirmationQueue:N,totalConfirmations:Math.max(I.totalConfirmations,N.length)}});break}case"thread-title":{q((I)=>({...I,threadTitle:W.title}));break}default:f1.info("unhandled ui output",W);break}});return()=>{M.unsubscribe()}},[A,z]);let F=async(M,W)=>{let I=await c12(J,M);q((N)=>({...N,completions:I,selectedCompletionIndex:0,currentMention:W}))},E=()=>{q((M)=>({...M,completions:[],selectedCompletionIndex:0,currentMention:void 0}))},w=(M)=>{if(M!==null)K.next(M),q((W)=>({...W,completions:[],selectedCompletionIndex:0,currentMention:void 0}));else E()};Q_.useEffect(()=>{let M=null,W=()=>{q((I)=>({...I,rerendering:!0})),process.stdout.write("\x1B[2J"),process.stdout.write("\x1B[3J"),process.stdout.write("\x1B[H"),M=setTimeout(()=>{q((I)=>({...I,rerendering:!1}))},xQA)};return process.stdout.on("resize",W),()=>{if(M)clearTimeout(M);process.stdout.off("resize",W)}},[]),oM((M,W)=>{if(G.type==="expanded-view")return;if(G.type==="confirming")return;if(W.escape)Q.next({type:"interrupt"});else if(W.ctrl&&M.toLowerCase()==="r")q({...G,type:"expanded-view"});else if(W.ctrlL)q((I)=>({...I,rerendering:!0})),process.stdout.write("\x1B[2J"),process.stdout.write("\x1B[3J"),process.stdout.write("\x1B[H"),setTimeout(()=>{q((I)=>({...I,rerendering:!1}))},xQA);else if(W.ctrlC)if(G.type==="confirming-exit")Q.next({type:"exit"});else q({...G,type:"confirming-exit"}),setTimeout(()=>{q({...G,type:"running"})},1000)});let H=Z>100;if(G.type==="expanded-view"){let M=hQA(G.messages);return TA(kQA,{threadName:G.threadTitle,messages:M,onExit:()=>q({...G,type:"running"})})}return M9(y6,{flexDirection:"column",minHeight:"100%",flexGrow:1,height:G.rerendering&&G.messages.length==0?0:"auto",children:[!G.rerendering&&TA(l71,{items:G.messages,children:(M,W)=>TA(y6,{children:TA(s12,{block:M,marginTop:W===0?0:1},W)},W)}),G.showCancelled&&TA(y6,{marginTop:1,children:TA(g6,{color:"gray",children:"Cancelled"})}),G.type!=="exiting"&&M9(y6,{flexDirection:"column",marginTop:1,children:[TA(l12,{messages:G.messages,agentState:G.agentState}),TA(VQA,{agentState:G.agentState,activeTools:G.activeTools,subagents:G.subagents}),TA(vQA,{activeTools:G.activeTools,subagents:G.subagents,messages:G.messages}),G.type==="confirming"&&G.currentConfirmation&&TA(y6,{marginBottom:1,children:TA(Py1,{title:d12(G.currentConfirmation,{current:G.totalConfirmations-G.confirmationQueue.length,total:G.totalConfirmations}),options:a12(G.currentConfirmation),onSelect:Y})}),M9(y6,{flexDirection:H?"row-reverse":"column",children:[G.todos.length>0&&TA(y6,{flexGrow:0,flexShrink:0,width:H?"auto":"100%",children:TA(n12,{todos:G.todos})}),TA(y6,{flexGrow:1,borderStyle:"round",paddingX:1,children:TA(bQA,{onSubmit:(M)=>{Q.next({type:"message",message:M})},history:B,disabled:G.type==="confirming",onCompletionRequest:F,onCompletionCancel:E,selectedCompletions:K})})]}),G.completions.length>0&&(()=>{let M=Math.min(10,Math.max(3,Math.floor(X*0.4))),W=G.completions.slice(0,M);return TA(y6,{marginBottom:1,children:TA(Py1,{title:`File mentions (${W.length}${G.completions.length>M?`/${G.completions.length}`:""})`,options:W.map((I)=>({value:I,label:I})),onSelect:w})})})(),M9(y6,{gap:2,children:[M9(y6,{flexGrow:1,children:[G.type==="confirming-exit"&&TA(g6,{dimColor:!0,children:"Ctrl+C again to exit"}),G.type==="confirming"&&TA(g6,{dimColor:!0,children:"Escape to cancel"}),G.type==="running"&&M9(y6,{gap:1,children:[TA(y6,{gap:1,children:TA(g6,{dimColor:!0,children:"Enter to submit,"})}),TA(y6,{gap:1,children:TA(g6,{dimColor:!0,children:"Ctrl+R to expand"})})]})]}),M9(y6,{flexGrow:0,gap:2,children:[TA(o12,{lspState:G.lspState}),TA(t12,{jetbrainsStatus:G.jetbrainsState}),G.tokenUsage&&TA(r12,{tokenUsage:G.tokenUsage})]})]})]})]})}function s12({block:A,marginTop:Q=0}){if(A.type==="message"){let[,B]=A.data;if(B.role==="assistant"&&B.state?.type==="streaming")return null;if(!B.content.some((D)=>D.type==="text"&&B.role!=="info"))return null;return TA(y6,{flexDirection:"column",gap:1,marginTop:Q,children:B.content.map((D,z)=>{if(D.type==="text")switch(B.role){case"assistant":return TA(y6,{children:TA(jy1,{children:D.text})},z);case"user":return TA(y6,{borderStyle:"bold",borderColor:"green",borderLeft:!0,borderTop:!1,borderBottom:!1,borderRight:!1,paddingLeft:1,children:TA(g6,{color:"green",italic:!0,children:D.text})},z);case"info":return TA(y6,{children:TA(g6,{color:"gray",children:D.text})},z)}else if(D.type==="thinking"){let Z=D.thinking,X=cd(Z,!1);if(X.length===0)return null;return TA(y6,{flexDirection:"column",children:X.map((K,G)=>TA(y6,{children:TA(g6,{children:K})},G))},z)}return null})})}else if(A.type==="toolResult"){let[B,J]=A.data,D=o71(B,J,!1);if(D.length===0)return null;return TA(y6,{marginTop:Q,flexDirection:"column",children:D.map((z,Z)=>TA(y6,{children:TA(g6,{children:z})},Z))})}}function r12({tokenUsage:A}){let Q=A.used/A.maxAvailable,B=Math.round(Q*100),J=Math.max(0,Math.min(B,100)),D="▁▂▃▄▅▆▇█",z=Math.floor(J*8/100),X="▁▂▃▄▅▆▇█"[Math.max(0,Math.min(z,7))],K=`${J}% ┃${X}┃`,G=0.8,q=0.9,Y;if(Q>=0.9)Y="red";else if(Q>=0.8)Y="yellow";return TA(g6,{color:Y,children:K})}function o12({lspState:A}){if(!A||Object.keys(A.servers).length===0)return null;let Q=Object.values(A.servers).map((B)=>{let J=B.status==="active"?"✓":B.status==="starting"?"⧗":"×",D=B.status==="active"?"green":B.status==="starting"?"yellow":"red";return{symbol:J,serverName:B.serverName,color:D}});return TA(y6,{gap:1,children:Q.map(({symbol:B,serverName:J,color:D},z)=>M9(g6,{color:D,children:[B," ",J]},z))})}function t12({jetbrainsStatus:A}){if(!A||!A.enabled)return null;let Q=process.cwd(),B=A.productName&&A.openFile&&A.workspace===Q,J;if(!A.productName)J=" IDE Not Running. To fix this problem, start your JetBrains IDE, exit this session and run `amp threads continue`.";else if(!A.workspace)J=" Workspace Not Found. To fix this problem, open a project in your JetBrains IDE.";else if(A.workspace!==Q)J=` Workspace Mismatch. The currently open project "${A.workspace}" does not match the working directory of Amp CLI ("${Q}").`;return TA(y6,{gap:B?1:2,children:M9(g6,{color:B?"green":"red",children:[B?"✓":"×"," ",A.productName??"JetBrains"," ",B?"• "+p12.basename(A.openFile??""):J]})})}global.React=Sy1.default;function uQA(A){return JA.level=1,(Q)=>{let B=new q8;return Iy1(Sy1.default.createElement(mQA,{inputs:B,outputs:Q,history:A.history,fuzzyServer:A.fuzzyServer,useNotifications:A.useNotifications}),{patchConsole:!0,exitOnCtrlC:!1,stdout:A.stdout}).waitUntilExit().then(()=>{B.complete()}).catch((D)=>{B.next({type:"exit"})}),YA.from(B)}}var $y1=vy1.join(kAA||vy1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");async function fy1(A){try{await A02(vy1.dirname($y1),{recursive:!0}),await B02($y1,A,"utf-8")}catch(Q){f1.debug("Failed to save last thread ID",Q)}}async function e71(){try{return(await Q02($y1,"utf-8")).trim()}catch(A){return null}}var J02=[{name:"notifications",long:"notifications",type:"flag",default:!1,description:(A)=>`${A?"Enable":"Disable"} sound notifications (enabled by default when interactive)`},{name:"interactive",long:"interactive",type:"switch",default:!1,description:"Force interactive mode"},{name:"color",long:"color",type:"flag",description:(A)=>`${A?"Enable":"Disable"} color output (enabled by default if stdout and stderr are sent to a TTY)`},{name:"settingsFile",long:"settings-file",type:"option",description:`Custom settings file path (overrides the default location ${PE})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(f1).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:"Set log file location"},{name:"format",long:"format",type:"option",default:"ui",description:"Output format (ui: interactive terminal, jsonl: JSON Lines for scripts)",choices:["ui","jsonl","new-ui"],hidden:!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:process.env.TERMINAL_EMULATOR?.includes("JetBrains")??!1,description:(A)=>`${A?"Enable":"Disable"} JetBrains integration. Requires the JetBrains MCP plugin to be installed and you must start Amp in the same directory as your JetBrains project. When enabled, Amp CLI automatically includes your open JetBrains file and text selection with every message, just like it does in VS Code.`,hidden:!0}];function D02(A,Q){let B=Q.args[0],J=Q.commands.map((z)=>z.name());if(B&&!B.includes(" ")&&B.length<30&&!/[./\\]/.test(B)){let z=J.filter((X)=>B.includes(X)||X.includes(B)),Z="Run amp --help for a list of available commands.";if(z.length>0)Z=`Did you mean: ${z.join(", ")}? Or run amp --help for all commands.`;throw new QX(Jq.unknownCommand(B),1,Z)}}class cQA{async environment(){let A=process.cwd(),Q=j8.file(A),B=AG1(null),J=await rn1(Q,B,{workingDirectory:Q});return{workspacePaths:[A],workingDirectory:A,rootDirectoryListing:J}}}async function B_(A,Q){gf({logLevel:Q.logLevel||process.env.AMP_LOG_LEVEL,logFile:Q.logFile||process.env.AMP_LOG_FILE}),zl1("0.0.1751636404-g3a463c");let B=Q.settingsFile??process.env.AMP_SETTINGS_FILE;f1.info("Using settings file",{settingsFile:B});let J=el(),D=lv1({settingsFile:B}),z=process.env.AMP_API_KEY;if(z)await J.set("apiKey",z,A.ampURL);let Z=xX1({storage:D,secretStorage:J,workspaceRoots:YA.of([j8.file(process.cwd())]),defaultAmpURL:A.ampURL}),X=new cQA,K=gq(),G=oa1({configService:Z,toolService:K});try{await G.initialized}catch(_){f1.warn("Failed to wait for MCP servers, continuing anyway:",_)}let q=await i6(u8);if(Q.dangerouslyAllowAll)q.settings.dangerouslyAllowAll=!0;if(Q.jetbrains){if(q.settings["jetbrains.enabled"]=!0,Ta.subscribe((T)=>{f1.info("jetbrains-status",T)}),await IX1(),!await jc1())l2.write(A.printer.print("Error: ",{foreground:"red",style:"bold"})+"JetBrains IDE not running."),process.exit(1)}let Y=q.settings["experimental.reviewTool"]??!1,F=q.settings["experimental.tools"]??[];pP1(K,!1,Y,F);let E,w;if(A.isInteractiveMode){E=new v51,await E.start();try{await A4A(E,process.cwd())}catch(_){f1.error("Failed to index files for fuzzy completion",_)}w=Q4A(E,process.cwd())}else E=new class extends v51{async start(){}async query(){return[]}dispose(){}},w={[Symbol.dispose]:()=>{}};if(!await J.get("apiKey",A.ampURL)){if(G7.write(`No API key found. Starting login flow...
7540
7540
  `),!await z02(A,J))process.exit(1)}let H=Xn1(),M=new jG1(H),W=new TG1(H),I=new aF1(M),N=new Qk1({configService:Z,threadService:M,toolService:K,systemPromptService:X,threadSummaryService:I,threadHistoryService:W,mcpService:G}),V=void 0;return f1.info("Starting Amp background services"),V=Qs1({threadService:M,threadHistoryService:W,isExtensionDevelopment:!1}),{configService:Z,systemPromptService:X,toolService:K,mcpService:G,threadService:M,threadHistoryService:W,summaryService:I,threadSyncService:V,threadStorage:H,secretStorage:J,settingsStorage:D,fileWatcher:w,fuzzyServer:E,subthreadTracker:N}}async function z02(A,Q){if(A.isInteractiveMode){if(await kE("Would you like to log in to Amp?",["(y)es","(n)o"])!="y")return G7.write(`Login cancelled. Run the command again to retry.
7541
7541
  `),!1}return await lQA(A,Q)}async function lQA(A,Q){let B=e12(32).toString("hex"),J=await O4A(A.ampURL,B);G7.write(`If your browser doesn't open automatically, visit:
7542
7542
 
@@ -7551,8 +7551,8 @@ ${A.printer.print(J,{foreground:"blue",style:"bold"})}
7551
7551
  Login successful! You can now use the Amp CLI.
7552
7552
  `),!0}catch(D){return l2.write(`
7553
7553
  Login failed: ${D instanceof Error?D.message:String(D)}
7554
- `),!1}}var Z02=new Set(["fuzzy-server"]);function X02(A){let Q=new sl().name("amp").description("AI-powered coding assistant").option("--thread-id [THREAD_ID]","ID of the thread to continue running",void 0);Q.exitOverride((X)=>{if(X.code==="commander.help"||X.code==="commander.version"||X.exitCode===0)$C(),process.exit(0);let K=X.originalError??X;Cf(A,K)}),Q.option("-V, --version","output the version number",()=>{if(A.isTTY)G7.write(`0.0.1751635281-g3a463c ${A.printer.print("(released 2025-07-04T13:27:33.747Z)",{foreground:"gray"})}
7555
- `);else G7.write(`0.0.1751635281-g3a463c (released 2025-07-04T13:27:33.747Z)
7554
+ `),!1}}var Z02=new Set(["fuzzy-server"]);function X02(A){let Q=new sl().name("amp").description("AI-powered coding assistant").option("--thread-id [THREAD_ID]","ID of the thread to continue running",void 0);Q.exitOverride((X)=>{if(X.code==="commander.help"||X.code==="commander.version"||X.exitCode===0)$C(),process.exit(0);let K=X.originalError??X;Cf(A,K)}),Q.option("-V, --version","output the version number",()=>{if(A.isTTY)G7.write(`0.0.1751636404-g3a463c ${A.printer.print("(released 2025-07-04T13:46:42.148Z)",{foreground:"gray"})}
7555
+ `);else G7.write(`0.0.1751636404-g3a463c (released 2025-07-04T13:46:42.148Z)
7556
7556
  `);process.exit(0)}),Q.addHelpText("after",(()=>{let X="";X+=A.printer.print("Environment variables:",{style:"bold"})+`
7557
7557
 
7558
7558
  `,X+=" "+A.printer.print("AMP_API_KEY",{foreground:"green"})+` API key for Amp (see https://ampcode.com/settings)
@@ -7653,7 +7653,7 @@ Use `+q.printer.print("amp threads continue [THREAD_ID]",{foreground:"green"})+`
7653
7653
  `),l2.write(`Secrets have been automatically redacted, but please review the file before attaching
7654
7654
  `),l2.write(`it to support requests. Learn more at https://ampcode.com/manual#support-bundles
7655
7655
  `),process.exit(0)}catch(K){l2.write(A.printer.print("Error generating support bundle: ",{foreground:"red"})+`${K instanceof Error?K.message:String(K)}
7656
- `),process.exit(1)}}),Q.addCommand(D);let z=new sl("update").description("Update Amp CLI to the latest version").option("--version <version>","Update to a specific version").option("--log-level <value>","Set log level (error, warn, info, debug, audit)").option("--log-file <value>","Set log file location").allowUnknownOption(!1);z.action(async(X)=>{try{let K=eD(X);gf({logLevel:X.logLevel,logFile:X.logFile});let{checkForUpdate:G,update:q}=await Promise.resolve().then(() => (zk1(),x4A)),Y="0.0.1751635281-g3a463c";if(X.version)l2.write(K.printer.print(`Updating to version ${X.version}...`,{foreground:"blue"})+`
7656
+ `),process.exit(1)}}),Q.addCommand(D);let z=new sl("update").description("Update Amp CLI to the latest version").option("--version <version>","Update to a specific version").option("--log-level <value>","Set log level (error, warn, info, debug, audit)").option("--log-file <value>","Set log file location").allowUnknownOption(!1);z.action(async(X)=>{try{let K=eD(X);gf({logLevel:X.logLevel,logFile:X.logFile});let{checkForUpdate:G,update:q}=await Promise.resolve().then(() => (zk1(),x4A)),Y="0.0.1751636404-g3a463c";if(X.version)l2.write(K.printer.print(`Updating to version ${X.version}...`,{foreground:"blue"})+`
7657
7657
  `),await q(X.version),l2.write(K.printer.print(`✓ Successfully updated to version ${X.version}`,{foreground:"green"})+`
7658
7658
  `);else{l2.write(K.printer.print("Checking for updates...",{foreground:"blue"})+`
7659
7659
  `);let F=await G(Y);if(!F.hasUpdate)l2.write(K.printer.print("✓ Amp CLI is already up to date.",{foreground:"green"})+`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sourcegraph/amp",
3
- "version": "0.0.1751635281-g3a463c",
3
+ "version": "0.0.1751636404-g3a463c",
4
4
  "description": "CLI for Amp, an agentic coding tool in research preview from Sourcegraph.",
5
5
  "homepage": "https://ampcode.com/",
6
6
  "author": {