@sourcegraph/amp 0.0.1777921804-gae5962 → 0.0.1777926321-gea1d78
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 +10 -10
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -4819,12 +4819,12 @@ ${E}`))}},error:(K)=>{if(!U)U=!0,F(Error(`Failed to spawn brew: ${K.message}`))}
|
|
|
4819
4819
|
${E}`;if(Y==="pnpm"&&E.includes("Unable to find the global bin directory"))W+=`
|
|
4820
4820
|
|
|
4821
4821
|
Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
|
|
4822
|
-
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()}})})}o0();o0();IN();async function XD0(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=ur(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 KT5="https://static.ampcode.com/cli/cli-version.txt";async function FD0(A){let Q=new AbortController,B=setTimeout(()=>Q.abort(),5000);try{let $=await fetch(`${KT5}?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=ur(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 ET5=604800000;function jd4(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>ET5)return{ageMs:B};return null}function ur(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 m01(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?eV(B):void 0;return{sha:$,age:J}}catch{return null}}O1();o0();import{readFile as WT5,realpath as HT5}from"node:fs/promises";import{homedir as zT5}from"node:os";import{dirname as Rd4,join as p01}from"node:path";async function Pd4(A){switch(A){case"binary":case"brew":return qT5(yr());case"npm":case"pnpm":case"yarn":case"bun":return NT5();case"bootstrap":return IT5()}}async function qT5(A){let Q=await dD(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 NT5(){try{let A=process.argv[1];if(!A)return null;let Q=await HT5(A),B=Rd4(Rd4(Q));return await _d4(p01(B,"package.json"))}catch(A){return j.debug("failed to read installed version from package.json",{error:A}),null}}async function IT5(){try{let A=process.env.AMP_HOME??p01(zT5(),".amp");return await _d4(p01(A,"package","package.json"))}catch(A){return j.debug("failed to read installed version from bootstrap package.json",{error:A}),null}}async function _d4(A){let Q=await WT5(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 wT5=3600000,CT5=5000;function d01(A,Q,B={}){let $=new h4,J=$.pipe(iA({shouldCountRefs:!1})),Y=B.startDelayMs??0,Z=B.checkIntervalMs??wT5,X=!1,F=()=>{X=!0};return setImmediate(async()=>{let D=new AY().scoped("update");if(Y>0){if(await tV(Y),X)return}let G=J.subscribe({next:(U)=>{D.debug("emit new state",U)}}),V=A;try{while(!X){let U=await MT5(V,Q,D,$);if(U.stop)return;if(U.updatedTo)V=U.updatedTo;if(U.emittedVisibleState){if(await tV(CT5),X)return;$.next("hidden")}if(Z<=0)return;let K=1000,E=Z;while(E>0&&!X){let W=Math.min(K,E);await tV(W),E-=W}}}finally{G.unsubscribe(),$.complete()}}),{state:J,dispose:F}}async function MT5(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 YD0(),X=Z==="binary"||Z==="brew";B.debug("checking",{currentVersion:A,mode:Y,packageManager:Z,isBinaryDistribution:X});let F;if(X)F=await FD0(A);else{let V=await cj();F=await XD0(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 Pd4(Z);if(V&&ur(V,F.latestVersion)>=0){if(B.debug("on-disk version already up to date",{currentVersion:A,installedVersion:V,latestVersion:F.latestVersion}),J.updatedTo=V,ur(A,V)<0){let U=await pW(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!==yr()){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 br(F.latestVersion,Z),J.updatedTo=F.latestVersion;let V=await pW(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}}IN();import{stderr as cD}from"node:process";function Td4(A){let Q=new lN().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 _01($.force||!1,$.verbose||!1,"0.0.
|
|
4822
|
+
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()}})})}o0();o0();IN();async function XD0(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=ur(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 KT5="https://static.ampcode.com/cli/cli-version.txt";async function FD0(A){let Q=new AbortController,B=setTimeout(()=>Q.abort(),5000);try{let $=await fetch(`${KT5}?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=ur(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 ET5=604800000;function jd4(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>ET5)return{ageMs:B};return null}function ur(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 m01(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?eV(B):void 0;return{sha:$,age:J}}catch{return null}}O1();o0();import{readFile as WT5,realpath as HT5}from"node:fs/promises";import{homedir as zT5}from"node:os";import{dirname as Rd4,join as p01}from"node:path";async function Pd4(A){switch(A){case"binary":case"brew":return qT5(yr());case"npm":case"pnpm":case"yarn":case"bun":return NT5();case"bootstrap":return IT5()}}async function qT5(A){let Q=await dD(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 NT5(){try{let A=process.argv[1];if(!A)return null;let Q=await HT5(A),B=Rd4(Rd4(Q));return await _d4(p01(B,"package.json"))}catch(A){return j.debug("failed to read installed version from package.json",{error:A}),null}}async function IT5(){try{let A=process.env.AMP_HOME??p01(zT5(),".amp");return await _d4(p01(A,"package","package.json"))}catch(A){return j.debug("failed to read installed version from bootstrap package.json",{error:A}),null}}async function _d4(A){let Q=await WT5(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 wT5=3600000,CT5=5000;function d01(A,Q,B={}){let $=new h4,J=$.pipe(iA({shouldCountRefs:!1})),Y=B.startDelayMs??0,Z=B.checkIntervalMs??wT5,X=!1,F=()=>{X=!0};return setImmediate(async()=>{let D=new AY().scoped("update");if(Y>0){if(await tV(Y),X)return}let G=J.subscribe({next:(U)=>{D.debug("emit new state",U)}}),V=A;try{while(!X){let U=await MT5(V,Q,D,$);if(U.stop)return;if(U.updatedTo)V=U.updatedTo;if(U.emittedVisibleState){if(await tV(CT5),X)return;$.next("hidden")}if(Z<=0)return;let K=1000,E=Z;while(E>0&&!X){let W=Math.min(K,E);await tV(W),E-=W}}}finally{G.unsubscribe(),$.complete()}}),{state:J,dispose:F}}async function MT5(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 YD0(),X=Z==="binary"||Z==="brew";B.debug("checking",{currentVersion:A,mode:Y,packageManager:Z,isBinaryDistribution:X});let F;if(X)F=await FD0(A);else{let V=await cj();F=await XD0(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 Pd4(Z);if(V&&ur(V,F.latestVersion)>=0){if(B.debug("on-disk version already up to date",{currentVersion:A,installedVersion:V,latestVersion:F.latestVersion}),J.updatedTo=V,ur(A,V)<0){let U=await pW(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!==yr()){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 br(F.latestVersion,Z),J.updatedTo=F.latestVersion;let V=await pW(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}}IN();import{stderr as cD}from"node:process";function Td4(A){let Q=new lN().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 _01($.force||!1,$.verbose||!1,"0.0.1777926321-gea1d78"),process.exit()});A.addCommand(Q,{hidden:!0});let B=new lN("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 OT5($.targetVersion)});A.addCommand(B)}function LT5(A){let Q=Boolean(A.isTTY),B=0,$=!1;function J(){if(!Q||!$)return;A.write(`
|
|
4823
4823
|
`),$=!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 OT5(A){let B=process.platform==="win32"&&dj()?{currentExecutablePath:process.execPath}:void 0,{flushProgressLine:$,renderProgress:J}=LT5(cD);if(process.env.AMP_SKIP_UPDATE_CHECK==="1")cD.write(s0.yellow(`Note: AMP_SKIP_UPDATE_CHECK=1 is set, which disables automatic update checking. Manual updates will still work.
|
|
4824
4824
|
|
|
4825
4825
|
`));try{if(!A){cD.write(s0.blue(`Checking for updates...
|
|
4826
|
-
`));let X=!1,F;if(dj()){let D=await FD0("0.0.
|
|
4827
|
-
`));let V=await pW("0.0.
|
|
4826
|
+
`));let X=!1,F;if(dj()){let D=await FD0("0.0.1777926321-gea1d78");X=D.hasUpdate,F=D.latestVersion}else{let D=await cj(),G=await XD0("0.0.1777926321-gea1d78",D);X=G.hasUpdate,F=G.latestVersion}if(!X){let D=m01("0.0.1777926321-gea1d78"),G=D?.age?`released ${D.age} ago`:`built ${eV(new Date("2026-05-04T20:29:05.940Z"))} ago`;cD.write(s0.green(`✓ Amp is already up to date on version ${"0.0.1777926321-gea1d78"} (${G})
|
|
4827
|
+
`));let V=await pW("0.0.1777926321-gea1d78",B);if(V.warning)cD.write(`
|
|
4828
4828
|
`+s0.yellow(V.warning)+`
|
|
4829
4829
|
`);process.exit(0)}if(!F)cD.write(s0.yellow("[WARN] could not find latest version")),process.exit(0);A=F}cD.write(s0.blue(`Updating to version ${A}...
|
|
4830
4830
|
`)),await br(A,void 0,(X)=>{$(),cD.write(s0.dim(`Running: ${X}
|
|
@@ -5316,7 +5316,7 @@ Recent keys (newest first)
|
|
|
5316
5316
|
`,Z)),!this.widget.embedded)N.push(new M(`
|
|
5317
5317
|
`)),N.push(new M(`${z("Press Escape to close")}
|
|
5318
5318
|
`,Y))}else N.push(new M(`No analysis available
|
|
5319
|
-
`,Y));let I=new l({text:new M("",void 0,N),selectable:!0}),w=new x8({child:I});if(this.widget.embedded)return w;return new t1({child:new l0({constraints:new M1(W,W,0,K),decoration:new u4(B.background,a1.all(new o1(B.primary,1,"rounded"))),child:new u0({padding:N0.all(1),child:w})})})}}VZ0();o0();class IJ extends v0{props;constructor(A={}){super();this.props=A}static of(A){let Q=A.findAncestorStateOfType(S51);if(Q)return Q;throw Error("Overlay.of() called with a context that does not contain an Overlay widget")}createState(){return new S51}}class S51 extends k0{entries=[];initState(){super.initState();let A=this.widget.props.initialEntries||[];for(let Q of A)this._addEntry(Q)}dispose(){for(let A of this.entries)A._setOverlayState(void 0);this.entries=[],super.dispose()}insert(A,Q){if(A.mounted)throw Error("OverlayEntry is already mounted in an overlay");if(Q){let B=this.entries.indexOf(Q);if(B===-1)throw Error('The "above" entry is not in this overlay');this.entries.splice(B+1,0,A),A._setOverlayState(this),A.markNeedsBuild()}else this._addEntry(A);this.setState(()=>{})}remove(A){let Q=this.entries.indexOf(A);if(Q===-1)return;this.entries.splice(Q,1),A._setOverlayState(void 0),this.setState(()=>{})}removeAll(){for(let A of this.entries)A._setOverlayState(void 0);this.entries=[],this.setState(()=>{})}rearrange(A){for(let Q of A)if(!this.entries.includes(Q))throw Error("Cannot rearrange: entry is not in this overlay");if(A.length!==this.entries.length)throw Error("Cannot rearrange: entry count mismatch");this.entries=[...A],this.setState(()=>{})}_markNeedsRebuild(){this.setState(()=>{})}_addEntry(A){this.entries.push(A),A._setOverlayState(this),A.markNeedsBuild()}build(A){let Q=[];if(this.widget.props.child)Q.push(this.widget.props.child);for(let B of this.entries)try{let $=B.builder(A);Q.push($),B._clearNeedsRebuild()}catch($){j.error("Error building overlay entry:",$)}return new re4({children:Q})}}class re4 extends _9{constructor({children:A=[]}={}){super({children:A})}createRenderObject(){return new se4}updateRenderObject(A){}}class se4 extends Z4{constructor(){super();this.allowHitTestOutsideBounds=!0}performLayout(){super.performLayout();let A=this._lastConstraints;N4(!!A,"performLayout called without constraints");let Q=this.children,B=A.minWidth,$=A.minHeight;for(let J of Q)J.layout(A),B=Math.max(B,J.size.width),$=Math.max($,J.size.height);this.setSize(Math.min(A.maxWidth,B),Math.min(A.maxHeight,$))}}class oI{builder;maintainState;_overlayState;_needsBuild=!0;constructor(A,Q=!1){this.builder=A;this.maintainState=Q}get mounted(){return this._overlayState!==void 0}remove(){if(this._overlayState)this._overlayState.remove(this)}markNeedsBuild(){if(this._needsBuild=!0,this._overlayState)this._overlayState._markNeedsRebuild()}_setOverlayState(A){this._overlayState=A}_needsRebuild(){return this._needsBuild}_clearNeedsRebuild(){this._needsBuild=!1}}class rI extends H6{onShowImagePreview;onShowSaveDialog;constructor(A){super({child:A.child});this.onShowImagePreview=A.onShowImagePreview,this.onShowSaveDialog=A.onShowSaveDialog}static of(A){let Q=A.dependOnInheritedWidgetOfExactType(rI);if(Q)return{onShowImagePreview:Q.onShowImagePreview,onShowSaveDialog:Q.onShowSaveDialog};return}updateShouldNotify(A){return this.onShowImagePreview!==A.onShowImagePreview||this.onShowSaveDialog!==A.onShowSaveDialog}}class sI extends v0{props;constructor(A){super();this.props=A}createState(){return new ee4}}class ee4 extends k0{previewState={status:"loading"};loadingSpinner=new W6;loadingSpinnerInterval=null;loadGeneration=0;getCapabilities(){try{return v4.instance.tuiInstance.getCapabilities()}catch{return null}}initState(){super.initState(),this.loadPreviewImage()}didUpdateWidget(A){if(super.didUpdateWidget(A),this.imagePreviewIdentity(A.props.image)!==this.imagePreviewIdentity(this.widget.props.image))this.loadPreviewImage()}dispose(){this.loadGeneration+=1,this.stopLoadingSpinner(),super.dispose()}imagePreviewIdentity(A){if(A.source.type==="base64")return`base64:${A.sourcePath}:${A.source.data.length}`;return`url:${A.source.url}`}syncLoadingSpinner(){if(this.previewState.status==="loading"){if(!this.loadingSpinnerInterval)this.loadingSpinnerInterval=setInterval(()=>{if(this.loadingSpinner.step(),this.mounted)this.setState()},120);return}this.stopLoadingSpinner()}stopLoadingSpinner(){if(this.loadingSpinnerInterval)clearInterval(this.loadingSpinnerInterval),this.loadingSpinnerInterval=null}loadPreviewImage=async()=>{let A=++this.loadGeneration;if(this.previewState={status:"loading"},this.syncLoadingSpinner(),this.mounted)this.setState();try{let Q=await GG0(this.widget.props.image);if(!this.mounted||A!==this.loadGeneration)return;this.previewState={status:"loaded",preview:Q}}catch(Q){if(!this.mounted||A!==this.loadGeneration)return;this.previewState={status:"error",message:Q instanceof Error?Q.message:String(Q)}}finally{if(this.mounted&&A===this.loadGeneration)this.syncLoadingSpinner(),this.setState()}};supportsKittyGraphics(){return this.getCapabilities()?.kittyGraphics??!1}build(A){let Q=this.widget.props.imageIndex,B=this.supportsKittyGraphics(),$=_0.of(A),J=$.colors,Y=A4.sizeOf(A),Z=Y.width,X=Y.height,F=Math.max(40,Z-8),D=Math.max(10,F-6),G="Unknown",V="Unknown",U=null,K=null;if(this.previewState.status==="loaded")G=Is(this.previewState.preview.mediaType),V=te4(this.previewState.preview.fileSizeBytes),U=this.previewState.preview.originURL&&!ws(this.previewState.preview.originURL)?this.previewState.preview.originURL:null,K=this.previewState.preview.image;else if(this.widget.props.image.source.type==="base64"){G=Is(this.widget.props.image.source.mediaType);let O=Math.round(this.widget.props.image.source.data.length*3/4);V=te4(O)}else G="URL",V="loading...",U=ws(this.widget.props.image.source.url)?null:this.widget.props.image.source.url;let E=`Image ${Q+1}`,W=this.widget.props.onRemove!==void 0,H=W?[{keys:["Esc"],label:"close"},{keys:["x"],label:"remove image"}]:[{keys:["Esc"],label:"close"}],z=2,q=U!==null?2:0,N=Math.max(0,X-8-z-q),I=new y({color:J.foreground,dim:!0}),w=[];if(this.previewState.status==="loading")w.push(new l({text:new M("",void 0,[new M("Loading image ",I),new M(this.loadingSpinner.toBraille(),I)])}));else if(this.previewState.status==="error")w.push(new l({text:new M(`Error: ${this.previewState.message}`,new y({color:$.app.toolError}))}));else if(B&&K&&N>=2)w.push(new t1({child:new KR({image:K,width:D,height:N,backgroundColor:J.background})}));else if(!B)w.push(new l({text:new M("(Terminal does not support inline images)",new y({color:J.foreground,dim:!0,italic:!0}))}));let C=this.previewState.status==="loading"&&this.widget.props.image.source.type==="url";if(this.previewState.status!=="error"&&!C)w.push(new C0({height:1})),w.push(new t1({child:new l({text:new M(`${G}, ${V}`,I)})}));if(U!==null)w.push(new C0({height:1})),w.push(new l({text:new M(U,I)}));return new fA({header:E,footer:H,minWidth:F,maxWidth:F,maxHeight:X,autofocus:!1,onDismiss:this.widget.props.onDismiss,child:new m4({autofocus:!0,debugLabel:"ImagePreviewDialog.body",onKey:(O)=>{if(W&&(O.key==="x"||O.key==="X"))return this.widget.props.onRemove?.(),"handled";return"ignored"},child:new b0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:w})})})}}function te4(A){if(A>=1048576)return`${(A/1048576).toFixed(1)} MB`;if(A>=1024)return`${Math.round(A/1024)} KB`;return`${A} bytes`}class k51{reader;readerUnsubscribe;_entries=[];_selectedMessageIndex=null;_selectedQueuedMessageIndex=null;_queuedMessageCount=0;listeners=new Set;onSelectionChange=null;onScrollToBottom=null;onPageUp=null;onPageDown=null;constructor(A){this.reader=A,this.updateEntries(),this.readerUnsubscribe=this.reader.subscribe(()=>{this.updateEntries(),this.notify()})}get entries(){return this._entries}get selectedMessageIndex(){return this._selectedMessageIndex}get selectedQueuedMessageIndex(){return this._selectedQueuedMessageIndex}get hasSelection(){return this._selectedMessageIndex!==null||this._selectedQueuedMessageIndex!==null}setQueuedMessageCount(A){if(this._queuedMessageCount=A,this._selectedQueuedMessageIndex!==null&&this._selectedQueuedMessageIndex>=A){if(A>0)this._selectedQueuedMessageIndex=A-1;else this._selectedQueuedMessageIndex=null;this.notify()}}subscribe(A){return this.listeners.add(A),()=>{this.listeners.delete(A)}}dispose(){this.readerUnsubscribe(),this.onSelectionChange=null,this.onScrollToBottom=null,this.onPageUp=null,this.onPageDown=null}updateEntries(){if(this._entries=this.reader.read(),this._selectedMessageIndex!==null&&!this.isUserMessageIndex(this._selectedMessageIndex))this._selectedMessageIndex=null}selectPrevious(){if(this._selectedMessageIndex===null){if(this._selectedQueuedMessageIndex!==null){if(this._selectedQueuedMessageIndex>0)return this.setSelectedQueuedIndex(this._selectedQueuedMessageIndex-1);return this._selectedQueuedMessageIndex=null,this.selectLastThreadMessage()}if(this._queuedMessageCount>0)return this.setSelectedQueuedIndex(this._queuedMessageCount-1);return this.selectLastThreadMessage()}let A=this.findAdjacentUserMessage(this._selectedMessageIndex,-1);return A!==null?this.setSelectedMessageIndex(A):!1}selectNext(){if(this._selectedMessageIndex!==null){let A=this.findAdjacentUserMessage(this._selectedMessageIndex,1);if(A!==null)return this.setSelectedMessageIndex(A);if(this.setSelectedMessageIndex(null),this._queuedMessageCount>0)return this.setSelectedQueuedIndex(0);return!0}if(this._selectedQueuedMessageIndex!==null){if(this._selectedQueuedMessageIndex<this._queuedMessageCount-1)return this.setSelectedQueuedIndex(this._selectedQueuedMessageIndex+1);return this.setSelectedQueuedIndex(null)}return!1}selectLastThreadMessage(){let A=this.getUserMessageIndices();return this.setSelectedMessageIndex(A[A.length-1]??null)}findAdjacentUserMessage(A,Q){let B=this.getUserMessageIndices();if(Q===-1){for(let $=B.length-1;$>=0;$--)if(B[$]<A)return B[$]}else for(let $ of B)if($>A)return $;return null}clearSelection(){this._selectedMessageIndex=null,this._selectedQueuedMessageIndex=null,this.notify()}setSelectedQueuedIndex(A){return this._selectedQueuedMessageIndex=A,this.notify(),!0}setSelectedMessageIndex(A){if(this._selectedMessageIndex===A)return!1;return this._selectedMessageIndex=A,this.onSelectionChange?.(A),this.notify(),!0}getUserMessageIndices(){let A=[];for(let Q=0;Q<this._entries.length;Q++){let B=this._entries[Q];if(B?.type==="message"&&B.role==="user")A.push(Q)}return A}isUserMessageIndex(A){let Q=this._entries[A];return Q?.type==="message"&&Q.role==="user"}notify(){for(let A of this.listeners)A()}}a8();function mi5(A,Q){let B={},$=A["internal.model"]??Q?.["internal.model"];if($!==void 0)B["internal.model"]=$;if(A["reasoning.effort"]!==void 0)B["reasoning.effort"]=A["reasoning.effort"];return B}function cV0(A,Q,B=null){if(!Q)return{};let $=jS(A,mi5(Q,B)),J=A==="smart"&&Q?.["anthropic.speed"]==="fast",Y=dF(A)&&Q?.["openai.speed"]==="fast",Z=J?"6x":Y?"2½x":void 0,X={};if($)X.reasoningEffort=$;if(Z)X.speedCostMultiplier=Z;return X}class wt extends H5{onSizeChange;constructor({key:A,child:Q,onSizeChange:B}){super({key:A,child:Q});this.onSizeChange=B}createRenderObject(){return new A0A(this.onSizeChange)}updateRenderObject(A){A.updateCallback(this.onSizeChange)}}class A0A extends Z4{_onSizeChange;_lastReportedSize=null;_pendingReportedSize=null;_reportScheduled=!1;constructor(A){super();this._onSizeChange=A}updateCallback(A){this._onSizeChange=A}performLayout(){let A=this._lastConstraints;if(!A)return;let Q=this.children[0];if(!Q){let $=A.constrain(0,0);this.setSize($.width,$.height),super.performLayout();return}Q.layout(A),Q.setOffset(0,0);let B=A.constrain(Q.size.width,Q.size.height);this.setSize(B.width,B.height),this._scheduleSizeReport(B),super.performLayout()}paint(A,Q=0,B=0){super.paint(A,Q,B)}_scheduleSizeReport(A){if(this._sizesEqual(this._lastReportedSize,A))return;if(this._pendingReportedSize=A,this._reportScheduled)return;this._reportScheduled=!0,X6.instance.addPostFrameCallback(()=>{if(this._reportScheduled=!1,!this.attached||!this._pendingReportedSize)return;let Q=this._pendingReportedSize;if(this._pendingReportedSize=null,this._sizesEqual(this._lastReportedSize,Q))return;this._lastReportedSize=Q,this._onSizeChange(Q)},"MeasureSize.size-change")}_sizesEqual(A,Q){if(A===null||Q===null)return A===Q;return A.width===Q.width&&A.height===Q.height}}class v51 extends v0{children;itemCount;itemBuilder;itemKeyBuilder;estimatedItemExtent;estimatedItemExtentBuilder;itemSpacing;cacheExtent;controller;autofocus;position;keyboardScrolling;disableVirtualization;enableSelection;copyOnSelectEnabled;onCopy;onSelectionChanged;showScrollbar;scrollbarThickness;initialViewportHeight;constructor({key:A,children:Q,itemCount:B,itemBuilder:$,itemKeyBuilder:J,estimatedItemExtent:Y=1,estimatedItemExtentBuilder:Z,itemSpacing:X=0,cacheExtent:F=8,controller:D,autofocus:G=!0,position:V="top",keyboardScrolling:U=!0,disableVirtualization:K=!1,enableSelection:E=!1,copyOnSelectEnabled:W=!0,onCopy:H,onSelectionChanged:z,showScrollbar:q=!1,scrollbarThickness:N=1,initialViewportHeight:I=20}){super(A?{key:A}:{});if(Q===void 0&&!($!==void 0&&B!==void 0))throw Error("ListView requires either children or itemBuilder + itemCount");this.children=Q,this.itemCount=B,this.itemBuilder=$,this.itemKeyBuilder=J,this.estimatedItemExtent=Y,this.estimatedItemExtentBuilder=Z,this.itemSpacing=X,this.cacheExtent=F,this.controller=D,this.autofocus=G,this.position=V,this.keyboardScrolling=U,this.disableVirtualization=K,this.enableSelection=E,this.copyOnSelectEnabled=W,this.onCopy=H,this.onSelectionChanged=z,this.showScrollbar=q,this.scrollbarThickness=N,this.initialViewportHeight=I}createState(){return new Q0A}}var pi5=4000;class Q0A extends k0{_controller;_viewportKey=new Y2("list-view-viewport");_viewportSize=20;_viewportWidth=0;_itemIdentities=[];_itemIndexesByIdentity=new Map;_keptAliveItemIdentities=new Set;_extents=[];_prefixSums=[0];_measuredExtents=new Map;_boundOnScrollChanged=this._handleScrollChanged.bind(this);get controller(){return this._controller}get viewportHeight(){return this._viewportSize}get totalContentHeight(){return this._prefixSums[this._prefixSums.length-1]??0}initState(){if(super.initState(),this._viewportSize=this.widget.initialViewportHeight,this._controller=this.widget.controller??new oA,this._configureController(),this._controller.addListener(this._boundOnScrollChanged),this._refreshItemMetadata(!1),this.widget.position==="bottom"){let A=Math.max(0,this.totalContentHeight-this._viewportSize);this._controller.updateMaxScrollExtent(A),this._controller.jumpTo(A)}}didUpdateWidget(A){if(super.didUpdateWidget(A),A.controller!==this.widget.controller){if(this._controller.removeListener(this._boundOnScrollChanged),!A.controller)this._controller.dispose();this._controller=this.widget.controller??new oA,this._configureController(),this._controller.addListener(this._boundOnScrollChanged)}if(A.position!==this.widget.position)this._configureController();let Q=A.itemKeyBuilder!==this.widget.itemKeyBuilder||A.estimatedItemExtent!==this.widget.estimatedItemExtent||A.estimatedItemExtentBuilder!==this.widget.estimatedItemExtentBuilder||A.itemSpacing!==this.widget.itemSpacing,B=Q||A.children!==this.widget.children||A.itemCount!==this.widget.itemCount;if(A.enableSelection&&!this.widget.enableSelection)this._keptAliveItemIdentities.clear();if(B)this._refreshItemMetadata(Q)}build(A){let Q=this._getRealizedRanges(),B=[],$=0;for(let Z of Q){let X=Math.max(0,(this._prefixSums[Z.start]??0)-(this._prefixSums[$]??0));if(X>0)B.push(new C0({key:new mA(`list-view-gap-${$}-${Z.start}`),height:X}));for(let F=Z.start;F<Z.end;F++)B.push(this._buildItem(A,F));$=Z.end}let J=Math.max(0,this.totalContentHeight-(this._prefixSums[$]??this.totalContentHeight));if(J>0)B.push(new C0({key:new mA(`list-view-gap-${$}-${this._getItemCount()}`),height:J}));let Y=new wt({key:this._viewportKey,onSizeChange:this._handleViewportSize,child:new _A({controller:this._controller,autofocus:this.widget.autofocus,position:this.widget.position,keyboardScrolling:this.widget.keyboardScrolling,child:new b0({key:new mA("list-view-column"),crossAxisAlignment:"start",children:B})})});if(this.widget.showScrollbar)Y=new r4({children:[new u0({padding:N0.only({right:this.widget.scrollbarThickness}),child:Y}),new UA({right:0,top:0,bottom:0,child:new C0({width:this.widget.scrollbarThickness,child:new Zt({controller:this._controller,getScrollInfo:()=>{if(this._measuredExtents.size===0)return{totalContent:0,viewportSize:this._viewportSize,scrollOffset:0};let Z=this.totalContentHeight,X=Z-this._viewportSize,F=this._controller.atBottom?X:this._controller.offset;return{totalContent:Z,viewportSize:this._viewportSize,scrollOffset:F}},thickness:this.widget.scrollbarThickness})})})]});if(!this.widget.enableSelection)return Y;return new x8({child:Y,copyOnSelectEnabled:this.widget.copyOnSelectEnabled,onCopy:this.widget.onCopy,onSelectionChanged:this._handleSelectionChanged,scrollController:this._controller,getScrollBounds:this._getScrollBounds})}getEstimatedIndexForOffset(A=this._controller.offset){return this._findIndexAtOffset(Math.max(0,A))}getEstimatedOffsetForIndex(A){let Q=Math.max(0,Math.min(A,this._extents.length));return this._prefixSums[Q]??0}getEstimatedExtentForIndex(A){return this._extents[A]??0}dispose(){if(this._controller.removeListener(this._boundOnScrollChanged),!this.widget.controller)this._controller.dispose();super.dispose()}_buildItem(A,Q){let B=this._itemIdentities[Q]??this._identityForIndex(Q),$=this._keyForIndex(Q),J=this._spacingForIndex(Q),Y=this._buildItemWidget(A,Q),Z=J>0?new u0({padding:N0.only({bottom:J}),child:Y}):Y;if(!this.widget.enableSelection)return new wt({key:$,onSizeChange:(X)=>{this._handleItemSizeChange(Q,X.height)},child:Z});return new p11({key:$,onKeepAliveChange:(X)=>{this._handleItemKeepAliveChange(B,X)},child:new wt({onSizeChange:(X)=>{this._handleItemSizeChange(Q,X.height)},child:Z})})}_buildItemWidget(A,Q){let B=this.widget.children?.[Q];if(B)return B;let $=this.widget.itemBuilder;if(!$)throw Error("ListView itemBuilder is missing");return $(A,Q)}_getItemCount(){return this.widget.children?.length??this.widget.itemCount??0}_refreshItemMetadata(A){if(A)this._measuredExtents.clear();let Q=this._getItemCount(),B=[],$=new Map,J=[],Y=new Map;for(let Z=0;Z<Q;Z++){let X=this._identityForIndex(Z);B.push(X),$.set(X,Z);let F=this._measuredExtents.get(X);if(F!==void 0)Y.set(X,F);J.push(F??this._estimatedExtentForIndex(Z))}this._measuredExtents=Y,this._itemIdentities=B,this._itemIndexesByIdentity=$;for(let Z of this._keptAliveItemIdentities)if(!$.has(Z))this._keptAliveItemIdentities.delete(Z);this._extents=J,this._prefixSums=Array(Q+1).fill(0),this._recomputePrefixSumsFrom(0)}_handleViewportSize=(A)=>{let Q=Math.max(1,A.height),B=A.width!==this._viewportWidth,$=Q!==this._viewportSize;if(!B&&!$)return;this.setState(()=>{if(this._viewportWidth=A.width,this._viewportSize=Q,B)this._refreshItemMetadata(!1)})};_handleItemSizeChange(A,Q){let B=this._itemIdentities[A];if(!B)return;let $=Math.max(1,Q),J=this._extents[A]??this._estimatedExtentForIndex(A);if(J===$)return;let Y=this._controller.atBottom,Z=this._extents.length>0?this._findIndexAtOffset(this._controller.offset):0;if(this._measuredExtents.set(B,$),this._extents[A]=$,this._recomputePrefixSumsFrom(A),this._controller.followMode&&Y){let X=Math.max(0,this.totalContentHeight-this._viewportSize);this._controller.updateMaxScrollExtent(X),this._controller.jumpTo(X)}else if(A<Z)this._controller.jumpTo(this._controller.offset+($-J));this.setState()}_handleScrollChanged(){this.setState()}_configureController(){this._controller.followMode=this.widget.position==="bottom"}_handleSelectionChanged=(A)=>{this.widget.onSelectionChanged?.(A)};_handleItemKeepAliveChange(A,Q){if(!this.mounted)return;if(this._keptAliveItemIdentities.has(A)===Q)return;this.setState(()=>{if(Q){this._keptAliveItemIdentities.add(A);return}this._keptAliveItemIdentities.delete(A)})}_getRealizedRanges(){let A=this._getItemCount();if(A===0)return[];if(this.widget.disableVirtualization||this._measuredExtents.size===0&&this.widget.position==="bottom"&&A<pi5)return[{start:0,end:A}];let Q=new Set,B=this._getViewportRealizedRange();for(let X=B.start;X<B.end;X++)Q.add(X);for(let X of this._keptAliveItemIdentities){let F=this._itemIndexesByIdentity.get(X);if(F!==void 0)Q.add(F)}let $=[...Q].sort((X,F)=>X-F);if($.length===0)return[];let J=[],Y=$[0]??0,Z=Y+1;for(let X=1;X<$.length;X++){let F=$[X];if(F===void 0)continue;if(F===Z){Z++;continue}J.push({start:Y,end:Z}),Y=F,Z=F+1}return J.push({start:Y,end:Z}),J}_getViewportRealizedRange(){let A=this._getItemCount();if(A===0)return{start:0,end:0};let Q=Math.max(0,this._controller.offset-this.widget.cacheExtent),B=this._controller.offset+this._viewportSize+this.widget.cacheExtent,$=this._findIndexAtOffset(Q),J=Math.min(A,this._findIndexAtOffset(B)+1);return{start:$,end:J}}_findIndexAtOffset(A){if(this._extents.length===0)return 0;let Q=0,B=this._extents.length-1;while(Q<=B){let $=Math.floor((Q+B)/2),J=this._prefixSums[$]??0,Y=this._prefixSums[$+1]??J;if(A<J){B=$-1;continue}if(A>=Y){Q=$+1;continue}return $}return Math.max(0,Math.min(Q,this._extents.length-1))}_recomputePrefixSumsFrom(A){if(this._prefixSums.length!==this._extents.length+1||A<=0)this._prefixSums=Array(this._extents.length+1).fill(0),A=0;for(let Q=A;Q<this._extents.length;Q++)this._prefixSums[Q+1]=(this._prefixSums[Q]??0)+(this._extents[Q]??0)}_identityForIndex(A){return this._keyForIndex(A).toString()}_keyForIndex(A){return this.widget.itemKeyBuilder?.(A)??this.widget.children?.[A]?.key??new mA(`list-view-item-${A}`)}_estimatedExtentForIndex(A){let Q=this.widget.estimatedItemExtentBuilder?.(A)??this.widget.estimatedItemExtent;return Math.max(1,Q+this._spacingForIndex(A))}_spacingForIndex(A){return A<this._getItemCount()-1?this.widget.itemSpacing:0}_getScrollBounds=()=>{let A=this._viewportKey.currentElement?.renderObject;if(!(A instanceof Z4))return null;let Q=A.localToGlobal({x:0,y:0});return{left:Q.x,top:Q.y,right:Q.x+A.size.width,bottom:Q.y+A.size.height}}}var di5="›",ci5="⌄";class f2 extends v0{title;child;expanded;expandable;onChanged;constructor({key:A,title:Q,child:B,expanded:$=!1,expandable:J=!0,onChanged:Y}){super({key:A});this.title=Q,this.child=B,this.expanded=$,this.expandable=J,this.onChanged=Y}createState(){return new B0A}}class B0A extends k0{_pressActive=!1;get expanded(){return this.widget.expanded}get isExpandable(){return this.widget.expandable}toggle(){if(!this.isExpandable)return;this.widget.onChanged?.(!this.expanded)}didUpdateWidget(A){if(super.didUpdateWidget(A),A.expandable&&!this.widget.expandable)this._pressActive=!1;if(A.expanded!==this.widget.expanded||A.expandable!==this.widget.expandable)this.setState()}build(A){let Q=this._buildTitleContent(A),$=[new m1({onClick:this.isExpandable?this._handlePress.bind(this):void 0,onDrag:this.isExpandable?this._handleDrag.bind(this):void 0,onRelease:this.isExpandable?this._handleRelease.bind(this):void 0,cursor:this.isExpandable?"pointer":void 0,opaque:!1,child:Q})];if(this.expanded)$.push(this.widget.child);return new b0({mainAxisSize:"min",crossAxisAlignment:"start",children:$})}_buildTitleContent(A){if(!this.isExpandable)return this.widget.title;let Q=k1.of(A).colorScheme,B=new y({color:Q.mutedForeground}),$=this.expanded?ci5:di5,J=this.widget.title;if(this._shouldInlineArrow(J))return new l({text:new M("",void 0,[J.text,new M(` ${$}`,B)]),textAlign:J.textAlign,selectable:J.selectable});return new Z1({mainAxisSize:"min",crossAxisAlignment:"end",children:[new X9({child:J}),new C0({width:1}),new l({text:new M($,B)})]})}_shouldInlineArrow(A){return A instanceof l&&A.maxLines===void 0}_handlePress(A){this._pressActive=A.button==="left"}_handleDrag(A){this._pressActive=!1}_handleRelease(A){if(A.button!=="left"||!this._pressActive)return;this._pressActive=!1,this.toggle()}}class y51 extends v0{props;constructor(A){super();this.props=A}createState(){return new J0A}}class J0A extends k0{expanded=new f8(this,!1);_expansionController=null;actionExpanded=new Map;visibleActionCount=0;_pendingAppendTimer;_spinner=new W6;_animationTimer;get _isActive(){return this.widget.props.group.hasInProgress}initState(){if(super.initState(),this.visibleActionCount=this.widget.props.group.actions.length,this._isActive)this._startAnimation()}didUpdateWidget(A){super.didUpdateWidget(A);let Q=A.props.group.actions,B=this.widget.props.group.actions;if(Q!==B){let J=Q.length,Y=B.length;if(Y<J)this._clearPendingAppendTimer(),this.actionExpanded.clear(),this.visibleActionCount=Y;else{for(let Z of this.actionExpanded.keys())if(Z>=Y)this.actionExpanded.delete(Z);if(!this._isActive)this._clearPendingAppendTimer(),this.visibleActionCount=Y;else this.visibleActionCount=Math.max(this.visibleActionCount,J),this._scheduleAppendStep(Y)}}let $=A.props.group.hasInProgress;if(!$&&this._isActive)this._startAnimation(),this._scheduleAppendStep(B.length);else if($&&!this._isActive)this._stopAnimation(),this._clearPendingAppendTimer(),this.visibleActionCount=B.length}dispose(){this._stopAnimation(),this._clearPendingAppendTimer(),super.dispose()}_startAnimation(){if(this._animationTimer)return;this._animationTimer=setInterval(()=>{this.setState(()=>{this._spinner.step()})},200)}_stopAnimation(){if(!this._animationTimer)return;clearInterval(this._animationTimer),this._animationTimer=void 0}_clearPendingAppendTimer(){if(!this._pendingAppendTimer)return;clearTimeout(this._pendingAppendTimer),this._pendingAppendTimer=void 0}_scheduleAppendStep(A){if(this.visibleActionCount>=A||this._pendingAppendTimer)return;this._pendingAppendTimer=setTimeout(()=>{this._pendingAppendTimer=void 0,this.setState(()=>{this.visibleActionCount=Math.min(this.visibleActionCount+1,A)}),this._scheduleAppendStep(A)},90)}build(A){let Q=_0.of(A),{actions:B,summary:$}=this.widget.props.group,J=B.length>0,Y=QK.of(A);if(Y&&Y!==this._expansionController)this._expansionController=Y,this.expanded.subscribe(Y.expanded$);let Z=this.expanded.getValue(),X=[];if(this._isActive)X.push(new M(`${this._spinner.toBraille()} `,new y({color:Q.app.toolRunning})));else X.push(new M("✓ ",new y({color:Q.app.toolSuccess})));if(X.push(new M(this._isActive?"Exploring":"Explored",new y({color:Q.app.toolName}))),$)X.push(new M(` ${$}`,new y({color:Q.app.toolName})));let F=new l({text:new M("",void 0,X),selectable:!0,maxLines:1,overflow:"ellipsis"}),D=Z&&J?new b0({crossAxisAlignment:"start",children:B.slice(0,this.visibleActionCount).map((G,V)=>this._buildActionRow(G,V,Q))}):new l0;return new f2({title:F,child:D,expanded:J?Z:!1,expandable:J,onChanged:J?(G)=>{this.setState(()=>{this.expanded.setValue(G)})}:void 0})}_buildActionRow(A,Q,B){let $=$0A(A,B);if(!A.detail)return new u0({padding:N0.only({left:1}),child:$});let J=this.actionExpanded.get(Q)??!1,Y=$0A(A,B),Z=new u0({padding:N0.only({left:2}),child:new l({text:new M(A.detail,new y({color:B.colors.mutedForeground,dim:!0})),selectable:!0})});return new u0({padding:N0.only({left:1}),child:new f2({title:Y,child:Z,expanded:J,onChanged:(X)=>{this.setState(()=>{this.actionExpanded.set(Q,X)})}})})}}function $0A(A,Q){let B=new y({color:Q.colors.mutedForeground,dim:!0}),$=new y({color:Q.colors.mutedForeground,dim:!0});return new l({text:new M("",void 0,[new M("·",$),new M(" ",$),new M(A.title,B)]),maxLines:1,overflow:"ellipsis",selectable:!0})}class x51 extends C1{props;constructor(A){super();this.props=A}build(A){return new S6({markdown:this.props.message.text})}}N3();class fR extends v0{color;intervalMs;constructor({color:A,intervalMs:Q=200,key:B}){super(B?{key:B}:{});this.color=A,this.intervalMs=Q}createState(){return new Y0A}}class Y0A extends k0{spinner=new W6;timer=null;initState(){super.initState(),this.startAnimation()}didUpdateWidget(A){if(super.didUpdateWidget(A),A.intervalMs!==this.widget.intervalMs)this.stopAnimation(),this.startAnimation()}dispose(){this.stopAnimation(),super.dispose()}startAnimation(){if(this.timer)return;this.timer=setInterval(()=>{this.setState(()=>{this.spinner.step()})},this.widget.intervalMs)}stopAnimation(){if(!this.timer)return;clearInterval(this.timer),this.timer=null}build(A){return new l({text:new M(this.spinner.toBraille(),new y({color:this.widget.color})),textAlign:"left",maxLines:1,overflow:"clip"})}}D4();var li5="image/png";class Ct extends C1{props;constructor(A){super();this.props=A}build(A){let Q=_0.of(A),B=ii5(this.props.image,this.props.index),$=this.props.image.savedPath?Z0A(this.props.image.savedPath):null,J=rI.of(A),Y=(D)=>{if(!J){if($)this.props.onDownloadFallback?.($);return}if($)J.onShowSaveDialog(A,B,$);else J.onShowImagePreview(A,B,this.props.index)},Z=this.buildHeader(Q),X=this.buildBody(Q,B,Y),F=[];if(Z)F.push(Z);if(X)F.push(X);return new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:F})}buildHeader(A){let Q=[],B=this.props.onToggle;if(B)Q.push(new m1({onClick:B,cursor:"pointer",child:new l({text:new M(this.props.expanded?"▼ ":"▶ ",new y({color:A.app.link}))})}));let $=this.props.imageCount>1?`Image ${this.props.index+1}`:B?"Image":null;if($){let J=new l({text:new M($,new y({color:A.colors.foreground}))});Q.push(B?new m1({onClick:B,cursor:"pointer",child:J}):J)}if(this.props.downloadStatus){let J=Q.length>0?" ":"";Q.push(new l({text:new M(`${J}${this.props.downloadStatus}`,new y({color:this.props.downloadStatus.startsWith("Error")?A.app.toolError:A.app.toolSuccess}))}))}if(Q.length===0)return null;return new Z1({mainAxisSize:"min",children:Q})}buildBody(A,Q,B){if(!this.props.expanded)return null;let J=oi5()?new KR({image:Q,width:60,height:15,backgroundColor:A.colors.background}):new l({text:new M(this.props.image.savedPath?" [Click to preview, right-click to save - terminal does not support inline images]":" [Click to preview - terminal does not support inline images]",new y({color:A.colors.mutedForeground,dim:!0}))}),Y=[new m1({onClick:B,cursor:"pointer",child:J})];return new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:Y})}}function ii5(A,Q){let B=A.savedPath?Z0A(A.savedPath):`painter-image-${Q+1}`;return{type:"image",source:{type:"base64",mediaType:ni5(A.mimeType,B),data:A.data},sourcePath:B}}function ni5(A,Q){if(ai5(A))return A;return Co4(Q)??li5}function ai5(A){return A==="image/jpeg"||A==="image/png"||A==="image/gif"||A==="image/webp"}function Z0A(A){return A.startsWith("file://")?Y1.parse(A).fsPath:A}function oi5(){return ri5()?.kittyGraphics??!1}function ri5(){try{return v4.instance.tuiInstance.getCapabilities()}catch{return null}}var si5=3,f51=15,ti5=200;class b51 extends v0{props;constructor(A){super();this.props=A}createState(){return new F0A}}class F0A extends k0{_spinner=new W6;_animationTimer;get _isRunning(){let A=this.widget.props.tool.status;return A==="in-progress"||A==="queued"}initState(){if(super.initState(),this._isRunning)this._startAnimation()}didUpdateWidget(A){super.didUpdateWidget(A);let Q=ei5(A.props.tool.status);if(!Q&&this._isRunning)this._startAnimation();else if(Q&&!this._isRunning)this._stopAnimation()}dispose(){this._stopAnimation(),super.dispose()}_startAnimation(){if(this._animationTimer)return;this._animationTimer=setInterval(()=>{this.setState(()=>{this._spinner.step()})},ti5)}_stopAnimation(){if(!this._animationTimer)return;clearInterval(this._animationTimer),this._animationTimer=void 0}build(A){let{tool:Q,expanded:B}=this.widget.props,$=_0.of(A),{colors:J}=$,Y=Bn5(Q.status,$),Z=Q.status==="done"&&typeof Q.exitCode==="number"&&Q.exitCode!==0,X=Q.status==="error"||Z,F=new y({color:J.foreground}),D=Q.status==="cancelled"?F.copyWith({strikethrough:!0}):Q.status==="rejected-by-user"?F.copyWith({dim:!0}):F,G=[new M(Q.command,D)];if(Z&&typeof Q.exitCode==="number"){let z=new y({italic:!0});G.push(new M(" (",z)),G.push(new M("exit code: ",z)),G.push(new M(String(Q.exitCode),z.copyWith({color:J.destructive}))),G.push(new M(")",z))}if(Q.status==="rejected-by-user")G.push(new M(" (rejected)",new y({dim:!0,italic:!0})));else if(Q.status==="cancelled")G.push(new M(" (cancelled)",new y({color:$.app.toolCancelled,italic:!0})));let V=this._isRunning?new M(`${this._spinner.toBraille()} `,new y({color:$.app.toolRunning})):new M("$ ",new y({color:Z?$.app.toolError:Y,bold:!0})),U=new l({text:new M("",void 0,[V,...G]),selectable:!0}),K=[];if(Q.status==="error"&&Q.error)K.push(new l({text:new M(`Error: ${Q.error}`,new y({color:$.app.toolError})),selectable:!0}));else{let z=Q.status==="done"||Q.status==="cancelled"?X0A(Q.output,!0,J):this._isRunning?X0A(Q.output,!1,J):[];if(z.length>0)K.push(new l({text:new M("",void 0,z),selectable:!0}))}let E=K.length===0?null:new u0({padding:N0.only({left:2}),child:new b0({crossAxisAlignment:"start",children:K})}),H=!B&&(this._isRunning||X)?An5(Q,X,$):new l0;return new b0({crossAxisAlignment:"start",children:[new f2({title:U,child:E??new l0,expanded:E!==null&&B,expandable:E!==null,onChanged:this.widget.props.onChanged}),H]})}}function ei5(A){return A==="in-progress"||A==="queued"}function An5(A,Q,B){let $=A.status==="error"&&A.error?A.error:A.output,J=Qn5($,si5);if(J.length===0)return new l0;let Y=new y({color:Q?B.colors.destructive:B.colors.mutedForeground,dim:!Q});return new u0({padding:N0.only({left:2}),child:new b0({crossAxisAlignment:"start",children:J.map((Z)=>new l({text:new M(Z,Y),selectable:!0,maxLines:1}))})})}function Qn5(A,Q){if(!A)return[];return A.replace(/\r/g,"").split(`
|
|
5319
|
+
`,Y));let I=new l({text:new M("",void 0,N),selectable:!0}),w=new x8({child:I});if(this.widget.embedded)return w;return new t1({child:new l0({constraints:new M1(W,W,0,K),decoration:new u4(B.background,a1.all(new o1(B.primary,1,"rounded"))),child:new u0({padding:N0.all(1),child:w})})})}}VZ0();o0();class IJ extends v0{props;constructor(A={}){super();this.props=A}static of(A){let Q=A.findAncestorStateOfType(S51);if(Q)return Q;throw Error("Overlay.of() called with a context that does not contain an Overlay widget")}createState(){return new S51}}class S51 extends k0{entries=[];initState(){super.initState();let A=this.widget.props.initialEntries||[];for(let Q of A)this._addEntry(Q)}dispose(){for(let A of this.entries)A._setOverlayState(void 0);this.entries=[],super.dispose()}insert(A,Q){if(A.mounted)throw Error("OverlayEntry is already mounted in an overlay");if(Q){let B=this.entries.indexOf(Q);if(B===-1)throw Error('The "above" entry is not in this overlay');this.entries.splice(B+1,0,A),A._setOverlayState(this),A.markNeedsBuild()}else this._addEntry(A);this.setState(()=>{})}remove(A){let Q=this.entries.indexOf(A);if(Q===-1)return;this.entries.splice(Q,1),A._setOverlayState(void 0),this.setState(()=>{})}removeAll(){for(let A of this.entries)A._setOverlayState(void 0);this.entries=[],this.setState(()=>{})}rearrange(A){for(let Q of A)if(!this.entries.includes(Q))throw Error("Cannot rearrange: entry is not in this overlay");if(A.length!==this.entries.length)throw Error("Cannot rearrange: entry count mismatch");this.entries=[...A],this.setState(()=>{})}_markNeedsRebuild(){this.setState(()=>{})}_addEntry(A){this.entries.push(A),A._setOverlayState(this),A.markNeedsBuild()}build(A){let Q=[];if(this.widget.props.child)Q.push(this.widget.props.child);for(let B of this.entries)try{let $=B.builder(A);Q.push($),B._clearNeedsRebuild()}catch($){j.error("Error building overlay entry:",$)}return new re4({children:Q})}}class re4 extends _9{constructor({children:A=[]}={}){super({children:A})}createRenderObject(){return new se4}updateRenderObject(A){}}class se4 extends Z4{constructor(){super();this.allowHitTestOutsideBounds=!0}performLayout(){super.performLayout();let A=this._lastConstraints;N4(!!A,"performLayout called without constraints");let Q=this.children,B=A.minWidth,$=A.minHeight;for(let J of Q)J.layout(A),B=Math.max(B,J.size.width),$=Math.max($,J.size.height);this.setSize(Math.min(A.maxWidth,B),Math.min(A.maxHeight,$))}}class oI{builder;maintainState;_overlayState;_needsBuild=!0;constructor(A,Q=!1){this.builder=A;this.maintainState=Q}get mounted(){return this._overlayState!==void 0}remove(){if(this._overlayState)this._overlayState.remove(this)}markNeedsBuild(){if(this._needsBuild=!0,this._overlayState)this._overlayState._markNeedsRebuild()}_setOverlayState(A){this._overlayState=A}_needsRebuild(){return this._needsBuild}_clearNeedsRebuild(){this._needsBuild=!1}}class rI extends H6{onShowImagePreview;onShowSaveDialog;constructor(A){super({child:A.child});this.onShowImagePreview=A.onShowImagePreview,this.onShowSaveDialog=A.onShowSaveDialog}static of(A){let Q=A.dependOnInheritedWidgetOfExactType(rI);if(Q)return{onShowImagePreview:Q.onShowImagePreview,onShowSaveDialog:Q.onShowSaveDialog};return}updateShouldNotify(A){return this.onShowImagePreview!==A.onShowImagePreview||this.onShowSaveDialog!==A.onShowSaveDialog}}class sI extends v0{props;constructor(A){super();this.props=A}createState(){return new ee4}}class ee4 extends k0{previewState={status:"loading"};loadingSpinner=new W6;loadingSpinnerInterval=null;loadGeneration=0;getCapabilities(){try{return v4.instance.tuiInstance.getCapabilities()}catch{return null}}initState(){super.initState(),this.loadPreviewImage()}didUpdateWidget(A){if(super.didUpdateWidget(A),this.imagePreviewIdentity(A.props.image)!==this.imagePreviewIdentity(this.widget.props.image))this.loadPreviewImage()}dispose(){this.loadGeneration+=1,this.stopLoadingSpinner(),super.dispose()}imagePreviewIdentity(A){if(A.source.type==="base64")return`base64:${A.sourcePath}:${A.source.data.length}`;return`url:${A.source.url}`}syncLoadingSpinner(){if(this.previewState.status==="loading"){if(!this.loadingSpinnerInterval)this.loadingSpinnerInterval=setInterval(()=>{if(this.loadingSpinner.step(),this.mounted)this.setState()},120);return}this.stopLoadingSpinner()}stopLoadingSpinner(){if(this.loadingSpinnerInterval)clearInterval(this.loadingSpinnerInterval),this.loadingSpinnerInterval=null}loadPreviewImage=async()=>{let A=++this.loadGeneration;if(this.previewState={status:"loading"},this.syncLoadingSpinner(),this.mounted)this.setState();try{let Q=await GG0(this.widget.props.image);if(!this.mounted||A!==this.loadGeneration)return;this.previewState={status:"loaded",preview:Q}}catch(Q){if(!this.mounted||A!==this.loadGeneration)return;this.previewState={status:"error",message:Q instanceof Error?Q.message:String(Q)}}finally{if(this.mounted&&A===this.loadGeneration)this.syncLoadingSpinner(),this.setState()}};supportsKittyGraphics(){return this.getCapabilities()?.kittyGraphics??!1}build(A){let Q=this.widget.props.imageIndex,B=this.supportsKittyGraphics(),$=_0.of(A),J=$.colors,Y=A4.sizeOf(A),Z=Y.width,X=Y.height,F=Math.max(40,Z-8),D=Math.max(10,F-6),G="Unknown",V="Unknown",U=null,K=null;if(this.previewState.status==="loaded")G=Is(this.previewState.preview.mediaType),V=te4(this.previewState.preview.fileSizeBytes),U=this.previewState.preview.originURL&&!ws(this.previewState.preview.originURL)?this.previewState.preview.originURL:null,K=this.previewState.preview.image;else if(this.widget.props.image.source.type==="base64"){G=Is(this.widget.props.image.source.mediaType);let O=Math.round(this.widget.props.image.source.data.length*3/4);V=te4(O)}else G="URL",V="loading...",U=ws(this.widget.props.image.source.url)?null:this.widget.props.image.source.url;let E=`Image ${Q+1}`,W=this.widget.props.onRemove!==void 0,H=W?[{keys:["Esc"],label:"close"},{keys:["x"],label:"remove image"}]:[{keys:["Esc"],label:"close"}],z=2,q=U!==null?2:0,N=Math.max(0,X-8-z-q),I=new y({color:J.foreground,dim:!0}),w=[];if(this.previewState.status==="loading")w.push(new l({text:new M("",void 0,[new M("Loading image ",I),new M(this.loadingSpinner.toBraille(),I)])}));else if(this.previewState.status==="error")w.push(new l({text:new M(`Error: ${this.previewState.message}`,new y({color:$.app.toolError}))}));else if(B&&K&&N>=2)w.push(new t1({child:new KR({image:K,width:D,height:N,backgroundColor:J.background})}));else if(!B)w.push(new l({text:new M("(Terminal does not support inline images)",new y({color:J.foreground,dim:!0,italic:!0}))}));let C=this.previewState.status==="loading"&&this.widget.props.image.source.type==="url";if(this.previewState.status!=="error"&&!C)w.push(new C0({height:1})),w.push(new t1({child:new l({text:new M(`${G}, ${V}`,I)})}));if(U!==null)w.push(new C0({height:1})),w.push(new l({text:new M(U,I)}));return new fA({header:E,footer:H,minWidth:F,maxWidth:F,maxHeight:X,autofocus:!1,onDismiss:this.widget.props.onDismiss,child:new m4({autofocus:!0,debugLabel:"ImagePreviewDialog.body",onKey:(O)=>{if(W&&(O.key==="x"||O.key==="X"))return this.widget.props.onRemove?.(),"handled";return"ignored"},child:new b0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:w})})})}}function te4(A){if(A>=1048576)return`${(A/1048576).toFixed(1)} MB`;if(A>=1024)return`${Math.round(A/1024)} KB`;return`${A} bytes`}class k51{reader;readerUnsubscribe;_entries=[];_selectedMessageIndex=null;_selectedQueuedMessageIndex=null;_queuedMessageCount=0;listeners=new Set;onSelectionChange=null;onScrollToBottom=null;onPageUp=null;onPageDown=null;constructor(A){this.reader=A,this.updateEntries(),this.readerUnsubscribe=this.reader.subscribe(()=>{this.updateEntries(),this.notify()})}get entries(){return this._entries}get selectedMessageIndex(){return this._selectedMessageIndex}get selectedQueuedMessageIndex(){return this._selectedQueuedMessageIndex}get hasSelection(){return this._selectedMessageIndex!==null||this._selectedQueuedMessageIndex!==null}setQueuedMessageCount(A){if(this._queuedMessageCount=A,this._selectedQueuedMessageIndex!==null&&this._selectedQueuedMessageIndex>=A){if(A>0)this._selectedQueuedMessageIndex=A-1;else this._selectedQueuedMessageIndex=null;this.notify()}}subscribe(A){return this.listeners.add(A),()=>{this.listeners.delete(A)}}dispose(){this.readerUnsubscribe(),this.onSelectionChange=null,this.onScrollToBottom=null,this.onPageUp=null,this.onPageDown=null}updateEntries(){if(this._entries=this.reader.read(),this._selectedMessageIndex!==null&&!this.isUserMessageIndex(this._selectedMessageIndex))this._selectedMessageIndex=null}selectPrevious(){if(this._selectedMessageIndex===null){if(this._selectedQueuedMessageIndex!==null){if(this._selectedQueuedMessageIndex>0)return this.setSelectedQueuedIndex(this._selectedQueuedMessageIndex-1);return this._selectedQueuedMessageIndex=null,this.selectLastThreadMessage()}if(this._queuedMessageCount>0)return this.setSelectedQueuedIndex(this._queuedMessageCount-1);return this.selectLastThreadMessage()}let A=this.findAdjacentUserMessage(this._selectedMessageIndex,-1);return A!==null?this.setSelectedMessageIndex(A):!1}selectNext(){if(this._selectedMessageIndex!==null){let A=this.findAdjacentUserMessage(this._selectedMessageIndex,1);if(A!==null)return this.setSelectedMessageIndex(A);if(this.setSelectedMessageIndex(null),this._queuedMessageCount>0)return this.setSelectedQueuedIndex(0);return!0}if(this._selectedQueuedMessageIndex!==null){if(this._selectedQueuedMessageIndex<this._queuedMessageCount-1)return this.setSelectedQueuedIndex(this._selectedQueuedMessageIndex+1);return this.setSelectedQueuedIndex(null)}return!1}selectLastThreadMessage(){let A=this.getUserMessageIndices();return this.setSelectedMessageIndex(A[A.length-1]??null)}findAdjacentUserMessage(A,Q){let B=this.getUserMessageIndices();if(Q===-1){for(let $=B.length-1;$>=0;$--)if(B[$]<A)return B[$]}else for(let $ of B)if($>A)return $;return null}clearSelection(){this._selectedMessageIndex=null,this._selectedQueuedMessageIndex=null,this.notify()}setSelectedQueuedIndex(A){return this._selectedQueuedMessageIndex=A,this.notify(),!0}setSelectedMessageIndex(A){if(this._selectedMessageIndex===A)return!1;return this._selectedMessageIndex=A,this.onSelectionChange?.(A),this.notify(),!0}getUserMessageIndices(){let A=[];for(let Q=0;Q<this._entries.length;Q++){let B=this._entries[Q];if(B?.type==="message"&&B.role==="user")A.push(Q)}return A}isUserMessageIndex(A){let Q=this._entries[A];return Q?.type==="message"&&Q.role==="user"}notify(){for(let A of this.listeners)A()}}a8();function mi5(A,Q){let B={},$=A["internal.model"]??Q?.["internal.model"];if($!==void 0)B["internal.model"]=$;if(A["reasoning.effort"]!==void 0)B["reasoning.effort"]=A["reasoning.effort"];return B}function cV0(A,Q,B=null){if(!Q)return{};let $=jS(A,mi5(Q,B)),J=A==="smart"&&Q?.["anthropic.speed"]==="fast",Y=dF(A)&&Q?.["openai.speed"]==="fast",Z=J?"6x":Y?"2½x":void 0,X={};if($)X.reasoningEffort=$;if(Z)X.speedCostMultiplier=Z;return X}class wt extends H5{onSizeChange;constructor({key:A,child:Q,onSizeChange:B}){super({key:A,child:Q});this.onSizeChange=B}createRenderObject(){return new A0A(this.onSizeChange)}updateRenderObject(A){A.updateCallback(this.onSizeChange)}}class A0A extends Z4{_onSizeChange;_lastReportedSize=null;_pendingReportedSize=null;_reportScheduled=!1;constructor(A){super();this._onSizeChange=A}updateCallback(A){this._onSizeChange=A}performLayout(){let A=this._lastConstraints;if(!A)return;let Q=this.children[0];if(!Q){let $=A.constrain(0,0);this.setSize($.width,$.height),super.performLayout();return}Q.layout(A),Q.setOffset(0,0);let B=A.constrain(Q.size.width,Q.size.height);this.setSize(B.width,B.height),this._scheduleSizeReport(B),super.performLayout()}paint(A,Q=0,B=0){super.paint(A,Q,B)}_scheduleSizeReport(A){if(this._sizesEqual(this._lastReportedSize,A))return;if(this._pendingReportedSize=A,this._reportScheduled)return;this._reportScheduled=!0,X6.instance.addPostFrameCallback(()=>{if(this._reportScheduled=!1,!this.attached||!this._pendingReportedSize)return;let Q=this._pendingReportedSize;if(this._pendingReportedSize=null,this._sizesEqual(this._lastReportedSize,Q))return;this._lastReportedSize=Q,this._onSizeChange(Q)},"MeasureSize.size-change")}_sizesEqual(A,Q){if(A===null||Q===null)return A===Q;return A.width===Q.width&&A.height===Q.height}}class v51 extends v0{children;itemCount;itemBuilder;itemKeyBuilder;estimatedItemExtent;estimatedItemExtentBuilder;itemSpacing;cacheExtent;controller;autofocus;position;keyboardScrolling;disableVirtualization;enableSelection;copyOnSelectEnabled;onCopy;onSelectionChanged;showScrollbar;scrollbarThickness;initialViewportHeight;constructor({key:A,children:Q,itemCount:B,itemBuilder:$,itemKeyBuilder:J,estimatedItemExtent:Y=1,estimatedItemExtentBuilder:Z,itemSpacing:X=0,cacheExtent:F=8,controller:D,autofocus:G=!0,position:V="top",keyboardScrolling:U=!0,disableVirtualization:K=!1,enableSelection:E=!1,copyOnSelectEnabled:W=!0,onCopy:H,onSelectionChanged:z,showScrollbar:q=!1,scrollbarThickness:N=1,initialViewportHeight:I=20}){super(A?{key:A}:{});if(Q===void 0&&!($!==void 0&&B!==void 0))throw Error("ListView requires either children or itemBuilder + itemCount");this.children=Q,this.itemCount=B,this.itemBuilder=$,this.itemKeyBuilder=J,this.estimatedItemExtent=Y,this.estimatedItemExtentBuilder=Z,this.itemSpacing=X,this.cacheExtent=F,this.controller=D,this.autofocus=G,this.position=V,this.keyboardScrolling=U,this.disableVirtualization=K,this.enableSelection=E,this.copyOnSelectEnabled=W,this.onCopy=H,this.onSelectionChanged=z,this.showScrollbar=q,this.scrollbarThickness=N,this.initialViewportHeight=I}createState(){return new Q0A}}var pi5=4000;class Q0A extends k0{_controller;_viewportKey=new Y2("list-view-viewport");_viewportSize=20;_viewportWidth=0;_itemIdentities=[];_itemIndexesByIdentity=new Map;_keptAliveItemIdentities=new Set;_extents=[];_prefixSums=[0];_measuredExtents=new Map;_boundOnScrollChanged=this._handleScrollChanged.bind(this);get controller(){return this._controller}get viewportHeight(){return this._viewportSize}get totalContentHeight(){return this._prefixSums[this._prefixSums.length-1]??0}initState(){if(super.initState(),this._viewportSize=this.widget.initialViewportHeight,this._controller=this.widget.controller??new oA,this._configureController(),this._controller.addListener(this._boundOnScrollChanged),this._refreshItemMetadata(!1),this.widget.position==="bottom"){let A=Math.max(0,this.totalContentHeight-this._viewportSize);this._controller.updateMaxScrollExtent(A),this._controller.jumpTo(A)}}didUpdateWidget(A){if(super.didUpdateWidget(A),A.controller!==this.widget.controller){if(this._controller.removeListener(this._boundOnScrollChanged),!A.controller)this._controller.dispose();this._controller=this.widget.controller??new oA,this._configureController(),this._controller.addListener(this._boundOnScrollChanged)}if(A.position!==this.widget.position)this._configureController();let Q=A.itemKeyBuilder!==this.widget.itemKeyBuilder||A.estimatedItemExtent!==this.widget.estimatedItemExtent||A.estimatedItemExtentBuilder!==this.widget.estimatedItemExtentBuilder||A.itemSpacing!==this.widget.itemSpacing,B=Q||A.children!==this.widget.children||A.itemCount!==this.widget.itemCount;if(A.enableSelection&&!this.widget.enableSelection)this._keptAliveItemIdentities.clear();if(B)this._refreshItemMetadata(Q)}build(A){let Q=this._getRealizedRanges(),B=[],$=0;for(let Z of Q){let X=Math.max(0,(this._prefixSums[Z.start]??0)-(this._prefixSums[$]??0));if(X>0)B.push(new C0({key:new mA(`list-view-gap-${$}-${Z.start}`),height:X}));for(let F=Z.start;F<Z.end;F++)B.push(this._buildItem(A,F));$=Z.end}let J=Math.max(0,this.totalContentHeight-(this._prefixSums[$]??this.totalContentHeight));if(J>0)B.push(new C0({key:new mA(`list-view-gap-${$}-${this._getItemCount()}`),height:J}));let Y=new wt({key:this._viewportKey,onSizeChange:this._handleViewportSize,child:new _A({controller:this._controller,autofocus:this.widget.autofocus,position:this.widget.position,keyboardScrolling:this.widget.keyboardScrolling,child:new b0({key:new mA("list-view-column"),crossAxisAlignment:"start",children:B})})});if(this.widget.showScrollbar)Y=new r4({children:[new u0({padding:N0.only({right:this.widget.scrollbarThickness}),child:Y}),new UA({right:0,top:0,bottom:0,child:new C0({width:this.widget.scrollbarThickness,child:new Zt({controller:this._controller,getScrollInfo:()=>{if(this._measuredExtents.size===0)return{totalContent:0,viewportSize:this._viewportSize,scrollOffset:0};let Z=this.totalContentHeight,X=Z-this._viewportSize,F=this._controller.atBottom?X:this._controller.offset;return{totalContent:Z,viewportSize:this._viewportSize,scrollOffset:F}},thickness:this.widget.scrollbarThickness})})})]});if(!this.widget.enableSelection)return Y;return new x8({child:Y,copyOnSelectEnabled:this.widget.copyOnSelectEnabled,onCopy:this.widget.onCopy,onSelectionChanged:this._handleSelectionChanged,scrollController:this._controller,getScrollBounds:this._getScrollBounds})}getEstimatedIndexForOffset(A=this._controller.offset){return this._findIndexAtOffset(Math.max(0,A))}getEstimatedOffsetForIndex(A){let Q=Math.max(0,Math.min(A,this._extents.length));return this._prefixSums[Q]??0}getEstimatedExtentForIndex(A){return this._extents[A]??0}dispose(){if(this._controller.removeListener(this._boundOnScrollChanged),!this.widget.controller)this._controller.dispose();super.dispose()}_buildItem(A,Q){let B=this._itemIdentities[Q]??this._identityForIndex(Q),$=this._keyForIndex(Q),J=this._spacingForIndex(Q),Y=this._buildItemWidget(A,Q),Z=J>0?new u0({padding:N0.only({bottom:J}),child:Y}):Y;if(!this.widget.enableSelection)return new wt({key:$,onSizeChange:(X)=>{this._handleItemSizeChange(Q,X.height)},child:Z});return new p11({key:$,onKeepAliveChange:(X)=>{this._handleItemKeepAliveChange(B,X)},child:new wt({onSizeChange:(X)=>{this._handleItemSizeChange(Q,X.height)},child:Z})})}_buildItemWidget(A,Q){let B=this.widget.children?.[Q];if(B)return B;let $=this.widget.itemBuilder;if(!$)throw Error("ListView itemBuilder is missing");return $(A,Q)}_getItemCount(){return this.widget.children?.length??this.widget.itemCount??0}_refreshItemMetadata(A){if(A)this._measuredExtents.clear();let Q=this._getItemCount(),B=[],$=new Map,J=[],Y=new Map;for(let Z=0;Z<Q;Z++){let X=this._identityForIndex(Z);B.push(X),$.set(X,Z);let F=this._measuredExtents.get(X);if(F!==void 0)Y.set(X,F);J.push(F??this._estimatedExtentForIndex(Z))}this._measuredExtents=Y,this._itemIdentities=B,this._itemIndexesByIdentity=$;for(let Z of this._keptAliveItemIdentities)if(!$.has(Z))this._keptAliveItemIdentities.delete(Z);this._extents=J,this._prefixSums=Array(Q+1).fill(0),this._recomputePrefixSumsFrom(0)}_handleViewportSize=(A)=>{let Q=Math.max(1,A.height),B=A.width!==this._viewportWidth,$=Q!==this._viewportSize;if(!B&&!$)return;this.setState(()=>{if(this._viewportWidth=A.width,this._viewportSize=Q,B)this._refreshItemMetadata(!1)})};_handleItemSizeChange(A,Q){let B=this._itemIdentities[A];if(!B)return;let $=Math.max(1,Q),J=this._extents[A]??this._estimatedExtentForIndex(A);if(J===$)return;let Y=this._controller.atBottom,Z=this._extents.length>0?this._findIndexAtOffset(this._controller.offset):0;if(this._measuredExtents.set(B,$),this._extents[A]=$,this._recomputePrefixSumsFrom(A),this._controller.followMode&&Y){let X=Math.max(0,this.totalContentHeight-this._viewportSize);this._controller.updateMaxScrollExtent(X),this._controller.jumpTo(X)}else if(A<Z)this._controller.jumpTo(this._controller.offset+($-J));this.setState()}_handleScrollChanged(){this.setState()}_configureController(){this._controller.followMode=this.widget.position==="bottom"}_handleSelectionChanged=(A)=>{this.widget.onSelectionChanged?.(A)};_handleItemKeepAliveChange(A,Q){if(!this.mounted)return;if(this._keptAliveItemIdentities.has(A)===Q)return;this.setState(()=>{if(Q){this._keptAliveItemIdentities.add(A);return}this._keptAliveItemIdentities.delete(A)})}_getRealizedRanges(){let A=this._getItemCount();if(A===0)return[];if(this.widget.disableVirtualization||this._measuredExtents.size===0&&this.widget.position==="bottom"&&A<pi5)return[{start:0,end:A}];let Q=new Set,B=this._getViewportRealizedRange();for(let X=B.start;X<B.end;X++)Q.add(X);for(let X of this._keptAliveItemIdentities){let F=this._itemIndexesByIdentity.get(X);if(F!==void 0)Q.add(F)}let $=[...Q].sort((X,F)=>X-F);if($.length===0)return[];let J=[],Y=$[0]??0,Z=Y+1;for(let X=1;X<$.length;X++){let F=$[X];if(F===void 0)continue;if(F===Z){Z++;continue}J.push({start:Y,end:Z}),Y=F,Z=F+1}return J.push({start:Y,end:Z}),J}_getViewportRealizedRange(){let A=this._getItemCount();if(A===0)return{start:0,end:0};let Q=Math.max(0,this._controller.offset-this.widget.cacheExtent),B=this._controller.offset+this._viewportSize+this.widget.cacheExtent,$=this._findIndexAtOffset(Q),J=Math.min(A,this._findIndexAtOffset(B)+1);return{start:$,end:J}}_findIndexAtOffset(A){if(this._extents.length===0)return 0;let Q=0,B=this._extents.length-1;while(Q<=B){let $=Math.floor((Q+B)/2),J=this._prefixSums[$]??0,Y=this._prefixSums[$+1]??J;if(A<J){B=$-1;continue}if(A>=Y){Q=$+1;continue}return $}return Math.max(0,Math.min(Q,this._extents.length-1))}_recomputePrefixSumsFrom(A){if(this._prefixSums.length!==this._extents.length+1||A<=0)this._prefixSums=Array(this._extents.length+1).fill(0),A=0;for(let Q=A;Q<this._extents.length;Q++)this._prefixSums[Q+1]=(this._prefixSums[Q]??0)+(this._extents[Q]??0)}_identityForIndex(A){return this._keyForIndex(A).toString()}_keyForIndex(A){return this.widget.itemKeyBuilder?.(A)??this.widget.children?.[A]?.key??new mA(`list-view-item-${A}`)}_estimatedExtentForIndex(A){let Q=this.widget.estimatedItemExtentBuilder?.(A)??this.widget.estimatedItemExtent;return Math.max(1,Q+this._spacingForIndex(A))}_spacingForIndex(A){return A<this._getItemCount()-1?this.widget.itemSpacing:0}_getScrollBounds=()=>{let A=this._viewportKey.currentElement?.renderObject;if(!(A instanceof Z4))return null;let Q=A.localToGlobal({x:0,y:0});return{left:Q.x,top:Q.y,right:Q.x+A.size.width,bottom:Q.y+A.size.height}}}var di5="▸",ci5="▾";class f2 extends v0{title;child;expanded;expandable;onChanged;constructor({key:A,title:Q,child:B,expanded:$=!1,expandable:J=!0,onChanged:Y}){super({key:A});this.title=Q,this.child=B,this.expanded=$,this.expandable=J,this.onChanged=Y}createState(){return new B0A}}class B0A extends k0{_pressActive=!1;get expanded(){return this.widget.expanded}get isExpandable(){return this.widget.expandable}toggle(){if(!this.isExpandable)return;this.widget.onChanged?.(!this.expanded)}didUpdateWidget(A){if(super.didUpdateWidget(A),A.expandable&&!this.widget.expandable)this._pressActive=!1;if(A.expanded!==this.widget.expanded||A.expandable!==this.widget.expandable)this.setState()}build(A){let Q=this._buildTitleContent(A),$=[new m1({onClick:this.isExpandable?this._handlePress.bind(this):void 0,onDrag:this.isExpandable?this._handleDrag.bind(this):void 0,onRelease:this.isExpandable?this._handleRelease.bind(this):void 0,cursor:this.isExpandable?"pointer":void 0,opaque:!1,child:Q})];if(this.expanded)$.push(this.widget.child);return new b0({mainAxisSize:"min",crossAxisAlignment:"start",children:$})}_buildTitleContent(A){if(!this.isExpandable)return this.widget.title;let Q=k1.of(A).colorScheme,B=new y({color:Q.mutedForeground}),$=this.expanded?ci5:di5,J=this.widget.title;if(this._shouldInlineArrow(J))return new l({text:new M("",void 0,[J.text,new M(` ${$}`,B)]),textAlign:J.textAlign,selectable:J.selectable});return new Z1({mainAxisSize:"min",crossAxisAlignment:"end",children:[new X9({child:J}),new C0({width:1}),new l({text:new M($,B)})]})}_shouldInlineArrow(A){return A instanceof l&&A.maxLines===void 0}_handlePress(A){this._pressActive=A.button==="left"}_handleDrag(A){this._pressActive=!1}_handleRelease(A){if(A.button!=="left"||!this._pressActive)return;this._pressActive=!1,this.toggle()}}class y51 extends v0{props;constructor(A){super();this.props=A}createState(){return new J0A}}class J0A extends k0{expanded=new f8(this,!1);_expansionController=null;actionExpanded=new Map;visibleActionCount=0;_pendingAppendTimer;_spinner=new W6;_animationTimer;get _isActive(){return this.widget.props.group.hasInProgress}initState(){if(super.initState(),this.visibleActionCount=this.widget.props.group.actions.length,this._isActive)this._startAnimation()}didUpdateWidget(A){super.didUpdateWidget(A);let Q=A.props.group.actions,B=this.widget.props.group.actions;if(Q!==B){let J=Q.length,Y=B.length;if(Y<J)this._clearPendingAppendTimer(),this.actionExpanded.clear(),this.visibleActionCount=Y;else{for(let Z of this.actionExpanded.keys())if(Z>=Y)this.actionExpanded.delete(Z);if(!this._isActive)this._clearPendingAppendTimer(),this.visibleActionCount=Y;else this.visibleActionCount=Math.max(this.visibleActionCount,J),this._scheduleAppendStep(Y)}}let $=A.props.group.hasInProgress;if(!$&&this._isActive)this._startAnimation(),this._scheduleAppendStep(B.length);else if($&&!this._isActive)this._stopAnimation(),this._clearPendingAppendTimer(),this.visibleActionCount=B.length}dispose(){this._stopAnimation(),this._clearPendingAppendTimer(),super.dispose()}_startAnimation(){if(this._animationTimer)return;this._animationTimer=setInterval(()=>{this.setState(()=>{this._spinner.step()})},200)}_stopAnimation(){if(!this._animationTimer)return;clearInterval(this._animationTimer),this._animationTimer=void 0}_clearPendingAppendTimer(){if(!this._pendingAppendTimer)return;clearTimeout(this._pendingAppendTimer),this._pendingAppendTimer=void 0}_scheduleAppendStep(A){if(this.visibleActionCount>=A||this._pendingAppendTimer)return;this._pendingAppendTimer=setTimeout(()=>{this._pendingAppendTimer=void 0,this.setState(()=>{this.visibleActionCount=Math.min(this.visibleActionCount+1,A)}),this._scheduleAppendStep(A)},90)}build(A){let Q=_0.of(A),{actions:B,summary:$}=this.widget.props.group,J=B.length>0,Y=QK.of(A);if(Y&&Y!==this._expansionController)this._expansionController=Y,this.expanded.subscribe(Y.expanded$);let Z=this.expanded.getValue(),X=[];if(this._isActive)X.push(new M(`${this._spinner.toBraille()} `,new y({color:Q.app.toolRunning})));else X.push(new M("✓ ",new y({color:Q.app.toolSuccess})));if(X.push(new M(this._isActive?"Exploring":"Explored",new y({color:Q.app.toolName}))),$)X.push(new M(` ${$}`,new y({color:Q.app.toolName})));let F=new l({text:new M("",void 0,X),selectable:!0,maxLines:1,overflow:"ellipsis"}),D=Z&&J?new b0({crossAxisAlignment:"start",children:B.slice(0,this.visibleActionCount).map((G,V)=>this._buildActionRow(G,V,Q))}):new l0;return new f2({title:F,child:D,expanded:J?Z:!1,expandable:J,onChanged:J?(G)=>{this.setState(()=>{this.expanded.setValue(G)})}:void 0})}_buildActionRow(A,Q,B){let $=$0A(A,B);if(!A.detail)return new u0({padding:N0.only({left:1}),child:$});let J=this.actionExpanded.get(Q)??!1,Y=$0A(A,B),Z=new u0({padding:N0.only({left:2}),child:new l({text:new M(A.detail,new y({color:B.colors.mutedForeground,dim:!0})),selectable:!0})});return new u0({padding:N0.only({left:1}),child:new f2({title:Y,child:Z,expanded:J,onChanged:(X)=>{this.setState(()=>{this.actionExpanded.set(Q,X)})}})})}}function $0A(A,Q){let B=new y({color:Q.colors.mutedForeground,dim:!0}),$=new y({color:Q.colors.mutedForeground,dim:!0});return new l({text:new M("",void 0,[new M("·",$),new M(" ",$),new M(A.title,B)]),maxLines:1,overflow:"ellipsis",selectable:!0})}class x51 extends C1{props;constructor(A){super();this.props=A}build(A){return new S6({markdown:this.props.message.text})}}N3();class fR extends v0{color;intervalMs;constructor({color:A,intervalMs:Q=200,key:B}){super(B?{key:B}:{});this.color=A,this.intervalMs=Q}createState(){return new Y0A}}class Y0A extends k0{spinner=new W6;timer=null;initState(){super.initState(),this.startAnimation()}didUpdateWidget(A){if(super.didUpdateWidget(A),A.intervalMs!==this.widget.intervalMs)this.stopAnimation(),this.startAnimation()}dispose(){this.stopAnimation(),super.dispose()}startAnimation(){if(this.timer)return;this.timer=setInterval(()=>{this.setState(()=>{this.spinner.step()})},this.widget.intervalMs)}stopAnimation(){if(!this.timer)return;clearInterval(this.timer),this.timer=null}build(A){return new l({text:new M(this.spinner.toBraille(),new y({color:this.widget.color})),textAlign:"left",maxLines:1,overflow:"clip"})}}D4();var li5="image/png";class Ct extends C1{props;constructor(A){super();this.props=A}build(A){let Q=_0.of(A),B=ii5(this.props.image,this.props.index),$=this.props.image.savedPath?Z0A(this.props.image.savedPath):null,J=rI.of(A),Y=(D)=>{if(!J){if($)this.props.onDownloadFallback?.($);return}if($)J.onShowSaveDialog(A,B,$);else J.onShowImagePreview(A,B,this.props.index)},Z=this.buildHeader(Q),X=this.buildBody(Q,B,Y),F=[];if(Z)F.push(Z);if(X)F.push(X);return new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:F})}buildHeader(A){let Q=[],B=this.props.onToggle;if(B)Q.push(new m1({onClick:B,cursor:"pointer",child:new l({text:new M(this.props.expanded?"▼ ":"▶ ",new y({color:A.app.link}))})}));let $=this.props.imageCount>1?`Image ${this.props.index+1}`:B?"Image":null;if($){let J=new l({text:new M($,new y({color:A.colors.foreground}))});Q.push(B?new m1({onClick:B,cursor:"pointer",child:J}):J)}if(this.props.downloadStatus){let J=Q.length>0?" ":"";Q.push(new l({text:new M(`${J}${this.props.downloadStatus}`,new y({color:this.props.downloadStatus.startsWith("Error")?A.app.toolError:A.app.toolSuccess}))}))}if(Q.length===0)return null;return new Z1({mainAxisSize:"min",children:Q})}buildBody(A,Q,B){if(!this.props.expanded)return null;let J=oi5()?new KR({image:Q,width:60,height:15,backgroundColor:A.colors.background}):new l({text:new M(this.props.image.savedPath?" [Click to preview, right-click to save - terminal does not support inline images]":" [Click to preview - terminal does not support inline images]",new y({color:A.colors.mutedForeground,dim:!0}))}),Y=[new m1({onClick:B,cursor:"pointer",child:J})];return new b0({crossAxisAlignment:"start",mainAxisSize:"min",children:Y})}}function ii5(A,Q){let B=A.savedPath?Z0A(A.savedPath):`painter-image-${Q+1}`;return{type:"image",source:{type:"base64",mediaType:ni5(A.mimeType,B),data:A.data},sourcePath:B}}function ni5(A,Q){if(ai5(A))return A;return Co4(Q)??li5}function ai5(A){return A==="image/jpeg"||A==="image/png"||A==="image/gif"||A==="image/webp"}function Z0A(A){return A.startsWith("file://")?Y1.parse(A).fsPath:A}function oi5(){return ri5()?.kittyGraphics??!1}function ri5(){try{return v4.instance.tuiInstance.getCapabilities()}catch{return null}}var si5=3,f51=15,ti5=200;class b51 extends v0{props;constructor(A){super();this.props=A}createState(){return new F0A}}class F0A extends k0{_spinner=new W6;_animationTimer;get _isRunning(){let A=this.widget.props.tool.status;return A==="in-progress"||A==="queued"}initState(){if(super.initState(),this._isRunning)this._startAnimation()}didUpdateWidget(A){super.didUpdateWidget(A);let Q=ei5(A.props.tool.status);if(!Q&&this._isRunning)this._startAnimation();else if(Q&&!this._isRunning)this._stopAnimation()}dispose(){this._stopAnimation(),super.dispose()}_startAnimation(){if(this._animationTimer)return;this._animationTimer=setInterval(()=>{this.setState(()=>{this._spinner.step()})},ti5)}_stopAnimation(){if(!this._animationTimer)return;clearInterval(this._animationTimer),this._animationTimer=void 0}build(A){let{tool:Q,expanded:B}=this.widget.props,$=_0.of(A),{colors:J}=$,Y=Bn5(Q.status,$),Z=Q.status==="done"&&typeof Q.exitCode==="number"&&Q.exitCode!==0,X=Q.status==="error"||Z,F=new y({color:J.foreground}),D=Q.status==="cancelled"?F.copyWith({strikethrough:!0}):Q.status==="rejected-by-user"?F.copyWith({dim:!0}):F,G=[new M(Q.command,D)];if(Z&&typeof Q.exitCode==="number"){let z=new y({italic:!0});G.push(new M(" (",z)),G.push(new M("exit code: ",z)),G.push(new M(String(Q.exitCode),z.copyWith({color:J.destructive}))),G.push(new M(")",z))}if(Q.status==="rejected-by-user")G.push(new M(" (rejected)",new y({dim:!0,italic:!0})));else if(Q.status==="cancelled")G.push(new M(" (cancelled)",new y({color:$.app.toolCancelled,italic:!0})));let V=this._isRunning?new M(`${this._spinner.toBraille()} `,new y({color:$.app.toolRunning})):new M("$ ",new y({color:Z?$.app.toolError:Y,bold:!0})),U=new l({text:new M("",void 0,[V,...G]),selectable:!0}),K=[];if(Q.status==="error"&&Q.error)K.push(new l({text:new M(`Error: ${Q.error}`,new y({color:$.app.toolError})),selectable:!0}));else{let z=Q.status==="done"||Q.status==="cancelled"?X0A(Q.output,!0,J):this._isRunning?X0A(Q.output,!1,J):[];if(z.length>0)K.push(new l({text:new M("",void 0,z),selectable:!0}))}let E=K.length===0?null:new u0({padding:N0.only({left:2}),child:new b0({crossAxisAlignment:"start",children:K})}),H=!B&&(this._isRunning||X)?An5(Q,X,$):new l0;return new b0({crossAxisAlignment:"start",children:[new f2({title:U,child:E??new l0,expanded:E!==null&&B,expandable:E!==null,onChanged:this.widget.props.onChanged}),H]})}}function ei5(A){return A==="in-progress"||A==="queued"}function An5(A,Q,B){let $=A.status==="error"&&A.error?A.error:A.output,J=Qn5($,si5);if(J.length===0)return new l0;let Y=new y({color:Q?B.colors.destructive:B.colors.mutedForeground,dim:!Q});return new u0({padding:N0.only({left:2}),child:new b0({crossAxisAlignment:"start",children:J.map((Z)=>new l({text:new M(Z,Y),selectable:!0,maxLines:1}))})})}function Qn5(A,Q){if(!A)return[];return A.replace(/\r/g,"").split(`
|
|
5320
5320
|
`).filter(($)=>$.trim()!=="").slice(-Q)}function X0A(A,Q,B){if(!A)return[];let $=[],J=A.replace(/\r/g,"").trimEnd(),Y=J.split(`
|
|
5321
5321
|
`),Z=new y({color:B.foreground,dim:!0});if(Y.length>f51){let X=Y.length-f51;if($.push(new M(`[... ${X} lines truncated ...] `,Z)),Q)$.push(new M("View all",new y({color:B.accent,underline:!0}),void 0,void 0,()=>JG0(J)));$.push(new M(`
|
|
5322
5322
|
`,Z)),$.push(new M(Y.slice(-f51).join(`
|
|
@@ -5369,7 +5369,7 @@ Ctrl-X, Y, Z to unlock`;if(E){let Q0=G.text.replace(/`([^`]+)`/g,"$1")+`
|
|
|
5369
5369
|
* MIT Licence
|
|
5370
5370
|
*/var Nb=9000000000000000,$w=1e9,r31="0123456789abcdef",YU0="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",ZU0="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",s31={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Nb,maxE:Nb,crypto:!1},j4A,ZH,cA=!0,FU0="[DecimalError] ",Bw=FU0+"Invalid argument: ",R4A=FU0+"Precision limit exceeded",P4A=FU0+"crypto unavailable",_4A="[object Decimal]",eQ=Math.floor,b9=Math.pow,wr5=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Cr5=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Mr5=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,T4A=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,JG=1e7,TA=7,Lr5=9007199254740991,Or5=YU0.length-1,t31=ZU0.length-1,h1={toStringTag:_4A};h1.absoluteValue=h1.abs=function(){var A=new this.constructor(this);if(A.s<0)A.s=1;return FA(A)};h1.ceil=function(){return FA(new this.constructor(this),this.e+1,2)};h1.clampedTo=h1.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(Bw+Q);return B=$.cmp(A),B<0?A:$.cmp(Q)>0?Q:new J($)};h1.comparedTo=h1.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};h1.cosine=h1.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=jr5($,x4A($,B)),$.precision=A,$.rounding=Q,FA(ZH==2||ZH==3?B.neg():B,A,Q,!0)};h1.cubeRoot=h1.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(cA=!1,Y=G.s*b9(G.s*G,0.3333333333333333),!Y||Math.abs(Y)==1/0){if(B=QQ(G.d),A=G.e,Y=(A-B.length+1)%3)B+=Y==1||Y==-2?"0":"00";if(Y=b9(B,0.3333333333333333),A=eQ((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),$=O3(D.plus(G).times(X),D.plus(F),Z+2,1),QQ(X.d).slice(0,Z)===(B=QQ($.d)).slice(0,Z))if(B=B.slice(Z-3,Z+1),B=="9999"||!J&&B=="4999"){if(!J){if(FA(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")FA($,A+1,1),Q=!$.times($).times($).eq(G);break}return cA=!0,FA($,A,V.rounding,Q)};h1.decimalPlaces=h1.dp=function(){var A,Q=this.d,B=NaN;if(Q){if(A=Q.length-1,B=(A-eQ(this.e/TA))*TA,A=Q[A],A)for(;A%10==0;A/=10)B--;if(B<0)B=0}return B};h1.dividedBy=h1.div=function(A){return O3(this,new this.constructor(A))};h1.dividedToIntegerBy=h1.divToInt=function(A){var Q=this,B=Q.constructor;return FA(O3(Q,new B(A),0,1,1),B.precision,B.rounding)};h1.equals=h1.eq=function(A){return this.cmp(A)===0};h1.floor=function(){return FA(new this.constructor(this),this.e+1,3)};h1.greaterThan=h1.gt=function(A){return this.cmp(A)>0};h1.greaterThanOrEqualTo=h1.gte=function(A){var Q=this.cmp(A);return Q==1||Q===0};h1.hyperbolicCosine=h1.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/GU0(4,A)).toString();else A=16,Q="2.3283064365386962890625e-10";Y=Ib(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 FA(Y,Z.precision=B,Z.rounding=$,!0)};h1.hyperbolicSine=h1.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=Ib(Y,2,J,J,!0);else{A=1.4*Math.sqrt($),A=A>16?16:A|0,J=J.times(1/GU0(5,A)),J=Ib(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,FA(J,Q,B,!0)};h1.hyperbolicTangent=h1.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,O3(B.sinh(),B.cosh(),$.precision=A,$.rounding=Q)};h1.inverseCosine=h1.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)};h1.inverseHyperbolicCosine=h1.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,cA=!1,B=B.times(B).minus(1).sqrt().plus(B),cA=!0,$.precision=A,$.rounding=Q,B.ln()};h1.inverseHyperbolicSine=h1.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,cA=!1,B=B.times(B).plus(1).sqrt().plus(B),cA=!0,$.precision=A,$.rounding=Q,B.ln()};h1.inverseHyperbolicTangent=h1.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 FA(new Y(J),A,Q,!0);return Y.precision=B=$-J.e,J=O3(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)};h1.inverseSine=h1.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)};h1.inverseTangent=h1.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<=t31)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<=t31)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));cA=!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 cA=!0,FA(Z,G.precision=V,G.rounding=U,!0)};h1.isFinite=function(){return!!this.d};h1.isInteger=h1.isInt=function(){return!!this.d&&eQ(this.e/TA)>this.d.length-2};h1.isNaN=function(){return!this.s};h1.isNegative=h1.isNeg=function(){return this.s<0};h1.isPositive=h1.isPos=function(){return this.s>0};h1.isZero=function(){return!!this.d&&this.d[0]===0};h1.lessThan=h1.lt=function(A){return this.cmp(A)<0};h1.lessThanOrEqualTo=h1.lte=function(A){return this.cmp(A)<1};h1.logarithm=h1.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(cA=!1,X=V+K,Z=Qw(D,X),$=Q?XU0(G,X+10):Qw(A,X),F=O3(Z,$,X,1),vt(F.d,J=V,U))do if(X+=10,Z=Qw(D,X),$=Q?XU0(G,X+10):Qw(A,X),F=O3(Z,$,X,1),!Y){if(+QQ(F.d).slice(J+1,J+15)+1==100000000000000)F=FA(F,V+1,0);break}while(vt(F.d,J+=10,U));return cA=!0,FA(F,V,U)};h1.minus=h1.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 cA?FA(A,X,F):A}if(B=eQ(A.e/TA),G=eQ(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]=JG-1;--D[J],D[$]+=JG}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=DU0(D,B),cA?FA(A,X,F):A};h1.modulo=h1.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 FA(new $(B),$.precision,$.rounding);if(cA=!1,$.modulo==9)Q=O3(B,A.abs(),0,3,1),Q.s*=A.s;else Q=O3(B,A,0,$.modulo,1);return Q=Q.times(A),cA=!0,B.minus(Q)};h1.naturalExponential=h1.exp=function(){return e31(this)};h1.naturalLogarithm=h1.ln=function(){return Qw(this)};h1.negated=h1.neg=function(){var A=new this.constructor(this);return A.s=-A.s,FA(A)};h1.plus=h1.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 cA?FA(A,X,F):A}if(Y=eQ(V.e/TA),$=eQ(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)/JG|0,D[J]%=JG;if(Q)D.unshift(Q),++$;for(Z=D.length;D[--Z]==0;)D.pop();return A.d=D,A.e=DU0(D,$),cA?FA(A,X,F):A};h1.precision=h1.sd=function(A){var Q,B=this;if(A!==void 0&&A!==!!A&&A!==1&&A!==0)throw Error(Bw+A);if(B.d){if(Q=S4A(B.d),A&&B.e+1>Q)Q=B.e+1}else Q=NaN;return Q};h1.round=function(){var A=this,Q=A.constructor;return FA(new Q(A),A.e+1,Q.rounding)};h1.sine=h1.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=Pr5($,x4A($,B)),$.precision=A,$.rounding=Q,FA(ZH>2?B.neg():B,A,Q,!0)};h1.squareRoot=h1.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(cA=!1,D=Math.sqrt(+Z),D==0||D==1/0){if(Q=QQ(X),(Q.length+F)%2==0)Q+="0";if(D=Math.sqrt(Q),F=eQ((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(O3(Z,Y,B+2,1)).times(0.5),QQ(Y.d).slice(0,B)===(Q=QQ($.d)).slice(0,B))if(Q=Q.slice(B-3,B+1),Q=="9999"||!J&&Q=="4999"){if(!J){if(FA(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")FA($,F+1,1),A=!$.times($).eq(Z);break}return cA=!0,FA($,F,G.rounding,A)};h1.tangent=h1.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=O3(B,new $(1).minus(B.times(B)).sqrt(),A+10,0),$.precision=A,$.rounding=Q,FA(ZH==2||ZH==4?B.neg():B,A,Q,!0)};h1.times=h1.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=eQ(G.e/TA)+eQ(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%JG|0,Q=X/JG|0;Y[J]=(Y[J]+Q)%JG|0}for(;!Y[--Z];)Y.pop();if(Q)++B;else Y.shift();return A.d=Y,A.e=DU0(Y,B),cA?FA(A,V.precision,V.rounding):A};h1.toBinary=function(A,Q){return A81(this,2,A,Q)};h1.toDecimalPlaces=h1.toDP=function(A,Q){var B=this,$=B.constructor;if(B=new $(B),A===void 0)return B;if(MJ(A,0,$w),Q===void 0)Q=$.rounding;else MJ(Q,0,8);return FA(B,A+B.e+1,Q)};h1.toExponential=function(A,Q){var B,$=this,J=$.constructor;if(A===void 0)B=JK($,!0);else{if(MJ(A,0,$w),Q===void 0)Q=J.rounding;else MJ(Q,0,8);$=FA(new J($),A+1,Q),B=JK($,!0,A+1)}return $.isNeg()&&!$.isZero()?"-"+B:B};h1.toFixed=function(A,Q){var B,$,J=this,Y=J.constructor;if(A===void 0)B=JK(J);else{if(MJ(A,0,$w),Q===void 0)Q=Y.rounding;else MJ(Q,0,8);$=FA(new Y(J),A+J.e+1,Q),B=JK($,!1,A+$.e+1)}return J.isNeg()&&!J.isZero()?"-"+B:B};h1.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=S4A(E)-K.e-1,Z=Y%TA,Q.d[0]=b9(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(Bw+X);A=X.gt(Q)?Y>0?Q:D:X}cA=!1,X=new W(QQ(E)),G=W.precision,W.precision=Y=E.length*TA*2;for(;;){if(V=O3(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=O3(A.minus(B),$,0,1,1),F=F.plus(J.times(D)),B=B.plus(J.times($)),F.s=D.s=K.s,U=O3(D,$,Y,1).minus(K).abs().cmp(O3(F,B,Y,1).minus(K).abs())<1?[D,$]:[F,B],W.precision=G,cA=!0,U};h1.toHexadecimal=h1.toHex=function(A,Q){return A81(this,16,A,Q)};h1.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 MJ(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])cA=!1,B=O3(B,A,0,Q,1).times(A),cA=!0,FA(B);else A.s=B.s,B=A;return B};h1.toNumber=function(){return+this};h1.toOctal=function(A,Q){return A81(this,8,A,Q)};h1.toPower=h1.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(b9(+X,D));if(X=new F(X),X.eq(1))return X;if($=F.precision,Y=F.rounding,A.eq(1))return FA(X,$,Y);if(Q=eQ(A.e/TA),Q>=A.d.length-1&&(B=D<0?-D:D)<=Lr5)return J=k4A(F,X,B,$),A.s<0?new F(1).div(J):FA(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=b9(+X,D),Q=B==0||!isFinite(B)?eQ(D*(Math.log("0."+QQ(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(cA=!1,F.rounding=X.s=1,B=Math.min(12,(Q+"").length),J=e31(A.times(Qw(X,$+B)),$),J.d){if(J=FA(J,$+5,1),vt(J.d,$,Y)){if(Q=$+10,J=FA(e31(A.times(Qw(X,Q+B)),Q),Q+5,1),+QQ(J.d).slice($+1,$+15)+1==100000000000000)J=FA(J,$+1,0)}}return J.s=Z,cA=!0,F.rounding=Y,FA(J,$,Y)};h1.toPrecision=function(A,Q){var B,$=this,J=$.constructor;if(A===void 0)B=JK($,$.e<=J.toExpNeg||$.e>=J.toExpPos);else{if(MJ(A,1,$w),Q===void 0)Q=J.rounding;else MJ(Q,0,8);$=FA(new J($),A,Q),B=JK($,A<=$.e||$.e<=J.toExpNeg,A)}return $.isNeg()&&!$.isZero()?"-"+B:B};h1.toSignificantDigits=h1.toSD=function(A,Q){var B=this,$=B.constructor;if(A===void 0)A=$.precision,Q=$.rounding;else if(MJ(A,1,$w),Q===void 0)Q=$.rounding;else MJ(Q,0,8);return FA(new $(B),A,Q)};h1.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};h1.truncated=h1.trunc=function(){return FA(new this.constructor(this),this.e+1,1)};h1.valueOf=h1.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 QQ(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+=Aw(B);Y+=$}if(Z=A[Q],$=Z+"",B=TA-$.length,B)Y+=Aw(B)}else if(Z===0)return"0";for(;Z%10===0;)Z/=10;return Y+Z}function MJ(A,Q,B){if(A!==~~A||A<Q||A>B)throw Error(Bw+A)}function vt(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=b9(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)==b9(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)==b9(10,Q-3)-1;return Z}function $U0(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]+=r31.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 jr5(A,Q){var B,$,J;if(Q.isZero())return Q;if($=Q.d.length,$<32)B=Math.ceil($/3),J=(1/GU0(4,B)).toString();else B=16,J="2.3283064365386962890625e-10";A.precision+=B,Q=Ib(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 O3=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,_,S,T,x,h,f=$.constructor,v=$.s==J.s?1:-1,u=$.d,m=J.d;if(!u||!u[0]||!m||!m[0])return new f(!$.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=JG,K=TA,G=eQ($.e/K)-eQ(J.e/K);x=m.length,S=u.length,z=new f(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=f.precision,Z=f.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,x==1){U=0,m=m[0],C++;for(;(V<S||U)&&C--;V++)O=U*F+(u[V]||0),q[V]=O/m|0,U=O%m|0;E=U||V<S}else{if(U=F/(m[0]+1)|0,U>1)m=A(m,U,F),u=A(u,U,F),x=m.length,S=u.length;_=x,N=u.slice(0,x),I=N.length;for(;I<x;)N[I++]=0;if(h=m.slice(),h.unshift(0),T=m[0],m[1]>=F/2)++T;do{if(U=0,D=Q(m,N,x,I),D<0){if(w=N[0],x!=I)w=w*F+(N[1]||0);if(U=w/T|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,x<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,x,I),D<1)U++,B(N,x<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((_++<S||N[0]!==void 0)&&C--);E=N[0]!==void 0}if(!q[0])q.shift()}if(K==1)z.e=G,j4A=E;else{for(V=1,U=q[0];U>=10;U/=10)V++;z.e=V+G*K-1,FA(z,X?Y+z.e+1:Y,Z,E)}return z}}();function FA(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/b9(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/b9(10,J-Z-1)%10|0}if($=$||Q<0||V[U+1]!==void 0||(Z<0?G:G%b9(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/b9(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]=b9(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=b9(10,TA-Y),V[U]=Z>0?(G/b9(10,J-Z)%b9(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]==JG)V[0]=1}break}else{if(V[U]+=X,V[U]!=JG)break;V[U--]=0,X=1}for(Y=V.length;V[--Y]===0;)V.pop()}if(cA){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 y4A(A);var $,J=A.e,Y=QQ(A.d),Z=Y.length;if(Q){if(B&&($=B-Z)>0)Y=Y.charAt(0)+"."+Y.slice(1)+Aw($);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."+Aw(-J-1)+Y,B&&($=B-Z)>0)Y+=Aw($)}else if(J>=Z){if(Y+=Aw(J+1-Z),B&&($=B-J-1)>0)Y=Y+"."+Aw($)}else{if(($=J+1)<Z)Y=Y.slice(0,$)+"."+Y.slice($);if(B&&($=B-Z)>0){if(J+1===Z)Y+=".";Y+=Aw($)}}return Y}function DU0(A,Q){var B=A[0];for(Q*=TA;B>=10;B/=10)Q++;return Q}function XU0(A,Q,B){if(Q>Or5){if(cA=!0,B)A.precision=B;throw Error(R4A)}return FA(new A(YU0),Q,1,!0)}function $K(A,Q,B){if(Q>t31)throw Error(R4A);return FA(new A(ZU0),Q,B,!0)}function S4A(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 Aw(A){var Q="";for(;A--;)Q+="0";return Q}function k4A(A,Q,B,$){var J,Y=new A(1),Z=Math.ceil($/TA+4);cA=!1;for(;;){if(B%2){if(Y=Y.times(Q),L4A(Y.d,Z))J=!0}if(B=eQ(B/2),B===0){if(B=Y.d.length-1,J&&Y.d[B]===0)++Y.d[B];break}Q=Q.times(Q),L4A(Q.d,Z)}return cA=!0,Y}function M4A(A){return A.d[A.d.length-1]&1}function v4A(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 e31(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)cA=!1,F=E;else F=Q;X=new U(0.03125);while(A.e>-2)A=A.times(X),V+=5;$=Math.log(b9(2,V))/Math.LN10*2+5|0,F+=$,B=Y=Z=new U(1),U.precision=F;for(;;){if(Y=FA(Y.times(A),F,1),B=B.times(++G),X=Z.plus(O3(Y,B,F,1)),QQ(X.d).slice(0,F)===QQ(Z.d).slice(0,F)){J=V;while(J--)Z=FA(Z.times(Z),F,1);if(Q==null)if(D<3&&vt(Z.d,F-$,K,D))U.precision=F+=10,B=Y=X=new U(1),G=0,D++;else return FA(Z,U.precision=E,K,cA=!0);else return U.precision=E,Z}Z=X}}function Qw(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)cA=!1,G=N;else G=Q;if(z.precision=G+=E,B=QQ(H),$=B.charAt(0),Math.abs(Y=W.e)<1500000000000000){while($<7&&$!=1||$==1&&B.charAt(1)>3)W=W.times(A),B=QQ(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=XU0(z,G+2,N).times(Y+""),W=Qw(new z($+"."+B.slice(1)),G-E).plus(D),z.precision=N,Q==null?FA(W,N,q,cA=!0):W;V=W,F=Z=W=O3(W.minus(1),W.plus(1),G,1),U=FA(W.times(W),G,1),J=3;for(;;){if(Z=FA(Z.times(U),G,1),D=F.plus(O3(Z,new z(J),G,1)),QQ(D.d).slice(0,G)===QQ(F.d).slice(0,G)){if(F=F.times(2),Y!==0)F=F.plus(XU0(z,G+2,N).times(Y+""));if(F=O3(F,new z(K),G,1),Q==null)if(vt(F.d,G-E,q,X))z.precision=G+=E,D=Z=W=O3(V.minus(1),V.plus(1),G,1),U=FA(W.times(W),G,1),J=X=1;else return FA(F,z.precision=N,q,cA=!0);else return z.precision=N,F}F=D,J+=2}}function y4A(A){return String(A.s*A.s/0)}function JU0(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),cA){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 Rr5(A,Q){var B,$,J,Y,Z,X,F,D,G;if(Q.indexOf("_")>-1){if(Q=Q.replace(/(\d)_(?=\d)/g,"$1"),T4A.test(Q))return JU0(A,Q)}else if(Q==="Infinity"||Q==="NaN"){if(!+Q)A.s=NaN;return A.e=NaN,A.d=null,A}if(Cr5.test(Q))B=16,Q=Q.toLowerCase();else if(wr5.test(Q))B=2;else if(Mr5.test(Q))B=8;else throw Error(Bw+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=k4A($,new $(B),Y,Y*2);D=$U0(Q,B,JG),G=D.length-1;for(Y=G;D[Y]===0;--Y)D.pop();if(Y<0)return new $(A.s*0);if(A.e=DU0(D,G),A.d=D,cA=!1,Z)A=O3(A,J,X*4);if(F)A=A.times(Math.abs(F)<54?b9(2,F):yt.pow(2,F));return cA=!0,A}function Pr5(A,Q){var B,$=Q.d.length;if($<3)return Q.isZero()?Q:Ib(A,2,Q,Q);B=1.4*Math.sqrt($),B=B>16?16:B|0,Q=Q.times(1/GU0(5,B)),Q=Ib(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 Ib(A,Q,B,$,J){var Y,Z,X,F,D=1,G=A.precision,V=Math.ceil(G/TA);cA=!1,F=B.times(B),X=new A($);for(;;){if(Z=O3(X.times(F),new A(Q++*Q++),G,1),X=J?$.plus(Z):$.minus(Z),$=O3(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 cA=!0,Z.d.length=V+1,Z}function GU0(A,Q){var B=A;while(--Q)B*=A;return B}function x4A(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=M4A(B)?$?2:3:$?4:1,Q;ZH=M4A(B)?$?1:4:$?3:2}return Q.minus(J).abs()}function A81(A,Q,B,$){var J,Y,Z,X,F,D,G,V,U,K=A.constructor,E=B!==void 0;if(E)if(MJ(B,1,$w),$===void 0)$=K.rounding;else MJ($,0,8);else B=K.precision,$=K.rounding;if(!A.isFinite())G=y4A(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=$U0(JK(U),10,J),U.e=U.d.length;V=$U0(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=O3(A,U,B,$,0,J),V=A.d,Y=A.e,D=j4A;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+=r31.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=$U0(G,J,Q);for(F=V.length;!V[F-1];--F);for(Z=1,G="1.";Z<F;Z++)G+=r31.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 L4A(A,Q){if(A.length>Q)return A.length=Q,!0}function _r5(A){return new this(A).abs()}function Tr5(A){return new this(A).acos()}function Sr5(A){return new this(A).acosh()}function kr5(A,Q){return new this(A).plus(Q)}function vr5(A){return new this(A).asin()}function yr5(A){return new this(A).asinh()}function xr5(A){return new this(A).atan()}function fr5(A){return new this(A).atanh()}function br5(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(O3(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(O3(A,Q,Y,1));return B}function ur5(A){return new this(A).cbrt()}function hr5(A){return FA(A=new this(A),A.e+1,2)}function gr5(A,Q,B){return new this(A).clamp(Q,B)}function mr5(A){if(!A||typeof A!=="object")throw Error(FU0+"Object expected");var Q,B,$,J=A.defaults===!0,Y=["precision",1,$w,"rounding",0,8,"toExpNeg",-Nb,0,"toExpPos",0,Nb,"maxE",0,Nb,"minE",-Nb,0,"modulo",0,9];for(Q=0;Q<Y.length;Q+=3){if(B=Y[Q],J)this[B]=s31[B];if(($=A[B])!==void 0)if(eQ($)===$&&$>=Y[Q+1]&&$<=Y[Q+2])this[B]=$;else throw Error(Bw+B+": "+$)}if(B="crypto",J)this[B]=s31[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(P4A);else this[B]=!1;else throw Error(Bw+B+": "+$);return this}function pr5(A){return new this(A).cos()}function dr5(A){return new this(A).cosh()}function f4A(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,O4A(Y)){if(D.s=Y.s,cA)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(cA)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 JU0(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 T4A.test(Y)?JU0(D,Y):Rr5(D,Y)}if(F==="bigint"){if(Y<0)Y=-Y,D.s=-1;else D.s=1;return JU0(D,Y.toString())}throw Error(Bw+Y)}if(J.prototype=h1,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=mr5,J.clone=f4A,J.isDecimal=O4A,J.abs=_r5,J.acos=Tr5,J.acosh=Sr5,J.add=kr5,J.asin=vr5,J.asinh=yr5,J.atan=xr5,J.atanh=fr5,J.atan2=br5,J.cbrt=ur5,J.ceil=hr5,J.clamp=gr5,J.cos=pr5,J.cosh=dr5,J.div=cr5,J.exp=lr5,J.floor=ir5,J.hypot=nr5,J.ln=ar5,J.log=or5,J.log10=sr5,J.log2=rr5,J.max=tr5,J.min=er5,J.mod=As5,J.mul=Qs5,J.pow=Bs5,J.random=$s5,J.round=Js5,J.sign=Ys5,J.sin=Zs5,J.sinh=Xs5,J.sqrt=Fs5,J.sub=Ds5,J.sum=Gs5,J.tan=Vs5,J.tanh=Us5,J.trunc=Ks5,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 cr5(A,Q){return new this(A).div(Q)}function lr5(A){return new this(A).exp()}function ir5(A){return FA(A=new this(A),A.e+1,3)}function nr5(){var A,Q,B=new this(0);cA=!1;for(A=0;A<arguments.length;)if(Q=new this(arguments[A++]),!Q.d){if(Q.s)return cA=!0,new this(1/0);B=Q}else if(B.d)B=B.plus(Q.times(Q));return cA=!0,B.sqrt()}function O4A(A){return A instanceof yt||A&&A.toStringTag===_4A||!1}function ar5(A){return new this(A).ln()}function or5(A,Q){return new this(A).log(Q)}function rr5(A){return new this(A).log(2)}function sr5(A){return new this(A).log(10)}function tr5(){return v4A(this,arguments,-1)}function er5(){return v4A(this,arguments,1)}function As5(A,Q){return new this(A).mod(Q)}function Qs5(A,Q){return new this(A).mul(Q)}function Bs5(A,Q){return new this(A).pow(Q)}function $s5(A){var Q,B,$,J,Y=0,Z=new this(1),X=[];if(A===void 0)A=this.precision;else MJ(A,1,$w);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(P4A);if($=X[--Y],A%=TA,$&&A)J=b9(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 Js5(A){return FA(A=new this(A),A.e+1,this.rounding)}function Ys5(A){return A=new this(A),A.d?A.d[0]?A.s:0*A.s:A.s||NaN}function Zs5(A){return new this(A).sin()}function Xs5(A){return new this(A).sinh()}function Fs5(A){return new this(A).sqrt()}function Ds5(A,Q){return new this(A).sub(Q)}function Gs5(){var A=0,Q=arguments,B=new this(Q[A]);cA=!1;for(;B.s&&++A<Q.length;)B=B.plus(Q[A]);return cA=!0,FA(B,this.precision,this.rounding)}function Vs5(A){return new this(A).tan()}function Us5(A){return new this(A).tanh()}function Ks5(A){return FA(A=new this(A),A.e+1,1)}h1[Symbol.for("nodejs.util.inspect.custom")]=h1.toString;h1[Symbol.toStringTag]="Decimal";var yt=h1.constructor=f4A(s31);YU0=new yt(YU0);ZU0=new yt(ZU0);var Q81=2;function Es5(A,Q){let B=Q.decimalPlaces==="more-if-tiny"?Math.abs(A)<0.01?Q81+1:Q81:Q.decimalPlaces??Q81,$=Q.intent==="balance"?A<0?"expand":"trunc":"halfExpand";return{decimalPlaces:B,roundingMode:$}}function Jw(A,Q){let{decimalPlaces:B,roundingMode:$}=Es5(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 xt(A){if(A>=1e6)return`${Math.round(A/1e6)}M`;if(A>=1000)return`${Math.round(A/1000)}k`;return A.toString()}function Ws5(A){if(!A)return"";let Q=A.split("-");if(Q.length>=2)return Q.slice(0,2).join("-");return A}function b4A(A){let Q=[],B=(A.inputTokens??0)+(A.cacheCreationInputTokens??0),$=A.cacheReadInputTokens??0;if(B>0)Q.push(`${xt(B)} in`);if($>0)Q.push(`${xt($)} cache read`);if(A.outputTokens)Q.push(`${xt(A.outputTokens)} out`);if(A.model)Q.push(Ws5(A.model));if(Q.length>0)return`(${Q.join(", ")})`;return""}function Yw(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(Jw(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(Jw(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(Jw(X,D),new y({color:B.foreground,dim:$,bold:!$})));else J.push(new M(Jw(X,D),new y({color:B.foreground,dim:$,bold:!$})));return J}class B81 extends YA{}class $81 extends YA{}function Hs5(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 zs5(A,Q){let B=_0.of(Q),{colors:$}=B,J=Yw(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(`
|
|
5371
5371
|
|
|
5372
|
-
`)),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 qs5(A,Q,B){let $=zs5(A,Q);if(!A.costBreakdownURL)return new fA({header:"Thread Cost",minWidth:80,maxWidth:100,onDismiss:B,child:$});let J=A.costBreakdownURL,Y=new z4(()=>{return IA.maybeInvoke(Q,new tB(J,"Cost breakdown URL copied to clipboard","Failed to copy cost breakdown URL")),"handled"}),Z=new z4(()=>{return z6(Q,J),"handled"});return new fA({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 IA({actions:new Map([[B81,Y],[$81,Z]]),child:new A3({debugLabel:"ThreadCostShortcuts",shortcuts:new Map([[f1.key("o"),new $81],[f1.key("y"),new B81]]),child:new m4({autofocus:!0,debugLabel:"ThreadCostBody",child:$})})})})}function u4A(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 EA.threadDisplayCostInfo({threadID:J},{config:A.configService});if(!Y.ok){A.toastController.show(Hs5(J,Y.error),"error",5000),$();return}Q.push(qs5(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 Ns5=250,Is5=2000;class J81 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 g4A}}class g4A extends k0{editorController=new N8;commandPalette=new qs(this);commandRegistry=new N51;toastController=new Q41;exitHintTimer=new Tf(this,1000);ideStatus=new f8(this,{});threadNavigationHistory=new K51;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;titleSubscription=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})};shareThreadWithSupport=async(A,Q)=>{let B;if(this.activeThreadContext&&this.activeThreadContext.client.getThreadId()===A){let $=this.activeThreadContext.observer.activeError().getValue();if($)B={message:$.message,type:$.code,stack:$.stack,retryAfterSeconds:$.retryAt!==void 0?Math.max(0,Math.ceil(($.retryAt-Date.now())/1000)):void 0}}await we4({configService:this.widget.configService},A,Q,B)};setThreadVisibility=(A,Q)=>{return Ce4({ampURL:this.widget.neoContext.ampURL,configService:this.widget.configService},A,Q)};archiveThread=async(A)=>{let Q=await Ro4({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let B=await Po4({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 _o4({configService:this.widget.configService},A,Q);if(B instanceof Error)return B;return this.toastController.show(B.message,B.type,2000),null};initState(){if(iB.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(I80(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 U51({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=v4.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()},Ns5),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<Is5)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?qe4({pluginService:this.widget.neoContext.pluginService,workspaceRoot:this.widget.neoContext.workspaceRoot,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)=>w31({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()}},u4A({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 _51({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 d31({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 z6(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:()=>{HJ(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 R51({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 L51({commands:eB.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 fA({header:"Amp Version",maxWidth:72,onDismiss:Z,child:new l({text:new M(a11({version:"0.0.1777921804-gae5962",buildTimestamp:"2026-05-04T19:13:44.426Z",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:f1.ctrl("c"),status:{type:"enabled"},run:(J,Y)=>{IA.maybeInvoke(Y,new Db)}},...Q,...Xe4(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 p31({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,shareThreadWithSupport:this.shareThreadWithSupport,setThreadVisibility:this.setThreadVisibility,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:B}),J=A4.of(A),Z=[new l0({constraints:M1.tight(J.size.width,J.size.height),child:$})];if(this.commandPalette.isEnabled())Z.push(new c4({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new I51({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.neoWelcomeVisible)Z.push(w31({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 a31({onDismiss:this.dismissNeoWelcome})}));if(Z.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.neoContext.isInternalUser)Z.push(new O51({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:ft.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)Z.push(new j51);return new G2({neoContext:this.widget.neoContext,child:new eB({commandRegistry:this.commandRegistry,child:new nI({completionBuilder:this.widget.completionBuilder,child:new m3({controller:this.toastController,child:new IA({actions:this.buildActions(),child:new A3({debugLabel:"NeoAppShortcuts",shortcuts:new Map([[f1.ctrl("c"),new kV0],[f1.ctrl("o"),new vV0],[f1.alt("i"),new xV0],[f1.alt("p"),new jI],[f1.ctrl("t"),new fV0]]),child:new m4({debugLabel:"AppShellFocus",child:new B41({controller:this.toastController,child:new r4({children:Z})})})})})})})})})}buildActions(){let A=new z4(()=>{if(WJ.hasAnyCopyableSelection())return WJ.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new z4(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),B=new z4(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),$=new z4(()=>{let G=this.activeThreadContext?.client.getThreadId();return this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(G),this.setState(()=>{this.titleSubscription?.unsubscribe(),this.titleSubscription=null,this.writeTerminalTitle(void 0),this.activeThreadContext=null,this.connectingToThreadID=null}),"handled"}),J=new z4(()=>{return v4.instance.stop(),"handled"}),Y=new z4((G)=>{if(!G.text)return"ignored";return v4.instance.tuiInstance.clipboard.writeText(G.text).then(()=>{this.toastController.show(G.successMessage,"success",2000)}).catch((V)=>{j.error("Failed to copy Neo text to clipboard",{error:V}),this.toastController.show(G.failureMessage,"error",2000)}),"handled"}),Z=new z4(()=>{return v4.instance.toggleFrameStatsOverlay(),"handled"}),X=new z4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),F=new z4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";let G=this.activeThreadContext?.client.getThreadId();if(!G)return this.toastController.show("No active thread","error",2000),"handled";return Ge0(G).then((V)=>{this.toastController.show(tu4(V),"success",2000)}).catch((V)=>{let U=V instanceof Error?V.message:String(V);j.error("Failed to copy thread log",{error:V}),this.toastController.show(`Failed to copy thread log: ${U}`,"error",2000)}),"handled"}),D=new z4(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[kV0,A],[Et,$],[Db,J],[tB,Y],[zt,B],[vV0,Q],[xV0,X],[SR,F],[jI,Z],[fV0,D]])}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=pD0(await Nf(this.widget.configService),{agentMode:this.widget.neoContext.sessionAgentMode,explicitEffort:this.widget.neoContext.explicitReasoningEffort,sessionState:this.widget.neoContext});this.applyDraftThreadSettingsSeed(A)}catch(A){j.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applyDraftThreadSettingsSeed(A){if(!this.mounted)return;if(!this.hasDraftThreadSettingsSeed){this.setState(()=>{this.hasDraftThreadSettingsSeed=!0,this.draftThreadSettings=h4A(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if(dZ(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=h4A(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(iI);if(this.exitHintTimer.isActive())A.add($b);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),v4.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 $=this.activeThreadContext?.client.getThreadId(),J=A.find((Z)=>Z.type==="text");if(J&&J.type==="text")this.widget.history.add(J.text,ft.cwd()),this.widget.history.reset();let Y=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,B?sY(B):void 0);this.sendUserMessage(Y,A,Q),this.threadNavigationHistory.recordNavigation($),this.setActiveClient(Y)};sendUserMessage(A,Q,B){let $=GZ0(this.ideStatus.getValue());A.client.sendUserMessage(Q,B,{userState:$})}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.writeTerminalTitle(Q)}})}subscribeNotifications(A){this.widget.notificationService.attach(A.agentState())}writeTerminalTitle(A){let Q=ft.cwd().replace(ft.env.HOME||"","~"),B=A?`amp - ${A} - ${Q}`:"";ft.stdout.write(HI(B))}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.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 h4A(A,Q,B){let $={...A};for(let J of ws5(Q,B)){if(!dZ(A[J],Q[J]))continue;let Y=B[J];if(Y===void 0)delete $[J];else $[J]=Y}return $}function ws5(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}d4();function m4A(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 T9(42),E=new NI(G,V,G,V,G,V,0,A.agentMode??"smart","intensity","classic","braille",void 0,void 0,H0.default(),K);E.layout(M1.tight(G,V)),E.paint(U,0,0);let W=U.getBuffer().getCells(),H=0;for(let _=0;_<V;_++)if(W[_].some((S)=>S.char!==" ")){H=_;break}let z=V-1;for(let _=V-1;_>=0;_--)if(W[_].some((S)=>S.char!==" ")){z=_;break}function q(_,S){if(!_)return"";if(_.type==="rgb"){let{r:T,g:x,b:h}=_.value;if(B.getColorDepth()>=24)return`\x1B[${S?38:48};2;${T};${x};${h}m`;let f=aj(T,x,h);return`\x1B[${S?38:48};5;${f}m`}return""}let N=[];if(z>=H)for(let _=H;_<=z;_++){let S="";for(let T=0;T<G;T++){let x=W[_][T],h=x.char,f=q(x.style.fg,!0);S+=f+h+"\x1B[0m"}N.push(S)}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 S=" ".repeat(G);if(_>=C&&_<C+I)S=N[_-C];let T=" ",x="";if(_>=O&&_<O+D.length)x=D[_-O];B.write(S+T+x+`
|
|
5372
|
+
`)),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 qs5(A,Q,B){let $=zs5(A,Q);if(!A.costBreakdownURL)return new fA({header:"Thread Cost",minWidth:80,maxWidth:100,onDismiss:B,child:$});let J=A.costBreakdownURL,Y=new z4(()=>{return IA.maybeInvoke(Q,new tB(J,"Cost breakdown URL copied to clipboard","Failed to copy cost breakdown URL")),"handled"}),Z=new z4(()=>{return z6(Q,J),"handled"});return new fA({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 IA({actions:new Map([[B81,Y],[$81,Z]]),child:new A3({debugLabel:"ThreadCostShortcuts",shortcuts:new Map([[f1.key("o"),new $81],[f1.key("y"),new B81]]),child:new m4({autofocus:!0,debugLabel:"ThreadCostBody",child:$})})})})}function u4A(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 EA.threadDisplayCostInfo({threadID:J},{config:A.configService});if(!Y.ok){A.toastController.show(Hs5(J,Y.error),"error",5000),$();return}Q.push(qs5(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 Ns5=250,Is5=2000;class J81 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 g4A}}class g4A extends k0{editorController=new N8;commandPalette=new qs(this);commandRegistry=new N51;toastController=new Q41;exitHintTimer=new Tf(this,1000);ideStatus=new f8(this,{});threadNavigationHistory=new K51;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;titleSubscription=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})};shareThreadWithSupport=async(A,Q)=>{let B;if(this.activeThreadContext&&this.activeThreadContext.client.getThreadId()===A){let $=this.activeThreadContext.observer.activeError().getValue();if($)B={message:$.message,type:$.code,stack:$.stack,retryAfterSeconds:$.retryAt!==void 0?Math.max(0,Math.ceil(($.retryAt-Date.now())/1000)):void 0}}await we4({configService:this.widget.configService},A,Q,B)};setThreadVisibility=(A,Q)=>{return Ce4({ampURL:this.widget.neoContext.ampURL,configService:this.widget.configService},A,Q)};archiveThread=async(A)=>{let Q=await Ro4({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let B=await Po4({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 _o4({configService:this.widget.configService},A,Q);if(B instanceof Error)return B;return this.toastController.show(B.message,B.type,2000),null};initState(){if(iB.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(I80(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 U51({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=v4.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()},Ns5),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<Is5)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?qe4({pluginService:this.widget.neoContext.pluginService,workspaceRoot:this.widget.neoContext.workspaceRoot,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)=>w31({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()}},u4A({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 _51({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 d31({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 z6(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:()=>{HJ(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 R51({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 L51({commands:eB.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 fA({header:"Amp Version",maxWidth:72,onDismiss:Z,child:new l({text:new M(a11({version:"0.0.1777926321-gea1d78",buildTimestamp:"2026-05-04T20:29:05.940Z",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:f1.ctrl("c"),status:{type:"enabled"},run:(J,Y)=>{IA.maybeInvoke(Y,new Db)}},...Q,...Xe4(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 p31({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,shareThreadWithSupport:this.shareThreadWithSupport,setThreadVisibility:this.setThreadVisibility,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:B}),J=A4.of(A),Z=[new l0({constraints:M1.tight(J.size.width,J.size.height),child:$})];if(this.commandPalette.isEnabled())Z.push(new c4({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new I51({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.neoWelcomeVisible)Z.push(w31({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 a31({onDismiss:this.dismissNeoWelcome})}));if(Z.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.neoContext.isInternalUser)Z.push(new O51({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:ft.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)Z.push(new j51);return new G2({neoContext:this.widget.neoContext,child:new eB({commandRegistry:this.commandRegistry,child:new nI({completionBuilder:this.widget.completionBuilder,child:new m3({controller:this.toastController,child:new IA({actions:this.buildActions(),child:new A3({debugLabel:"NeoAppShortcuts",shortcuts:new Map([[f1.ctrl("c"),new kV0],[f1.ctrl("o"),new vV0],[f1.alt("i"),new xV0],[f1.alt("p"),new jI],[f1.ctrl("t"),new fV0]]),child:new m4({debugLabel:"AppShellFocus",child:new B41({controller:this.toastController,child:new r4({children:Z})})})})})})})})})}buildActions(){let A=new z4(()=>{if(WJ.hasAnyCopyableSelection())return WJ.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new z4(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),B=new z4(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),$=new z4(()=>{let G=this.activeThreadContext?.client.getThreadId();return this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(G),this.setState(()=>{this.titleSubscription?.unsubscribe(),this.titleSubscription=null,this.writeTerminalTitle(void 0),this.activeThreadContext=null,this.connectingToThreadID=null}),"handled"}),J=new z4(()=>{return v4.instance.stop(),"handled"}),Y=new z4((G)=>{if(!G.text)return"ignored";return v4.instance.tuiInstance.clipboard.writeText(G.text).then(()=>{this.toastController.show(G.successMessage,"success",2000)}).catch((V)=>{j.error("Failed to copy Neo text to clipboard",{error:V}),this.toastController.show(G.failureMessage,"error",2000)}),"handled"}),Z=new z4(()=>{return v4.instance.toggleFrameStatsOverlay(),"handled"}),X=new z4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),F=new z4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";let G=this.activeThreadContext?.client.getThreadId();if(!G)return this.toastController.show("No active thread","error",2000),"handled";return Ge0(G).then((V)=>{this.toastController.show(tu4(V),"success",2000)}).catch((V)=>{let U=V instanceof Error?V.message:String(V);j.error("Failed to copy thread log",{error:V}),this.toastController.show(`Failed to copy thread log: ${U}`,"error",2000)}),"handled"}),D=new z4(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[kV0,A],[Et,$],[Db,J],[tB,Y],[zt,B],[vV0,Q],[xV0,X],[SR,F],[jI,Z],[fV0,D]])}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=pD0(await Nf(this.widget.configService),{agentMode:this.widget.neoContext.sessionAgentMode,explicitEffort:this.widget.neoContext.explicitReasoningEffort,sessionState:this.widget.neoContext});this.applyDraftThreadSettingsSeed(A)}catch(A){j.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applyDraftThreadSettingsSeed(A){if(!this.mounted)return;if(!this.hasDraftThreadSettingsSeed){this.setState(()=>{this.hasDraftThreadSettingsSeed=!0,this.draftThreadSettings=h4A(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if(dZ(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=h4A(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(iI);if(this.exitHintTimer.isActive())A.add($b);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),v4.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 $=this.activeThreadContext?.client.getThreadId(),J=A.find((Z)=>Z.type==="text");if(J&&J.type==="text")this.widget.history.add(J.text,ft.cwd()),this.widget.history.reset();let Y=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,B?sY(B):void 0);this.sendUserMessage(Y,A,Q),this.threadNavigationHistory.recordNavigation($),this.setActiveClient(Y)};sendUserMessage(A,Q,B){let $=GZ0(this.ideStatus.getValue());A.client.sendUserMessage(Q,B,{userState:$})}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.writeTerminalTitle(Q)}})}subscribeNotifications(A){this.widget.notificationService.attach(A.agentState())}writeTerminalTitle(A){let Q=ft.cwd().replace(ft.env.HOME||"","~"),B=A?`amp - ${A} - ${Q}`:"";ft.stdout.write(HI(B))}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.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 h4A(A,Q,B){let $={...A};for(let J of ws5(Q,B)){if(!dZ(A[J],Q[J]))continue;let Y=B[J];if(Y===void 0)delete $[J];else $[J]=Y}return $}function ws5(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}d4();function m4A(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 T9(42),E=new NI(G,V,G,V,G,V,0,A.agentMode??"smart","intensity","classic","braille",void 0,void 0,H0.default(),K);E.layout(M1.tight(G,V)),E.paint(U,0,0);let W=U.getBuffer().getCells(),H=0;for(let _=0;_<V;_++)if(W[_].some((S)=>S.char!==" ")){H=_;break}let z=V-1;for(let _=V-1;_>=0;_--)if(W[_].some((S)=>S.char!==" ")){z=_;break}function q(_,S){if(!_)return"";if(_.type==="rgb"){let{r:T,g:x,b:h}=_.value;if(B.getColorDepth()>=24)return`\x1B[${S?38:48};2;${T};${x};${h}m`;let f=aj(T,x,h);return`\x1B[${S?38:48};5;${f}m`}return""}let N=[];if(z>=H)for(let _=H;_<=z;_++){let S="";for(let T=0;T<G;T++){let x=W[_][T],h=x.char,f=q(x.style.fg,!0);S+=f+h+"\x1B[0m"}N.push(S)}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 S=" ".repeat(G);if(_>=C&&_<C+I)S=N[_-C];let T=" ",x="";if(_>=O&&_<O+D.length)x=D[_-O];B.write(S+T+x+`
|
|
5373
5373
|
`)}if($)B.write(`
|
|
5374
5374
|
\x1B[90m${$}\x1B[0m
|
|
5375
5375
|
`)}o0();tD0();var Cs5=2000;function p4A(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<Cs5)return;if(J=U,QR())return;if(oF0())rF0();else ea(V)},Z=(V)=>{if(!Q||!B)return;if(QR()&&!Gs()&&!Gf())return;process.stdout.write(iD(`\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&&cB(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()}}}o0();CE();D4();O1();function d4A(A,Q){if(!Q)return A;let B=Q.toLowerCase(),$=[];for(let J of A){let Y=Ms5(J,B);if(Y>0)$.push({...J,score:Y})}return $.sort((J,Y)=>{let Z=Y.score-J.score;if(Z!==0)return Z;return A.indexOf(J)-A.indexOf(Y)}),$}function Ms5(A,Q){let B=Ls5(A,Q),$=Os5(A.message.toLowerCase(),Q);return Math.max(B,$)}function Ls5(A,Q){let B=A.hash.toLowerCase(),$=A.shortHash.toLowerCase();if($===Q)return 1000;if($.startsWith(Q))return 900;if(B.startsWith(Q))return 850;if(B.includes(Q)||$.includes(Q))return 400;return 0}function Os5(A,Q){if(A===Q)return 800;if(A.startsWith(Q))return 700;let B=A.indexOf(Q);if(B!==-1)return 600-Math.min(B,500);let $=js5(A,Q);if($>0)return $;return 0}function js5(A,Q){let B=0,$=0,J=-1;while(B<A.length&&$<Q.length){if(A[B]===Q[$]){if(J===-1)J=B;$++}B++}if($===Q.length)return 250-Math.min(J,150);return 0}var c4A=":";function gR(A,Q){if(!gj())return;j.debug("[file mention completions]",{event:A,...Q})}function wb(A){return A.length<=80?A:`${A.slice(0,77)}...`}class mR{fuzzyClient;cachedDirtyFiles=[];cachedCommits=[];refreshPromise;refreshCommitsPromise;constructor(A){this.fuzzyClient=A;this.refreshDirtyFilesInBackground(),this.refreshCommitsInBackground()}async buildOptions(A){if(A.trigger==="@"){let Q=A.query;if(Q.toLowerCase().startsWith(c4A)){let Z=Q.slice(c4A.length);return gR("commit_query_detected",{workspaceRoot:this.fuzzyClient.workspaceRoot,queryLength:Z.length,queryPreview:wb(Z)}),this.buildCommitOptions(Z)}let $=Q.length===0?18:20,J=await this.buildFileOptions(Q,$),Y=this.appendHintOptions(Q,J);return gR("build_options_completed",{workspaceRoot:this.fuzzyClient.workspaceRoot,queryLength:Q.length,queryPreview:wb(Q),maxResults:$,fileOptionCount:J.filter((Z)=>Z.type==="file").length,hintOptionCount:Y.filter((Z)=>Z.type==="hint").length,finalOptionCount:Y.length,firstFilePaths:Y.filter((Z)=>Z.type==="file").slice(0,5).map((Z)=>Z.path)}),Y}return[]}async buildFileOptions(A,Q){try{let B=await this.getOpenFiles(),$=this.cachedDirtyFiles;this.refreshDirtyFilesInBackground();let J=await this.fuzzyClient.queryCompletions(A,Q,B,$),Y=J.map((Z)=>N0A(Z));return gR("file_options_built",{workspaceRoot:this.fuzzyClient.workspaceRoot,queryLength:A.length,queryPreview:wb(A),maxResults:Q,openFilesCount:B?.length??0,dirtyFilesCount:$.length,completionItemCount:J.length,fileOptionCount:Y.length,firstPaths:Y.slice(0,5).map((Z)=>Z.path)}),Y}catch(B){return gR("file_options_failed",{workspaceRoot:this.fuzzyClient.workspaceRoot,queryLength:A.length,queryPreview:wb(A),maxResults:Q,error:B instanceof Error?B.message:String(B)}),[]}}async getOpenFiles(){let A=await y1(y3.status);if(!A.connected)return;let Q=[];if(A.openFile)Q.push(Y1.parse(A.openFile).fsPath);if(A.visibleFiles)for(let B of A.visibleFiles){let $=Y1.parse(B).fsPath;if(!Q.includes($))Q.push($)}if(Q.length===0)return;return Q}refreshDirtyFilesInBackground(){if(this.refreshPromise!==void 0)return;this.refreshPromise=HR4(this.fuzzyClient.workspaceRoot).then((A)=>{this.cachedDirtyFiles=A}).catch(()=>{}).finally(()=>{this.refreshPromise=void 0})}async buildCommitOptions(A){this.refreshCommitsInBackground();let Q=this.cachedCommits;if(!Q.length)return gR("commit_options_empty_cache",{workspaceRoot:this.fuzzyClient.workspaceRoot,queryLength:A.length,queryPreview:wb(A)}),[];let B=d4A(Q,A).slice(0,20);return gR("commit_options_built",{workspaceRoot:this.fuzzyClient.workspaceRoot,queryLength:A.length,queryPreview:wb(A),commitCacheCount:Q.length,resultCount:B.length,firstCommitHashes:B.slice(0,5).map(($)=>$.shortHash)}),B.map(($)=>({type:"commit",hash:$.hash,shortHash:$.shortHash,message:$.message,relativeDate:$.relativeDate}))}refreshCommitsInBackground(){if(this.refreshCommitsPromise!==void 0)return;this.refreshCommitsPromise=zR4(this.fuzzyClient.workspaceRoot).then((A)=>{this.cachedCommits=A}).catch(()=>{}).finally(()=>{this.refreshCommitsPromise=void 0})}appendHintOptions(A,Q){if(A.length>0)return Q;let B=[{type:"hint",kind:"commit",message:"mention a commit"},{type:"hint",kind:"thread",message:"mention a thread"}];return gR("hint_options_appended",{workspaceRoot:this.fuzzyClient.workspaceRoot,queryLength:A.length,fileOptionCount:Q.filter(($)=>$.type==="file").length,hintOptionCount:B.length,hintOnly:Q.length===0,firstFilePaths:Q.filter(($)=>$.type==="file").slice(0,5).map(($)=>$.path)}),[...Q,...B]}}var Ps5=[{long:"neo",description:"Use the Neo TUI",type:"boolean",default:!1},{long:"url",short:"u",description:"Amp server URL",type:"string",default:""},{long:"dangerously-allow-all",description:"Disable all command confirmation prompts (agent will execute all commands without asking)",type:"boolean",default:!1},{long:"observe",description:"Connect to an existing thread as observer only (no local executor). Accepts a thread ID or thread URL.",type:"string",default:""}],aN2=wi4({name:"amp neo",description:"Start the Neo TUI",options:Ps5,positionals:[],action:async({options:A})=>{let Q=l4A(A);if(A.observe){let B=k3(A.observe)??gQ(A.observe);await VU0(Q,{initialThreadID:B,observerOnly:!0});return}await VU0(Q)},subcommands:[{name:"threads",alias:"t",description:"List and manage threads",options:[],positionals:[],subcommands:[{name:"continue",alias:"c",description:"Continue an existing thread",options:[],positionals:[{name:"thread-id",description:"Thread ID to continue"}],action:async({globalOptions:A,positionals:Q})=>{let $=l4A(A);if(!Q["thread-id"]){await VU0($,{openThreadPickerOnStart:!0});return}let J=k3(Q["thread-id"]);if(!J)throw"invalid thread ID";await VU0($,{initialThreadID:J})}}]}]});function _s5(A){if(A)return A;if(process.env.AMP_URL)return process.env.AMP_URL;return U9}function Ts5(A){if(process.env.RIVET_PUBLIC_ENDPOINT)return process.env.RIVET_PUBLIC_ENDPOINT;return DJ(A)}var i4A=Y1.file(Rs5.homedir()),Ss5=process.env.XDG_CONFIG_HOME?Y1.file(process.env.XDG_CONFIG_HOME):K1.joinPath(i4A,".config");function ks5({initialUserInput:A,showNeoWelcome:Q,neoWelcomeDismissed:B}){if(Q)return{show:!0,markDismissedOnDismiss:!0};let $=!A&&!B;return{show:$,markDismissedOnDismiss:$}}async function vs5(A){await aY((Q)=>lD0(Q,A,"interactive"))}function l4A(A){return{url:A.url,dangerouslyAllowAll:A["dangerously-allow-all"]}}async function VU0(A,Q={}){let{initialThreadID:B,openThreadPickerOnStart:$=!1,observerOnly:J=!1}=Q,Y=_s5(A.url),Z={dataDir:void 0,getHook:(S,T)=>{if(S==="url")return Promise.resolve(Y);return T()}},X=await QD0(Z),F=cD0(await Rr(Z,X)),D=Ts5(Y);if(A.dangerouslyAllowAll)wB("dangerouslyAllowAll",!0);let G=await F.get("apiKey",Y);if(!G)throw new J4("API key required. Please run `amp login` first.",1);let V=RS({storage:X,secretStorage:F,workspaceRoot:m0.of(Y1.file(process.cwd())),defaultAmpURL:Y,homeDir:i4A,userConfigDir:Ss5}),U=aL(V,{usesThreadActors:!0}),K=cZ0({configService:V}),E=new qf({configService:V});E.pluginExecutorKind="local";let W=Tc({configService:V,fileSystem:R5,platform:E,loadGlobalPlugins:Mr(V),pluginFilter:"all"}),H=j70({pluginService:W,toolService:K.toolService}),z=da({configService:V,filesystem:R5,spawn:Qx}),q=ca({toolService:K.toolService,providers:[z]}),N=OQ0({configService:V,filesystem:R5}),I={registerToolsWithToolService:()=>({dispose:()=>{}}),getClient:()=>{return},servers:m0.of([]),getPrompt:async()=>null,searchResources:async()=>[],searchPrompts:()=>m0.of([]),getToolsForServer:async()=>{return}},w=process.cwd(),C=async({uri:S})=>{return XI({fileSystem:R5,workspaceRoot:w},S)},O=new Yf(w,{},!0),_=new mR(O);await Y81({ampURL:Y,apiKey:G,rivetEndpoint:D,configService:V,toolService:K.toolService,pluginPlatform:E,pluginService:W,skillService:N,mcpService:I,readFileSystemDirectory:C,completionBuilder:_,workspaceRoot:w,listThreads:()=>U.listThreads(),getThreadFromServer:(S)=>U.getThread(S),toolboxes:z.toolboxes,isInternalUser:!1,settingsFilePath:X.getSettingsFilePath(),dispose:()=>{for(let S of q.values())S.dispose();return z.dispose(),O.dispose(),H.dispose(),K.dispose(),W.dispose()}},{initialThreadID:B,openThreadPickerOnStart:$,observerOnly:J})}async function Y81(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 kF0(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}),S=await PU({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:og4(w)}),skipReadyWait:!0});if(S.ok||S.status===409)return;throw Error(`Thread import failed (${S.status}): ${await S.text()}`)},V=new R11(A.rivetEndpoint,A.apiKey,A.configService,{clientID:YI.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 DI({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:vs5,readFileSystemDirectory:A.readFileSystemDirectory},D,G),U=await LI(),K=ks5({initialUserInput:$,showNeoWelcome:F,neoWelcomeDismissed:U.neoWelcomeDismissed}),E={ampURL:A.ampURL,configService:A.configService,getThreadMarkdown:async(I)=>{let w=await A.getThreadFromServer(I);return w?yV(w):null},isInternalUser:A.isInternalUser,listThreads:A.listThreads,logFilePath:Yr,mcpServers:A.mcpService.servers,pluginPlatform:A.pluginPlatform,pluginService:A.pluginService,toolboxes:A.toolboxes,observerOnly:Y,sessionAgentMode:Z??U.agentMode,explicitReasoningEffort:X,lastReasoningEffortByMode:U.lastReasoningEffortByMode,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 Pl4({ampURL:A.ampURL,configService:A.configService,threadID:I,signal:w})},z=new n11,q=p4A({configService:A.configService}),N=new Set;try{await Vs(new J81({clientPool:V,analyzeContextForThread:W,listSkillsForThread:H,completionBuilder:A.completionBuilder,history:new zr,ideManager:z,configService:A.configService,initialThreadID:B,notificationService:q,initialUserInput:$,openThreadPickerOnStart:J,neoContext:E,showNeoWelcome:K.show,onNeoWelcomeDismissed:K.markDismissedOnDismiss?()=>{aY(kl4).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)},S=`${A.ampURL.replace(/\/$/,"")}/threads/${O}`;m4A(_,S,process.stdout)}}}finally{process.stdout.write(HI("")),q.unsubscribe(),V.dispose(),await A.dispose?.()}process.exit(0)}Md();FE();async function ys5(A,Q,B){let $=Y20(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 n4A(A){try{let Q=A.args.map((B)=>{if(/[\s/\\*?[\]{}()"]/.test(B))return`"${B}"`;return B}).join(" ");await ys5(Q,A.settings,A.scope),A.exit(0)}catch(Q){let B=Q instanceof Error?Q.message:"Unknown error";A.stderr.write(`Error: ${B}
|
|
@@ -6138,7 +6138,7 @@ ${J}`,Q);this.line=B,this.column=$,this.codeblock=J}}/*!
|
|
|
6138
6138
|
`),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(`
|
|
6139
6139
|
`))}return new l0({decoration:{color:B.colorScheme.background,border:a1.all(new o1($.app.keybind,1,"rounded"))},child:new u0({padding:N0.symmetric(0,1),child:new l({text:new M(void 0,void 0,Y)})})})}}class G21 extends v8{chartData;highlightIndex;showAxes;colors;constructor({key:A,chartData:Q,highlightIndex:B=null,showAxes:$=!0,colors:J=LK0}){super(A?{key:A}:{});this.chartData=Q,this.highlightIndex=B,this.showAxes=$,this.colors=J}createRenderObject(){return new F21({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 J3A(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?h8: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?h8: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 fA3(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?h8: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?h8: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 bA3(A){let Q=0;for(let B of A)for(let $ of B.points)if($.value>Q)Q=$.value;return Q||1}function uA3(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 hA3(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,WD0(E),()=>{z6(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}
|
|
6140
6140
|
`,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(`
|
|
6141
|
-
`))}if(E)V.push(new M(" ",G)),V.push(new M("Total: ",G)),V.push(new M(Y(W),D))}return new l0({decoration:{color:X.background,border:a1.all(new o1(X.border,1,"rounded"))},child:new l({text:new M(void 0,void 0,V)})})}o0();N3();pz();a8();s5();NQ();nn();pZ();y7();a2();jB();vV();d4();Wv();lT();O1();o0();y7();class V21{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.1777921804-gae5962"},parameters:{metadata:{count:B}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(A);await W80(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 zw extends v0{props;constructor(A){super();this.props=A}createState(){return new Y3A}}class Y3A 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 Z3A extends k0{controller=new N8;focusNode=new Z6({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=a1.all(new o1(B.foreground,1,"solid")),F=new nB({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 Z1({children:[new l0({decoration:{color:B.background},child:new l({text:new M(">",new y({color:B.foreground}))})}),new S1({child:F})]}),G=new l0({padding:N0.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 l0({padding:N0.symmetric(1,0),child:new l({text:new M("",void 0,V)})});return new l0({decoration:{border:X,color:B.background},padding:N0.all(1),child:new b0({children:[G,new C0({height:1}),D,new J5,U]})})}}class tt extends v0{props;constructor(A){super();this.props=A}createState(){return new Z3A}}jB();class X3A extends k0{controller=new N8;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new Z6({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>=t9)return!1;let Q=await eX(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=A4.of(A).size.height,Z=Math.max(Math.floor(Y*0.5),10),X=new $G({controller:this.controller,triggers:[new CJ],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:v4.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 l0({constraints:new M1({maxHeight:Z}),padding:N0.symmetric(1,0),child:F}),G=new l0({padding:N0.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 l0({padding:N0.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 C0({height:1}),new S1({child:D}),new C0({height:1}),V];return new l0({decoration:{border:a1.all(new o1(B.foreground,1,"solid")),color:B.background},padding:N0.all(1),child:new b0({children:U})})}}class U21 extends v0{props;constructor(A){super();this.props=A}createState(){return new X3A}}function F3A(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 K21 extends C1{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)=>F3A(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 C0({width:H,child:Z1.end([new l({text:new M(W,new y({color:K}))})])});return new l0({decoration:V?{color:V}:void 0,padding:N0.symmetric(2,0),child:new Z1({children:[new S1({child:new l({text:new M(J.title,new y({color:U})),overflow:"ellipsis",maxLines:1})}),new C0({width:2}),E(F3A(J.pubDate),B)]})})}})}}class $B{static _instance=null;_allExpanded=!1;_listeners=new Set;static get instance(){if(!$B._instance)$B._instance=new $B;return $B._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()}}o0();class D3A 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 l0({decoration:K?{color:K}:void 0,padding:N0.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 l0({decoration:K?{color:K}:void 0,padding:N0.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 E21 extends v0{props;constructor(A){super();this.props=A}createState(){return new D3A}}class ZG extends v0{props;constructor(A){super();this.props=A}createState(){return new G3A}}class G3A extends k0{_spinner=new W6;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=a1.all(new o1(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 C0({height:2,child:new l0({padding:N0.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 l0({decoration:new u4(B.background,J),child:new C0({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 V3A}}class V3A extends k0{scrollController=new oA;scrollAreaKey=new Y2("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 y2}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=kG0(B);return{title:G.title,type:G.type,description:G.description}})(),J=$.type==="error"?Q.app.toolError:Q.app.command,Y=a1.all(new o1(Q.colors.border,1,"solid")),Z=new l0({padding:N0.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 x8({child:new l0({padding:N0.symmetric(1,0),child:new Z1({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new S1({child:new _A({controller:this.scrollController,autofocus:!0,child:X})}),new D2({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 l0({padding:N0.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 r4({fit:"expand",children:[new m1({onClick:()=>{},child:new C0}),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 l0({decoration:{border:Y,color:Q.colors.background},padding:N0.all(1),child:new b0({mainAxisAlignment:"center",children:[Z,new C0({height:1}),F,D]})})})]})})}}N3();class U3A extends v0{props;constructor(A){super();this.props=A}createState(){return new K3A}}class K3A 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=b8.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} ${G4(J,"plugin")} active`,new y({bold:!0}))),Z>0||X>0)$.push(new M(` (${Z} ${G4(Z,"command")}, ${X} ${G4(X,"tool")})`,new y({dim:!0})));$.push(new M(`
|
|
6141
|
+
`))}if(E)V.push(new M(" ",G)),V.push(new M("Total: ",G)),V.push(new M(Y(W),D))}return new l0({decoration:{color:X.background,border:a1.all(new o1(X.border,1,"rounded"))},child:new l({text:new M(void 0,void 0,V)})})}o0();N3();pz();a8();s5();NQ();nn();pZ();y7();a2();jB();vV();d4();Wv();lT();O1();o0();y7();class V21{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.1777926321-gea1d78"},parameters:{metadata:{count:B}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(A);await W80(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 zw extends v0{props;constructor(A){super();this.props=A}createState(){return new Y3A}}class Y3A 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 Z3A extends k0{controller=new N8;focusNode=new Z6({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=a1.all(new o1(B.foreground,1,"solid")),F=new nB({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 Z1({children:[new l0({decoration:{color:B.background},child:new l({text:new M(">",new y({color:B.foreground}))})}),new S1({child:F})]}),G=new l0({padding:N0.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 l0({padding:N0.symmetric(1,0),child:new l({text:new M("",void 0,V)})});return new l0({decoration:{border:X,color:B.background},padding:N0.all(1),child:new b0({children:[G,new C0({height:1}),D,new J5,U]})})}}class tt extends v0{props;constructor(A){super();this.props=A}createState(){return new Z3A}}jB();class X3A extends k0{controller=new N8;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new Z6({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>=t9)return!1;let Q=await eX(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=A4.of(A).size.height,Z=Math.max(Math.floor(Y*0.5),10),X=new $G({controller:this.controller,triggers:[new CJ],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:v4.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 l0({constraints:new M1({maxHeight:Z}),padding:N0.symmetric(1,0),child:F}),G=new l0({padding:N0.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 l0({padding:N0.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 C0({height:1}),new S1({child:D}),new C0({height:1}),V];return new l0({decoration:{border:a1.all(new o1(B.foreground,1,"solid")),color:B.background},padding:N0.all(1),child:new b0({children:U})})}}class U21 extends v0{props;constructor(A){super();this.props=A}createState(){return new X3A}}function F3A(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 K21 extends C1{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)=>F3A(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 C0({width:H,child:Z1.end([new l({text:new M(W,new y({color:K}))})])});return new l0({decoration:V?{color:V}:void 0,padding:N0.symmetric(2,0),child:new Z1({children:[new S1({child:new l({text:new M(J.title,new y({color:U})),overflow:"ellipsis",maxLines:1})}),new C0({width:2}),E(F3A(J.pubDate),B)]})})}})}}class $B{static _instance=null;_allExpanded=!1;_listeners=new Set;static get instance(){if(!$B._instance)$B._instance=new $B;return $B._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()}}o0();class D3A 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 l0({decoration:K?{color:K}:void 0,padding:N0.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 l0({decoration:K?{color:K}:void 0,padding:N0.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 E21 extends v0{props;constructor(A){super();this.props=A}createState(){return new D3A}}class ZG extends v0{props;constructor(A){super();this.props=A}createState(){return new G3A}}class G3A extends k0{_spinner=new W6;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=a1.all(new o1(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 C0({height:2,child:new l0({padding:N0.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 l0({decoration:new u4(B.background,J),child:new C0({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 V3A}}class V3A extends k0{scrollController=new oA;scrollAreaKey=new Y2("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 y2}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=kG0(B);return{title:G.title,type:G.type,description:G.description}})(),J=$.type==="error"?Q.app.toolError:Q.app.command,Y=a1.all(new o1(Q.colors.border,1,"solid")),Z=new l0({padding:N0.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 x8({child:new l0({padding:N0.symmetric(1,0),child:new Z1({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new S1({child:new _A({controller:this.scrollController,autofocus:!0,child:X})}),new D2({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 l0({padding:N0.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 r4({fit:"expand",children:[new m1({onClick:()=>{},child:new C0}),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 l0({decoration:{border:Y,color:Q.colors.background},padding:N0.all(1),child:new b0({mainAxisAlignment:"center",children:[Z,new C0({height:1}),F,D]})})})]})})}}N3();class U3A extends v0{props;constructor(A){super();this.props=A}createState(){return new K3A}}class K3A 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=b8.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} ${G4(J,"plugin")} active`,new y({bold:!0}))),Z>0||X>0)$.push(new M(` (${Z} ${G4(Z,"command")}, ${X} ${G4(X,"tool")})`,new y({dim:!0})));$.push(new M(`
|
|
6142
6142
|
|
|
6143
6143
|
`));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(`
|
|
6144
6144
|
`)),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(`
|
|
@@ -6316,7 +6316,7 @@ ${s.content||""}`:s.content||"",f0=[],Q1=s.baseDir.startsWith("file://")?eK0(s.b
|
|
|
6316
6316
|
`)}function o2A(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=J44({settings:{url:Y.ampURL,proxy:Z},secrets:{getToken:(D,G)=>Y.secrets.get(D,G)}}),F=await EA.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+`
|
|
6317
6317
|
`),process.exit(1)}process.stdout.write(await Q83(F.result.displayText)+`
|
|
6318
6318
|
`),process.exit(0)})}var CQ3=xe.join(mZ,"logs","headless.log"),qQ1=xe.join(Xf,"device-id.json"),MQ3=`cli-tui-${CBA(16).toString("hex")}`;async function LQ3(){for(let A of aM)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(() => C4(Gu(),1))}catch{}if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(A){TJ.write(`Failed to change directory to ${process.env.AMP_PWD}: ${A}
|
|
6319
|
-
`)}function OQ3(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 h2(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")wB("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli")wB("experimental.agentMode",Q.mode);if(A.getOptionValueSourceWithGlobals("model")==="cli"&&Q.model)wB("internal.model",PQ3(Q.model))}function HBA(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 jQ3(A){if(A===void 0)return;let Q=A.trim();if(l14(Q))return Q;throw new J4(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function RQ3(A,Q){if(pF(A,Q))return;let B=x$(A)?.levels,$=B?` Allowed for ${A}: ${B.join(", ")}.`:"";throw new J4(`Reasoning effort "${Q}" is not available for ${A} mode.${$}`,1)}function PQ3(A){if(!A.includes("="))return HBA(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);HBA(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 _Q3(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 TQ3(A){try{return await MBA(A,"utf-8")}catch{return A}}async function NQ1(A,Q,B){let $=_Q3(A,Q);if(!$)return;let J=OA(B)?B.features:[],Y=OA(B)?B.user.email:void 0;if(!Vu(J,l8.HARNESS_SYSTEM_PROMPT)&&!(Y&&_7(Y)))throw new J4("You are not allowed to do this.",1);wB("systemPrompt",await TQ3($))}function Vu(A,Q){return A?.some((B)=>B.name===Q&&B.enabled)??!1}function SQ3(A){return A!=="pending"}function XP(A){if(!OA(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function kQ3(A){let Q=XP(A);if(Q)return Q.id;if(gF(A))throw Error(A.error.message);throw Error("unreachable")}function vQ3(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 yQ3(A){let $=vQ3(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 fe(A,Q){let B=Ue0(Error(A.error.message));if(B.message===G7.networkOffline||B.message===G7.networkTimeout)return yQ3(Q);if(B.message!==G7.internalBug)return new J4(B.message,1,B.suggestion);return new J4(A.error.message.replace(/^Error: /,""),1)}var zBA=[{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??cX,description:`Custom settings file path (overrides the default location ${cX})`},{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 ${Yr})`},{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:Z9(),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:iM.SMART.key,description:`Set the agent mode (${v$({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:Array.from(new Set(v$().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}],qBA=(A)=>("deprecated"in A)&&A.deprecated===!0,xQ3=(A)=>("hidden"in A)&&A.hidden===!0,fQ3=(A)=>("default"in A),bQ3=(A)=>("default"in A)?A.default:void 0;function pE0(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let B=jQ3(Q.effort);if(B!==void 0)RQ3(Q.mode,B);return B}function uQ3(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(G7.unknownCommand(B),1,Z)}}async function lE0(A){return{...A,getThreadEnvironment:SW,getEnvironmentData:(Q,B)=>DD({filesystem:A.fileSystem},Q,B),osFileSystem:A.fileSystem,skillService:A.skillService,fileChangeTrackerStorage:new SL(A.fileSystem),generateThreadTitle:sF4,deleteThread:(Q)=>A.threadService.delete(Q),getServerStatus:()=>qQ(A.configService),pluginService:A.pluginService}}function LBA(A){return{toolService:A.toolService,configService:A.configService,skillService:A.skillService,getThreadEnvironment:SW,getEnvironmentData:(Q,B)=>DD({filesystem:A.fileSystem},Q,B),filesystem:A.fileSystem,threadService:A.threadService}}var dE0=Y1.file(wQ3.homedir()),IQ1=process.env.XDG_CONFIG_HOME?Y1.file(process.env.XDG_CONFIG_HOME):K1.joinPath(dE0,".config");function hQ3(A){return R_4({playNotificationSound:async(Q)=>{if(A.useNotificationsForService){if(oF0())rF0();else if(process.platform==="darwin"&&Q==="idle"&&A.isTUIVoiceNotifEnabled())j_4();else ea(Q);let B=QR(),$=Gs();if((!B||$||Gf())&&A.config.settings["notifications.system.enabled"]!==!1){if(Q==="idle")process.stdout.write(iD("\x1B]777;notify;Amp;Agent is ready\x1B\\"));else if(Q==="requires-user-input")process.stdout.write(iD("\x1B]777;notify;Amp;Waiting for approval\x1B\\"))}}},windowFocused:()=>Promise.resolve(QR()),threadService:A.threadService,configService:A.configService,threadViewStates$:A.threadViewStates$})}async function g8(A,Q,B){let $=B?.deferAuth??!1,J=B?.skipToolProviders??!1;f14("0.0.
|
|
6319
|
+
`)}function OQ3(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 h2(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")wB("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli")wB("experimental.agentMode",Q.mode);if(A.getOptionValueSourceWithGlobals("model")==="cli"&&Q.model)wB("internal.model",PQ3(Q.model))}function HBA(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 jQ3(A){if(A===void 0)return;let Q=A.trim();if(l14(Q))return Q;throw new J4(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function RQ3(A,Q){if(pF(A,Q))return;let B=x$(A)?.levels,$=B?` Allowed for ${A}: ${B.join(", ")}.`:"";throw new J4(`Reasoning effort "${Q}" is not available for ${A} mode.${$}`,1)}function PQ3(A){if(!A.includes("="))return HBA(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);HBA(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 _Q3(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 TQ3(A){try{return await MBA(A,"utf-8")}catch{return A}}async function NQ1(A,Q,B){let $=_Q3(A,Q);if(!$)return;let J=OA(B)?B.features:[],Y=OA(B)?B.user.email:void 0;if(!Vu(J,l8.HARNESS_SYSTEM_PROMPT)&&!(Y&&_7(Y)))throw new J4("You are not allowed to do this.",1);wB("systemPrompt",await TQ3($))}function Vu(A,Q){return A?.some((B)=>B.name===Q&&B.enabled)??!1}function SQ3(A){return A!=="pending"}function XP(A){if(!OA(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function kQ3(A){let Q=XP(A);if(Q)return Q.id;if(gF(A))throw Error(A.error.message);throw Error("unreachable")}function vQ3(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 yQ3(A){let $=vQ3(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 fe(A,Q){let B=Ue0(Error(A.error.message));if(B.message===G7.networkOffline||B.message===G7.networkTimeout)return yQ3(Q);if(B.message!==G7.internalBug)return new J4(B.message,1,B.suggestion);return new J4(A.error.message.replace(/^Error: /,""),1)}var zBA=[{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??cX,description:`Custom settings file path (overrides the default location ${cX})`},{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 ${Yr})`},{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:Z9(),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:iM.SMART.key,description:`Set the agent mode (${v$({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:Array.from(new Set(v$().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}],qBA=(A)=>("deprecated"in A)&&A.deprecated===!0,xQ3=(A)=>("hidden"in A)&&A.hidden===!0,fQ3=(A)=>("default"in A),bQ3=(A)=>("default"in A)?A.default:void 0;function pE0(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let B=jQ3(Q.effort);if(B!==void 0)RQ3(Q.mode,B);return B}function uQ3(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(G7.unknownCommand(B),1,Z)}}async function lE0(A){return{...A,getThreadEnvironment:SW,getEnvironmentData:(Q,B)=>DD({filesystem:A.fileSystem},Q,B),osFileSystem:A.fileSystem,skillService:A.skillService,fileChangeTrackerStorage:new SL(A.fileSystem),generateThreadTitle:sF4,deleteThread:(Q)=>A.threadService.delete(Q),getServerStatus:()=>qQ(A.configService),pluginService:A.pluginService}}function LBA(A){return{toolService:A.toolService,configService:A.configService,skillService:A.skillService,getThreadEnvironment:SW,getEnvironmentData:(Q,B)=>DD({filesystem:A.fileSystem},Q,B),filesystem:A.fileSystem,threadService:A.threadService}}var dE0=Y1.file(wQ3.homedir()),IQ1=process.env.XDG_CONFIG_HOME?Y1.file(process.env.XDG_CONFIG_HOME):K1.joinPath(dE0,".config");function hQ3(A){return R_4({playNotificationSound:async(Q)=>{if(A.useNotificationsForService){if(oF0())rF0();else if(process.platform==="darwin"&&Q==="idle"&&A.isTUIVoiceNotifEnabled())j_4();else ea(Q);let B=QR(),$=Gs();if((!B||$||Gf())&&A.config.settings["notifications.system.enabled"]!==!1){if(Q==="idle")process.stdout.write(iD("\x1B]777;notify;Amp;Agent is ready\x1B\\"));else if(Q==="requires-user-input")process.stdout.write(iD("\x1B]777;notify;Amp;Waiting for approval\x1B\\"))}}},windowFocused:()=>Promise.resolve(QR()),threadService:A.threadService,configService:A.configService,threadViewStates$:A.threadViewStates$})}async function g8(A,Q,B){let $=B?.deferAuth??!1,J=B?.skipToolProviders??!1;f14("0.0.1777926321-gea1d78");let Y=RS({storage:A.settings,secretStorage:A.secrets,workspaceRoot:m0.of(Y1.file(process.cwd())),defaultAmpURL:A.ampURL,homeDir:dE0,userConfigDir:IQ1});VAA(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{F5.write(`No API key found. Starting login flow...
|
|
6320
6320
|
`);let g=await gQ3(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 uW(),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(qQ(Y).pipe(K5(SQ3))),D=$?"pending":await F;if(!$)j.info("Server status resolved",{status:"ready",isAuthenticated:OA(D),isError:gF(D),errorMessage:gF(D)?D.error.message:void 0});let G=F.then((d)=>kQ3(d));G.catch(()=>{return});let U=!A.executeMode&&!Q.takeMeBack&&OA(D)&&Vu(D.features,l8.THREAD_ACTORS_TUI)?"all":process.env.PLUGINS??"permissions",{toolService:K,dispose:E}=cZ0({configService:Y}),W=new Map,H=()=>W.clear(),z=new Rb0(Y,A.settings.getWorkspaceRootPath()),q=OQ0({configService:Y,filesystem:R5}),N=CB4({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 W0=(async()=>{let i=new AL(A.secrets),$0=await i.getClientInfo(d,g),U0=n?.scopes??$0?.scopes,E0=Wp4();j.info("OAuth headless mode check",{useHeadless:E0,executeMode:A.executeMode,envVar:process.env.AMP_HEADLESS_OAUTH,isTTY:F5.isTTY});let e;if(E0)e=A.executeMode?Ep4():Kp4(d);let Y0=new uv0({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:U0,headlessAuthHandler:e});return j.debug("OAuth provider created",{serverName:d,serverUrl:g,hasManualClientId:!!(n?.clientId??$0?.clientId),willUseDCR:!(n?.clientId??$0?.clientId),scopes:U0,headlessMode:E0,executeMode:A.executeMode}),Y0})();return W.set(c,W0),W0}}),I=da({configService:Y,filesystem:R5,spawn:Qx}),w;if(J)w=new Map;else if(A.executeMode){let d=await sj4({toolService:K,providers:[N,I],initialTimeout:15000});w=d.registrations;for(let[g,n]of d.initErrors)j.warn(`${g} provider initialization slow or failed:`,n)}else w=ca({toolService:K,providers:[N,I]});if(Q.jetbrains)pM("JetBrains");else if(Q.ide&&tp4())pM("VS Code");else if(Q.ide&&ep4())pM("Neovim");else if(Q.ide){let d=await LQ3();if(d){let g=S80(d.ideName);if(g)pM(g)}}if(A.executeMode)b14(!0);let C,O=y3.status.pipe(L1((d)=>Boolean(d.connected&&d.authenticated&&d.ideName&&y44(d.ideName))),T4()).subscribe((d)=>{if(d){if(!C)C=K.registerTool(rj4)}else C?.dispose(),C=void 0}),_;if(!A.executeMode){let d=await A.settings.get("fuzzy.alwaysIncludePaths")??[];_=new Yf(process.cwd(),{alwaysIncludePaths:d},!0)}else _=new class extends Yf{async start(){}async query(){return[]}async queryCompletions(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};let S=new dg0(aL(Y,{usesThreadActors:!1}),{maxThreads:200});j.info("Starting Amp background services");let T=new V81,x=Q.headless?jl4():void 0,h=x??new qf({configService:Y}),f=h instanceof qf?h:void 0;if(f)f.pluginExecutorKind="local";let v=Tc({configService:Y,fileSystem:R5,platform:h,loadGlobalPlugins:Mr(Y),pluginFilter:U}),u=j70({pluginService:v,toolService:K}),m={configService:Y,toolService:K,mcpService:N,skillService:q,toolboxService:I,trustStore:z,threadService:S,secretStorage:A.secrets,settingsStorage:A.settings,fuzzyServer:_,fileSystem:R5,terminal:T,pluginService:v,pluginPlatform:f,headlessPluginPlatform:x,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 w.values())d.dispose();await m.mcpService.dispose(),H(),await m.threadService.asyncDispose(),m.configService.unsubscribe(),E(),m.fuzzyServer.dispose(),m.settingsStorage[Symbol.dispose](),O.unsubscribe(),C?.dispose(),u.dispose(),await m.pluginService.dispose()}}}async function gQ3(A){if(!A.executeMode){if(!await gD0("Would you like to log in to Amp? [(y)es, (n)o]: "))return F5.write(`Login cancelled. Run the command again to retry.
|
|
6321
6321
|
`),!1}return await OBA(A)}async function OBA(A){let Q=CBA(32).toString("hex"),B=await zf(A.ampURL,Q),$=new AbortController;try{await yF(B,$.signal)}catch(Y){j.error("Error opening browser",{error:Y})}let J=await zf(A.ampURL,Q,!1);F5.write(`If your browser does not open automatically, visit:
|
|
6322
6322
|
|
|
@@ -6324,7 +6324,7 @@ ${s0.blue.bold(J)}
|
|
|
6324
6324
|
|
|
6325
6325
|
`);try{return await Kl4(A.ampURL,Q,A.secrets,$),F5.write("\nLogin successful! Run `amp` to get started.\n"),!0}catch(Y){return j.error("Login failed",{error:Y}),TJ.write(`
|
|
6326
6326
|
Login failed: ${Y instanceof Error?Y.message:String(Y)}
|
|
6327
|
-
`),!1}}function mQ3(A){let Q=new lN().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((E)=>{if(E.code==="commander.help"||E.code==="commander.version"||E.exitCode===0)yj(),process.exit(0);let W=E.originalError??E;Zh4(W)}),Mi4(Q,{version:"0.0.
|
|
6327
|
+
`),!1}}function mQ3(A){let Q=new lN().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((E)=>{if(E.code==="commander.help"||E.code==="commander.version"||E.exitCode===0)yj(),process.exit(0);let W=E.originalError??E;Zh4(W)}),Mi4(Q,{version:"0.0.1777926321-gea1d78",buildTimestamp:"2026-05-04T20:29:05.940Z",buildType:"'release'"}),Q.addHelpText("after",op4()),Q.configureHelp({formatHelp:rp4}),Q.command("logout").description("Log out by removing stored API key").action(async(E,W)=>{let H=W.optsWithGlobals(),z=await $3(H);await rQ3(z)}),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(E,W)=>{let H=W.optsWithGlobals(),z=await $3(H);await oQ3(z,await Rr(H,z.settings))}),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(E,W,H)=>{let z=H.optsWithGlobals(),q=await $3(z);await Yp4(E??"get",q.ampURL,q.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(E,W)=>{let H=W.optsWithGlobals(),z=await $3(H);await Zp4(z.ampURL,z.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(E)=>{await Ec4({raw:E.raw===!0}),process.exit(process.exitCode??0)}),Q.command("cplog <threadIDOrURL>",{hidden:!0}).summary("Copy a thread-scoped log file to the clipboard").description("Internal: snapshot <cwd>/.amp/in/<threadID>.log (written by the CLI for thread-scoped logs) to a timestamped JSONL file in the OS temp directory and copy that file to the clipboard for Slack paste.").action(async(E)=>{await su4(E),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(`
|
|
6328
6328
|
`)).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(E,W,H)=>{if(E&&W.apply)throw new J4("Choose either a positional thread ID/URL or --apply <thread-id>, not both.",1);let z=W.apply??E;if(!z||z.trim().length===0)F5.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.
|
|
6329
6329
|
|
|
6330
6330
|
`),H.outputHelp(),process.exit(0);let q=k3(z)??gQ(z),N=H.optsWithGlobals(),I=await $3(N);h2(H,N);let w=await g8(I,N),C=!1;try{if(W.checkout&&W.skipCheckout)throw new J4("Choose either --checkout or --skip-checkout, not both.",1);if(gF(w.serverStatus))throw fe(w.serverStatus,I.ampURL);let O=OA(w.serverStatus)?w.serverStatus.features:void 0;if(!Vu(O,l8.V2))throw new J4("live-sync is not enabled for your user",1);await Bl4({ampURL:I.ampURL,threadId:q,configService:w.configService,threadService:w.threadService,apiKey:process.env.AMP_API_KEY,applyOnce:typeof W.apply==="string",checkoutMode:W.checkout?"always":W.skipCheckout?"never":"prompt",promptForYesNo:gD0}),C=!0}finally{if(await w.asyncDispose(),C)process.exit(0)}});let B=async(E,W,H)=>{RS({storage:W.settings,secretStorage:W.secrets,workspaceRoot:m0.of(Y1.file(process.cwd())),defaultAmpURL:W.ampURL,homeDir:dE0,userConfigDir:IQ1});let z={...W,executeMode:!1};await cE0(z,{...E,openThreadSwitcher:!0},H,A)},$=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(E,W)=>{let H=W.optsWithGlobals(),z=await $3(H);await wBA(H,z,W)});$.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(E,W)=>{let H=W.optsWithGlobals(),z=await $3(H);await XB3(H,z,W)}),$.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(E,W,H)=>{let z=H.optsWithGlobals(),q=await $3(z);if(W.pick)TJ.write(`${s0.yellow("Warning:")} The --pick flag is deprecated. The picker is now shown by default.
|
|
@@ -6357,8 +6357,8 @@ ${I}
|
|
|
6357
6357
|
`))}),W.args.length>0)uQ3(z,W);await cE0(z,H,W,A)}),Td4(Q),Q}async function Uu(A,Q){await aY((B)=>lD0(B,A,Q))}async function NBA(A,Q,B){let $=Date.now(),[J,Y]=await Promise.all([EA.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.
|
|
6358
6358
|
|
|
6359
6359
|
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 jBA(A){if(A.streamJsonInput)return{userInput:"",stdinInput:null};if(typeof A.execute==="string"){let Q=(await KU0()).trimEnd();return{userInput:A.execute,stdinInput:Q||null}}return{userInput:(await KU0()).trimEnd(),stdinInput:null}}function RBA(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"
|
|
6360
|
-
Or pipe via stdin: echo "your message" | amp --execute`)}function pQ3(A,Q){if(Z54([v30.parse({tool:"*",action:"allow"})]),s64({bypass:!0}),t4A(A.settings))j.debug("Enabling permissions plugin"),Q.registerInternalPlugin({name:"permissions",entryPoint:Z81})}async function cE0(A,Q,B,$){if(Q.headless)return dQ3(A,Q,B);let J=await g8(A,Q),Y=await J.serverStatusPromise,Z=await J.configService.getLatest(),X=OA(Y)&&Vu(Y.features,l8.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 pQ3(Z,J.pluginService),cQ3(A,Q,B,J);else{if(Q.threadId&&n9(Q.threadId)){let D=await EA.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 lQ3(A,Q,B,$,{dependencies:J})}}async function dQ3(A,Q,B){let $=(z,q)=>{let N=Number(process.hrtime.bigint()-q)/1e6,I=Ls0();j.info("Startup phase",{phase:z,phaseMs:Math.round(N),sinceMainMs:I===null?void 0:Math.round(I)})};h2(B,Q);let J=process.hrtime.bigint(),Y=await g8(A,Q);$("runMainThread:createThreadDependencies",J);let{serverStatus:Z}=Y;if(gF(Z))throw fe(Z,A.ampURL);let X=OA(Z)?Z:null,F=X?.user.email;await NQ1(B,Q,Z);let D=XP(Z),G=zs(Q,D);if(G instanceof Error)y5(G.message);if(X&&!OS(Q.mode,F))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!F||!_7(F)))throw new J4("Headless executor mode is only available for Amp employees",1);KF0();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&&!n9(K))throw new J4(`Invalid thread ID: ${K}`,1);let E=K?void 0:await YB3({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 Np4(W);if(H.status==="already-running")await Y.asyncDispose(),await uW(),process.exit(0);try{await Gp4({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 uW(),process.exit(0)}async function cQ3(A,Q,B,$){let{userInput:J,stdinInput:Y}=await jBA(Q),Z=!!Q.streamJson||!!Q.streamJsonThinking;RBA({...Q,streamJson:Z},A.executeMode,J),h2(B,Q);let X=Q.threadId&&n9(Q.threadId)?Q.threadId:void 0,F=Q.observe?k3(Q.observe)??gQ(Q.observe):void 0,D=await $.serverStatusPromise;if(gF(D))throw fe(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=OA(D)&&_7(D.user.email);if(V)KF0();if(A.executeMode){M11($.mcpService,A.settings);try{let U=pE0(B,Q),K=await LI(),E=X?U:mD0({agentMode:Q.mode,explicitEffort:U,sessionState:K}),W=X?void 0:pD0(await Nf($.configService),{agentMode:Q.mode,explicitEffort:U,sessionState:K}),H=await Pm4({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 Uu(H,"execute"),Q.archive)await $.threadService.archive(H,!0)}finally{await $.asyncDispose()}await uW(),process.exit(0)}else{let U=pE0(B,Q),K=aL($.configService,{usesThreadActors:!0}),E=new mR($.fuzzyServer),W=process.cwd();await Y81({ampURL:A.ampURL,apiKey:G,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??DJ(A.ampURL),configService:$.configService,toolService:$.toolService,pluginPlatform:$.pluginPlatform,pluginService:$.pluginService,skillService:$.skillService,mcpService:$.mcpService,readFileSystemDirectory:({uri:H})=>XI({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 lQ3(A,Q,B,$,J){let Y=process.hrtime.bigint(),Z=(E0,e)=>{let Y0=Number(process.hrtime.bigint()-e)/1e6,a=Ls0();j.info("Startup phase",{phase:E0,phaseMs:Math.round(Y0),sinceMainMs:a===null?void 0:Math.round(a)})},{userInput:X,stdinInput:F}=await jBA(Q),D=!!Q.streamJson||!!Q.streamJsonThinking;RBA({...Q,streamJson:D},A.executeMode,X),h2(B,Q);let G=process.hrtime.bigint(),V=J?.dependencies??await g8(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&&gF(E))throw fe(E,A.ampURL);let W=OA(E)?E:null,H=W?.user.email,z=!!(H&&_7(H));if(z)KF0();if(!K)await NQ1(B,Q,E);let q=XP(E),N=q?.features??[],I=q?.team??null,w=zs(Q,q);if(w instanceof Error)y5(w.message);if(W&&!OS(Q.mode,H))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);let C=Q.threadId&&n9(Q.threadId)?Q.threadId:void 0;G=process.hrtime.bigint();let O=await lE0(V);Z("runMainThread:createWorkerDeps",G);let _=A.executeMode?void 0:async(E0)=>Uu(E0,"interactive"),S={threadService:V.threadService,workerDeps:O,createThread:async(E0)=>{let e=K?await V.serverStatusPromise:E,Y0=await EF0(A.settings,process.cwd(),XP(e),w);if(Y0 instanceof Error)y5(Y0.message);return l91(O,{threadMeta:Y0?sY(Y0):void 0,agentMode:E0??Q.mode,onFirstAssistantMessage:_})},validateThreadOwnership:async(E0,e)=>{if(e?.nonBlockingOwnershipCheck){NBA(E0,V.configService,V.viewerUserIDPromise).catch((Y0)=>{if(Y0 instanceof J4){if(e.onOwnershipError){e.onOwnershipError(Y0,E0);return}hW(Y0,E0);return}j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Y0})});return}try{await NBA(E0,V.configService,V.viewerUserIDPromise)}catch(Y0){if(Y0 instanceof J4)throw Y0;j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Y0})}},switchThreadVisibility:w,switchThreadAgentMode:Q.mode,onFirstAssistantMessage:_,handleError:hW},T=async()=>{try{return l2A(S,Q.threadId,{nonBlockingOwnershipCheck:Q.nonBlockingThreadOwnershipCheck})}catch(E0){if(E0 instanceof J4)throw E0;throw await hW(E0,Q.threadId),Error("handleError should have called process.exit()")}},x=(async()=>{if(K){j.info("Skipping initial free tier status fetch until auth is complete");return}try{let E0=await V.configService.getLatest(),e=Hp(E0),Y0=await EA.getUserFreeTierStatus({},{config:V.configService,signal:AbortSignal.timeout(e)});if(Y0.ok)return j.info("User free tier status:",Y0),Y0.result;return}catch(E0){j.error("Failed to fetch free tier status:",E0);return}})(),f=!A.executeMode?new W81:null,v,u=null;if(f)v=f,u=(async()=>{let E0=K?await V.serverStatusPromise:V.serverStatus;if(gF(E0))throw fe(E0,A.ampURL);await NQ1(B,Q,E0);let e=process.hrtime.bigint(),Y0=await T();if(Z("runMainThread:createThreadPool",e),f.attach(Y0),X){let a=await y1(Y0.threadHandles$);if(!a)throw new J4("No active thread is available yet.",1);await a.sendMessage({content:[{type:"text",text:X}]})}})(),u.catch(async(E0)=>{let e=E0 instanceof Error?E0:Error(String(E0));f.setInitError(e),await hW(E0,Q.threadId)});else G=process.hrtime.bigint(),v=await T(),Z("runMainThread:createThreadPool",G);let m=Q.notifications!==void 0?Q.notifications:!A.executeMode,d=W!==null&&Vu(W.features,l8.TUI_VOICE_NOTIF);if(K)V.serverStatusPromise.then((E0)=>{d=OA(E0)&&Vu(E0.features,l8.TUI_VOICE_NOTIF)}).catch((E0)=>{j.debug("Failed to resolve TUI voice notification feature flag",{error:E0})});G=process.hrtime.bigint();let g=await V.configService.getLatest();if(Z("runMainThread:configService.getLatest",G),G=process.hrtime.bigint(),hQ3({configService:V.configService,threadService:V.threadService,config:g,useNotificationsForService:m,isTUIVoiceNotifEnabled:()=>d,threadViewStates$:()=>v.threadHandles$.pipe(b4((E0)=>{if(!E0)return m0.of({});return P6(E0.thread$,E0.threadViewState$).pipe(L1(([e,Y0])=>({[e.id]:Y0})))}))}),Z("runMainThread:createCliNotificationService",G),A.executeMode){M11(V.mcpService,A.settings);let E0=pE0(B,Q),e=await LI(),Y0=C?E0:mD0({agentMode:Q.mode,explicitEffort:E0,sessionState:e}),a={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:Y0,labels:Q.label},r=await Rh4({threadPool:v,...a});if(await Uu(r,"execute"),Q.archive)await V.threadService.archive(r,!0);await V.asyncDispose(),process.exit(0)}let n=!1,c=!1;if(Q.jetbrains||Q.ide){await k80();let E0=await lF({jetbrainsOnly:Q.jetbrains});if(E0.length===0){if(Q.jetbrains)n=!await V.configService.get("jetbrains.skipInstall")}else if(E0.length===1){let e=E0[0];if(e)y3.selectConfig(e)}else c=!0}G=process.hrtime.bigint();let Q0=d01("0.0.1777921804-gae5962",V.settingsStorage,{startDelayMs:3000});Z("runMainThread:createUpdateService",G),G=process.hrtime.bigint();let W0=new L11(V.mcpService,A.settings.getWorkspaceRootPath());if(Z("runMainThread:createMcpTrustHandler",G),X&&A.executeMode){let E0=await y1(v.threadHandles$);if(!E0)throw new J4("No active thread is available yet.",1);await E0.sendMessage({content:[{type:"text",text:X}]})}G=process.hrtime.bigint();let i=await LI();Z("runMainThread:loadSessionState",G),j.info("Loaded session state:",i);let $0=pE0(B,Q),U0={...i,launchCount:i.launchCount+1,lastReasoningEffortByMode:$0?{...i.lastReasoningEffortByMode,[Q.mode]:$0}:i.lastReasoningEffortByMode};aY((E0)=>({...E0,launchCount:E0.launchCount+1}));try{if(G=process.hrtime.bigint(),await J6A({history:new zr,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,skillService:V.skillService,configService:V.configService,secretStorage:V.secretStorage,internalAPIClient:EA,threadPool:v,createSystemPromptDeps:async()=>LBA(V),ideClient:y3,mcpService:V.mcpService,toolboxService:V.toolboxService,mcpTrustHandler:W0,updateService:Q0,pluginPlatform:V.pluginPlatform,pluginService:V.pluginService},{initialServerStatus:V.serverStatus,stdout:process.stdout,hasAPIKeyAtStartup:V.hasAPIKeyAtStartup,ampURL:A.ampURL,startupThreadID:C,showJetBrainsInstaller:n,showIdePickerHint:c,openThreadSwitcher:Q.openThreadSwitcher,jetbrainsMode:Q.jetbrains,clientId:MQ3,logFile:{path:$},sessionState:U0,freeTierStatusPromise:x,workspace:I??null,features:N,isInternalUser:z,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,splashOrbVisualStyle:Q.neoOrb?"neo":"classic",buildTimestamp:"2026-05-04T19:13:44.426Z"},(E0)=>new C81({...E0,threadPool:E0.threadPool},(e)=>new d91({...e,threadState:e.threadState}))),Z("runMainThread:mountApp-returned",G),u)await u}finally{await v.dispose().catch((E0)=>{j.error("Failed to dispose thread pool during shutdown",E0)})}await V.asyncDispose(),Z("runMainThread:dependencies.asyncDispose",Y),process.exit(0)}async function $3(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)TJ.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
6361
|
-
`);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 RB4({get:async(X)=>{if(X!==Nc)return;try{let F=await MBA(qQ1,"utf-8");return JSON.parse(F).installationID}catch{return}},set:async(X,F)=>{if(X!==Nc)return;await NQ3(xe.dirname(qQ1),{recursive:!0}),await IQ3(qQ1,JSON.stringify({installationID:F},null,2),{mode:384})}},{clientType:"cli",platform:B70()});u14($);let J=await QD0({...A,workspaceTrust:{current:!0,changes:fS0},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 Ml4(A.mcpConfig);J=Ll4(J,X)}let Y=xe.dirname(J.getSettingsFilePath());O_4(Xf,Y),J=He1(J);let Z=await J.get("url","admin")??await J.get("url","global");if(!Z)Z=U9;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:cD0(await Rr(A,J))}}function iQ3(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 nQ3(A,Q){let B=A.includes("--headless")||A.some((J)=>J.startsWith("--headless=")),$=xe.resolve(Q.logFile??process.env.AMP_LOG_FILE??(B?CQ3:Yr));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:$}}async function aQ3(){by4();let A=iQ3(process.argv),Q=nQ3(process.argv,A),B=lu4(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(OQ3(j),j.info("Starting Amp CLI.",{version:"0.0.
|
|
6360
|
+
Or pipe via stdin: echo "your message" | amp --execute`)}function pQ3(A,Q){if(Z54([v30.parse({tool:"*",action:"allow"})]),s64({bypass:!0}),t4A(A.settings))j.debug("Enabling permissions plugin"),Q.registerInternalPlugin({name:"permissions",entryPoint:Z81})}async function cE0(A,Q,B,$){if(Q.headless)return dQ3(A,Q,B);let J=await g8(A,Q),Y=await J.serverStatusPromise,Z=await J.configService.getLatest(),X=OA(Y)&&Vu(Y.features,l8.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 pQ3(Z,J.pluginService),cQ3(A,Q,B,J);else{if(Q.threadId&&n9(Q.threadId)){let D=await EA.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 lQ3(A,Q,B,$,{dependencies:J})}}async function dQ3(A,Q,B){let $=(z,q)=>{let N=Number(process.hrtime.bigint()-q)/1e6,I=Ls0();j.info("Startup phase",{phase:z,phaseMs:Math.round(N),sinceMainMs:I===null?void 0:Math.round(I)})};h2(B,Q);let J=process.hrtime.bigint(),Y=await g8(A,Q);$("runMainThread:createThreadDependencies",J);let{serverStatus:Z}=Y;if(gF(Z))throw fe(Z,A.ampURL);let X=OA(Z)?Z:null,F=X?.user.email;await NQ1(B,Q,Z);let D=XP(Z),G=zs(Q,D);if(G instanceof Error)y5(G.message);if(X&&!OS(Q.mode,F))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!F||!_7(F)))throw new J4("Headless executor mode is only available for Amp employees",1);KF0();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&&!n9(K))throw new J4(`Invalid thread ID: ${K}`,1);let E=K?void 0:await YB3({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 Np4(W);if(H.status==="already-running")await Y.asyncDispose(),await uW(),process.exit(0);try{await Gp4({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 uW(),process.exit(0)}async function cQ3(A,Q,B,$){let{userInput:J,stdinInput:Y}=await jBA(Q),Z=!!Q.streamJson||!!Q.streamJsonThinking;RBA({...Q,streamJson:Z},A.executeMode,J),h2(B,Q);let X=Q.threadId&&n9(Q.threadId)?Q.threadId:void 0,F=Q.observe?k3(Q.observe)??gQ(Q.observe):void 0,D=await $.serverStatusPromise;if(gF(D))throw fe(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=OA(D)&&_7(D.user.email);if(V)KF0();if(A.executeMode){M11($.mcpService,A.settings);try{let U=pE0(B,Q),K=await LI(),E=X?U:mD0({agentMode:Q.mode,explicitEffort:U,sessionState:K}),W=X?void 0:pD0(await Nf($.configService),{agentMode:Q.mode,explicitEffort:U,sessionState:K}),H=await Pm4({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 Uu(H,"execute"),Q.archive)await $.threadService.archive(H,!0)}finally{await $.asyncDispose()}await uW(),process.exit(0)}else{let U=pE0(B,Q),K=aL($.configService,{usesThreadActors:!0}),E=new mR($.fuzzyServer),W=process.cwd();await Y81({ampURL:A.ampURL,apiKey:G,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??DJ(A.ampURL),configService:$.configService,toolService:$.toolService,pluginPlatform:$.pluginPlatform,pluginService:$.pluginService,skillService:$.skillService,mcpService:$.mcpService,readFileSystemDirectory:({uri:H})=>XI({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 lQ3(A,Q,B,$,J){let Y=process.hrtime.bigint(),Z=(E0,e)=>{let Y0=Number(process.hrtime.bigint()-e)/1e6,a=Ls0();j.info("Startup phase",{phase:E0,phaseMs:Math.round(Y0),sinceMainMs:a===null?void 0:Math.round(a)})},{userInput:X,stdinInput:F}=await jBA(Q),D=!!Q.streamJson||!!Q.streamJsonThinking;RBA({...Q,streamJson:D},A.executeMode,X),h2(B,Q);let G=process.hrtime.bigint(),V=J?.dependencies??await g8(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&&gF(E))throw fe(E,A.ampURL);let W=OA(E)?E:null,H=W?.user.email,z=!!(H&&_7(H));if(z)KF0();if(!K)await NQ1(B,Q,E);let q=XP(E),N=q?.features??[],I=q?.team??null,w=zs(Q,q);if(w instanceof Error)y5(w.message);if(W&&!OS(Q.mode,H))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);let C=Q.threadId&&n9(Q.threadId)?Q.threadId:void 0;G=process.hrtime.bigint();let O=await lE0(V);Z("runMainThread:createWorkerDeps",G);let _=A.executeMode?void 0:async(E0)=>Uu(E0,"interactive"),S={threadService:V.threadService,workerDeps:O,createThread:async(E0)=>{let e=K?await V.serverStatusPromise:E,Y0=await EF0(A.settings,process.cwd(),XP(e),w);if(Y0 instanceof Error)y5(Y0.message);return l91(O,{threadMeta:Y0?sY(Y0):void 0,agentMode:E0??Q.mode,onFirstAssistantMessage:_})},validateThreadOwnership:async(E0,e)=>{if(e?.nonBlockingOwnershipCheck){NBA(E0,V.configService,V.viewerUserIDPromise).catch((Y0)=>{if(Y0 instanceof J4){if(e.onOwnershipError){e.onOwnershipError(Y0,E0);return}hW(Y0,E0);return}j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Y0})});return}try{await NBA(E0,V.configService,V.viewerUserIDPromise)}catch(Y0){if(Y0 instanceof J4)throw Y0;j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Y0})}},switchThreadVisibility:w,switchThreadAgentMode:Q.mode,onFirstAssistantMessage:_,handleError:hW},T=async()=>{try{return l2A(S,Q.threadId,{nonBlockingOwnershipCheck:Q.nonBlockingThreadOwnershipCheck})}catch(E0){if(E0 instanceof J4)throw E0;throw await hW(E0,Q.threadId),Error("handleError should have called process.exit()")}},x=(async()=>{if(K){j.info("Skipping initial free tier status fetch until auth is complete");return}try{let E0=await V.configService.getLatest(),e=Hp(E0),Y0=await EA.getUserFreeTierStatus({},{config:V.configService,signal:AbortSignal.timeout(e)});if(Y0.ok)return j.info("User free tier status:",Y0),Y0.result;return}catch(E0){j.error("Failed to fetch free tier status:",E0);return}})(),f=!A.executeMode?new W81:null,v,u=null;if(f)v=f,u=(async()=>{let E0=K?await V.serverStatusPromise:V.serverStatus;if(gF(E0))throw fe(E0,A.ampURL);await NQ1(B,Q,E0);let e=process.hrtime.bigint(),Y0=await T();if(Z("runMainThread:createThreadPool",e),f.attach(Y0),X){let a=await y1(Y0.threadHandles$);if(!a)throw new J4("No active thread is available yet.",1);await a.sendMessage({content:[{type:"text",text:X}]})}})(),u.catch(async(E0)=>{let e=E0 instanceof Error?E0:Error(String(E0));f.setInitError(e),await hW(E0,Q.threadId)});else G=process.hrtime.bigint(),v=await T(),Z("runMainThread:createThreadPool",G);let m=Q.notifications!==void 0?Q.notifications:!A.executeMode,d=W!==null&&Vu(W.features,l8.TUI_VOICE_NOTIF);if(K)V.serverStatusPromise.then((E0)=>{d=OA(E0)&&Vu(E0.features,l8.TUI_VOICE_NOTIF)}).catch((E0)=>{j.debug("Failed to resolve TUI voice notification feature flag",{error:E0})});G=process.hrtime.bigint();let g=await V.configService.getLatest();if(Z("runMainThread:configService.getLatest",G),G=process.hrtime.bigint(),hQ3({configService:V.configService,threadService:V.threadService,config:g,useNotificationsForService:m,isTUIVoiceNotifEnabled:()=>d,threadViewStates$:()=>v.threadHandles$.pipe(b4((E0)=>{if(!E0)return m0.of({});return P6(E0.thread$,E0.threadViewState$).pipe(L1(([e,Y0])=>({[e.id]:Y0})))}))}),Z("runMainThread:createCliNotificationService",G),A.executeMode){M11(V.mcpService,A.settings);let E0=pE0(B,Q),e=await LI(),Y0=C?E0:mD0({agentMode:Q.mode,explicitEffort:E0,sessionState:e}),a={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:Y0,labels:Q.label},r=await Rh4({threadPool:v,...a});if(await Uu(r,"execute"),Q.archive)await V.threadService.archive(r,!0);await V.asyncDispose(),process.exit(0)}let n=!1,c=!1;if(Q.jetbrains||Q.ide){await k80();let E0=await lF({jetbrainsOnly:Q.jetbrains});if(E0.length===0){if(Q.jetbrains)n=!await V.configService.get("jetbrains.skipInstall")}else if(E0.length===1){let e=E0[0];if(e)y3.selectConfig(e)}else c=!0}G=process.hrtime.bigint();let Q0=d01("0.0.1777926321-gea1d78",V.settingsStorage,{startDelayMs:3000});Z("runMainThread:createUpdateService",G),G=process.hrtime.bigint();let W0=new L11(V.mcpService,A.settings.getWorkspaceRootPath());if(Z("runMainThread:createMcpTrustHandler",G),X&&A.executeMode){let E0=await y1(v.threadHandles$);if(!E0)throw new J4("No active thread is available yet.",1);await E0.sendMessage({content:[{type:"text",text:X}]})}G=process.hrtime.bigint();let i=await LI();Z("runMainThread:loadSessionState",G),j.info("Loaded session state:",i);let $0=pE0(B,Q),U0={...i,launchCount:i.launchCount+1,lastReasoningEffortByMode:$0?{...i.lastReasoningEffortByMode,[Q.mode]:$0}:i.lastReasoningEffortByMode};aY((E0)=>({...E0,launchCount:E0.launchCount+1}));try{if(G=process.hrtime.bigint(),await J6A({history:new zr,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,skillService:V.skillService,configService:V.configService,secretStorage:V.secretStorage,internalAPIClient:EA,threadPool:v,createSystemPromptDeps:async()=>LBA(V),ideClient:y3,mcpService:V.mcpService,toolboxService:V.toolboxService,mcpTrustHandler:W0,updateService:Q0,pluginPlatform:V.pluginPlatform,pluginService:V.pluginService},{initialServerStatus:V.serverStatus,stdout:process.stdout,hasAPIKeyAtStartup:V.hasAPIKeyAtStartup,ampURL:A.ampURL,startupThreadID:C,showJetBrainsInstaller:n,showIdePickerHint:c,openThreadSwitcher:Q.openThreadSwitcher,jetbrainsMode:Q.jetbrains,clientId:MQ3,logFile:{path:$},sessionState:U0,freeTierStatusPromise:x,workspace:I??null,features:N,isInternalUser:z,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,splashOrbVisualStyle:Q.neoOrb?"neo":"classic",buildTimestamp:"2026-05-04T20:29:05.940Z"},(E0)=>new C81({...E0,threadPool:E0.threadPool},(e)=>new d91({...e,threadState:e.threadState}))),Z("runMainThread:mountApp-returned",G),u)await u}finally{await v.dispose().catch((E0)=>{j.error("Failed to dispose thread pool during shutdown",E0)})}await V.asyncDispose(),Z("runMainThread:dependencies.asyncDispose",Y),process.exit(0)}async function $3(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)TJ.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
6361
|
+
`);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 RB4({get:async(X)=>{if(X!==Nc)return;try{let F=await MBA(qQ1,"utf-8");return JSON.parse(F).installationID}catch{return}},set:async(X,F)=>{if(X!==Nc)return;await NQ3(xe.dirname(qQ1),{recursive:!0}),await IQ3(qQ1,JSON.stringify({installationID:F},null,2),{mode:384})}},{clientType:"cli",platform:B70()});u14($);let J=await QD0({...A,workspaceTrust:{current:!0,changes:fS0},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 Ml4(A.mcpConfig);J=Ll4(J,X)}let Y=xe.dirname(J.getSettingsFilePath());O_4(Xf,Y),J=He1(J);let Z=await J.get("url","admin")??await J.get("url","global");if(!Z)Z=U9;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:cD0(await Rr(A,J))}}function iQ3(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 nQ3(A,Q){let B=A.includes("--headless")||A.some((J)=>J.startsWith("--headless=")),$=xe.resolve(Q.logFile??process.env.AMP_LOG_FILE??(B?CQ3:Yr));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:$}}async function aQ3(){by4();let A=iQ3(process.argv),Q=nQ3(process.argv,A),B=lu4(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(OQ3(j),j.info("Starting Amp CLI.",{version:"0.0.1777926321-gea1d78",buildTimestamp:"2026-05-04T20:29:05.940Z"}),process.platform==="win32"&&dj())zd4();if(parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new J4(G7.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await mQ3(B).parseAsync(process.argv)}M_4().startActiveSpan("main",async(A)=>{process.on("exit",()=>A.end()),await aQ3().catch(hW)});async function oQ3(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"),F5.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
|
|
6362
6362
|
`);else if(!gz(A.ampURL))F5.write(`Logging in to ${new URL(A.ampURL).hostname}
|
|
6363
6363
|
`);let $=process.env.AMP_API_KEY;if($)F5.write(`API key found in environment variable, storing...
|
|
6364
6364
|
`),await Q.set("apiKey",$,A.ampURL),F5.write(`API key successfully stored.
|