@sourcegraph/amp 0.0.1778049149-g4ce163 → 0.0.1778057090-g80f5f1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +12 -12
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -2652,7 +2652,7 @@ ${JSON.stringify(A.args)}
|
|
|
2652
2652
|
|
|
2653
2653
|
`+A.map(P95).join(`
|
|
2654
2654
|
|
|
2655
|
-
`)}import{Buffer as y$5}from"node:buffer";function x$5(A){switch(A){case"image/jpeg":return"jpg";case"image/webp":return"webp";default:return"png"}}function f$5(A){switch(A){case"jpeg":return"image/jpeg";case"webp":return"image/webp";default:return"image/png"}}function b$5(A,Q){return{model:A,maxInputTokens:0,inputTokens:Q?.input_tokens??0,outputTokens:Q?.output_tokens??0,cacheCreationInputTokens:null,cacheReadInputTokens:Q?.input_tokens_details?.cached_tokens??null,totalInputTokens:Q?.input_tokens??0,timestamp:new Date().toISOString()}}async function h_4(A,Q,B,$,J,Y,Z){let X=await sV({configService:{config:m0.of(J)}},Y),F=NN($,void 0,{[k8]:Z??"amp.image-generation",accept:"application/json"}),D=B?.length?await X.images.edit({model:A,prompt:Q,image:await Promise.all(B.map((V,U)=>av(y$5.from(V.data,"base64"),`input-${U}.${x$5(V.mimeType)}`,{type:V.mimeType}))),output_format:"png"},{signal:Y,headers:F,maxRetries:0}):await X.images.generate({model:A,prompt:Q,output_format:"png"},{signal:Y,headers:F,maxRetries:0}),G=f$5(D.output_format);return{images:D.data?.flatMap((V)=>typeof V.b64_json==="string"?[{mimeType:G,data:V.b64_json}]:[])??[],"~debugUsage":b$5(A,D.usage)}}var g_4=A0(()=>{R1();KW();OB();Ny()});var d_4={};U2(d_4,{painterToolReg:()=>l$5,painterTool:()=>p_4});import{createHash as u$5}from"node:crypto";import{writeFile as m_4}from"node:fs/promises";import{tmpdir as h$5}from"node:os";import{join as g$5}from"node:path";async function p$5(A,Q,B){try{let $;try{$=s9(A)}catch(Y){return{error:`Save path must be absolute: ${Y instanceof Error?Y.message:String(Y)}`}}let J=h1($);try{if((await Q.stat($,{signal:B})).isDirectory)return{error:`Save path is a directory: ${J}`}
|
|
2655
|
+
`)}import{Buffer as y$5}from"node:buffer";function x$5(A){switch(A){case"image/jpeg":return"jpg";case"image/webp":return"webp";default:return"png"}}function f$5(A){switch(A){case"jpeg":return"image/jpeg";case"webp":return"image/webp";default:return"image/png"}}function b$5(A,Q){return{model:A,maxInputTokens:0,inputTokens:Q?.input_tokens??0,outputTokens:Q?.output_tokens??0,cacheCreationInputTokens:null,cacheReadInputTokens:Q?.input_tokens_details?.cached_tokens??null,totalInputTokens:Q?.input_tokens??0,timestamp:new Date().toISOString()}}async function h_4(A,Q,B,$,J,Y,Z){let X=await sV({configService:{config:m0.of(J)}},Y),F=NN($,void 0,{[k8]:Z??"amp.image-generation",accept:"application/json"}),D=B?.length?await X.images.edit({model:A,prompt:Q,image:await Promise.all(B.map((V,U)=>av(y$5.from(V.data,"base64"),`input-${U}.${x$5(V.mimeType)}`,{type:V.mimeType}))),output_format:"png"},{signal:Y,headers:F,maxRetries:0}):await X.images.generate({model:A,prompt:Q,output_format:"png"},{signal:Y,headers:F,maxRetries:0}),G=f$5(D.output_format);return{images:D.data?.flatMap((V)=>typeof V.b64_json==="string"?[{mimeType:G,data:V.b64_json}]:[])??[],"~debugUsage":b$5(A,D.usage)}}var g_4=A0(()=>{R1();KW();OB();Ny()});var d_4={};U2(d_4,{painterToolReg:()=>l$5,painterTool:()=>p_4});import{createHash as u$5}from"node:crypto";import{writeFile as m_4}from"node:fs/promises";import{tmpdir as h$5}from"node:os";import{join as g$5}from"node:path";async function p$5(A,Q,B){try{let $;try{$=s9(A)}catch(Y){return{error:`Save path must be absolute: ${Y instanceof Error?Y.message:String(Y)}`}}let J=h1($);try{if((await Q.stat($,{signal:B})).isDirectory)return{error:`Save path is a directory: ${J}`}}catch(Y){if(!v8(Y))return{error:`Failed to check save path: ${Y instanceof Error?Y.message:String(Y)}`}}try{if(!(await Q.stat(K1.dirname($),{signal:B})).isDirectory)return{error:`Save path parent is not a directory: ${J}`}}catch(Y){if(!v8(Y))return{error:`Failed to check save path parent: ${Y instanceof Error?Y.message:String(Y)}`}}return{uri:$,uriString:J}}catch($){return{error:`Failed to parse savePath: ${$ instanceof Error?$.message:String($)}`}}}var Oo0=3,m$5=1000,d$5,c$5,p_4=({args:A},{thread:Q,config:B,filesystem:$,threadEnvironment:J})=>{return IA(async(Y)=>{try{let Z=J.trees?.map((U)=>U.uri?e0.parse(U.uri):void 0).filter((U)=>!!U)??[],X;if(A.savePath){let U=await p$5(A.savePath,$,Y);if("error"in U)return{status:"error",error:{message:U.error}};X=U}let F=[];if(A.inputImagePaths&&A.inputImagePaths.length>0){if(A.inputImagePaths.length>3)return{status:"error",error:{message:"Maximum 3 input images allowed."}};let U=[];for(let K of A.inputImagePaths)try{let E=await O20($,Z,K,Y),W=await t54($,E,Y);if(W.success)F.push(W.image);else U.push(W.error)}catch(E){U.push(`Failed to resolve image path "${K}": ${E instanceof Error?E.message:String(E)}`)}if(U.length>0)return{status:"error",error:{message:U.join(`
|
|
2656
2656
|
`)}}}let D,G=j44(B.settings);for(let U=0;U<=Oo0;U++)try{if(G==="gpt-image-2")D=await h_4(G,A.prompt,F.length>0?F:void 0,Q,B,Y,"amp.painter");else D=await Lq4(OA.GEMINI_3_PRO_IMAGE.name,A.prompt,F.length>0?F:void 0,Q,B,Y,"amp.painter");break}catch(K){let E=typeof K==="object"&&K!==null?"status"in K&&typeof K.status==="number"?K.status:("code"in K)&&typeof K.code==="number"?K.code:void 0:void 0,W=K instanceof Error?K.message:String(K);if(j.error("Image generation failed",{attempt:U+1,status:E,error:W}),U<Oo0&&(E===429||vJ0({message:W,status:E}))){let H=m$5*2**U;j.warn("Retrying image generation after transient error",{attempt:U+1,maxRetries:Oo0,delayMs:H,error:K instanceof Error?K.message:String(K)}),await eV(H,Y);continue}throw K}if(!D||D.images.length===0)return{status:"error",error:{message:"No image was generated. The model may have declined to generate this content."}};if(X&&D.images.length!==1)return{status:"error",error:{message:"savePath can only be used when a single image is generated."}};return{status:"done",result:await Promise.all(D.images.map(async(U,K)=>{let E,W;if(X)await $.mkdirp(K1.dirname(X.uri),{signal:Y}),await m_4(X.uri.fsPath,Buffer.from(U.data,"base64")),E=X.uri,W=X.uriString;else{let z=`amp-generated-image-${u$5("md5").update(U.data).digest("hex").slice(0,12)}-${K}.png`,q=g$5(h$5(),z);await m_4(q,Buffer.from(U.data,"base64")),E=e0.file(q),W=h1(E)}return{type:"image",mimeType:U.mimeType,data:U.data,savedPath:W,textResponse:D.textResponse}})),"~debug":{inferences:[{usage:D["~debugUsage"]}]}}}catch(Z){return j.error("Failed to generate image",{error:Z,prompt:A.prompt}),{status:"error",error:{message:`Failed to generate image: ${Z instanceof Error?Z.message:String(Z)}`}}}}).pipe(K6({status:"in-progress",progress:{message:"Generating image..."}}))},l$5;var c_4=A0(()=>{Q4();R1();n0();WE();YW();g_4();$U();Q3();MQ();k4();C20();c$();d$5=[{description:"Generate an app icon for a CLI tool",args:{prompt:"1024x1024 app icon. Dark background #1a1a2e. Glowing terminal cursor symbol in cyan #00d9ff. Minimal, modern style for macOS dock."}},{description:"Generate a hero image using existing brand assets as reference",args:{prompt:"Hero image for documentation landing page. Match the color palette from the first image and icon style from the second. Abstract flowing code symbols. 1920x600 dimensions.",inputImagePaths:["/Users/alice/project/docs/assets/brand-colors.png","/Users/alice/project/docs/assets/icon-style.png"]}},{description:"Redact sensitive data from a terminal screenshot",args:{prompt:"Blur or redact any visible API keys, tokens, passwords, or email addresses in this terminal screenshot. Keep command output readable. Preserve dimensions.",inputImagePaths:["/Users/alice/project/docs/screenshots/terminal-output.png"]}},{description:"Generate an image and save to the Documents folder (Windows)",args:{prompt:"A modern company logo with blue and white colors. Clean, minimalist design.",savePath:"C:\\Users\\alice\\Documents\\logo.png"}}],c$5=`Generate an image using an AI model.
|
|
2657
2657
|
|
|
2658
2658
|
IMPORTANT: Only invoke this tool when the user explicitly asks to use the "${K80}" tool. Do not use this tool automatically or proactively.
|
|
@@ -4855,12 +4855,12 @@ ${E}`))}},error:(K)=>{if(!U)U=!0,F(Error(`Failed to spawn brew: ${K.message}`))}
|
|
|
4855
4855
|
${E}`;if(Y==="pnpm"&&E.includes("Unable to find the global bin directory"))W+=`
|
|
4856
4856
|
|
|
4857
4857
|
Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
|
|
4858
|
-
npm install -g @sourcegraph/amp`;F(Error(W))}},error:(K)=>{if(!V)V=!0,F(Error(`Failed to spawn ${Y}: ${K.message}`))},complete:()=>{if(!V)V=!0,X()}})})}n0();n0();wN();async function WD0(A,Q){let J=`${Q||"https://registry.npmjs.org"}/@sourcegraph/amp/latest`,Y=new AbortController,Z=setTimeout(()=>Y.abort(),5000);try{let X=await fetch(J,{signal:Y.signal});if(!X.ok)return{hasUpdate:!1,currentVersion:A,source:"npm"};let F=await X.json(),D=F.version??F["dist-tags"]?.latest;if(!D)return{hasUpdate:!1,currentVersion:A,source:"npm"};let G=kr(A,D),V=G<0,U,K;if(F.time){let E=F.time[A],W=F.time[D],H=Date.now();if(E)U=Math.floor((H-new Date(E).getTime())/3600000);if(W)K=Math.floor((H-new Date(W).getTime())/3600000)}return j.info("NPM version comparison",{currentVersion:A,latestVersion:D,compareResult:G,hasUpdate:V,currentVersionAge:U,latestVersionAge:K}),{hasUpdate:V,latestVersion:D,currentVersion:A,currentVersionAge:U,latestVersionAge:K,source:"npm"}}catch(X){return j.debug("Error checking npm version",{error:X}),{hasUpdate:!1,currentVersion:A,source:"npm"}}finally{clearTimeout(Z)}}var qS5="https://static.ampcode.com/cli/cli-version.txt";async function HD0(A){let Q=new AbortController,B=setTimeout(()=>Q.abort(),5000);try{let $=await fetch(`${qS5}?t=${Date.now()}`,{signal:Q.signal,cache:"no-store"});if(!$.ok)return{hasUpdate:!1,currentVersion:A,source:"bin"};let J=(await $.text()).trim();if(!J||!/^\d+\.\d+\.\d+/.test(J))return{hasUpdate:!1,currentVersion:A,source:"bin"};let Y=kr(A,J),Z=Y<0;return j.info("Bin version comparison",{currentVersion:A,latestVersion:J,compareResult:Y,hasUpdate:Z}),{hasUpdate:Z,latestVersion:J,currentVersion:A,source:"bin"}}catch($){return j.debug("Error checking bin version",{error:$}),{hasUpdate:!1,currentVersion:A,source:"bin"}}finally{clearTimeout(B)}}var NS5=604800000;function ed4(A){if(!A)return null;let Q=typeof A==="number"?A:new Date(A).getTime();if(isNaN(Q))return null;let B=Date.now()-Q;if(B>NS5)return{ageMs:B};return null}function kr(A,Q){let B=(Z)=>{let[X,F]=Z.split("-");return{parts:X?.split(".").map(Number)||[],label:F}},$=B(A),J=B(Q),Y=Math.max($.parts.length,J.parts.length);for(let Z=0;Z<Y;Z++){let X=$.parts[Z]||0,F=J.parts[Z]||0;if(X<F)return-1;if(X>F)return 1}if($.label===J.label)return 0;if(!$.label&&J.label)return 1;if($.label&&!J.label)return-1;if($.label&&J.label)return $.label<J.label?-1:1;return 0}function V11(A){try{let Q=A.match(/^0\.0\.(\d+)(?:-g?([a-f0-9]+))?/);if(!Q)return null;let B=parseInt(Q[1],10)*1000,$=Q[2],J=B!==0?AU(B):void 0;return{sha:$,age:J}}catch{return null}}R1();n0();import{readFile as IS5,realpath as wS5}from"node:fs/promises";import{homedir as CS5}from"node:os";import{dirname as Ac4,join as U11}from"node:path";async function Qc4(A){switch(A){case"binary":case"brew":return MS5(Pr());case"npm":case"pnpm":case"yarn":case"bun":return LS5();case"bootstrap":return OS5()}}async function MS5(A){let Q=await pD(A,["--version"],5000);if(Q.reason!=="success")return j.debug("failed to read version from binary",{binaryPath:A,result:Q}),null;return Q.output.trim().split(/\s+/)[0]||null}async function LS5(){try{let A=process.argv[1];if(!A)return null;let Q=await wS5(A),B=Ac4(Ac4(Q));return await Bc4(U11(B,"package.json"))}catch(A){return j.debug("failed to read installed version from package.json",{error:A}),null}}async function OS5(){try{let A=process.env.AMP_HOME??U11(CS5(),".amp");return await Bc4(U11(A,"package","package.json"))}catch(A){return j.debug("failed to read installed version from bootstrap package.json",{error:A}),null}}async function Bc4(A){let Q=await IS5(A,"utf8"),B=JSON.parse(Q);if(B.name!=="@sourcegraph/amp")return j.debug("package.json name mismatch",{pkgJsonPath:A,name:B.name}),null;return B.version||null}var jS5=3600000,RS5=5000;function K11(A,Q,B={}){let $=new h4,J=$.pipe(cA({shouldCountRefs:!1})),Y=B.startDelayMs??0,Z=B.checkIntervalMs??jS5,X=!1,F=()=>{X=!0};return setImmediate(async()=>{let D=new S$().with({name:"update"});if(Y>0){if(await eV(Y),X)return}let G=J.subscribe({next:(U)=>{D.debug("emit new state",U)}}),V=A;try{while(!X){let U=await PS5(V,Q,D,$);if(U.stop)return;if(U.updatedTo)V=U.updatedTo;if(U.emittedVisibleState){if(await eV(RS5),X)return;$.next("hidden")}if(Z<=0)return;let K=1000,E=Z;while(E>0&&!X){let W=Math.min(K,E);await eV(W),E-=W}}}finally{G.unsubscribe(),$.complete()}}),{state:J,dispose:F}}async function PS5(A,Q,B,$){let J={stop:!1,emittedVisibleState:!1};try{if(process.env.AMP_SKIP_UPDATE_CHECK==="1")return B.debug("checking disabled via AMP_SKIP_UPDATE_CHECK environment variable"),J.stop=!0,J;let Y=await Q.get("updates.mode");if(Y==="disabled")return B.debug("checking disabled"),J.stop=!0,J;let Z=await Df(),X=Z==="binary"||Z==="brew";B.debug("checking",{currentVersion:A,mode:Y,packageManager:Z,isBinaryDistribution:X});let F;if(X)F=await HD0(A);else{let V=await lj();F=await WD0(A,V)}if(!(F.latestVersion&&F.hasUpdate))return B.debug("no update available"),J;let D=(V)=>{$.next(V),J.emittedVisibleState=!0};if(Z){let V=await Qc4(Z);if(V&&kr(V,F.latestVersion)>=0){if(B.debug("on-disk version already up to date",{currentVersion:A,installedVersion:V,latestVersion:F.latestVersion}),J.updatedTo=V,kr(A,V)<0){let U=await gW(V),K={from:A,to:V,externallyUpdated:!0,...U};if(U.status==="same")B.info("on-disk already updated by another instance",K),D("updated");else B.warn("on-disk already updated by another instance, with PATH warning",K),D("updated-with-warning")}return J}}let G=()=>{if(F.currentVersionAge!==void 0&&F.latestVersionAge!==void 0){let V=F.currentVersionAge-F.latestVersionAge,U=0.5;if(Math.abs(V)<0.5)return B.debug("versions too close together, suppressing update warning",{currentVersionAge:F.currentVersionAge,latestVersionAge:F.latestVersionAge,ageDifferenceHours:V}),!0}return!1};if(!Y)Y=Z==="pnpm"?"warn":"auto",B.debug("no configured update mode; selected default based on package manager",{packageManager:Z,mode:Y});if(Z==="brew"){if(!G())D("update-available-brew");return J}if(Z==="binary"&&process.execPath!==Pr()){if(B.debug("non-standard binary path, showing warning"),!G())D("update-available-unrecognized-path");return J}if(Y==="warn"){if(!G())D("update-available");return J}if(!Z){if(B.debug("auto-update not supported, falling back to warn mode"),!G())D("update-available");return J}if(Z==="binary"&&process.platform==="win32"){if(B.debug("binary auto-update not supported on Windows, falling back to warn mode"),!G())D("update-available");return J}try{await Sr(F.latestVersion,Z),J.updatedTo=F.latestVersion;let V=await gW(F.latestVersion),U={from:F.currentVersion,to:F.latestVersion,...V};if(V.status==="same")B.info("success",U),D("updated");else B.warn("success with warning",U),D("updated-with-warning")}catch(V){D("update-error")}return J}catch(Y){return B.debug("check failed",{error:Y}),J}}wN();import{stderr as dD}from"node:process";function $c4(A){let Q=new nN().name("install").description("Install required tools like ripgrep to $AMP_HOME/bin").option("--force","Force reinstallation even if already installed").option("--verbose","Show installation progress and results").action(async($)=>{await e01($.force||!1,$.verbose||!1,"0.0.
|
|
4858
|
+
npm install -g @sourcegraph/amp`;F(Error(W))}},error:(K)=>{if(!V)V=!0,F(Error(`Failed to spawn ${Y}: ${K.message}`))},complete:()=>{if(!V)V=!0,X()}})})}n0();n0();wN();async function WD0(A,Q){let J=`${Q||"https://registry.npmjs.org"}/@sourcegraph/amp/latest`,Y=new AbortController,Z=setTimeout(()=>Y.abort(),5000);try{let X=await fetch(J,{signal:Y.signal});if(!X.ok)return{hasUpdate:!1,currentVersion:A,source:"npm"};let F=await X.json(),D=F.version??F["dist-tags"]?.latest;if(!D)return{hasUpdate:!1,currentVersion:A,source:"npm"};let G=kr(A,D),V=G<0,U,K;if(F.time){let E=F.time[A],W=F.time[D],H=Date.now();if(E)U=Math.floor((H-new Date(E).getTime())/3600000);if(W)K=Math.floor((H-new Date(W).getTime())/3600000)}return j.info("NPM version comparison",{currentVersion:A,latestVersion:D,compareResult:G,hasUpdate:V,currentVersionAge:U,latestVersionAge:K}),{hasUpdate:V,latestVersion:D,currentVersion:A,currentVersionAge:U,latestVersionAge:K,source:"npm"}}catch(X){return j.debug("Error checking npm version",{error:X}),{hasUpdate:!1,currentVersion:A,source:"npm"}}finally{clearTimeout(Z)}}var qS5="https://static.ampcode.com/cli/cli-version.txt";async function HD0(A){let Q=new AbortController,B=setTimeout(()=>Q.abort(),5000);try{let $=await fetch(`${qS5}?t=${Date.now()}`,{signal:Q.signal,cache:"no-store"});if(!$.ok)return{hasUpdate:!1,currentVersion:A,source:"bin"};let J=(await $.text()).trim();if(!J||!/^\d+\.\d+\.\d+/.test(J))return{hasUpdate:!1,currentVersion:A,source:"bin"};let Y=kr(A,J),Z=Y<0;return j.info("Bin version comparison",{currentVersion:A,latestVersion:J,compareResult:Y,hasUpdate:Z}),{hasUpdate:Z,latestVersion:J,currentVersion:A,source:"bin"}}catch($){return j.debug("Error checking bin version",{error:$}),{hasUpdate:!1,currentVersion:A,source:"bin"}}finally{clearTimeout(B)}}var NS5=604800000;function ed4(A){if(!A)return null;let Q=typeof A==="number"?A:new Date(A).getTime();if(isNaN(Q))return null;let B=Date.now()-Q;if(B>NS5)return{ageMs:B};return null}function kr(A,Q){let B=(Z)=>{let[X,F]=Z.split("-");return{parts:X?.split(".").map(Number)||[],label:F}},$=B(A),J=B(Q),Y=Math.max($.parts.length,J.parts.length);for(let Z=0;Z<Y;Z++){let X=$.parts[Z]||0,F=J.parts[Z]||0;if(X<F)return-1;if(X>F)return 1}if($.label===J.label)return 0;if(!$.label&&J.label)return 1;if($.label&&!J.label)return-1;if($.label&&J.label)return $.label<J.label?-1:1;return 0}function V11(A){try{let Q=A.match(/^0\.0\.(\d+)(?:-g?([a-f0-9]+))?/);if(!Q)return null;let B=parseInt(Q[1],10)*1000,$=Q[2],J=B!==0?AU(B):void 0;return{sha:$,age:J}}catch{return null}}R1();n0();import{readFile as IS5,realpath as wS5}from"node:fs/promises";import{homedir as CS5}from"node:os";import{dirname as Ac4,join as U11}from"node:path";async function Qc4(A){switch(A){case"binary":case"brew":return MS5(Pr());case"npm":case"pnpm":case"yarn":case"bun":return LS5();case"bootstrap":return OS5()}}async function MS5(A){let Q=await pD(A,["--version"],5000);if(Q.reason!=="success")return j.debug("failed to read version from binary",{binaryPath:A,result:Q}),null;return Q.output.trim().split(/\s+/)[0]||null}async function LS5(){try{let A=process.argv[1];if(!A)return null;let Q=await wS5(A),B=Ac4(Ac4(Q));return await Bc4(U11(B,"package.json"))}catch(A){return j.debug("failed to read installed version from package.json",{error:A}),null}}async function OS5(){try{let A=process.env.AMP_HOME??U11(CS5(),".amp");return await Bc4(U11(A,"package","package.json"))}catch(A){return j.debug("failed to read installed version from bootstrap package.json",{error:A}),null}}async function Bc4(A){let Q=await IS5(A,"utf8"),B=JSON.parse(Q);if(B.name!=="@sourcegraph/amp")return j.debug("package.json name mismatch",{pkgJsonPath:A,name:B.name}),null;return B.version||null}var jS5=3600000,RS5=5000;function K11(A,Q,B={}){let $=new h4,J=$.pipe(cA({shouldCountRefs:!1})),Y=B.startDelayMs??0,Z=B.checkIntervalMs??jS5,X=!1,F=()=>{X=!0};return setImmediate(async()=>{let D=new S$().with({name:"update"});if(Y>0){if(await eV(Y),X)return}let G=J.subscribe({next:(U)=>{D.debug("emit new state",U)}}),V=A;try{while(!X){let U=await PS5(V,Q,D,$);if(U.stop)return;if(U.updatedTo)V=U.updatedTo;if(U.emittedVisibleState){if(await eV(RS5),X)return;$.next("hidden")}if(Z<=0)return;let K=1000,E=Z;while(E>0&&!X){let W=Math.min(K,E);await eV(W),E-=W}}}finally{G.unsubscribe(),$.complete()}}),{state:J,dispose:F}}async function PS5(A,Q,B,$){let J={stop:!1,emittedVisibleState:!1};try{if(process.env.AMP_SKIP_UPDATE_CHECK==="1")return B.debug("checking disabled via AMP_SKIP_UPDATE_CHECK environment variable"),J.stop=!0,J;let Y=await Q.get("updates.mode");if(Y==="disabled")return B.debug("checking disabled"),J.stop=!0,J;let Z=await Df(),X=Z==="binary"||Z==="brew";B.debug("checking",{currentVersion:A,mode:Y,packageManager:Z,isBinaryDistribution:X});let F;if(X)F=await HD0(A);else{let V=await lj();F=await WD0(A,V)}if(!(F.latestVersion&&F.hasUpdate))return B.debug("no update available"),J;let D=(V)=>{$.next(V),J.emittedVisibleState=!0};if(Z){let V=await Qc4(Z);if(V&&kr(V,F.latestVersion)>=0){if(B.debug("on-disk version already up to date",{currentVersion:A,installedVersion:V,latestVersion:F.latestVersion}),J.updatedTo=V,kr(A,V)<0){let U=await gW(V),K={from:A,to:V,externallyUpdated:!0,...U};if(U.status==="same")B.info("on-disk already updated by another instance",K),D("updated");else B.warn("on-disk already updated by another instance, with PATH warning",K),D("updated-with-warning")}return J}}let G=()=>{if(F.currentVersionAge!==void 0&&F.latestVersionAge!==void 0){let V=F.currentVersionAge-F.latestVersionAge,U=0.5;if(Math.abs(V)<0.5)return B.debug("versions too close together, suppressing update warning",{currentVersionAge:F.currentVersionAge,latestVersionAge:F.latestVersionAge,ageDifferenceHours:V}),!0}return!1};if(!Y)Y=Z==="pnpm"?"warn":"auto",B.debug("no configured update mode; selected default based on package manager",{packageManager:Z,mode:Y});if(Z==="brew"){if(!G())D("update-available-brew");return J}if(Z==="binary"&&process.execPath!==Pr()){if(B.debug("non-standard binary path, showing warning"),!G())D("update-available-unrecognized-path");return J}if(Y==="warn"){if(!G())D("update-available");return J}if(!Z){if(B.debug("auto-update not supported, falling back to warn mode"),!G())D("update-available");return J}if(Z==="binary"&&process.platform==="win32"){if(B.debug("binary auto-update not supported on Windows, falling back to warn mode"),!G())D("update-available");return J}try{await Sr(F.latestVersion,Z),J.updatedTo=F.latestVersion;let V=await gW(F.latestVersion),U={from:F.currentVersion,to:F.latestVersion,...V};if(V.status==="same")B.info("success",U),D("updated");else B.warn("success with warning",U),D("updated-with-warning")}catch(V){D("update-error")}return J}catch(Y){return B.debug("check failed",{error:Y}),J}}wN();import{stderr as dD}from"node:process";function $c4(A){let Q=new nN().name("install").description("Install required tools like ripgrep to $AMP_HOME/bin").option("--force","Force reinstallation even if already installed").option("--verbose","Show installation progress and results").action(async($)=>{await e01($.force||!1,$.verbose||!1,"0.0.1778057090-g80f5f1"),process.exit()});A.addCommand(Q,{hidden:!0});let B=new nN("update").alias("up").summary("Update Amp CLI").description("Update Amp CLI to the latest version. You can specify a particular version to install, or leave blank to get the latest stable release.").option("--target-version <version>","Update to a specific version").allowUnknownOption(!1).action(async($)=>{await TS5($.targetVersion)});A.addCommand(B)}function _S5(A){let Q=Boolean(A.isTTY),B=0,$=!1;function J(){if(!Q||!$)return;A.write(`
|
|
4859
4859
|
`),$=!1,B=0}function Y(Z){if(!Q)return;let X=Z.padEnd(B," ");A.write(`\r${X}`),$=!0,B=X.length}return{flushProgressLine:J,renderProgress:Y}}async function TS5(A){let B=process.platform==="win32"&&cj()?{currentExecutablePath:process.execPath}:void 0,{flushProgressLine:$,renderProgress:J}=_S5(dD);if(process.env.AMP_SKIP_UPDATE_CHECK==="1")dD.write(s0.yellow(`Note: AMP_SKIP_UPDATE_CHECK=1 is set, which disables automatic update checking. Manual updates will still work.
|
|
4860
4860
|
|
|
4861
4861
|
`));try{if(!A){dD.write(s0.blue(`Checking for updates...
|
|
4862
|
-
`));let X=!1,F;if(cj()){let D=await HD0("0.0.
|
|
4863
|
-
`));let V=await gW("0.0.
|
|
4862
|
+
`));let X=!1,F;if(cj()){let D=await HD0("0.0.1778057090-g80f5f1");X=D.hasUpdate,F=D.latestVersion}else{let D=await lj(),G=await WD0("0.0.1778057090-g80f5f1",D);X=G.hasUpdate,F=G.latestVersion}if(!X){let D=V11("0.0.1778057090-g80f5f1"),G=D?.age?`released ${D.age} ago`:`built ${AU(new Date("2026-05-06T08:48:27.049Z"))} ago`;dD.write(s0.green(`✓ Amp is already up to date on version ${"0.0.1778057090-g80f5f1"} (${G})
|
|
4863
|
+
`));let V=await gW("0.0.1778057090-g80f5f1",B);if(V.warning)dD.write(`
|
|
4864
4864
|
`+s0.yellow(V.warning)+`
|
|
4865
4865
|
`);process.exit(0)}if(!F)dD.write(s0.yellow("[WARN] could not find latest version")),process.exit(0);A=F}dD.write(s0.blue(`Updating to version ${A}...
|
|
4866
4866
|
`)),await Sr(A,void 0,(X)=>{$(),dD.write(s0.dim(`Running: ${X}
|
|
@@ -5297,7 +5297,7 @@ ${$}`).join(`
|
|
|
5297
5297
|
`)}function mi5(A){return A.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)}function j51(A){return A.replace(/\[(image(?:\s+\d+)?)\]/gi,"").trim()}function pi5(A){let Q=iI.extname(A.sourcePath).toLowerCase();if(Q.length>0)return Q;if(A.source.type==="base64")switch(A.source.mediaType){case"image/jpeg":return".jpg";case"image/png":return".png";case"image/gif":return".gif";case"image/webp":return".webp"}return".png"}async function di5(A,Q){let B=[];for(let[$,J]of Q.entries()){if(J.source.type!=="base64"){j.warn("Skipping non-base64 debug package issue image",{index:$,sourceType:J.source.type});continue}let Y=`issue-image-${$+1}${pi5(J)}`,Z=iI.join(A,Y);try{await Jb(Z,Buffer.from(J.source.data,"base64")),B.push(Y)}catch(X){j.warn("Failed to write debug package issue image",{index:$,fileName:Y,error:X})}}return B}function ci5(A,Q,B=[]){let $=["# Bug Report","","## Issue Description","",A,""];if(B.length>0){for(let[J,Y]of B.entries())$.push(``);$.push("")}if($.push("## Included Files","","- `cli-logs.json` — CLI logs filtered for this session PID","- `thread.yaml` — Full thread data (messages, metadata, agent mode, etc.)"),B.length>0)$.push("- `issue-image-*.*` — Images attached to the issue description");if(Yb(Q.thread))$.push("- `thread.sqlite` — DTW Durable Object SQLite dump","- `cloudflare-logs.json` — Worker logs from Cloudflare (if CLOUDFLARE_API_TOKEN was set)");if($.push("","## Debug Instructions","","To investigate, start with the issue description above, then:","","1. Review `cli-logs.json` for errors, warnings, and the sequence of events"),Yb(Q.thread))$.push("2. Open `thread.sqlite` and inspect the `messages` and `thread_events` tables:"," ```sh"," sqlite3 -json thread.sqlite 'SELECT * FROM messages ORDER BY created_at, rowid'"," sqlite3 -json thread.sqlite 'SELECT * FROM thread_events ORDER BY seq'"," ```","3. Review `cloudflare-logs.json` (if present) for server-side worker errors","4. Check Cloudflare dashboards for more detail:",` - Logs: <${L51(Q.thread.id)}>`,` - Data Studio: <${M51(Q.thread.id)}>`);return $.push("",vV0(Q)),$.join(`
|
|
5298
5298
|
`)}function R51(A){let Q=A.activeThreadHandle.getInitialTreeURI();return{thread:A.thread,ampURL:A.ampURL,effectiveAgentMode:A.getEffectiveAgentMode(),isProcessing:A.isProcessing,threadPoolIsDTW:A.threadPool.isDTWMode?.()===!0,transportState:A.threadPool.getTransportConnectionState?.(),transportRole:A.threadPool.getTransportConnectionRole?.(),threadViewState:A.threadViewStates[A.thread.id],initialTreePath:Q?W5(Z8(Q)):void 0,currentWorkspacePath:W5(Z8(A.currentWorkspace)),clientId:A.clientId,logFile:A.logFile,pid:process.pid}}async function Qe4(A){try{let Q=iI.join("/tmp",`amp-thread-${A.thread.id}-${Date.now()}.json`),B=JSON.stringify(A.thread,null,2);await Jb(Q,B,"utf-8"),await NJ(Q),j.info("Thread JSON written and opened in editor",{file:Q});return}catch(Q){return j.error("Failed to write thread JSON or open editor",Q),Error("Failed to write thread JSON or open editor",{cause:Q})}}async function Be4(A){try{let Q=iI.join("/tmp",`amp-thread-${A.thread.id}-${Date.now()}.yaml`),B=C51.default.stringify(A.thread);await Jb(Q,B,"utf-8"),await NJ(Q),j.info("Thread YAML written and opened in editor",{file:Q});return}catch(Q){return j.error("Failed to write thread YAML or open editor",Q),Error("Failed to write thread YAML or open editor",{cause:Q})}}async function $e4(A,Q){if(typeof Q!=="string")return Error("Select a log option from the picker");switch(Q){case"cli-open":{let B=A.logFile;if(!B)return Error("CLI log file is unavailable for this session");let $="less -R +G",J=kV0(process.pid,B,$);try{try{L4.instance.tuiInstance.suspend(),Qt(J,{stdio:"inherit"})}finally{process.stdout.write("\x1B[?25l"),L4.instance.tuiInstance.resume()}j.info("Opened filtered CLI logs",{command:J,pid:process.pid,logFile:Bt(B),outputCommand:$??null});return}catch(Y){return j.error("Failed to open filtered CLI logs",{error:Y,command:J}),Error("Failed to open filtered CLI logs",{cause:Y})}}case"cloudflare-logs":{await $6(A.context??A.contextFallback,L51(A.thread.id));return}case"cloudflare-data-studio":{await $6(A.context??A.contextFallback,M51(A.thread.id));return}default:return Error(`Unknown log option: ${Q}`)}}async function Je4(A){let Q=R51(A),B=Ae4(Q),$=!1;try{await L4.instance.tuiInstance.clipboard.writeText(B),$=!0}catch(J){j.error("Failed to copy debug prompt",{error:J})}return new k2(new PA({child:new S6({markdown:[$?"**Copied Markdown debug prompt to clipboard.**":"**Clipboard copy failed. Select and copy manually.**","",B].join(`
|
|
5299
5299
|
`)})}),"Debug Prompt","info","help",{width:100,height:28})}function li5(A){return typeof A==="object"&&A!==null&&"label"in A&&typeof A.label==="string"&&"command"in A&&typeof A.command==="string"}async function Ye4(A,Q){if(!li5(Q))return Error("Select a command from the picker");try{await L4.instance.tuiInstance.clipboard.writeText(Q.command),A.showToast(`Copied: ${Q.label}`,"success")}catch(B){j.error("Failed to copy DTW debug command",{error:B})}}async function Ze4(A){return new k2(new PA({child:new S6({markdown:vV0(R51(A))})}),"Thread Diagnostics","info","help",{width:100,height:26})}async function Xe4(A,Q){let B=A.logFile;if(!B)return Error("CLI log file is unavailable for this session");let $=j51(Q.description);if($.trim().length===0)return Error("Description is required");let J=Q.images,Y=Bt(B),Z=process.pid,X=mi5($)||"debug-package",F=fi5.tmpdir(),D=iI.join(F,`amp-${X}`),G=`${D}.zip`;A.showStatusMessage("Building debug package...");try{Qt(`mkdir -p ${D}`);let V=`select(.pid == ${Z})`,U=Qt(`cat ${Y} | jq -c '${V}'`,{encoding:"utf-8",maxBuffer:52428800});await Jb(iI.join(D,"cli-logs.json"),U,"utf-8"),await Jb(iI.join(D,"thread.yaml"),C51.default.stringify(A.thread),"utf-8");let K=await di5(D,J),E=ci5($,R51(A),K);await Jb(iI.join(D,"agent-read-this.md"),E,"utf-8"),Qt(`zip -j ${G} ${D}/*`),Qt(`osascript -e 'set the clipboard to POSIX file "${G}"'`),A.showToast("Debug package copied to clipboard — paste into Slack","success"),j.info("Packaged debug bundle to clipboard",{zipPath:G,packageDir:D,pid:Z,threadId:A.thread.id});return}catch(V){return j.error("Failed to package debug bundle",{error:V}),Error("Failed to package debug bundle",{cause:V})}}U8();var ii5=80,ni5=20,Fe4=4,ai5=42,Ke4=420,Ee4=640,oi5=Math.max(32,cU),De4="░▒▓█▁▂▃▄▅▆▇∿∾∽≋≈∼",yV0=["▁","▂","▃","▄","▅","▆","▇","█"],ri5=["▏","▎","▍","▌","▋","▊","▉","█"],si5=["▕","▐","▉","▊","▋","▌","▍","▎"],ti5=H0.symmetric(1,0),ei5=H0.all(1),An5=H0.all(1),Qn5={primary:{r:102,g:102,b:102},secondary:{r:255,g:255,b:255}},Bn5={primary:{r:77,g:0,b:10},secondary:{r:255,g:77,b:95}};function $n5(A){return{borderShape:A?.borderShape??"notched",borderAnimation:A?.borderAnimation??"subtle",titleAnimation:A?.titleAnimation??"none",timeMs:A?.timeMs,animate:A?.animate,seed:A?.seed??ai5}}function We4(A){switch(A){case"notched":return ei5;case"classic":return ti5}}class _A extends I1{props;constructor(A){super();this.props=A}build(A){let Q=_0.of(A),B=r1.of(A),$=this.props.tone??"default",J=$n5(this.props.visualStyle),Y=this.props.bodyFit??{kind:"shrink"},Z=Vn5(this.props,Y,B,J.borderShape),X=Wn5($,Q),F=l1.all(new i1(X.border,1,"rounded")),D=_51(this.props.header,J.borderShape),G=T51(this.props.footer,J.borderShape),V=Hn5(D===void 0?this.props.header:void 0,X.header,J),U=In5(this.props.child,Y),K=G===void 0?wn5(this.props.footer,Q):new q0({height:0}),E=Y.kind==="fill"?"max":"min",W=typeof this.props.header==="string"?`NeoModal:${this.props.header}`:"NeoModal",H=this.props.autofocus??!0,z=this.props.chromePadding??We4(J.borderShape),q=D===void 0&&typeof this.props.header==="string"?1:0,N=G===void 0?ke4(this.props.footer):0,I=new c4({autofocus:H,canRequestFocus:!0,debugLabel:W,onKey:(_)=>{if(_.key==="Escape")return this.props.onDismiss(),"handled";return"ignored"},child:new b0({mainAxisSize:E,crossAxisAlignment:"stretch",children:[V,new q0({height:q}),U,new q0({height:N}),K]})}),C=!(J.borderShape==="notched"||J.borderAnimation!=="none")?new p0({constraints:Z,decoration:new x4(Q.colors.background,F),padding:z,child:I}):Zn5({borderShape:J.borderShape,borderAnimation:J.borderAnimation,child:I,constraints:Z,background:Q.colors.background,borderColor:X.border,tone:$,headerColor:X.header,footerKeyColor:Q.app.keybind,footerHintColor:Q.colors.foreground,padding:z,title:D,footer:G,titleAnimation:J.titleAnimation,seed:J.seed,timeMs:J.timeMs,animate:J.animate}),O=new p0({decoration:new x4(Q.colors.background),padding:An5,child:C});return new t4({fit:"expand",children:[new He4,new f1({onClick:()=>{},opaque:this.props.barrierOpaque??!0,child:q0.expand()}),new e1({child:O})]})}}class He4 extends Q8{createRenderObject(){return new ze4}}class ze4 extends $4{performLayout(){let A=this._lastConstraints;N4(!!A,"performLayout called without constraints");let Q=Number.isFinite(A.maxWidth)?A.maxWidth:A.minWidth,B=Number.isFinite(A.maxHeight)?A.maxHeight:A.minHeight;this.setSize(Q,B)}paint(A,Q=0,B=0){let $=Math.floor(Q+this.offset.x),J=Math.floor(B+this.offset.y),Y=A.getSize(),Z=Math.max(0,$),X=Math.max(0,J),F=Math.min(Y.width,$+this.size.width),D=Math.min(Y.height,J+this.size.height);for(let G=X;G<D;G++)for(let V=Z;V<F;V++){let U=A.getCell(V,G);if(!U||Jn5(U))continue;let K={char:U.char,style:{...U.style,dim:!0},width:U.width};if(U.hyperlink!==void 0)K.hyperlink=U.hyperlink;A.setCell(V,G,K)}}}function Jn5(A){return A.char===" "&&A.width===1&&A.hyperlink===void 0&&Yn5(A.style)}function Yn5(A){return A.fg===void 0&&A.bg===void 0&&A.bold===void 0&&A.italic===void 0&&A.underline===void 0&&A.strikethrough===void 0&&A.reverse===void 0&&A.dim===void 0}function _51(A,Q){return Q==="notched"&&typeof A==="string"?A:void 0}function T51(A,Q){if(Q!=="notched")return;if(A===void 0)return[{keys:["Esc"],label:"close"}];if(!xV0(A)||A.length===0)return;return A}function Zn5(A){if(A.timeMs!==void 0)return Ge4(A,A.timeMs);if(!(A.animate??Xn5(A)))return Ge4(A,0);return new qe4({borderShape:A.borderShape,borderAnimation:A.borderAnimation,child:A.child,constraints:A.constraints,background:A.background,borderColor:A.borderColor,tone:A.tone,headerColor:A.headerColor,footerKeyColor:A.footerKeyColor,footerHintColor:A.footerHintColor,padding:A.padding,title:A.title,footer:A.footer,titleAnimation:A.titleAnimation,seed:A.seed,initialTimeMs:0})}function Ge4(A,Q){return new S51({borderShape:A.borderShape,borderAnimation:A.borderAnimation,child:A.child,constraints:A.constraints,background:A.background,borderColor:A.borderColor,tone:A.tone,headerColor:A.headerColor,footerKeyColor:A.footerKeyColor,footerHintColor:A.footerHintColor,padding:A.padding,title:A.title,footer:A.footer,titleAnimation:A.titleAnimation,seed:A.seed,timeMs:Q})}function Xn5(A){return A.titleAnimation!=="none"||A.borderAnimation!=="none"}class qe4 extends v0{props;constructor(A){super();this.props=A}createState(){return new Ne4}}class Ne4 extends k0{startedAt=Date.now();timer=null;initState(){this.startTimer()}didUpdateWidget(A){if(A.props.borderShape!==this.widget.props.borderShape||A.props.borderAnimation!==this.widget.props.borderAnimation||A.props.seed!==this.widget.props.seed||A.props.title!==this.widget.props.title||A.props.titleAnimation!==this.widget.props.titleAnimation)this.startedAt=Date.now();this.startTimer()}dispose(){this.stopTimer(),super.dispose()}startTimer(){if(this.timer||this.animationComplete())return;this.timer=setInterval(()=>{if(!this.mounted)return;if(this.setState(()=>{}),this.animationComplete())this.stopTimer()},cU),this.timer.unref()}stopTimer(){if(!this.timer)return;clearInterval(this.timer),this.timer=null}animationComplete(){if(this.widget.props.borderAnimation!=="none")return!1;if(this.widget.props.titleAnimation!=="none")return Date.now()-this.startedAt>=Pe4(this.widget.props.titleAnimation);return!0}build(A){return new S51({borderShape:this.widget.props.borderShape,borderAnimation:this.widget.props.borderAnimation,child:this.widget.props.child,constraints:this.widget.props.constraints,background:this.widget.props.background,borderColor:this.widget.props.borderColor,tone:this.widget.props.tone,headerColor:this.widget.props.headerColor,footerKeyColor:this.widget.props.footerKeyColor,footerHintColor:this.widget.props.footerHintColor,padding:this.widget.props.padding,title:this.widget.props.title,footer:this.widget.props.footer,titleAnimation:this.widget.props.titleAnimation,seed:this.widget.props.seed,timeMs:Date.now()-this.startedAt+this.widget.props.initialTimeMs})}}class S51 extends q5{props;constructor(A){super({child:A.child});this.props=A}createRenderObject(){return new P51(this.props)}updateRenderObject(A){N4(A instanceof P51,"unexpected modal surface"),A.update(this.props)}}class P51 extends $4{props;glow;constructor(A){super();this.props=A;this.glow=new P9(A.seed)}update(A){let Q=!this.props.constraints.equals(A.constraints)||this.props.padding!==A.padding;if(A.seed!==this.props.seed)this.glow=new P9(A.seed);if(this.props=A,Q)this.markNeedsLayout();this.markNeedsPaint()}performLayout(){let A=this._lastConstraints;N4(!!A,"performLayout called without constraints");let Q=A.enforce(this.props.constraints),B=2+this.props.padding.horizontal,$=2+this.props.padding.vertical,J=new L1(Math.max(0,Q.minWidth-B),Math.max(0,Q.maxWidth-B),Math.max(0,Q.minHeight-$),Math.max(0,Q.maxHeight-$)),Y=this.children[0];if(Y)Y.layout(J),Y.setOffset(1+this.props.padding.left,1+this.props.padding.top);let Z=(Y?.size.width??0)+B,X=(Y?.size.height??0)+$,F=Q.constrain(Z,X);this.setSize(F.width,F.height)}paint(A,Q=0,B=0){let $=Math.floor(Q+this.offset.x),J=Math.floor(B+this.offset.y),Y=Math.floor(this.size.width),Z=Math.floor(this.size.height);if(Y<=0||Z<=0)return;A.fill($,J,Y,Z," ",{bg:this.props.background}),this.paintBorder(A,$,J,Y,Z),super.paint(A,Q,B)}paintBorder(A,Q,B,$,J){if($<2||J<2)return;for(let Y=1;Y<$-1;Y++)this.paintBorderCell(A,Q+Y,B,Y,0,$,J,"top"),this.paintBorderCell(A,Q+Y,B+J-1,Y,J-1,$,J,"bottom");for(let Y=1;Y<J-1;Y++)this.paintBorderCell(A,Q,B+Y,0,Y,$,J,"left"),this.paintBorderCell(A,Q+$-1,B+Y,$-1,Y,$,J,"right");if(this.paintCorner(A,Q,B,0,0,$,J,"top-left"),this.paintCorner(A,Q+$-1,B,$-1,0,$,J,"top-right"),this.paintCorner(A,Q,B+J-1,0,J-1,$,J,"bottom-left"),this.paintCorner(A,Q+$-1,B+J-1,$-1,J-1,$,J,"bottom-right"),this.props.borderShape==="notched")this.paintNotchedLabels(A,Q,B,$,J)}paintBorderCell(A,Q,B,$,J,Y,Z,X){let F=this.sampleBorderIntensity($,J,Y,Z);A.setChar(Q,B,this.borderGlyph(X,F),this.borderStyle(F),1)}paintCorner(A,Q,B,$,J,Y,Z,X){let F=this.sampleBorderIntensity($,J,Y,Z);A.setChar(Q,B,this.cornerGlyph(X,F),this.borderStyle(F),1)}paintNotchedLabels(A,Q,B,$,J){let Y=this.props.title;if(Y){let G=qn5(Y,this.props.titleAnimation,this.props.timeMs);this.paintBorderText(A,Q+2,B,` ${G} `,$-4,{fg:this.props.headerColor,bg:this.props.background,bold:!0})}let Z=this.props.footer;if(!Z||J<2)return;let X=Ie4(Z,{fg:this.props.footerKeyColor,bg:this.props.background},{fg:this.props.footerHintColor,bg:this.props.background,dim:!0}),F=we4(X),D=Math.max(2,$-F-2);this.paintStyledBorderText(A,Q+D,B+J-1,X,Math.max(0,$-D-2))}paintBorderText(A,Q,B,$,J,Y){this.paintStyledBorderText(A,Q,B,[{text:$,style:Y}],J)}paintStyledBorderText(A,Q,B,$,J){let Y=Q,Z=Dn5($,J);for(let X of Z)A.setChar(Y,B,X.grapheme,X.style,X.width),Y+=X.width}borderGlyph(A,Q){switch(this.props.borderAnimation){case"mysterious-message":return this.mysteriousMessageBorderGlyph(A,Q);case"none":case"subtle":return A==="left"||A==="right"?"│":"─"}}mysteriousMessageBorderGlyph(A,Q){let B=this.mysteriousMessageBorderIndex(Q);if(A==="left")return ri5[B]??"▏";if(A==="right")return si5[B]??"▕";return yV0[B]??"▁"}mysteriousMessageBorderIndex(A){return Math.max(0,Math.min(yV0.length-1,Math.floor(A*yV0.length)))}mysteriousMessageCornerGlyph(A,Q){let B=this.mysteriousMessageBorderIndex(Q);if(A==="top-left"||A==="top-right")return yV0[B]??"▁";return"█"}cornerGlyph(A,Q){if(this.props.borderAnimation==="mysterious-message")return this.mysteriousMessageCornerGlyph(A,Q);switch(A){case"top-left":return"╭";case"top-right":return"╮";case"bottom-left":return"╰";case"bottom-right":return"╯"}}borderStyle(A){let Q={fg:this.borderColor(A),bg:this.props.background};if(this.props.borderAnimation==="mysterious-message"&&A>0.72)Q.bold=!0;return Q}borderColor(A){switch(this.props.borderAnimation){case"none":return this.props.borderColor;case"subtle":case"mysterious-message":return this.animatedBorderColor(A)}}animatedBorderColor(A){let Q=0.18+$t(A)*0.82;switch(this.props.tone){case"default":return aQ(Q,void 0,Qn5);case"warning":return aQ(Q,iM);case"success":return aQ(Q,void 0);case"error":return aQ(Q,void 0,Bn5)}}sampleBorderIntensity(A,Q,B,$){let J=Math.max(1,B*2+$*2-4),Y=Fn5(A,Q,B,$),Z=Y/J,X=this.props.timeMs/1000,F=this.glow.sample(A*1.3+Y*0.07,Q*1.1-X*5,X,1.2),D=(Z-X*0.18%1+1)%1,G=Math.min(D,1-D),V=Math.max(0,1-G/0.085)**2;return $t(F*0.58+V*0.54)}}function Fn5(A,Q,B,$){if(Q<=0)return Math.max(0,A);if(A>=B-1)return B-1+Math.max(0,Q);if(Q>=$-1)return B+$-2+Math.max(0,B-1-A);return B*2+$-3+Math.max(0,$-1-Q)}function Ie4(A,Q,B){let $=[{text:" ",style:B}];return A.forEach((J,Y)=>{if(Y>0)$.push({text:" · ",style:B});J.keys.forEach((Z,X)=>{if(X>0)$.push({text:"/",style:B});$.push({text:Z,style:Q})}),$.push({text:` ${J.label}`,style:B})}),$.push({text:" ",style:B}),$}function we4(A){return Ce4(A).reduce((Q,B)=>Q+B.width,0)}function Dn5(A,Q){if(Q<=0)return[];let B=[],$=0;for(let J of Ce4(A)){if($+J.width>Q)return Gn5(B,$,Q,J.style);B.push(J),$+=J.width}return B}function Ce4(A){let Q=[];for(let B of A)for(let $ of f4(B.text))Q.push({grapheme:$,style:B.style,width:m6($)});return Q}function Gn5(A,Q,B,$){let Y=m6("…");if(Y>B)return A;let Z=Q;while(A.length>0&&Z+Y>B){let X=A.pop();if(X)Z-=X.width}if(Z+Y<=B)A.push({grapheme:"…",style:$,width:Y});return A}function $t(A){return Math.max(0,Math.min(1,A))}function Vn5(A,Q,B,$){let J=Math.max(0,B.size.width-Fe4),Y=Math.max(0,B.size.height-Fe4),Z=Math.max(A.minWidth??0,Un5(A,$)),X=Math.max(0,Math.min(A.maxWidth??ii5,J));if(Q.kind==="fill"){let G=Kn5(A,$),V=Math.max(Q.modalRows,G),U=Math.max(0,Math.min(V,Y));return new L1(Math.min(Z,X),X,U,U)}let F=Math.max(0,Math.min(A.maxHeight??ni5,Y)),D=Math.min(A.minHeight??0,F);return new L1(Math.min(Z,X),X,D,F)}function Un5(A,Q){if(Q!=="notched")return 0;let B=0,$=_51(A.header,Q);if($)B=Math.max(B,4+a4(` ${$} `));let J=T51(A.footer,Q);if(J)B=Math.max(B,4+we4(Ie4(J,{},{})));return B}function Kn5(A,Q){let B=A.chromePadding??We4(Q),$=_51(A.header,Q),J=T51(A.footer,Q),Y=2,Z=A.header===void 0||$!==void 0?0:1,X=$===void 0&&typeof A.header==="string"?1:0,F=J===void 0?En5(A.footer):0,D=J===void 0?ke4(A.footer):0,G=1;return 2+B.top+B.bottom+Z+X+1+D+F}function En5(A){if(A===void 0)return 1;if(A==="none")return 0;if(xV0(A))return A.length===0?0:1;return 1}function Wn5(A,Q){switch(A){case"default":return{border:Q.colors.border,header:Q.app.command};case"warning":return{border:Q.colors.warning,header:Q.colors.warning};case"success":return{border:Q.app.toolSuccess,header:Q.app.toolSuccess};case"error":return{border:Q.app.toolError,header:Q.app.toolError}}}function Hn5(A,Q,B){if(A===void 0)return new q0({height:0});if(typeof A==="string")return new p0({padding:H0.symmetric(1,0),child:new e1({child:zn5(A,Q,B)})});return A}function zn5(A,Q,B){if(B.titleAnimation==="none")return new l({text:new M(A,new y({color:Q,bold:!0}))});let $=B.timeMs??(B.animate===!1?0:void 0);if($!==void 0)return new l({text:Oe4(A,Q,B.titleAnimation,$)});return new Me4({title:A,color:Q,animation:B.titleAnimation})}class Me4 extends v0{props;constructor(A){super();this.props=A}createState(){return new Le4}}class Le4 extends k0{startedAt=Date.now();timer=null;initState(){this.startTimer()}didUpdateWidget(A){if(A.props.title!==this.widget.props.title||A.props.animation!==this.widget.props.animation||A.props.color!==this.widget.props.color)this.startedAt=Date.now();this.startTimer()}dispose(){this.stopTimer(),super.dispose()}startTimer(){if(this.timer||this.widget.props.animation==="none"||this.animationComplete())return;this.timer=setInterval(()=>{if(!this.mounted)return;if(this.setState(()=>{}),this.animationComplete())this.stopTimer()},oi5),this.timer.unref()}stopTimer(){if(!this.timer)return;clearInterval(this.timer),this.timer=null}animationComplete(){return Date.now()-this.startedAt>=Pe4(this.widget.props.animation)}build(A){return new l({text:Oe4(this.widget.props.title,this.widget.props.color,this.widget.props.animation,Date.now()-this.startedAt)})}}function Oe4(A,Q,B,$){let J=f4(A),Y=new y({color:Q,bold:!0}),Z=new y({color:Q,bold:!0,dim:!0});switch(B){case"none":return new M(A,Y);case"wipe":return new M("",void 0,Ve4(J,je4(J,$),Y,Z));case"scramble":return new M("",void 0,Ve4(J,Re4(J,$),Y,Z))}}function qn5(A,Q,B){let $=f4(A);switch(Q){case"none":return A;case"wipe":return je4($,B).join("");case"scramble":return Re4($,B).join("")}}function Ve4(A,Q,B,$){return Q.map((J,Y)=>{let Z=J===A[Y]?B:$;return new M(J,Z)})}function je4(A,Q){let B=_e4($t(Q/Ke4)),$=Math.floor(B*(A.length+1));return A.map((J,Y)=>{if(Y<$)return J;if(Y===$)return"▒";return" "})}function Re4(A,Q){let $=_e4($t(Q/Ee4))*(A.length+5),J=Math.floor(Q/45);return A.map((Y,Z)=>{if($t(($-Z)/5)>=1)return Y;return Nn5(Z,J)})}function Nn5(A,Q){return De4[(A*7+Q*11)%De4.length]??"░"}function Pe4(A){if(A==="scramble")return Ee4;return Ke4}function _e4(A){return 1-(1-A)**3}function In5(A,Q){let B=Q.kind==="fill"?"tight":"loose";return new T2({fit:B,child:new Te4({child:A})})}class Te4 extends q5{constructor({child:A}){super({child:A})}createRenderObject(){return new Se4}}class Se4 extends $4{performLayout(){let A=this._lastConstraints;N4(!!A,"performLayout called without constraints");let Q=this.children[0];if(Q)Q.layout(A.loosen()),Q.setOffset(0,0);let B=Q?.size.width??0,$=Q?.size.height??0,J=A.constrain(A.hasTightWidth?A.maxWidth:B,A.hasTightHeight?A.maxHeight:$);this.setSize(J.width,J.height)}}function wn5(A,Q){if(A===void 0)return Ue4([{keys:["Esc"],label:"close"}],Q);if(xV0(A))return A.length===0?new q0({height:0}):Ue4(A,Q);if(A==="none")return new q0({height:0});return A}function xV0(A){return Array.isArray(A)}function ke4(A){return A===void 0||xV0(A)&&A.length>0?1:0}function Ue4(A,Q){let B=new y({color:Q.app.keybind}),$=new y({color:Q.colors.foreground,dim:!0}),J=[];return A.forEach((Y,Z)=>{if(Z>0)J.push(new M(" · ",$));Y.keys.forEach((X,F)=>{if(F>0)J.push(new M("/",$));J.push(new M(X,B))}),J.push(new M(` ${Y.label}`,$))}),new e1({child:l.spans(J)})}function Mn5(A){return[{label:"cli: copy tail logs",command:nI("tail",process.pid,{path:A})},{label:"cli: copy logs snapshot",command:nI("snapshot",process.pid,{path:A})},{label:"cli: htop",command:`htop -p ${process.pid}`}]}async function Ln5(A,Q){try{await L4.instance.tuiInstance.clipboard.writeText(A.command)}catch(B){j.error("Failed to copy debug command from Neo command palette",{error:B})}finally{Q()}}function On5(A,Q){let B=kV0(process.pid,{path:A},"less -R +G");Q();try{L4.instance.tuiInstance.suspend(),Cn5(B,{stdio:"inherit"})}catch($){j.error("Failed to open filtered CLI logs in pager",{error:$,command:B})}finally{process.stdout.write("\x1B[?25l"),L4.instance.tuiInstance.resume()}}function ve4(A){return[{noun:"debug",verb:"page logs",description:"View CLI logs in pager",status:{type:"enabled"},run:(Q,B,$)=>{On5(A,$)}},{noun:"debug",verb:"copy command",description:"Copy debug command to clipboard",status:{type:"enabled"},run:(Q,B,$)=>{Q.pushWithDismiss((J)=>new _A({header:"Debug: Copy Command",minWidth:80,maxWidth:80,autofocus:!1,footer:"none",onDismiss:J,child:new p6({items:Mn5(A),getLabel:(Y)=>Y.label,showBorder:!1,onAccept:(Y)=>{Ln5(Y,$)},onDismiss:J})}))}}]}var Zb="exit-app-key-pressed",Xb="cancel-key-pressed",aI="loading-thread",Fb="previous-thread-reference",Db="double-enter-steer";class Yt extends d4{}class fV0 extends d4{}class bV0 extends d4{}class Zt extends d4{visualIndex;constructor(A){super();this.visualIndex=A}}class Xt extends d4{}class uV0 extends d4{}class Ft extends d4{}class Gb extends d4{}class Vb extends d4{}class Dt extends d4{}class Gt extends d4{}class Vt extends d4{}class Ub extends d4{}class Q$ extends d4{text;successMessage;failureMessage;constructor(A="",Q="Selection copied to clipboard",B="Failed to copy selection"){super();this.text=A;this.successMessage=Q;this.failureMessage=B}}class hV0 extends d4{}class Ut extends d4{}class gV0 extends d4{}class mV0 extends d4{}class Kt extends d4{}class Et extends d4{}class Wt extends d4{}class pV0 extends d4{}class dV0 extends d4{}class cV0 extends d4{}class kR extends d4{}class Ht extends d4{}class k51 extends d4{mode;constructor(A){super();this.mode=A}}C3();var ye4=process.platform==="win32"?" ":"█",xe4=process.platform==="win32"?"░":"█";class F2 extends v0{controller;getScrollInfo;thickness;trackChar;thumbChar;showTrack;thumbColor;trackColor;constructor({key:A,controller:Q,getScrollInfo:B,thickness:$=1,trackChar:J=ye4,thumbChar:Y=xe4,showTrack:Z=!0,thumbColor:X,trackColor:F}){super(A?{key:A}:{});this.controller=Q,this.getScrollInfo=B,this.thickness=$,this.trackChar=J,this.thumbChar=Y,this.showTrack=Z,this.thumbColor=X,this.trackColor=F}createState(){return new fe4}}class fe4 extends k0{_dragStartY=null;_dragStartOffset=null;_isOverThumb=!1;_isPositionOverThumb(A){let{totalContentHeight:Q,viewportHeight:B}=this.widget.getScrollInfo(),J=this.context.findRenderObject()?.size.height??0;if(J===0||Q<=B)return!1;let Y=this.widget.getScrollInfo(),Z=Math.min(1,B/Q),X=Math.max(1,J*Z),F=Math.max(0,Math.min(1,Y.scrollOffset/(Q-B))),D=J-X,G=Math.max(0,D*F),V=G+X;return A>=G&&A<=V}_handleHover=(A)=>{let Q=this._isOverThumb;if(this._isOverThumb=this._isPositionOverThumb(A.localPosition.y),Q!==this._isOverThumb)this.setState()};_handleDrag=(A)=>{let{totalContentHeight:Q,viewportHeight:B,scrollOffset:$}=this.widget.getScrollInfo(),Y=this.context.findRenderObject()?.size.height??0;if(Y===0||Q<=B)return;if(this._dragStartY===null)this._dragStartY=A.localPosition.y,this._dragStartOffset=$;let Z=A.localPosition.y-this._dragStartY,X=Math.min(1,B/Q),F=Math.max(1,Y*X),D=Y-F;if(D<=0)return;let G=Q-B,V=D/G,U=Z/V,K=Math.max(0,Math.min(G,this._dragStartOffset+U));this.widget.controller.jumpTo(K)};_handleRelease=()=>{this._dragStartY=null,this._dragStartOffset=null};_handleClick=(A)=>{if(A.button!=="left")return;let Q=A.localPosition.y,{totalContentHeight:B,viewportHeight:$,scrollOffset:J}=this.widget.getScrollInfo(),Z=this.context.findRenderObject()?.size.height??0;if(Z===0||B<=$)return;let X=Math.min(1,$/B),F=Math.max(1,Z*X),D=B-$,G=Z-F,V=Math.max(0,Math.min(1,J/(B-$))),U=Math.max(0,G*V),K=U+F;if(Q>=U&&Q<=K)return;if(Q<U)this.widget.controller.animateTo(Math.max(0,J-$));else this.widget.controller.animateTo(Math.min(D,J+$))};build(A){return new f1({onClick:this._handleClick,onHover:this._handleHover,onDrag:this._handleDrag,onRelease:this._handleRelease,cursor:this._isOverThumb?r6.POINTER:r6.DEFAULT,child:new be4({controller:this.widget.controller,getScrollInfo:this.widget.getScrollInfo,thickness:this.widget.thickness,trackChar:this.widget.trackChar,thumbChar:this.widget.thumbChar,showTrack:this.widget.showTrack,thumbColor:this.widget.thumbColor,trackColor:this.widget.trackColor})})}}class be4 extends II{controller;getScrollInfo;thickness;trackChar;thumbChar;showTrack;thumbColor;trackColor;constructor({key:A,controller:Q,getScrollInfo:B,thickness:$=1,trackChar:J=ye4,thumbChar:Y=xe4,showTrack:Z=!0,thumbColor:X,trackColor:F}){super(A?{key:A}:{});this.controller=Q,this.getScrollInfo=B,this.thickness=$,this.trackChar=J,this.thumbChar=Y,this.showTrack=Z,this.thumbColor=X,this.trackColor=F}createRenderObject(){return new ue4(this)}updateRenderObject(A){A.updateWidget(this)}}class ue4 extends $4{_widget;constructor(A){super();this._widget=A}updateWidget(A){this._widget=A,this.markNeedsLayout()}performLayout(){let A=this._lastConstraints;N4(!!A,"performLayout called without constraints");let Q=Math.min(A.maxWidth,this._widget.thickness),B=A.maxHeight;this.setSize(Q,B),super.performLayout()}getMinIntrinsicWidth(A){return this._widget.thickness}getMaxIntrinsicWidth(A){return this._widget.thickness}getMinIntrinsicHeight(A){return 0}getMaxIntrinsicHeight(A){return 0}paint(A,Q,B){let{thumbStartFloat:$,thumbSizeFloat:J,showScrollbar:Y}=this._calculateScrollbarMetrics();if(!Y)return;let Z=this._widget.trackColor,X=this._widget.thumbColor,F=process.platform==="win32",D=$,G=$+J;if(!F){let V=["▁","▂","▃","▄","▅","▆","▇","█"];for(let U=0;U<this.size.height;U++){let K="█",E=!0;if(U===Math.floor(D)){let W=1-(D-U),H=Math.floor(W*8);K=V[H]||"█",E=!1}else if(U===Math.floor(G)){let W=1-(G-U),H=Math.floor(W*8);K=V[H]||"█"}else if(U>D&&U<G)E=!1;A.setChar(Q,B+U,K,{fg:X,bg:Z,reverse:E},1)}return}for(let V=0;V<this.size.height;V++){let U=V+0.5,K=U>=D&&U<G,E=K?this._widget.thumbChar:this._widget.trackChar;A.setChar(Q,B+V,E,{fg:K?X:Z,bg:Z,reverse:!1},1)}}_calculateScrollbarMetrics(){let{totalContentHeight:A,viewportHeight:Q,scrollOffset:B}=this._widget.getScrollInfo(),$=this.size.height;if(A<=Q||$<=0)return{thumbStartFloat:0,thumbSizeFloat:0,showScrollbar:!1};let J=Math.max(0,Math.min(1,B/(A-Q))),Y=Math.min(1,Q/A),Z=Math.max(1,$*Y),X=$-Z;return{thumbStartFloat:Math.max(0,X*J),thumbSizeFloat:Z,showScrollbar:!0}}}var he4=1;class eY extends v0{props;constructor(A){super();this.props=A}createState(){return new ge4}}class ge4 extends k0{ownership;viewportHeight=0;initState(){let A=this.widget.props.controller;if(A)this.ownership={controller:A,owned:!1};else{let Q=new aA;Q.followMode=!1,Q.jumpTo(0),this.ownership={controller:Q,owned:!0}}}didUpdateWidget(A){N4(A.props.controller===this.widget.props.controller,"NeoModalScrollArea.controller identity must be stable across rebuilds")}dispose(){if(this.ownership.owned)this.ownership.controller.dispose()}getScrollInfo=()=>{let{controller:A}=this.ownership,Q=this.viewportHeight;return{totalContentHeight:Math.max(A.maxScrollExtent+Q,0),viewportHeight:Q,scrollOffset:Math.max(A.offset,0)}};setMeasuredHeight=(A)=>{this.viewportHeight=A};build(A){let Q=_0.of(A),{controller:B}=this.ownership;return new me4({thickness:he4,onMeasured:this.setMeasuredHeight,scrollable:new PA({controller:B,autofocus:this.widget.props.autofocus??!0,keyboardScrolling:!0,child:this.widget.props.child}),scrollbar:new F2({controller:B,thickness:he4,thumbColor:Q.app.scrollbarThumb,trackColor:Q.app.scrollbarTrack,getScrollInfo:this.getScrollInfo})})}__testing={isOwned:()=>this.ownership.owned,controller:()=>this.ownership.controller}}class me4 extends R9{thickness;onMeasured;constructor({scrollable:A,scrollbar:Q,thickness:B,onMeasured:$}){super({children:[A,Q]});this.thickness=B,this.onMeasured=$}createRenderObject(){return new pe4(this.thickness,this.onMeasured)}}class pe4 extends $4{thickness;onMeasured;constructor(A,Q){super();this.thickness=A;this.onMeasured=Q}performLayout(){let A=this._lastConstraints;N4(!!A,"ScrollAreaLayoutRenderObject.performLayout called without constraints");let Q=A.maxWidth,B=Math.max(0,Math.min(this.thickness,Q)),$=Q-B,[J,Y]=this.children;N4(J!==void 0&&Y!==void 0,"ScrollAreaLayout requires scrollable and scrollbar children"),J.layout(new L1($,$,0,A.maxHeight)),J.setOffset(0,0);let Z=J.size.height;this.onMeasured(Z),Y.layout(new L1(B,B,Z,Z)),Y.setOffset($,0),this.setSize(Q,Z)}}var de4=10;class v51 extends v0{pluginService;workspaceRoot;logFilePath;onDismiss;constructor(A){super();this.pluginService=A.pluginService,this.workspaceRoot=A.workspaceRoot,this.logFilePath=A.logFilePath,this.onDismiss=A.onDismiss}createState(){return new ce4}}class ce4 extends k0{plugins=[];subscription=null;initState(){this.subscription=this.widget.pluginService.plugins.subscribe((A)=>{this.setState(()=>{this.plugins=A})})}didUpdateWidget(A){if(A.pluginService===this.widget.pluginService)return;this.subscription?.unsubscribe(),this.subscription=this.widget.pluginService.plugins.subscribe((Q)=>{this.setState(()=>{this.plugins=Q})})}dispose(){this.subscription?.unsubscribe(),super.dispose()}relativePath(A){let Q=A.startsWith("file://")?A.slice(7):A,B=this.widget.workspaceRoot.replace(/\/$/,"");return Q.startsWith(`${B}/`)?Q.slice(B.length+1):Q}detailPrefix(A){if(A.length===0)return` ${" ".repeat(de4)}`;return` ${`${A}:`.padEnd(de4," ")}`}pluginRows(A){let Q=_0.of(A),{app:B,colors:$}=Q,J=new y({color:$.foreground,dim:!0}),Y=new y({color:B.link}),Z=new y({color:B.link,underline:!0});if(this.plugins.length===0)return[new u0({padding:H0.symmetric(1,1),child:new l({text:new M("No plugins found.",J)})})];return this.plugins.map((X)=>{let F=X.uri.toString(),D=F.startsWith("file://"),G=()=>{$6(A,F)},V=X.status==="active"?new y({color:B.toolSuccess}):X.status==="error"?new y({color:B.toolError}):new y({color:$.warning}),U=new l({text:new M(this.relativePath(F),D?Z:new y({color:B.command}),void 0,D?Gf(F):void 0,D?G:void 0),maxLines:1,overflow:"ellipsis"}),K=D?new f1({cursor:"pointer",onClick:G,child:U}):U,E=[new B1({children:[new l({text:new M(X.status,V,[new M(" ",J)]),maxLines:1,overflow:"clip"}),new T2({fit:"loose",child:K})]})];if(X.errorMessage)E.push(new l({text:new M(this.detailPrefix("Error"),J,[new M(`see logs: ${this.widget.logFilePath}`,new y({color:B.toolError}))]),maxLines:1,overflow:"ellipsis"}));if(X.registeredEvents.length>0)E.push(new l({text:new M(this.detailPrefix("Events"),J,[new M(X.registeredEvents.join(", "),Y)]),maxLines:1,overflow:"ellipsis"}));for(let[W,H]of X.registeredCommands.entries())E.push(new l({text:new M(W===0?this.detailPrefix("Commands"):this.detailPrefix(""),J,[new M(`${H.category}: ${H.title}`,Y)]),maxLines:1,overflow:"ellipsis"}));for(let[W,H]of X.registeredTools.entries())E.push(new l({text:new M(W===0?this.detailPrefix("Tools"):this.detailPrefix(""),J,[new M(H.name,Y)]),maxLines:1,overflow:"ellipsis"}));return new u0({padding:H0.only({left:1,right:1,bottom:1}),child:new b0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:E})})})}build(A){let Q=this.plugins.filter((Y)=>Y.status==="active").length,B=this.plugins.reduce((Y,Z)=>Y+Z.registeredCommands.length,0),$=this.plugins.reduce((Y,Z)=>Y+Z.registeredTools.length,0),J=`${Q}/${this.plugins.length} ${E4(this.plugins.length,"plugin")} active (${B} ${E4(B,"command")}, ${$} ${E4($,"tool")})`;return new _A({header:"Plugins",autofocus:!1,maxWidth:90,maxHeight:30,footer:[{keys:["Esc"],label:"close"},{keys:["↑↓","j/k"],label:"scroll"}],onDismiss:this.widget.onDismiss,child:new b0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new u0({padding:H0.only({left:1,right:1,bottom:1}),child:new l({text:new M(J,new y({bold:!0}))})}),new T2({fit:"loose",child:new eY({child:new b0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:this.pluginRows(A)})})})]})})}}function le4(A){return[{noun:"plugins",verb:"list",description:"List all loaded plugins",keywords:["extensions","tools","commands"],status:{type:"enabled"},run:(Q,B,$)=>{Q.push(new v51({pluginService:A.pluginService,workspaceRoot:A.workspaceRoot,logFilePath:A.logFilePath,onDismiss:$}))}},{noun:"plugins",verb:"reload",description:"Reload all plugins",keywords:["refresh","restart","extensions"],status:{type:"enabled"},run:(Q,B,$)=>{A.pluginService.reload(),A.toastController.show("Reloading plugins..."),$()}}]}n0();class zt extends d4{}class Kb extends d4{}class y51 extends v0{props;constructor(A){super();this.props=A}createState(){return new ie4}}class ie4 extends k0{build(A){let{options:Q,onConfirm:B,onCancel:$}=this.widget.props,{colors:J}=_0.of(A),Y=Q.message?new l({text:new M(Q.message,new y({color:J.foreground}))}):new q0({height:1});return new _A({header:Q.title,minWidth:64,maxWidth:80,footer:[{keys:["Y"],label:Q.confirmButtonText??"yes"},{keys:["N","Esc"],label:"cancel"},{keys:["↑↓","j/k"],label:"scroll"}],autofocus:!1,onDismiss:$,child:new BA({actions:new Map([[zt,new G4(()=>B())],[Kb,new G4(()=>$())]]),child:new p5({debugLabel:"NeoConfirmDialogShortcuts",shortcuts:jn5(),child:new eY({child:Y})})})})}}function jn5(){return new Map([[v1.key("y"),new zt],[v1.shift("Y"),new zt],[v1.shift("y"),new zt],[v1.key("n"),new Kb],[v1.shift("N"),new Kb],[v1.shift("n"),new Kb],[v1.key("Escape"),new Kb]])}class qt extends v0{props;constructor(A){super();this.props=A}createState(){return new ne4}}class ne4 extends k0{controller=new M8;onTextChanged=()=>{this.setState()};initState(){this.controller.text=this.widget.props.initialValue??"",this.controller.addListener(this.onTextChanged)}dispose(){this.controller.removeListener(this.onTextChanged),this.controller.dispose(),super.dispose()}handleSubmit(){let A=this.controller.text.trim();if((this.widget.props.isRequired??!0)&&A.length===0)return;this.widget.props.onSubmit(A)}build(A){let{colors:Q,app:B}=_0.of(A),Y=!(this.widget.props.isRequired??!0)||this.controller.text.trim().length>0?[{keys:["Enter"],label:"submit"},{keys:["Esc"],label:"cancel"}]:[{keys:["Esc"],label:"cancel"}],Z=[];if(this.widget.props.helpText)Z.push(new l({text:new M(this.widget.props.helpText,new y({color:Q.foreground}))})),Z.push(new q0({height:1}));return Z.push(new B1({children:[new l({text:new M("> ",new y({color:B.command}))}),new S1({child:new rB({controller:this.controller,placeholder:this.widget.props.placeholder??"",autofocus:!0,maxLines:1,style:{textColor:Q.foreground,border:null},onSubmitted:()=>this.handleSubmit()})})]})),new _A({header:this.widget.props.header,minWidth:80,maxWidth:80,footer:Y,autofocus:!1,bodyFit:this.widget.props.bodyFit,onDismiss:this.widget.props.onDismiss,child:new b0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:Z})})}}class x51 extends I1{props;constructor(A){super();this.props=A}build(A){return new _A({header:this.props.options.title,minWidth:64,maxWidth:80,footer:[{keys:["↑/↓","j/k"],label:"move"},{keys:["Enter"],label:"select"},{keys:["Esc"],label:"cancel"}],autofocus:!1,onDismiss:this.props.onCancel,child:Rn5(this.props)})}}function Rn5(A){let Q=A.options.options.map((B)=>({value:B,label:B}));return new F9({options:Q,body:A.options.message,onSelect:(B)=>{if(B===null){A.onCancel();return}A.onSelect(B)},padding:H0.all(0),showBorder:!1,showDismissalMessage:!1,enableMouseInteraction:!1})}class f51{options;unregisterPluginCommands=null;pluginCommandSubscriptions=[];pluginErrorToastKeys=new Set;pendingInputDialog=null;pendingConfirmDialog=null;pendingSelectDialog=null;constructor(A){this.options=A}init(){this.configurePluginPlatform(),this.subscribePluginCommands()}dispose(){this.unregisterPluginCommands?.(),this.unregisterPluginCommands=null;for(let A of this.pluginCommandSubscriptions)A.unsubscribe();this.pluginCommandSubscriptions=[]}hasBlockingDialog(){return this.pendingInputDialog!==null||this.pendingConfirmDialog!==null||this.pendingSelectDialog!==null}buildDialogLayers(){let A=[];if(this.pendingInputDialog)A.push(new qt({header:this.pendingInputDialog.options.title??"Input",helpText:this.pendingInputDialog.options.helpText,initialValue:this.pendingInputDialog.options.initialValue,isRequired:!1,onSubmit:this.resolveInputDialog,onDismiss:this.cancelInputDialog}));if(this.pendingConfirmDialog)A.push(new y51({options:this.pendingConfirmDialog.options,onConfirm:this.resolveConfirmDialog,onCancel:this.cancelConfirmDialog}));if(this.pendingSelectDialog)A.push(new x51({options:this.pendingSelectDialog.options,onSelect:this.resolveSelectDialog,onCancel:this.cancelSelectDialog}));return A}configurePluginPlatform(){let A=this.options.neoContext.pluginPlatform;if(!A)return;A.showToast=(Q)=>this.options.toastController.show(Q,"success"),A.showOpenedURLToast=(Q)=>{this.options.toastController.show(`Opened URL: ${Q}`,"success",8000)},A.appendToThreadHandler=this.options.neoContext.observerOnly?async()=>{throw Error("thread.append is only available from an executor-owned plugin runtime")}:this.options.appendToThread,A.showInputDialog=this.showInputDialog,A.showConfirmDialog=this.showConfirmDialog,A.showSelectDialog=this.showSelectDialog}subscribePluginCommands(){let A=this.options.neoContext.pluginService;if(!A)return;this.refreshPluginCommands(A.commands.list()),this.pluginCommandSubscriptions=[A.plugins.subscribe((Q)=>{this.showNewPluginErrorToasts(Q),this.refreshPluginCommands(A.commands.list())}),A.commands.changed.subscribe(()=>{this.refreshPluginCommands(A.commands.list())})]}refreshPluginCommands(A){this.unregisterPluginCommands?.();let B=A.map(($)=>this.createPluginCommand($)).map(($)=>this.options.commandRegistry.register($));this.unregisterPluginCommands=()=>{for(let $ of B)$()}}showNewPluginErrorToasts(A){let Q=new Set;for(let B of A){if(B.status!=="error")continue;let $=`${B.uri.toString()}
|
|
5300
|
-
${B.errorMessage??""}`;if(Q.add($),this.pluginErrorToastKeys.has($))continue;this.options.toastController.show(this.formatPluginErrorToast(B),"error",8000)}this.pluginErrorToastKeys=Q}formatPluginErrorToast(A){let Q=A.uri.toString();return`Plugin failed: ${Q.split("/").pop()??Q}. See logs: ${this.options.neoContext.logFilePath}`}createPluginCommand(A){return{noun:A.category,verb:A.title,description:A.description??`Run plugin command ${A.category}: ${A.title}`,keywords:["plugin",A.pluginName,A.id],status:{type:"enabled"},run:async(Q,B,$)=>{$();try{await this.options.neoContext.pluginService?.commands.execute(A.pluginName,A.id,{threadID:this.options.getActiveThreadID()})}catch(J){j.error("Neo plugin command failed",{error:J,command:A}),this.options.toastController.show(J instanceof Error?J.message:String(J),"error",5000)}}}}showInputDialog=(A)=>{return new Promise((Q)=>{if(!this.options.state.mounted){Q(void 0);return}this.options.state.setState(()=>{this.options.commandPalette.disable(),this.pendingInputDialog={options:A,resolve:Q}})})};showConfirmDialog=(A)=>{return new Promise((Q)=>{if(!this.options.state.mounted){Q(!1);return}this.options.state.setState(()=>{this.options.commandPalette.disable(),this.pendingConfirmDialog={options:A,resolve:Q}})})};showSelectDialog=(A)=>{return new Promise((Q)=>{if(!this.options.state.mounted){Q(void 0);return}this.options.state.setState(()=>{this.options.commandPalette.disable(),this.pendingSelectDialog={options:A,resolve:Q}})})};resolveInputDialog=(A)=>{let Q=this.pendingInputDialog;if(!Q)return;this.clearDialogState(()=>{this.pendingInputDialog=null}),Q.resolve(A)};cancelInputDialog=()=>{let A=this.pendingInputDialog;if(!A)return;this.clearDialogState(()=>{this.pendingInputDialog=null}),A.resolve(void 0)};resolveConfirmDialog=()=>{let A=this.pendingConfirmDialog;if(!A)return;this.clearDialogState(()=>{this.pendingConfirmDialog=null}),A.resolve(!0)};cancelConfirmDialog=()=>{let A=this.pendingConfirmDialog;if(!A)return;this.clearDialogState(()=>{this.pendingConfirmDialog=null}),A.resolve(!1)};resolveSelectDialog=(A)=>{let Q=this.pendingSelectDialog;if(!Q)return;this.clearDialogState(()=>{this.pendingSelectDialog=null}),Q.resolve(A)};cancelSelectDialog=()=>{let A=this.pendingSelectDialog;if(!A)return;this.clearDialogState(()=>{this.pendingSelectDialog=null}),A.resolve(void 0)};clearDialogState(A){if(this.options.state.mounted)this.options.state.setState(A);else A()}}tl();n2();import{readFile as Pn5}from"node:fs/promises";import b51 from"node:os";async function ae4(A,Q){try{return{path:Q,contents:hg0(await Pn5(A,"utf8"))}}catch{return null}}async function oe4(A,Q){let B=[],$=await VA.getThread({thread:Q},{config:A.configService}),J=$.ok?$.result.thread.data:null;B.push({path:"thread.json",contents:JSON.stringify(e$(J),null,2)});let Y=await ae4(px(Q),`logs/${Q}.log`);if(Y)B.push(Y);let Z=await ae4(A.settingsFilePath,"settings/global.json");if(Z)B.push(Z);let X=await Df()??"unknown",F=await VA.sendReport({threadID:Q,files:B,metadata:{clientVersion:"0.0.1778049149-g4ce163",clientOS:`${b51.platform()} ${b51.release()} ${b51.arch()}`,installMethod:X}},{config:A.configService});if(!F.ok)throw Error(`Failed to submit report: ${F.error.message}`);return F.result.reportID}class u51{backStack=[];forwardStack=[];canNavigateBack(){return this.backStack.length>0}canNavigateForward(){return this.forwardStack.length>0}recordNavigation(A){if(!A)return;this.backStack.push(A),this.forwardStack.length=0}startBackNavigation(A){let Q=this.backStack.pop();if(!Q)return null;let B=Boolean(A);if(A)this.forwardStack.push(A);return{targetThreadID:Q,rollback:()=>{if(B)this.forwardStack.pop();this.backStack.push(Q)}}}startForwardNavigation(A){let Q=this.forwardStack.pop();if(!Q)return null;let B=Boolean(A);if(A)this.backStack.push(A);return{targetThreadID:Q,rollback:()=>{if(B)this.backStack.pop();this.forwardStack.push(Q)}}}}n0();n9();n2();async function re4(A,Q,B){let $;switch(B){case"private":$="This thread's visibility has been updated to private";break;case"workspace":$="This thread's visibility has been updated to workspace";break;case"group":$="This thread's visibility has been updated to group";break;case"unlisted":$="This thread's visibility has been updated to unlisted. Anyone on the Internet with the link can view it.";break;case"public":$="This thread's visibility has been updated to public. Anyone on the Internet can see it on your public profile, and it is publicly searchable.";break}try{let J=await VA.setThreadMeta({thread:Q,meta:rY(B)},{config:A.configService});if(!J.ok)throw Error(J.error.message);let Y=!1;if(B!=="private"){let X=jB(new URL(A.ampURL),Q).toString();try{await L4.instance.tuiInstance.clipboard.writeText(X),Y=!0}catch(F){j.error("Failed to copy thread URL after visibility update",{error:F})}}let Z=Y?`${$} Link copied to clipboard.`:$;return new rQ(Z)}catch(J){let Y=J instanceof Error?J.message:String(J);if(Y.includes("no-workspace"))return Error("You are not a member of any workspace.");if(Y.includes("groups-disabled"))return Error("The groups feature is not enabled for this workspace.");if(Y.includes("no-groups"))return Error("You are not a member of any groups.");return j.error("Unexpected failure to update thread visibility",{error:J}),Error(`Failed to update thread visibility for ${Q}`)}}class lV0 extends q5{offstage;constructor({key:A,offstage:Q=!0,child:B}){super({key:A,child:B});this.offstage=Q}createRenderObject(){return new h51(this.offstage)}updateRenderObject(A){if(A instanceof h51)A.offstage=this.offstage}}class h51 extends $4{_offstage;constructor(A){super();this._offstage=A}get offstage(){return this._offstage}set offstage(A){if(A===this._offstage)return;this._offstage=A,this.markNeedsLayout()}getMinIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicWidth(A)??0}getMaxIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicWidth(A)??0}getMinIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicHeight(A)??0}getMaxIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicHeight(A)??0}performLayout(){let A=this._lastConstraints;N4(!!A,"performLayout called without constraints");let Q=this.children[0];if(this._offstage){if(this.setSize(0,0),Q)Q.layout(A),Q.setOffset(0,0)}else if(Q){Q.layout(A);let B=A.constrain(Q.size.width,Q.size.height);this.setSize(B.width,B.height),Q.setOffset(0,0)}else{let B=A.smallest;this.setSize(B.width,B.height)}super.performLayout()}paint(A,Q,B){if(this._offstage)return;super.paint(A,Q,B)}hitTest(A,Q,B,$){if(this._offstage)return!1;return super.hitTest(A,Q,B,$)}}class g51{_state=null;_attach(A){this._state=A}_detach(){this._state=null}push(A){this._state?.push(A)}pushWithDismiss(A){this._state?.pushWithDismiss(A)}pop(){return this._state?.pop()??!1}get canPop(){return this._state?.canPop??!1}}class m51 extends v0{root;controller;constructor(A){super();this.root=A.root,this.controller=A.controller}createState(){return new se4}}class se4 extends k0{entries=[];initState(){this.widget.controller._attach(this)}didUpdateWidget(A){if(A.controller!==this.widget.controller)A.controller._detach(),this.widget.controller._attach(this)}dispose(){this.widget.controller._detach(),super.dispose()}push(A){let Q=new sj,B=this.makeScopedDismiss(Q);this.setState(()=>{this.entries.push({key:Q,widget:A,dismiss:B})})}pushWithDismiss(A){let Q=new sj,B=this.makeScopedDismiss(Q),$=A(B);this.setState(()=>{this.entries.push({key:Q,widget:$,dismiss:B})})}pop(){if(this.entries.length===0)return!1;return this.setState(()=>{this.entries.pop()}),!0}get canPop(){return this.entries.length>0}makeScopedDismiss(A){return()=>{if(!this.mounted)return;let Q=this.entries[this.entries.length-1];if(!Q||Q.key!==A)return;this.setState(()=>{this.entries.pop()})}}build(A){let Q=[];Q.push(new lV0({offstage:this.entries.length>0,child:this.widget.root}));for(let B=0;B<this.entries.length;B++){let $=this.entries[B],J=B===this.entries.length-1,Y=J?new c4({autofocus:!0,debugLabel:`ModalStackEntry[${B}]`,onKey:(Z)=>{if(Z.key!=="Escape")return"ignored";return $.dismiss(),"handled"},child:$.widget}):$.widget;Q.push(new lV0({key:$.key,offstage:!J,child:Y}))}return new t4({fit:"expand",children:Q})}}class d51 extends I1{props;constructor(A){super();this.props=A}build(A){let Q=this.props.commands.filter(($)=>$.status.type!=="hidden"),B=_n5(Q);return new _A({header:"Command Palette",autofocus:!1,barrierOpaque:!1,chromePadding:H0.only({left:1,top:1,right:1}),footer:"none",onDismiss:this.props.onDismiss,child:new p6({items:Q,showBorder:!1,getLabel:($)=>{let J=p51($);return $.keywords&&$.keywords.length>0?`${J} ${$.keywords.join(" ").toLowerCase()}`:J},sortItems:($,J,Y)=>{if(Y===""){let G=$.item.status.type==="disabled"?1:0,V=J.item.status.type==="disabled"?1:0;if(G!==V)return G-V;let U=$.item.sortBoost??0,K=J.item.sortBoost??0;if(U!==K)return K-U;let E=$.item.noun?.toLowerCase()??"",W=J.item.noun?.toLowerCase()??"";if(E!==W)return E<W?-1:1;return 0}let Z=HR($.item.verb.toLowerCase(),Y),X=HR(J.item.verb.toLowerCase(),Y);if(Z!==X)return X-Z;let F=HR(p51($.item),Y),D=HR(p51(J.item),Y);if(F!==D)return D-F;return J.score-$.score},isItemDisabled:($)=>$.status.type==="disabled",buildDisabledReasonWidget:($,J)=>{if($.status.type!=="disabled")return;let{colors:Y}=_0.of(J);return new l({text:new M($.status.reason,new y({color:Y.mutedForeground,dim:!0})),textAlign:"center"})},renderItem:($,J,Y,Z)=>new te4({command:$,isSelected:J,isDisabled:Y,categoryWidth:B,buildContext:Z}),onAccept:($)=>{this.props.onAccept($)},onDismiss:this.props.onDismiss})})}}class te4 extends I1{props;constructor(A){super();this.props=A}build(A){let{command:Q,isSelected:B,isDisabled:$,categoryWidth:J,buildContext:Y}=this.props,Z=_0.of(Y),{colors:X,app:F}=Z,D=B?F.selectionBackground:void 0,G=B?F.selectionForeground:X.foreground,V=B?G:X.mutedForeground,U=new l({text:new M(Q.noun?.toLowerCase()??"",new y({color:V,dim:$||!B})),textAlign:"right"}),K=[new M(Q.verb.toLowerCase(),new y({color:G,bold:!0,dim:$}))];if($)K.push(new M(" (unavailable)",new y({color:G,dim:!0})));let E=l.spans(K),W=[{child:U,fixedWidth:J},{child:E,expanded:!0}];if(Q.shortcut)W.push({child:Tn5(Q.shortcut,Z,$)});return new ee4({columns:W,padding:H0.horizontal(1),backgroundColor:D})}}function p51(A){return A.noun?`${A.noun.toLowerCase()} ${A.verb.toLowerCase()}`:A.verb.toLowerCase()}function _n5(A){return A.reduce((Q,B)=>{return B.noun?Math.max(Q,a4(B.noun)):Q},0)}function Tn5(A,Q,B){let{colors:$,app:J}=Q,Y=new y({color:$.mutedForeground,dim:B}),Z=[];for(let X of A.modifiers()){if(Z.length>0)Z.push(new M(" ",Y));Z.push(new M(X,new y({color:J.keybind,bold:!0,dim:B})))}if(Z.length>0)Z.push(new M(" ",Y));return Z.push(new M(A.key,new y({color:J.keybind,bold:!0,dim:B}))),l.spans(Z)}class ee4 extends I1{props;constructor(A){super();this.props=A}build(A){let{columns:Q,gap:B=2,padding:$,backgroundColor:J}=this.props,Y=[];for(let X=0;X<Q.length;X++){let F=Q[X];if(X>0&&B>0)Y.push(new q0({width:B}));if(F.fixedWidth!==void 0)Y.push(new q0({width:F.fixedWidth,child:F.child}));else if(F.expanded)Y.push(new S1({child:F.child}));else Y.push(F.child)}let Z=new B1({crossAxisAlignment:"start",children:Y});if(!$&&!J)return Z;return new p0({decoration:J?{color:J}:void 0,padding:$,child:Z})}}class c51{#A=[];#Q=new Set;get commands(){return this.#A}register(A){return this.#A.push(A),this.#B(),()=>{let Q=this.#A.indexOf(A);if(Q===-1)return;this.#A.splice(Q,1),this.#B()}}addListener(A){this.#Q.add(A)}removeListener(A){this.#Q.delete(A)}#B(){for(let A of this.#Q)A()}}class AZ extends q6{commandRegistry;constructor({commandRegistry:A,child:Q}){super({child:Q});this.commandRegistry=A}updateShouldNotify(A){return!1}static of(A){let Q=AZ.maybeOf(A);if(!Q)throw Error("No NeoCommandRegistryProvider found in widget tree");return Q}static maybeOf(A){return A.dependOnInheritedWidgetOfExactType(AZ)?.commandRegistry??null}}class l51 extends v0{onDismiss;constructor(A){super();this.onDismiss=A.onDismiss}createState(){return new A0A}}class A0A extends k0{modalStack=new g51;commandRegistry=null;initState(){super.initState(),queueMicrotask(()=>{if(!this.mounted)return;let A=AZ.of(this.context);this.commandRegistry=A,A.addListener(this.onCommandsChanged)})}dispose(){this.commandRegistry?.removeListener(this.onCommandsChanged),this.commandRegistry=null,super.dispose()}onCommandsChanged=()=>{this.setState()};build(A){let Q=AZ.of(A).commands,B=new d51({commands:Q,onAccept:($)=>{$.run(this.modalStack,A,this.widget.onDismiss)},onDismiss:()=>{if(this.modalStack.canPop)this.modalStack.pop();else this.widget.onDismiss()}});return new m51({root:B,controller:this.modalStack})}}var i51=[{description:"Move cursor up/down",methods:[{keys:["↑"]},{keys:["↓"]}]},{description:"Move cursor left/right",methods:[{keys:["←"]},{keys:["→"]},{input:"B",keys:["Ctrl"]},{input:"F",keys:["Ctrl"]}]},{description:"Insert newline",methods:[{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!0},{description:"Insert newline",methods:[{keys:["Enter"]},{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!1},{description:"Submit message",methods:[{keys:["Enter"]}],submitOnEnterOnly:!0},{description:"Submit message",methods:[{keys:["Ctrl/Cmd","Enter"]}],submitOnEnterOnly:!1},{description:"Clear input",methods:[{keys:["Escape"]}]},{description:"Edit prompt in $EDITOR",methods:[{input:"G",keys:["Ctrl"]}]},{description:"Navigate history (previous/next)",methods:[{input:"P",keys:["Ctrl"]},{input:"N",keys:["Ctrl"]}]},{description:"Jump to start of line",methods:[{keys:["Cmd","←"]},{input:"A",keys:["Ctrl"]}]},{description:"Jump to end of line",methods:[{keys:["Cmd","→"]},{input:"E",keys:["Ctrl"]}]},{description:"Jump to previous word",methods:[{keys:["Alt","←"]},{keys:["Ctrl","←"]},{input:"B",keys:["Alt"]}]},{description:"Jump to next word",methods:[{keys:["Alt","→"]},{keys:["Ctrl","→"]},{input:"F",keys:["Alt"]}]},{description:"Delete character backward",methods:[{keys:["Backspace"]},{input:"H",keys:["Ctrl"]}]},{description:"Delete word backward",methods:[{keys:["Alt","Backspace"]},{input:"W",keys:["Ctrl"]}]},{description:"Delete character forward",methods:[{keys:["Delete"]},{input:"D",keys:["Ctrl"]}]},{description:"Delete to start of line",methods:[{keys:["Cmd","Backspace"]},{input:"U",keys:["Ctrl"]}]},{description:"Delete to end of line",methods:[{input:"K",keys:["Ctrl"]}]},{description:"Yank (paste deleted text)",methods:[{input:"Y",keys:["Ctrl"]}]},{description:"Paste image from clipboard",methods:[{input:"V",keys:["Ctrl"]}]},{description:"Switch agent mode",methods:[{input:"S",keys:["Ctrl"]},{input:"S",keys:["Alt"]}]},{description:"Toggle reasoning effort",methods:[{input:"D",keys:["Alt"]}]},{description:"Open command palette",methods:[{input:"O",keys:["Ctrl"]}]},{description:"Mention files",methods:[{keys:["@"]}]},{description:"Mention threads",methods:[{keys:["@@"]}]},{description:"Show prompt history",methods:[{input:"R",keys:["Ctrl"]}]},{description:"Toggle inline shortcuts help",methods:[{keys:["?"]}]},{description:"Toggle thinking/dense view",methods:[{input:"T",keys:["Alt"]}]}],n51=[{description:"Page scroll",methods:[{keys:["Pg Up"]},{keys:["Pg Down"]}]},{description:"Half-page scroll",methods:[{input:"K",keys:["Alt"]},{input:"J",keys:["Alt"]}]},{description:"Mouse wheel scroll",methods:[{keys:["Mouse Wheel"]}]},{description:"Jump to first message",methods:[{keys:["Home"]}]},{description:"Jump to bottom of screen",methods:[{keys:["End"]}]},{description:"Navigate to previous messages",methods:[{keys:["Tab"]},{keys:["Shift","Tab"]}]}];class iV0 extends I1{items;renderRow;constructor({items:A,renderRow:Q}){super();this.items=A,this.renderRow=Q}build(A){let B=r1.of(A).size.width,$=50,J=B<50,Y=[];for(let Z of this.items){let[X,F]=this.renderRow(Z),D;if(J)D=new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:[X,new u0({padding:H0.only({left:4}),child:F})]});else D=new B1({crossAxisAlignment:"start",children:[new S1({flex:1,child:X}),new q0({width:1}),new S1({flex:1,child:F})]});Y.push(new u0({padding:H0.horizontal(6),child:D}))}return new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:Y})}}class a51 extends v0{commands;submitOnEnter;constructor({key:A,commands:Q,submitOnEnter:B}){super(A?{key:A}:{});this.commands=Q,this.submitOnEnter=B??!0}createState(){return new Q0A}}class Q0A extends k0{scrollController;initState(){this.scrollController=new aA,this.scrollController.disableFollowMode(),this.scrollController.jumpTo(0)}dispose(){}build(A){let B=k1.of(A).colorScheme,J=_0.of(A).app,Y=r1.of(A),Z=new y({color:B.primary,bold:!0}),X=new y({color:B.secondary,bold:!0}),F=new y({color:J.keybind}),D=new y({color:J.command}),G=new y({color:B.foreground}),V=new y({color:B.foreground}),U=Y.size.width,K=Y.size.height,E=U-4,W=K-4,H=Math.max(40,Math.min(80,E)),z=new Set(["permissions-disable"]),N=[...this.widget.commands.filter((O)=>{let _=O.noun?.toLowerCase();return _!=="dev"&&_!=="debug"&&!O.id.startsWith("debug-")&&!z.has(O.id)})].sort((O,_)=>{let T=(O.noun??"").toLowerCase(),S=(_.noun??"").toLowerCase(),b=T.localeCompare(S);if(b!==0)return b;let h=O.verb.toLowerCase(),x=_.verb.toLowerCase(),v=h.localeCompare(x);if(v!==0)return v;return O.id.localeCompare(_.id)}),I=new PA({autofocus:!0,controller:this.scrollController,child:new p0({constraints:new L1(H,H,0,Number.POSITIVE_INFINITY),child:new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:[new e1({child:new l({text:new M(`Amp CLI - Help & Keyboard Shortcuts
|
|
5300
|
+
${B.errorMessage??""}`;if(Q.add($),this.pluginErrorToastKeys.has($))continue;this.options.toastController.show(this.formatPluginErrorToast(B),"error",8000)}this.pluginErrorToastKeys=Q}formatPluginErrorToast(A){let Q=A.uri.toString();return`Plugin failed: ${Q.split("/").pop()??Q}. See logs: ${this.options.neoContext.logFilePath}`}createPluginCommand(A){return{noun:A.category,verb:A.title,description:A.description??`Run plugin command ${A.category}: ${A.title}`,keywords:["plugin",A.pluginName,A.id],status:{type:"enabled"},run:async(Q,B,$)=>{$();try{await this.options.neoContext.pluginService?.commands.execute(A.pluginName,A.id,{threadID:this.options.getActiveThreadID()})}catch(J){j.error("Neo plugin command failed",{error:J,command:A}),this.options.toastController.show(J instanceof Error?J.message:String(J),"error",5000)}}}}showInputDialog=(A)=>{return new Promise((Q)=>{if(!this.options.state.mounted){Q(void 0);return}this.options.state.setState(()=>{this.options.commandPalette.disable(),this.pendingInputDialog={options:A,resolve:Q}})})};showConfirmDialog=(A)=>{return new Promise((Q)=>{if(!this.options.state.mounted){Q(!1);return}this.options.state.setState(()=>{this.options.commandPalette.disable(),this.pendingConfirmDialog={options:A,resolve:Q}})})};showSelectDialog=(A)=>{return new Promise((Q)=>{if(!this.options.state.mounted){Q(void 0);return}this.options.state.setState(()=>{this.options.commandPalette.disable(),this.pendingSelectDialog={options:A,resolve:Q}})})};resolveInputDialog=(A)=>{let Q=this.pendingInputDialog;if(!Q)return;this.clearDialogState(()=>{this.pendingInputDialog=null}),Q.resolve(A)};cancelInputDialog=()=>{let A=this.pendingInputDialog;if(!A)return;this.clearDialogState(()=>{this.pendingInputDialog=null}),A.resolve(void 0)};resolveConfirmDialog=()=>{let A=this.pendingConfirmDialog;if(!A)return;this.clearDialogState(()=>{this.pendingConfirmDialog=null}),A.resolve(!0)};cancelConfirmDialog=()=>{let A=this.pendingConfirmDialog;if(!A)return;this.clearDialogState(()=>{this.pendingConfirmDialog=null}),A.resolve(!1)};resolveSelectDialog=(A)=>{let Q=this.pendingSelectDialog;if(!Q)return;this.clearDialogState(()=>{this.pendingSelectDialog=null}),Q.resolve(A)};cancelSelectDialog=()=>{let A=this.pendingSelectDialog;if(!A)return;this.clearDialogState(()=>{this.pendingSelectDialog=null}),A.resolve(void 0)};clearDialogState(A){if(this.options.state.mounted)this.options.state.setState(A);else A()}}tl();n2();import{readFile as Pn5}from"node:fs/promises";import b51 from"node:os";async function ae4(A,Q){try{return{path:Q,contents:hg0(await Pn5(A,"utf8"))}}catch{return null}}async function oe4(A,Q){let B=[],$=await VA.getThread({thread:Q},{config:A.configService}),J=$.ok?$.result.thread.data:null;B.push({path:"thread.json",contents:JSON.stringify(e$(J),null,2)});let Y=await ae4(px(Q),`logs/${Q}.log`);if(Y)B.push(Y);let Z=await ae4(A.settingsFilePath,"settings/global.json");if(Z)B.push(Z);let X=await Df()??"unknown",F=await VA.sendReport({threadID:Q,files:B,metadata:{clientVersion:"0.0.1778057090-g80f5f1",clientOS:`${b51.platform()} ${b51.release()} ${b51.arch()}`,installMethod:X}},{config:A.configService});if(!F.ok)throw Error(`Failed to submit report: ${F.error.message}`);return F.result.reportID}class u51{backStack=[];forwardStack=[];canNavigateBack(){return this.backStack.length>0}canNavigateForward(){return this.forwardStack.length>0}recordNavigation(A){if(!A)return;this.backStack.push(A),this.forwardStack.length=0}startBackNavigation(A){let Q=this.backStack.pop();if(!Q)return null;let B=Boolean(A);if(A)this.forwardStack.push(A);return{targetThreadID:Q,rollback:()=>{if(B)this.forwardStack.pop();this.backStack.push(Q)}}}startForwardNavigation(A){let Q=this.forwardStack.pop();if(!Q)return null;let B=Boolean(A);if(A)this.backStack.push(A);return{targetThreadID:Q,rollback:()=>{if(B)this.backStack.pop();this.forwardStack.push(Q)}}}}n0();n9();n2();async function re4(A,Q,B){let $;switch(B){case"private":$="This thread's visibility has been updated to private";break;case"workspace":$="This thread's visibility has been updated to workspace";break;case"group":$="This thread's visibility has been updated to group";break;case"unlisted":$="This thread's visibility has been updated to unlisted. Anyone on the Internet with the link can view it.";break;case"public":$="This thread's visibility has been updated to public. Anyone on the Internet can see it on your public profile, and it is publicly searchable.";break}try{let J=await VA.setThreadMeta({thread:Q,meta:rY(B)},{config:A.configService});if(!J.ok)throw Error(J.error.message);let Y=!1;if(B!=="private"){let X=jB(new URL(A.ampURL),Q).toString();try{await L4.instance.tuiInstance.clipboard.writeText(X),Y=!0}catch(F){j.error("Failed to copy thread URL after visibility update",{error:F})}}let Z=Y?`${$} Link copied to clipboard.`:$;return new rQ(Z)}catch(J){let Y=J instanceof Error?J.message:String(J);if(Y.includes("no-workspace"))return Error("You are not a member of any workspace.");if(Y.includes("groups-disabled"))return Error("The groups feature is not enabled for this workspace.");if(Y.includes("no-groups"))return Error("You are not a member of any groups.");return j.error("Unexpected failure to update thread visibility",{error:J}),Error(`Failed to update thread visibility for ${Q}`)}}class lV0 extends q5{offstage;constructor({key:A,offstage:Q=!0,child:B}){super({key:A,child:B});this.offstage=Q}createRenderObject(){return new h51(this.offstage)}updateRenderObject(A){if(A instanceof h51)A.offstage=this.offstage}}class h51 extends $4{_offstage;constructor(A){super();this._offstage=A}get offstage(){return this._offstage}set offstage(A){if(A===this._offstage)return;this._offstage=A,this.markNeedsLayout()}getMinIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicWidth(A)??0}getMaxIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicWidth(A)??0}getMinIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicHeight(A)??0}getMaxIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicHeight(A)??0}performLayout(){let A=this._lastConstraints;N4(!!A,"performLayout called without constraints");let Q=this.children[0];if(this._offstage){if(this.setSize(0,0),Q)Q.layout(A),Q.setOffset(0,0)}else if(Q){Q.layout(A);let B=A.constrain(Q.size.width,Q.size.height);this.setSize(B.width,B.height),Q.setOffset(0,0)}else{let B=A.smallest;this.setSize(B.width,B.height)}super.performLayout()}paint(A,Q,B){if(this._offstage)return;super.paint(A,Q,B)}hitTest(A,Q,B,$){if(this._offstage)return!1;return super.hitTest(A,Q,B,$)}}class g51{_state=null;_attach(A){this._state=A}_detach(){this._state=null}push(A){this._state?.push(A)}pushWithDismiss(A){this._state?.pushWithDismiss(A)}pop(){return this._state?.pop()??!1}get canPop(){return this._state?.canPop??!1}}class m51 extends v0{root;controller;constructor(A){super();this.root=A.root,this.controller=A.controller}createState(){return new se4}}class se4 extends k0{entries=[];initState(){this.widget.controller._attach(this)}didUpdateWidget(A){if(A.controller!==this.widget.controller)A.controller._detach(),this.widget.controller._attach(this)}dispose(){this.widget.controller._detach(),super.dispose()}push(A){let Q=new sj,B=this.makeScopedDismiss(Q);this.setState(()=>{this.entries.push({key:Q,widget:A,dismiss:B})})}pushWithDismiss(A){let Q=new sj,B=this.makeScopedDismiss(Q),$=A(B);this.setState(()=>{this.entries.push({key:Q,widget:$,dismiss:B})})}pop(){if(this.entries.length===0)return!1;return this.setState(()=>{this.entries.pop()}),!0}get canPop(){return this.entries.length>0}makeScopedDismiss(A){return()=>{if(!this.mounted)return;let Q=this.entries[this.entries.length-1];if(!Q||Q.key!==A)return;this.setState(()=>{this.entries.pop()})}}build(A){let Q=[];Q.push(new lV0({offstage:this.entries.length>0,child:this.widget.root}));for(let B=0;B<this.entries.length;B++){let $=this.entries[B],J=B===this.entries.length-1,Y=J?new c4({autofocus:!0,debugLabel:`ModalStackEntry[${B}]`,onKey:(Z)=>{if(Z.key!=="Escape")return"ignored";return $.dismiss(),"handled"},child:$.widget}):$.widget;Q.push(new lV0({key:$.key,offstage:!J,child:Y}))}return new t4({fit:"expand",children:Q})}}class d51 extends I1{props;constructor(A){super();this.props=A}build(A){let Q=this.props.commands.filter(($)=>$.status.type!=="hidden"),B=_n5(Q);return new _A({header:"Command Palette",autofocus:!1,barrierOpaque:!1,chromePadding:H0.only({left:1,top:1,right:1}),footer:"none",onDismiss:this.props.onDismiss,child:new p6({items:Q,showBorder:!1,getLabel:($)=>{let J=p51($);return $.keywords&&$.keywords.length>0?`${J} ${$.keywords.join(" ").toLowerCase()}`:J},sortItems:($,J,Y)=>{if(Y===""){let G=$.item.status.type==="disabled"?1:0,V=J.item.status.type==="disabled"?1:0;if(G!==V)return G-V;let U=$.item.sortBoost??0,K=J.item.sortBoost??0;if(U!==K)return K-U;let E=$.item.noun?.toLowerCase()??"",W=J.item.noun?.toLowerCase()??"";if(E!==W)return E<W?-1:1;return 0}let Z=HR($.item.verb.toLowerCase(),Y),X=HR(J.item.verb.toLowerCase(),Y);if(Z!==X)return X-Z;let F=HR(p51($.item),Y),D=HR(p51(J.item),Y);if(F!==D)return D-F;return J.score-$.score},isItemDisabled:($)=>$.status.type==="disabled",buildDisabledReasonWidget:($,J)=>{if($.status.type!=="disabled")return;let{colors:Y}=_0.of(J);return new l({text:new M($.status.reason,new y({color:Y.mutedForeground,dim:!0})),textAlign:"center"})},renderItem:($,J,Y,Z)=>new te4({command:$,isSelected:J,isDisabled:Y,categoryWidth:B,buildContext:Z}),onAccept:($)=>{this.props.onAccept($)},onDismiss:this.props.onDismiss})})}}class te4 extends I1{props;constructor(A){super();this.props=A}build(A){let{command:Q,isSelected:B,isDisabled:$,categoryWidth:J,buildContext:Y}=this.props,Z=_0.of(Y),{colors:X,app:F}=Z,D=B?F.selectionBackground:void 0,G=B?F.selectionForeground:X.foreground,V=B?G:X.mutedForeground,U=new l({text:new M(Q.noun?.toLowerCase()??"",new y({color:V,dim:$||!B})),textAlign:"right"}),K=[new M(Q.verb.toLowerCase(),new y({color:G,bold:!0,dim:$}))];if($)K.push(new M(" (unavailable)",new y({color:G,dim:!0})));let E=l.spans(K),W=[{child:U,fixedWidth:J},{child:E,expanded:!0}];if(Q.shortcut)W.push({child:Tn5(Q.shortcut,Z,$)});return new ee4({columns:W,padding:H0.horizontal(1),backgroundColor:D})}}function p51(A){return A.noun?`${A.noun.toLowerCase()} ${A.verb.toLowerCase()}`:A.verb.toLowerCase()}function _n5(A){return A.reduce((Q,B)=>{return B.noun?Math.max(Q,a4(B.noun)):Q},0)}function Tn5(A,Q,B){let{colors:$,app:J}=Q,Y=new y({color:$.mutedForeground,dim:B}),Z=[];for(let X of A.modifiers()){if(Z.length>0)Z.push(new M(" ",Y));Z.push(new M(X,new y({color:J.keybind,bold:!0,dim:B})))}if(Z.length>0)Z.push(new M(" ",Y));return Z.push(new M(A.key,new y({color:J.keybind,bold:!0,dim:B}))),l.spans(Z)}class ee4 extends I1{props;constructor(A){super();this.props=A}build(A){let{columns:Q,gap:B=2,padding:$,backgroundColor:J}=this.props,Y=[];for(let X=0;X<Q.length;X++){let F=Q[X];if(X>0&&B>0)Y.push(new q0({width:B}));if(F.fixedWidth!==void 0)Y.push(new q0({width:F.fixedWidth,child:F.child}));else if(F.expanded)Y.push(new S1({child:F.child}));else Y.push(F.child)}let Z=new B1({crossAxisAlignment:"start",children:Y});if(!$&&!J)return Z;return new p0({decoration:J?{color:J}:void 0,padding:$,child:Z})}}class c51{#A=[];#Q=new Set;get commands(){return this.#A}register(A){return this.#A.push(A),this.#B(),()=>{let Q=this.#A.indexOf(A);if(Q===-1)return;this.#A.splice(Q,1),this.#B()}}addListener(A){this.#Q.add(A)}removeListener(A){this.#Q.delete(A)}#B(){for(let A of this.#Q)A()}}class AZ extends q6{commandRegistry;constructor({commandRegistry:A,child:Q}){super({child:Q});this.commandRegistry=A}updateShouldNotify(A){return!1}static of(A){let Q=AZ.maybeOf(A);if(!Q)throw Error("No NeoCommandRegistryProvider found in widget tree");return Q}static maybeOf(A){return A.dependOnInheritedWidgetOfExactType(AZ)?.commandRegistry??null}}class l51 extends v0{onDismiss;constructor(A){super();this.onDismiss=A.onDismiss}createState(){return new A0A}}class A0A extends k0{modalStack=new g51;commandRegistry=null;initState(){super.initState(),queueMicrotask(()=>{if(!this.mounted)return;let A=AZ.of(this.context);this.commandRegistry=A,A.addListener(this.onCommandsChanged)})}dispose(){this.commandRegistry?.removeListener(this.onCommandsChanged),this.commandRegistry=null,super.dispose()}onCommandsChanged=()=>{this.setState()};build(A){let Q=AZ.of(A).commands,B=new d51({commands:Q,onAccept:($)=>{$.run(this.modalStack,A,this.widget.onDismiss)},onDismiss:()=>{if(this.modalStack.canPop)this.modalStack.pop();else this.widget.onDismiss()}});return new m51({root:B,controller:this.modalStack})}}var i51=[{description:"Move cursor up/down",methods:[{keys:["↑"]},{keys:["↓"]}]},{description:"Move cursor left/right",methods:[{keys:["←"]},{keys:["→"]},{input:"B",keys:["Ctrl"]},{input:"F",keys:["Ctrl"]}]},{description:"Insert newline",methods:[{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!0},{description:"Insert newline",methods:[{keys:["Enter"]},{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!1},{description:"Submit message",methods:[{keys:["Enter"]}],submitOnEnterOnly:!0},{description:"Submit message",methods:[{keys:["Ctrl/Cmd","Enter"]}],submitOnEnterOnly:!1},{description:"Clear input",methods:[{keys:["Escape"]}]},{description:"Edit prompt in $EDITOR",methods:[{input:"G",keys:["Ctrl"]}]},{description:"Navigate history (previous/next)",methods:[{input:"P",keys:["Ctrl"]},{input:"N",keys:["Ctrl"]}]},{description:"Jump to start of line",methods:[{keys:["Cmd","←"]},{input:"A",keys:["Ctrl"]}]},{description:"Jump to end of line",methods:[{keys:["Cmd","→"]},{input:"E",keys:["Ctrl"]}]},{description:"Jump to previous word",methods:[{keys:["Alt","←"]},{keys:["Ctrl","←"]},{input:"B",keys:["Alt"]}]},{description:"Jump to next word",methods:[{keys:["Alt","→"]},{keys:["Ctrl","→"]},{input:"F",keys:["Alt"]}]},{description:"Delete character backward",methods:[{keys:["Backspace"]},{input:"H",keys:["Ctrl"]}]},{description:"Delete word backward",methods:[{keys:["Alt","Backspace"]},{input:"W",keys:["Ctrl"]}]},{description:"Delete character forward",methods:[{keys:["Delete"]},{input:"D",keys:["Ctrl"]}]},{description:"Delete to start of line",methods:[{keys:["Cmd","Backspace"]},{input:"U",keys:["Ctrl"]}]},{description:"Delete to end of line",methods:[{input:"K",keys:["Ctrl"]}]},{description:"Yank (paste deleted text)",methods:[{input:"Y",keys:["Ctrl"]}]},{description:"Paste image from clipboard",methods:[{input:"V",keys:["Ctrl"]}]},{description:"Switch agent mode",methods:[{input:"S",keys:["Ctrl"]},{input:"S",keys:["Alt"]}]},{description:"Toggle reasoning effort",methods:[{input:"D",keys:["Alt"]}]},{description:"Open command palette",methods:[{input:"O",keys:["Ctrl"]}]},{description:"Mention files",methods:[{keys:["@"]}]},{description:"Mention threads",methods:[{keys:["@@"]}]},{description:"Show prompt history",methods:[{input:"R",keys:["Ctrl"]}]},{description:"Toggle inline shortcuts help",methods:[{keys:["?"]}]},{description:"Toggle thinking/dense view",methods:[{input:"T",keys:["Alt"]}]}],n51=[{description:"Page scroll",methods:[{keys:["Pg Up"]},{keys:["Pg Down"]}]},{description:"Half-page scroll",methods:[{input:"K",keys:["Alt"]},{input:"J",keys:["Alt"]}]},{description:"Mouse wheel scroll",methods:[{keys:["Mouse Wheel"]}]},{description:"Jump to first message",methods:[{keys:["Home"]}]},{description:"Jump to bottom of screen",methods:[{keys:["End"]}]},{description:"Navigate to previous messages",methods:[{keys:["Tab"]},{keys:["Shift","Tab"]}]}];class iV0 extends I1{items;renderRow;constructor({items:A,renderRow:Q}){super();this.items=A,this.renderRow=Q}build(A){let B=r1.of(A).size.width,$=50,J=B<50,Y=[];for(let Z of this.items){let[X,F]=this.renderRow(Z),D;if(J)D=new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:[X,new u0({padding:H0.only({left:4}),child:F})]});else D=new B1({crossAxisAlignment:"start",children:[new S1({flex:1,child:X}),new q0({width:1}),new S1({flex:1,child:F})]});Y.push(new u0({padding:H0.horizontal(6),child:D}))}return new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:Y})}}class a51 extends v0{commands;submitOnEnter;constructor({key:A,commands:Q,submitOnEnter:B}){super(A?{key:A}:{});this.commands=Q,this.submitOnEnter=B??!0}createState(){return new Q0A}}class Q0A extends k0{scrollController;initState(){this.scrollController=new aA,this.scrollController.disableFollowMode(),this.scrollController.jumpTo(0)}dispose(){}build(A){let B=k1.of(A).colorScheme,J=_0.of(A).app,Y=r1.of(A),Z=new y({color:B.primary,bold:!0}),X=new y({color:B.secondary,bold:!0}),F=new y({color:J.keybind}),D=new y({color:J.command}),G=new y({color:B.foreground}),V=new y({color:B.foreground}),U=Y.size.width,K=Y.size.height,E=U-4,W=K-4,H=Math.max(40,Math.min(80,E)),z=new Set(["permissions-disable"]),N=[...this.widget.commands.filter((O)=>{let _=O.noun?.toLowerCase();return _!=="dev"&&_!=="debug"&&!O.id.startsWith("debug-")&&!z.has(O.id)})].sort((O,_)=>{let T=(O.noun??"").toLowerCase(),S=(_.noun??"").toLowerCase(),b=T.localeCompare(S);if(b!==0)return b;let h=O.verb.toLowerCase(),x=_.verb.toLowerCase(),v=h.localeCompare(x);if(v!==0)return v;return O.id.localeCompare(_.id)}),I=new PA({autofocus:!0,controller:this.scrollController,child:new p0({constraints:new L1(H,H,0,Number.POSITIVE_INFINITY),child:new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:[new e1({child:new l({text:new M(`Amp CLI - Help & Keyboard Shortcuts
|
|
5301
5301
|
`,Z)})}),new q0({height:1}),new u0({padding:H0.horizontal(2),child:new l({text:new M(`Editor Shortcuts
|
|
5302
5302
|
`,X)})}),new iV0({items:i51.filter((O)=>O.submitOnEnterOnly===void 0||O.submitOnEnterOnly===this.widget.submitOnEnter),renderRow:(O)=>{let _=[];for(let S of O.methods){let b=this.buildCleanKeyCombination(S);_.push(b)}let T=_.join(", ");return[new l({text:new M(T,F)}),new l({text:new M(O.description,G)})]}}),new q0({height:1}),new u0({padding:H0.horizontal(2),child:new l({text:new M(`Scrolling & Navigation
|
|
5303
5303
|
`,X)})}),new iV0({items:n51,renderRow:(O)=>{let _=[];for(let S of O.methods){let b=this.buildCleanKeyCombination(S);_.push(b)}let T=_.join(", ");return[new l({text:new M(T,F)}),new l({text:new M(O.description,G)})]}}),new q0({height:1}),new u0({padding:H0.horizontal(2),child:new l({text:new M(`Command Palette Commands
|
|
@@ -5382,7 +5382,7 @@ Ctrl-X, Y, Z to unlock`;if(E){let Q0=G.text.replace(/`([^`]+)`/g,"$1")+`
|
|
|
5382
5382
|
- A shared Slack channel
|
|
5383
5383
|
- Real life (in person)
|
|
5384
5384
|
|
|
5385
|
-
`,new y({color:Q.foreground})),textAlign:"left"}),new l({text:new M("All diagnostics data is deleted after 7 days. Amp team members can only access the diagnostics data if you provide the report ID.",new y({color:Q.foreground,dim:!0})),textAlign:"left"})]})}}var m4A={kind:"fill",modalRows:19};function Bs5(A){return new _A({header:"Sending Report",tone:"default",minWidth:80,maxWidth:80,bodyFit:m4A,onDismiss:A,child:new p4A})}class p4A extends I1{build(A){let{colors:Q}=_0.of(A);return new B1({mainAxisSize:"min",children:[new BH({color:Q.primary}),new q0({width:1}),new l({text:new M("Gathering and sending diagnostics data...",new y({color:Q.foreground,dim:!0}))})]})}}function g4A(A){return new _A({header:A.title,tone:A.tone,barrierOpaque:!0,minWidth:80,maxWidth:80,bodyFit:m4A,onDismiss:A.onDismiss,child:A.child})}function d4A(A,Q){return{noun:"feedback",verb:"send report",description:"Send a diagnostic feedback report to Amp support",keywords:["report bug","share with support","support","bug","feedback"],get status(){return Q()?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(B,$,J)=>{let Y=Q()?.client.getThreadId();if(!Y)return;B.push(Bs5(J)),A.sendFeedbackReport(Y).then(async(Z)=>{try{await L4.instance.tuiInstance.clipboard.writeText(Z),x5.maybeOf($)?.show("Copied report ID to clipboard","success",3000)}catch(X){j.warn("Failed to copy report ID to clipboard",{error:X,reportID:Z})}B.push(g4A({title:"Report Sent",tone:"success",onDismiss:J,child:new V81(Z)}))}).catch((Z)=>{j.error("Failed to share thread with support",{error:Z,threadID:Y}),B.push(g4A({title:"Report failed",tone:"error",onDismiss:J,child:new l({text:new M(`Failed to send report: ${Z instanceof Error?Z.message:String(Z)}`)})}))})}}}var $s5=["private","workspace","unlisted","public"];class l4A extends I1{props;constructor(A){super();this.props=A}build(A){let{colors:Q,app:B}=_0.of(A);return new p6({items:$s5,getLabel:($)=>`${U81($)} ${c4A($)}`,showBorder:!1,onAccept:this.props.onSelect,onDismiss:this.props.onDismiss,renderItem:($,J)=>{let Y=J?B.selectionBackground:void 0,Z=J?B.selectionForeground:Q.foreground,X=J?B.selectionForeground:Q.mutedForeground;return new p0({decoration:Y?{color:Y}:void 0,padding:H0.symmetric(1,0),child:new B1({crossAxisAlignment:"center",children:[new S1({child:new l({text:new M(U81($),new y({color:Z})),maxLines:1,overflow:"ellipsis"})}),new q0({width:2}),new l({text:new M(c4A($),new y({color:X})),maxLines:1,overflow:"ellipsis"})]})})}})}}function U81(A){switch(A){case"private":return"Private";case"workspace":return"Workspace";case"group":return"Group";case"unlisted":return"Unlisted";case"public":return"Public"}}function c4A(A){switch(A){case"private":return"Only you can see this thread";case"workspace":return"Visible to workspace members";case"group":return"Visible to group members";case"unlisted":return"Anyone with the link can view";case"public":return"Searchable and on your public profile"}}function Js5(A){return`New thread visibility set to ${U81(A).toLowerCase()}`}async function Ys5(A,Q,B,$){if(!Q){A.setDraftVisibility?.(B),$?.show(Js5(B),"success");return}let J=await A.setVisibility(Q,B);if(J instanceof rQ)$?.show(J.message,"success");else $?.show(J.message,"error")}function i4A(A,Q){return{noun:"thread",verb:"set visibility",description:"Set thread visibility",keywords:["share","private","workspace","public","unlisted","team","group"],get status(){return Q()||A.setDraftVisibility?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(B,$,J)=>{let Y=Q(),Z=Y?.client?.getThreadId()??null,X=!Y&&!!A.setDraftVisibility;if(!Z&&!X)return;let F=x5.maybeOf($);B.push(new _A({header:"Set Thread Visibility",autofocus:!1,minWidth:80,maxWidth:80,onDismiss:J,child:new l4A({onDismiss:J,onSelect:(D)=>{J(),Ys5(A,Z,D,F)}})}))}}}var Xs5=5000;async function Fs5(A){return new Promise((Q)=>{Zs5("git",["branch","--show-current"],{cwd:A},(B,$)=>{if(B){Q(null);return}let J=$.trim();Q(J||null)})})}function Ds5(A,Q){let B=h1(e0.file(A)),$={workspaceRoot:B,workingDirectory:B};if(Q)$.git={branch:Q};return $}class E81 extends v0{initialAgentMode;analyzeContextForThread;listSkillsForThread;threadContext;draftThreadSettings;editorController;history;updateDraftThreadSettings;onNewThread;sendFeedbackReport;setThreadVisibility;archiveThread;addThreadLabel;removeThreadLabel;configService;hints;ideStatus;constructor(A){super();this.initialAgentMode=A.initialAgentMode,this.analyzeContextForThread=A.analyzeContextForThread,this.listSkillsForThread=A.listSkillsForThread,this.threadContext=A.threadContext,this.draftThreadSettings=A.draftThreadSettings,this.editorController=A.editorController,this.history=A.history,this.updateDraftThreadSettings=A.updateDraftThreadSettings,this.onNewThread=A.onNewThread,this.sendFeedbackReport=A.sendFeedbackReport,this.setThreadVisibility=A.setThreadVisibility,this.archiveThread=A.archiveThread,this.addThreadLabel=A.addThreadLabel,this.removeThreadLabel=A.removeThreadLabel,this.configService=A.configService,this.hints=A.hints,this.ideStatus=A.ideStatus}createState(){return new n4A}}class n4A extends k0{historyIndex=-1;historyDraft=null;promptHistoryPicker=new Us(this);agentMode;copyOnSelectEnabled=!0;copyOnSelectSubscription=null;expansion=new X31;previousThreadIDForReference=null;emptyThreadVisibility=null;unregisterCommands=null;configSettingsForReasoning={};currentGitBranch=null;useLocalEnvironmentFallbackForActiveThread=!1;fastModeToastID=null;statusMessage=null;statusMessageTimer=null;isEditorUploadLocked=!1;initState(){this.agentMode=this.widget.initialAgentMode,this.unregisterCommands=this.registerCommands(),this.subscribeToCopyOnSelectEnabled(),this.updateGitBranch()}didUpdateWidget(A){if(A.configService!==this.widget.configService)this.subscribeToCopyOnSelectEnabled();if(A.threadContext?.client!==this.widget.threadContext?.client)if(this.historyIndex=-1,this.historyDraft=null,this.isEditorUploadLocked=!1,this.promptHistoryPicker.disable(),!this.widget.threadContext)this.previousThreadIDForReference=A.threadContext?.client.getThreadId()??null,this.emptyThreadVisibility=null,this.useLocalEnvironmentFallbackForActiveThread=!0;else this.previousThreadIDForReference=null,this.useLocalEnvironmentFallbackForActiveThread=A.threadContext===null}dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.copyOnSelectSubscription?.unsubscribe(),this.copyOnSelectSubscription=null,this.statusMessageTimer)clearTimeout(this.statusMessageTimer),this.statusMessageTimer=null}updateGitBranch=async()=>{let A=y2.of(this.context).workspaceRoot,Q=await Fs5(A);if(!this.mounted)return;this.setState(()=>{this.currentGitBranch=Q})};registerCommands(){let A=AZ.of(this.context),Q=y2.of(this.context),B=this,$=()=>{return B.widget.threadContext??null},J=()=>{let F=B.widget.threadContext?.client.getThreadId();if(!F)return null;return jB(new URL(Q.ampURL),F).toString()},X=[...f$(void 0,{isInternalUser:Q.isInternalUser}).map(({mode:F})=>({noun:"mode",verb:`use ${F}`,description:`Enable ${F} mode`,get status(){if(B.widget.threadContext)return{type:"hidden"};if(F===B.agentMode)return{type:"disabled",reason:`Already using ${F} mode`};return{type:"enabled"}},run:(D,G,V)=>{B.setAgentMode(F),V()}})),{noun:"speed",get verb(){return"use fast (2.5x cost)"},description:"Use fast speed for this thread",keywords:["openai","fast","standard","deep"],get status(){return B.speedCommandStatus("fast")},run:(F,D,G)=>{B.setSpeed("fast"),G()}},{noun:"speed",verb:"use normal",description:"Use normal speed for this thread",keywords:["openai","normal","standard","deep"],get status(){return B.speedCommandStatus("normal")},run:(F,D,G)=>{B.setSpeed("normal"),G()}},{noun:"thread",verb:"toggle details",description:"Expand or collapse tool and activity details",keywords:["work","tool","activity","expand","collapse"],shortcut:v1.alt("t"),status:{type:"enabled"},run:(F,D,G)=>{B.toggleWorkDetails(),G()}},{noun:"mode",verb:"toggle reasoning effort",description:"Cycle reasoning effort for the active model",keywords:["deep","thinking","reasoning","effort","depth","anthropic","openai","smart","frontier"],shortcut:v1.alt("d"),get status(){if(B.widget.threadContext)return{type:"hidden"};return u$(B.currentCommandAgentMode())?{type:"enabled"}:{type:"hidden"}},run:(F,D,G)=>{B.toggleReasoningEffort(),G()}},{noun:"prompt",verb:"history",description:"Restore a previous prompt",keywords:["recent","reuse","search"],shortcut:v1.ctrl("r"),get status(){return B.isEditorUploadLocked?{type:"disabled",reason:"Prompt editor is not available"}:{type:"enabled"}},run:(F,D,G)=>{if(B.isEditorUploadLocked){G();return}F.pushWithDismiss((V)=>new VU0({entries:this.widget.history.getAll(),currentCwd:K81.cwd(),onAccept:(U)=>{this.restorePromptHistory(U),G()},onDismiss:V}))}},{noun:"thread",verb:"copy ID",description:"Copy thread ID to clipboard",keywords:["identifier","clipboard"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(F,D,G)=>{let V=$()?.client.getThreadId();if(!V)return;BA.maybeInvoke(D,new Q$(V,"Thread ID copied to clipboard","Failed to copy thread ID")),G()}},{noun:"thread",verb:"copy URL",description:"Copy thread URL to clipboard",keywords:["link","share","clipboard"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(F,D,G)=>{let V=J();if(!V)return;BA.maybeInvoke(D,new Q$(V,"Thread URL copied to clipboard","Failed to copy thread URL")),G()}},{noun:"thread",verb:"copy markdown",description:"Copy thread as Markdown",keywords:["markdown","export","clipboard"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(F,D,G)=>{let V=$()?.client.getThreadId();if(!V)return;(async()=>{try{let U=await Q.getThreadMarkdown(V);if(!U){x5.error(D,"Failed to copy thread markdown");return}BA.maybeInvoke(D,new Q$(U,"Thread markdown copied to clipboard","Failed to copy thread markdown"))}catch(U){j.error("Failed to render thread markdown from Neo command palette",{error:U,threadID:V}),x5.error(D,"Failed to copy thread markdown")}finally{G()}})()}},{noun:"thread",verb:"analyze context",description:"Analyze context token usage",keywords:["tokens","usage","window","size","cost"],get status(){let F=B.widget.threadContext;if(!F)return{type:"disabled",reason:"No active thread"};let D=b$(F.observer.agentMode);if(!T0A.includes(D))return{type:"disabled",reason:"Context analysis is not supported for this mode"};return{type:"enabled"}},run:(F,D,G)=>{let V=$()?.client.getThreadId();if(!V)return;let U=60,K=1;F.push(new _A({header:"Context Usage Analysis",minWidth:U,maxWidth:U,chromePadding:H0.symmetric(K,0),footer:[{keys:["Esc"],label:"close"}],onDismiss:G,child:new wt({embedded:!0,contentWidth:U-2*K,thread:null,dtwAnalyze:(E)=>{return B.widget.analyzeContextForThread(V,E)},onDismiss:G})}))}},{noun:"skills",verb:"list",description:"List available skills for this thread",keywords:["agent","show"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(F,D,G)=>{let V=$()?.client.getThreadId();if(!V)return;F.push(new G81({listSkills:(U)=>B.widget.listSkillsForThread(V,U),onDismiss:G,cwd:Q.workspaceRoot}))}},{noun:"thread",verb:"new",description:"Start new thread",keywords:["create","start","reset","clear"],sortBoost:101,get status(){if(B.isEditorUploadLocked)return{type:"disabled",reason:"Prompt editor is not available"};return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"Already on a new thread"}},run:(F,D)=>{if(B.isEditorUploadLocked)return;BA.maybeInvoke(D,new Dt)}},{noun:"thread",verb:"open in browser",description:"Open thread in browser",keywords:["web","view","launch"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:async(F,D,G)=>{let V=J();if(!V)return;try{await $6(D,V)}finally{G()}}},d4A({sendFeedbackReport:(F)=>{return this.widget.sendFeedbackReport(F)}},$),i4A({setVisibility:(F,D)=>this.widget.setThreadVisibility(F,D),setDraftVisibility:(F)=>this.setEmptyThreadVisibility(F)},$),Q4A({archiveThread:(F)=>this.widget.archiveThread(F)},$),h4A($),j4A({configService:this.widget.configService,addLabel:(F,D)=>this.widget.addThreadLabel(F,D)},$),_4A({configService:this.widget.configService,removeLabel:(F,D)=>this.widget.removeThreadLabel(F,D)},$)].map((F)=>A.register(F));return()=>{for(let F of X)F()}}currentCommandAgentMode(){return this.widget.threadContext?.observer.agentMode??this.agentMode}currentThreadSettings(){return this.widget.threadContext?.observer.threadSettings().getValue()??this.widget.draftThreadSettings}supportsSpeedCommand(A){return zJ(A)!==void 0}isFastSpeedEnabled(A){let Q=this.currentThreadSettings(),B=zJ(A);return B!==void 0&&Q[B]==="fast"}speedCommandStatus(A){let Q=this.currentCommandAgentMode();if(!this.supportsSpeedCommand(Q))return{type:"hidden"};let B=this.isFastSpeedEnabled(Q);if(A==="fast"&&B)return{type:"disabled",reason:"Already using fast speed"};if(A==="normal"&&!B)return{type:"disabled",reason:"Already using normal speed"};return{type:"enabled"}}setEmptyThreadVisibility(A){this.setState(()=>{this.emptyThreadVisibility=A})}updateThreadSettings(A){let Q=this.widget.threadContext;if(Q){let B=Q.observer.threadSettings().getValue()??{},$=A(B);return Q.client.sendClientUpdateThreadSettings($),this.widget.updateDraftThreadSettings(()=>$),"handled"}return this.widget.updateDraftThreadSettings(A),"handled"}setSpeed(A){let Q=this.currentCommandAgentMode(),B=zJ(Q);if(B===void 0)return"ignored";let $=A==="normal"?"standard":"fast",J=this.updateThreadSettings((Y)=>{return{...Y,[B]:$}});if(this.persistSpeedForMode(Q,$),A==="fast")this.showFastModeToast(Q);return J}showFastModeToast(A){let Q=x5.maybeOf(this.context);if(!Q)return;if(this.fastModeToastID!==null)Q.dismiss(this.fastModeToastID);this.fastModeToastID=Q.show(`↯${A} costs 2.5x the standard rate for this mode`,"warning",Xs5)}dismissFastModeToast(){if(this.fastModeToastID===null)return;x5.maybeOf(this.context)?.dismiss(this.fastModeToastID),this.fastModeToastID=null}toggleWorkDetails(){return this.expansion.toggle(!1),"handled"}showStatusMessage(A,Q=2000){if(this.statusMessageTimer)clearTimeout(this.statusMessageTimer),this.statusMessageTimer=null;this.setState(()=>{this.statusMessage=A}),this.statusMessageTimer=setTimeout(()=>{if(this.statusMessageTimer=null,!this.mounted)return;this.setState(()=>{this.statusMessage=null})},Q)}persistReasoningEffortForMode(A,Q){oQ((B)=>({...B,lastReasoningEffortByMode:{...B.lastReasoningEffortByMode,[A]:Q}}))}persistSpeedForMode(A,Q){oQ((B)=>({...B,lastSpeedByMode:{...B.lastSpeedByMode,[A]:Q}}))}applyStickySpeedForMode(A,Q){let B=zJ(Q),$=oD0(y2.of(this.context),Q);if(B===void 0||$===void 0)return A;return{...A,[B]:$}}toggleReasoningEffort(){let A=this.currentCommandAgentMode(),Q=u$(A);if(!Q)return"ignored";let B=null,$=this.updateThreadSettings((J)=>{let Y=r11(A,J,this.configSettingsForReasoning),Z=M80(Q,Y);return B=Z,this.persistReasoningEffortForMode(A,Z),{...J,"reasoning.effort":Z}});if(B)this.showStatusMessage(`Reasoning effort: ${B}`);return $}onPromptSubmitted=(A)=>{this.widget.history.add(A,K81.cwd()),this.resetHistory()};handleEditorUploadLockChange=(A)=>{if(this.isEditorUploadLocked===A)return;this.setState(()=>{if(this.isEditorUploadLocked=A,A)this.promptHistoryPicker.disable()})};restorePromptHistory(A){if(this.isEditorUploadLocked)return;this.resetHistory(),this.widget.editorController.text=A,this.widget.editorController.moveCursorToEnd()}handlePromptHistorySelection=(A)=>{this.promptHistoryPicker.disable(),this.restorePromptHistory(A)};navigateHistoryPrevious=()=>{if(this.isEditorUploadLocked)return"handled";let A=this.widget.history.previous();if(A!==null){if(this.historyIndex===-1)this.historyDraft=this.widget.editorController.text;this.historyIndex++,this.widget.editorController.text=A,this.widget.editorController.moveCursorToStart()}return"handled"};navigateHistoryNext=()=>{if(this.isEditorUploadLocked)return"handled";let A=this.widget.history.next();if(A!==null)this.historyIndex--,this.widget.editorController.text=A,this.widget.editorController.moveCursorToEnd();else if(this.historyIndex>-1)this.historyIndex=-1,this.widget.editorController.text=this.historyDraft||"",this.widget.editorController.moveCursorToEnd(),this.historyDraft=null;return"handled"};resetHistory(){this.widget.history.reset(),this.historyIndex=-1,this.historyDraft=null}setAgentMode=(A)=>{if(this.widget.threadContext)return;if(A!==this.agentMode)this.dismissFastModeToast();this.setState(()=>{this.agentMode=A}),this.widget.updateDraftThreadSettings((Q)=>{let B=o11(y2.of(this.context),A),$={...Q};delete $["reasoning.effort"];let J=B??r11(A,$,this.configSettingsForReasoning);if(J===void 0){let Y={...Q};return delete Y["reasoning.effort"],this.applyStickySpeedForMode(Y,A)}return this.applyStickySpeedForMode({...Q,"reasoning.effort":J},A)}),oQ((Q)=>({...Q,agentMode:A}))};buildActions(){let A=new G4(()=>{if(this.isEditorUploadLocked)return"handled";return this.promptHistoryPicker.enable(),"handled"}),Q=new G4(()=>{return this.navigateHistoryPrevious()}),B=new G4(()=>{return this.navigateHistoryNext()}),$=new G4((Z)=>{return this.setAgentMode(Z.mode),"handled"}),J=new G4(()=>{return this.toggleReasoningEffort()}),Y=new G4(()=>{return this.toggleWorkDetails()});return new Map([[cW,A],[cV0,B],[dV0,Q],[k51,$],[Ht,J],[gV0,Y]])}build(A){let Q=this.widget.threadContext,B=y2.of(A),$=Ds5(B.workspaceRoot,this.currentGitBranch),Y=[Q?new r31({editorController:this.widget.editorController,copyOnSelectEnabled:this.copyOnSelectEnabled,observingClient:{client:Q.client,observer:Q.observer},hints:this.widget.hints,ideStatus:this.widget.ideStatus,onPromptSubmitted:this.onPromptSubmitted,onEditorUploadLockChange:this.handleEditorUploadLockChange,editorUploadLocked:this.isEditorUploadLocked,environmentFallback:this.useLocalEnvironmentFallbackForActiveThread?$:null}):new F81({agentMode:this.agentMode,threadSettings:this.widget.draftThreadSettings,configSettings:this.configSettingsForReasoning,editorController:this.widget.editorController,visibility:this.emptyThreadVisibility,onNewThread:this.widget.onNewThread,onAgentModeChange:this.setAgentMode,onEditorUploadLockChange:this.handleEditorUploadLockChange,previousThreadIDForReference:this.previousThreadIDForReference,hints:this.widget.hints,ideStatus:this.widget.ideStatus,configService:this.widget.configService,environment:$,statusMessage:this.statusMessage})];if(!this.isEditorUploadLocked&&this.promptHistoryPicker.isEnabled())Y.push(new VU0({entries:this.widget.history.getAll(),currentCwd:K81.cwd(),onAccept:this.handlePromptHistorySelection,onDismiss:this.promptHistoryPicker.disable}));let Z=new Map([[v1.ctrl("r"),new cW],[v1.alt("t"),new gV0]]);if(!this.isEditorUploadLocked&&this.promptHistoryPicker.isEnabled())Z.set(v1.ctrl("o"),new cW);else if(!this.isEditorUploadLocked)Z.set(v1.ctrl("n"),new cV0),Z.set(v1.ctrl("p"),new dV0);return new BA({actions:this.buildActions(),child:new p5({debugLabel:"NeoThreadShortcuts",shortcuts:Z,child:new QK({controller:this.expansion,child:new t4({children:Y})})})})}subscribeToCopyOnSelectEnabled(){this.copyOnSelectSubscription?.unsubscribe(),this.copyOnSelectSubscription=this.widget.configService.config.subscribe((A)=>{let Q=A.settings["terminal.copyOnSelect"]??!0,B=A.settings["internal.model"],$=this.configSettingsForReasoning["internal.model"]!==B;if(B===void 0)this.configSettingsForReasoning={};else this.configSettingsForReasoning={"internal.model":B};if(this.copyOnSelectEnabled===Q&&!$)return;if(this.copyOnSelectEnabled=Q,this.mounted)this.setState()})}}C3();class W81 extends v0{toolboxes;onDismiss;constructor(A){super();this.toolboxes=A.toolboxes,this.onDismiss=A.onDismiss}createState(){return new o4A}}class o4A extends k0{toolboxes=new u8(this,[]);initState(){this.toolboxes.subscribe(this.widget.toolboxes)}didUpdateWidget(A){if(A.toolboxes!==this.widget.toolboxes)this.toolboxes.subscribe(this.widget.toolboxes)}build(A){return new r4A({toolboxes:this.toolboxes.getValue(),onDismiss:this.widget.onDismiss})}}class r4A extends v0{toolboxes;onDismiss;constructor(A){super();this.toolboxes=A.toolboxes,this.onDismiss=A.onDismiss}createState(){return new s4A}}class s4A extends k0{scrollController=new aA;canScroll=!1;initState(){this.scrollController.followMode=!1,this.scrollController.jumpTo(0),this.scrollController.addListener(this.updateCanScroll)}dispose(){this.scrollController.removeListener(this.updateCanScroll),this.scrollController.dispose()}updateCanScroll=()=>{let A=this.scrollController.maxScrollExtent>0;if(A===this.canScroll)return;this.setState(()=>{this.canScroll=A})};build(A){return new _A({header:"Toolboxes",onDismiss:this.widget.onDismiss,minWidth:80,maxWidth:120,maxHeight:40,autofocus:!1,footer:Gs5(this.canScroll),child:new eY({controller:this.scrollController,child:Vs5(A,this.widget.toolboxes)})})}}function Gs5(A){let Q=[{keys:["Esc"],label:"close"}];if(A)Q.push({keys:["↑↓","j/k"],label:"scroll"});return Q}function Vs5(A,Q){let B=Us5(A,Q);return new b0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new l({text:new M("",void 0,B),selectable:!0})]})}function Us5(A,Q){let B=_0.of(A),{colors:$}=B,J=new y({color:$.foreground,dim:!0}),Y=new y({color:$.foreground,bold:!0});if(Q.length===0)return[new M("No toolboxes found.",J)];let Z=[];for(let X of Q){let F=X.tools.length,D=X.tools.filter((G)=>G.status==="registered").length;if(X.discovering){let G=X.tools.filter((V)=>V.status!=="pending").length;Z.push(new M(X.path,Y)),Z.push(new M(` discovering ${G}/${F}...
|
|
5385
|
+
`,new y({color:Q.foreground})),textAlign:"left"}),new l({text:new M("All diagnostics data is deleted after 7 days. Amp team members can only access the diagnostics data if you provide the report ID.",new y({color:Q.foreground,dim:!0})),textAlign:"left"})]})}}var m4A={kind:"fill",modalRows:19};function Bs5(A){return new _A({header:"Sending Report",tone:"default",minWidth:80,maxWidth:80,bodyFit:m4A,onDismiss:A,child:new p4A})}class p4A extends I1{build(A){let{colors:Q}=_0.of(A);return new B1({mainAxisSize:"min",children:[new BH({color:Q.primary}),new q0({width:1}),new l({text:new M("Gathering and sending diagnostics data...",new y({color:Q.foreground,dim:!0}))})]})}}function g4A(A){return new _A({header:A.title,tone:A.tone,barrierOpaque:!0,minWidth:80,maxWidth:80,bodyFit:m4A,onDismiss:A.onDismiss,child:A.child})}function d4A(A,Q){return{noun:"feedback",verb:"send report",description:"Send a diagnostic feedback report to Amp support",keywords:["report bug","share with support","support","bug","feedback"],get status(){return Q()?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(B,$,J)=>{let Y=Q()?.client.getThreadId();if(!Y)return;B.push(Bs5(J)),A.sendFeedbackReport(Y).then(async(Z)=>{try{await L4.instance.tuiInstance.clipboard.writeText(Z),x5.maybeOf($)?.show("Copied report ID to clipboard","success",3000)}catch(X){j.warn("Failed to copy report ID to clipboard",{error:X,reportID:Z})}B.push(g4A({title:"Report Sent",tone:"success",onDismiss:J,child:new V81(Z)}))}).catch((Z)=>{j.error("Failed to share thread with support",{error:Z,threadID:Y}),B.push(g4A({title:"Report failed",tone:"error",onDismiss:J,child:new l({text:new M(`Failed to send report: ${Z instanceof Error?Z.message:String(Z)}`)})}))})}}}var $s5=["private","workspace","unlisted","public"];class l4A extends I1{props;constructor(A){super();this.props=A}build(A){let{colors:Q,app:B}=_0.of(A);return new p6({items:$s5,getLabel:($)=>`${U81($)} ${c4A($)}`,showBorder:!1,onAccept:this.props.onSelect,onDismiss:this.props.onDismiss,renderItem:($,J)=>{let Y=J?B.selectionBackground:void 0,Z=J?B.selectionForeground:Q.foreground,X=J?B.selectionForeground:Q.mutedForeground;return new p0({decoration:Y?{color:Y}:void 0,padding:H0.symmetric(1,0),child:new B1({crossAxisAlignment:"center",children:[new S1({child:new l({text:new M(U81($),new y({color:Z})),maxLines:1,overflow:"ellipsis"})}),new q0({width:2}),new l({text:new M(c4A($),new y({color:X})),maxLines:1,overflow:"ellipsis"})]})})}})}}function U81(A){switch(A){case"private":return"Private";case"workspace":return"Workspace";case"group":return"Group";case"unlisted":return"Unlisted";case"public":return"Public"}}function c4A(A){switch(A){case"private":return"Only you can see this thread";case"workspace":return"Visible to workspace members";case"group":return"Visible to group members";case"unlisted":return"Anyone with the link can view";case"public":return"Searchable and on your public profile"}}function Js5(A){return`New thread visibility set to ${U81(A).toLowerCase()}`}async function Ys5(A,Q,B,$){if(!Q){A.setDraftVisibility?.(B),$?.show(Js5(B),"success");return}let J=await A.setVisibility(Q,B);if(J instanceof rQ)$?.show(J.message,"success");else $?.show(J.message,"error")}function i4A(A,Q){return{noun:"thread",verb:"set visibility",description:"Set thread visibility",keywords:["share","private","workspace","public","unlisted","team","group"],get status(){return Q()||A.setDraftVisibility?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(B,$,J)=>{let Y=Q(),Z=Y?.client?.getThreadId()??null,X=!Y&&!!A.setDraftVisibility;if(!Z&&!X)return;let F=x5.maybeOf($);B.push(new _A({header:"Set Thread Visibility",autofocus:!1,minWidth:80,maxWidth:80,onDismiss:J,child:new l4A({onDismiss:J,onSelect:(D)=>{J(),Ys5(A,Z,D,F)}})}))}}}var Xs5=5000;async function Fs5(A){return new Promise((Q)=>{Zs5("git",["branch","--show-current"],{cwd:A},(B,$)=>{if(B){Q(null);return}let J=$.trim();Q(J||null)})})}function Ds5(A,Q){let B=h1(e0.file(A)),$={workspaceRoot:B,workingDirectory:B};if(Q)$.git={branch:Q};return $}class E81 extends v0{initialAgentMode;analyzeContextForThread;listSkillsForThread;threadContext;draftThreadSettings;editorController;history;updateDraftThreadSettings;onNewThread;sendFeedbackReport;setThreadVisibility;archiveThread;addThreadLabel;removeThreadLabel;configService;hints;ideStatus;constructor(A){super();this.initialAgentMode=A.initialAgentMode,this.analyzeContextForThread=A.analyzeContextForThread,this.listSkillsForThread=A.listSkillsForThread,this.threadContext=A.threadContext,this.draftThreadSettings=A.draftThreadSettings,this.editorController=A.editorController,this.history=A.history,this.updateDraftThreadSettings=A.updateDraftThreadSettings,this.onNewThread=A.onNewThread,this.sendFeedbackReport=A.sendFeedbackReport,this.setThreadVisibility=A.setThreadVisibility,this.archiveThread=A.archiveThread,this.addThreadLabel=A.addThreadLabel,this.removeThreadLabel=A.removeThreadLabel,this.configService=A.configService,this.hints=A.hints,this.ideStatus=A.ideStatus}createState(){return new n4A}}class n4A extends k0{historyIndex=-1;historyDraft=null;promptHistoryPicker=new Us(this);agentMode;copyOnSelectEnabled=!0;copyOnSelectSubscription=null;expansion=new X31;previousThreadIDForReference=null;emptyThreadVisibility=null;unregisterCommands=null;configSettingsForReasoning={};currentGitBranch=null;useLocalEnvironmentFallbackForActiveThread=!1;fastModeToastID=null;statusMessage=null;statusMessageTimer=null;isEditorUploadLocked=!1;initState(){this.agentMode=this.widget.initialAgentMode,this.unregisterCommands=this.registerCommands(),this.subscribeToCopyOnSelectEnabled(),this.updateGitBranch()}didUpdateWidget(A){if(A.configService!==this.widget.configService)this.subscribeToCopyOnSelectEnabled();if(A.threadContext?.client!==this.widget.threadContext?.client)if(this.historyIndex=-1,this.historyDraft=null,this.isEditorUploadLocked=!1,this.promptHistoryPicker.disable(),!this.widget.threadContext)this.previousThreadIDForReference=A.threadContext?.client.getThreadId()??null,this.emptyThreadVisibility=null,this.useLocalEnvironmentFallbackForActiveThread=!0;else this.previousThreadIDForReference=null,this.useLocalEnvironmentFallbackForActiveThread=A.threadContext===null}dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.copyOnSelectSubscription?.unsubscribe(),this.copyOnSelectSubscription=null,this.statusMessageTimer)clearTimeout(this.statusMessageTimer),this.statusMessageTimer=null}updateGitBranch=async()=>{let A=y2.of(this.context).workspaceRoot,Q=await Fs5(A);if(!this.mounted)return;this.setState(()=>{this.currentGitBranch=Q})};registerCommands(){let A=AZ.of(this.context),Q=y2.of(this.context),B=this,$=()=>{return B.widget.threadContext??null},J=()=>{let F=B.widget.threadContext?.client.getThreadId();if(!F)return null;return jB(new URL(Q.ampURL),F).toString()},X=[...f$(void 0,{isInternalUser:Q.isInternalUser}).map(({mode:F})=>({noun:"mode",verb:`use ${F}`,description:`Enable ${F} mode`,get status(){if(B.widget.threadContext)return{type:"hidden"};if(F===B.agentMode)return{type:"disabled",reason:`Already using ${F} mode`};return{type:"enabled"}},run:(D,G,V)=>{B.setAgentMode(F),V()}})),{noun:"speed",get verb(){return"use fast (2.5x cost)"},description:"Use fast speed for this thread",keywords:["openai","fast","standard","deep"],get status(){return B.speedCommandStatus("fast")},run:(F,D,G)=>{B.setSpeed("fast"),G()}},{noun:"speed",verb:"use normal",description:"Use normal speed for this thread",keywords:["openai","normal","standard","deep"],get status(){return B.speedCommandStatus("normal")},run:(F,D,G)=>{B.setSpeed("normal"),G()}},{noun:"thread",verb:"toggle details",description:"Expand or collapse tool and activity details",keywords:["work","tool","activity","expand","collapse"],shortcut:v1.alt("t"),status:{type:"enabled"},run:(F,D,G)=>{B.toggleWorkDetails(),G()}},{noun:"mode",verb:"toggle reasoning effort",description:"Cycle reasoning effort for the active model",keywords:["deep","thinking","reasoning","effort","depth","anthropic","openai","smart","frontier"],shortcut:v1.alt("d"),get status(){if(B.widget.threadContext)return{type:"hidden"};return u$(B.currentCommandAgentMode())?{type:"enabled"}:{type:"hidden"}},run:(F,D,G)=>{B.toggleReasoningEffort(),G()}},{noun:"prompt",verb:"history",description:"Restore a previous prompt",keywords:["recent","reuse","search"],shortcut:v1.ctrl("r"),get status(){return B.isEditorUploadLocked?{type:"disabled",reason:"Prompt editor is not available"}:{type:"enabled"}},run:(F,D,G)=>{if(B.isEditorUploadLocked){G();return}F.pushWithDismiss((V)=>new VU0({entries:this.widget.history.getAll(),currentCwd:K81.cwd(),onAccept:(U)=>{this.restorePromptHistory(U),G()},onDismiss:V}))}},{noun:"thread",verb:"copy ID",description:"Copy thread ID to clipboard",keywords:["identifier","clipboard"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(F,D,G)=>{let V=$()?.client.getThreadId();if(!V)return;BA.maybeInvoke(D,new Q$(V,"Thread ID copied to clipboard","Failed to copy thread ID")),G()}},{noun:"thread",verb:"copy URL",description:"Copy thread URL to clipboard",keywords:["link","share","clipboard"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(F,D,G)=>{let V=J();if(!V)return;BA.maybeInvoke(D,new Q$(V,"Thread URL copied to clipboard","Failed to copy thread URL")),G()}},{noun:"thread",verb:"copy markdown",description:"Copy thread as Markdown",keywords:["markdown","export","clipboard"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(F,D,G)=>{let V=$()?.client.getThreadId();if(!V)return;(async()=>{try{let U=await Q.getThreadMarkdown(V);if(!U){x5.error(D,"Failed to copy thread markdown");return}BA.maybeInvoke(D,new Q$(U,"Thread markdown copied to clipboard","Failed to copy thread markdown"))}catch(U){j.error("Failed to render thread markdown from Neo command palette",{error:U,threadID:V}),x5.error(D,"Failed to copy thread markdown")}finally{G()}})()}},{noun:"thread",verb:"analyze context",description:"Analyze context token usage",keywords:["tokens","usage","window","size","cost"],get status(){let F=B.widget.threadContext;if(!F)return{type:"disabled",reason:"No active thread"};let D=b$(F.observer.agentMode);if(!T0A.includes(D))return{type:"disabled",reason:"Context analysis is not supported for this mode"};return{type:"enabled"}},run:(F,D,G)=>{let V=$()?.client.getThreadId();if(!V)return;let U=60,K=1;F.push(new _A({header:"Context Usage Analysis",minWidth:U,maxWidth:U,chromePadding:H0.symmetric(K,0),footer:[{keys:["Esc"],label:"close"}],onDismiss:G,child:new wt({embedded:!0,contentWidth:U-2*K,thread:null,dtwAnalyze:(E)=>{return B.widget.analyzeContextForThread(V,E)},onDismiss:G})}))}},{noun:"skills",verb:"list",description:"List available skills for this thread",keywords:["agent","show"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:(F,D,G)=>{let V=$()?.client.getThreadId();if(!V)return;F.push(new G81({listSkills:(U)=>B.widget.listSkillsForThread(V,U),onDismiss:G,cwd:Q.workspaceRoot}))}},{noun:"thread",verb:"new",description:"Start new thread",keywords:["create","start","reset","clear"],sortBoost:101,get status(){if(B.isEditorUploadLocked)return{type:"disabled",reason:"Prompt editor is not available"};return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"Already on a new thread"}},run:(F,D)=>{if(B.isEditorUploadLocked)return;BA.maybeInvoke(D,new Dt)}},{noun:"thread",verb:"open in browser",description:"Open thread in browser",keywords:["web","view","launch"],get status(){return B.widget.threadContext?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:async(F,D,G)=>{let V=J();if(!V)return;try{await $6(D,V)}finally{G()}}},d4A({sendFeedbackReport:(F)=>{return this.widget.sendFeedbackReport(F)}},$),i4A({setVisibility:(F,D)=>this.widget.setThreadVisibility(F,D),setDraftVisibility:(F)=>this.setEmptyThreadVisibility(F)},$),Q4A({archiveThread:(F)=>this.widget.archiveThread(F)},$),h4A($),j4A({configService:this.widget.configService,addLabel:(F,D)=>this.widget.addThreadLabel(F,D)},$),_4A({configService:this.widget.configService,removeLabel:(F,D)=>this.widget.removeThreadLabel(F,D)},$)].map((F)=>A.register(F));return()=>{for(let F of X)F()}}currentCommandAgentMode(){return this.widget.threadContext?.observer.agentMode??this.agentMode}currentThreadSettings(){return this.widget.threadContext?.observer.threadSettings().getValue()??this.widget.draftThreadSettings}supportsSpeedCommand(A){return zJ(A)!==void 0}isFastSpeedEnabled(A){let Q=this.currentThreadSettings(),B=zJ(A);return B!==void 0&&Q[B]==="fast"}speedCommandStatus(A){let Q=this.currentCommandAgentMode();if(!this.supportsSpeedCommand(Q))return{type:"hidden"};let B=this.isFastSpeedEnabled(Q);if(A==="fast"&&B)return{type:"disabled",reason:"Already using fast speed"};if(A==="normal"&&!B)return{type:"disabled",reason:"Already using normal speed"};return{type:"enabled"}}setEmptyThreadVisibility(A){this.setState(()=>{this.emptyThreadVisibility=A})}updateThreadSettings(A){let Q=this.widget.threadContext;if(Q){let B=Q.observer.threadSettings().getValue()??{},$=A(B);return Q.client.sendClientUpdateThreadSettings($),this.widget.updateDraftThreadSettings(()=>$),"handled"}return this.widget.updateDraftThreadSettings(A),"handled"}setSpeed(A){let Q=this.currentCommandAgentMode(),B=zJ(Q);if(B===void 0)return"ignored";let $=A==="normal"?"standard":"fast",J=this.updateThreadSettings((Y)=>{return{...Y,[B]:$}});if(this.persistSpeedForMode(Q,$),A==="fast")this.showFastModeToast(Q);return J}showFastModeToast(A){let Q=x5.maybeOf(this.context);if(!Q)return;if(this.fastModeToastID!==null)Q.dismiss(this.fastModeToastID);this.fastModeToastID=Q.show(`↯${A} costs 2.5x the standard rate for this mode`,"warning",Xs5)}dismissFastModeToast(){if(this.fastModeToastID===null)return;x5.maybeOf(this.context)?.dismiss(this.fastModeToastID),this.fastModeToastID=null}toggleWorkDetails(){return this.expansion.toggle(!1),"handled"}persistReasoningEffortForMode(A,Q){oQ((B)=>({...B,lastReasoningEffortByMode:{...B.lastReasoningEffortByMode,[A]:Q}}))}persistSpeedForMode(A,Q){oQ((B)=>({...B,lastSpeedByMode:{...B.lastSpeedByMode,[A]:Q}}))}applyStickySpeedForMode(A,Q){let B=zJ(Q),$=oD0(y2.of(this.context),Q);if(B===void 0||$===void 0)return A;return{...A,[B]:$}}toggleReasoningEffort(){let A=this.currentCommandAgentMode(),Q=u$(A);if(!Q)return"ignored";return this.updateThreadSettings((B)=>{let $=r11(A,B,this.configSettingsForReasoning),J=M80(Q,$);return this.persistReasoningEffortForMode(A,J),{...B,"reasoning.effort":J}})}onPromptSubmitted=(A)=>{this.widget.history.add(A,K81.cwd()),this.resetHistory()};handleEditorUploadLockChange=(A)=>{if(this.isEditorUploadLocked===A)return;this.setState(()=>{if(this.isEditorUploadLocked=A,A)this.promptHistoryPicker.disable()})};restorePromptHistory(A){if(this.isEditorUploadLocked)return;this.resetHistory(),this.widget.editorController.text=A,this.widget.editorController.moveCursorToEnd()}handlePromptHistorySelection=(A)=>{this.promptHistoryPicker.disable(),this.restorePromptHistory(A)};navigateHistoryPrevious=()=>{if(this.isEditorUploadLocked)return"handled";let A=this.widget.history.previous();if(A!==null){if(this.historyIndex===-1)this.historyDraft=this.widget.editorController.text;this.historyIndex++,this.widget.editorController.text=A,this.widget.editorController.moveCursorToStart()}return"handled"};navigateHistoryNext=()=>{if(this.isEditorUploadLocked)return"handled";let A=this.widget.history.next();if(A!==null)this.historyIndex--,this.widget.editorController.text=A,this.widget.editorController.moveCursorToEnd();else if(this.historyIndex>-1)this.historyIndex=-1,this.widget.editorController.text=this.historyDraft||"",this.widget.editorController.moveCursorToEnd(),this.historyDraft=null;return"handled"};resetHistory(){this.widget.history.reset(),this.historyIndex=-1,this.historyDraft=null}setAgentMode=(A)=>{if(this.widget.threadContext)return;if(A!==this.agentMode)this.dismissFastModeToast();this.setState(()=>{this.agentMode=A}),this.widget.updateDraftThreadSettings((Q)=>{let B=o11(y2.of(this.context),A),$={...Q};delete $["reasoning.effort"];let J=B??r11(A,$,this.configSettingsForReasoning);if(J===void 0){let Y={...Q};return delete Y["reasoning.effort"],this.applyStickySpeedForMode(Y,A)}return this.applyStickySpeedForMode({...Q,"reasoning.effort":J},A)}),oQ((Q)=>({...Q,agentMode:A}))};buildActions(){let A=new G4(()=>{if(this.isEditorUploadLocked)return"handled";return this.promptHistoryPicker.enable(),"handled"}),Q=new G4(()=>{return this.navigateHistoryPrevious()}),B=new G4(()=>{return this.navigateHistoryNext()}),$=new G4((Z)=>{return this.setAgentMode(Z.mode),"handled"}),J=new G4(()=>{return this.toggleReasoningEffort()}),Y=new G4(()=>{return this.toggleWorkDetails()});return new Map([[cW,A],[cV0,B],[dV0,Q],[k51,$],[Ht,J],[gV0,Y]])}build(A){let Q=this.widget.threadContext,B=y2.of(A),$=Ds5(B.workspaceRoot,this.currentGitBranch),Y=[Q?new r31({editorController:this.widget.editorController,copyOnSelectEnabled:this.copyOnSelectEnabled,observingClient:{client:Q.client,observer:Q.observer},hints:this.widget.hints,ideStatus:this.widget.ideStatus,onPromptSubmitted:this.onPromptSubmitted,onEditorUploadLockChange:this.handleEditorUploadLockChange,editorUploadLocked:this.isEditorUploadLocked,environmentFallback:this.useLocalEnvironmentFallbackForActiveThread?$:null}):new F81({agentMode:this.agentMode,threadSettings:this.widget.draftThreadSettings,configSettings:this.configSettingsForReasoning,editorController:this.widget.editorController,visibility:this.emptyThreadVisibility,onNewThread:this.widget.onNewThread,onAgentModeChange:this.setAgentMode,onEditorUploadLockChange:this.handleEditorUploadLockChange,previousThreadIDForReference:this.previousThreadIDForReference,hints:this.widget.hints,ideStatus:this.widget.ideStatus,configService:this.widget.configService,environment:$,statusMessage:this.statusMessage})];if(!this.isEditorUploadLocked&&this.promptHistoryPicker.isEnabled())Y.push(new VU0({entries:this.widget.history.getAll(),currentCwd:K81.cwd(),onAccept:this.handlePromptHistorySelection,onDismiss:this.promptHistoryPicker.disable}));let Z=new Map([[v1.ctrl("r"),new cW],[v1.alt("t"),new gV0]]);if(!this.isEditorUploadLocked&&this.promptHistoryPicker.isEnabled())Z.set(v1.ctrl("o"),new cW);else if(!this.isEditorUploadLocked)Z.set(v1.ctrl("n"),new cV0),Z.set(v1.ctrl("p"),new dV0);return new BA({actions:this.buildActions(),child:new p5({debugLabel:"NeoThreadShortcuts",shortcuts:Z,child:new QK({controller:this.expansion,child:new t4({children:Y})})})})}subscribeToCopyOnSelectEnabled(){this.copyOnSelectSubscription?.unsubscribe(),this.copyOnSelectSubscription=this.widget.configService.config.subscribe((A)=>{let Q=A.settings["terminal.copyOnSelect"]??!0,B=A.settings["internal.model"],$=this.configSettingsForReasoning["internal.model"]!==B;if(B===void 0)this.configSettingsForReasoning={};else this.configSettingsForReasoning={"internal.model":B};if(this.copyOnSelectEnabled===Q&&!$)return;if(this.copyOnSelectEnabled=Q,this.mounted)this.setState()})}}C3();class W81 extends v0{toolboxes;onDismiss;constructor(A){super();this.toolboxes=A.toolboxes,this.onDismiss=A.onDismiss}createState(){return new o4A}}class o4A extends k0{toolboxes=new u8(this,[]);initState(){this.toolboxes.subscribe(this.widget.toolboxes)}didUpdateWidget(A){if(A.toolboxes!==this.widget.toolboxes)this.toolboxes.subscribe(this.widget.toolboxes)}build(A){return new r4A({toolboxes:this.toolboxes.getValue(),onDismiss:this.widget.onDismiss})}}class r4A extends v0{toolboxes;onDismiss;constructor(A){super();this.toolboxes=A.toolboxes,this.onDismiss=A.onDismiss}createState(){return new s4A}}class s4A extends k0{scrollController=new aA;canScroll=!1;initState(){this.scrollController.followMode=!1,this.scrollController.jumpTo(0),this.scrollController.addListener(this.updateCanScroll)}dispose(){this.scrollController.removeListener(this.updateCanScroll),this.scrollController.dispose()}updateCanScroll=()=>{let A=this.scrollController.maxScrollExtent>0;if(A===this.canScroll)return;this.setState(()=>{this.canScroll=A})};build(A){return new _A({header:"Toolboxes",onDismiss:this.widget.onDismiss,minWidth:80,maxWidth:120,maxHeight:40,autofocus:!1,footer:Gs5(this.canScroll),child:new eY({controller:this.scrollController,child:Vs5(A,this.widget.toolboxes)})})}}function Gs5(A){let Q=[{keys:["Esc"],label:"close"}];if(A)Q.push({keys:["↑↓","j/k"],label:"scroll"});return Q}function Vs5(A,Q){let B=Us5(A,Q);return new b0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new l({text:new M("",void 0,B),selectable:!0})]})}function Us5(A,Q){let B=_0.of(A),{colors:$}=B,J=new y({color:$.foreground,dim:!0}),Y=new y({color:$.foreground,bold:!0});if(Q.length===0)return[new M("No toolboxes found.",J)];let Z=[];for(let X of Q){let F=X.tools.length,D=X.tools.filter((G)=>G.status==="registered").length;if(X.discovering){let G=X.tools.filter((V)=>V.status!=="pending").length;Z.push(new M(X.path,Y)),Z.push(new M(` discovering ${G}/${F}...
|
|
5386
5386
|
`,J))}else if(Z.push(new M(X.path,Y)),F>0)Z.push(new M(` ${D}/${F} ${E4(F,"tool")}
|
|
5387
5387
|
`,J));else Z.push(new M(`
|
|
5388
5388
|
`));if(X.tools.length===0)Z.push(new M(` └─ No tools available
|
|
@@ -5397,7 +5397,7 @@ Ctrl-X, Y, Z to unlock`;if(E){let Q0=G.text.replace(/`([^`]+)`/g,"$1")+`
|
|
|
5397
5397
|
*/var Mb=9000000000000000,Jw=1e9,w81="0123456789abcdef",zU0="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",qU0="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",C81={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Mb,maxE:Mb,crypto:!1},zAA,ZH,dA=!0,IU0="[DecimalError] ",$w=IU0+"Invalid argument: ",qAA=IU0+"Precision limit exceeded",NAA=IU0+"crypto unavailable",IAA="[object Decimal]",$B=Math.floor,x9=Math.pow,fs5=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,bs5=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,us5=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,wAA=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,$G=1e7,TA=7,hs5=9007199254740991,gs5=zU0.length-1,M81=qU0.length-1,m1={toStringTag:IAA};m1.absoluteValue=m1.abs=function(){var A=new this.constructor(this);if(A.s<0)A.s=1;return DA(A)};m1.ceil=function(){return DA(new this.constructor(this),this.e+1,2)};m1.clampedTo=m1.clamp=function(A,Q){var B,$=this,J=$.constructor;if(A=new J(A),Q=new J(Q),!A.s||!Q.s)return new J(NaN);if(A.gt(Q))throw Error($w+Q);return B=$.cmp(A),B<0?A:$.cmp(Q)>0?Q:new J($)};m1.comparedTo=m1.cmp=function(A){var Q,B,$,J,Y=this,Z=Y.d,X=(A=new Y.constructor(A)).d,F=Y.s,D=A.s;if(!Z||!X)return!F||!D?NaN:F!==D?F:Z===X?0:!Z^F<0?1:-1;if(!Z[0]||!X[0])return Z[0]?F:X[0]?-D:0;if(F!==D)return F;if(Y.e!==A.e)return Y.e>A.e^F<0?1:-1;$=Z.length,J=X.length;for(Q=0,B=$<J?$:J;Q<B;++Q)if(Z[Q]!==X[Q])return Z[Q]>X[Q]^F<0?1:-1;return $===J?0:$>J^F<0?1:-1};m1.cosine=m1.cos=function(){var A,Q,B=this,$=B.constructor;if(!B.d)return new $(NaN);if(!B.d[0])return new $(1);return A=$.precision,Q=$.rounding,$.precision=A+Math.max(B.e,B.sd())+TA,$.rounding=1,B=ms5($,jAA($,B)),$.precision=A,$.rounding=Q,DA(ZH==2||ZH==3?B.neg():B,A,Q,!0)};m1.cubeRoot=m1.cbrt=function(){var A,Q,B,$,J,Y,Z,X,F,D,G=this,V=G.constructor;if(!G.isFinite()||G.isZero())return new V(G);if(dA=!1,Y=G.s*x9(G.s*G,0.3333333333333333),!Y||Math.abs(Y)==1/0){if(B=$Q(G.d),A=G.e,Y=(A-B.length+1)%3)B+=Y==1||Y==-2?"0":"00";if(Y=x9(B,0.3333333333333333),A=$B((A+1)/3)-(A%3==(A<0?-1:2)),Y==1/0)B="5e"+A;else B=Y.toExponential(),B=B.slice(0,B.indexOf("e")+1)+A;$=new V(B),$.s=G.s}else $=new V(Y.toString());Z=(A=V.precision)+3;for(;;)if(X=$,F=X.times(X).times(X),D=F.plus(G),$=_3(D.plus(G).times(X),D.plus(F),Z+2,1),$Q(X.d).slice(0,Z)===(B=$Q($.d)).slice(0,Z))if(B=B.slice(Z-3,Z+1),B=="9999"||!J&&B=="4999"){if(!J){if(DA(X,A+1,0),X.times(X).times(X).eq(G)){$=X;break}}Z+=4,J=1}else{if(!+B||!+B.slice(1)&&B.charAt(0)=="5")DA($,A+1,1),Q=!$.times($).times($).eq(G);break}return dA=!0,DA($,A,V.rounding,Q)};m1.decimalPlaces=m1.dp=function(){var A,Q=this.d,B=NaN;if(Q){if(A=Q.length-1,B=(A-$B(this.e/TA))*TA,A=Q[A],A)for(;A%10==0;A/=10)B--;if(B<0)B=0}return B};m1.dividedBy=m1.div=function(A){return _3(this,new this.constructor(A))};m1.dividedToIntegerBy=m1.divToInt=function(A){var Q=this,B=Q.constructor;return DA(_3(Q,new B(A),0,1,1),B.precision,B.rounding)};m1.equals=m1.eq=function(A){return this.cmp(A)===0};m1.floor=function(){return DA(new this.constructor(this),this.e+1,3)};m1.greaterThan=m1.gt=function(A){return this.cmp(A)>0};m1.greaterThanOrEqualTo=m1.gte=function(A){var Q=this.cmp(A);return Q==1||Q===0};m1.hyperbolicCosine=m1.cosh=function(){var A,Q,B,$,J,Y=this,Z=Y.constructor,X=new Z(1);if(!Y.isFinite())return new Z(Y.s?1/0:NaN);if(Y.isZero())return X;if(B=Z.precision,$=Z.rounding,Z.precision=B+Math.max(Y.e,Y.sd())+4,Z.rounding=1,J=Y.d.length,J<32)A=Math.ceil(J/3),Q=(1/CU0(4,A)).toString();else A=16,Q="2.3283064365386962890625e-10";Y=Lb(Z,1,Y.times(Q),new Z(1),!0);var F,D=A,G=new Z(8);for(;D--;)F=Y.times(Y),Y=X.minus(F.times(G.minus(F.times(G))));return DA(Y,Z.precision=B,Z.rounding=$,!0)};m1.hyperbolicSine=m1.sinh=function(){var A,Q,B,$,J=this,Y=J.constructor;if(!J.isFinite()||J.isZero())return new Y(J);if(Q=Y.precision,B=Y.rounding,Y.precision=Q+Math.max(J.e,J.sd())+4,Y.rounding=1,$=J.d.length,$<3)J=Lb(Y,2,J,J,!0);else{A=1.4*Math.sqrt($),A=A>16?16:A|0,J=J.times(1/CU0(5,A)),J=Lb(Y,2,J,J,!0);var Z,X=new Y(5),F=new Y(16),D=new Y(20);for(;A--;)Z=J.times(J),J=J.times(X.plus(Z.times(F.times(Z).plus(D))))}return Y.precision=Q,Y.rounding=B,DA(J,Q,B,!0)};m1.hyperbolicTangent=m1.tanh=function(){var A,Q,B=this,$=B.constructor;if(!B.isFinite())return new $(B.s);if(B.isZero())return new $(B);return A=$.precision,Q=$.rounding,$.precision=A+7,$.rounding=1,_3(B.sinh(),B.cosh(),$.precision=A,$.rounding=Q)};m1.inverseCosine=m1.acos=function(){var A=this,Q=A.constructor,B=A.abs().cmp(1),$=Q.precision,J=Q.rounding;if(B!==-1)return B===0?A.isNeg()?$K(Q,$,J):new Q(0):new Q(NaN);if(A.isZero())return $K(Q,$+4,J).times(0.5);return Q.precision=$+6,Q.rounding=1,A=new Q(1).minus(A).div(A.plus(1)).sqrt().atan(),Q.precision=$,Q.rounding=J,A.times(2)};m1.inverseHyperbolicCosine=m1.acosh=function(){var A,Q,B=this,$=B.constructor;if(B.lte(1))return new $(B.eq(1)?0:NaN);if(!B.isFinite())return new $(B);return A=$.precision,Q=$.rounding,$.precision=A+Math.max(Math.abs(B.e),B.sd())+4,$.rounding=1,dA=!1,B=B.times(B).minus(1).sqrt().plus(B),dA=!0,$.precision=A,$.rounding=Q,B.ln()};m1.inverseHyperbolicSine=m1.asinh=function(){var A,Q,B=this,$=B.constructor;if(!B.isFinite()||B.isZero())return new $(B);return A=$.precision,Q=$.rounding,$.precision=A+2*Math.max(Math.abs(B.e),B.sd())+6,$.rounding=1,dA=!1,B=B.times(B).plus(1).sqrt().plus(B),dA=!0,$.precision=A,$.rounding=Q,B.ln()};m1.inverseHyperbolicTangent=m1.atanh=function(){var A,Q,B,$,J=this,Y=J.constructor;if(!J.isFinite())return new Y(NaN);if(J.e>=0)return new Y(J.abs().eq(1)?J.s/0:J.isZero()?J:NaN);if(A=Y.precision,Q=Y.rounding,$=J.sd(),Math.max($,A)<2*-J.e-1)return DA(new Y(J),A,Q,!0);return Y.precision=B=$-J.e,J=_3(J.plus(1),new Y(1).minus(J),B+A,1),Y.precision=A+4,Y.rounding=1,J=J.ln(),Y.precision=A,Y.rounding=Q,J.times(0.5)};m1.inverseSine=m1.asin=function(){var A,Q,B,$,J=this,Y=J.constructor;if(J.isZero())return new Y(J);if(Q=J.abs().cmp(1),B=Y.precision,$=Y.rounding,Q!==-1){if(Q===0)return A=$K(Y,B+4,$).times(0.5),A.s=J.s,A;return new Y(NaN)}return Y.precision=B+6,Y.rounding=1,J=J.div(new Y(1).minus(J.times(J)).sqrt().plus(1)).atan(),Y.precision=B,Y.rounding=$,J.times(2)};m1.inverseTangent=m1.atan=function(){var A,Q,B,$,J,Y,Z,X,F,D=this,G=D.constructor,V=G.precision,U=G.rounding;if(!D.isFinite()){if(!D.s)return new G(NaN);if(V+4<=M81)return Z=$K(G,V+4,U).times(0.5),Z.s=D.s,Z}else if(D.isZero())return new G(D);else if(D.abs().eq(1)&&V+4<=M81)return Z=$K(G,V+4,U).times(0.25),Z.s=D.s,Z;G.precision=X=V+10,G.rounding=1,B=Math.min(28,X/TA+2|0);for(A=B;A;--A)D=D.div(D.times(D).plus(1).sqrt().plus(1));dA=!1,Q=Math.ceil(X/TA),$=1,F=D.times(D),Z=new G(D),J=D;for(;A!==-1;)if(J=J.times(F),Y=Z.minus(J.div($+=2)),J=J.times(F),Z=Y.plus(J.div($+=2)),Z.d[Q]!==void 0)for(A=Q;Z.d[A]===Y.d[A]&&A--;);if(B)Z=Z.times(2<<B-1);return dA=!0,DA(Z,G.precision=V,G.rounding=U,!0)};m1.isFinite=function(){return!!this.d};m1.isInteger=m1.isInt=function(){return!!this.d&&$B(this.e/TA)>this.d.length-2};m1.isNaN=function(){return!this.s};m1.isNegative=m1.isNeg=function(){return this.s<0};m1.isPositive=m1.isPos=function(){return this.s>0};m1.isZero=function(){return!!this.d&&this.d[0]===0};m1.lessThan=m1.lt=function(A){return this.cmp(A)<0};m1.lessThanOrEqualTo=m1.lte=function(A){return this.cmp(A)<1};m1.logarithm=m1.log=function(A){var Q,B,$,J,Y,Z,X,F,D=this,G=D.constructor,V=G.precision,U=G.rounding,K=5;if(A==null)A=new G(10),Q=!0;else{if(A=new G(A),B=A.d,A.s<0||!B||!B[0]||A.eq(1))return new G(NaN);Q=A.eq(10)}if(B=D.d,D.s<0||!B||!B[0]||D.eq(1))return new G(B&&!B[0]?-1/0:D.s!=1?NaN:B?0:1/0);if(Q)if(B.length>1)Y=!0;else{for(J=B[0];J%10===0;)J/=10;Y=J!==1}if(dA=!1,X=V+K,Z=Bw(D,X),$=Q?NU0(G,X+10):Bw(A,X),F=_3(Z,$,X,1),ft(F.d,J=V,U))do if(X+=10,Z=Bw(D,X),$=Q?NU0(G,X+10):Bw(A,X),F=_3(Z,$,X,1),!Y){if(+$Q(F.d).slice(J+1,J+15)+1==100000000000000)F=DA(F,V+1,0);break}while(ft(F.d,J+=10,U));return dA=!0,DA(F,V,U)};m1.minus=m1.sub=function(A){var Q,B,$,J,Y,Z,X,F,D,G,V,U,K=this,E=K.constructor;if(A=new E(A),!K.d||!A.d){if(!K.s||!A.s)A=new E(NaN);else if(K.d)A.s=-A.s;else A=new E(A.d||K.s!==A.s?K:NaN);return A}if(K.s!=A.s)return A.s=-A.s,K.plus(A);if(D=K.d,U=A.d,X=E.precision,F=E.rounding,!D[0]||!U[0]){if(U[0])A.s=-A.s;else if(D[0])A=new E(K);else return new E(F===3?-0:0);return dA?DA(A,X,F):A}if(B=$B(A.e/TA),G=$B(K.e/TA),D=D.slice(),Y=G-B,Y){if(V=Y<0,V)Q=D,Y=-Y,Z=U.length;else Q=U,B=G,Z=D.length;if($=Math.max(Math.ceil(X/TA),Z)+2,Y>$)Y=$,Q.length=1;Q.reverse();for($=Y;$--;)Q.push(0);Q.reverse()}else{if($=D.length,Z=U.length,V=$<Z,V)Z=$;for($=0;$<Z;$++)if(D[$]!=U[$]){V=D[$]<U[$];break}Y=0}if(V)Q=D,D=U,U=Q,A.s=-A.s;Z=D.length;for($=U.length-Z;$>0;--$)D[Z++]=0;for($=U.length;$>Y;){if(D[--$]<U[$]){for(J=$;J&&D[--J]===0;)D[J]=$G-1;--D[J],D[$]+=$G}D[$]-=U[$]}for(;D[--Z]===0;)D.pop();for(;D[0]===0;D.shift())--B;if(!D[0])return new E(F===3?-0:0);return A.d=D,A.e=wU0(D,B),dA?DA(A,X,F):A};m1.modulo=m1.mod=function(A){var Q,B=this,$=B.constructor;if(A=new $(A),!B.d||!A.s||A.d&&!A.d[0])return new $(NaN);if(!A.d||B.d&&!B.d[0])return DA(new $(B),$.precision,$.rounding);if(dA=!1,$.modulo==9)Q=_3(B,A.abs(),0,3,1),Q.s*=A.s;else Q=_3(B,A,0,$.modulo,1);return Q=Q.times(A),dA=!0,B.minus(Q)};m1.naturalExponential=m1.exp=function(){return L81(this)};m1.naturalLogarithm=m1.ln=function(){return Bw(this)};m1.negated=m1.neg=function(){var A=new this.constructor(this);return A.s=-A.s,DA(A)};m1.plus=m1.add=function(A){var Q,B,$,J,Y,Z,X,F,D,G,V=this,U=V.constructor;if(A=new U(A),!V.d||!A.d){if(!V.s||!A.s)A=new U(NaN);else if(!V.d)A=new U(A.d||V.s===A.s?V:NaN);return A}if(V.s!=A.s)return A.s=-A.s,V.minus(A);if(D=V.d,G=A.d,X=U.precision,F=U.rounding,!D[0]||!G[0]){if(!G[0])A=new U(V);return dA?DA(A,X,F):A}if(Y=$B(V.e/TA),$=$B(A.e/TA),D=D.slice(),J=Y-$,J){if(J<0)B=D,J=-J,Z=G.length;else B=G,$=Y,Z=D.length;if(Y=Math.ceil(X/TA),Z=Y>Z?Y+1:Z+1,J>Z)J=Z,B.length=1;B.reverse();for(;J--;)B.push(0);B.reverse()}if(Z=D.length,J=G.length,Z-J<0)J=Z,B=G,G=D,D=B;for(Q=0;J;)Q=(D[--J]=D[J]+G[J]+Q)/$G|0,D[J]%=$G;if(Q)D.unshift(Q),++$;for(Z=D.length;D[--Z]==0;)D.pop();return A.d=D,A.e=wU0(D,$),dA?DA(A,X,F):A};m1.precision=m1.sd=function(A){var Q,B=this;if(A!==void 0&&A!==!!A&&A!==1&&A!==0)throw Error($w+A);if(B.d){if(Q=CAA(B.d),A&&B.e+1>Q)Q=B.e+1}else Q=NaN;return Q};m1.round=function(){var A=this,Q=A.constructor;return DA(new Q(A),A.e+1,Q.rounding)};m1.sine=m1.sin=function(){var A,Q,B=this,$=B.constructor;if(!B.isFinite())return new $(NaN);if(B.isZero())return new $(B);return A=$.precision,Q=$.rounding,$.precision=A+Math.max(B.e,B.sd())+TA,$.rounding=1,B=ds5($,jAA($,B)),$.precision=A,$.rounding=Q,DA(ZH>2?B.neg():B,A,Q,!0)};m1.squareRoot=m1.sqrt=function(){var A,Q,B,$,J,Y,Z=this,X=Z.d,F=Z.e,D=Z.s,G=Z.constructor;if(D!==1||!X||!X[0])return new G(!D||D<0&&(!X||X[0])?NaN:X?Z:1/0);if(dA=!1,D=Math.sqrt(+Z),D==0||D==1/0){if(Q=$Q(X),(Q.length+F)%2==0)Q+="0";if(D=Math.sqrt(Q),F=$B((F+1)/2)-(F<0||F%2),D==1/0)Q="5e"+F;else Q=D.toExponential(),Q=Q.slice(0,Q.indexOf("e")+1)+F;$=new G(Q)}else $=new G(D.toString());B=(F=G.precision)+3;for(;;)if(Y=$,$=Y.plus(_3(Z,Y,B+2,1)).times(0.5),$Q(Y.d).slice(0,B)===(Q=$Q($.d)).slice(0,B))if(Q=Q.slice(B-3,B+1),Q=="9999"||!J&&Q=="4999"){if(!J){if(DA(Y,F+1,0),Y.times(Y).eq(Z)){$=Y;break}}B+=4,J=1}else{if(!+Q||!+Q.slice(1)&&Q.charAt(0)=="5")DA($,F+1,1),A=!$.times($).eq(Z);break}return dA=!0,DA($,F,G.rounding,A)};m1.tangent=m1.tan=function(){var A,Q,B=this,$=B.constructor;if(!B.isFinite())return new $(NaN);if(B.isZero())return new $(B);return A=$.precision,Q=$.rounding,$.precision=A+10,$.rounding=1,B=B.sin(),B.s=1,B=_3(B,new $(1).minus(B.times(B)).sqrt(),A+10,0),$.precision=A,$.rounding=Q,DA(ZH==2||ZH==4?B.neg():B,A,Q,!0)};m1.times=m1.mul=function(A){var Q,B,$,J,Y,Z,X,F,D,G=this,V=G.constructor,U=G.d,K=(A=new V(A)).d;if(A.s*=G.s,!U||!U[0]||!K||!K[0])return new V(!A.s||U&&!U[0]&&!K||K&&!K[0]&&!U?NaN:!U||!K?A.s/0:A.s*0);if(B=$B(G.e/TA)+$B(A.e/TA),F=U.length,D=K.length,F<D)Y=U,U=K,K=Y,Z=F,F=D,D=Z;Y=[],Z=F+D;for($=Z;$--;)Y.push(0);for($=D;--$>=0;){Q=0;for(J=F+$;J>$;)X=Y[J]+K[$]*U[J-$-1]+Q,Y[J--]=X%$G|0,Q=X/$G|0;Y[J]=(Y[J]+Q)%$G|0}for(;!Y[--Z];)Y.pop();if(Q)++B;else Y.shift();return A.d=Y,A.e=wU0(Y,B),dA?DA(A,V.precision,V.rounding):A};m1.toBinary=function(A,Q){return O81(this,2,A,Q)};m1.toDecimalPlaces=m1.toDP=function(A,Q){var B=this,$=B.constructor;if(B=new $(B),A===void 0)return B;if(LJ(A,0,Jw),Q===void 0)Q=$.rounding;else LJ(Q,0,8);return DA(B,A+B.e+1,Q)};m1.toExponential=function(A,Q){var B,$=this,J=$.constructor;if(A===void 0)B=JK($,!0);else{if(LJ(A,0,Jw),Q===void 0)Q=J.rounding;else LJ(Q,0,8);$=DA(new J($),A+1,Q),B=JK($,!0,A+1)}return $.isNeg()&&!$.isZero()?"-"+B:B};m1.toFixed=function(A,Q){var B,$,J=this,Y=J.constructor;if(A===void 0)B=JK(J);else{if(LJ(A,0,Jw),Q===void 0)Q=Y.rounding;else LJ(Q,0,8);$=DA(new Y(J),A+J.e+1,Q),B=JK($,!1,A+$.e+1)}return J.isNeg()&&!J.isZero()?"-"+B:B};m1.toFraction=function(A){var Q,B,$,J,Y,Z,X,F,D,G,V,U,K=this,E=K.d,W=K.constructor;if(!E)return new W(K);if(D=B=new W(1),$=F=new W(0),Q=new W($),Y=Q.e=CAA(E)-K.e-1,Z=Y%TA,Q.d[0]=x9(10,Z<0?TA+Z:Z),A==null)A=Y>0?Q:D;else{if(X=new W(A),!X.isInt()||X.lt(D))throw Error($w+X);A=X.gt(Q)?Y>0?Q:D:X}dA=!1,X=new W($Q(E)),G=W.precision,W.precision=Y=E.length*TA*2;for(;;){if(V=_3(X,Q,0,1,1),J=B.plus(V.times($)),J.cmp(A)==1)break;B=$,$=J,J=D,D=F.plus(V.times(J)),F=J,J=Q,Q=X.minus(V.times(J)),X=J}return J=_3(A.minus(B),$,0,1,1),F=F.plus(J.times(D)),B=B.plus(J.times($)),F.s=D.s=K.s,U=_3(D,$,Y,1).minus(K).abs().cmp(_3(F,B,Y,1).minus(K).abs())<1?[D,$]:[F,B],W.precision=G,dA=!0,U};m1.toHexadecimal=m1.toHex=function(A,Q){return O81(this,16,A,Q)};m1.toNearest=function(A,Q){var B=this,$=B.constructor;if(B=new $(B),A==null){if(!B.d)return B;A=new $(1),Q=$.rounding}else{if(A=new $(A),Q===void 0)Q=$.rounding;else LJ(Q,0,8);if(!B.d)return A.s?B:A;if(!A.d){if(A.s)A.s=B.s;return A}}if(A.d[0])dA=!1,B=_3(B,A,0,Q,1).times(A),dA=!0,DA(B);else A.s=B.s,B=A;return B};m1.toNumber=function(){return+this};m1.toOctal=function(A,Q){return O81(this,8,A,Q)};m1.toPower=m1.pow=function(A){var Q,B,$,J,Y,Z,X=this,F=X.constructor,D=+(A=new F(A));if(!X.d||!A.d||!X.d[0]||!A.d[0])return new F(x9(+X,D));if(X=new F(X),X.eq(1))return X;if($=F.precision,Y=F.rounding,A.eq(1))return DA(X,$,Y);if(Q=$B(A.e/TA),Q>=A.d.length-1&&(B=D<0?-D:D)<=hs5)return J=MAA(F,X,B,$),A.s<0?new F(1).div(J):DA(J,$,Y);if(Z=X.s,Z<0){if(Q<A.d.length-1)return new F(NaN);if((A.d[Q]&1)==0)Z=1;if(X.e==0&&X.d[0]==1&&X.d.length==1)return X.s=Z,X}if(B=x9(+X,D),Q=B==0||!isFinite(B)?$B(D*(Math.log("0."+$Q(X.d))/Math.LN10+X.e+1)):new F(B+"").e,Q>F.maxE+1||Q<F.minE-1)return new F(Q>0?Z/0:0);if(dA=!1,F.rounding=X.s=1,B=Math.min(12,(Q+"").length),J=L81(A.times(Bw(X,$+B)),$),J.d){if(J=DA(J,$+5,1),ft(J.d,$,Y)){if(Q=$+10,J=DA(L81(A.times(Bw(X,Q+B)),Q),Q+5,1),+$Q(J.d).slice($+1,$+15)+1==100000000000000)J=DA(J,$+1,0)}}return J.s=Z,dA=!0,F.rounding=Y,DA(J,$,Y)};m1.toPrecision=function(A,Q){var B,$=this,J=$.constructor;if(A===void 0)B=JK($,$.e<=J.toExpNeg||$.e>=J.toExpPos);else{if(LJ(A,1,Jw),Q===void 0)Q=J.rounding;else LJ(Q,0,8);$=DA(new J($),A,Q),B=JK($,A<=$.e||$.e<=J.toExpNeg,A)}return $.isNeg()&&!$.isZero()?"-"+B:B};m1.toSignificantDigits=m1.toSD=function(A,Q){var B=this,$=B.constructor;if(A===void 0)A=$.precision,Q=$.rounding;else if(LJ(A,1,Jw),Q===void 0)Q=$.rounding;else LJ(Q,0,8);return DA(new $(B),A,Q)};m1.toString=function(){var A=this,Q=A.constructor,B=JK(A,A.e<=Q.toExpNeg||A.e>=Q.toExpPos);return A.isNeg()&&!A.isZero()?"-"+B:B};m1.truncated=m1.trunc=function(){return DA(new this.constructor(this),this.e+1,1)};m1.valueOf=m1.toJSON=function(){var A=this,Q=A.constructor,B=JK(A,A.e<=Q.toExpNeg||A.e>=Q.toExpPos);return A.isNeg()?"-"+B:B};function $Q(A){var Q,B,$,J=A.length-1,Y="",Z=A[0];if(J>0){Y+=Z;for(Q=1;Q<J;Q++){if($=A[Q]+"",B=TA-$.length,B)Y+=Qw(B);Y+=$}if(Z=A[Q],$=Z+"",B=TA-$.length,B)Y+=Qw(B)}else if(Z===0)return"0";for(;Z%10===0;)Z/=10;return Y+Z}function LJ(A,Q,B){if(A!==~~A||A<Q||A>B)throw Error($w+A)}function ft(A,Q,B,$){var J,Y,Z,X;for(Y=A[0];Y>=10;Y/=10)--Q;if(--Q<0)Q+=TA,J=0;else J=Math.ceil((Q+1)/TA),Q%=TA;if(Y=x9(10,TA-Q),X=A[J]%Y|0,$==null)if(Q<3){if(Q==0)X=X/100|0;else if(Q==1)X=X/10|0;Z=B<4&&X==99999||B>3&&X==49999||X==50000||X==0}else Z=(B<4&&X+1==Y||B>3&&X+1==Y/2)&&(A[J+1]/Y/100|0)==x9(10,Q-2)-1||(X==Y/2||X==0)&&(A[J+1]/Y/100|0)==0;else if(Q<4){if(Q==0)X=X/1000|0;else if(Q==1)X=X/100|0;else if(Q==2)X=X/10|0;Z=($||B<4)&&X==9999||!$&&B>3&&X==4999}else Z=(($||B<4)&&X+1==Y||!$&&B>3&&X+1==Y/2)&&(A[J+1]/Y/1000|0)==x9(10,Q-3)-1;return Z}function WU0(A,Q,B){var $,J=[0],Y,Z=0,X=A.length;for(;Z<X;){for(Y=J.length;Y--;)J[Y]*=Q;J[0]+=w81.indexOf(A.charAt(Z++));for($=0;$<J.length;$++)if(J[$]>B-1){if(J[$+1]===void 0)J[$+1]=0;J[$+1]+=J[$]/B|0,J[$]%=B}}return J.reverse()}function ms5(A,Q){var B,$,J;if(Q.isZero())return Q;if($=Q.d.length,$<32)B=Math.ceil($/3),J=(1/CU0(4,B)).toString();else B=16,J="2.3283064365386962890625e-10";A.precision+=B,Q=Lb(A,1,Q.times(J),new A(1));for(var Y=B;Y--;){var Z=Q.times(Q);Q=Z.times(Z).minus(Z).times(8).plus(1)}return A.precision-=B,Q}var _3=function(){function A($,J,Y){var Z,X=0,F=$.length;for($=$.slice();F--;)Z=$[F]*J+X,$[F]=Z%Y|0,X=Z/Y|0;if(X)$.unshift(X);return $}function Q($,J,Y,Z){var X,F;if(Y!=Z)F=Y>Z?1:-1;else for(X=F=0;X<Y;X++)if($[X]!=J[X]){F=$[X]>J[X]?1:-1;break}return F}function B($,J,Y,Z){var X=0;for(;Y--;)$[Y]-=X,X=$[Y]<J[Y]?1:0,$[Y]=X*Z+$[Y]-J[Y];for(;!$[0]&&$.length>1;)$.shift()}return function($,J,Y,Z,X,F){var D,G,V,U,K,E,W,H,z,q,N,I,w,C,O,_,T,S,b,h,x=$.constructor,v=$.s==J.s?1:-1,u=$.d,m=J.d;if(!u||!u[0]||!m||!m[0])return new x(!$.s||!J.s||(u?m&&u[0]==m[0]:!m)?NaN:u&&u[0]==0||!m?v*0:v/0);if(F)K=1,G=$.e-J.e;else F=$G,K=TA,G=$B($.e/K)-$B(J.e/K);b=m.length,T=u.length,z=new x(v),q=z.d=[];for(V=0;m[V]==(u[V]||0);V++);if(m[V]>(u[V]||0))G--;if(Y==null)C=Y=x.precision,Z=x.rounding;else if(X)C=Y+($.e-J.e)+1;else C=Y;if(C<0)q.push(1),E=!0;else{if(C=C/K+2|0,V=0,b==1){U=0,m=m[0],C++;for(;(V<T||U)&&C--;V++)O=U*F+(u[V]||0),q[V]=O/m|0,U=O%m|0;E=U||V<T}else{if(U=F/(m[0]+1)|0,U>1)m=A(m,U,F),u=A(u,U,F),b=m.length,T=u.length;_=b,N=u.slice(0,b),I=N.length;for(;I<b;)N[I++]=0;if(h=m.slice(),h.unshift(0),S=m[0],m[1]>=F/2)++S;do{if(U=0,D=Q(m,N,b,I),D<0){if(w=N[0],b!=I)w=w*F+(N[1]||0);if(U=w/S|0,U>1){if(U>=F)U=F-1;if(W=A(m,U,F),H=W.length,I=N.length,D=Q(W,N,H,I),D==1)U--,B(W,b<H?h:m,H,F)}else{if(U==0)D=U=1;W=m.slice()}if(H=W.length,H<I)W.unshift(0);if(B(N,W,I,F),D==-1){if(I=N.length,D=Q(m,N,b,I),D<1)U++,B(N,b<I?h:m,I,F)}I=N.length}else if(D===0)U++,N=[0];if(q[V++]=U,D&&N[0])N[I++]=u[_]||0;else N=[u[_]],I=1}while((_++<T||N[0]!==void 0)&&C--);E=N[0]!==void 0}if(!q[0])q.shift()}if(K==1)z.e=G,zAA=E;else{for(V=1,U=q[0];U>=10;U/=10)V++;z.e=V+G*K-1,DA(z,X?Y+z.e+1:Y,Z,E)}return z}}();function DA(A,Q,B,$){var J,Y,Z,X,F,D,G,V,U,K=A.constructor;A:if(Q!=null){if(V=A.d,!V)return A;for(J=1,X=V[0];X>=10;X/=10)J++;if(Y=Q-J,Y<0)Y+=TA,Z=Q,G=V[U=0],F=G/x9(10,J-Z-1)%10|0;else if(U=Math.ceil((Y+1)/TA),X=V.length,U>=X)if($){for(;X++<=U;)V.push(0);G=F=0,J=1,Y%=TA,Z=Y-TA+1}else break A;else{G=X=V[U];for(J=1;X>=10;X/=10)J++;Y%=TA,Z=Y-TA+J,F=Z<0?0:G/x9(10,J-Z-1)%10|0}if($=$||Q<0||V[U+1]!==void 0||(Z<0?G:G%x9(10,J-Z-1)),D=B<4?(F||$)&&(B==0||B==(A.s<0?3:2)):F>5||F==5&&(B==4||$||B==6&&(Y>0?Z>0?G/x9(10,J-Z):0:V[U-1])%10&1||B==(A.s<0?8:7)),Q<1||!V[0]){if(V.length=0,D)Q-=A.e+1,V[0]=x9(10,(TA-Q%TA)%TA),A.e=-Q||0;else V[0]=A.e=0;return A}if(Y==0)V.length=U,X=1,U--;else V.length=U+1,X=x9(10,TA-Y),V[U]=Z>0?(G/x9(10,J-Z)%x9(10,Z)|0)*X:0;if(D)for(;;)if(U==0){for(Y=1,Z=V[0];Z>=10;Z/=10)Y++;Z=V[0]+=X;for(X=1;Z>=10;Z/=10)X++;if(Y!=X){if(A.e++,V[0]==$G)V[0]=1}break}else{if(V[U]+=X,V[U]!=$G)break;V[U--]=0,X=1}for(Y=V.length;V[--Y]===0;)V.pop()}if(dA){if(A.e>K.maxE)A.d=null,A.e=NaN;else if(A.e<K.minE)A.e=0,A.d=[0]}return A}function JK(A,Q,B){if(!A.isFinite())return OAA(A);var $,J=A.e,Y=$Q(A.d),Z=Y.length;if(Q){if(B&&($=B-Z)>0)Y=Y.charAt(0)+"."+Y.slice(1)+Qw($);else if(Z>1)Y=Y.charAt(0)+"."+Y.slice(1);Y=Y+(A.e<0?"e":"e+")+A.e}else if(J<0){if(Y="0."+Qw(-J-1)+Y,B&&($=B-Z)>0)Y+=Qw($)}else if(J>=Z){if(Y+=Qw(J+1-Z),B&&($=B-J-1)>0)Y=Y+"."+Qw($)}else{if(($=J+1)<Z)Y=Y.slice(0,$)+"."+Y.slice($);if(B&&($=B-Z)>0){if(J+1===Z)Y+=".";Y+=Qw($)}}return Y}function wU0(A,Q){var B=A[0];for(Q*=TA;B>=10;B/=10)Q++;return Q}function NU0(A,Q,B){if(Q>gs5){if(dA=!0,B)A.precision=B;throw Error(qAA)}return DA(new A(zU0),Q,1,!0)}function $K(A,Q,B){if(Q>M81)throw Error(qAA);return DA(new A(qU0),Q,B,!0)}function CAA(A){var Q=A.length-1,B=Q*TA+1;if(Q=A[Q],Q){for(;Q%10==0;Q/=10)B--;for(Q=A[0];Q>=10;Q/=10)B++}return B}function Qw(A){var Q="";for(;A--;)Q+="0";return Q}function MAA(A,Q,B,$){var J,Y=new A(1),Z=Math.ceil($/TA+4);dA=!1;for(;;){if(B%2){if(Y=Y.times(Q),WAA(Y.d,Z))J=!0}if(B=$B(B/2),B===0){if(B=Y.d.length-1,J&&Y.d[B]===0)++Y.d[B];break}Q=Q.times(Q),WAA(Q.d,Z)}return dA=!0,Y}function EAA(A){return A.d[A.d.length-1]&1}function LAA(A,Q,B){var $,J,Y=new A(Q[0]),Z=0;for(;++Z<Q.length;){if(J=new A(Q[Z]),!J.s){Y=J;break}if($=Y.cmp(J),$===B||$===0&&Y.s===B)Y=J}return Y}function L81(A,Q){var B,$,J,Y,Z,X,F,D=0,G=0,V=0,U=A.constructor,K=U.rounding,E=U.precision;if(!A.d||!A.d[0]||A.e>17)return new U(A.d?!A.d[0]?1:A.s<0?0:1/0:A.s?A.s<0?0:A:NaN);if(Q==null)dA=!1,F=E;else F=Q;X=new U(0.03125);while(A.e>-2)A=A.times(X),V+=5;$=Math.log(x9(2,V))/Math.LN10*2+5|0,F+=$,B=Y=Z=new U(1),U.precision=F;for(;;){if(Y=DA(Y.times(A),F,1),B=B.times(++G),X=Z.plus(_3(Y,B,F,1)),$Q(X.d).slice(0,F)===$Q(Z.d).slice(0,F)){J=V;while(J--)Z=DA(Z.times(Z),F,1);if(Q==null)if(D<3&&ft(Z.d,F-$,K,D))U.precision=F+=10,B=Y=X=new U(1),G=0,D++;else return DA(Z,U.precision=E,K,dA=!0);else return U.precision=E,Z}Z=X}}function Bw(A,Q){var B,$,J,Y,Z,X,F,D,G,V,U,K=1,E=10,W=A,H=W.d,z=W.constructor,q=z.rounding,N=z.precision;if(W.s<0||!H||!H[0]||!W.e&&H[0]==1&&H.length==1)return new z(H&&!H[0]?-1/0:W.s!=1?NaN:H?0:W);if(Q==null)dA=!1,G=N;else G=Q;if(z.precision=G+=E,B=$Q(H),$=B.charAt(0),Math.abs(Y=W.e)<1500000000000000){while($<7&&$!=1||$==1&&B.charAt(1)>3)W=W.times(A),B=$Q(W.d),$=B.charAt(0),K++;if(Y=W.e,$>1)W=new z("0."+B),Y++;else W=new z($+"."+B.slice(1))}else return D=NU0(z,G+2,N).times(Y+""),W=Bw(new z($+"."+B.slice(1)),G-E).plus(D),z.precision=N,Q==null?DA(W,N,q,dA=!0):W;V=W,F=Z=W=_3(W.minus(1),W.plus(1),G,1),U=DA(W.times(W),G,1),J=3;for(;;){if(Z=DA(Z.times(U),G,1),D=F.plus(_3(Z,new z(J),G,1)),$Q(D.d).slice(0,G)===$Q(F.d).slice(0,G)){if(F=F.times(2),Y!==0)F=F.plus(NU0(z,G+2,N).times(Y+""));if(F=_3(F,new z(K),G,1),Q==null)if(ft(F.d,G-E,q,X))z.precision=G+=E,D=Z=W=_3(V.minus(1),V.plus(1),G,1),U=DA(W.times(W),G,1),J=X=1;else return DA(F,z.precision=N,q,dA=!0);else return z.precision=N,F}F=D,J+=2}}function OAA(A){return String(A.s*A.s/0)}function HU0(A,Q){var B,$,J;if((B=Q.indexOf("."))>-1)Q=Q.replace(".","");if(($=Q.search(/e/i))>0){if(B<0)B=$;B+=+Q.slice($+1),Q=Q.substring(0,$)}else if(B<0)B=Q.length;for($=0;Q.charCodeAt($)===48;$++);for(J=Q.length;Q.charCodeAt(J-1)===48;--J);if(Q=Q.slice($,J),Q){if(J-=$,A.e=B=B-$-1,A.d=[],$=(B+1)%TA,B<0)$+=TA;if($<J){if($)A.d.push(+Q.slice(0,$));for(J-=TA;$<J;)A.d.push(+Q.slice($,$+=TA));Q=Q.slice($),$=TA-Q.length}else $-=J;for(;$--;)Q+="0";if(A.d.push(+Q),dA){if(A.e>A.constructor.maxE)A.d=null,A.e=NaN;else if(A.e<A.constructor.minE)A.e=0,A.d=[0]}}else A.e=0,A.d=[0];return A}function ps5(A,Q){var B,$,J,Y,Z,X,F,D,G;if(Q.indexOf("_")>-1){if(Q=Q.replace(/(\d)_(?=\d)/g,"$1"),wAA.test(Q))return HU0(A,Q)}else if(Q==="Infinity"||Q==="NaN"){if(!+Q)A.s=NaN;return A.e=NaN,A.d=null,A}if(bs5.test(Q))B=16,Q=Q.toLowerCase();else if(fs5.test(Q))B=2;else if(us5.test(Q))B=8;else throw Error($w+Q);if(Y=Q.search(/p/i),Y>0)F=+Q.slice(Y+1),Q=Q.substring(2,Y);else Q=Q.slice(2);if(Y=Q.indexOf("."),Z=Y>=0,$=A.constructor,Z)Q=Q.replace(".",""),X=Q.length,Y=X-Y,J=MAA($,new $(B),Y,Y*2);D=WU0(Q,B,$G),G=D.length-1;for(Y=G;D[Y]===0;--Y)D.pop();if(Y<0)return new $(A.s*0);if(A.e=wU0(D,G),A.d=D,dA=!1,Z)A=_3(A,J,X*4);if(F)A=A.times(Math.abs(F)<54?x9(2,F):bt.pow(2,F));return dA=!0,A}function ds5(A,Q){var B,$=Q.d.length;if($<3)return Q.isZero()?Q:Lb(A,2,Q,Q);B=1.4*Math.sqrt($),B=B>16?16:B|0,Q=Q.times(1/CU0(5,B)),Q=Lb(A,2,Q,Q);var J,Y=new A(5),Z=new A(16),X=new A(20);for(;B--;)J=Q.times(Q),Q=Q.times(Y.plus(J.times(Z.times(J).minus(X))));return Q}function Lb(A,Q,B,$,J){var Y,Z,X,F,D=1,G=A.precision,V=Math.ceil(G/TA);dA=!1,F=B.times(B),X=new A($);for(;;){if(Z=_3(X.times(F),new A(Q++*Q++),G,1),X=J?$.plus(Z):$.minus(Z),$=_3(Z.times(F),new A(Q++*Q++),G,1),Z=X.plus($),Z.d[V]!==void 0){for(Y=V;Z.d[Y]===X.d[Y]&&Y--;);if(Y==-1)break}Y=X,X=$,$=Z,Z=Y,D++}return dA=!0,Z.d.length=V+1,Z}function CU0(A,Q){var B=A;while(--Q)B*=A;return B}function jAA(A,Q){var B,$=Q.s<0,J=$K(A,A.precision,1),Y=J.times(0.5);if(Q=Q.abs(),Q.lte(Y))return ZH=$?4:1,Q;if(B=Q.divToInt(J),B.isZero())ZH=$?3:2;else{if(Q=Q.minus(B.times(J)),Q.lte(Y))return ZH=EAA(B)?$?2:3:$?4:1,Q;ZH=EAA(B)?$?1:4:$?3:2}return Q.minus(J).abs()}function O81(A,Q,B,$){var J,Y,Z,X,F,D,G,V,U,K=A.constructor,E=B!==void 0;if(E)if(LJ(B,1,Jw),$===void 0)$=K.rounding;else LJ($,0,8);else B=K.precision,$=K.rounding;if(!A.isFinite())G=OAA(A);else{if(G=JK(A),Z=G.indexOf("."),E){if(J=2,Q==16)B=B*4-3;else if(Q==8)B=B*3-2}else J=Q;if(Z>=0)G=G.replace(".",""),U=new K(1),U.e=G.length-Z,U.d=WU0(JK(U),10,J),U.e=U.d.length;V=WU0(G,10,J),Y=F=V.length;for(;V[--F]==0;)V.pop();if(!V[0])G=E?"0p+0":"0";else{if(Z<0)Y--;else A=new K(A),A.d=V,A.e=Y,A=_3(A,U,B,$,0,J),V=A.d,Y=A.e,D=zAA;if(Z=V[B],X=J/2,D=D||V[B+1]!==void 0,D=$<4?(Z!==void 0||D)&&($===0||$===(A.s<0?3:2)):Z>X||Z===X&&($===4||D||$===6&&V[B-1]&1||$===(A.s<0?8:7)),V.length=B,D){for(;++V[--B]>J-1;)if(V[B]=0,!B)++Y,V.unshift(1)}for(F=V.length;!V[F-1];--F);for(Z=0,G="";Z<F;Z++)G+=w81.charAt(V[Z]);if(E){if(F>1)if(Q==16||Q==8){Z=Q==16?4:3;for(--F;F%Z;F++)G+="0";V=WU0(G,J,Q);for(F=V.length;!V[F-1];--F);for(Z=1,G="1.";Z<F;Z++)G+=w81.charAt(V[Z])}else G=G.charAt(0)+"."+G.slice(1);G=G+(Y<0?"p":"p+")+Y}else if(Y<0){for(;++Y;)G="0"+G;G="0."+G}else if(++Y>F)for(Y-=F;Y--;)G+="0";else if(Y<F)G=G.slice(0,Y)+"."+G.slice(Y)}G=(Q==16?"0x":Q==2?"0b":Q==8?"0o":"")+G}return A.s<0?"-"+G:G}function WAA(A,Q){if(A.length>Q)return A.length=Q,!0}function cs5(A){return new this(A).abs()}function ls5(A){return new this(A).acos()}function is5(A){return new this(A).acosh()}function ns5(A,Q){return new this(A).plus(Q)}function as5(A){return new this(A).asin()}function os5(A){return new this(A).asinh()}function rs5(A){return new this(A).atan()}function ss5(A){return new this(A).atanh()}function ts5(A,Q){A=new this(A),Q=new this(Q);var B,$=this.precision,J=this.rounding,Y=$+4;if(!A.s||!Q.s)B=new this(NaN);else if(!A.d&&!Q.d)B=$K(this,Y,1).times(Q.s>0?0.25:0.75),B.s=A.s;else if(!Q.d||A.isZero())B=Q.s<0?$K(this,$,J):new this(0),B.s=A.s;else if(!A.d||Q.isZero())B=$K(this,Y,1).times(0.5),B.s=A.s;else if(Q.s<0)this.precision=Y,this.rounding=1,B=this.atan(_3(A,Q,Y,1)),Q=$K(this,Y,1),this.precision=$,this.rounding=J,B=A.s<0?B.minus(Q):B.plus(Q);else B=this.atan(_3(A,Q,Y,1));return B}function es5(A){return new this(A).cbrt()}function At5(A){return DA(A=new this(A),A.e+1,2)}function Qt5(A,Q,B){return new this(A).clamp(Q,B)}function Bt5(A){if(!A||typeof A!=="object")throw Error(IU0+"Object expected");var Q,B,$,J=A.defaults===!0,Y=["precision",1,Jw,"rounding",0,8,"toExpNeg",-Mb,0,"toExpPos",0,Mb,"maxE",0,Mb,"minE",-Mb,0,"modulo",0,9];for(Q=0;Q<Y.length;Q+=3){if(B=Y[Q],J)this[B]=C81[B];if(($=A[B])!==void 0)if($B($)===$&&$>=Y[Q+1]&&$<=Y[Q+2])this[B]=$;else throw Error($w+B+": "+$)}if(B="crypto",J)this[B]=C81[B];if(($=A[B])!==void 0)if($===!0||$===!1||$===0||$===1)if($)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[B]=!0;else throw Error(NAA);else this[B]=!1;else throw Error($w+B+": "+$);return this}function $t5(A){return new this(A).cos()}function Jt5(A){return new this(A).cosh()}function RAA(A){var Q,B,$;function J(Y){var Z,X,F,D=this;if(!(D instanceof J))return new J(Y);if(D.constructor=J,HAA(Y)){if(D.s=Y.s,dA)if(!Y.d||Y.e>J.maxE)D.e=NaN,D.d=null;else if(Y.e<J.minE)D.e=0,D.d=[0];else D.e=Y.e,D.d=Y.d.slice();else D.e=Y.e,D.d=Y.d?Y.d.slice():Y.d;return}if(F=typeof Y,F==="number"){if(Y===0){D.s=1/Y<0?-1:1,D.e=0,D.d=[0];return}if(Y<0)Y=-Y,D.s=-1;else D.s=1;if(Y===~~Y&&Y<1e7){for(Z=0,X=Y;X>=10;X/=10)Z++;if(dA)if(Z>J.maxE)D.e=NaN,D.d=null;else if(Z<J.minE)D.e=0,D.d=[0];else D.e=Z,D.d=[Y];else D.e=Z,D.d=[Y];return}if(Y*0!==0){if(!Y)D.s=NaN;D.e=NaN,D.d=null;return}return HU0(D,Y.toString())}if(F==="string"){if((X=Y.charCodeAt(0))===45)Y=Y.slice(1),D.s=-1;else{if(X===43)Y=Y.slice(1);D.s=1}return wAA.test(Y)?HU0(D,Y):ps5(D,Y)}if(F==="bigint"){if(Y<0)Y=-Y,D.s=-1;else D.s=1;return HU0(D,Y.toString())}throw Error($w+Y)}if(J.prototype=m1,J.ROUND_UP=0,J.ROUND_DOWN=1,J.ROUND_CEIL=2,J.ROUND_FLOOR=3,J.ROUND_HALF_UP=4,J.ROUND_HALF_DOWN=5,J.ROUND_HALF_EVEN=6,J.ROUND_HALF_CEIL=7,J.ROUND_HALF_FLOOR=8,J.EUCLID=9,J.config=J.set=Bt5,J.clone=RAA,J.isDecimal=HAA,J.abs=cs5,J.acos=ls5,J.acosh=is5,J.add=ns5,J.asin=as5,J.asinh=os5,J.atan=rs5,J.atanh=ss5,J.atan2=ts5,J.cbrt=es5,J.ceil=At5,J.clamp=Qt5,J.cos=$t5,J.cosh=Jt5,J.div=Yt5,J.exp=Zt5,J.floor=Xt5,J.hypot=Ft5,J.ln=Dt5,J.log=Gt5,J.log10=Ut5,J.log2=Vt5,J.max=Kt5,J.min=Et5,J.mod=Wt5,J.mul=Ht5,J.pow=zt5,J.random=qt5,J.round=Nt5,J.sign=It5,J.sin=wt5,J.sinh=Ct5,J.sqrt=Mt5,J.sub=Lt5,J.sum=Ot5,J.tan=jt5,J.tanh=Rt5,J.trunc=Pt5,A===void 0)A={};if(A){if(A.defaults!==!0){$=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"];for(Q=0;Q<$.length;)if(!A.hasOwnProperty(B=$[Q++]))A[B]=this[B]}}return J.config(A),J}function Yt5(A,Q){return new this(A).div(Q)}function Zt5(A){return new this(A).exp()}function Xt5(A){return DA(A=new this(A),A.e+1,3)}function Ft5(){var A,Q,B=new this(0);dA=!1;for(A=0;A<arguments.length;)if(Q=new this(arguments[A++]),!Q.d){if(Q.s)return dA=!0,new this(1/0);B=Q}else if(B.d)B=B.plus(Q.times(Q));return dA=!0,B.sqrt()}function HAA(A){return A instanceof bt||A&&A.toStringTag===IAA||!1}function Dt5(A){return new this(A).ln()}function Gt5(A,Q){return new this(A).log(Q)}function Vt5(A){return new this(A).log(2)}function Ut5(A){return new this(A).log(10)}function Kt5(){return LAA(this,arguments,-1)}function Et5(){return LAA(this,arguments,1)}function Wt5(A,Q){return new this(A).mod(Q)}function Ht5(A,Q){return new this(A).mul(Q)}function zt5(A,Q){return new this(A).pow(Q)}function qt5(A){var Q,B,$,J,Y=0,Z=new this(1),X=[];if(A===void 0)A=this.precision;else LJ(A,1,Jw);if($=Math.ceil(A/TA),!this.crypto)for(;Y<$;)X[Y++]=Math.random()*1e7|0;else if(crypto.getRandomValues){Q=crypto.getRandomValues(new Uint32Array($));for(;Y<$;)if(J=Q[Y],J>=4290000000)Q[Y]=crypto.getRandomValues(new Uint32Array(1))[0];else X[Y++]=J%1e7}else if(crypto.randomBytes){Q=crypto.randomBytes($*=4);for(;Y<$;)if(J=Q[Y]+(Q[Y+1]<<8)+(Q[Y+2]<<16)+((Q[Y+3]&127)<<24),J>=2140000000)crypto.randomBytes(4).copy(Q,Y);else X.push(J%1e7),Y+=4;Y=$/4}else throw Error(NAA);if($=X[--Y],A%=TA,$&&A)J=x9(10,TA-A),X[Y]=($/J|0)*J;for(;X[Y]===0;Y--)X.pop();if(Y<0)B=0,X=[0];else{B=-1;for(;X[0]===0;B-=TA)X.shift();for($=1,J=X[0];J>=10;J/=10)$++;if($<TA)B-=TA-$}return Z.e=B,Z.d=X,Z}function Nt5(A){return DA(A=new this(A),A.e+1,this.rounding)}function It5(A){return A=new this(A),A.d?A.d[0]?A.s:0*A.s:A.s||NaN}function wt5(A){return new this(A).sin()}function Ct5(A){return new this(A).sinh()}function Mt5(A){return new this(A).sqrt()}function Lt5(A,Q){return new this(A).sub(Q)}function Ot5(){var A=0,Q=arguments,B=new this(Q[A]);dA=!1;for(;B.s&&++A<Q.length;)B=B.plus(Q[A]);return dA=!0,DA(B,this.precision,this.rounding)}function jt5(A){return new this(A).tan()}function Rt5(A){return new this(A).tanh()}function Pt5(A){return DA(A=new this(A),A.e+1,1)}m1[Symbol.for("nodejs.util.inspect.custom")]=m1.toString;m1[Symbol.toStringTag]="Decimal";var bt=m1.constructor=RAA(C81);zU0=new bt(zU0);qU0=new bt(qU0);var j81=2;function _t5(A,Q){let B=Q.decimalPlaces==="more-if-tiny"?Math.abs(A)<0.01?j81+1:j81:Q.decimalPlaces??j81,$=Q.intent==="balance"?A<0?"expand":"trunc":"halfExpand";return{decimalPlaces:B,roundingMode:$}}function Yw(A,Q){let{decimalPlaces:B,roundingMode:$}=_t5(A,Q),J=A%1===0&&!Q.alwaysShowCents?A.toLocaleString("en-US",{style:"currency",currency:"USD",minimumFractionDigits:0,maximumFractionDigits:0,roundingMode:$}):A.toLocaleString("en-US",{style:"currency",currency:"USD",minimumFractionDigits:B,maximumFractionDigits:B,roundingMode:$});return Q.includeCurrencyCode?`${J} USD`:J}function ut(A){if(A>=1e6)return`${Math.round(A/1e6)}M`;if(A>=1000)return`${Math.round(A/1000)}k`;return A.toString()}function Tt5(A){if(!A)return"";let Q=A.split("-");if(Q.length>=2)return Q.slice(0,2).join("-");return A}function PAA(A){let Q=[],B=(A.inputTokens??0)+(A.cacheCreationInputTokens??0),$=A.cacheReadInputTokens??0;if(B>0)Q.push(`${ut(B)} in`);if($>0)Q.push(`${ut($)} cache read`);if(A.outputTokens)Q.push(`${ut(A.outputTokens)} out`);if(A.model)Q.push(Tt5(A.model));if(Q.length>0)return`(${Q.join(", ")})`;return""}function Zw(A,Q){let{colors:B,dim:$}=Q,J=[];if(A.totalCostUSD===null)return J;let Y=A.costBreakdown,Z=Y?.freeUSD??0,X=Y?.paidUSD??0;if(Z===0&&X===0)return J;let D={decimalPlaces:"more-if-tiny",intent:"cost"};if(X===0)J.push(new M(Yw(Z,D),new y({color:B.foreground,dim:$}))),J.push(new M(" (free)",new y({color:B.foreground,dim:$})));else if(Z>0)J.push(new M(Yw(Z,D),new y({color:B.foreground,dim:$}))),J.push(new M(" (free)",new y({color:B.foreground,dim:$}))),J.push(new M(" + ",new y({color:B.foreground,dim:$}))),J.push(new M(Yw(X,D),new y({color:B.foreground,dim:$,bold:!$})));else J.push(new M(Yw(X,D),new y({color:B.foreground,dim:$,bold:!$})));return J}class R81 extends d4{}class P81 extends d4{}function St5(A,Q){if(Q.code==="auth-required")return"You must be logged in to view thread usage. Run `amp login` first.";if(Q.code==="thread-not-found")return`Thread ${A} not found.`;return`Failed to load thread usage: ${Q.message??Q.code}`}function kt5(A,Q){let B=_0.of(Q),{colors:$}=B,J=Zw(A,{colors:{foreground:$.foreground}}),Y=[];if(J.length>0)Y.push(new M("Total: ",new y({color:$.mutedForeground}))),Y.push(...J);else if(A.totalCostUSD===null)Y.push(new M("Usage information is currently unavailable."));else Y.push(new M("No usage recorded for this thread yet."));if(A.costBreakdownURL)Y.push(new M(`
|
|
5398
5398
|
|
|
5399
5399
|
`)),Y.push(new M("Details: ",new y({color:$.mutedForeground}))),Y.push(new M(A.costBreakdownURL,new y({color:B.app.link})));return new l({text:new M("",void 0,Y)})}function vt5(A,Q,B){let $=kt5(A,Q);if(!A.costBreakdownURL)return new _A({header:"Thread Cost",minWidth:80,maxWidth:100,onDismiss:B,child:$});let J=A.costBreakdownURL,Y=new G4(()=>{return BA.maybeInvoke(Q,new Q$(J,"Cost breakdown URL copied to clipboard","Failed to copy cost breakdown URL")),"handled"}),Z=new G4(()=>{return $6(Q,J),"handled"});return new _A({header:"Thread Cost",minWidth:80,maxWidth:100,autofocus:!1,footer:[{keys:["Esc"],label:"close"},{keys:["o"],label:"open in browser"},{keys:["y"],label:"copy url"}],onDismiss:B,child:new BA({actions:new Map([[R81,Y],[P81,Z]]),child:new p5({debugLabel:"ThreadCostShortcuts",shortcuts:new Map([[v1.key("o"),new P81],[v1.key("y"),new R81]]),child:new m4({autofocus:!0,debugLabel:"ThreadCostBody",child:$})})})})}function _AA(A){return{noun:"thread",verb:"show cost",description:"Show usage cost for the active thread",keywords:["usage","credits","billing","spend"],get status(){return A.getActiveThreadID()?{type:"enabled"}:{type:"disabled",reason:"No active thread"}},run:async(Q,B,$)=>{let J=A.getActiveThreadID();if(!J)return;try{let Y=await VA.threadDisplayCostInfo({threadID:J},{config:A.configService});if(!Y.ok){A.toastController.show(St5(J,Y.error),"error",5000),$();return}Q.push(vt5(Y.result,B,$))}catch(Y){j.error("Failed to load Neo thread cost",{error:Y,threadID:J}),A.toastController.show(`Failed to show thread cost: ${Y instanceof Error?Y.message:String(Y)}`,"error",5000),$()}}}}var yt5=250,xt5=2000;function ft5({ampURL:A,threadID:Q,logPath:B}){return[`Debug thread ${jB(new URL(A),Q).toString()} (cli log: ${B}). Start with the CLI log, actor logs, and Rivet DB/inspector as sources of truth. Read thread-actors/docs/debugging-actors.md and thread-actors/scripts/README.md. For dev, actor logs are in .amp/in/thread-actors.json.log; for staging/prod, logs are in gcloud.`,"","Problem: "].join(`
|
|
5400
|
-
`)}class _81 extends v0{analyzeContextForThread;listSkillsForThread;clientPool;completionBuilder;history;ideManager;configService;initialThreadID;showNeoWelcome;onNeoWelcomeDismissed;notificationService;onThreadArchived;initialUserInput;openThreadPickerOnStart;neoContext;constructor(A){super();this.analyzeContextForThread=A.analyzeContextForThread,this.listSkillsForThread=A.listSkillsForThread,this.clientPool=A.clientPool,this.completionBuilder=A.completionBuilder,this.history=A.history,this.ideManager=A.ideManager,this.configService=A.configService,this.initialThreadID=A.initialThreadID,this.showNeoWelcome=A.showNeoWelcome??!1,this.onNeoWelcomeDismissed=A.onNeoWelcomeDismissed,this.notificationService=A.notificationService,this.onThreadArchived=A.onThreadArchived,this.initialUserInput=A.initialUserInput,this.openThreadPickerOnStart=A.openThreadPickerOnStart??!1,this.neoContext=A.neoContext}createState(){return new SAA}}class SAA extends k0{editorController=new M8;commandPalette=new Us(this);commandRegistry=new c51;toastController=new O41;exitHintTimer=new vf(this,1000);ideStatus=new u8(this,{});threadNavigationHistory=new u51;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;titleSubscription=null;agentStateSubscription=null;currentTitleText=void 0;currentAgentBusy=!1;currentTerminalTitle=void 0;terminalTitleSpinner=new z6;terminalTitleSpinnerTimer=null;connectionErrorsSubscription=null;configSubscription=null;connectingToThreadID=null;switchThreadPickerVisible=!1;neoWelcomeVisible=!1;debugOverlayVisible=!1;focusDebugVisible=!1;unregisterCommands=null;pluginIntegration=null;configReloadSubscription=null;configReloadToastTimer=null;pendingConfigReloadToastType=null;lastConfigReloadToast=null;loadThreads=async()=>{return this.widget.neoContext.listThreads()};onSwitchThread=(A)=>{this.connectToExistingThread(A,{recordNavigation:!0})};sendFeedbackReport=async(A)=>oe4({configService:this.widget.configService,settingsFilePath:this.widget.neoContext.settingsFilePath},A);setThreadVisibility=(A,Q)=>{return re4({ampURL:this.widget.neoContext.ampURL,configService:this.widget.configService},A,Q)};archiveThread=async(A)=>{let Q=await so4({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let B=await to4({configService:this.widget.configService},A,Q);if(B instanceof Error)return B;return this.toastController.show(B.message,B.type,2000),null};removeThreadLabel=async(A,Q)=>{let B=await eo4({configService:this.widget.configService},A,Q);if(B instanceof Error)return B;return this.toastController.show(B.message,B.type,2000),null};initState(){if(oB.getInstance().interceptConsole(),this.widget.showNeoWelcome)this.neoWelcomeVisible=!0;if(this.connectionErrorsSubscription=this.widget.clientPool.connectionErrors$.subscribe(({threadID:Q,error:B})=>{if(j.error("Neo failed to connect to thread",{threadID:Q,error:B}),!Q)this.toastController.show(`Connection failed: ${B.message}`,"error",4000)}),this.configReloadSubscription=this.widget.configService.configReloadEvents.subscribe((Q)=>this.scheduleConfigReloadToast(Q)),this.configSubscription=this.widget.configService.config.subscribe((Q)=>{this.applyDraftThreadSettingsSeed(this.applySessionDefaultsToThreadSettings(L80(Q.settings)))}),this.ideStatus.subscribe(this.widget.ideManager.status),this.widget.openThreadPickerOnStart)this.switchThreadPickerVisible=!0;this.ensureDraftThreadSettingsInitialized();let A=this.widget.initialUserInput;if(this.widget.initialThreadID){let Q={};if(A)Q.initialUserInput=A;this.connectToExistingThread(this.widget.initialThreadID,Q)}else if(A)this.onNewThread([{type:"text",text:A}],this.widget.neoContext.sessionAgentMode);this.pluginIntegration=new f51({state:this,commandPalette:this.commandPalette,commandRegistry:this.commandRegistry,toastController:this.toastController,neoContext:this.widget.neoContext,getActiveThreadID:this.getActiveThreadID,appendToThread:this.appendPluginMessagesToThread}),this.pluginIntegration.init(),this.unregisterCommands=this.registerAppCommands(),queueMicrotask(()=>{if(!this.mounted)return;this.replayEarlyInputToEditor()})}replayEarlyInputToEditor(){let A=L4.instance.tuiInstance.getEarlyInputText();if(!A)return;this.editorController.insertText(A)}scheduleConfigReloadToast(A){if(this.pendingConfigReloadToastType=this.pendingConfigReloadToastType==="failed"||A.type==="failed"?"failed":"succeeded",this.configReloadToastTimer)clearTimeout(this.configReloadToastTimer);this.configReloadToastTimer=setTimeout(()=>{this.flushConfigReloadToast()},yt5),this.configReloadToastTimer.unref()}flushConfigReloadToast(){let A=this.pendingConfigReloadToastType;if(this.pendingConfigReloadToastType=null,this.configReloadToastTimer=null,!A)return;let Q=Date.now();if(this.lastConfigReloadToast?.type===A&&Q-this.lastConfigReloadToast.shownAt<xt5)return;switch(this.lastConfigReloadToast={type:A,shownAt:Q},A){case"succeeded":this.toastController.show("Config reloaded","success",1500);break;case"failed":this.toastController.show("Config reload failed","error",5000);break}}registerAppCommands(){let A=this,Q=this.widget.neoContext.pluginService?le4({pluginService:this.widget.neoContext.pluginService,workspaceRoot:this.widget.neoContext.workspaceRoot,logFilePath:this.widget.neoContext.logFilePath,toastController:this.toastController}):[],$=[{noun:"thread",verb:"switch",description:"Switch to existing thread",keywords:["recent","history","open","resume","change"],status:{type:"enabled"},sortBoost:100,run:(J,Y,Z)=>{J.pushWithDismiss((X)=>n31({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:X,onThreadSelected:Z}))}},{noun:"thread",verb:"switch to previous",description:"Switch to previous thread",keywords:["back"],get status(){return A.threadNavigationHistory.canNavigateBack()?{type:"enabled"}:{type:"disabled",reason:"Cannot use thread: switch to previous with no previous thread"}},run:(J,Y,Z)=>{A.navigateBack(),Z()}},_AA({configService:this.widget.configService,getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??void 0,toastController:this.toastController}),{noun:"thread",verb:"switch to next",description:"Switch to next thread",keywords:["forward"],get status(){return A.threadNavigationHistory.canNavigateForward()?{type:"enabled"}:{type:"disabled",reason:"Cannot use thread: switch to next with no next thread"}},run:(J,Y,Z)=>{A.navigateForward(),Z()}},{noun:"mcp",verb:"info",description:"Show MCP servers and tools",keywords:["servers","tools","plugins","integrations"],status:{type:"enabled"},run:(J,Y,Z)=>{J.push(new Z31({mcpServers:this.widget.neoContext.mcpServers,onDismiss:Z}))}},{noun:"toolbox",verb:"list",description:"List all toolboxes and their tools",keywords:["tools","toolbox"],status:{type:"enabled"},run:(J)=>{J.pushWithDismiss((Y)=>new W81({toolboxes:this.widget.neoContext.toolboxes,onDismiss:Y}))}},{noun:"news",verb:"open",description:"Open Amp Chronicle in browser",keywords:["chronicle","updates","blog","announcements"],status:{type:"enabled"},run:async(J,Y,Z)=>{try{await $6(Y,"https://ampcode.com/chronicle")}finally{Z()}}},{noun:"settings",verb:"open in editor",description:"Open CLI settings in $EDITOR",keywords:["config","preferences","edit"],status:{type:"enabled"},run:()=>{NJ(this.widget.neoContext.settingsFilePath).catch((J)=>{j.error("Failed to open settings file in editor",{error:J})})}},{noun:"IDE",verb:"connect",description:"Connect to an IDE",keywords:["vscode","cursor","jetbrains","editor","attach"],status:{type:"enabled"},run:(J,Y,Z)=>{J.pushWithDismiss((X)=>new J31({onCancel:X,onSelect:(F)=>{this.handleIdeSelection(F),Z()}}))}},{noun:"amp",verb:"help",description:"Show help & keyboard shortcuts",keywords:["shortcuts","keybindings","docs","manual","?"],status:{type:"enabled"},run:(J,Y,Z)=>{J.push(new o51({commands:AZ.of(Y).commands,onDismiss:Z}))}},{noun:"amp",verb:"show welcome",description:"Show the welcome message again",keywords:["intro","onboarding","getting started"],status:{type:"enabled"},run:(J,Y,Z)=>{Z(),A.showNeoWelcome()}},{noun:"amp",verb:"show version",description:"Show current Amp version",keywords:["about","release","build"],status:{type:"enabled"},run:(J,Y,Z)=>{J.push(new _A({header:"Amp Version",maxWidth:72,onDismiss:Z,child:new l({text:new M(q41({version:"0.0.1778049149-g4ce163",buildTimestamp:"2026-05-06T06:36:12.240Z",buildType:"'release'"}))})}))}},{noun:"amp",verb:"reconnect",description:"Disconnect and reconnect the active thread",keywords:["connection","disconnect","socket","debug"],get status(){return A.activeThreadContext?.client.getThreadId()?{type:"enabled"}:{type:"disabled",reason:"Cannot use amp: reconnect with no active thread"}},run:(J,Y,Z)=>{A.reconnectActiveThread(),Z()}},{noun:"amp",verb:"disconnect",description:"Disconnect the active thread without reconnecting",keywords:["connection","socket","debug","dev"],get status(){return A.activeThreadContext?.client.getThreadId()?{type:"enabled"}:{type:"disabled",reason:"Cannot use amp: disconnect with no active thread"}},run:(J,Y,Z)=>{A.disconnectActiveThread(),Z()}},{noun:"amp",verb:"quit",description:"Exit application",keywords:["exit","close","leave","bye"],shortcut:v1.ctrl("c"),status:{type:"enabled"},run:(J,Y)=>{BA.maybeInvoke(Y,new Ub)}},...Q,...ve4(this.widget.neoContext.logFilePath)].map((J)=>this.commandRegistry.register(J));return()=>{for(let J of $)J()}}build(A){let Q=this.buildHints(),B=this.ideStatus.getValue(),$=new E81({initialAgentMode:this.widget.neoContext.sessionAgentMode,analyzeContextForThread:this.widget.analyzeContextForThread,listSkillsForThread:this.widget.listSkillsForThread,threadContext:this.activeThreadContext,draftThreadSettings:this.draftThreadSettings,editorController:this.editorController,history:this.widget.history,updateDraftThreadSettings:this.updateDraftThreadSettings,onNewThread:this.onNewThread,sendFeedbackReport:this.sendFeedbackReport,setThreadVisibility:this.setThreadVisibility,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:B}),J=r1.of(A),Z=[new p0({constraints:L1.tight(J.size.width,J.size.height),child:$})];if(this.commandPalette.isEnabled())Z.push(new c4({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new l51({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.neoWelcomeVisible)Z.push(n31({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:this.closeSwitchThreadPicker,onThreadSelected:this.closeSwitchThreadPicker}));if(this.neoWelcomeVisible)Z.push(new c4({debugLabel:"NeoWelcomeDialogOverlay",child:new I81({onDismiss:this.dismissNeoWelcome})}));if(Z.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.neoContext.isInternalUser)Z.push(new B31({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:ht.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)Z.push(new $31);return new y2({neoContext:this.widget.neoContext,child:new AZ({commandRegistry:this.commandRegistry,child:new oI({completionBuilder:this.widget.completionBuilder,child:new x5({controller:this.toastController,child:new BA({actions:this.buildActions(),child:new p5({debugLabel:"NeoAppShortcuts",shortcuts:new Map([[v1.ctrl("c"),new uV0],[v1.ctrl("o"),new hV0],[v1.alt("i"),new mV0],[v1.alt("p"),new PI],[v1.ctrl("t"),new pV0]]),child:new m4({debugLabel:"AppShellFocus",child:new j41({controller:this.toastController,child:new t4({children:Z})})})})})})})})})}buildActions(){let A=new G4(()=>{if(qJ.hasAnyCopyableSelection())return qJ.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new G4(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),B=new G4(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),$=new G4(()=>{return this.startNewDraftThread(),"handled"}),J=new G4(()=>{return L4.instance.stop(),"handled"}),Y=new G4((U)=>{if(!U.text)return"ignored";return L4.instance.tuiInstance.clipboard.writeText(U.text).then(()=>{this.toastController.show(U.successMessage,"success",2000)}).catch((K)=>{j.error("Failed to copy Neo text to clipboard",{error:K}),this.toastController.show(U.failureMessage,"error",2000)}),"handled"}),Z=new G4(()=>{return L4.instance.toggleFrameStatsOverlay(),"handled"}),X=new G4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),F=new G4(()=>{let U=this.activeThreadContext?.client.getThreadId();if(!U)return this.toastController.show("No active thread","error",2000),"handled";let K=px(U);return L4.instance.tuiInstance.clipboard.writeText(K).then(()=>{this.toastController.show("Copied log path to clipboard","success",2000)}).catch((E)=>{j.error("Failed to copy thread log path",{error:E,threadID:U,logPath:K}),this.toastController.show("Failed to copy log path","error",2000)}),"handled"}),D=new G4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";let U=this.activeThreadContext?.client.getThreadId();if(!U)return"handled";return this.prepareThreadIssueInvestigation(U),"handled"}),G=new G4(()=>{let U=this.activeThreadContext?.client.getThreadId();if(!U)return this.toastController.show("No active thread","error",2000),"handled";return this.toastController.show("Sending report...","success",2000),this.sendFeedbackReport(U).then(async(K)=>{try{await L4.instance.tuiInstance.clipboard.writeText(K),this.toastController.show("Sent report and copied report ID","success",3000)}catch(E){j.warn("Failed to copy report ID to clipboard",{error:E,reportID:K}),this.toastController.show(`Sent report ${K}`,"success",3000)}}).catch((K)=>{j.error("Failed to send report from debug overlay",{error:K,threadID:U}),this.toastController.show("Failed to send report","error",3000)}),"handled"}),V=new G4(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[uV0,A],[Dt,$],[Ub,J],[Q$,Y],[Ut,B],[hV0,Q],[mV0,X],[Kt,F],[Et,D],[Wt,G],[PI,Z],[pV0,V]])}startNewDraftThread(A={}){let Q=this.activeThreadContext?.client.getThreadId();if(this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(Q),this.setState(()=>{if(this.titleSubscription?.unsubscribe(),this.titleSubscription=null,this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=null,this.currentAgentBusy=!1,this.syncTerminalTitleSpinner(),this.clearTerminalTitle(),this.activeThreadContext=null,this.connectingToThreadID=null,A.hideDebugOverlay)this.debugOverlayVisible=!1}),A.prompt!==void 0)this.editorController.text=A.prompt}prepareThreadIssueInvestigation(A){try{this.startNewDraftThread({prompt:ft5({ampURL:this.widget.neoContext.ampURL,threadID:A,logPath:px(A)}),hideDebugOverlay:!0})}catch(Q){j.error("Failed to prepare thread issue investigation",{error:Q,threadID:A})}}closeCommandPaletteOnFocusLoss=(A)=>{if(A||!this.commandPalette.isEnabled())return;this.commandPalette.disable()};ensureDraftThreadSettingsInitialized(){if(this.hasDraftThreadSettingsSeed)return Promise.resolve();if(!this.draftThreadSettingsInitPromise)this.draftThreadSettingsInitPromise=this.initDraftThreadSettings();return this.draftThreadSettingsInitPromise}async initDraftThreadSettings(){try{let A=this.applySessionDefaultsToThreadSettings(await Cf(this.widget.configService));this.applyDraftThreadSettingsSeed(A)}catch(A){j.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applySessionDefaultsToThreadSettings(A){let Q=this.widget.neoContext.sessionAgentMode,B=A,$=zJ(Q),J=oD0(this.widget.neoContext,Q);if($!==void 0&&J!==void 0)B={...B,[$]:J};return aD0(B,{agentMode:Q,explicitEffort:this.widget.neoContext.explicitReasoningEffort,sessionState:this.widget.neoContext})}applyDraftThreadSettingsSeed(A){if(!this.mounted)return;if(!this.hasDraftThreadSettingsSeed){this.setState(()=>{this.hasDraftThreadSettingsSeed=!0,this.draftThreadSettings=TAA(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if(lZ(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=TAA(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(aI);if(this.exitHintTimer.isActive())A.add(Zb);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),L4.instance.stop();else this.exitHintTimer.activate()};dismissNeoWelcome=()=>{if(!this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!1}),this.widget.onNeoWelcomeDismissed?.()};showNeoWelcome=()=>{if(this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!0})};closeSwitchThreadPicker=()=>{if(!this.switchThreadPickerVisible)return;this.setState(()=>{this.switchThreadPickerVisible=!1})};updateDraftThreadSettings=(A)=>{this.setState(()=>{this.draftThreadSettings=A(this.draftThreadSettings)})};onNewThread=async(A,Q,B=null,$)=>{await this.ensureDraftThreadSettingsInitialized();let J=this.activeThreadContext?.client.getThreadId(),Y=A.find((X)=>X.type==="text");if(Y&&Y.type==="text")this.widget.history.add(Y.text,ht.cwd()),this.widget.history.reset();let Z=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,B?rY(B):void 0);this.sendUserMessage(Z,A,Q,$),this.threadNavigationHistory.recordNavigation(J),this.setActiveClient(Z)};sendUserMessage(A,Q,B,$){let J=KZ0(this.ideStatus.getValue());if($===void 0){A.client.sendUserMessage(Q,B,{userState:J});return}A.client.sendUserMessage(Q,B,{reasoningEffort:$,userState:J})}getActiveThreadID=()=>{return this.activeThreadContext?.client.getThreadId()??void 0};appendPluginMessagesToThread=async(A,Q)=>{let B=this.activeThreadContext;if(!B)throw Error("appendToThread is not available - no active thread");let $=B.client.getThreadId();if(Q&&$!==Q)throw Error("thread.append is only available for the active executor thread");for(let J of A)this.sendUserMessage(B,[{type:"text",text:J.content}])};async connectToExistingThread(A,Q={}){let B=this.activeThreadContext?.client.getThreadId();this.setState(()=>{this.connectingToThreadID=A});try{let $=await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.neoContext.observerOnly});if(this.setActiveClient($),Q.recordNavigation&&B!==A)this.threadNavigationHistory.recordNavigation(B);if(Q.initialUserInput)this.sendUserMessage($,[{type:"text",text:Q.initialUserInput}])}catch($){if(j.error("Failed to load thread",{error:$,threadID:A}),this.toastController.show(`Failed to load ${A}: ${$ instanceof Error?$.message:String($)}`,"error",4000),Q.rethrowError)throw $}finally{this.setState(()=>{this.connectingToThreadID=null})}}async navigateBack(){let A=this.threadNavigationHistory.startBackNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateForward(){let A=this.threadNavigationHistory.startForwardNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateToThread(A){try{await this.connectToExistingThread(A.targetThreadID,{rethrowError:!0})}catch{A.rollback()}}async reconnectActiveThread(){let A=this.activeThreadContext;if(!A){this.toastController.show("No active thread to reconnect","error",2000);return}let Q=A.client.getThreadId(),B=this.toastController.show(Q?`Reconnecting ${Q}...`:"Reconnecting thread...","warning",60000);try{let $=await this.widget.clientPool.reconnectClient(A.client);this.toastController.update(B,`Reconnected ${$}`,"success",2000)}catch($){j.error("Failed to reconnect thread",{error:$,threadID:Q});let J=$ instanceof Error?$.message:String($);this.toastController.update(B,`Reconnect failed: ${J}`,"error",4000)}}async disconnectActiveThread(){let A=this.activeThreadContext;if(!A){this.toastController.show("No active thread to disconnect","error",2000);return}let Q=A.client.getThreadId(),B=this.toastController.show(Q?`Disconnecting ${Q}...`:"Disconnecting thread...","warning",60000);try{let $=await this.widget.clientPool.disconnectClient(A.client);this.toastController.update(B,`Disconnected ${$}`,"success",2000)}catch($){j.error("Failed to disconnect thread",{error:$,threadID:Q});let J=$ instanceof Error?$.message:String($);this.toastController.update(B,`Disconnect failed: ${J}`,"error",4000)}}setActiveClient({client:A,observer:Q}){this.setState(()=>{this.activeThreadContext={client:A,observer:Q},this.subscribeTitleUpdates(Q),this.subscribeNotifications(Q)})}subscribeTitleUpdates(A){this.titleSubscription?.unsubscribe(),this.titleSubscription=A.title().subscribe({next:(Q)=>{this.currentTitleText=Q,this.updateTerminalTitle()}}),this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=A.agentState().subscribe({next:(Q)=>{let B=Q31(Q);if(B===this.currentAgentBusy)return;this.currentAgentBusy=B,this.syncTerminalTitleSpinner(),this.updateTerminalTitle()}})}subscribeNotifications(A){this.widget.notificationService.attach(A.agentState())}clearTerminalTitle(){this.currentTitleText=void 0,this.updateTerminalTitle()}updateTerminalTitle(){let A=ht.cwd().replace(ht.env.HOME||"","~"),Q=this.currentAgentBusy?`${this.terminalTitleSpinner.toBraille()} `:"",B=this.currentTitleText?`${Q}amp - ${this.currentTitleText} - ${A}`:this.currentAgentBusy?`${Q}amp - ${A}`:"";if(B===this.currentTerminalTitle)return;this.currentTerminalTitle=B,ht.stdout.write(NI(B))}syncTerminalTitleSpinner(){if(this.currentAgentBusy){if(this.terminalTitleSpinnerTimer)return;this.terminalTitleSpinnerTimer=setInterval(()=>{this.terminalTitleSpinner.step(),this.updateTerminalTitle()},200);return}if(this.terminalTitleSpinnerTimer)clearInterval(this.terminalTitleSpinnerTimer),this.terminalTitleSpinnerTimer=null}handleIdeSelection=async(A)=>{try{await this.widget.ideManager.connect(A)}catch(Q){j.error("Failed to connect to IDE",{error:Q});let B=Q instanceof Error?Q.message:String(Q);this.toastController.show(`IDE connection failed: ${B}`,"error",4000)}};dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.pluginIntegration?.dispose(),this.pluginIntegration=null,this.titleSubscription?.unsubscribe(),this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=null,this.terminalTitleSpinnerTimer)clearInterval(this.terminalTitleSpinnerTimer),this.terminalTitleSpinnerTimer=null;if(this.connectionErrorsSubscription?.unsubscribe(),this.configSubscription?.unsubscribe(),this.configSubscription=null,this.configReloadSubscription?.unsubscribe(),this.configReloadSubscription=null,this.configReloadToastTimer)clearTimeout(this.configReloadToastTimer),this.configReloadToastTimer=null;this.pendingConfigReloadToastType=null,this.widget.notificationService.detach(),this.toastController.dispose(),super.dispose()}hasBlockingTopLevelModal(){return this.switchThreadPickerVisible||this.neoWelcomeVisible||(this.pluginIntegration?.hasBlockingDialog()??!1)}}function TAA(A,Q,B){let $={...A};for(let J of bt5(Q,B)){if(!lZ(A[J],Q[J]))continue;let Y=B[J];if(Y===void 0)delete $[J];else $[J]=Y}return $}function bt5(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}i4();function kAA(A,Q,B,$){let J=wS(A),Y="\x1B[0m",Z="\x1B[34m",X="\x1B[90m",F="\x1B[2m",D=[];if(A.archived)D.push("\x1B[90m\x1B[2mArchived\x1B[0m");D.push(`${J}`),D.push(`\x1B[34m${Q}\x1B[0m`),D.push(`\x1B[90mamp threads continue ${A.id}\x1B[0m`);let G=14,V=7,U=new lY(G,V),K=new P9(42),E=new CI(G,V,G,V,G,V,0,A.agentMode??"smart","intensity","classic","braille",void 0,void 0,W0.default(),K);E.layout(L1.tight(G,V)),E.paint(U,0,0);let W=U.getBuffer().getCells(),H=0;for(let _=0;_<V;_++)if(W[_].some((T)=>T.char!==" ")){H=_;break}let z=V-1;for(let _=V-1;_>=0;_--)if(W[_].some((T)=>T.char!==" ")){z=_;break}function q(_,T){if(!_)return"";if(_.type==="rgb"){let{r:S,g:b,b:h}=_.value;if(B.getColorDepth()>=24)return`\x1B[${T?38:48};2;${S};${b};${h}m`;let x=oj(S,b,h);return`\x1B[${T?38:48};5;${x}m`}return""}let N=[];if(z>=H)for(let _=H;_<=z;_++){let T="";for(let S=0;S<G;S++){let b=W[_][S],h=b.char,x=q(b.style.fg,!0);T+=x+h+"\x1B[0m"}N.push(T)}let I=N.length,w=Math.max(I,D.length),C=Math.floor((w-I)/2),O=Math.floor((w-D.length)/2);for(let _=0;_<w;_++){let T=" ".repeat(G);if(_>=C&&_<C+I)T=N[_-C];let S=" ",b="";if(_>=O&&_<O+D.length)b=D[_-O];B.write(T+S+b+`
|
|
5400
|
+
`)}class _81 extends v0{analyzeContextForThread;listSkillsForThread;clientPool;completionBuilder;history;ideManager;configService;initialThreadID;showNeoWelcome;onNeoWelcomeDismissed;notificationService;onThreadArchived;initialUserInput;openThreadPickerOnStart;neoContext;constructor(A){super();this.analyzeContextForThread=A.analyzeContextForThread,this.listSkillsForThread=A.listSkillsForThread,this.clientPool=A.clientPool,this.completionBuilder=A.completionBuilder,this.history=A.history,this.ideManager=A.ideManager,this.configService=A.configService,this.initialThreadID=A.initialThreadID,this.showNeoWelcome=A.showNeoWelcome??!1,this.onNeoWelcomeDismissed=A.onNeoWelcomeDismissed,this.notificationService=A.notificationService,this.onThreadArchived=A.onThreadArchived,this.initialUserInput=A.initialUserInput,this.openThreadPickerOnStart=A.openThreadPickerOnStart??!1,this.neoContext=A.neoContext}createState(){return new SAA}}class SAA extends k0{editorController=new M8;commandPalette=new Us(this);commandRegistry=new c51;toastController=new O41;exitHintTimer=new vf(this,1000);ideStatus=new u8(this,{});threadNavigationHistory=new u51;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;titleSubscription=null;agentStateSubscription=null;currentTitleText=void 0;currentAgentBusy=!1;currentTerminalTitle=void 0;terminalTitleSpinner=new z6;terminalTitleSpinnerTimer=null;connectionErrorsSubscription=null;configSubscription=null;connectingToThreadID=null;switchThreadPickerVisible=!1;neoWelcomeVisible=!1;debugOverlayVisible=!1;focusDebugVisible=!1;unregisterCommands=null;pluginIntegration=null;configReloadSubscription=null;configReloadToastTimer=null;pendingConfigReloadToastType=null;lastConfigReloadToast=null;loadThreads=async()=>{return this.widget.neoContext.listThreads()};onSwitchThread=(A)=>{this.connectToExistingThread(A,{recordNavigation:!0})};sendFeedbackReport=async(A)=>oe4({configService:this.widget.configService,settingsFilePath:this.widget.neoContext.settingsFilePath},A);setThreadVisibility=(A,Q)=>{return re4({ampURL:this.widget.neoContext.ampURL,configService:this.widget.configService},A,Q)};archiveThread=async(A)=>{let Q=await so4({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let B=await to4({configService:this.widget.configService},A,Q);if(B instanceof Error)return B;return this.toastController.show(B.message,B.type,2000),null};removeThreadLabel=async(A,Q)=>{let B=await eo4({configService:this.widget.configService},A,Q);if(B instanceof Error)return B;return this.toastController.show(B.message,B.type,2000),null};initState(){if(oB.getInstance().interceptConsole(),this.widget.showNeoWelcome)this.neoWelcomeVisible=!0;if(this.connectionErrorsSubscription=this.widget.clientPool.connectionErrors$.subscribe(({threadID:Q,error:B})=>{if(j.error("Neo failed to connect to thread",{threadID:Q,error:B}),!Q)this.toastController.show(`Connection failed: ${B.message}`,"error",4000)}),this.configReloadSubscription=this.widget.configService.configReloadEvents.subscribe((Q)=>this.scheduleConfigReloadToast(Q)),this.configSubscription=this.widget.configService.config.subscribe((Q)=>{this.applyDraftThreadSettingsSeed(this.applySessionDefaultsToThreadSettings(L80(Q.settings)))}),this.ideStatus.subscribe(this.widget.ideManager.status),this.widget.openThreadPickerOnStart)this.switchThreadPickerVisible=!0;this.ensureDraftThreadSettingsInitialized();let A=this.widget.initialUserInput;if(this.widget.initialThreadID){let Q={};if(A)Q.initialUserInput=A;this.connectToExistingThread(this.widget.initialThreadID,Q)}else if(A)this.onNewThread([{type:"text",text:A}],this.widget.neoContext.sessionAgentMode);this.pluginIntegration=new f51({state:this,commandPalette:this.commandPalette,commandRegistry:this.commandRegistry,toastController:this.toastController,neoContext:this.widget.neoContext,getActiveThreadID:this.getActiveThreadID,appendToThread:this.appendPluginMessagesToThread}),this.pluginIntegration.init(),this.unregisterCommands=this.registerAppCommands(),queueMicrotask(()=>{if(!this.mounted)return;this.replayEarlyInputToEditor()})}replayEarlyInputToEditor(){let A=L4.instance.tuiInstance.getEarlyInputText();if(!A)return;this.editorController.insertText(A)}scheduleConfigReloadToast(A){if(this.pendingConfigReloadToastType=this.pendingConfigReloadToastType==="failed"||A.type==="failed"?"failed":"succeeded",this.configReloadToastTimer)clearTimeout(this.configReloadToastTimer);this.configReloadToastTimer=setTimeout(()=>{this.flushConfigReloadToast()},yt5),this.configReloadToastTimer.unref()}flushConfigReloadToast(){let A=this.pendingConfigReloadToastType;if(this.pendingConfigReloadToastType=null,this.configReloadToastTimer=null,!A)return;let Q=Date.now();if(this.lastConfigReloadToast?.type===A&&Q-this.lastConfigReloadToast.shownAt<xt5)return;switch(this.lastConfigReloadToast={type:A,shownAt:Q},A){case"succeeded":this.toastController.show("Config reloaded","success",1500);break;case"failed":this.toastController.show("Config reload failed","error",5000);break}}registerAppCommands(){let A=this,Q=this.widget.neoContext.pluginService?le4({pluginService:this.widget.neoContext.pluginService,workspaceRoot:this.widget.neoContext.workspaceRoot,logFilePath:this.widget.neoContext.logFilePath,toastController:this.toastController}):[],$=[{noun:"thread",verb:"switch",description:"Switch to existing thread",keywords:["recent","history","open","resume","change"],status:{type:"enabled"},sortBoost:100,run:(J,Y,Z)=>{J.pushWithDismiss((X)=>n31({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:X,onThreadSelected:Z}))}},{noun:"thread",verb:"switch to previous",description:"Switch to previous thread",keywords:["back"],get status(){return A.threadNavigationHistory.canNavigateBack()?{type:"enabled"}:{type:"disabled",reason:"Cannot use thread: switch to previous with no previous thread"}},run:(J,Y,Z)=>{A.navigateBack(),Z()}},_AA({configService:this.widget.configService,getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??void 0,toastController:this.toastController}),{noun:"thread",verb:"switch to next",description:"Switch to next thread",keywords:["forward"],get status(){return A.threadNavigationHistory.canNavigateForward()?{type:"enabled"}:{type:"disabled",reason:"Cannot use thread: switch to next with no next thread"}},run:(J,Y,Z)=>{A.navigateForward(),Z()}},{noun:"mcp",verb:"info",description:"Show MCP servers and tools",keywords:["servers","tools","plugins","integrations"],status:{type:"enabled"},run:(J,Y,Z)=>{J.push(new Z31({mcpServers:this.widget.neoContext.mcpServers,onDismiss:Z}))}},{noun:"toolbox",verb:"list",description:"List all toolboxes and their tools",keywords:["tools","toolbox"],status:{type:"enabled"},run:(J)=>{J.pushWithDismiss((Y)=>new W81({toolboxes:this.widget.neoContext.toolboxes,onDismiss:Y}))}},{noun:"news",verb:"open",description:"Open Amp Chronicle in browser",keywords:["chronicle","updates","blog","announcements"],status:{type:"enabled"},run:async(J,Y,Z)=>{try{await $6(Y,"https://ampcode.com/chronicle")}finally{Z()}}},{noun:"settings",verb:"open in editor",description:"Open CLI settings in $EDITOR",keywords:["config","preferences","edit"],status:{type:"enabled"},run:()=>{NJ(this.widget.neoContext.settingsFilePath).catch((J)=>{j.error("Failed to open settings file in editor",{error:J})})}},{noun:"IDE",verb:"connect",description:"Connect to an IDE",keywords:["vscode","cursor","jetbrains","editor","attach"],status:{type:"enabled"},run:(J,Y,Z)=>{J.pushWithDismiss((X)=>new J31({onCancel:X,onSelect:(F)=>{this.handleIdeSelection(F),Z()}}))}},{noun:"amp",verb:"help",description:"Show help & keyboard shortcuts",keywords:["shortcuts","keybindings","docs","manual","?"],status:{type:"enabled"},run:(J,Y,Z)=>{J.push(new o51({commands:AZ.of(Y).commands,onDismiss:Z}))}},{noun:"amp",verb:"show welcome",description:"Show the welcome message again",keywords:["intro","onboarding","getting started"],status:{type:"enabled"},run:(J,Y,Z)=>{Z(),A.showNeoWelcome()}},{noun:"amp",verb:"show version",description:"Show current Amp version",keywords:["about","release","build"],status:{type:"enabled"},run:(J,Y,Z)=>{J.push(new _A({header:"Amp Version",maxWidth:72,onDismiss:Z,child:new l({text:new M(q41({version:"0.0.1778057090-g80f5f1",buildTimestamp:"2026-05-06T08:48:27.049Z",buildType:"'release'"}))})}))}},{noun:"amp",verb:"reconnect",description:"Disconnect and reconnect the active thread",keywords:["connection","disconnect","socket","debug"],get status(){return A.activeThreadContext?.client.getThreadId()?{type:"enabled"}:{type:"disabled",reason:"Cannot use amp: reconnect with no active thread"}},run:(J,Y,Z)=>{A.reconnectActiveThread(),Z()}},{noun:"amp",verb:"disconnect",description:"Disconnect the active thread without reconnecting",keywords:["connection","socket","debug","dev"],get status(){return A.activeThreadContext?.client.getThreadId()?{type:"enabled"}:{type:"disabled",reason:"Cannot use amp: disconnect with no active thread"}},run:(J,Y,Z)=>{A.disconnectActiveThread(),Z()}},{noun:"amp",verb:"quit",description:"Exit application",keywords:["exit","close","leave","bye"],shortcut:v1.ctrl("c"),status:{type:"enabled"},run:(J,Y)=>{BA.maybeInvoke(Y,new Ub)}},...Q,...ve4(this.widget.neoContext.logFilePath)].map((J)=>this.commandRegistry.register(J));return()=>{for(let J of $)J()}}build(A){let Q=this.buildHints(),B=this.ideStatus.getValue(),$=new E81({initialAgentMode:this.widget.neoContext.sessionAgentMode,analyzeContextForThread:this.widget.analyzeContextForThread,listSkillsForThread:this.widget.listSkillsForThread,threadContext:this.activeThreadContext,draftThreadSettings:this.draftThreadSettings,editorController:this.editorController,history:this.widget.history,updateDraftThreadSettings:this.updateDraftThreadSettings,onNewThread:this.onNewThread,sendFeedbackReport:this.sendFeedbackReport,setThreadVisibility:this.setThreadVisibility,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:B}),J=r1.of(A),Z=[new p0({constraints:L1.tight(J.size.width,J.size.height),child:$})];if(this.commandPalette.isEnabled())Z.push(new c4({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new l51({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.neoWelcomeVisible)Z.push(n31({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:this.closeSwitchThreadPicker,onThreadSelected:this.closeSwitchThreadPicker}));if(this.neoWelcomeVisible)Z.push(new c4({debugLabel:"NeoWelcomeDialogOverlay",child:new I81({onDismiss:this.dismissNeoWelcome})}));if(Z.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.neoContext.isInternalUser)Z.push(new B31({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:ht.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)Z.push(new $31);return new y2({neoContext:this.widget.neoContext,child:new AZ({commandRegistry:this.commandRegistry,child:new oI({completionBuilder:this.widget.completionBuilder,child:new x5({controller:this.toastController,child:new BA({actions:this.buildActions(),child:new p5({debugLabel:"NeoAppShortcuts",shortcuts:new Map([[v1.ctrl("c"),new uV0],[v1.ctrl("o"),new hV0],[v1.alt("i"),new mV0],[v1.alt("p"),new PI],[v1.ctrl("t"),new pV0]]),child:new m4({debugLabel:"AppShellFocus",child:new j41({controller:this.toastController,child:new t4({children:Z})})})})})})})})})}buildActions(){let A=new G4(()=>{if(qJ.hasAnyCopyableSelection())return qJ.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new G4(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),B=new G4(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),$=new G4(()=>{return this.startNewDraftThread(),"handled"}),J=new G4(()=>{return L4.instance.stop(),"handled"}),Y=new G4((U)=>{if(!U.text)return"ignored";return L4.instance.tuiInstance.clipboard.writeText(U.text).then(()=>{this.toastController.show(U.successMessage,"success",2000)}).catch((K)=>{j.error("Failed to copy Neo text to clipboard",{error:K}),this.toastController.show(U.failureMessage,"error",2000)}),"handled"}),Z=new G4(()=>{return L4.instance.toggleFrameStatsOverlay(),"handled"}),X=new G4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),F=new G4(()=>{let U=this.activeThreadContext?.client.getThreadId();if(!U)return this.toastController.show("No active thread","error",2000),"handled";let K=px(U);return L4.instance.tuiInstance.clipboard.writeText(K).then(()=>{this.toastController.show("Copied log path to clipboard","success",2000)}).catch((E)=>{j.error("Failed to copy thread log path",{error:E,threadID:U,logPath:K}),this.toastController.show("Failed to copy log path","error",2000)}),"handled"}),D=new G4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";let U=this.activeThreadContext?.client.getThreadId();if(!U)return"handled";return this.prepareThreadIssueInvestigation(U),"handled"}),G=new G4(()=>{let U=this.activeThreadContext?.client.getThreadId();if(!U)return this.toastController.show("No active thread","error",2000),"handled";return this.toastController.show("Sending report...","success",2000),this.sendFeedbackReport(U).then(async(K)=>{try{await L4.instance.tuiInstance.clipboard.writeText(K),this.toastController.show("Sent report and copied report ID","success",3000)}catch(E){j.warn("Failed to copy report ID to clipboard",{error:E,reportID:K}),this.toastController.show(`Sent report ${K}`,"success",3000)}}).catch((K)=>{j.error("Failed to send report from debug overlay",{error:K,threadID:U}),this.toastController.show("Failed to send report","error",3000)}),"handled"}),V=new G4(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[uV0,A],[Dt,$],[Ub,J],[Q$,Y],[Ut,B],[hV0,Q],[mV0,X],[Kt,F],[Et,D],[Wt,G],[PI,Z],[pV0,V]])}startNewDraftThread(A={}){let Q=this.activeThreadContext?.client.getThreadId();if(this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(Q),this.setState(()=>{if(this.titleSubscription?.unsubscribe(),this.titleSubscription=null,this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=null,this.currentAgentBusy=!1,this.syncTerminalTitleSpinner(),this.clearTerminalTitle(),this.activeThreadContext=null,this.connectingToThreadID=null,A.hideDebugOverlay)this.debugOverlayVisible=!1}),A.prompt!==void 0)this.editorController.text=A.prompt}prepareThreadIssueInvestigation(A){try{this.startNewDraftThread({prompt:ft5({ampURL:this.widget.neoContext.ampURL,threadID:A,logPath:px(A)}),hideDebugOverlay:!0})}catch(Q){j.error("Failed to prepare thread issue investigation",{error:Q,threadID:A})}}closeCommandPaletteOnFocusLoss=(A)=>{if(A||!this.commandPalette.isEnabled())return;this.commandPalette.disable()};ensureDraftThreadSettingsInitialized(){if(this.hasDraftThreadSettingsSeed)return Promise.resolve();if(!this.draftThreadSettingsInitPromise)this.draftThreadSettingsInitPromise=this.initDraftThreadSettings();return this.draftThreadSettingsInitPromise}async initDraftThreadSettings(){try{let A=this.applySessionDefaultsToThreadSettings(await Cf(this.widget.configService));this.applyDraftThreadSettingsSeed(A)}catch(A){j.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applySessionDefaultsToThreadSettings(A){let Q=this.widget.neoContext.sessionAgentMode,B=A,$=zJ(Q),J=oD0(this.widget.neoContext,Q);if($!==void 0&&J!==void 0)B={...B,[$]:J};return aD0(B,{agentMode:Q,explicitEffort:this.widget.neoContext.explicitReasoningEffort,sessionState:this.widget.neoContext})}applyDraftThreadSettingsSeed(A){if(!this.mounted)return;if(!this.hasDraftThreadSettingsSeed){this.setState(()=>{this.hasDraftThreadSettingsSeed=!0,this.draftThreadSettings=TAA(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if(lZ(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=TAA(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(aI);if(this.exitHintTimer.isActive())A.add(Zb);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),L4.instance.stop();else this.exitHintTimer.activate()};dismissNeoWelcome=()=>{if(!this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!1}),this.widget.onNeoWelcomeDismissed?.()};showNeoWelcome=()=>{if(this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!0})};closeSwitchThreadPicker=()=>{if(!this.switchThreadPickerVisible)return;this.setState(()=>{this.switchThreadPickerVisible=!1})};updateDraftThreadSettings=(A)=>{this.setState(()=>{this.draftThreadSettings=A(this.draftThreadSettings)})};onNewThread=async(A,Q,B=null,$)=>{await this.ensureDraftThreadSettingsInitialized();let J=this.activeThreadContext?.client.getThreadId(),Y=A.find((X)=>X.type==="text");if(Y&&Y.type==="text")this.widget.history.add(Y.text,ht.cwd()),this.widget.history.reset();let Z=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,B?rY(B):void 0);this.sendUserMessage(Z,A,Q,$),this.threadNavigationHistory.recordNavigation(J),this.setActiveClient(Z)};sendUserMessage(A,Q,B,$){let J=KZ0(this.ideStatus.getValue());if($===void 0){A.client.sendUserMessage(Q,B,{userState:J});return}A.client.sendUserMessage(Q,B,{reasoningEffort:$,userState:J})}getActiveThreadID=()=>{return this.activeThreadContext?.client.getThreadId()??void 0};appendPluginMessagesToThread=async(A,Q)=>{let B=this.activeThreadContext;if(!B)throw Error("appendToThread is not available - no active thread");let $=B.client.getThreadId();if(Q&&$!==Q)throw Error("thread.append is only available for the active executor thread");for(let J of A)this.sendUserMessage(B,[{type:"text",text:J.content}])};async connectToExistingThread(A,Q={}){let B=this.activeThreadContext?.client.getThreadId();this.setState(()=>{this.connectingToThreadID=A});try{let $=await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.neoContext.observerOnly});if(this.setActiveClient($),Q.recordNavigation&&B!==A)this.threadNavigationHistory.recordNavigation(B);if(Q.initialUserInput)this.sendUserMessage($,[{type:"text",text:Q.initialUserInput}])}catch($){if(j.error("Failed to load thread",{error:$,threadID:A}),this.toastController.show(`Failed to load ${A}: ${$ instanceof Error?$.message:String($)}`,"error",4000),Q.rethrowError)throw $}finally{this.setState(()=>{this.connectingToThreadID=null})}}async navigateBack(){let A=this.threadNavigationHistory.startBackNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateForward(){let A=this.threadNavigationHistory.startForwardNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateToThread(A){try{await this.connectToExistingThread(A.targetThreadID,{rethrowError:!0})}catch{A.rollback()}}async reconnectActiveThread(){let A=this.activeThreadContext;if(!A){this.toastController.show("No active thread to reconnect","error",2000);return}let Q=A.client.getThreadId(),B=this.toastController.show(Q?`Reconnecting ${Q}...`:"Reconnecting thread...","warning",60000);try{let $=await this.widget.clientPool.reconnectClient(A.client);this.toastController.update(B,`Reconnected ${$}`,"success",2000)}catch($){j.error("Failed to reconnect thread",{error:$,threadID:Q});let J=$ instanceof Error?$.message:String($);this.toastController.update(B,`Reconnect failed: ${J}`,"error",4000)}}async disconnectActiveThread(){let A=this.activeThreadContext;if(!A){this.toastController.show("No active thread to disconnect","error",2000);return}let Q=A.client.getThreadId(),B=this.toastController.show(Q?`Disconnecting ${Q}...`:"Disconnecting thread...","warning",60000);try{let $=await this.widget.clientPool.disconnectClient(A.client);this.toastController.update(B,`Disconnected ${$}`,"success",2000)}catch($){j.error("Failed to disconnect thread",{error:$,threadID:Q});let J=$ instanceof Error?$.message:String($);this.toastController.update(B,`Disconnect failed: ${J}`,"error",4000)}}setActiveClient({client:A,observer:Q}){this.setState(()=>{this.activeThreadContext={client:A,observer:Q},this.subscribeTitleUpdates(Q),this.subscribeNotifications(Q)})}subscribeTitleUpdates(A){this.titleSubscription?.unsubscribe(),this.titleSubscription=A.title().subscribe({next:(Q)=>{this.currentTitleText=Q,this.updateTerminalTitle()}}),this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=A.agentState().subscribe({next:(Q)=>{let B=Q31(Q);if(B===this.currentAgentBusy)return;this.currentAgentBusy=B,this.syncTerminalTitleSpinner(),this.updateTerminalTitle()}})}subscribeNotifications(A){this.widget.notificationService.attach(A.agentState())}clearTerminalTitle(){this.currentTitleText=void 0,this.updateTerminalTitle()}updateTerminalTitle(){let A=ht.cwd().replace(ht.env.HOME||"","~"),Q=this.currentAgentBusy?`${this.terminalTitleSpinner.toBraille()} `:"",B=this.currentTitleText?`${Q}amp - ${this.currentTitleText} - ${A}`:this.currentAgentBusy?`${Q}amp - ${A}`:"";if(B===this.currentTerminalTitle)return;this.currentTerminalTitle=B,ht.stdout.write(NI(B))}syncTerminalTitleSpinner(){if(this.currentAgentBusy){if(this.terminalTitleSpinnerTimer)return;this.terminalTitleSpinnerTimer=setInterval(()=>{this.terminalTitleSpinner.step(),this.updateTerminalTitle()},200);return}if(this.terminalTitleSpinnerTimer)clearInterval(this.terminalTitleSpinnerTimer),this.terminalTitleSpinnerTimer=null}handleIdeSelection=async(A)=>{try{await this.widget.ideManager.connect(A)}catch(Q){j.error("Failed to connect to IDE",{error:Q});let B=Q instanceof Error?Q.message:String(Q);this.toastController.show(`IDE connection failed: ${B}`,"error",4000)}};dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.pluginIntegration?.dispose(),this.pluginIntegration=null,this.titleSubscription?.unsubscribe(),this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=null,this.terminalTitleSpinnerTimer)clearInterval(this.terminalTitleSpinnerTimer),this.terminalTitleSpinnerTimer=null;if(this.connectionErrorsSubscription?.unsubscribe(),this.configSubscription?.unsubscribe(),this.configSubscription=null,this.configReloadSubscription?.unsubscribe(),this.configReloadSubscription=null,this.configReloadToastTimer)clearTimeout(this.configReloadToastTimer),this.configReloadToastTimer=null;this.pendingConfigReloadToastType=null,this.widget.notificationService.detach(),this.toastController.dispose(),super.dispose()}hasBlockingTopLevelModal(){return this.switchThreadPickerVisible||this.neoWelcomeVisible||(this.pluginIntegration?.hasBlockingDialog()??!1)}}function TAA(A,Q,B){let $={...A};for(let J of bt5(Q,B)){if(!lZ(A[J],Q[J]))continue;let Y=B[J];if(Y===void 0)delete $[J];else $[J]=Y}return $}function bt5(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}i4();function kAA(A,Q,B,$){let J=wS(A),Y="\x1B[0m",Z="\x1B[34m",X="\x1B[90m",F="\x1B[2m",D=[];if(A.archived)D.push("\x1B[90m\x1B[2mArchived\x1B[0m");D.push(`${J}`),D.push(`\x1B[34m${Q}\x1B[0m`),D.push(`\x1B[90mamp threads continue ${A.id}\x1B[0m`);let G=14,V=7,U=new lY(G,V),K=new P9(42),E=new CI(G,V,G,V,G,V,0,A.agentMode??"smart","intensity","classic","braille",void 0,void 0,W0.default(),K);E.layout(L1.tight(G,V)),E.paint(U,0,0);let W=U.getBuffer().getCells(),H=0;for(let _=0;_<V;_++)if(W[_].some((T)=>T.char!==" ")){H=_;break}let z=V-1;for(let _=V-1;_>=0;_--)if(W[_].some((T)=>T.char!==" ")){z=_;break}function q(_,T){if(!_)return"";if(_.type==="rgb"){let{r:S,g:b,b:h}=_.value;if(B.getColorDepth()>=24)return`\x1B[${T?38:48};2;${S};${b};${h}m`;let x=oj(S,b,h);return`\x1B[${T?38:48};5;${x}m`}return""}let N=[];if(z>=H)for(let _=H;_<=z;_++){let T="";for(let S=0;S<G;S++){let b=W[_][S],h=b.char,x=q(b.style.fg,!0);T+=x+h+"\x1B[0m"}N.push(T)}let I=N.length,w=Math.max(I,D.length),C=Math.floor((w-I)/2),O=Math.floor((w-D.length)/2);for(let _=0;_<w;_++){let T=" ".repeat(G);if(_>=C&&_<C+I)T=N[_-C];let S=" ",b="";if(_>=O&&_<O+D.length)b=D[_-O];B.write(T+S+b+`
|
|
5401
5401
|
`)}if($)B.write(`
|
|
5402
5402
|
\x1B[90m${$}\x1B[0m
|
|
5403
5403
|
`)}n0();JG0();var ut5=2000;function vAA(A){let Q=!0,B=!0,$=A.configService.config.subscribe((V)=>{Q=V.settings["notifications.enabled"]??!0,B=V.settings["notifications.system.enabled"]!==!1}),J=0,Y=(V)=>{if(!Q)return;let U=Date.now();if(U-J<ut5)return;if(J=U,BR())return;if(YD0())ZD0();else tZ0(V)},Z=(V)=>{if(!Q||!B)return;if(BR()&&!Js()&&!Kf())return;process.stdout.write(lD(`\x1B]777;notify;Amp;${V}\x1B\\`))},X=null,F=null,D=()=>{X?.unsubscribe(),X=null,F=null};return{attach:(V)=>{D(),X=V.subscribe({next:(U)=>{try{let K=F!==null&&nB(F),E=F==="awaiting_approval";if(U==="awaiting_approval"&&!E)Y("requires-user-input"),Z("Waiting for approval");else if((U==="idle"||U==="error")&&(K||E))Y("idle"),Z("Agent is ready")}catch(K){j.debug("Neo notification handling failed",{error:K})}finally{F=U}},error:(U)=>{j.debug("Neo notification agent state stream errored",{error:U})}})},detach:D,unsubscribe(){D(),$.unsubscribe()}}}function ht5({initialUserInput:A,showNeoWelcome:Q,neoWelcomeDismissed:B}){if(Q)return{show:!0,markDismissedOnDismiss:!0};let $=!A&&!B;return{show:$,markDismissedOnDismiss:$}}async function gt5(A){await oQ((Q)=>sD0(Q,A,"interactive"))}async function yAA(A,Q={}){let{initialThreadID:B,initialUserInput:$,openThreadPickerOnStart:J=!1,observerOnly:Y=!1,initialAgentMode:Z,initialReasoningEffort:X,showNeoWelcome:F=!1}=Q,D=async(I)=>{let w=await A.getThreadFromServer(I);if(!w)return null;return mF0(w)},G=async(I)=>{let w=await A.getThreadFromServer(I);if(!w)throw Error(`Thread ${I} not found`);let C=await pY(I,A.configService,A.apiKey,{usesThreadActors:!0}),T=await _U({endpoint:A.rivetEndpoint}).threadActor.getOrCreate([I],{params:{wsToken:C.wsToken},createWithInput:{threadId:C.threadId,threadVersion:C.threadVersion,ownerUserId:C.ownerUserId,...C.agentMode?{agentMode:C.agentMode}:{}}}).fetch("/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({thread:wm4(w)}),skipReadyWait:!0});if(T.ok||T.status===409)return;throw Error(`Thread import failed (${T.status}): ${await T.text()}`)},V=new s11(A.rivetEndpoint,A.apiKey,A.configService,{clientID:DI.parse(`neo-${crypto.randomUUID()}`),toolService:A.toolService,skillService:A.skillService,requestPluginToolCall:(I)=>A.pluginService.event.toolCall(I),requestPluginToolResult:(I)=>A.pluginService.event.toolResult(I),pluginService:A.pluginService,invokeTool:async(I,w)=>{let C=typeof w.args==="object"&&w.args!==null?w.args:{},O=await UI({toolName:w.toolName,configService:A.configService,toolService:A.toolService,mcpService:A.mcpService,skillService:A.skillService,toolUseID:w.toolCallId,threadID:I});return A.toolService.invokeTool(w.toolName,{args:C},O)},persistLastThreadID:gt5,readFileSystemDirectory:A.readFileSystemDirectory},D,G),U=await jI(),K=ht5({initialUserInput:$,showNeoWelcome:F,neoWelcomeDismissed:U.neoWelcomeDismissed}),E={ampURL:A.ampURL,configService:A.configService,getThreadMarkdown:async(I)=>{let w=await A.getThreadFromServer(I);return w?xV(w):null},isInternalUser:A.isInternalUser,listThreads:A.listThreads,logFilePath:Ar,mcpServers:A.mcpService.servers,pluginPlatform:A.pluginPlatform,pluginService:A.pluginService,toolboxes:A.toolboxes,observerOnly:Y,sessionAgentMode:Z??U.agentMode,explicitReasoningEffort:X,lastReasoningEffortByMode:U.lastReasoningEffortByMode,lastSpeedByMode:U.lastSpeedByMode,settingsFilePath:A.settingsFilePath,splashOrbVisualStyle:Q.splashOrbVisualStyle??"neo",workspaceRoot:A.workspaceRoot},W=(I,w)=>{return Tx({ampURL:A.ampURL,configService:A.configService,threadID:I,signal:w})},H=(I,w)=>{return el4({ampURL:A.ampURL,configService:A.configService,threadID:I,signal:w})},z=new z41,q=vAA({configService:A.configService}),N=new Set;try{await Ys(new _81({clientPool:V,analyzeContextForThread:W,listSkillsForThread:H,completionBuilder:A.completionBuilder,history:new Kr,ideManager:z,configService:A.configService,initialThreadID:B,notificationService:q,initialUserInput:$,openThreadPickerOnStart:J,neoContext:E,showNeoWelcome:K.show,onNeoWelcomeDismissed:K.markDismissedOnDismiss?()=>{oQ($i4).catch((w)=>{j.warn("Failed to mark Neo welcome as dismissed",{error:w})})}:void 0,onThreadArchived:(w)=>{N.add(w)}}));let I=V.lastActiveObservingClient;if(I){let{client:w,observer:C}=I,O=w.getThreadId();if(O){let _={id:O,title:C.title().getValue(),agentMode:C.agentMode,archived:N.has(O)},T=`${A.ampURL.replace(/\/$/,"")}/threads/${O}`;kAA(_,T,process.stdout)}}}finally{process.stdout.write(NI("")),q.unsubscribe(),V.dispose(),await A.dispose?.()}process.exit(0)}Ld();FE();async function mt5(A,Q,B){let $=G20(A);if(!$.success)throw Error(`Invalid permission format: ${$.error.message}`);if($.data.length===0)throw Error("No permission entry provided");let J=mz($.data);if(!J.success){let F=J.error.issues.map((D)=>D.message).join(", ");throw Error(`Invalid permission entry: ${F}`)}let Y=await Q.get("permissions",B)??[],X=[$.data[0],...Y];await Q.set("permissions",X,B)}async function xAA(A){try{let Q=A.args.map((B)=>{if(/[\s/\\*?[\]{}()"]/.test(B))return`"${B}"`;return B}).join(" ");await mt5(Q,A.settings,A.scope),A.exit(0)}catch(Q){let B=Q instanceof Error?Q.message:"Unknown error";A.stderr.write(`Error: ${B}
|
|
@@ -6183,7 +6183,7 @@ ${J}`,Q);this.line=B,this.column=$,this.codeblock=J}}/*!
|
|
|
6183
6183
|
`),Y=[];for(let Z=0;Z<J.length;Z++){let D=J[Z].replace(/\b(SELECT|FROM|WHERE|GROUP BY|ORDER BY|HAVING|LIMIT|JOIN|LEFT JOIN|RIGHT JOIN|INNER JOIN|ON|AND|OR|AS|IN|NOT|NULL|IS|BETWEEN|LIKE|EXISTS|UNION|DISTINCT|COUNT|SUM|AVG|MIN|MAX|DATE|TIMESTAMP_TRUNC|TIMESTAMP_SUB|CURRENT_TIMESTAMP|INTERVAL|CASE|WHEN|THEN|ELSE|END|WITH|INSERT|UPDATE|DELETE|SET|VALUES|INTO|CREATE|ALTER|DROP|TRUE|FALSE|ASC|DESC)\b/gi,"\x00$1\x01").split(/(\x00[^\x01]+\x01)/);for(let G of D)if(G.startsWith("\x00")&&G.endsWith("\x01"))Y.push(new M(G.slice(1,-1),new y({color:$.app.keybind,bold:!0})));else Y.push(new M(G,new y({color:B.colorScheme.foreground})));if(Z<J.length-1)Y.push(new M(`
|
|
6184
6184
|
`))}return new p0({decoration:{color:B.colorScheme.background,border:l1.all(new i1($.app.keybind,1,"rounded"))},child:new u0({padding:H0.symmetric(0,1),child:new l({text:new M(void 0,void 0,Y)})})})}}class f21 extends Q8{chartData;highlightIndex;showAxes;colors;constructor({key:A,chartData:Q,highlightIndex:B=null,showAxes:$=!0,colors:J=xK0}){super(A?{key:A}:{});this.chartData=Q,this.highlightIndex=B,this.showAxes=$,this.colors=J}createRenderObject(){return new y21({chartData:this.chartData,highlightIndex:this.highlightIndex,showAxes:this.showAxes,colors:this.colors})}updateRenderObject(A){let Q=A;Q.chartData=this.chartData,Q.highlightIndex=this.highlightIndex,Q.showAxes=this.showAxes,Q.colors=this.colors,Q.markNeedsLayout()}}function s3A(A,Q,B,$,J,Y,Z){if(Y<=0)return null;switch(A){case"horizontal-bar":{let X=B;return X>=0&&X<Y?X:null}case"bar":case"stacked-bar":{let X=Z?m8:0,F=$-X;if(F<=0)return null;let D=Q-X;if(D<0||D>=F)return null;let G=Math.max(1,Math.floor(F/Y)),V=Math.floor(D/G);return V>=0&&V<Y?V:null}case"line":case"sparkline":case"stacked-area":{let X=Z?m8:0,F=$-X;if(F<=0)return null;let D=Math.max(0,Math.min(F-1,Q-X));if(Y===1)return 0;let G=F/(Y-1),V=Math.round(D/G);return Math.max(0,Math.min(Y-1,V))}default:return null}}function o63(A,Q,B,$,J,Y,Z,X){if(J<=0||Q<0||Q>=J)return null;let F=2;switch(A){case"horizontal-bar":return{x:Math.floor(B/2),y:Q};case"bar":case"stacked-bar":{let D=Y?m8:0,G=B-D,V=$-(Y?F:0);if(G<=0||V<=0)return null;let U=Math.max(1,Math.floor(G/J)),K=D+Q*U+Math.floor(U/2),E=X>0?Z/X:0,W=Math.round((1-E)*(V-1));return{x:K,y:W}}case"line":case"sparkline":case"stacked-area":{let D=Y?m8:0,G=B-D,V=$-(Y?F:0);if(G<=0||V<=0)return null;let U=J>1?D+Math.round(Q/(J-1)*(G-1)):D+Math.floor(G/2),K=X>0?Z/X:0,E=Math.round((1-K)*(V-1));return{x:U,y:E}}default:return null}}function r63(A){let Q=0;for(let B of A)for(let $ of B.points)if($.value>Q)Q=$.value;return Q||1}function s63(A,Q,B,$,J){if(B.length<=1){let X=$(A.value),F=A.meta?` (${A.meta})`:"";return A.label.length+2+X.length+F.length}let Y=A.label.length,Z=0;for(let X of B){let F=X.points[Q];if(!F)continue;Z+=F.value;let D=2+X.name.length+2+$(F.value).length;Y=Math.max(Y,D)}if(J){let X=9+$(Z).length;Y=Math.max(Y,X)}return Y}function t63(A,Q,B,$,J,Y,Z){let X;try{let E=k1.of(A),W=_0.of(A);X={foreground:E.colorScheme.foreground,background:E.colorScheme.background,border:W.app.keybind}}catch{X={foreground:{type:"index",value:15},background:{type:"index",value:0},border:{type:"index",value:7}}}let F=new y({color:X.foreground,bold:!0}),D=new y({color:X.foreground}),G=new y({color:X.foreground,dim:!0}),V=[],U=new y({color:X.foreground,underline:!0}),K=(E,W)=>new M(W,U,void 0,Gf(E),()=>{$6(A,E)});if($.length<=1){if(V.push(new M(`${Q.label}: `,F)),Q.link)V.push(K(Q.link,Y(Q.value)));else V.push(new M(Y(Q.value),D));if(Q.meta)V.push(new M(` (${Q.meta})`,G))}else{let E=Z==="stacked-bar"||Z==="stacked-area";V.push(new M(`${Q.label}
|
|
6185
6185
|
`,F));let W=0;for(let H=0;H<$.length;H++){let z=$[H],q=z.points[B];if(!q)continue;W+=q.value;let N=z.color??J[H%J.length]??X.foreground;if(V.push(new M("● ",new y({color:N}))),V.push(new M(`${z.name}: `,G)),q.link)V.push(K(q.link,Y(q.value)));else V.push(new M(Y(q.value),D));if(H<$.length-1||E)V.push(new M(`
|
|
6186
|
-
`))}if(E)V.push(new M(" ",G)),V.push(new M("Total: ",G)),V.push(new M(Y(W),D))}return new p0({decoration:{color:X.background,border:l1.all(new i1(X.border,1,"rounded"))},child:new l({text:new M(void 0,void 0,V)})})}n0();C3();U8();Q3();b7();T7();n9();n2();_B();yV();i4();Wv();dT();R1();n0();n9();class b21{enabled;configService;commandCounts=new Map;timer=null;bufferTimeMs=1e4;constructor(A,Q){this.enabled=A;this.configService=Q;this.startTimer()}startTimer(){this.timer=setInterval(()=>{this.flushEvents()},this.bufferTimeMs)}async flushEvents(){if(this.commandCounts.size===0||!await this.enabled())return;let A=Array.from(this.commandCounts.entries()).map(([Q,B])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1778049149-g4ce163"},parameters:{metadata:{count:B}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(A);await I80(Q,this.configService)}catch(Q){j.error("Failed to export command telemetry events",Q)}}async submit(A){if(!await this.enabled()||this.timer===null)return;let Q=this.commandCounts.get(A)||0;this.commandCounts.set(A,Q+1)}async dispose(){if(await this.flushEvents(),this.timer!==null)clearInterval(this.timer),this.timer=null}}class qw extends v0{props;constructor(A){super();this.props=A}createState(){return new t3A}}class t3A extends k0{_state;initState(){super.initState(),this._state=this.widget.props.initialState}build(A){let Q=(B)=>{this.setState(()=>{this._state=B(this._state)})};return this.widget.props.builder(A,Q,this._state)}}class e3A extends k0{controller=new M8;focusNode=new F6({debugLabel:"CommandArgumentPrompt",onKey:(A)=>{if(A.key==="Escape")return this.widget.props.onDismiss(),"handled";return"ignored"}});_textListener=()=>{this.setState(()=>{})};initState(){this.focusNode.requestFocus(),this.controller.addListener(this._textListener)}dispose(){this.controller.removeListener(this._textListener),this.focusNode.dispose()}build(A){let Q=_0.of(A),{colors:B,app:$}=Q,J=this.widget.props.isRequiredArg??!0,Y=this.controller.text.trim().length>0,Z=!J||Y,X=l1.all(new i1(B.foreground,1,"solid")),F=new rB({controller:this.controller,focusNode:this.focusNode,placeholder:this.widget.props.placeholder??"Enter command argument...",onSubmitted:(K)=>{let E=K.trim();if(J&&E.length===0)return;this.widget.props.onSubmit(E)},autofocus:!0,style:{textColor:B.foreground,border:null},maxLines:1}),D=new B1({children:[new p0({decoration:{color:B.background},child:new l({text:new M(">",new y({color:B.foreground}))})}),new S1({child:F})]}),G=new p0({padding:H0.symmetric(1,0),child:new l({text:this.widget.props.title?new M(this.widget.props.title,new y({color:$.command,bold:!0})):new M("",void 0,[new M("Command: ",new y({color:B.foreground})),new M(this.widget.props.commandName,new y({color:$.command,bold:!0}))])})}),V=[];if(Z)V.push(new M("Enter",new y({color:$.keybind}))),V.push(new M(" to submit, ",new y({color:B.foreground,dim:!0})));V.push(new M("Esc",new y({color:$.keybind}))),V.push(new M(" to cancel",new y({color:B.foreground,dim:!0})));let U=new p0({padding:H0.symmetric(1,0),child:new l({text:new M("",void 0,V)})});return new p0({decoration:{border:X,color:B.background},padding:H0.all(1),child:new b0({children:[G,new q0({height:1}),D,new Y5,U]})})}}class Be extends v0{props;constructor(A){super();this.props=A}createState(){return new e3A}}_B();class A8A extends k0{controller=new M8;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new F6({debugLabel:"CommandMultilinePrompt",onKey:(A)=>{if(A.key==="Escape"){if(this.isConfirmingClearInput){if(this.controller.clear(),this.setState(()=>{this.isConfirmingClearInput=!1,this.imageAttachments=[],this.imagePaths=[]}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;return"handled"}if(this.controller.text.trim()!==""||this.imageAttachments.length>0){if(this.setState(()=>{this.isConfirmingClearInput=!0}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout);return this.clearInputConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingClearInput=!1}),this.clearInputConfirmTimeout=null},1000),"handled"}return this.widget.props.onDismiss(),"handled"}return"ignored"}});initState(){if(this.widget.props.initialText)this.controller.text=this.widget.props.initialText;if(this.widget.props.initialImages)this.imageAttachments=[...this.widget.props.initialImages];this.focusNode.requestFocus()}_handleInsertImage=async(A)=>{if(this.imageAttachments.length>=r9)return!1;let Q=await BF(A);if(typeof Q==="object")return this.setState(()=>{this.imageAttachments=[...this.imageAttachments,Q],this.imagePaths=[...this.imagePaths,A]}),!1;return!1};_handlePopImage=()=>{if(this.imageAttachments.length>0)this.setState(()=>{this.imageAttachments=this.imageAttachments.slice(0,-1),this.imagePaths=this.imagePaths.slice(0,-1)})};dispose(){if(this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;this.focusNode.dispose(),this.controller.dispose()}build(A){let Q=_0.of(A),{colors:B,app:$}=Q,Y=r1.of(A).size.height,Z=Math.max(Math.floor(Y*0.5),10),X=new BG({controller:this.controller,triggers:[new MJ],completionBuilder:this.widget.props.completionBuilder,onSubmitted:(K)=>{this.widget.props.onSubmit(K.trim(),this.imageAttachments)},theme:B,placeholder:this.widget.props.placeholder||"Enter your message...",enabled:this.widget.props.enabled??!0,autofocus:!0,clipboard:L4.instance.tuiInstance.clipboard,autoOverlayPosition:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),F=new m4({debugLabel:"CommandMultilinePrompt",focusNode:this.focusNode,child:X}),D=new p0({constraints:new L1({maxHeight:Z}),padding:H0.symmetric(1,0),child:F}),G=new p0({padding:H0.symmetric(1,0),child:new l({text:new M("",void 0,[new M("Command: ",new y({color:B.foreground})),new M(this.widget.props.commandName,new y({color:$.command,bold:!0}))])})}),V=new p0({padding:H0.symmetric(1,0),child:new l({text:this.isConfirmingClearInput?new M("",void 0,[new M("Esc",new y({color:$.keybind})),new M(" again to clear input",new y({color:B.foreground,dim:!0}))]):new M("",void 0,[new M("Press ",new y({color:B.foreground,dim:!0})),new M("Enter",new y({color:$.keybind})),new M(" to submit, ",new y({color:B.foreground,dim:!0})),new M("Esc",new y({color:$.keybind})),new M(" to clear",new y({color:B.foreground,dim:!0}))])})}),U=[G,new q0({height:1}),new S1({child:D}),new q0({height:1}),V];return new p0({decoration:{border:l1.all(new i1(B.foreground,1,"solid")),color:B.background},padding:H0.all(1),child:new b0({children:U})})}}class u21 extends v0{props;constructor(A){super();this.props=A}createState(){return new A8A}}function Q8A(A){let B=new Date().getTime()-A.getTime(),$=Math.floor(B/60000),J=Math.floor(B/3600000),Y=Math.floor(B/86400000);if($<1)return"just now";if($<60)return`${$}m ago`;if(J<24)return`${J}h ago`;if(Y<7)return`${Y}d ago`;return A.toLocaleDateString()}class h21 extends I1{props;debugLabel="NewsFeedPicker";constructor(A){super();this.props=A}build(A){let Q=[...this.props.entries].sort((J,Y)=>Y.pubDate.getTime()-J.pubDate.getTime()),B=Math.max(0,...Q.map((J)=>Q8A(J.pubDate).length));return new p6({items:Q,getLabel:(J)=>J.title,onAccept:(J)=>this.props.onSelect?.(J),onDismiss:this.props.onDismiss,title:this.props.title,emptyStateText:"No news entries available",maxRenderItems:100,renderItem:(J,Y,Z,X)=>{let F=_0.of(X),{colors:D}=F,G=F.app,V=Y?G.selectionBackground:void 0,U=Y?G.selectionForeground:D.foreground,K=D.mutedForeground,E=(W,H)=>new q0({width:H,child:B1.end([new l({text:new M(W,new y({color:K}))})])});return new p0({decoration:V?{color:V}:void 0,padding:H0.symmetric(2,0),child:new B1({children:[new S1({child:new l({text:new M(J.title,new y({color:U})),overflow:"ellipsis",maxLines:1})}),new q0({width:2}),E(Q8A(J.pubDate),B)]})})}})}}class XB{static _instance=null;_allExpanded=!1;_listeners=new Set;static get instance(){if(!XB._instance)XB._instance=new XB;return XB._instance}get allExpanded(){return this._allExpanded}setAllExpanded(A){if(this._allExpanded===A)return;this._allExpanded=A,this._notifyListeners()}toggleAll(){this.setAllExpanded(!this._allExpanded)}addListener(A){return this._listeners.add(A),()=>this.removeListener(A)}removeListener(A){this._listeners.delete(A)}_notifyListeners(){for(let A of this._listeners)A()}}n0();class B8A extends k0{labels=[];isLoading=!0;currentQuery="";initState(){this.loadLabels()}async loadLabels(){try{let A=await this.widget.props.internalAPIClient.getUserLabels({query:""},{config:this.widget.props.configService});if(!A.ok){j.error("Failed to load labels",A.error),this.isLoading=!1,this.labels=[],this.setState();return}this.labels=A.result,this.isLoading=!1,this.setState()}catch(A){j.error("Failed to load labels",A),this.isLoading=!1,this.labels=[],this.setState()}}getValidationError(A){let Q=A.trim().toLowerCase();if(Q.length===0)return null;if(Q.length>32)return"Label name cannot exceed 32 characters";if(!/^[a-z0-9][a-z0-9-]*$/.test(Q))return"Label must be alphanumeric with hyphens, starting with a letter or number";return null}isValidLabelName(A){return this.getValidationError(A)===null&&A.length>0}getAvailableLabels(){let A=this.widget.props.currentLabels||[];return this.labels.filter((Q)=>!A.includes(Q.name))}shouldShowCreateMarker(A){if(A.length===0||this.isLoading)return!1;let Q=A.trim().toLowerCase();if(!this.isValidLabelName(Q))return!1;let B=this.widget.props.currentLabels||[],$=this.labels.some((Y)=>Y.name===Q),J=B.includes(Q);return!$&&!J}build(A){let Q=_0.of(A),{app:B,colors:$}=Q,J=this.currentQuery.trim().toLowerCase(),Y=J.length>0?this.getValidationError(J):null,Z=this.getAvailableLabels(),F=[{id:"__create__",name:"__create_placeholder__",createdAt:"",__isCreateMarker:!0},...Z];return new p6({title:"Add Label",items:F,getLabel:(D)=>{if("__isCreateMarker"in D)return this.currentQuery.trim().toLowerCase();return D.name},onAccept:(D)=>{if("__isCreateMarker"in D)this.widget.props.onSelect(this.currentQuery.trim().toLowerCase());else this.widget.props.onSelect(D.name)},onDismiss:this.widget.props.onDismiss,isLoading:this.isLoading,loadingText:"Loading labels...",emptyStateText:Y||"Type to create a new label",renderItem:(D,G,V,U)=>{let K=G?B.selectionBackground:void 0,E=G?B.selectionForeground:$.foreground;if("__isCreateMarker"in D&&D.__isCreateMarker){let H=this.currentQuery.trim().toLowerCase();return new p0({decoration:K?{color:K}:void 0,padding:H0.symmetric(2,0),child:new l({text:new M("",void 0,[new M("Create new label: ",new y({color:E})),new M(H,new y({color:E,bold:!0}))])})})}return new p0({decoration:K?{color:K}:void 0,padding:H0.symmetric(2,0),child:new l({text:new M(D.name,new y({color:E}))})})},filterItem:(D,G)=>{if(this.currentQuery!==G)this.currentQuery=G,setTimeout(()=>this.setState(),0);if("__isCreateMarker"in D&&D.__isCreateMarker)return this.shouldShowCreateMarker(G);let U=G.trim().toLowerCase();return U.length===0||D.name.includes(U)},sortItems:(D,G,V)=>{let U="__isCreateMarker"in D.item&&D.item.__isCreateMarker,K="__isCreateMarker"in G.item&&G.item.__isCreateMarker;if(U&&!K)return-1;if(!U&&K)return 1;return G.score-D.score}})}}class g21 extends v0{props;constructor(A){super();this.props=A}createState(){return new B8A}}class YG extends v0{props;constructor(A){super();this.props=A}createState(){return new $8A}}class $8A extends k0{_spinner=new z6;animationInterval=null;initState(){super.initState(),this.animationInterval=setInterval(()=>{this._spinner.step(),this.setState(()=>{})},100)}dispose(){if(this.animationInterval)clearInterval(this.animationInterval),this.animationInterval=null;super.dispose()}build(A){let Q=_0.of(A),{colors:B,app:$}=Q,J=l1.all(new i1(B.foreground,1,"solid")),Y=this._spinner.toBraille(),Z=new l({textAlign:"center",text:new M("",void 0,[new M(Y,new y({color:$.processing})),new M(" ",void 0),new M(this.widget.props.message,new y({color:B.foreground}))])}),F=[new S1({child:new b0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[Z]})})];if(this.widget.props.onAbort)F.push(new q0({height:2,child:new p0({padding:H0.symmetric(2,0),child:new l({text:new M("",new y({dim:!0}),[new M("Press ",new y({color:B.foreground})),new M("Esc",new y({color:B.info})),new M(" to cancel",new y({color:B.foreground}))])})})}));let D=new p0({decoration:new x4(B.background,J),child:new q0({width:60,height:7,child:new b0({mainAxisAlignment:"start",children:F})})});if(this.widget.props.onAbort)return new c4({debugLabel:"LoadingDialog",child:new m4({debugLabel:"LoadingDialog",autofocus:!0,onKey:(G)=>{if(G.key==="Escape")return this.widget.props.onAbort?.(),"handled";return"ignored"},child:D})});return D}}class XK extends v0{props;constructor(A){super();this.props=A}createState(){return new J8A}}class J8A extends k0{scrollController=new aA;scrollAreaKey=new J2("message-dialog-scroll-area");viewportHeight=20;initState(){super.initState(),this.scrollController.followMode=!1,this.scrollController.addListener(()=>{this.setState()})}dispose(){this.scrollController.dispose(),super.dispose()}isWidgetMessage(A){return A instanceof k2}resolveFooterStyle(A){if(this.isWidgetMessage(A))return A.footerStyle;return"default"}getViewportHeight(){let Q=this.scrollAreaKey.currentElement?.renderObject;if(Q&&"size"in Q){let B=Q.size;if(typeof B.height==="number"&&B.height>0)return this.viewportHeight=B.height,B.height}return this.viewportHeight}build(A){let Q=_0.of(A),B=this.widget.props.message,$=(()=>{if(this.isWidgetMessage(B))return{title:B.title,type:B.type};if(B instanceof Error&&B.name==="CommandCancelledError")return{title:"Cancelled",type:"info",description:B.message};if(B instanceof Error&&B.name==="CommandTimeoutError")return{title:"Timeout",type:"error",description:B.message};let G=uG0(B);return{title:G.title,type:G.type,description:G.description}})(),J=$.type==="error"?Q.app.toolError:Q.app.command,Y=l1.all(new i1(Q.colors.border,1,"solid")),Z=new p0({padding:H0.symmetric(1,0),child:new l({text:new M($.title,new y({color:J,bold:!0}))})}),X=this.isWidgetMessage(B)?B.widget:new l({text:new M($.description,new y({color:Q.colors.foreground})),selectable:!0}),F=new S1({child:new B8({child:new p0({padding:H0.symmetric(1,0),child:new B1({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new S1({child:new PA({controller:this.scrollController,autofocus:!0,child:X})}),new F2({controller:this.scrollController,thumbColor:Q.app.scrollbarThumb,trackColor:Q.app.scrollbarTrack,getScrollInfo:()=>{let G=this.scrollController.maxScrollExtent,V=this.scrollController.offset,U=this.getViewportHeight(),K=G+U;return{totalContentHeight:Math.max(K,0),viewportHeight:Math.max(U,1),scrollOffset:Math.max(V,0)}}})]})})})}),D=new p0({padding:H0.symmetric(1,0),child:new l({text:(()=>{if(this.widget.props.onRetry)return new M("",void 0,[new M("Press ",new y({color:Q.colors.foreground,dim:!0})),new M("R",new y({color:Q.app.keybind})),new M(" to retry, ",new y({color:Q.colors.foreground,dim:!0})),new M("Esc",new y({color:Q.app.keybind})),new M(" to cancel",new y({color:Q.colors.foreground,dim:!0}))]);let G=this.resolveFooterStyle(this.widget.props.message);if(G==="none")return new M("",new y({color:Q.colors.foreground,dim:!0}));if(G==="help"){let V=new y({color:Q.app.keybind}),U=new y({color:Q.colors.foreground,dim:!0});return new M("",U,[new M("Press ",U),new M("Escape",V),new M(" to close • Use ",U),new M("↑↓",V),new M(" or ",U),new M("j/k",V),new M(" to scroll",U)])}return new M("Press any key to close",new y({color:Q.colors.foreground,dim:!0,italic:!0}))})()})});return new c4({debugLabel:"MessageDialog",child:new t4({fit:"expand",children:[new f1({onClick:()=>{},child:new q0}),new m4({onKey:(G)=>{if(this.widget.props.onRetry&&G.key==="r")return this.widget.props.onRetry(),"handled";if(G.key==="Escape")return this.widget.props.onDismiss(),"handled";if(!this.widget.props.onRetry)return this.widget.props.onDismiss(),"handled";return"ignored"},autofocus:!1,child:new p0({decoration:{border:Y,color:Q.colors.background},padding:H0.all(1),child:new b0({mainAxisAlignment:"center",children:[Z,new q0({height:1}),F,D]})})})]})})}}C3();class Y8A extends v0{props;constructor(A){super();this.props=A}createState(){return new Z8A}}class Z8A extends k0{plugins=[];subscription=null;initState(){this.subscription=this.widget.props.pluginService.plugins.subscribe((A)=>{this.plugins=A,this.setState(()=>{})})}dispose(){this.subscription?.unsubscribe(),super.dispose()}getRelativePath(A){let Q=A.startsWith("file://")?A.slice(7):A,B=this.widget.props.cwd;if(Q.startsWith(B))return Q.slice(B.length+1);return Q}statusIcon(A){let Q=h8.default(),{colors:B,app:$}=Q;switch(A){case"loading":return{icon:"◌",color:B.warning};case"active":return{icon:"✓",color:$.toolSuccess};case"error":return{icon:"✗",color:$.toolError}}}build(A){let Q=_0.of(A),{app:B}=Q;if(this.plugins.length===0)return new l({text:new M("No plugins found.",new y({dim:!0}))});let $=[],J=this.plugins.length,Y=this.plugins.filter((F)=>F.status==="active").length,Z=this.plugins.reduce((F,D)=>F+D.registeredCommands.length,0),X=this.plugins.reduce((F,D)=>F+D.registeredTools.length,0);if($.push(new M(`${Y}/${J} ${E4(J,"plugin")} active`,new y({bold:!0}))),Z>0||X>0)$.push(new M(` (${Z} ${E4(Z,"command")}, ${X} ${E4(X,"tool")})`,new y({dim:!0})));$.push(new M(`
|
|
6186
|
+
`))}if(E)V.push(new M(" ",G)),V.push(new M("Total: ",G)),V.push(new M(Y(W),D))}return new p0({decoration:{color:X.background,border:l1.all(new i1(X.border,1,"rounded"))},child:new l({text:new M(void 0,void 0,V)})})}n0();C3();U8();Q3();b7();T7();n9();n2();_B();yV();i4();Wv();dT();R1();n0();n9();class b21{enabled;configService;commandCounts=new Map;timer=null;bufferTimeMs=1e4;constructor(A,Q){this.enabled=A;this.configService=Q;this.startTimer()}startTimer(){this.timer=setInterval(()=>{this.flushEvents()},this.bufferTimeMs)}async flushEvents(){if(this.commandCounts.size===0||!await this.enabled())return;let A=Array.from(this.commandCounts.entries()).map(([Q,B])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1778057090-g80f5f1"},parameters:{metadata:{count:B}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(A);await I80(Q,this.configService)}catch(Q){j.error("Failed to export command telemetry events",Q)}}async submit(A){if(!await this.enabled()||this.timer===null)return;let Q=this.commandCounts.get(A)||0;this.commandCounts.set(A,Q+1)}async dispose(){if(await this.flushEvents(),this.timer!==null)clearInterval(this.timer),this.timer=null}}class qw extends v0{props;constructor(A){super();this.props=A}createState(){return new t3A}}class t3A extends k0{_state;initState(){super.initState(),this._state=this.widget.props.initialState}build(A){let Q=(B)=>{this.setState(()=>{this._state=B(this._state)})};return this.widget.props.builder(A,Q,this._state)}}class e3A extends k0{controller=new M8;focusNode=new F6({debugLabel:"CommandArgumentPrompt",onKey:(A)=>{if(A.key==="Escape")return this.widget.props.onDismiss(),"handled";return"ignored"}});_textListener=()=>{this.setState(()=>{})};initState(){this.focusNode.requestFocus(),this.controller.addListener(this._textListener)}dispose(){this.controller.removeListener(this._textListener),this.focusNode.dispose()}build(A){let Q=_0.of(A),{colors:B,app:$}=Q,J=this.widget.props.isRequiredArg??!0,Y=this.controller.text.trim().length>0,Z=!J||Y,X=l1.all(new i1(B.foreground,1,"solid")),F=new rB({controller:this.controller,focusNode:this.focusNode,placeholder:this.widget.props.placeholder??"Enter command argument...",onSubmitted:(K)=>{let E=K.trim();if(J&&E.length===0)return;this.widget.props.onSubmit(E)},autofocus:!0,style:{textColor:B.foreground,border:null},maxLines:1}),D=new B1({children:[new p0({decoration:{color:B.background},child:new l({text:new M(">",new y({color:B.foreground}))})}),new S1({child:F})]}),G=new p0({padding:H0.symmetric(1,0),child:new l({text:this.widget.props.title?new M(this.widget.props.title,new y({color:$.command,bold:!0})):new M("",void 0,[new M("Command: ",new y({color:B.foreground})),new M(this.widget.props.commandName,new y({color:$.command,bold:!0}))])})}),V=[];if(Z)V.push(new M("Enter",new y({color:$.keybind}))),V.push(new M(" to submit, ",new y({color:B.foreground,dim:!0})));V.push(new M("Esc",new y({color:$.keybind}))),V.push(new M(" to cancel",new y({color:B.foreground,dim:!0})));let U=new p0({padding:H0.symmetric(1,0),child:new l({text:new M("",void 0,V)})});return new p0({decoration:{border:X,color:B.background},padding:H0.all(1),child:new b0({children:[G,new q0({height:1}),D,new Y5,U]})})}}class Be extends v0{props;constructor(A){super();this.props=A}createState(){return new e3A}}_B();class A8A extends k0{controller=new M8;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new F6({debugLabel:"CommandMultilinePrompt",onKey:(A)=>{if(A.key==="Escape"){if(this.isConfirmingClearInput){if(this.controller.clear(),this.setState(()=>{this.isConfirmingClearInput=!1,this.imageAttachments=[],this.imagePaths=[]}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;return"handled"}if(this.controller.text.trim()!==""||this.imageAttachments.length>0){if(this.setState(()=>{this.isConfirmingClearInput=!0}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout);return this.clearInputConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingClearInput=!1}),this.clearInputConfirmTimeout=null},1000),"handled"}return this.widget.props.onDismiss(),"handled"}return"ignored"}});initState(){if(this.widget.props.initialText)this.controller.text=this.widget.props.initialText;if(this.widget.props.initialImages)this.imageAttachments=[...this.widget.props.initialImages];this.focusNode.requestFocus()}_handleInsertImage=async(A)=>{if(this.imageAttachments.length>=r9)return!1;let Q=await BF(A);if(typeof Q==="object")return this.setState(()=>{this.imageAttachments=[...this.imageAttachments,Q],this.imagePaths=[...this.imagePaths,A]}),!1;return!1};_handlePopImage=()=>{if(this.imageAttachments.length>0)this.setState(()=>{this.imageAttachments=this.imageAttachments.slice(0,-1),this.imagePaths=this.imagePaths.slice(0,-1)})};dispose(){if(this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;this.focusNode.dispose(),this.controller.dispose()}build(A){let Q=_0.of(A),{colors:B,app:$}=Q,Y=r1.of(A).size.height,Z=Math.max(Math.floor(Y*0.5),10),X=new BG({controller:this.controller,triggers:[new MJ],completionBuilder:this.widget.props.completionBuilder,onSubmitted:(K)=>{this.widget.props.onSubmit(K.trim(),this.imageAttachments)},theme:B,placeholder:this.widget.props.placeholder||"Enter your message...",enabled:this.widget.props.enabled??!0,autofocus:!0,clipboard:L4.instance.tuiInstance.clipboard,autoOverlayPosition:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),F=new m4({debugLabel:"CommandMultilinePrompt",focusNode:this.focusNode,child:X}),D=new p0({constraints:new L1({maxHeight:Z}),padding:H0.symmetric(1,0),child:F}),G=new p0({padding:H0.symmetric(1,0),child:new l({text:new M("",void 0,[new M("Command: ",new y({color:B.foreground})),new M(this.widget.props.commandName,new y({color:$.command,bold:!0}))])})}),V=new p0({padding:H0.symmetric(1,0),child:new l({text:this.isConfirmingClearInput?new M("",void 0,[new M("Esc",new y({color:$.keybind})),new M(" again to clear input",new y({color:B.foreground,dim:!0}))]):new M("",void 0,[new M("Press ",new y({color:B.foreground,dim:!0})),new M("Enter",new y({color:$.keybind})),new M(" to submit, ",new y({color:B.foreground,dim:!0})),new M("Esc",new y({color:$.keybind})),new M(" to clear",new y({color:B.foreground,dim:!0}))])})}),U=[G,new q0({height:1}),new S1({child:D}),new q0({height:1}),V];return new p0({decoration:{border:l1.all(new i1(B.foreground,1,"solid")),color:B.background},padding:H0.all(1),child:new b0({children:U})})}}class u21 extends v0{props;constructor(A){super();this.props=A}createState(){return new A8A}}function Q8A(A){let B=new Date().getTime()-A.getTime(),$=Math.floor(B/60000),J=Math.floor(B/3600000),Y=Math.floor(B/86400000);if($<1)return"just now";if($<60)return`${$}m ago`;if(J<24)return`${J}h ago`;if(Y<7)return`${Y}d ago`;return A.toLocaleDateString()}class h21 extends I1{props;debugLabel="NewsFeedPicker";constructor(A){super();this.props=A}build(A){let Q=[...this.props.entries].sort((J,Y)=>Y.pubDate.getTime()-J.pubDate.getTime()),B=Math.max(0,...Q.map((J)=>Q8A(J.pubDate).length));return new p6({items:Q,getLabel:(J)=>J.title,onAccept:(J)=>this.props.onSelect?.(J),onDismiss:this.props.onDismiss,title:this.props.title,emptyStateText:"No news entries available",maxRenderItems:100,renderItem:(J,Y,Z,X)=>{let F=_0.of(X),{colors:D}=F,G=F.app,V=Y?G.selectionBackground:void 0,U=Y?G.selectionForeground:D.foreground,K=D.mutedForeground,E=(W,H)=>new q0({width:H,child:B1.end([new l({text:new M(W,new y({color:K}))})])});return new p0({decoration:V?{color:V}:void 0,padding:H0.symmetric(2,0),child:new B1({children:[new S1({child:new l({text:new M(J.title,new y({color:U})),overflow:"ellipsis",maxLines:1})}),new q0({width:2}),E(Q8A(J.pubDate),B)]})})}})}}class XB{static _instance=null;_allExpanded=!1;_listeners=new Set;static get instance(){if(!XB._instance)XB._instance=new XB;return XB._instance}get allExpanded(){return this._allExpanded}setAllExpanded(A){if(this._allExpanded===A)return;this._allExpanded=A,this._notifyListeners()}toggleAll(){this.setAllExpanded(!this._allExpanded)}addListener(A){return this._listeners.add(A),()=>this.removeListener(A)}removeListener(A){this._listeners.delete(A)}_notifyListeners(){for(let A of this._listeners)A()}}n0();class B8A extends k0{labels=[];isLoading=!0;currentQuery="";initState(){this.loadLabels()}async loadLabels(){try{let A=await this.widget.props.internalAPIClient.getUserLabels({query:""},{config:this.widget.props.configService});if(!A.ok){j.error("Failed to load labels",A.error),this.isLoading=!1,this.labels=[],this.setState();return}this.labels=A.result,this.isLoading=!1,this.setState()}catch(A){j.error("Failed to load labels",A),this.isLoading=!1,this.labels=[],this.setState()}}getValidationError(A){let Q=A.trim().toLowerCase();if(Q.length===0)return null;if(Q.length>32)return"Label name cannot exceed 32 characters";if(!/^[a-z0-9][a-z0-9-]*$/.test(Q))return"Label must be alphanumeric with hyphens, starting with a letter or number";return null}isValidLabelName(A){return this.getValidationError(A)===null&&A.length>0}getAvailableLabels(){let A=this.widget.props.currentLabels||[];return this.labels.filter((Q)=>!A.includes(Q.name))}shouldShowCreateMarker(A){if(A.length===0||this.isLoading)return!1;let Q=A.trim().toLowerCase();if(!this.isValidLabelName(Q))return!1;let B=this.widget.props.currentLabels||[],$=this.labels.some((Y)=>Y.name===Q),J=B.includes(Q);return!$&&!J}build(A){let Q=_0.of(A),{app:B,colors:$}=Q,J=this.currentQuery.trim().toLowerCase(),Y=J.length>0?this.getValidationError(J):null,Z=this.getAvailableLabels(),F=[{id:"__create__",name:"__create_placeholder__",createdAt:"",__isCreateMarker:!0},...Z];return new p6({title:"Add Label",items:F,getLabel:(D)=>{if("__isCreateMarker"in D)return this.currentQuery.trim().toLowerCase();return D.name},onAccept:(D)=>{if("__isCreateMarker"in D)this.widget.props.onSelect(this.currentQuery.trim().toLowerCase());else this.widget.props.onSelect(D.name)},onDismiss:this.widget.props.onDismiss,isLoading:this.isLoading,loadingText:"Loading labels...",emptyStateText:Y||"Type to create a new label",renderItem:(D,G,V,U)=>{let K=G?B.selectionBackground:void 0,E=G?B.selectionForeground:$.foreground;if("__isCreateMarker"in D&&D.__isCreateMarker){let H=this.currentQuery.trim().toLowerCase();return new p0({decoration:K?{color:K}:void 0,padding:H0.symmetric(2,0),child:new l({text:new M("",void 0,[new M("Create new label: ",new y({color:E})),new M(H,new y({color:E,bold:!0}))])})})}return new p0({decoration:K?{color:K}:void 0,padding:H0.symmetric(2,0),child:new l({text:new M(D.name,new y({color:E}))})})},filterItem:(D,G)=>{if(this.currentQuery!==G)this.currentQuery=G,setTimeout(()=>this.setState(),0);if("__isCreateMarker"in D&&D.__isCreateMarker)return this.shouldShowCreateMarker(G);let U=G.trim().toLowerCase();return U.length===0||D.name.includes(U)},sortItems:(D,G,V)=>{let U="__isCreateMarker"in D.item&&D.item.__isCreateMarker,K="__isCreateMarker"in G.item&&G.item.__isCreateMarker;if(U&&!K)return-1;if(!U&&K)return 1;return G.score-D.score}})}}class g21 extends v0{props;constructor(A){super();this.props=A}createState(){return new B8A}}class YG extends v0{props;constructor(A){super();this.props=A}createState(){return new $8A}}class $8A extends k0{_spinner=new z6;animationInterval=null;initState(){super.initState(),this.animationInterval=setInterval(()=>{this._spinner.step(),this.setState(()=>{})},100)}dispose(){if(this.animationInterval)clearInterval(this.animationInterval),this.animationInterval=null;super.dispose()}build(A){let Q=_0.of(A),{colors:B,app:$}=Q,J=l1.all(new i1(B.foreground,1,"solid")),Y=this._spinner.toBraille(),Z=new l({textAlign:"center",text:new M("",void 0,[new M(Y,new y({color:$.processing})),new M(" ",void 0),new M(this.widget.props.message,new y({color:B.foreground}))])}),F=[new S1({child:new b0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[Z]})})];if(this.widget.props.onAbort)F.push(new q0({height:2,child:new p0({padding:H0.symmetric(2,0),child:new l({text:new M("",new y({dim:!0}),[new M("Press ",new y({color:B.foreground})),new M("Esc",new y({color:B.info})),new M(" to cancel",new y({color:B.foreground}))])})})}));let D=new p0({decoration:new x4(B.background,J),child:new q0({width:60,height:7,child:new b0({mainAxisAlignment:"start",children:F})})});if(this.widget.props.onAbort)return new c4({debugLabel:"LoadingDialog",child:new m4({debugLabel:"LoadingDialog",autofocus:!0,onKey:(G)=>{if(G.key==="Escape")return this.widget.props.onAbort?.(),"handled";return"ignored"},child:D})});return D}}class XK extends v0{props;constructor(A){super();this.props=A}createState(){return new J8A}}class J8A extends k0{scrollController=new aA;scrollAreaKey=new J2("message-dialog-scroll-area");viewportHeight=20;initState(){super.initState(),this.scrollController.followMode=!1,this.scrollController.addListener(()=>{this.setState()})}dispose(){this.scrollController.dispose(),super.dispose()}isWidgetMessage(A){return A instanceof k2}resolveFooterStyle(A){if(this.isWidgetMessage(A))return A.footerStyle;return"default"}getViewportHeight(){let Q=this.scrollAreaKey.currentElement?.renderObject;if(Q&&"size"in Q){let B=Q.size;if(typeof B.height==="number"&&B.height>0)return this.viewportHeight=B.height,B.height}return this.viewportHeight}build(A){let Q=_0.of(A),B=this.widget.props.message,$=(()=>{if(this.isWidgetMessage(B))return{title:B.title,type:B.type};if(B instanceof Error&&B.name==="CommandCancelledError")return{title:"Cancelled",type:"info",description:B.message};if(B instanceof Error&&B.name==="CommandTimeoutError")return{title:"Timeout",type:"error",description:B.message};let G=uG0(B);return{title:G.title,type:G.type,description:G.description}})(),J=$.type==="error"?Q.app.toolError:Q.app.command,Y=l1.all(new i1(Q.colors.border,1,"solid")),Z=new p0({padding:H0.symmetric(1,0),child:new l({text:new M($.title,new y({color:J,bold:!0}))})}),X=this.isWidgetMessage(B)?B.widget:new l({text:new M($.description,new y({color:Q.colors.foreground})),selectable:!0}),F=new S1({child:new B8({child:new p0({padding:H0.symmetric(1,0),child:new B1({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new S1({child:new PA({controller:this.scrollController,autofocus:!0,child:X})}),new F2({controller:this.scrollController,thumbColor:Q.app.scrollbarThumb,trackColor:Q.app.scrollbarTrack,getScrollInfo:()=>{let G=this.scrollController.maxScrollExtent,V=this.scrollController.offset,U=this.getViewportHeight(),K=G+U;return{totalContentHeight:Math.max(K,0),viewportHeight:Math.max(U,1),scrollOffset:Math.max(V,0)}}})]})})})}),D=new p0({padding:H0.symmetric(1,0),child:new l({text:(()=>{if(this.widget.props.onRetry)return new M("",void 0,[new M("Press ",new y({color:Q.colors.foreground,dim:!0})),new M("R",new y({color:Q.app.keybind})),new M(" to retry, ",new y({color:Q.colors.foreground,dim:!0})),new M("Esc",new y({color:Q.app.keybind})),new M(" to cancel",new y({color:Q.colors.foreground,dim:!0}))]);let G=this.resolveFooterStyle(this.widget.props.message);if(G==="none")return new M("",new y({color:Q.colors.foreground,dim:!0}));if(G==="help"){let V=new y({color:Q.app.keybind}),U=new y({color:Q.colors.foreground,dim:!0});return new M("",U,[new M("Press ",U),new M("Escape",V),new M(" to close • Use ",U),new M("↑↓",V),new M(" or ",U),new M("j/k",V),new M(" to scroll",U)])}return new M("Press any key to close",new y({color:Q.colors.foreground,dim:!0,italic:!0}))})()})});return new c4({debugLabel:"MessageDialog",child:new t4({fit:"expand",children:[new f1({onClick:()=>{},child:new q0}),new m4({onKey:(G)=>{if(this.widget.props.onRetry&&G.key==="r")return this.widget.props.onRetry(),"handled";if(G.key==="Escape")return this.widget.props.onDismiss(),"handled";if(!this.widget.props.onRetry)return this.widget.props.onDismiss(),"handled";return"ignored"},autofocus:!1,child:new p0({decoration:{border:Y,color:Q.colors.background},padding:H0.all(1),child:new b0({mainAxisAlignment:"center",children:[Z,new q0({height:1}),F,D]})})})]})})}}C3();class Y8A extends v0{props;constructor(A){super();this.props=A}createState(){return new Z8A}}class Z8A extends k0{plugins=[];subscription=null;initState(){this.subscription=this.widget.props.pluginService.plugins.subscribe((A)=>{this.plugins=A,this.setState(()=>{})})}dispose(){this.subscription?.unsubscribe(),super.dispose()}getRelativePath(A){let Q=A.startsWith("file://")?A.slice(7):A,B=this.widget.props.cwd;if(Q.startsWith(B))return Q.slice(B.length+1);return Q}statusIcon(A){let Q=h8.default(),{colors:B,app:$}=Q;switch(A){case"loading":return{icon:"◌",color:B.warning};case"active":return{icon:"✓",color:$.toolSuccess};case"error":return{icon:"✗",color:$.toolError}}}build(A){let Q=_0.of(A),{app:B}=Q;if(this.plugins.length===0)return new l({text:new M("No plugins found.",new y({dim:!0}))});let $=[],J=this.plugins.length,Y=this.plugins.filter((F)=>F.status==="active").length,Z=this.plugins.reduce((F,D)=>F+D.registeredCommands.length,0),X=this.plugins.reduce((F,D)=>F+D.registeredTools.length,0);if($.push(new M(`${Y}/${J} ${E4(J,"plugin")} active`,new y({bold:!0}))),Z>0||X>0)$.push(new M(` (${Z} ${E4(Z,"command")}, ${X} ${E4(X,"tool")})`,new y({dim:!0})));$.push(new M(`
|
|
6187
6187
|
|
|
6188
6188
|
`));for(let F of this.plugins){let{icon:D,color:G}=this.statusIcon(F.status),V=this.getRelativePath(F.uri.toString());if($.push(new M(`${D} `,new y({color:G}))),$.push(new M(V,new y({bold:!0}))),$.push(new M(` ${F.status}`,new y({dim:!0}))),$.push(new M(`
|
|
6189
6189
|
`)),F.status==="active"&&F.registeredEvents.length>0)$.push(new M(" Events: ",new y({dim:!0}))),$.push(new M(F.registeredEvents.join(", "),new y({color:B.link}))),$.push(new M(`
|
|
@@ -6361,7 +6361,7 @@ ${s.content||""}`:s.content||"",f0=[],$1=s.baseDir.startsWith("file://")?GE0(s.b
|
|
|
6361
6361
|
`)}function l9A(A,Q){A.command("usage").description("Show your current Amp usage and credit balance").action(async(B,$)=>{let J=$.optsWithGlobals(),Y=await Q(J),Z=await Y.settings.get("proxy"),X=T44({settings:{url:Y.ampURL,proxy:Z},secrets:{getToken:(D,G)=>Y.secrets.get(D,G)}}),F=await VA.userDisplayBalanceInfo({},{config:X});if(!F.ok){if(F.error.code==="auth-required")process.stderr.write(s0.red("Error: ")+"You must be logged in to view usage. Run `amp login` first.\n"),process.exit(1);process.stderr.write(s0.red("Error: ")+F.error.message+`
|
|
6362
6362
|
`),process.exit(1)}process.stdout.write(await N23(F.result.displayText)+`
|
|
6363
6363
|
`),process.exit(0)})}var mB3=ge.join(cZ,"logs","headless.log"),dQ1=ge.join(Ff,"device-id.json"),pB3=`cli-tui-${q$A(16).toString("hex")}`;async function dB3(){for(let A of oM)try{if((await A.listConfigs()).length>0)return A}catch(Q){j.debug("Failed to detect query-based IDE integration",{ideName:A.ideName,error:Q})}return}try{if(process.platform==="win32")await Promise.resolve().then(() => I4(Eu(),1))}catch{}if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(A){SJ.write(`Failed to change directory to ${process.env.AMP_PWD}: ${A}
|
|
6364
|
-
`)}function cB3(A){process.emitWarning=(Q,B,$,J)=>{let Y=typeof Q==="string"?Q:Q.message||String(Q),Z=B||"Warning",X=!1;A.warn(Y,{name:Z,code:$})}}function u2(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")$Y("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli")$Y("experimental.agentMode",Q.mode);if(A.getOptionValueSourceWithGlobals("model")==="cli"&&Q.model)$Y("internal.model",nB3(Q.model))}function U$A(A){let Q=A.indexOf(":");if(Q===-1)throw new J4(`Invalid model format "${A}". Expected "provider:model" (e.g., "anthropic:claude-sonnet-4-20250514").`,1);let B=A.slice(0,Q).trim(),$=A.slice(Q+1).trim();if(!B||!$)throw new J4(`Invalid model format "${A}". Both provider and model must be non-empty (e.g., "anthropic:claude-sonnet-4-20250514").`,1)}function lB3(A){if(A===void 0)return;let Q=A.trim();if(z44(Q))return Q;throw new J4(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function iB3(A,Q){if(dF(A,Q))return;let B=u$(A)?.levels,$=B?` Allowed for ${A}: ${B.join(", ")}.`:"";throw new J4(`Reasoning effort "${Q}" is not available for ${A} mode.${$}`,1)}function nB3(A){if(!A.includes("="))return U$A(A),A;let Q={};for(let B of A.split(",")){let $=B.trim();if(!$)continue;let J=$.indexOf("=");if(J===-1)throw new J4(`Invalid mode-specific model entry "${$}". Expected "mode=provider:model" (e.g., "smart=anthropic:claude-sonnet-4-20250514").`,1);let Y=$.slice(0,J).trim(),Z=$.slice(J+1).trim();if(!Y)throw new J4(`Missing mode name in "${$}". Expected "mode=provider:model".`,1);if(!Z)throw new J4(`Missing model value for mode "${Y}". Expected "${Y}=provider:model".`,1);U$A(Z),Q[Y]=Z}if(Object.keys(Q).length===0)throw new J4("No valid model overrides found in --model flag value.",1);return Q}function aB3(A,Q){if(A.getOptionValueSourceWithGlobals("sp")==="cli"&&Q.sp)return Q.sp;if(A.getOptionValueSourceWithGlobals("systemPrompt")==="cli"&&Q.systemPrompt)return Q.systemPrompt;return}async function oB3(A){try{return await N$A(A,"utf-8")}catch{return A}}async function cQ1(A,Q,B){let $=aB3(A,Q);if(!$)return;let J=xA(B)?B.features:[],Y=xA(B)?B.user.email:void 0;if(!BW0(J,MB.HARNESS_SYSTEM_PROMPT)&&!(Y&&P7(Y)))throw new J4("You are not allowed to do this.",1);$Y("systemPrompt",await oB3($))}function BW0(A,Q){return A?.some((B)=>B.name===Q&&B.enabled)??!1}function rB3(A){return A!=="pending"}function YP(A){if(!xA(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function sB3(A){let Q=YP(A);if(Q)return Q.id;if(pF(A))throw Error(A.error.message);throw Error("unreachable")}function tB3(A){try{let Q=new URL(A);return Q.hostname==="localhost"||Q.hostname==="127.0.0.1"}catch{return A.includes("localhost")||A.includes("127.0.0.1")}}function eB3(A){let $=tB3(A)?"Run `pnpm dev` to start the local server, then try again.":"Check your network connection or the server URL and try again.";return new J4(`Couldn't connect to the Amp server at ${A}.`,1,$)}function me(A,Q){let B=Pe0(Error(A.error.message));if(B.message===F7.networkOffline||B.message===F7.networkTimeout)return eB3(Q);if(B.message!==F7.internalBug)return new J4(B.message,1,B.suggestion);return new J4(A.error.message.replace(/^Error: /,""),1)}var K$A=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} notification alerts (audio locally, terminal bell over SSH; enabled by default when not in execute 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",default:process.env.AMP_SETTINGS_FILE??nX,description:`Custom settings file path (overrides the default location ${nX})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(j).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${Ar})`},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","new-ui"],hidden:!0,deprecated:!0},{name:"dangerouslyAllowAll",long:"dangerously-allow-all",type:"switch",default:!1,description:"Disable all command confirmation prompts (agent will execute all commands without asking)"},{name:"jetbrains",long:"jetbrains",type:"flag",default:X9(),description:(A)=>A?"Enable JetBrains integration. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration"},{name:"ide",long:"ide",type:"flag",default:!0,description:(A)=>A?"Enable IDE connection (default). When enabled, Amp automatically includes your open IDE's file and text selection with every message.":"Disable IDE connection"},{name:"interactive",long:"interactive",type:"flag",description:(A)=>A?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0},{name:"mcpConfig",long:"mcp-config",type:"option",description:"JSON configuration or file path for MCP servers to merge with existing settings"},{name:"mode",long:"mode",short:"m",type:"option",default:nM.SMART.key,description:`Set the agent mode (${f$({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:Array.from(new Set(f$().map((A)=>A.mode))),hiddenChoices:["frontier"]},{name:"effort",long:"effort",type:"option",description:"Set reasoning effort for the new thread, when supported by the selected mode",choices:["none","minimal","low","medium","high","xhigh","max"]},{name:"takeMeBack",long:"take-me-back",type:"switch",description:"Disable thread-actors mode and use the legacy worker runtime",hidden:!0},{name:"neoOrb",long:"neo-orb",type:"switch",description:"Use the experimental Neo splash orb",hidden:!0},{name:"showWelcome",long:"show-welcome",type:"switch",description:"Show the welcome experience on startup",hidden:!0},{name:"observe",long:"observe",type:"option",description:"Open the Neo TUI as an observer of an existing thread (thread ID or URL)",hidden:!0},{name:"headless",long:"headless",type:"optional-option",description:"Run headless thread-actor executor (no TUI). Optionally provide a thread ID to connect to existing thread, otherwise create one.",hidden:!0},{name:"sp",long:"sp",type:"option",description:"Custom system prompt text or file path",hidden:!0},{name:"systemPrompt",long:"system-prompt",type:"option",description:"Custom system prompt text",hidden:!0},{name:"model",long:"model",type:"option",description:'Override the model. Use "provider:model" for all modes, or "mode=provider:model,mode=provider:model" for mode-specific overrides',hidden:!0}],E$A=(A)=>("deprecated"in A)&&A.deprecated===!0,A$3=(A)=>("hidden"in A)&&A.hidden===!0,Q$3=(A)=>("default"in A),B$3=(A)=>("default"in A)?A.default:void 0;function eE0(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let B=lB3(Q.effort);if(B!==void 0)iB3(Q.mode,B);return B}function $$3(A,Q){let B=Q.args[0],$=Q.commands.map((Y)=>Y.name());if(B&&!B.includes(" ")&&B.length<30&&!/[./\\]/.test(B)){let Y=$.filter((X)=>B.includes(X)||X.includes(B)),Z="Run amp --help for a list of available commands.";if(Y.length>0)Z=`Did you mean: ${Y.join(", ")}? Or run amp --help for all commands.`;throw new J4(F7.unknownCommand(B),1,Z)}}async function $W0(A){return{...A,getThreadEnvironment:_W,getEnvironmentData:(Q,B)=>DD({filesystem:A.fileSystem},Q,B),osFileSystem:A.fileSystem,skillService:A.skillService,fileChangeTrackerStorage:new SL(A.fileSystem),generateThreadTitle:jD4,deleteThread:(Q)=>A.threadService.delete(Q),getServerStatus:()=>IQ(A.configService),pluginService:A.pluginService}}function I$A(A){return{toolService:A.toolService,configService:A.configService,skillService:A.skillService,getThreadEnvironment:_W,getEnvironmentData:(Q,B)=>DD({filesystem:A.fileSystem},Q,B),filesystem:A.fileSystem,threadService:A.threadService}}var AW0=e0.file(gB3.homedir()),lQ1=process.env.XDG_CONFIG_HOME?e0.file(process.env.XDG_CONFIG_HOME):K1.joinPath(AW0,".config");function J$3(A){return AT4({playNotificationSound:async(Q)=>{if(A.useNotificationsForService){if(YD0())ZD0();else tZ0(Q);let B=BR(),$=Js();if((!B||$||Kf())&&A.config.settings["notifications.system.enabled"]!==!1){if(Q==="idle")process.stdout.write(lD("\x1B]777;notify;Amp;Agent is ready\x1B\\"));else if(Q==="requires-user-input")process.stdout.write(lD("\x1B]777;notify;Amp;Waiting for approval\x1B\\"))}}},windowFocused:()=>Promise.resolve(BR()),threadService:A.threadService,configService:A.configService,threadViewStates$:A.threadViewStates$})}async function p8(A,Q,B){let $=B?.deferAuth??!1,J=B?.skipToolProviders??!1;F44("0.0.
|
|
6364
|
+
`)}function cB3(A){process.emitWarning=(Q,B,$,J)=>{let Y=typeof Q==="string"?Q:Q.message||String(Q),Z=B||"Warning",X=!1;A.warn(Y,{name:Z,code:$})}}function u2(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")$Y("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli")$Y("experimental.agentMode",Q.mode);if(A.getOptionValueSourceWithGlobals("model")==="cli"&&Q.model)$Y("internal.model",nB3(Q.model))}function U$A(A){let Q=A.indexOf(":");if(Q===-1)throw new J4(`Invalid model format "${A}". Expected "provider:model" (e.g., "anthropic:claude-sonnet-4-20250514").`,1);let B=A.slice(0,Q).trim(),$=A.slice(Q+1).trim();if(!B||!$)throw new J4(`Invalid model format "${A}". Both provider and model must be non-empty (e.g., "anthropic:claude-sonnet-4-20250514").`,1)}function lB3(A){if(A===void 0)return;let Q=A.trim();if(z44(Q))return Q;throw new J4(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function iB3(A,Q){if(dF(A,Q))return;let B=u$(A)?.levels,$=B?` Allowed for ${A}: ${B.join(", ")}.`:"";throw new J4(`Reasoning effort "${Q}" is not available for ${A} mode.${$}`,1)}function nB3(A){if(!A.includes("="))return U$A(A),A;let Q={};for(let B of A.split(",")){let $=B.trim();if(!$)continue;let J=$.indexOf("=");if(J===-1)throw new J4(`Invalid mode-specific model entry "${$}". Expected "mode=provider:model" (e.g., "smart=anthropic:claude-sonnet-4-20250514").`,1);let Y=$.slice(0,J).trim(),Z=$.slice(J+1).trim();if(!Y)throw new J4(`Missing mode name in "${$}". Expected "mode=provider:model".`,1);if(!Z)throw new J4(`Missing model value for mode "${Y}". Expected "${Y}=provider:model".`,1);U$A(Z),Q[Y]=Z}if(Object.keys(Q).length===0)throw new J4("No valid model overrides found in --model flag value.",1);return Q}function aB3(A,Q){if(A.getOptionValueSourceWithGlobals("sp")==="cli"&&Q.sp)return Q.sp;if(A.getOptionValueSourceWithGlobals("systemPrompt")==="cli"&&Q.systemPrompt)return Q.systemPrompt;return}async function oB3(A){try{return await N$A(A,"utf-8")}catch{return A}}async function cQ1(A,Q,B){let $=aB3(A,Q);if(!$)return;let J=xA(B)?B.features:[],Y=xA(B)?B.user.email:void 0;if(!BW0(J,MB.HARNESS_SYSTEM_PROMPT)&&!(Y&&P7(Y)))throw new J4("You are not allowed to do this.",1);$Y("systemPrompt",await oB3($))}function BW0(A,Q){return A?.some((B)=>B.name===Q&&B.enabled)??!1}function rB3(A){return A!=="pending"}function YP(A){if(!xA(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function sB3(A){let Q=YP(A);if(Q)return Q.id;if(pF(A))throw Error(A.error.message);throw Error("unreachable")}function tB3(A){try{let Q=new URL(A);return Q.hostname==="localhost"||Q.hostname==="127.0.0.1"}catch{return A.includes("localhost")||A.includes("127.0.0.1")}}function eB3(A){let $=tB3(A)?"Run `pnpm dev` to start the local server, then try again.":"Check your network connection or the server URL and try again.";return new J4(`Couldn't connect to the Amp server at ${A}.`,1,$)}function me(A,Q){let B=Pe0(Error(A.error.message));if(B.message===F7.networkOffline||B.message===F7.networkTimeout)return eB3(Q);if(B.message!==F7.internalBug)return new J4(B.message,1,B.suggestion);return new J4(A.error.message.replace(/^Error: /,""),1)}var K$A=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} notification alerts (audio locally, terminal bell over SSH; enabled by default when not in execute 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",default:process.env.AMP_SETTINGS_FILE??nX,description:`Custom settings file path (overrides the default location ${nX})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(j).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${Ar})`},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","new-ui"],hidden:!0,deprecated:!0},{name:"dangerouslyAllowAll",long:"dangerously-allow-all",type:"switch",default:!1,description:"Disable all command confirmation prompts (agent will execute all commands without asking)"},{name:"jetbrains",long:"jetbrains",type:"flag",default:X9(),description:(A)=>A?"Enable JetBrains integration. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration"},{name:"ide",long:"ide",type:"flag",default:!0,description:(A)=>A?"Enable IDE connection (default). When enabled, Amp automatically includes your open IDE's file and text selection with every message.":"Disable IDE connection"},{name:"interactive",long:"interactive",type:"flag",description:(A)=>A?"Enable interactive mode. This will enable the interactive UI.":"Disable interactive mode. This will disable the interactive UI.",hidden:!0,deprecated:!0},{name:"mcpConfig",long:"mcp-config",type:"option",description:"JSON configuration or file path for MCP servers to merge with existing settings"},{name:"mode",long:"mode",short:"m",type:"option",default:nM.SMART.key,description:`Set the agent mode (${f$({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:Array.from(new Set(f$().map((A)=>A.mode))),hiddenChoices:["frontier"]},{name:"effort",long:"effort",type:"option",description:"Set reasoning effort for the new thread, when supported by the selected mode",choices:["none","minimal","low","medium","high","xhigh","max"]},{name:"takeMeBack",long:"take-me-back",type:"switch",description:"Disable thread-actors mode and use the legacy worker runtime",hidden:!0},{name:"neoOrb",long:"neo-orb",type:"switch",description:"Use the experimental Neo splash orb",hidden:!0},{name:"showWelcome",long:"show-welcome",type:"switch",description:"Show the welcome experience on startup",hidden:!0},{name:"observe",long:"observe",type:"option",description:"Open the Neo TUI as an observer of an existing thread (thread ID or URL)",hidden:!0},{name:"headless",long:"headless",type:"optional-option",description:"Run headless thread-actor executor (no TUI). Optionally provide a thread ID to connect to existing thread, otherwise create one.",hidden:!0},{name:"sp",long:"sp",type:"option",description:"Custom system prompt text or file path",hidden:!0},{name:"systemPrompt",long:"system-prompt",type:"option",description:"Custom system prompt text",hidden:!0},{name:"model",long:"model",type:"option",description:'Override the model. Use "provider:model" for all modes, or "mode=provider:model,mode=provider:model" for mode-specific overrides',hidden:!0}],E$A=(A)=>("deprecated"in A)&&A.deprecated===!0,A$3=(A)=>("hidden"in A)&&A.hidden===!0,Q$3=(A)=>("default"in A),B$3=(A)=>("default"in A)?A.default:void 0;function eE0(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let B=lB3(Q.effort);if(B!==void 0)iB3(Q.mode,B);return B}function $$3(A,Q){let B=Q.args[0],$=Q.commands.map((Y)=>Y.name());if(B&&!B.includes(" ")&&B.length<30&&!/[./\\]/.test(B)){let Y=$.filter((X)=>B.includes(X)||X.includes(B)),Z="Run amp --help for a list of available commands.";if(Y.length>0)Z=`Did you mean: ${Y.join(", ")}? Or run amp --help for all commands.`;throw new J4(F7.unknownCommand(B),1,Z)}}async function $W0(A){return{...A,getThreadEnvironment:_W,getEnvironmentData:(Q,B)=>DD({filesystem:A.fileSystem},Q,B),osFileSystem:A.fileSystem,skillService:A.skillService,fileChangeTrackerStorage:new SL(A.fileSystem),generateThreadTitle:jD4,deleteThread:(Q)=>A.threadService.delete(Q),getServerStatus:()=>IQ(A.configService),pluginService:A.pluginService}}function I$A(A){return{toolService:A.toolService,configService:A.configService,skillService:A.skillService,getThreadEnvironment:_W,getEnvironmentData:(Q,B)=>DD({filesystem:A.fileSystem},Q,B),filesystem:A.fileSystem,threadService:A.threadService}}var AW0=e0.file(gB3.homedir()),lQ1=process.env.XDG_CONFIG_HOME?e0.file(process.env.XDG_CONFIG_HOME):K1.joinPath(AW0,".config");function J$3(A){return AT4({playNotificationSound:async(Q)=>{if(A.useNotificationsForService){if(YD0())ZD0();else tZ0(Q);let B=BR(),$=Js();if((!B||$||Kf())&&A.config.settings["notifications.system.enabled"]!==!1){if(Q==="idle")process.stdout.write(lD("\x1B]777;notify;Amp;Agent is ready\x1B\\"));else if(Q==="requires-user-input")process.stdout.write(lD("\x1B]777;notify;Amp;Waiting for approval\x1B\\"))}}},windowFocused:()=>Promise.resolve(BR()),threadService:A.threadService,configService:A.configService,threadViewStates$:A.threadViewStates$})}async function p8(A,Q,B){let $=B?.deferAuth??!1,J=B?.skipToolProviders??!1;F44("0.0.1778057090-g80f5f1");let Y=j80({storage:A.settings,secretStorage:A.secrets,workspaceRoot:m0.of(e0.file(process.cwd())),defaultAmpURL:A.ampURL,homeDir:AW0,userConfigDir:lQ1});$6A(Y);let Z=await Y.getLatest();j.debug("Global configuration initialized",{settingsKeys:Object.keys(Z.settings)});let X=!1;{let d=await A.secrets.get("apiKey",A.ampURL);if(X=Boolean(d),j.info("API key lookup before login",{found:Boolean(d),ampURL:A.ampURL,deferAuth:$}),!d)if($)j.info("No API key found, continuing startup with deferred auth");else{D5.write(`No API key found. Starting login flow...
|
|
6365
6365
|
`);let g=await Y$3(A),n=await A.secrets.get("apiKey",A.ampURL);if(j.info("Login flow completed",{success:g,storedKeyPresent:Boolean(n),ampURL:A.ampURL}),!g)await fW(),process.exit(1);X=!0}}{let d=await Y.getLatest(),g=d.settings.url,n=d.secrets.isSet?.[g];j.info("Config secrets state after login",{configURL:g,apiKeySet:n?.apiKey??!1})}let F=y1(IQ(Y).pipe(E5(rB3))),D=$?"pending":await F;if(!$)j.info("Server status resolved",{status:"ready",isAuthenticated:xA(D),isError:pF(D),errorMessage:pF(D)?D.error.message:void 0});let G=F.then((d)=>sB3(d));G.catch(()=>{return});let U=!Q.takeMeBack&&xA(D)&&BW0(D.features,MB.THREAD_ACTORS_TUI)?"all":process.env.PLUGINS??"permissions",{toolService:K,dispose:E}=o_4({configService:Y}),W=new Map,H=()=>W.clear(),z=new hb0(Y,A.settings.getWorkspaceRootPath()),q=BX4({configService:Y,filesystem:O3}),N=oB4({configService:Y,trustStore:z,skillMCPServers:q.skillMCPServers,createOAuthProvider:async(d,g,n)=>{let c=`${d}:${g}`,Q0=W.get(c);if(Q0)return j.debug("Reusing existing OAuth provider for server",{serverName:d,serverUrl:g}),Q0;j.debug("Creating OAuth provider for server",{serverName:d,serverUrl:g});let E0=(async()=>{let i=new QL(A.secrets),$0=await i.getClientInfo(d,g),J0=n?.scopes??$0?.scopes,w0=mp4();j.info("OAuth headless mode check",{useHeadless:w0,executeMode:A.executeMode,envVar:process.env.AMP_HEADLESS_OAUTH,isTTY:D5.isTTY});let e;if(w0)e=A.executeMode?gp4():hp4(d);let D0=new rv0({storage:i,serverName:d,serverUrl:g,clientId:n?.clientId??$0?.clientId,clientSecret:n?.clientSecret??$0?.clientSecret,authUrl:n?.authUrl??$0?.authUrl,tokenUrl:n?.tokenUrl??$0?.tokenUrl,scopes:J0,headlessAuthHandler:e});return j.debug("OAuth provider created",{serverName:d,serverUrl:g,hasManualClientId:!!(n?.clientId??$0?.clientId),willUseDCR:!(n?.clientId??$0?.clientId),scopes:J0,headlessMode:w0,executeMode:A.executeMode}),D0})();return W.set(c,E0),E0}}),I=ua0({configService:Y,filesystem:O3,spawn:qZ0}),w=Q.headless?mAA():void 0,C=w??new MU0({configService:Y}),O=C instanceof MU0?C:void 0;if(O)O.pluginExecutorKind="local";let _=Bu0({configService:Y,fileSystem:O3,platform:C,loadGlobalPlugins:v01(Y),pluginFilter:U}),T=n$4(_),S;if(J)S=new Map;else if(A.executeMode){let d=await OR4({toolService:K,providers:[N,I,T],initialTimeout:15000});S=d.registrations;for(let[g,n]of d.initErrors)j.warn(`${g} provider initialization slow or failed:`,n)}else S=ha0({toolService:K,providers:[N,I,T]});if(Q.jetbrains)dM("JetBrains");else if(Q.ide&&Od4())dM("VS Code");else if(Q.ide&&jd4())dM("Neovim");else if(Q.ide){let d=await dB3();if(d){let g=f80(d.ideName);if(g)dM(g)}}if(A.executeMode)D44(!0);let b,h=f3.status.pipe(M1((d)=>Boolean(d.connected&&d.authenticated&&d.ideName&&ZA4(d.ideName))),S4()).subscribe((d)=>{if(d){if(!b)b=K.registerTool(LR4)}else b?.dispose(),b=void 0}),x;if(!A.executeMode){let d=await A.settings.get("fuzzy.alwaysIncludePaths")??[];x=new BD0(process.cwd(),{alwaysIncludePaths:d},!0)}else x=new class extends BD0{async start(){}async query(){return[]}async queryCompletions(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};let v=new Qm0(Zi(Y,{usesThreadActors:!1}),{maxThreads:200});j.info("Starting Amp background services");let u=new f81,m={configService:Y,toolService:K,mcpService:N,skillService:q,toolboxService:I,trustStore:z,threadService:v,secretStorage:A.secrets,settingsStorage:A.settings,fuzzyServer:x,fileSystem:O3,terminal:u,pluginService:_,pluginPlatform:O,headlessPluginPlatform:w,serverStatus:D,serverStatusPromise:F,viewerUserIDPromise:G,hasAPIKeyAtStartup:X};return{...m,async asyncDispose(){if(m.mcpService.hasAuthenticatingClients())j.info("Waiting for OAuth authentication to complete before exit..."),await m.mcpService.waitForAuthentication();for(let d of S.values())d.dispose();await m.mcpService.dispose(),H(),await m.threadService.asyncDispose(),m.configService.unsubscribe(),E(),m.fuzzyServer.dispose(),m.settingsStorage[Symbol.dispose](),h.unsubscribe(),b?.dispose(),await m.pluginService.dispose()}}}async function Y$3(A){if(!A.executeMode){if(!await iD0("Would you like to log in to Amp? [(y)es, (n)o]: "))return D5.write(`Login cancelled. Run the command again to retry.
|
|
6366
6366
|
`),!1}return await w$A(A)}async function w$A(A){let Q=q$A(32).toString("hex"),B=await wf(A.ampURL,Q),$=new AbortController;try{await bF(B,$.signal)}catch(Y){j.error("Error opening browser",{error:Y})}let J=await wf(A.ampURL,Q,!1);D5.write(`If your browser does not open automatically, visit:
|
|
6367
6367
|
|
|
@@ -6369,7 +6369,7 @@ ${s0.blue.bold(J)}
|
|
|
6369
6369
|
|
|
6370
6370
|
`);try{return await gl4(A.ampURL,Q,A.secrets,$),D5.write("\nLogin successful! Run `amp` to get started.\n"),!0}catch(Y){return j.error("Login failed",{error:Y}),SJ.write(`
|
|
6371
6371
|
Login failed: ${Y instanceof Error?Y.message:String(Y)}
|
|
6372
|
-
`),!1}}async function Z$3(A,Q,B){let $=await Q.get("apiKey",A);if(!$)throw new J4("No Amp API key found. Run `amp login` first.",1);let J=bB3("curl",["-H",`Authorization: Bearer ${$}`,...B],{stdio:"inherit"});process.exitCode=await new Promise((Y,Z)=>{J.on("error",Z),J.on("close",(X)=>Y(X??1))})}function X$3(A){let Q=new nN().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((H)=>{if(H.code==="commander.help"||H.code==="commander.version"||H.exitCode===0)yj(),process.exit(0);let z=H.originalError??H;vh4(z)}),ni4(Q,{version:"0.0.
|
|
6372
|
+
`),!1}}async function Z$3(A,Q,B){let $=await Q.get("apiKey",A);if(!$)throw new J4("No Amp API key found. Run `amp login` first.",1);let J=bB3("curl",["-H",`Authorization: Bearer ${$}`,...B],{stdio:"inherit"});process.exitCode=await new Promise((Y,Z)=>{J.on("error",Z),J.on("close",(X)=>Y(X??1))})}function X$3(A){let Q=new nN().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((H)=>{if(H.code==="commander.help"||H.code==="commander.version"||H.exitCode===0)yj(),process.exit(0);let z=H.originalError??H;vh4(z)}),ni4(Q,{version:"0.0.1778057090-g80f5f1",buildTimestamp:"2026-05-06T08:48:27.049Z",buildType:"'release'"}),Q.addHelpText("after",Cd4()),Q.configureHelp({formatHelp:Md4}),Q.command("logout").description("Log out by removing stored API key").action(async(H,z)=>{let q=z.optsWithGlobals(),N=await c5(q);await H$3(N)}),Q.command("login").description("Log in to Amp").addHelpText("after","If AMP_URL is set during login, it will be persisted to global settings for future CLI invocations, though AMP_URL will continue to take precedence.").action(async(H,z)=>{let q=z.optsWithGlobals(),N=await c5(q);await W$3(N,await l01(q,N.settings))}),Th4(Q,c5);let $=Q.command("internal",{hidden:!0}).description("Internal commands").command("curl [args...]").description("Internal: run curl with the current Amp API key as a bearer token").allowUnknownOption(!0).allowExcessArguments(!0).action(async(...H)=>{let z=H.find((w)=>typeof w==="object"&&w!==null&&typeof w.optsWithGlobals==="function")??$,q=H.filter((w)=>w!==z).flatMap((w)=>Array.isArray(w)?w:typeof w==="string"?[w]:[]),N=z.optsWithGlobals(),I=await c5(N);await Z$3(I.ampURL,I.secrets,q),process.exit(process.exitCode??0)});Q.command("git-credential-helper [action]",{hidden:!0}).summary("Git credential helper for GitHub").description("Internal: implements the git credential helper protocol. Used inside sandboxes to authenticate git operations with GitHub.").action(async(H,z,q)=>{let N=q.optsWithGlobals(),I=await c5(N);await Sp4(H??"get",I.ampURL,I.secrets),process.exit(process.exitCode??0)}),Q.command("sign-commit",{hidden:!0}).summary("Git commit signing helper").description("Internal: implements the gpg signing interface for git commit signing. Used inside sandboxes as gpg.program.").allowUnknownOption().action(async(H,z)=>{let q=z.optsWithGlobals(),N=await c5(q);await kp4(N.ampURL,N.secrets),process.exit(process.exitCode??0)}),Q.command("keyboard-tester",{hidden:!0}).summary("Keyboard input tester").description("Internal: stream parsed terminal input events as JSONL.").option("--raw","Log raw incoming terminal bytes before parsing").action(async(H)=>{await mc4({raw:H.raw===!0}),process.exit(process.exitCode??0)}),Q.command("live-sync [threadIDOrURL]",{hidden:!0}).summary("Mirror live DTW thread changes into the current checkout").description("Experimental: watch a v2 thread URL or ID and mirror its live working-tree changes into your local checkout, or apply the current snapshot once and exit.").addHelpText("after",["","Examples:"," amp live-sync T-5928a90d-d53b-488f-a829-4e36442142ee"," amp live-sync --apply T-5928a90d-d53b-488f-a829-4e36442142ee"," amp live-sync https://ampcode.com/threads/T-5928a90d-d53b-488f-a829-4e36442142ee"].join(`
|
|
6373
6373
|
`)).option("--apply <threadIDOrURL>","Apply the current DTW thread snapshot once and exit").option("--checkout","Automatically check out the thread commit when it differs").option("--skip-checkout","Skip the startup checkout prompt when commits differ").action(async(H,z,q)=>{if(H&&z.apply)throw new J4("Choose either a positional thread ID/URL or --apply <thread-id>, not both.",1);let N=z.apply??H;if(!N||N.trim().length===0)D5.write(`live-sync watches a v2 thread and mirrors its live changes locally. Use --apply <thread-id> to materialize the current snapshot once and exit.
|
|
6374
6374
|
|
|
6375
6375
|
`),q.outputHelp(),process.exit(0);let I=I2(N)??KJ(N),w=q.optsWithGlobals(),C=await c5(w);u2(q,w);let O=await p8(C,w),_=!1;try{if(z.checkout&&z.skipCheckout)throw new J4("Choose either --checkout or --skip-checkout, not both.",1);if(pF(O.serverStatus))throw me(O.serverStatus,C.ampURL);let T=xA(O.serverStatus)?O.serverStatus.features:void 0;if(!BW0(T,MB.V2))throw new J4("live-sync is not enabled for your user",1);await _l4({ampURL:C.ampURL,threadId:I,configService:O.configService,threadService:O.threadService,apiKey:process.env.AMP_API_KEY,applyOnce:typeof z.apply==="string",checkoutMode:z.checkout?"always":z.skipCheckout?"never":"prompt",promptForYesNo:iD0}),_=!0}finally{if(await O.asyncDispose(),_)process.exit(0)}});let J=async(H,z,q)=>{j80({storage:z.settings,secretStorage:z.secrets,workspaceRoot:m0.of(e0.file(process.cwd())),defaultAmpURL:z.ampURL,homeDir:AW0,userConfigDir:lQ1});let N={...z,executeMode:!1};await QW0(N,{...H,openThreadSwitcher:!0},q,A)},Y=Q.command("threads").alias("t").alias("thread").summary("Manage threads").description("Thread management commands. When no subcommand is provided, defaults to listing threads.").option("--include-archived","Include archived threads in the list").action(async(H,z)=>{let q=z.optsWithGlobals(),N=await c5(q);await z$A(q,N,z)});Y.command("new").alias("n").summary("Create a new thread").description("Create a new thread and print its ID. The thread will be empty. You can set the visibility using the --visibility option.").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").action(async(H,z)=>{let q=z.optsWithGlobals(),N=await c5(q);await R$3(q,N,z)}),Y.command("continue [threadIDOrURL]").alias("c").summary("Continue an existing thread").description("Continue an existing thread by resuming the conversation. By default, interactive mode shows a picker. Use --last to continue the last thread for the current mode directly.").option("--last","Continue the last thread for the current mode directly").option("--pick","Pick a thread interactively from a list (DEPRECATED: picker is now the default)").action(async(H,z,q)=>{let N=q.optsWithGlobals(),I=await c5(N);if(z.pick)SJ.write(`${s0.yellow("Warning:")} The --pick flag is deprecated. The picker is now shown by default.
|
|
@@ -6402,8 +6402,8 @@ ${C}
|
|
|
6402
6402
|
`))}),z.args.length>0)$$3(N,z);await QW0(N,q,z,A)}),$c4(Q),Q}async function Wu(A,Q){await oQ((B)=>sD0(B,A,Q))}async function W$A(A,Q,B){let $=Date.now(),[J,Y]=await Promise.all([VA.getThreadLinkInfo({thread:A},{config:Q}),B]);if(j.info(`[fetchAndStartThread] Ownership check in ${Date.now()-$}ms`),J.ok){let Z=J.result.creatorUserID;if(Z&&Z!==Y&&!process.env.AMP_RESUME_OTHER_USER_THREADS_INSECURE)throw new J4(`Cannot resume thread created by another user.
|
|
6403
6403
|
|
|
6404
6404
|
This thread belongs to a different user and cannot be continued for security reasons. Set AMP_RESUME_OTHER_USER_THREADS_INSECURE=1 to bypass this check.`)}}async function C$A(A){if(A.streamJsonInput)return{userInput:"",stdinInput:null};if(typeof A.execute==="string"){let Q=(await OU0()).trimEnd();return{userInput:A.execute,stdinInput:Q||null}}return{userInput:(await OU0()).trimEnd(),stdinInput:null}}function M$A(A,Q,B){if(A.streamJson&&!Q)throw new J4("The --stream-json flag requires --execute mode",1,'Use: amp --execute "your message" --stream-json');if(A.streamJsonInput&&!Q)throw new J4("The --stream-json-input flag requires --execute mode",1,"Use: amp --execute --stream-json --stream-json-input");if(A.streamJsonInput&&!A.streamJson)throw new J4("The --stream-json-input flag requires --stream-json",1,"Use: amp --execute --stream-json --stream-json-input");if(A.stats&&A.streamJson)throw new J4("The --stats and --stream-json flags are mutually exclusive output formats",1,'Use one or the other: amp --execute "your message" --stats OR amp --execute "your message" --stream-json');if(A.stats&&!Q)throw new J4("The --stats flag requires --execute mode",1,'Use: amp --execute "your message" --stats');if(A.archive&&!Q)throw new J4("The --archive flag requires --execute mode",1,'Use: amp --execute "your message" --archive');if(A.streamJsonInput&&typeof A.execute==="string"&&A.execute.trim()!=="")throw new J4("Do not provide a message argument when using --stream-json-input",1,`Supply messages via stdin JSONL instead: echo '{"type":"user","message":{"role":"user","content":[{"type":"text","text":"your message"},{"type":"image","source":{"type":"base64","media_type":"image/png","data":"..."}}]}}' | amp --execute --stream-json --stream-json-input`);if(Q&&B===""&&!A.streamJsonInput&&!A.headless)throw new J4("User message must be provided through stdin or as argument when using execute mode",1,`Either pass a message as an argument: amp --execute "your message"
|
|
6405
|
-
Or pipe via stdin: echo "your message" | amp --execute`)}function F$3(A,Q){if(v54([u30.parse({tool:"*",action:"allow"})]),M54({bypass:!0}),dAA(A.settings))j.debug("Enabling permissions plugin"),Q.registerInternalPlugin({name:"permissions",entryPoint:S81})}async function QW0(A,Q,B,$){if(Q.headless)return D$3(A,Q,B);let J=await p8(A,Q),Y=await J.serverStatusPromise,Z=await J.configService.getLatest(),X=xA(Y)&&BW0(Y.features,MB.THREAD_ACTORS_TUI),F=X&&!Q.takeMeBack;if(Q.showWelcome&&!X)throw await J.asyncDispose(),new J4("--show-welcome is only available with the new Amp CLI feature flag",1);if(F)return F$3(Z,J.pluginService),G$3(A,Q,B,J);else{if(Q.threadId&&zQ(Q.threadId)){let D=await VA.getThreadLinkInfo({thread:Q.threadId},{config:J.configService}).catch(()=>null);if(D?.ok&&D.result.usesThreadActors)throw await J.asyncDispose(),new J4(`Thread ${Q.threadId} was created with the Neo TUI and cannot be continued in the legacy CLI.`,1,"Re-run without --take-me-back to continue this thread.")}return V$3(A,Q,B,$,{dependencies:J})}}async function D$3(A,Q,B){let $=(z,q)=>{let N=Number(process.hrtime.bigint()-q)/1e6,I=gs0();j.info("Startup phase",{phase:z,phaseMs:Math.round(N),sinceMainMs:I===null?void 0:Math.round(I)})};u2(B,Q);let J=process.hrtime.bigint(),Y=await p8(A,Q);$("runMainThread:createThreadDependencies",J);let{serverStatus:Z}=Y;if(pF(Z))throw me(Z,A.ampURL);let X=xA(Z)?Z:null,F=X?.user.email;await cQ1(B,Q,Z);let D=YP(Z),G=Vs(Q,D);if(G instanceof Error)b5(G.message);if(X&&!jS(Q.mode,F))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!F||!P7(F)))throw new J4("Headless executor mode is only available for Amp employees",1);wF0();let U=await Y.secretStorage.get("apiKey",A.ampURL);if(!U)throw new J4("API key required for headless mode. Please run `amp login` first.",1);let K=typeof Q.headless==="string"&&Q.headless!=="true"?Q.headless:void 0;if(K&&!zQ(K))throw new J4(`Invalid thread ID: ${K}`,1);let E=K?void 0:await O$3({dependencies:Y,apiKey:U,visibility:G??void 0}),W=K??E?.threadId;if(!W)throw new J4("Failed to resolve headless thread ID",1);let H=await lp4(W);if(H.status==="already-running")await Y.asyncDispose(),await fW(),process.exit(0);try{await fp4({ampURL:A.ampURL,apiKey:U,workspaceRoot:process.cwd(),threadId:W,ownerUserId:E?.ownerUserId,threadVersion:E?.threadVersion,agentMode:E?.agentMode,initialToolDiscovery:Promise.all([Y.mcpService.initialized,Y.toolboxService.initialized]).then(()=>{return}),configService:Y.configService,mcpService:Y.mcpService,toolService:Y.toolService,skillService:Y.skillService,fileSystem:Y.fileSystem,pluginService:Y.pluginService,pluginPlatform:Y.headlessPluginPlatform})}finally{await H.release(),await Y.asyncDispose()}await fW(),process.exit(0)}async function G$3(A,Q,B,$){let{userInput:J,stdinInput:Y}=await C$A(Q),Z=!!Q.streamJson||!!Q.streamJsonThinking;M$A({...Q,streamJson:Z},A.executeMode,J),u2(B,Q),Ch4(),wF0();let X=Q.threadId&&zQ(Q.threadId)?Q.threadId:void 0,F=Q.observe?I2(Q.observe)??KJ(Q.observe):void 0,D=await $.serverStatusPromise;if(pF(D))throw me(D,A.ampURL);let G=await $.secretStorage.get("apiKey",A.ampURL);if(!G)throw new J4("API key required. Please run `amp login` first.",1);let V=xA(D)&&P7(D.user.email);if(A.executeMode){n11($.mcpService,A.settings);try{let U=eE0(B,Q),K=await jI(),E=X?U:nD0({agentMode:Q.mode,explicitEffort:U,sessionState:K}),W=X?void 0:aD0(await Cf($.configService),{agentMode:Q.mode,explicitEffort:U,sessionState:K}),H=await Ap4({apiKey:G,ampURL:A.ampURL,workspaceRoot:process.cwd(),dependencies:$,userInput:J,stdinInput:Y,stats:!!Q.stats,streamJson:Z,streamJsonThinking:!!Q.streamJsonThinking,streamJsonInput:!!Q.streamJsonInput,stdin:process.stdin,agentMode:Q.mode,reasoningEffort:E,labels:Q.label,initialThreadID:X,initialSettings:W});if(await Wu(H,"execute"),Q.archive)await $.threadService.archive(H,!0)}finally{await $.asyncDispose()}await fW(),process.exit(0)}else{let U=eE0(B,Q),K=Zi($.configService),E=new $e($.fuzzyServer),W=process.cwd();await yAA({ampURL:A.ampURL,apiKey:G,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??pX(A.ampURL),configService:$.configService,toolService:$.toolService,pluginPlatform:$.pluginPlatform,pluginService:$.pluginService,skillService:$.skillService,mcpService:$.mcpService,readFileSystemDirectory:({uri:H})=>sx({fileSystem:$.fileSystem,workspaceRoot:W},H),completionBuilder:E,workspaceRoot:W,listThreads:()=>K.listThreads(),getThreadFromServer:(H)=>K.getThread(H),toolboxes:$.toolboxService.toolboxes,isInternalUser:V,settingsFilePath:$.settingsStorage.getSettingsFilePath()},{initialThreadID:F??X,initialUserInput:J||void 0,openThreadPickerOnStart:Q.openThreadSwitcher,observerOnly:!!F,splashOrbVisualStyle:"neo",showNeoWelcome:Q.showWelcome,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,initialReasoningEffort:U}),process.exit(0)}}async function V$3(A,Q,B,$,J){let Y=process.hrtime.bigint(),Z=(J0,w0)=>{let e=Number(process.hrtime.bigint()-w0)/1e6,D0=gs0();j.info("Startup phase",{phase:J0,phaseMs:Math.round(e),sinceMainMs:D0===null?void 0:Math.round(D0)})},{userInput:X,stdinInput:F}=await C$A(Q),D=!!Q.streamJson||!!Q.streamJsonThinking;M$A({...Q,streamJson:D},A.executeMode,X),u2(B,Q);let G=process.hrtime.bigint(),V=J?.dependencies??await p8(A,Q),U=V.hasAPIKeyAtStartup,K=V.serverStatus==="pending";if(j.info("Interactive auth startup mode",{deferInteractiveAuth:K,hasAPIKeyAtStartup:U,executeMode:A.executeMode,headless:Boolean(Q.headless)}),!J)Z("runMainThread:createThreadDependencies",G);let{serverStatus:E}=V;if(!K&&pF(E))throw me(E,A.ampURL);let W=xA(E)?E:null,H=W?.user.email,z=!!(H&&P7(H));if(z)wF0();if(!K)await cQ1(B,Q,E);let q=YP(E),N=q?.features??[],I=q?.team??null,w=Vs(Q,q);if(w instanceof Error)b5(w.message);if(W&&!jS(Q.mode,H))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);let C=Q.threadId&&zQ(Q.threadId)?Q.threadId:void 0;G=process.hrtime.bigint();let O=await $W0(V);Z("runMainThread:createWorkerDeps",G);let _=A.executeMode?void 0:async(J0)=>Wu(J0,"interactive"),T={threadService:V.threadService,workerDeps:O,createThread:async(J0)=>{let w0=K?await V.serverStatusPromise:E,e=await CF0(A.settings,process.cwd(),YP(w0),w);if(e instanceof Error)b5(e.message);return H71(O,{threadMeta:e?rY(e):void 0,agentMode:J0??Q.mode,onFirstAssistantMessage:_})},validateThreadOwnership:async(J0,w0)=>{if(w0?.nonBlockingOwnershipCheck){W$A(J0,V.configService,V.viewerUserIDPromise).catch((e)=>{if(e instanceof J4){if(w0.onOwnershipError){w0.onOwnershipError(e,J0);return}bW(e,J0);return}j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:e})});return}try{await W$A(J0,V.configService,V.viewerUserIDPromise)}catch(e){if(e instanceof J4)throw e;j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:e})}},switchThreadVisibility:w,switchThreadAgentMode:Q.mode,onFirstAssistantMessage:_,handleError:bW},S=async()=>{try{return m9A(T,Q.threadId,{nonBlockingOwnershipCheck:Q.nonBlockingThreadOwnershipCheck})}catch(J0){if(J0 instanceof J4)throw J0;throw await bW(J0,Q.threadId),Error("handleError should have called process.exit()")}},b=(async()=>{if(K){j.info("Skipping initial free tier status fetch until auth is complete");return}try{let J0=await V.configService.getLatest(),w0=zp(J0),e=await VA.getUserFreeTierStatus({},{config:V.configService,signal:AbortSignal.timeout(w0)});if(e.ok)return j.info("User free tier status:",e),e.result;return}catch(J0){j.error("Failed to fetch free tier status:",J0);return}})(),x=!A.executeMode?new m81:null,v,u=null;if(x)v=x,u=(async()=>{let J0=K?await V.serverStatusPromise:V.serverStatus;if(pF(J0))throw me(J0,A.ampURL);await cQ1(B,Q,J0);let w0=process.hrtime.bigint(),e=await S();if(Z("runMainThread:createThreadPool",w0),x.attach(e),X){let D0=await y1(e.threadHandles$);if(!D0)throw new J4("No active thread is available yet.",1);await D0.sendMessage({content:[{type:"text",text:X}]})}})(),u.catch(async(J0)=>{let w0=J0 instanceof Error?J0:Error(String(J0));x.setInitError(w0),await bW(J0,Q.threadId)});else G=process.hrtime.bigint(),v=await S(),Z("runMainThread:createThreadPool",G);let m=Q.notifications!==void 0?Q.notifications:!A.executeMode;G=process.hrtime.bigint();let d=await V.configService.getLatest();if(Z("runMainThread:configService.getLatest",G),G=process.hrtime.bigint(),J$3({configService:V.configService,threadService:V.threadService,config:d,useNotificationsForService:m,threadViewStates$:()=>v.threadHandles$.pipe(u4((J0)=>{if(!J0)return m0.of({});return P6(J0.thread$,J0.threadViewState$).pipe(M1(([w0,e])=>({[w0.id]:e})))}))}),Z("runMainThread:createCliNotificationService",G),A.executeMode){n11(V.mcpService,A.settings);let J0=eE0(B,Q),w0=await jI(),e=C?J0:nD0({agentMode:Q.mode,explicitEffort:J0,sessionState:w0}),D0={userInput:X,stdinInput:F,dependencies:V,streamJson:D,streamJsonInput:!!Q.streamJsonInput,streamJsonThinking:!!Q.streamJsonThinking,stats:!!Q.stats,ampURL:A.ampURL,isInternalUser:z,agentMode:Q.mode,reasoningEffort:e,labels:Q.label},a=await Ag4({threadPool:v,...D0});if(await Wu(a,"execute"),Q.archive)await V.threadService.archive(a,!0);await V.asyncDispose(),process.exit(0)}let g=!1,n=!1;if(Q.jetbrains||Q.ide){await b80();let J0=await lF({jetbrainsOnly:Q.jetbrains});if(J0.length===0){if(Q.jetbrains)g=!await V.configService.get("jetbrains.skipInstall")}else if(J0.length===1){let w0=J0[0];if(w0)f3.selectConfig(w0)}else n=!0}G=process.hrtime.bigint();let c=K11("0.0.1778049149-g4ce163",V.settingsStorage,{startDelayMs:3000});Z("runMainThread:createUpdateService",G),G=process.hrtime.bigint();let Q0=new a11(V.mcpService,A.settings.getWorkspaceRootPath());if(Z("runMainThread:createMcpTrustHandler",G),X&&A.executeMode){let J0=await y1(v.threadHandles$);if(!J0)throw new J4("No active thread is available yet.",1);await J0.sendMessage({content:[{type:"text",text:X}]})}G=process.hrtime.bigint();let E0=await jI();Z("runMainThread:loadSessionState",G),j.info("Loaded session state:",E0);let i=eE0(B,Q),$0={...E0,launchCount:E0.launchCount+1,lastReasoningEffortByMode:i?{...E0.lastReasoningEffortByMode,[Q.mode]:i}:E0.lastReasoningEffortByMode};oQ((J0)=>({...J0,launchCount:J0.launchCount+1}));try{if(G=process.hrtime.bigint(),await s6A({history:new Kr,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,skillService:V.skillService,configService:V.configService,secretStorage:V.secretStorage,internalAPIClient:VA,threadPool:v,createSystemPromptDeps:async()=>I$A(V),ideClient:f3,mcpService:V.mcpService,toolboxService:V.toolboxService,mcpTrustHandler:Q0,updateService:c,pluginPlatform:V.pluginPlatform,pluginService:V.pluginService},{initialServerStatus:V.serverStatus,stdout:process.stdout,hasAPIKeyAtStartup:V.hasAPIKeyAtStartup,ampURL:A.ampURL,startupThreadID:C,showJetBrainsInstaller:g,showIdePickerHint:n,openThreadSwitcher:Q.openThreadSwitcher,jetbrainsMode:Q.jetbrains,clientId:pB3,logFile:{path:$},sessionState:$0,freeTierStatusPromise:b,workspace:I??null,features:N,isInternalUser:z,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,splashOrbVisualStyle:Q.neoOrb?"neo":"classic",buildTimestamp:"2026-05-06T06:36:12.240Z"},(J0)=>new a81({...J0,threadPool:J0.threadPool},(w0)=>new E71({...w0,threadState:w0.threadState}))),Z("runMainThread:mountApp-returned",G),u)await u}finally{await v.dispose().catch((J0)=>{j.error("Failed to dispose thread pool during shutdown",J0)})}await V.asyncDispose(),Z("runMainThread:dependencies.asyncDispose",Y),process.exit(0)}async function c5(A){if(j.info("Initializing CLI context",{argv:process.argv,nodeEnv:"production",hasAmpURL:Boolean(process.env.AMP_URL),hasAmpAPIKey:Boolean(process.env.AMP_API_KEY),hasSettingsFile:Boolean(process.env.AMP_SETTINGS_FILE)}),A.interactive)SJ.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
6406
|
-
`);let Q=!!A.execute||!process.stdout.isTTY&&!A.streamJson,B=process.stdout.isTTY&&process.stderr.isTTY;j.info("Execution mode resolved",{executeMode:Q,stdoutTTY:process.stdout.isTTY,stderrTTY:process.stderr.isTTY,streamJson:A.streamJson,executeFlag:A.execute});let $=await A$4({get:async(X)=>{if(X!==Ic)return;try{let F=await N$A(dQ1,"utf-8");return JSON.parse(F).installationID}catch{return}},set:async(X,F)=>{if(X!==Ic)return;await uB3(ge.dirname(dQ1),{recursive:!0}),await hB3(dQ1,JSON.stringify({installationID:F},null,2),{mode:384})}},{clientType:"cli",platform:X70()});G44($);let J=await Jd4({...A,workspaceTrust:{current:!0,changes:nS0},getHook:process.env.AMP_URL?(X,F)=>{if(X==="url")return Promise.resolve(process.env.AMP_URL);return F()}:void 0});if(A.mcpConfig){let X=await rl4(A.mcpConfig);J=sl4(J,X)}let Y=ge.dirname(J.getSettingsFilePath());e_4(Ff,Y),J=pe1(J);let Z=await J.get("url","admin")??await J.get("url","global");if(!Z)Z=_7;if(j.info("Resolved Amp URL",{ampURL:Z,settingsFile:J.getSettingsFilePath(),workspaceRoot:J.getWorkspaceRootPath()}),!gz(Z))j.info("Targeting custom Amp server",{ampURL:Z});return{executeMode:Q,isTTY:B,ampURL:Z,settings:J,secrets:eAA(await l01(A,J))}}function U$3(A){let Q={};for(let B=0;B<A.length;B++){let $=A[B];if($?.startsWith("--")){let Y=$.slice(2).replace(/-([a-z])/g,(X,F)=>F.toUpperCase()),Z=A[B+1];if(Z&&!Z.startsWith("--"))Q[Y]=Z,B++}}return Q}function K$3(A,Q){let B=A.includes("--headless")||A.some((J)=>J.startsWith("--headless=")),$=ge.resolve(Q.logFile??process.env.AMP_LOG_FILE??(B?mB3:Ar));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:$}}async function E$3(){Gx4();let A=U$3(process.argv),Q=K$3(process.argv,A),B=Mh4(Q),$=process.argv.includes("--no-color"),J=process.argv.includes("--color"),Y=process.stdout.isTTY&&process.stderr.isTTY;if($||!J&&!Y)s0.level=0;if(cB3(j),j.info("Starting Amp CLI.",{version:"0.0.
|
|
6405
|
+
Or pipe via stdin: echo "your message" | amp --execute`)}function F$3(A,Q){if(v54([u30.parse({tool:"*",action:"allow"})]),M54({bypass:!0}),dAA(A.settings))j.debug("Enabling permissions plugin"),Q.registerInternalPlugin({name:"permissions",entryPoint:S81})}async function QW0(A,Q,B,$){if(Q.headless)return D$3(A,Q,B);let J=await p8(A,Q),Y=await J.serverStatusPromise,Z=await J.configService.getLatest(),X=xA(Y)&&BW0(Y.features,MB.THREAD_ACTORS_TUI),F=X&&!Q.takeMeBack;if(Q.showWelcome&&!X)throw await J.asyncDispose(),new J4("--show-welcome is only available with the new Amp CLI feature flag",1);if(F)return F$3(Z,J.pluginService),G$3(A,Q,B,J);else{if(Q.threadId&&zQ(Q.threadId)){let D=await VA.getThreadLinkInfo({thread:Q.threadId},{config:J.configService}).catch(()=>null);if(D?.ok&&D.result.usesThreadActors)throw await J.asyncDispose(),new J4(`Thread ${Q.threadId} was created with the Neo TUI and cannot be continued in the legacy CLI.`,1,"Re-run without --take-me-back to continue this thread.")}return V$3(A,Q,B,$,{dependencies:J})}}async function D$3(A,Q,B){let $=(z,q)=>{let N=Number(process.hrtime.bigint()-q)/1e6,I=gs0();j.info("Startup phase",{phase:z,phaseMs:Math.round(N),sinceMainMs:I===null?void 0:Math.round(I)})};u2(B,Q);let J=process.hrtime.bigint(),Y=await p8(A,Q);$("runMainThread:createThreadDependencies",J);let{serverStatus:Z}=Y;if(pF(Z))throw me(Z,A.ampURL);let X=xA(Z)?Z:null,F=X?.user.email;await cQ1(B,Q,Z);let D=YP(Z),G=Vs(Q,D);if(G instanceof Error)b5(G.message);if(X&&!jS(Q.mode,F))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!F||!P7(F)))throw new J4("Headless executor mode is only available for Amp employees",1);wF0();let U=await Y.secretStorage.get("apiKey",A.ampURL);if(!U)throw new J4("API key required for headless mode. Please run `amp login` first.",1);let K=typeof Q.headless==="string"&&Q.headless!=="true"?Q.headless:void 0;if(K&&!zQ(K))throw new J4(`Invalid thread ID: ${K}`,1);let E=K?void 0:await O$3({dependencies:Y,apiKey:U,visibility:G??void 0}),W=K??E?.threadId;if(!W)throw new J4("Failed to resolve headless thread ID",1);let H=await lp4(W);if(H.status==="already-running")await Y.asyncDispose(),await fW(),process.exit(0);try{await fp4({ampURL:A.ampURL,apiKey:U,workspaceRoot:process.cwd(),threadId:W,ownerUserId:E?.ownerUserId,threadVersion:E?.threadVersion,agentMode:E?.agentMode,initialToolDiscovery:Promise.all([Y.mcpService.initialized,Y.toolboxService.initialized]).then(()=>{return}),configService:Y.configService,mcpService:Y.mcpService,toolService:Y.toolService,skillService:Y.skillService,fileSystem:Y.fileSystem,pluginService:Y.pluginService,pluginPlatform:Y.headlessPluginPlatform})}finally{await H.release(),await Y.asyncDispose()}await fW(),process.exit(0)}async function G$3(A,Q,B,$){let{userInput:J,stdinInput:Y}=await C$A(Q),Z=!!Q.streamJson||!!Q.streamJsonThinking;M$A({...Q,streamJson:Z},A.executeMode,J),u2(B,Q),Ch4(),wF0();let X=Q.threadId&&zQ(Q.threadId)?Q.threadId:void 0,F=Q.observe?I2(Q.observe)??KJ(Q.observe):void 0,D=await $.serverStatusPromise;if(pF(D))throw me(D,A.ampURL);let G=await $.secretStorage.get("apiKey",A.ampURL);if(!G)throw new J4("API key required. Please run `amp login` first.",1);let V=xA(D)&&P7(D.user.email);if(A.executeMode){n11($.mcpService,A.settings);try{let U=eE0(B,Q),K=await jI(),E=X?U:nD0({agentMode:Q.mode,explicitEffort:U,sessionState:K}),W=X?void 0:aD0(await Cf($.configService),{agentMode:Q.mode,explicitEffort:U,sessionState:K}),H=await Ap4({apiKey:G,ampURL:A.ampURL,workspaceRoot:process.cwd(),dependencies:$,userInput:J,stdinInput:Y,stats:!!Q.stats,streamJson:Z,streamJsonThinking:!!Q.streamJsonThinking,streamJsonInput:!!Q.streamJsonInput,stdin:process.stdin,agentMode:Q.mode,reasoningEffort:E,labels:Q.label,initialThreadID:X,initialSettings:W});if(await Wu(H,"execute"),Q.archive)await $.threadService.archive(H,!0)}finally{await $.asyncDispose()}await fW(),process.exit(0)}else{let U=eE0(B,Q),K=Zi($.configService),E=new $e($.fuzzyServer),W=process.cwd();await yAA({ampURL:A.ampURL,apiKey:G,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??pX(A.ampURL),configService:$.configService,toolService:$.toolService,pluginPlatform:$.pluginPlatform,pluginService:$.pluginService,skillService:$.skillService,mcpService:$.mcpService,readFileSystemDirectory:({uri:H})=>sx({fileSystem:$.fileSystem,workspaceRoot:W},H),completionBuilder:E,workspaceRoot:W,listThreads:()=>K.listThreads(),getThreadFromServer:(H)=>K.getThread(H),toolboxes:$.toolboxService.toolboxes,isInternalUser:V,settingsFilePath:$.settingsStorage.getSettingsFilePath()},{initialThreadID:F??X,initialUserInput:J||void 0,openThreadPickerOnStart:Q.openThreadSwitcher,observerOnly:!!F,splashOrbVisualStyle:"neo",showNeoWelcome:Q.showWelcome,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,initialReasoningEffort:U}),process.exit(0)}}async function V$3(A,Q,B,$,J){let Y=process.hrtime.bigint(),Z=(J0,w0)=>{let e=Number(process.hrtime.bigint()-w0)/1e6,D0=gs0();j.info("Startup phase",{phase:J0,phaseMs:Math.round(e),sinceMainMs:D0===null?void 0:Math.round(D0)})},{userInput:X,stdinInput:F}=await C$A(Q),D=!!Q.streamJson||!!Q.streamJsonThinking;M$A({...Q,streamJson:D},A.executeMode,X),u2(B,Q);let G=process.hrtime.bigint(),V=J?.dependencies??await p8(A,Q),U=V.hasAPIKeyAtStartup,K=V.serverStatus==="pending";if(j.info("Interactive auth startup mode",{deferInteractiveAuth:K,hasAPIKeyAtStartup:U,executeMode:A.executeMode,headless:Boolean(Q.headless)}),!J)Z("runMainThread:createThreadDependencies",G);let{serverStatus:E}=V;if(!K&&pF(E))throw me(E,A.ampURL);let W=xA(E)?E:null,H=W?.user.email,z=!!(H&&P7(H));if(z)wF0();if(!K)await cQ1(B,Q,E);let q=YP(E),N=q?.features??[],I=q?.team??null,w=Vs(Q,q);if(w instanceof Error)b5(w.message);if(W&&!jS(Q.mode,H))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);let C=Q.threadId&&zQ(Q.threadId)?Q.threadId:void 0;G=process.hrtime.bigint();let O=await $W0(V);Z("runMainThread:createWorkerDeps",G);let _=A.executeMode?void 0:async(J0)=>Wu(J0,"interactive"),T={threadService:V.threadService,workerDeps:O,createThread:async(J0)=>{let w0=K?await V.serverStatusPromise:E,e=await CF0(A.settings,process.cwd(),YP(w0),w);if(e instanceof Error)b5(e.message);return H71(O,{threadMeta:e?rY(e):void 0,agentMode:J0??Q.mode,onFirstAssistantMessage:_})},validateThreadOwnership:async(J0,w0)=>{if(w0?.nonBlockingOwnershipCheck){W$A(J0,V.configService,V.viewerUserIDPromise).catch((e)=>{if(e instanceof J4){if(w0.onOwnershipError){w0.onOwnershipError(e,J0);return}bW(e,J0);return}j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:e})});return}try{await W$A(J0,V.configService,V.viewerUserIDPromise)}catch(e){if(e instanceof J4)throw e;j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:e})}},switchThreadVisibility:w,switchThreadAgentMode:Q.mode,onFirstAssistantMessage:_,handleError:bW},S=async()=>{try{return m9A(T,Q.threadId,{nonBlockingOwnershipCheck:Q.nonBlockingThreadOwnershipCheck})}catch(J0){if(J0 instanceof J4)throw J0;throw await bW(J0,Q.threadId),Error("handleError should have called process.exit()")}},b=(async()=>{if(K){j.info("Skipping initial free tier status fetch until auth is complete");return}try{let J0=await V.configService.getLatest(),w0=zp(J0),e=await VA.getUserFreeTierStatus({},{config:V.configService,signal:AbortSignal.timeout(w0)});if(e.ok)return j.info("User free tier status:",e),e.result;return}catch(J0){j.error("Failed to fetch free tier status:",J0);return}})(),x=!A.executeMode?new m81:null,v,u=null;if(x)v=x,u=(async()=>{let J0=K?await V.serverStatusPromise:V.serverStatus;if(pF(J0))throw me(J0,A.ampURL);await cQ1(B,Q,J0);let w0=process.hrtime.bigint(),e=await S();if(Z("runMainThread:createThreadPool",w0),x.attach(e),X){let D0=await y1(e.threadHandles$);if(!D0)throw new J4("No active thread is available yet.",1);await D0.sendMessage({content:[{type:"text",text:X}]})}})(),u.catch(async(J0)=>{let w0=J0 instanceof Error?J0:Error(String(J0));x.setInitError(w0),await bW(J0,Q.threadId)});else G=process.hrtime.bigint(),v=await S(),Z("runMainThread:createThreadPool",G);let m=Q.notifications!==void 0?Q.notifications:!A.executeMode;G=process.hrtime.bigint();let d=await V.configService.getLatest();if(Z("runMainThread:configService.getLatest",G),G=process.hrtime.bigint(),J$3({configService:V.configService,threadService:V.threadService,config:d,useNotificationsForService:m,threadViewStates$:()=>v.threadHandles$.pipe(u4((J0)=>{if(!J0)return m0.of({});return P6(J0.thread$,J0.threadViewState$).pipe(M1(([w0,e])=>({[w0.id]:e})))}))}),Z("runMainThread:createCliNotificationService",G),A.executeMode){n11(V.mcpService,A.settings);let J0=eE0(B,Q),w0=await jI(),e=C?J0:nD0({agentMode:Q.mode,explicitEffort:J0,sessionState:w0}),D0={userInput:X,stdinInput:F,dependencies:V,streamJson:D,streamJsonInput:!!Q.streamJsonInput,streamJsonThinking:!!Q.streamJsonThinking,stats:!!Q.stats,ampURL:A.ampURL,isInternalUser:z,agentMode:Q.mode,reasoningEffort:e,labels:Q.label},a=await Ag4({threadPool:v,...D0});if(await Wu(a,"execute"),Q.archive)await V.threadService.archive(a,!0);await V.asyncDispose(),process.exit(0)}let g=!1,n=!1;if(Q.jetbrains||Q.ide){await b80();let J0=await lF({jetbrainsOnly:Q.jetbrains});if(J0.length===0){if(Q.jetbrains)g=!await V.configService.get("jetbrains.skipInstall")}else if(J0.length===1){let w0=J0[0];if(w0)f3.selectConfig(w0)}else n=!0}G=process.hrtime.bigint();let c=K11("0.0.1778057090-g80f5f1",V.settingsStorage,{startDelayMs:3000});Z("runMainThread:createUpdateService",G),G=process.hrtime.bigint();let Q0=new a11(V.mcpService,A.settings.getWorkspaceRootPath());if(Z("runMainThread:createMcpTrustHandler",G),X&&A.executeMode){let J0=await y1(v.threadHandles$);if(!J0)throw new J4("No active thread is available yet.",1);await J0.sendMessage({content:[{type:"text",text:X}]})}G=process.hrtime.bigint();let E0=await jI();Z("runMainThread:loadSessionState",G),j.info("Loaded session state:",E0);let i=eE0(B,Q),$0={...E0,launchCount:E0.launchCount+1,lastReasoningEffortByMode:i?{...E0.lastReasoningEffortByMode,[Q.mode]:i}:E0.lastReasoningEffortByMode};oQ((J0)=>({...J0,launchCount:J0.launchCount+1}));try{if(G=process.hrtime.bigint(),await s6A({history:new Kr,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,skillService:V.skillService,configService:V.configService,secretStorage:V.secretStorage,internalAPIClient:VA,threadPool:v,createSystemPromptDeps:async()=>I$A(V),ideClient:f3,mcpService:V.mcpService,toolboxService:V.toolboxService,mcpTrustHandler:Q0,updateService:c,pluginPlatform:V.pluginPlatform,pluginService:V.pluginService},{initialServerStatus:V.serverStatus,stdout:process.stdout,hasAPIKeyAtStartup:V.hasAPIKeyAtStartup,ampURL:A.ampURL,startupThreadID:C,showJetBrainsInstaller:g,showIdePickerHint:n,openThreadSwitcher:Q.openThreadSwitcher,jetbrainsMode:Q.jetbrains,clientId:pB3,logFile:{path:$},sessionState:$0,freeTierStatusPromise:b,workspace:I??null,features:N,isInternalUser:z,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,splashOrbVisualStyle:Q.neoOrb?"neo":"classic",buildTimestamp:"2026-05-06T08:48:27.049Z"},(J0)=>new a81({...J0,threadPool:J0.threadPool},(w0)=>new E71({...w0,threadState:w0.threadState}))),Z("runMainThread:mountApp-returned",G),u)await u}finally{await v.dispose().catch((J0)=>{j.error("Failed to dispose thread pool during shutdown",J0)})}await V.asyncDispose(),Z("runMainThread:dependencies.asyncDispose",Y),process.exit(0)}async function c5(A){if(j.info("Initializing CLI context",{argv:process.argv,nodeEnv:"production",hasAmpURL:Boolean(process.env.AMP_URL),hasAmpAPIKey:Boolean(process.env.AMP_API_KEY),hasSettingsFile:Boolean(process.env.AMP_SETTINGS_FILE)}),A.interactive)SJ.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
6406
|
+
`);let Q=!!A.execute||!process.stdout.isTTY&&!A.streamJson,B=process.stdout.isTTY&&process.stderr.isTTY;j.info("Execution mode resolved",{executeMode:Q,stdoutTTY:process.stdout.isTTY,stderrTTY:process.stderr.isTTY,streamJson:A.streamJson,executeFlag:A.execute});let $=await A$4({get:async(X)=>{if(X!==Ic)return;try{let F=await N$A(dQ1,"utf-8");return JSON.parse(F).installationID}catch{return}},set:async(X,F)=>{if(X!==Ic)return;await uB3(ge.dirname(dQ1),{recursive:!0}),await hB3(dQ1,JSON.stringify({installationID:F},null,2),{mode:384})}},{clientType:"cli",platform:X70()});G44($);let J=await Jd4({...A,workspaceTrust:{current:!0,changes:nS0},getHook:process.env.AMP_URL?(X,F)=>{if(X==="url")return Promise.resolve(process.env.AMP_URL);return F()}:void 0});if(A.mcpConfig){let X=await rl4(A.mcpConfig);J=sl4(J,X)}let Y=ge.dirname(J.getSettingsFilePath());e_4(Ff,Y),J=pe1(J);let Z=await J.get("url","admin")??await J.get("url","global");if(!Z)Z=_7;if(j.info("Resolved Amp URL",{ampURL:Z,settingsFile:J.getSettingsFilePath(),workspaceRoot:J.getWorkspaceRootPath()}),!gz(Z))j.info("Targeting custom Amp server",{ampURL:Z});return{executeMode:Q,isTTY:B,ampURL:Z,settings:J,secrets:eAA(await l01(A,J))}}function U$3(A){let Q={};for(let B=0;B<A.length;B++){let $=A[B];if($?.startsWith("--")){let Y=$.slice(2).replace(/-([a-z])/g,(X,F)=>F.toUpperCase()),Z=A[B+1];if(Z&&!Z.startsWith("--"))Q[Y]=Z,B++}}return Q}function K$3(A,Q){let B=A.includes("--headless")||A.some((J)=>J.startsWith("--headless=")),$=ge.resolve(Q.logFile??process.env.AMP_LOG_FILE??(B?mB3:Ar));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:$}}async function E$3(){Gx4();let A=U$3(process.argv),Q=K$3(process.argv,A),B=Mh4(Q),$=process.argv.includes("--no-color"),J=process.argv.includes("--color"),Y=process.stdout.isTTY&&process.stderr.isTTY;if($||!J&&!Y)s0.level=0;if(cB3(j),j.info("Starting Amp CLI.",{version:"0.0.1778057090-g80f5f1",buildTimestamp:"2026-05-06T08:48:27.049Z"}),process.platform==="win32"&&cj())cd4();if(parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new J4(F7.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await X$3(B).parseAsync(process.argv)}s_4().startActiveSpan("main",async(A)=>{process.on("exit",()=>A.end()),await E$3().catch(bW)});async function W$3(A,Q){let B=A.ampURL.includes("localhost")||A.ampURL.includes("127.0.0.1");if(process.env.AMP_URL&&!B)await A.settings.set("url",process.env.AMP_URL,"global"),D5.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
|
|
6407
6407
|
`);else if(!gz(A.ampURL))D5.write(`Logging in to ${new URL(A.ampURL).hostname}
|
|
6408
6408
|
`);let $=process.env.AMP_API_KEY;if($)D5.write(`API key found in environment variable, storing...
|
|
6409
6409
|
`),await Q.set("apiKey",$,A.ampURL),D5.write(`API key successfully stored.
|