@sourcegraph/amp 0.0.1778228828-g14902a → 0.0.1778235017-g38b248
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +12 -12
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -5288,12 +5288,12 @@ ${E}`))}},error:(K)=>{if(!U)U=!0,X(Error(`Failed to spawn brew: ${K.message}`))}
|
|
|
5288
5288
|
${E}`;if(Y==="pnpm"&&E.includes("Unable to find the global bin directory"))z+=`
|
|
5289
5289
|
|
|
5290
5290
|
Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
|
|
5291
|
-
npm install -g @sourcegraph/amp`;X(Error(z))}},error:(K)=>{if(!V)V=!0,X(Error(`Failed to spawn ${Y}: ${K.message}`))},complete:()=>{if(!V)V=!0,F()}})})}d0();d0();JI();async function uF0(A,Q){let J=`${Q||"https://registry.npmjs.org"}/@sourcegraph/amp/latest`,Y=new AbortController,Z=setTimeout(()=>Y.abort(),5000);try{let F=await fetch(J,{signal:Y.signal});if(!F.ok)return{hasUpdate:!1,currentVersion:A,source:"npm"};let X=await F.json(),D=X.version??X["dist-tags"]?.latest;if(!D)return{hasUpdate:!1,currentVersion:A,source:"npm"};let G=Do(A,D),V=G<0,U,K;if(X.time){let E=X.time[A],z=X.time[D],W=Date.now();if(E)U=Math.floor((W-new Date(E).getTime())/3600000);if(z)K=Math.floor((W-new Date(z).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(F){return j.debug("Error checking npm version",{error:F}),{hasUpdate:!1,currentVersion:A,source:"npm"}}finally{clearTimeout(Z)}}var EW5="https://static.ampcode.com/cli/cli-version.txt";async function hF0(A){let Q=new AbortController,B=setTimeout(()=>Q.abort(),5000);try{let $=await fetch(`${EW5}?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=Do(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 zW5=604800000;function Zf4(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>zW5)return{ageMs:B};return null}function Do(A,Q){let B=(Z)=>{let[F,X]=Z.split("-");return{parts:F?.split(".").map(Number)||[],label:X}},$=B(A),J=B(Q),Y=Math.max($.parts.length,J.parts.length);for(let Z=0;Z<Y;Z++){let F=$.parts[Z]||0,X=J.parts[Z]||0;if(F<X)return-1;if(F>X)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 es0(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?mV(B):void 0;return{sha:$,age:J}}catch{return null}}C1();d0();import{readFile as WW5,realpath as HW5}from"node:fs/promises";import{homedir as qW5}from"node:os";import{dirname as Ff4,join as At0}from"node:path";async function Xf4(A){switch(A){case"binary":case"brew":return IW5(Yo());case"npm":case"pnpm":case"yarn":case"bun":return NW5();case"bootstrap":return wW5()}}async function IW5(A){let Q=await jD(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 NW5(){try{let A=process.argv[1];if(!A)return null;let Q=await HW5(A),B=Ff4(Ff4(Q));return await Df4(At0(B,"package.json"))}catch(A){return j.debug("failed to read installed version from package.json",{error:A}),null}}async function wW5(){try{let A=process.env.AMP_HOME??At0(qW5(),".amp");return await Df4(At0(A,"package","package.json"))}catch(A){return j.debug("failed to read installed version from bootstrap package.json",{error:A}),null}}async function Df4(A){let Q=await WW5(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 CW5=3600000,MW5=5000;function Qt0(A,Q,B={}){let $=new h4,J=$.pipe(lA({shouldCountRefs:!1})),Y=B.startDelayMs??0,Z=B.checkIntervalMs??CW5,F=!1,X=()=>{F=!0};return setImmediate(async()=>{let D=j.getChild("update");if(Y>0){if(await lV(Y),F)return}let G=J.subscribe({next:(U)=>{D.debug("emit new state",U)}}),V=A;try{while(!F){let U=await LW5(V,Q,D,$);if(U.stop)return;if(U.updatedTo)V=U.updatedTo;if(U.emittedVisibleState){if(await lV(MW5),F)return;$.next("hidden")}if(Z<=0)return;let K=1000,E=Z;while(E>0&&!F){let z=Math.min(K,E);await lV(z),E-=z}}}finally{G.unsubscribe(),$.complete()}}),{state:J,dispose:X}}async function LW5(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 oI(),F=Z==="binary"||Z==="brew";B.debug("checking",{currentVersion:A,mode:Y,packageManager:Z,isBinaryDistribution:F});let X;if(F)X=await hF0(A);else{let V=await Vj();X=await uF0(A,V)}if(!(X.latestVersion&&X.hasUpdate))return B.debug("no update available"),J;let D=(V)=>{$.next(V),J.emittedVisibleState=!0};if(Z){let V=await Xf4(Z);if(V&&Do(V,X.latestVersion)>=0){if(B.debug("on-disk version already up to date",{currentVersion:A,installedVersion:V,latestVersion:X.latestVersion}),J.updatedTo=V,Do(A,V)<0){let U=await Cz(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(X.currentVersionAge!==void 0&&X.latestVersionAge!==void 0){let V=X.currentVersionAge-X.latestVersionAge,U=0.5;if(Math.abs(V)<0.5)return B.debug("versions too close together, suppressing update warning",{currentVersionAge:X.currentVersionAge,latestVersionAge:X.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!==Yo()){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 Xo(X.latestVersion,Z),J.updatedTo=X.latestVersion;let V=await Cz(X.latestVersion),U={from:X.currentVersion,to:X.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}}JI();import{stderr as RD}from"node:process";function Gf4(A){let Q=new kI().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 ms0($.force||!1,$.verbose||!1,"0.0.
|
|
5291
|
+
npm install -g @sourcegraph/amp`;X(Error(z))}},error:(K)=>{if(!V)V=!0,X(Error(`Failed to spawn ${Y}: ${K.message}`))},complete:()=>{if(!V)V=!0,F()}})})}d0();d0();JI();async function uF0(A,Q){let J=`${Q||"https://registry.npmjs.org"}/@sourcegraph/amp/latest`,Y=new AbortController,Z=setTimeout(()=>Y.abort(),5000);try{let F=await fetch(J,{signal:Y.signal});if(!F.ok)return{hasUpdate:!1,currentVersion:A,source:"npm"};let X=await F.json(),D=X.version??X["dist-tags"]?.latest;if(!D)return{hasUpdate:!1,currentVersion:A,source:"npm"};let G=Do(A,D),V=G<0,U,K;if(X.time){let E=X.time[A],z=X.time[D],W=Date.now();if(E)U=Math.floor((W-new Date(E).getTime())/3600000);if(z)K=Math.floor((W-new Date(z).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(F){return j.debug("Error checking npm version",{error:F}),{hasUpdate:!1,currentVersion:A,source:"npm"}}finally{clearTimeout(Z)}}var EW5="https://static.ampcode.com/cli/cli-version.txt";async function hF0(A){let Q=new AbortController,B=setTimeout(()=>Q.abort(),5000);try{let $=await fetch(`${EW5}?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=Do(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 zW5=604800000;function Zf4(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>zW5)return{ageMs:B};return null}function Do(A,Q){let B=(Z)=>{let[F,X]=Z.split("-");return{parts:F?.split(".").map(Number)||[],label:X}},$=B(A),J=B(Q),Y=Math.max($.parts.length,J.parts.length);for(let Z=0;Z<Y;Z++){let F=$.parts[Z]||0,X=J.parts[Z]||0;if(F<X)return-1;if(F>X)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 es0(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?mV(B):void 0;return{sha:$,age:J}}catch{return null}}C1();d0();import{readFile as WW5,realpath as HW5}from"node:fs/promises";import{homedir as qW5}from"node:os";import{dirname as Ff4,join as At0}from"node:path";async function Xf4(A){switch(A){case"binary":case"brew":return IW5(Yo());case"npm":case"pnpm":case"yarn":case"bun":return NW5();case"bootstrap":return wW5()}}async function IW5(A){let Q=await jD(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 NW5(){try{let A=process.argv[1];if(!A)return null;let Q=await HW5(A),B=Ff4(Ff4(Q));return await Df4(At0(B,"package.json"))}catch(A){return j.debug("failed to read installed version from package.json",{error:A}),null}}async function wW5(){try{let A=process.env.AMP_HOME??At0(qW5(),".amp");return await Df4(At0(A,"package","package.json"))}catch(A){return j.debug("failed to read installed version from bootstrap package.json",{error:A}),null}}async function Df4(A){let Q=await WW5(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 CW5=3600000,MW5=5000;function Qt0(A,Q,B={}){let $=new h4,J=$.pipe(lA({shouldCountRefs:!1})),Y=B.startDelayMs??0,Z=B.checkIntervalMs??CW5,F=!1,X=()=>{F=!0};return setImmediate(async()=>{let D=j.getChild("update");if(Y>0){if(await lV(Y),F)return}let G=J.subscribe({next:(U)=>{D.debug("emit new state",U)}}),V=A;try{while(!F){let U=await LW5(V,Q,D,$);if(U.stop)return;if(U.updatedTo)V=U.updatedTo;if(U.emittedVisibleState){if(await lV(MW5),F)return;$.next("hidden")}if(Z<=0)return;let K=1000,E=Z;while(E>0&&!F){let z=Math.min(K,E);await lV(z),E-=z}}}finally{G.unsubscribe(),$.complete()}}),{state:J,dispose:X}}async function LW5(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 oI(),F=Z==="binary"||Z==="brew";B.debug("checking",{currentVersion:A,mode:Y,packageManager:Z,isBinaryDistribution:F});let X;if(F)X=await hF0(A);else{let V=await Vj();X=await uF0(A,V)}if(!(X.latestVersion&&X.hasUpdate))return B.debug("no update available"),J;let D=(V)=>{$.next(V),J.emittedVisibleState=!0};if(Z){let V=await Xf4(Z);if(V&&Do(V,X.latestVersion)>=0){if(B.debug("on-disk version already up to date",{currentVersion:A,installedVersion:V,latestVersion:X.latestVersion}),J.updatedTo=V,Do(A,V)<0){let U=await Cz(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(X.currentVersionAge!==void 0&&X.latestVersionAge!==void 0){let V=X.currentVersionAge-X.latestVersionAge,U=0.5;if(Math.abs(V)<0.5)return B.debug("versions too close together, suppressing update warning",{currentVersionAge:X.currentVersionAge,latestVersionAge:X.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!==Yo()){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 Xo(X.latestVersion,Z),J.updatedTo=X.latestVersion;let V=await Cz(X.latestVersion),U={from:X.currentVersion,to:X.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}}JI();import{stderr as RD}from"node:process";function Gf4(A){let Q=new kI().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 ms0($.force||!1,$.verbose||!1,"0.0.1778235017-g38b248"),process.exit()});A.addCommand(Q,{hidden:!0});let B=new kI("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 jW5($.targetVersion)});A.addCommand(B)}function OW5(A){let Q=Boolean(A.isTTY),B=0,$=!1;function J(){if(!Q||!$)return;A.write(`
|
|
5292
5292
|
`),$=!1,B=0}function Y(Z){if(!Q)return;let F=Z.padEnd(B," ");A.write(`\r${F}`),$=!0,B=F.length}return{flushProgressLine:J,renderProgress:Y}}async function jW5(A){let B=process.platform==="win32"&&Gj()?{currentExecutablePath:process.execPath}:void 0,{flushProgressLine:$,renderProgress:J}=OW5(RD);if(process.env.AMP_SKIP_UPDATE_CHECK==="1")RD.write(n0.yellow(`Note: AMP_SKIP_UPDATE_CHECK=1 is set, which disables automatic update checking. Manual updates will still work.
|
|
5293
5293
|
|
|
5294
5294
|
`));try{if(!A){RD.write(n0.blue(`Checking for updates...
|
|
5295
|
-
`));let F=!1,X;if(Gj()){let D=await hF0("0.0.
|
|
5296
|
-
`));let V=await Cz("0.0.
|
|
5295
|
+
`));let F=!1,X;if(Gj()){let D=await hF0("0.0.1778235017-g38b248");F=D.hasUpdate,X=D.latestVersion}else{let D=await Vj(),G=await uF0("0.0.1778235017-g38b248",D);F=G.hasUpdate,X=G.latestVersion}if(!F){let D=es0("0.0.1778235017-g38b248"),G=D?.age?`released ${D.age} ago`:`built ${mV(new Date("2026-05-08T10:14:11.559Z"))} ago`;RD.write(n0.green(`✓ Amp is already up to date on version ${"0.0.1778235017-g38b248"} (${G})
|
|
5296
|
+
`));let V=await Cz("0.0.1778235017-g38b248",B);if(V.warning)RD.write(`
|
|
5297
5297
|
`+n0.yellow(V.warning)+`
|
|
5298
5298
|
`);process.exit(0)}if(!X)RD.write(n0.yellow("[WARN] could not find latest version")),process.exit(0);A=X}RD.write(n0.blue(`Updating to version ${A}...
|
|
5299
5299
|
`)),await Xo(A,void 0,(F)=>{$(),RD.write(n0.dim(`Running: ${F}
|
|
@@ -5695,7 +5695,7 @@ ${$}`).join(`
|
|
|
5695
5695
|
`)}function L_5(A){return A.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)}function N11(A){return A.replace(/\[(image(?:\s+\d+)?)\]/gi,"").trim()}function O_5(A){let Q=wN.extname(A.sourcePath).toLowerCase();if(Q.length>0)return Q;if(A.source.type==="base64")switch(A.source.mediaType){case"image/jpeg":return".jpg";case"image/png":return".png";case"image/gif":return".gif";case"image/webp":return".webp"}return".png"}async function j_5(A,Q){let B=[];for(let[$,J]of Q.entries()){if(J.source.type!=="base64"){j.warn("Skipping non-base64 debug package issue image",{index:$,sourceType:J.source.type});continue}let Y=`issue-image-${$+1}${O_5(J)}`,Z=wN.join(A,Y);try{await $f(Z,Buffer.from(J.source.data,"base64")),B.push(Y)}catch(F){j.warn("Failed to write debug package issue image",{index:$,fileName:Y,error:F})}}return B}function R_5(A,Q,B=[]){let $=["# Bug Report","","## Issue Description","",A,""];if(B.length>0){for(let[J,Y]of B.entries())$.push(``);$.push("")}if($.push("## Included Files","","- `cli-logs.json` — CLI logs filtered for this session PID","- `thread.yaml` — Full thread data (messages, metadata, agent mode, etc.)"),B.length>0)$.push("- `issue-image-*.*` — Images attached to the issue description");if(Jf(Q.thread))$.push("- `thread.sqlite` — DTW Durable Object SQLite dump","- `cloudflare-logs.json` — Worker logs from Cloudflare (if CLOUDFLARE_API_TOKEN was set)");if($.push("","## Debug Instructions","","To investigate, start with the issue description above, then:","","1. Review `cli-logs.json` for errors, warnings, and the sequence of events"),Jf(Q.thread))$.push("2. Open `thread.sqlite` and inspect the `messages` and `thread_events` tables:"," ```sh"," sqlite3 -json thread.sqlite 'SELECT * FROM messages ORDER BY created_at, rowid'"," sqlite3 -json thread.sqlite 'SELECT * FROM thread_events ORDER BY seq'"," ```","3. Review `cloudflare-logs.json` (if present) for server-side worker errors","4. Check Cloudflare dashboards for more detail:",` - Logs: <${q11(Q.thread.id)}>`,` - Data Studio: <${H11(Q.thread.id)}>`);return $.push("",mD0(Q)),$.join(`
|
|
5696
5696
|
`)}function w11(A){let Q=A.activeThreadHandle.getInitialTreeURI();return{thread:A.thread,ampURL:A.ampURL,effectiveAgentMode:A.getEffectiveAgentMode(),isProcessing:A.isProcessing,threadPoolIsDTW:A.threadPool.isDTWMode?.()===!0,transportState:A.threadPool.getTransportConnectionState?.(),transportRole:A.threadPool.getTransportConnectionRole?.(),threadViewState:A.threadViewStates[A.thread.id],initialTreePath:Q?G5(J8(Q)):void 0,currentWorkspacePath:G5(J8(A.currentWorkspace)),clientId:A.clientId,logFile:A.logFile,pid:process.pid}}async function Hc4(A){try{let Q=wN.join("/tmp",`amp-thread-${A.thread.id}-${Date.now()}.json`),B=JSON.stringify(A.thread,null,2);await $f(Q,B,"utf-8"),await VJ(Q),j.info("Thread JSON written and opened in editor",{file:Q});return}catch(Q){return j.error("Failed to write thread JSON or open editor",Q),Error("Failed to write thread JSON or open editor",{cause:Q})}}async function qc4(A){try{let Q=wN.join("/tmp",`amp-thread-${A.thread.id}-${Date.now()}.yaml`),B=W11.default.stringify(A.thread);await $f(Q,B,"utf-8"),await VJ(Q),j.info("Thread YAML written and opened in editor",{file:Q});return}catch(Q){return j.error("Failed to write thread YAML or open editor",Q),Error("Failed to write thread YAML or open editor",{cause:Q})}}async function Ic4(A,Q){if(typeof Q!=="string")return Error("Select a log option from the picker");switch(Q){case"cli-open":{let B=A.logFile;if(!B)return Error("CLI log file is unavailable for this session");let $="less -R +G",J=gD0(process.pid,B,$);try{try{C4.instance.tuiInstance.suspend(),Tr(J,{stdio:"inherit"})}finally{process.stdout.write("\x1B[?25l"),C4.instance.tuiInstance.resume()}j.info("Opened filtered CLI logs",{command:J,pid:process.pid,logFile:kr(B),outputCommand:$??null});return}catch(Y){return j.error("Failed to open filtered CLI logs",{error:Y,command:J}),Error("Failed to open filtered CLI logs",{cause:Y})}}case"cloudflare-logs":{await mA(A.context??A.contextFallback,q11(A.thread.id));return}case"cloudflare-data-studio":{await mA(A.context??A.contextFallback,H11(A.thread.id));return}default:return Error(`Unknown log option: ${Q}`)}}async function Nc4(A){let Q=w11(A),B=Wc4(Q),$=!1;try{await C4.instance.tuiInstance.clipboard.writeText(B),$=!0}catch(J){j.error("Failed to copy debug prompt",{error:J})}return new P2(new _A({child:new R6({markdown:[$?"**Copied Markdown debug prompt to clipboard.**":"**Clipboard copy failed. Select and copy manually.**","",B].join(`
|
|
5697
5697
|
`)})}),"Debug Prompt","info","help",{width:100,height:28})}function P_5(A){return typeof A==="object"&&A!==null&&"label"in A&&typeof A.label==="string"&&"command"in A&&typeof A.command==="string"}async function wc4(A,Q){if(!P_5(Q))return Error("Select a command from the picker");try{await C4.instance.tuiInstance.clipboard.writeText(Q.command),A.showToast(`Copied: ${Q.label}`,"success")}catch(B){j.error("Failed to copy DTW debug command",{error:B})}}async function Cc4(A){return new P2(new _A({child:new R6({markdown:mD0(w11(A))})}),"Thread Diagnostics","info","help",{width:100,height:26})}async function Mc4(A,Q){let B=A.logFile;if(!B)return Error("CLI log file is unavailable for this session");let $=N11(Q.description);if($.trim().length===0)return Error("Description is required");let J=Q.images,Y=kr(B),Z=process.pid,F=L_5($)||"debug-package",X=I_5.tmpdir(),D=wN.join(X,`amp-${F}`),G=`${D}.zip`;A.showStatusMessage("Building debug package...");try{Tr(`mkdir -p ${D}`);let V=`select(.pid == ${Z})`,U=Tr(`cat ${Y} | jq -c '${V}'`,{encoding:"utf-8",maxBuffer:52428800});await $f(wN.join(D,"cli-logs.json"),U,"utf-8"),await $f(wN.join(D,"thread.yaml"),W11.default.stringify(A.thread),"utf-8");let K=await j_5(D,J),E=R_5($,w11(A),K);await $f(wN.join(D,"agent-read-this.md"),E,"utf-8"),Tr(`zip -j ${G} ${D}/*`),Tr(`osascript -e 'set the clipboard to POSIX file "${G}"'`),A.showToast("Debug package copied to clipboard — paste into Slack","success"),j.info("Packaged debug bundle to clipboard",{zipPath:G,packageDir:D,pid:Z,threadId:A.thread.id});return}catch(V){return j.error("Failed to package debug bundle",{error:V}),Error("Failed to package debug bundle",{cause:V})}}G8();var __5=80,T_5=20,Lc4=4,k_5=42,_c4=420,Tc4=640,S_5=Math.max(32,RU),Oc4="░▒▓█▁▂▃▄▅▆▇∿∾∽≋≈∼",pD0=["▁","▂","▃","▄","▅","▆","▇","█"],v_5=["▏","▎","▍","▌","▋","▊","▉","█"],y_5=["▕","▐","▉","▊","▋","▌","▍","▎"],x_5=K0.symmetric(1,0),f_5=K0.all(1),b_5=K0.all(1),u_5={primary:{r:102,g:102,b:102},secondary:{r:255,g:255,b:255}},h_5={primary:{r:77,g:0,b:10},secondary:{r:255,g:77,b:95}};function g_5(A){return{borderShape:A?.borderShape??"notched",borderAnimation:A?.borderAnimation??"subtle",titleAnimation:A?.titleAnimation??"none",timeMs:A?.timeMs,animate:A?.animate,seed:A?.seed??k_5}}function kc4(A){switch(A){case"notched":return f_5;case"classic":return x_5}}class TA extends H1{props;constructor(A){super();this.props=A}build(A){let Q=P0.of(A),B=s1.of(A),$=this.props.tone??"default",J=g_5(this.props.visualStyle),Y=this.props.bodyFit??{kind:"shrink"},Z=a_5(this.props,Y,B,J.borderShape),F=t_5($,Q),X=d1.all(new c1(F.border,1,"rounded")),D=M11(this.props.header,J.borderShape),G=L11(this.props.footer,J.borderShape),V=e_5(D===void 0?this.props.header:void 0,F.header,J),U=$T5(this.props.child,Y),K=G===void 0?JT5(this.props.footer,Q):new U0({height:0}),E=Y.kind==="fill"?"max":"min",z=typeof this.props.header==="string"?`NeoModal:${this.props.header}`:"NeoModal",W=this.props.autofocus??!0,H=this.props.chromePadding??kc4(J.borderShape),q=D===void 0&&typeof this.props.header==="string"?1:0,I=G===void 0?ac4(this.props.footer):0,N=new i4({autofocus:W,canRequestFocus:!0,debugLabel:z,onKey:(P)=>{if(P.key==="Escape")return this.props.onDismiss(),"handled";return"ignored"},child:new x0({mainAxisSize:E,crossAxisAlignment:"stretch",children:[V,new U0({height:q}),U,new U0({height:I}),K]})}),L=!(J.borderShape==="notched"||J.borderAnimation!=="none")?new g0({constraints:Z,decoration:new f4(Q.colors.background,X),padding:H,child:N}):d_5({borderShape:J.borderShape,borderAnimation:J.borderAnimation,child:N,constraints:Z,background:Q.colors.background,borderColor:F.border,tone:$,headerColor:F.header,footerKeyColor:Q.app.keybind,footerHintColor:Q.colors.foreground,padding:H,title:D,footer:G,titleAnimation:J.titleAnimation,seed:J.seed,timeMs:J.timeMs,animate:J.animate}),O=new g0({decoration:new f4(Q.colors.background),padding:b_5,child:L});return new e4({fit:"expand",children:[new Sc4,new T1({onClick:()=>{},opaque:this.props.barrierOpaque??!0,child:U0.expand()}),new a1({child:O})]})}}class Sc4 extends A8{createRenderObject(){return new vc4}}class vc4 extends B4{performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=Number.isFinite(A.maxWidth)?A.maxWidth:A.minWidth,B=Number.isFinite(A.maxHeight)?A.maxHeight:A.minHeight;this.setSize(Q,B)}paint(A,Q=0,B=0){let $=Math.floor(Q+this.offset.x),J=Math.floor(B+this.offset.y),Y=A.getSize(),Z=Math.max(0,$),F=Math.max(0,J),X=Math.min(Y.width,$+this.size.width),D=Math.min(Y.height,J+this.size.height);for(let G=F;G<D;G++)for(let V=Z;V<X;V++){let U=A.getCell(V,G);if(!U||m_5(U))continue;let K={char:U.char,style:{...U.style,dim:!0},width:U.width};if(U.hyperlink!==void 0)K.hyperlink=U.hyperlink;A.setCell(V,G,K)}}}function m_5(A){return A.char===" "&&A.width===1&&A.hyperlink===void 0&&p_5(A.style)}function p_5(A){return A.fg===void 0&&A.bg===void 0&&A.bold===void 0&&A.italic===void 0&&A.underline===void 0&&A.strikethrough===void 0&&A.reverse===void 0&&A.dim===void 0}function M11(A,Q){return Q==="notched"&&typeof A==="string"?A:void 0}function L11(A,Q){if(Q!=="notched")return;if(A===void 0)return[{keys:["Esc"],label:"close"}];if(!dD0(A)||A.length===0)return;return A}function d_5(A){if(A.timeMs!==void 0)return jc4(A,A.timeMs);if(!(A.animate??c_5(A)))return jc4(A,0);return new yc4({borderShape:A.borderShape,borderAnimation:A.borderAnimation,child:A.child,constraints:A.constraints,background:A.background,borderColor:A.borderColor,tone:A.tone,headerColor:A.headerColor,footerKeyColor:A.footerKeyColor,footerHintColor:A.footerHintColor,padding:A.padding,title:A.title,footer:A.footer,titleAnimation:A.titleAnimation,seed:A.seed,initialTimeMs:0})}function jc4(A,Q){return new O11({borderShape:A.borderShape,borderAnimation:A.borderAnimation,child:A.child,constraints:A.constraints,background:A.background,borderColor:A.borderColor,tone:A.tone,headerColor:A.headerColor,footerKeyColor:A.footerKeyColor,footerHintColor:A.footerHintColor,padding:A.padding,title:A.title,footer:A.footer,titleAnimation:A.titleAnimation,seed:A.seed,timeMs:Q})}function c_5(A){return A.titleAnimation!=="none"||A.borderAnimation!=="none"}class yc4 extends S0{props;constructor(A){super();this.props=A}createState(){return new xc4}}class xc4 extends T0{startedAt=Date.now();timer=null;initState(){this.startTimer()}didUpdateWidget(A){if(A.props.borderShape!==this.widget.props.borderShape||A.props.borderAnimation!==this.widget.props.borderAnimation||A.props.seed!==this.widget.props.seed||A.props.title!==this.widget.props.title||A.props.titleAnimation!==this.widget.props.titleAnimation)this.startedAt=Date.now();this.startTimer()}dispose(){this.stopTimer(),super.dispose()}startTimer(){if(this.timer||this.animationComplete())return;this.timer=setInterval(()=>{if(!this.mounted)return;if(this.setState(()=>{}),this.animationComplete())this.stopTimer()},RU),this.timer.unref()}stopTimer(){if(!this.timer)return;clearInterval(this.timer),this.timer=null}animationComplete(){if(this.widget.props.borderAnimation!=="none")return!1;if(this.widget.props.titleAnimation!=="none")return Date.now()-this.startedAt>=cc4(this.widget.props.titleAnimation);return!0}build(A){return new O11({borderShape:this.widget.props.borderShape,borderAnimation:this.widget.props.borderAnimation,child:this.widget.props.child,constraints:this.widget.props.constraints,background:this.widget.props.background,borderColor:this.widget.props.borderColor,tone:this.widget.props.tone,headerColor:this.widget.props.headerColor,footerKeyColor:this.widget.props.footerKeyColor,footerHintColor:this.widget.props.footerHintColor,padding:this.widget.props.padding,title:this.widget.props.title,footer:this.widget.props.footer,titleAnimation:this.widget.props.titleAnimation,seed:this.widget.props.seed,timeMs:Date.now()-this.startedAt+this.widget.props.initialTimeMs})}}class O11 extends K5{props;constructor(A){super({child:A.child});this.props=A}createRenderObject(){return new C11(this.props)}updateRenderObject(A){q4(A instanceof C11,"unexpected modal surface"),A.update(this.props)}}class C11 extends B4{props;glow;constructor(A){super();this.props=A;this.glow=new M9(A.seed)}update(A){let Q=!this.props.constraints.equals(A.constraints)||this.props.padding!==A.padding;if(A.seed!==this.props.seed)this.glow=new M9(A.seed);if(this.props=A,Q)this.markNeedsLayout();this.markNeedsPaint()}performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=A.enforce(this.props.constraints),B=2+this.props.padding.horizontal,$=2+this.props.padding.vertical,J=new w1(Math.max(0,Q.minWidth-B),Math.max(0,Q.maxWidth-B),Math.max(0,Q.minHeight-$),Math.max(0,Q.maxHeight-$)),Y=this.children[0];if(Y)Y.layout(J),Y.setOffset(1+this.props.padding.left,1+this.props.padding.top);let Z=(Y?.size.width??0)+B,F=(Y?.size.height??0)+$,X=Q.constrain(Z,F);this.setSize(X.width,X.height)}paint(A,Q=0,B=0){let $=Math.floor(Q+this.offset.x),J=Math.floor(B+this.offset.y),Y=Math.floor(this.size.width),Z=Math.floor(this.size.height);if(Y<=0||Z<=0)return;A.fill($,J,Y,Z," ",{bg:this.props.background}),this.paintBorder(A,$,J,Y,Z),super.paint(A,Q,B)}paintBorder(A,Q,B,$,J){if($<2||J<2)return;for(let Y=1;Y<$-1;Y++)this.paintBorderCell(A,Q+Y,B,Y,0,$,J,"top"),this.paintBorderCell(A,Q+Y,B+J-1,Y,J-1,$,J,"bottom");for(let Y=1;Y<J-1;Y++)this.paintBorderCell(A,Q,B+Y,0,Y,$,J,"left"),this.paintBorderCell(A,Q+$-1,B+Y,$-1,Y,$,J,"right");if(this.paintCorner(A,Q,B,0,0,$,J,"top-left"),this.paintCorner(A,Q+$-1,B,$-1,0,$,J,"top-right"),this.paintCorner(A,Q,B+J-1,0,J-1,$,J,"bottom-left"),this.paintCorner(A,Q+$-1,B+J-1,$-1,J-1,$,J,"bottom-right"),this.props.borderShape==="notched")this.paintNotchedLabels(A,Q,B,$,J)}paintBorderCell(A,Q,B,$,J,Y,Z,F){let X=this.sampleBorderIntensity($,J,Y,Z);A.setChar(Q,B,this.borderGlyph(F,X),this.borderStyle(X),1)}paintCorner(A,Q,B,$,J,Y,Z,F){let X=this.sampleBorderIntensity($,J,Y,Z);A.setChar(Q,B,this.cornerGlyph(F,X),this.borderStyle(X),1)}paintNotchedLabels(A,Q,B,$,J){let Y=this.props.title;if(Y){let G=QT5(Y,this.props.titleAnimation,this.props.timeMs);this.paintBorderText(A,Q+2,B,` ${G} `,$-4,{fg:this.props.headerColor,bg:this.props.background,bold:!0})}let Z=this.props.footer;if(!Z||J<2)return;let F=fc4(Z,{fg:this.props.footerKeyColor,bg:this.props.background},{fg:this.props.footerHintColor,bg:this.props.background,dim:!0}),X=bc4(F),D=Math.max(2,$-X-2);this.paintStyledBorderText(A,Q+D,B+J-1,F,Math.max(0,$-D-2))}paintBorderText(A,Q,B,$,J,Y){this.paintStyledBorderText(A,Q,B,[{text:$,style:Y}],J)}paintStyledBorderText(A,Q,B,$,J){let Y=Q,Z=i_5($,J);for(let F of Z)A.setChar(Y,B,F.grapheme,F.style,F.width),Y+=F.width}borderGlyph(A,Q){switch(this.props.borderAnimation){case"mysterious-message":return this.mysteriousMessageBorderGlyph(A,Q);case"none":case"subtle":return A==="left"||A==="right"?"│":"─"}}mysteriousMessageBorderGlyph(A,Q){let B=this.mysteriousMessageBorderIndex(Q);if(A==="left")return v_5[B]??"▏";if(A==="right")return y_5[B]??"▕";return pD0[B]??"▁"}mysteriousMessageBorderIndex(A){return Math.max(0,Math.min(pD0.length-1,Math.floor(A*pD0.length)))}mysteriousMessageCornerGlyph(A,Q){let B=this.mysteriousMessageBorderIndex(Q);if(A==="top-left"||A==="top-right")return pD0[B]??"▁";return"█"}cornerGlyph(A,Q){if(this.props.borderAnimation==="mysterious-message")return this.mysteriousMessageCornerGlyph(A,Q);switch(A){case"top-left":return"╭";case"top-right":return"╮";case"bottom-left":return"╰";case"bottom-right":return"╯"}}borderStyle(A){let Q={fg:this.borderColor(A),bg:this.props.background};if(this.props.borderAnimation==="mysterious-message"&&A>0.72)Q.bold=!0;return Q}borderColor(A){switch(this.props.borderAnimation){case"none":return this.props.borderColor;case"subtle":case"mysterious-message":return this.animatedBorderColor(A)}}animatedBorderColor(A){let Q=0.18+Sr(A)*0.82;switch(this.props.tone){case"default":return dQ(Q,void 0,u_5);case"warning":return dQ(Q,MM);case"success":return dQ(Q,void 0);case"error":return dQ(Q,void 0,h_5)}}sampleBorderIntensity(A,Q,B,$){let J=Math.max(1,B*2+$*2-4),Y=l_5(A,Q,B,$),Z=Y/J,F=this.props.timeMs/1000,X=this.glow.sample(A*1.3+Y*0.07,Q*1.1-F*5,F,1.2),D=(Z-F*0.18%1+1)%1,G=Math.min(D,1-D),V=Math.max(0,1-G/0.085)**2;return Sr(X*0.58+V*0.54)}}function l_5(A,Q,B,$){if(Q<=0)return Math.max(0,A);if(A>=B-1)return B-1+Math.max(0,Q);if(Q>=$-1)return B+$-2+Math.max(0,B-1-A);return B*2+$-3+Math.max(0,$-1-Q)}function fc4(A,Q,B){let $=[{text:" ",style:B}];return A.forEach((J,Y)=>{if(Y>0)$.push({text:" · ",style:B});J.keys.forEach((Z,F)=>{if(F>0)$.push({text:"/",style:B});$.push({text:Z,style:Q})}),$.push({text:` ${J.label}`,style:B})}),$.push({text:" ",style:B}),$}function bc4(A){return uc4(A).reduce((Q,B)=>Q+B.width,0)}function i_5(A,Q){if(Q<=0)return[];let B=[],$=0;for(let J of uc4(A)){if($+J.width>Q)return n_5(B,$,Q,J.style);B.push(J),$+=J.width}return B}function uc4(A){let Q=[];for(let B of A)for(let $ of L4(B.text))Q.push({grapheme:$,style:B.style,width:f6($)});return Q}function n_5(A,Q,B,$){let Y=f6("…");if(Y>B)return A;let Z=Q;while(A.length>0&&Z+Y>B){let F=A.pop();if(F)Z-=F.width}if(Z+Y<=B)A.push({grapheme:"…",style:$,width:Y});return A}function Sr(A){return Math.max(0,Math.min(1,A))}function a_5(A,Q,B,$){let J=Math.max(0,B.size.width-Lc4),Y=Math.max(0,B.size.height-Lc4),Z=Math.max(A.minWidth??0,o_5(A,$)),F=Math.max(0,Math.min(A.maxWidth??__5,J));if(Q.kind==="fill"){let G=r_5(A,$),V=Math.max(Q.modalRows,G),U=Math.max(0,Math.min(V,Y));return new w1(Math.min(Z,F),F,U,U)}let X=Math.max(0,Math.min(A.maxHeight??T_5,Y)),D=Math.min(A.minHeight??0,X);return new w1(Math.min(Z,F),F,D,X)}function o_5(A,Q){if(Q!=="notched")return 0;let B=0,$=M11(A.header,Q);if($)B=Math.max(B,4+d4(` ${$} `));let J=L11(A.footer,Q);if(J)B=Math.max(B,4+bc4(fc4(J,{},{})));return B}function r_5(A,Q){let B=A.chromePadding??kc4(Q),$=M11(A.header,Q),J=L11(A.footer,Q),Y=2,Z=A.header===void 0||$!==void 0?0:1,F=$===void 0&&typeof A.header==="string"?1:0,X=J===void 0?s_5(A.footer):0,D=J===void 0?ac4(A.footer):0,G=1;return 2+B.top+B.bottom+Z+F+1+D+X}function s_5(A){if(A===void 0)return 1;if(A==="none")return 0;if(dD0(A))return A.length===0?0:1;return 1}function t_5(A,Q){switch(A){case"default":return{border:Q.colors.border,header:Q.app.command};case"warning":return{border:Q.colors.warning,header:Q.colors.warning};case"success":return{border:Q.app.toolSuccess,header:Q.app.toolSuccess};case"error":return{border:Q.app.toolError,header:Q.app.toolError}}}function e_5(A,Q,B){if(A===void 0)return new U0({height:0});if(typeof A==="string")return new g0({padding:K0.symmetric(1,0),child:new a1({child:AT5(A,Q,B)})});return A}function AT5(A,Q,B){if(B.titleAnimation==="none")return new p({text:new C(A,new v({color:Q,bold:!0}))});let $=B.timeMs??(B.animate===!1?0:void 0);if($!==void 0)return new p({text:mc4(A,Q,B.titleAnimation,$)});return new hc4({title:A,color:Q,animation:B.titleAnimation})}class hc4 extends S0{props;constructor(A){super();this.props=A}createState(){return new gc4}}class gc4 extends T0{startedAt=Date.now();timer=null;initState(){this.startTimer()}didUpdateWidget(A){if(A.props.title!==this.widget.props.title||A.props.animation!==this.widget.props.animation||A.props.color!==this.widget.props.color)this.startedAt=Date.now();this.startTimer()}dispose(){this.stopTimer(),super.dispose()}startTimer(){if(this.timer||this.widget.props.animation==="none"||this.animationComplete())return;this.timer=setInterval(()=>{if(!this.mounted)return;if(this.setState(()=>{}),this.animationComplete())this.stopTimer()},S_5),this.timer.unref()}stopTimer(){if(!this.timer)return;clearInterval(this.timer),this.timer=null}animationComplete(){return Date.now()-this.startedAt>=cc4(this.widget.props.animation)}build(A){return new p({text:mc4(this.widget.props.title,this.widget.props.color,this.widget.props.animation,Date.now()-this.startedAt)})}}function mc4(A,Q,B,$){let J=L4(A),Y=new v({color:Q,bold:!0}),Z=new v({color:Q,bold:!0,dim:!0});switch(B){case"none":return new C(A,Y);case"wipe":return new C("",void 0,Rc4(J,pc4(J,$),Y,Z));case"scramble":return new C("",void 0,Rc4(J,dc4(J,$),Y,Z))}}function QT5(A,Q,B){let $=L4(A);switch(Q){case"none":return A;case"wipe":return pc4($,B).join("");case"scramble":return dc4($,B).join("")}}function Rc4(A,Q,B,$){return Q.map((J,Y)=>{let Z=J===A[Y]?B:$;return new C(J,Z)})}function pc4(A,Q){let B=lc4(Sr(Q/_c4)),$=Math.floor(B*(A.length+1));return A.map((J,Y)=>{if(Y<$)return J;if(Y===$)return"▒";return" "})}function dc4(A,Q){let $=lc4(Sr(Q/Tc4))*(A.length+5),J=Math.floor(Q/45);return A.map((Y,Z)=>{if(Sr(($-Z)/5)>=1)return Y;return BT5(Z,J)})}function BT5(A,Q){return Oc4[(A*7+Q*11)%Oc4.length]??"░"}function cc4(A){if(A==="scramble")return Tc4;return _c4}function lc4(A){return 1-(1-A)**3}function $T5(A,Q){let B=Q.kind==="fill"?"tight":"loose";return new U3({fit:B,child:new ic4({child:A})})}class ic4 extends K5{constructor({child:A}){super({child:A})}createRenderObject(){return new nc4}}class nc4 extends B4{performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=this.children[0];if(Q)Q.layout(A.loosen()),Q.setOffset(0,0);let B=Q?.size.width??0,$=Q?.size.height??0,J=A.constrain(A.hasTightWidth?A.maxWidth:B,A.hasTightHeight?A.maxHeight:$);this.setSize(J.width,J.height)}}function JT5(A,Q){if(A===void 0)return Pc4([{keys:["Esc"],label:"close"}],Q);if(dD0(A))return A.length===0?new U0({height:0}):Pc4(A,Q);if(A==="none")return new U0({height:0});return A}function dD0(A){return Array.isArray(A)}function ac4(A){return A===void 0||dD0(A)&&A.length>0?1:0}function Pc4(A,Q){let B=new v({color:Q.app.keybind}),$=new v({color:Q.colors.foreground,dim:!0}),J=[];return A.forEach((Y,Z)=>{if(Z>0)J.push(new C(" · ",$));Y.keys.forEach((F,X)=>{if(X>0)J.push(new C("/",$));J.push(new C(F,B))}),J.push(new C(` ${Y.label}`,$))}),new a1({child:p.spans(J)})}function ZT5(A){return[{label:"cli: copy tail logs",command:CN("tail",process.pid,{path:A})},{label:"cli: copy logs snapshot",command:CN("snapshot",process.pid,{path:A})},{label:"cli: htop",command:`htop -p ${process.pid}`}]}async function FT5(A,Q){try{await C4.instance.tuiInstance.clipboard.writeText(A.command)}catch(B){j.error("Failed to copy debug command from Neo command palette",{error:B})}finally{Q()}}function XT5(A,Q){let B=gD0(process.pid,{path:A},"less -R +G");Q();try{C4.instance.tuiInstance.suspend(),YT5(B,{stdio:"inherit"})}catch($){j.error("Failed to open filtered CLI logs in pager",{error:$,command:B})}finally{process.stdout.write("\x1B[?25l"),C4.instance.tuiInstance.resume()}}function oc4(A){return[{noun:"debug",verb:"page logs",description:"View CLI logs in pager",status:{type:"enabled"},run:(Q,B,$)=>{XT5(A,$)}},{noun:"debug",verb:"copy command",description:"Copy debug command to clipboard",status:{type:"enabled"},run:(Q,B,$)=>{Q.pushWithDismiss((J)=>new TA({header:"Debug: Copy Command",minWidth:80,maxWidth:80,autofocus:!1,footer:"none",onDismiss:J,child:new b6({items:ZT5(A),getLabel:(Y)=>Y.label,showBorder:!1,onAccept:(Y)=>{FT5(Y,$)},onDismiss:J})}))}}]}var Yf="exit-app-key-pressed",Zf="cancel-key-pressed",MN="loading-thread",Ff="previous-thread-reference",Xf="double-enter-steer";class yr extends l4{}class cD0 extends l4{}class lD0 extends l4{}class xr extends l4{visualIndex;constructor(A){super();this.visualIndex=A}}class fr extends l4{}class iD0 extends l4{}class br extends l4{}class Df extends l4{}class Gf extends l4{}class ur extends l4{}class hr extends l4{}class gr extends l4{}class Vf extends l4{}class r7 extends l4{text;successMessage;failureMessage;constructor(A="",Q="Selection copied to clipboard",B="Failed to copy selection"){super();this.text=A;this.successMessage=Q;this.failureMessage=B}}class nD0 extends l4{}class mr extends l4{}class aD0 extends l4{}class oD0 extends l4{}class pr extends l4{}class dr extends l4{}class cr extends l4{}class rD0 extends l4{}class sD0 extends l4{}class tD0 extends l4{}class ij extends l4{}class lr extends l4{}class j11 extends l4{mode;constructor(A){super();this.mode=A}}I3();o1();var rc4=process.platform==="win32"?" ":"█",sc4=process.platform==="win32"?"░":"█";class J2 extends S0{controller;getScrollInfo;thickness;trackChar;thumbChar;showTrack;thumbColor;trackColor;constructor({key:A,controller:Q,getScrollInfo:B,thickness:$=1,trackChar:J=rc4,thumbChar:Y=sc4,showTrack:Z=!0,thumbColor:F,trackColor:X}){super(A?{key:A}:{});this.controller=Q,this.getScrollInfo=B,this.thickness=$,this.trackChar=J,this.thumbChar=Y,this.showTrack=Z,this.thumbColor=F,this.trackColor=X}createState(){return new tc4}}class tc4 extends T0{_dragStartY=null;_dragStartOffset=null;_isOverThumb=!1;_isPositionOverThumb(A){let{totalContentHeight:Q,viewportHeight:B}=this.widget.getScrollInfo(),J=this.context.findRenderObject()?.size.height??0;if(J===0||Q<=B)return!1;let Y=this.widget.getScrollInfo(),Z=Math.min(1,B/Q),F=Math.max(1,J*Z),X=Math.max(0,Math.min(1,Y.scrollOffset/(Q-B))),D=J-F,G=Math.max(0,D*X),V=G+F;return A>=G&&A<=V}_handleHover=(A)=>{let Q=this._isOverThumb;if(this._isOverThumb=this._isPositionOverThumb(A.localPosition.y),Q!==this._isOverThumb)this.setState()};_handleDrag=(A)=>{let{totalContentHeight:Q,viewportHeight:B,scrollOffset:$}=this.widget.getScrollInfo(),Y=this.context.findRenderObject()?.size.height??0;if(Y===0||Q<=B)return;if(this._dragStartY===null)this._dragStartY=A.localPosition.y,this._dragStartOffset=$;let Z=A.localPosition.y-this._dragStartY,F=Math.min(1,B/Q),X=Math.max(1,Y*F),D=Y-X;if(D<=0)return;let G=Q-B,V=D/G,U=Z/V,K=Math.max(0,Math.min(G,this._dragStartOffset+U));this.widget.controller.jumpTo(K)};_handleRelease=()=>{this._dragStartY=null,this._dragStartOffset=null};_handleClick=(A)=>{if(A.button!=="left")return;let Q=A.localPosition.y,{totalContentHeight:B,viewportHeight:$,scrollOffset:J}=this.widget.getScrollInfo(),Z=this.context.findRenderObject()?.size.height??0;if(Z===0||B<=$)return;let F=Math.min(1,$/B),X=Math.max(1,Z*F),D=B-$,G=Z-X,V=Math.max(0,Math.min(1,J/(B-$))),U=Math.max(0,G*V),K=U+X;if(Q>=U&&Q<=K)return;if(Q<U)this.widget.controller.animateTo(Math.max(0,J-$));else this.widget.controller.animateTo(Math.min(D,J+$))};build(A){return new T1({onClick:this._handleClick,onHover:this._handleHover,onDrag:this._handleDrag,onRelease:this._handleRelease,cursor:this._isOverThumb?l6.POINTER:l6.DEFAULT,child:new ec4({controller:this.widget.controller,getScrollInfo:this.widget.getScrollInfo,thickness:this.widget.thickness,trackChar:this.widget.trackChar,thumbChar:this.widget.thumbChar,showTrack:this.widget.showTrack,thumbColor:this.widget.thumbColor,trackColor:this.widget.trackColor})})}}class ec4 extends AN{controller;getScrollInfo;thickness;trackChar;thumbChar;showTrack;thumbColor;trackColor;constructor({key:A,controller:Q,getScrollInfo:B,thickness:$=1,trackChar:J=rc4,thumbChar:Y=sc4,showTrack:Z=!0,thumbColor:F,trackColor:X}){super(A?{key:A}:{});this.controller=Q,this.getScrollInfo=B,this.thickness=$,this.trackChar=J,this.thumbChar=Y,this.showTrack=Z,this.thumbColor=F,this.trackColor=X}createRenderObject(){return new Al4(this)}updateRenderObject(A){A.updateWidget(this)}}class Al4 extends B4{_widget;constructor(A){super();this._widget=A}updateWidget(A){this._widget=A,this.markNeedsLayout()}performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=Math.min(A.maxWidth,this._widget.thickness),B=A.maxHeight;this.setSize(Q,B),super.performLayout()}getMinIntrinsicWidth(A){return this._widget.thickness}getMaxIntrinsicWidth(A){return this._widget.thickness}getMinIntrinsicHeight(A){return 0}getMaxIntrinsicHeight(A){return 0}paint(A,Q,B){let{thumbStartFloat:$,thumbSizeFloat:J,showScrollbar:Y}=this._calculateScrollbarMetrics();if(!Y)return;let Z=this._widget.trackColor,F=this._widget.thumbColor,X=process.platform==="win32",D=$,G=$+J;if(!X){let V=["▁","▂","▃","▄","▅","▆","▇","█"];for(let U=0;U<this.size.height;U++){let K="█",E=!0;if(U===Math.floor(D)){let z=1-(D-U),W=Math.floor(z*8);K=V[W]||"█",E=!1}else if(U===Math.floor(G)){let z=1-(G-U),W=Math.floor(z*8);K=V[W]||"█"}else if(U>D&&U<G)E=!1;A.setChar(Q,B+U,K,{fg:F,bg:Z,reverse:E},1)}return}for(let V=0;V<this.size.height;V++){let U=V+0.5,K=U>=D&&U<G,E=K?this._widget.thumbChar:this._widget.trackChar;A.setChar(Q,B+V,E,{fg:K?F:Z,bg:Z,reverse:!1},1)}}_calculateScrollbarMetrics(){let{totalContentHeight:A,viewportHeight:Q,scrollOffset:B}=this._widget.getScrollInfo(),$=this.size.height;if(A<=Q||$<=0)return{thumbStartFloat:0,thumbSizeFloat:0,showScrollbar:!1};let J=Math.max(0,Math.min(1,B/(A-Q))),Y=Math.min(1,Q/A),Z=Math.max(1,$*Y),F=$-Z;return{thumbStartFloat:Math.max(0,F*J),thumbSizeFloat:Z,showScrollbar:!0}}}var Ql4=1;class iY extends S0{props;constructor(A){super();this.props=A}createState(){return new Bl4}}class Bl4 extends T0{ownership;viewportHeight=0;initState(){let A=this.widget.props.controller;if(A)this.ownership={controller:A,owned:!1};else{let Q=new aA;Q.followMode=!1,Q.jumpTo(0),this.ownership={controller:Q,owned:!0}}}didUpdateWidget(A){q4(A.props.controller===this.widget.props.controller,"NeoModalScrollArea.controller identity must be stable across rebuilds")}dispose(){if(this.ownership.owned)this.ownership.controller.dispose()}getScrollInfo=()=>{let{controller:A}=this.ownership,Q=this.viewportHeight;return{totalContentHeight:Math.max(A.maxScrollExtent+Q,0),viewportHeight:Q,scrollOffset:Math.max(A.offset,0)}};setMeasuredHeight=(A)=>{this.viewportHeight=A};build(A){let Q=P0.of(A),{controller:B}=this.ownership;return new $l4({thickness:Ql4,onMeasured:this.setMeasuredHeight,scrollable:new _A({controller:B,autofocus:this.widget.props.autofocus??!0,keyboardScrolling:!0,child:this.widget.props.child}),scrollbar:new J2({controller:B,thickness:Ql4,thumbColor:Q.app.scrollbarThumb,trackColor:Q.app.scrollbarTrack,getScrollInfo:this.getScrollInfo})})}__testing={isOwned:()=>this.ownership.owned,controller:()=>this.ownership.controller}}class $l4 extends C9{thickness;onMeasured;constructor({scrollable:A,scrollbar:Q,thickness:B,onMeasured:$}){super({children:[A,Q]});this.thickness=B,this.onMeasured=$}createRenderObject(){return new Jl4(this.thickness,this.onMeasured)}}class Jl4 extends B4{thickness;onMeasured;constructor(A,Q){super();this.thickness=A;this.onMeasured=Q}performLayout(){let A=this._lastConstraints;q4(!!A,"ScrollAreaLayoutRenderObject.performLayout called without constraints");let Q=A.maxWidth,B=Math.max(0,Math.min(this.thickness,Q)),$=Q-B,[J,Y]=this.children;q4(J!==void 0&&Y!==void 0,"ScrollAreaLayout requires scrollable and scrollbar children"),J.layout(new w1($,$,0,A.maxHeight)),J.setOffset(0,0);let Z=J.size.height;this.onMeasured(Z),Y.layout(new w1(B,B,Z,Z)),Y.setOffset($,0),this.setSize(Q,Z)}}var Yl4=10;class R11 extends S0{pluginService;workspaceRoot;logFilePath;onDismiss;constructor(A){super();this.pluginService=A.pluginService,this.workspaceRoot=A.workspaceRoot,this.logFilePath=A.logFilePath,this.onDismiss=A.onDismiss}createState(){return new Zl4}}class Zl4 extends T0{plugins=[];subscription=null;initState(){this.subscription=this.widget.pluginService.plugins.subscribe((A)=>{this.setState(()=>{this.plugins=A})})}didUpdateWidget(A){if(A.pluginService===this.widget.pluginService)return;this.subscription?.unsubscribe(),this.subscription=this.widget.pluginService.plugins.subscribe((Q)=>{this.setState(()=>{this.plugins=Q})})}dispose(){this.subscription?.unsubscribe(),super.dispose()}relativePath(A){let Q=o0.file(this.widget.workspaceRoot),B=Y1.relativePath(Q,MA(A));if(B!==null&&B!==""&&B!==".."&&!B.startsWith("../"))return B;return L5(A)}detailPrefix(A){if(A.length===0)return` ${" ".repeat(Yl4)}`;return` ${`${A}:`.padEnd(Yl4," ")}`}bunNotFoundExplanation(A,Q){let B=P0.of(A),{app:$,colors:J}=B,Y=new v({color:J.foreground}),Z=new v({color:$.toolError}),F=new v({color:$.link,underline:!0}),X=`${Q} ${V4(Q,"plugin")} could not start because Bun is not installed.`,D="https://ampcode.com/install",G="https://bun.sh",V=(U,K)=>new C(K,F,void 0,Mz(U),()=>{mA(A,U)});return new f0({padding:K0.only({left:1,right:1,bottom:1}),child:new x0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new p({text:new C(X,Z),maxLines:2,overflow:"ellipsis"}),new p({text:new C(" ",Y)}),new p({text:new C("To run plugins, either ",Y,[V("https://ampcode.com/install","install the Amp binary"),new C(" or ",Y),V("https://bun.sh","install bun"),new C(".",Y)])})]})})}pluginRows(A){let Q=P0.of(A),{app:B,colors:$}=Q,J=new v({color:$.foreground,dim:!0}),Y=new v({color:B.link}),Z=new v({color:B.link,underline:!0});if(this.plugins.length===0)return[new f0({padding:K0.symmetric(1,1),child:new p({text:new C("No plugins found.",J)})})];let F=this.plugins.filter((V)=>V.errorMessage!==null),X=F.length>0&&F.every((V)=>Sd(V.errorMessage)),G=(X?this.plugins.filter((V)=>!Sd(V.errorMessage)):this.plugins).map((V)=>{let U=V.uri.toString(),K=U.startsWith("file://"),E=()=>{mA(A,U)},z=V.status==="active"?new v({color:B.toolSuccess}):V.status==="error"?new v({color:B.toolError}):new v({color:$.warning}),W=new p({text:new C(this.relativePath(V.uri),K?Z:new v({color:B.command}),void 0,K?Mz(U):void 0,K?E:void 0),maxLines:1,overflow:"ellipsis"}),H=K?new T1({cursor:"pointer",onClick:E,child:W}):W,q=[new r0({children:[new p({text:new C(V.status,z,[new C(" ",J)]),maxLines:1,overflow:"clip"}),new U3({fit:"loose",child:H})]})];if(V.errorMessage)q.push(new p({text:new C(this.detailPrefix("Error"),J,[new C(V.errorMessage,new v({color:B.toolError}))]),maxLines:1,overflow:"ellipsis"}),new p({text:new C(this.detailPrefix(""),J,[new C(`see logs: ${this.widget.logFilePath}`,J)]),maxLines:1,overflow:"ellipsis"}));if(V.registeredEvents.length>0)q.push(new p({text:new C(this.detailPrefix("Events"),J,[new C(V.registeredEvents.join(", "),Y)]),maxLines:1,overflow:"ellipsis"}));for(let[I,N]of V.registeredCommands.entries())q.push(new p({text:new C(I===0?this.detailPrefix("Commands"):this.detailPrefix(""),J,[new C(`${N.category}: ${N.title}`,Y)]),maxLines:1,overflow:"ellipsis"}));for(let[I,N]of V.registeredTools.entries())q.push(new p({text:new C(I===0?this.detailPrefix("Tools"):this.detailPrefix(""),J,[new C(N.name,Y)]),maxLines:1,overflow:"ellipsis"}));return new f0({padding:K0.only({left:1,right:1,bottom:1}),child:new x0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:q})})});if(X)G.push(this.bunNotFoundExplanation(A,F.length));return G}build(A){let Q=this.plugins.filter((Y)=>Y.status==="active").length,B=this.plugins.reduce((Y,Z)=>Y+Z.registeredCommands.length,0),$=this.plugins.reduce((Y,Z)=>Y+Z.registeredTools.length,0),J=`${Q}/${this.plugins.length} ${V4(this.plugins.length,"plugin")} active (${B} ${V4(B,"command")}, ${$} ${V4($,"tool")})`;return new TA({header:"Plugins",autofocus:!1,maxWidth:90,maxHeight:30,footer:[{keys:["Esc"],label:"close"},{keys:["↑↓","j/k"],label:"scroll"}],onDismiss:this.widget.onDismiss,child:new x0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new f0({padding:K0.only({left:1,right:1,bottom:1}),child:new p({text:new C(J,new v({bold:!0}))})}),new U3({fit:"loose",child:new iY({child:new x0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:this.pluginRows(A)})})})]})})}}function Fl4(A){return[{noun:"plugins",verb:"list",description:"List all loaded plugins",keywords:["extensions","tools","commands"],status:{type:"enabled"},run:(Q,B,$)=>{Q.push(new R11({pluginService:A.pluginService,workspaceRoot:A.workspaceRoot,logFilePath:A.logFilePath,onDismiss:$}))}},{noun:"plugins",verb:"reload",description:"Reload all plugins",keywords:["refresh","restart","extensions"],status:{type:"enabled"},run:(Q,B,$)=>{A.pluginService.reload(),A.toastController.show("Reloading plugins..."),$()}}]}d0();class ir extends l4{}class Uf extends l4{}class P11 extends S0{props;constructor(A){super(A.key===void 0?{}:{key:A.key});this.props=A}createState(){return new Xl4}}class Xl4 extends T0{build(A){let{options:Q,onConfirm:B,onCancel:$}=this.widget.props,{colors:J}=P0.of(A),Y=Q.message?new p({text:new C(Q.message,new v({color:J.foreground}))}):new U0({height:1});return new TA({header:Q.title,minWidth:64,maxWidth:80,footer:[{keys:["Y"],label:Q.confirmButtonText??"yes"},{keys:["N","Esc"],label:"cancel"},{keys:["↑↓","j/k"],label:"scroll"}],autofocus:!1,onDismiss:$,child:new t4({actions:new Map([[ir,new X4(()=>B())],[Uf,new X4(()=>$())]]),child:new h5({debugLabel:"NeoConfirmDialogShortcuts",shortcuts:DT5(),child:new iY({child:Y})})})})}}function DT5(){return new Map([[_1.key("y"),new ir],[_1.shift("Y"),new ir],[_1.shift("y"),new ir],[_1.key("n"),new Uf],[_1.shift("N"),new Uf],[_1.shift("n"),new Uf],[_1.key("Escape"),new Uf]])}class nr extends S0{props;constructor(A){super(A.key===void 0?{}:{key:A.key});this.props=A}createState(){return new Dl4}}class Dl4 extends T0{controller=new N8;onTextChanged=()=>{this.setState()};initState(){this.controller.text=this.widget.props.initialValue??"",this.controller.addListener(this.onTextChanged)}dispose(){this.controller.removeListener(this.onTextChanged),this.controller.dispose(),super.dispose()}handleSubmit(){let A=this.controller.text.trim();if((this.widget.props.isRequired??!0)&&A.length===0)return;this.widget.props.onSubmit(A)}build(A){let{colors:Q,app:B}=P0.of(A),Y=!(this.widget.props.isRequired??!0)||this.controller.text.trim().length>0?[{keys:["Enter"],label:"submit"},{keys:["Esc"],label:"cancel"}]:[{keys:["Esc"],label:"cancel"}],Z=[];if(this.widget.props.helpText)Z.push(new p({text:new C(this.widget.props.helpText,new v({color:Q.foreground}))})),Z.push(new U0({height:1}));return Z.push(new r0({children:[new p({text:new C("> ",new v({color:B.command}))}),new R1({child:new lB({controller:this.controller,placeholder:this.widget.props.placeholder??"",autofocus:!0,maxLines:1,style:{textColor:Q.foreground,border:null},onSubmitted:()=>this.handleSubmit()})})]})),new TA({header:this.widget.props.header,minWidth:80,maxWidth:80,footer:Y,autofocus:!1,bodyFit:this.widget.props.bodyFit,onDismiss:this.widget.props.onDismiss,child:new x0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:Z})})}}class _11 extends H1{props;constructor(A){super(A.key===void 0?{}:{key:A.key});this.props=A}build(A){return new TA({header:this.props.options.title,minWidth:64,maxWidth:80,footer:[{keys:["↑/↓","j/k"],label:"move"},{keys:["Enter"],label:"select"},{keys:["Esc"],label:"cancel"}],autofocus:!1,onDismiss:this.props.onCancel,child:GT5(this.props)})}}function GT5(A){let Q=A.options.options.map((B)=>({value:B,label:B}));return new A9({options:Q,body:A.options.message,onSelect:(B)=>{if(B===null){A.onCancel();return}A.onSelect(B)},padding:K0.all(0),showBorder:!1,showDismissalMessage:!1,enableMouseInteraction:!1})}class T11{options;unregisterPluginCommands=null;pluginCommandSubscriptions=[];pluginErrorToastKeys=new Set;activeDialog=null;queuedDialogs=[];disposed=!1;constructor(A){this.options=A}init(){this.disposed=!1,this.configurePluginPlatform(),this.subscribePluginCommands()}dispose(){this.disposed=!0,this.unregisterPluginCommands?.(),this.unregisterPluginCommands=null;for(let A of this.pluginCommandSubscriptions)A.unsubscribe();this.pluginCommandSubscriptions=[],this.cancelPendingDialogs()}hasBlockingDialog(){return this.activeDialog!==null}buildDialogLayers(){let A=this.activeDialog;if(!A)return[];switch(A.kind){case"input":return[new nr({key:new Oz(A),header:A.options.title??"Input",helpText:A.options.helpText,initialValue:A.options.initialValue,isRequired:!1,onSubmit:(Q)=>this.resolveInputDialog(A,Q),onDismiss:()=>this.resolveInputDialog(A,void 0)})];case"confirm":return[new P11({key:new Oz(A),options:A.options,onConfirm:()=>this.resolveConfirmDialog(A,!0),onCancel:()=>this.resolveConfirmDialog(A,!1)})];case"select":return[new _11({key:new Oz(A),options:A.options,onSelect:(Q)=>this.resolveSelectDialog(A,Q),onCancel:()=>this.resolveSelectDialog(A,void 0)})]}}configurePluginPlatform(){let A=this.options.neoContext.pluginPlatform;if(!A)return;A.showToast=(Q)=>this.options.toastController.show(Q,"success"),A.showOpenedURLToast=(Q)=>{this.options.toastController.show(`Opened URL: ${Q}`,"success",8000)},A.appendToThreadHandler=this.options.neoContext.observerOnly?async()=>{throw Error("thread.append is only available from an executor-owned plugin runtime")}:this.options.appendToThread,A.showInputDialog=this.showInputDialog,A.showConfirmDialog=this.showConfirmDialog,A.showSelectDialog=this.showSelectDialog}subscribePluginCommands(){let A=this.options.neoContext.pluginService;if(!A)return;this.refreshPluginCommands(A.commands.list()),this.pluginCommandSubscriptions=[A.plugins.subscribe((Q)=>{this.showNewPluginErrorToasts(Q),this.refreshPluginCommands(A.commands.list())}),A.commands.changed.subscribe(()=>{this.refreshPluginCommands(A.commands.list())})]}refreshPluginCommands(A){this.unregisterPluginCommands?.();let B=A.map(($)=>this.createPluginCommand($)).map(($)=>this.options.commandRegistry.register($));this.unregisterPluginCommands=()=>{for(let $ of B)$()}}showNewPluginErrorToasts(A){let Q=new Set;for(let B of A){if(B.status!=="error")continue;if(Sd(B.errorMessage))continue;let $=`${B.uri.toString()}
|
|
5698
|
-
${B.errorMessage??""}`;if(Q.add($),this.pluginErrorToastKeys.has($))continue;this.options.toastController.show(this.formatPluginErrorToast(B),"error",8000)}this.pluginErrorToastKeys=Q}formatPluginErrorToast(A){let Q=A.uri.toString();return`Plugin failed: ${Q.split("/").pop()??Q}. See logs: ${this.options.neoContext.logFilePath}`}createPluginCommand(A){return{noun:A.category,verb:A.title,description:A.description??`Run plugin command ${A.category}: ${A.title}`,keywords:["plugin",A.pluginName,A.id],status:{type:"enabled"},run:async(Q,B,$)=>{$();try{await this.options.neoContext.pluginService?.commands.execute(A.pluginName,A.id,{threadID:this.options.getActiveThreadID()})}catch(J){j.error("Neo plugin command failed",{error:J,command:A}),this.options.toastController.show(J instanceof Error?J.message:String(J),"error",5000)}}}}showInputDialog=(A)=>{return new Promise((Q)=>{if(this.disposed||!this.options.state.mounted){Q(void 0);return}this.enqueueDialog({kind:"input",options:A,resolve:Q})})};showConfirmDialog=(A)=>{return new Promise((Q)=>{if(this.disposed||!this.options.state.mounted){Q(!1);return}this.enqueueDialog({kind:"confirm",options:A,resolve:Q})})};showSelectDialog=(A)=>{return new Promise((Q)=>{if(this.disposed||!this.options.state.mounted){Q(void 0);return}this.enqueueDialog({kind:"select",options:A,resolve:Q})})};cancelPendingDialogs(){let A=[];if(this.activeDialog)A.push(this.activeDialog);A.push(...this.queuedDialogs),this.activeDialog=null,this.queuedDialogs=[];for(let Q of A)this.cancelDialog(Q)}cancelDialog(A){switch(A.kind){case"input":A.resolve(void 0);return;case"confirm":A.resolve(!1);return;case"select":A.resolve(void 0);return}}enqueueDialog(A){if(this.activeDialog){this.queuedDialogs.push(A);return}this.options.commandPalette.disable(),this.options.state.setState(()=>{this.activeDialog=A})}resolveInputDialog(A,Q){if(this.activeDialog!==A)return;this.advanceDialog(),A.resolve(Q)}resolveConfirmDialog(A,Q){if(this.activeDialog!==A)return;this.advanceDialog(),A.resolve(Q)}resolveSelectDialog(A,Q){if(this.activeDialog!==A)return;this.advanceDialog(),A.resolve(Q)}advanceDialog(){this.updateDialogState(()=>{this.activeDialog=this.queuedDialogs.shift()??null})}updateDialogState(A){if(this.options.state.mounted)this.options.state.setState(A);else A()}}Bl();q2();import{readFile as VT5}from"node:fs/promises";import k11 from"node:os";function UT5(A=new Date){return A.toISOString().replaceAll("-","").replaceAll(":","").slice(0,15)+"Z"}async function Gl4(A,Q){try{return{path:Q,contents:Zh0(await VT5(A,"utf8"))}}catch{return null}}async function Vl4(A,Q){let B=[],$=UT5(),J=await YA.getThread({thread:Q},{config:A.configService}),Y=J.ok?J.result.thread.data:null;B.push({path:`${$}/thread.json`,contents:JSON.stringify(a$(Y),null,2)});let Z=await Gl4(ry(Q),`${$}/logs/${Q}.log`);if(Z)B.push(Z);let F=await Gl4(A.settingsFilePath,`${$}/settings/global.json`);if(F)B.push(F);let X=await oI()??"unknown",D=await YA.sendReport({threadID:Q,files:B,metadata:{clientVersion:"0.0.1778228828-g14902a",clientOS:`${k11.platform()} ${k11.release()} ${k11.arch()}`,installMethod:X}},{config:A.configService});if(!D.ok)throw Error(`Failed to submit report: ${D.error.message}`);return D.result.reportID}class S11{backStack=[];forwardStack=[];canNavigateBack(){return this.backStack.length>0}canNavigateForward(){return this.forwardStack.length>0}recordNavigation(A){if(!A)return;this.backStack.push(A),this.forwardStack.length=0}startBackNavigation(A){let Q=this.backStack.pop();if(!Q)return null;let B=Boolean(A);if(A)this.forwardStack.push(A);return{targetThreadID:Q,rollback:()=>{if(B)this.forwardStack.pop();this.backStack.push(Q)}}}startForwardNavigation(A){let Q=this.forwardStack.pop();if(!Q)return null;let B=Boolean(A);if(A)this.backStack.push(A);return{targetThreadID:Q,rollback:()=>{if(B)this.backStack.pop();this.forwardStack.push(Q)}}}}d0();F9();q2();async function Ul4(A,Q,B){let $;switch(B){case"private":$="This thread's visibility has been updated to private";break;case"workspace":$="This thread's visibility has been updated to workspace";break;case"group":$="This thread's visibility has been updated to group";break;case"unlisted":$="This thread's visibility has been updated to unlisted. Anyone on the Internet with the link can view it.";break;case"public":$="This thread's visibility has been updated to public. Anyone on the Internet can see it on your public profile, and it is publicly searchable.";break}try{let J=await YA.setThreadMeta({thread:Q,meta:dY(B)},{config:A.configService});if(!J.ok)throw Error(J.error.message);let Y=!1;if(B!=="private"){let F=NB(new URL(A.ampURL),Q).toString();try{await C4.instance.tuiInstance.clipboard.writeText(F),Y=!0}catch(X){j.error("Failed to copy thread URL after visibility update",{error:X})}}let Z=Y?`${$} Link copied to clipboard.`:$;return new cQ(Z)}catch(J){let Y=J instanceof Error?J.message:String(J);if(Y.includes("no-workspace"))return Error("You are not a member of any workspace.");if(Y.includes("groups-disabled"))return Error("The groups feature is not enabled for this workspace.");if(Y.includes("no-groups"))return Error("You are not a member of any groups.");return j.error("Unexpected failure to update thread visibility",{error:J}),Error(`Failed to update thread visibility for ${Q}`)}}class eD0 extends K5{offstage;constructor({key:A,offstage:Q=!0,child:B}){super({key:A,child:B});this.offstage=Q}createRenderObject(){return new v11(this.offstage)}updateRenderObject(A){if(A instanceof v11)A.offstage=this.offstage}}class v11 extends B4{_offstage;constructor(A){super();this._offstage=A}get offstage(){return this._offstage}set offstage(A){if(A===this._offstage)return;this._offstage=A,this.markNeedsLayout()}getMinIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicWidth(A)??0}getMaxIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicWidth(A)??0}getMinIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicHeight(A)??0}getMaxIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicHeight(A)??0}performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=this.children[0];if(this._offstage){if(this.setSize(0,0),Q)Q.layout(A),Q.setOffset(0,0)}else if(Q){Q.layout(A);let B=A.constrain(Q.size.width,Q.size.height);this.setSize(B.width,B.height),Q.setOffset(0,0)}else{let B=A.smallest;this.setSize(B.width,B.height)}super.performLayout()}paint(A,Q,B){if(this._offstage)return;super.paint(A,Q,B)}hitTest(A,Q,B,$){if(this._offstage)return!1;return super.hitTest(A,Q,B,$)}}class y11{_state=null;_attach(A){this._state=A}_detach(){this._state=null}push(A){this._state?.push(A)}pushWithDismiss(A){this._state?.pushWithDismiss(A)}pop(){return this._state?.pop()??!1}get canPop(){return this._state?.canPop??!1}}class x11 extends S0{root;controller;constructor(A){super();this.root=A.root,this.controller=A.controller}createState(){return new Kl4}}class Kl4 extends T0{entries=[];initState(){this.widget.controller._attach(this)}didUpdateWidget(A){if(A.controller!==this.widget.controller)A.controller._detach(),this.widget.controller._attach(this)}dispose(){this.widget.controller._detach(),super.dispose()}push(A){let Q=new Hj,B=this.makeScopedDismiss(Q);this.setState(()=>{this.entries.push({key:Q,widget:A,dismiss:B})})}pushWithDismiss(A){let Q=new Hj,B=this.makeScopedDismiss(Q),$=A(B);this.setState(()=>{this.entries.push({key:Q,widget:$,dismiss:B})})}pop(){if(this.entries.length===0)return!1;return this.setState(()=>{this.entries.pop()}),!0}get canPop(){return this.entries.length>0}makeScopedDismiss(A){return()=>{if(!this.mounted)return;let Q=this.entries[this.entries.length-1];if(!Q||Q.key!==A)return;this.setState(()=>{this.entries.pop()})}}build(A){let Q=[];Q.push(new eD0({offstage:this.entries.length>0,child:this.widget.root}));for(let B=0;B<this.entries.length;B++){let $=this.entries[B],J=B===this.entries.length-1,Y=J?new i4({autofocus:!0,debugLabel:`ModalStackEntry[${B}]`,onKey:(Z)=>{if(Z.key!=="Escape")return"ignored";return $.dismiss(),"handled"},child:$.widget}):$.widget;Q.push(new eD0({key:$.key,offstage:!J,child:Y}))}return new e4({fit:"expand",children:Q})}}class b11 extends H1{props;constructor(A){super();this.props=A}build(A){let Q=this.props.commands.filter(($)=>$.status.type!=="hidden"),B=KT5(Q);return new TA({header:"Command Palette",autofocus:!1,barrierOpaque:!1,chromePadding:K0.only({left:1,top:1,right:1}),footer:"none",onDismiss:this.props.onDismiss,child:new b6({items:Q,showBorder:!1,getLabel:($)=>{let J=f11($);return $.keywords&&$.keywords.length>0?`${J} ${$.keywords.join(" ").toLowerCase()}`:J},sortItems:($,J,Y)=>{if(Y===""){let G=$.item.status.type==="disabled"?1:0,V=J.item.status.type==="disabled"?1:0;if(G!==V)return G-V;let U=$.item.sortBoost??0,K=J.item.sortBoost??0;if(U!==K)return K-U;let E=$.item.noun?.toLowerCase()??"",z=J.item.noun?.toLowerCase()??"";if(E!==z)return E<z?-1:1;return 0}let Z=fj($.item.verb.toLowerCase(),Y),F=fj(J.item.verb.toLowerCase(),Y);if(Z!==F)return F-Z;let X=fj(f11($.item),Y),D=fj(f11(J.item),Y);if(X!==D)return D-X;return J.score-$.score},isItemDisabled:($)=>$.status.type==="disabled",buildDisabledReasonWidget:($,J)=>{if($.status.type!=="disabled")return;let{colors:Y}=P0.of(J);return new p({text:new C($.status.reason,new v({color:Y.mutedForeground,dim:!0})),textAlign:"center"})},renderItem:($,J,Y,Z)=>new El4({command:$,isSelected:J,isDisabled:Y,categoryWidth:B,buildContext:Z}),onAccept:($)=>{this.props.onAccept($)},onDismiss:this.props.onDismiss})})}}class El4 extends H1{props;constructor(A){super();this.props=A}build(A){let{command:Q,isSelected:B,isDisabled:$,categoryWidth:J,buildContext:Y}=this.props,Z=P0.of(Y),{colors:F,app:X}=Z,D=B?X.selectionBackground:void 0,G=B?X.selectionForeground:F.foreground,V=B?G:F.mutedForeground,U=new p({text:new C(Q.noun?.toLowerCase()??"",new v({color:V,dim:$||!B})),textAlign:"right"}),K=[new C(Q.verb.toLowerCase(),new v({color:G,bold:!0,dim:$}))];if($)K.push(new C(" (unavailable)",new v({color:G,dim:!0})));let E=p.spans(K),z=[{child:U,fixedWidth:J},{child:E,expanded:!0}];if(Q.shortcut)z.push({child:ET5(Q.shortcut,Z,$)});return new zl4({columns:z,padding:K0.horizontal(1),backgroundColor:D})}}function f11(A){return A.noun?`${A.noun.toLowerCase()} ${A.verb.toLowerCase()}`:A.verb.toLowerCase()}function KT5(A){return A.reduce((Q,B)=>{return B.noun?Math.max(Q,d4(B.noun)):Q},0)}function ET5(A,Q,B){let{colors:$,app:J}=Q,Y=new v({color:$.mutedForeground,dim:B}),Z=[];for(let F of A.modifiers()){if(Z.length>0)Z.push(new C(" ",Y));Z.push(new C(F,new v({color:J.keybind,bold:!0,dim:B})))}if(Z.length>0)Z.push(new C(" ",Y));return Z.push(new C(A.key,new v({color:J.keybind,bold:!0,dim:B}))),p.spans(Z)}class zl4 extends H1{props;constructor(A){super();this.props=A}build(A){let{columns:Q,gap:B=2,padding:$,backgroundColor:J}=this.props,Y=[];for(let F=0;F<Q.length;F++){let X=Q[F];if(F>0&&B>0)Y.push(new U0({width:B}));if(X.fixedWidth!==void 0)Y.push(new U0({width:X.fixedWidth,child:X.child}));else if(X.expanded)Y.push(new R1({child:X.child}));else Y.push(X.child)}let Z=new r0({crossAxisAlignment:"start",children:Y});if(!$&&!J)return Z;return new g0({decoration:J?{color:J}:void 0,padding:$,child:Z})}}class u11{#A=[];#Q=new Set;get commands(){return this.#A}register(A){return this.#A.push(A),this.#B(),()=>{let Q=this.#A.indexOf(A);if(Q===-1)return;this.#A.splice(Q,1),this.#B()}}addListener(A){this.#Q.add(A)}removeListener(A){this.#Q.delete(A)}#B(){for(let A of this.#Q)A()}}class nY extends W6{commandRegistry;constructor({commandRegistry:A,child:Q}){super({child:Q});this.commandRegistry=A}updateShouldNotify(A){return!1}static of(A){let Q=nY.maybeOf(A);if(!Q)throw Error("No NeoCommandRegistryProvider found in widget tree");return Q}static maybeOf(A){return A.dependOnInheritedWidgetOfExactType(nY)?.commandRegistry??null}}class h11 extends S0{onDismiss;constructor(A){super();this.onDismiss=A.onDismiss}createState(){return new Wl4}}class Wl4 extends T0{modalStack=new y11;commandRegistry=null;initState(){super.initState(),queueMicrotask(()=>{if(!this.mounted)return;let A=nY.of(this.context);this.commandRegistry=A,A.addListener(this.onCommandsChanged)})}dispose(){this.commandRegistry?.removeListener(this.onCommandsChanged),this.commandRegistry=null,super.dispose()}onCommandsChanged=()=>{this.setState()};build(A){let Q=nY.of(A).commands,B=new b11({commands:Q,onAccept:($)=>{$.run(this.modalStack,A,this.widget.onDismiss)},onDismiss:()=>{if(this.modalStack.canPop)this.modalStack.pop();else this.widget.onDismiss()}});return new x11({root:B,controller:this.modalStack})}}var g11=[{description:"Move cursor up/down",methods:[{keys:["↑"]},{keys:["↓"]}]},{description:"Move cursor left/right",methods:[{keys:["←"]},{keys:["→"]},{input:"B",keys:["Ctrl"]},{input:"F",keys:["Ctrl"]}]},{description:"Insert newline",methods:[{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!0},{description:"Insert newline",methods:[{keys:["Enter"]},{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!1},{description:"Submit message",methods:[{keys:["Enter"]}],submitOnEnterOnly:!0},{description:"Submit message",methods:[{keys:["Ctrl/Cmd","Enter"]}],submitOnEnterOnly:!1},{description:"Clear input",methods:[{keys:["Escape"]}]},{description:"Edit prompt in $EDITOR",methods:[{input:"G",keys:["Ctrl"]}]},{description:"Navigate history (previous/next)",methods:[{input:"P",keys:["Ctrl"]},{input:"N",keys:["Ctrl"]}]},{description:"Jump to start of line",methods:[{keys:["Cmd","←"]},{input:"A",keys:["Ctrl"]}]},{description:"Jump to end of line",methods:[{keys:["Cmd","→"]},{input:"E",keys:["Ctrl"]}]},{description:"Jump to previous word",methods:[{keys:["Alt","←"]},{keys:["Ctrl","←"]},{input:"B",keys:["Alt"]}]},{description:"Jump to next word",methods:[{keys:["Alt","→"]},{keys:["Ctrl","→"]},{input:"F",keys:["Alt"]}]},{description:"Delete character backward",methods:[{keys:["Backspace"]},{input:"H",keys:["Ctrl"]}]},{description:"Delete word backward",methods:[{keys:["Alt","Backspace"]},{input:"W",keys:["Ctrl"]}]},{description:"Delete character forward",methods:[{keys:["Delete"]},{input:"D",keys:["Ctrl"]}]},{description:"Delete to start of line",methods:[{keys:["Cmd","Backspace"]},{input:"U",keys:["Ctrl"]}]},{description:"Delete to end of line",methods:[{input:"K",keys:["Ctrl"]}]},{description:"Yank (paste deleted text)",methods:[{input:"Y",keys:["Ctrl"]}]},{description:"Paste image from clipboard",methods:[{input:"V",keys:["Ctrl"]}]},{description:"Switch agent mode",methods:[{input:"S",keys:["Ctrl"]},{input:"S",keys:["Alt"]}]},{description:"Toggle reasoning effort",methods:[{input:"D",keys:["Alt"]}]},{description:"Open command palette",methods:[{input:"O",keys:["Ctrl"]}]},{description:"Mention files",methods:[{keys:["@"]}]},{description:"Mention threads",methods:[{keys:["@@"]}]},{description:"Show prompt history",methods:[{input:"R",keys:["Ctrl"]}]},{description:"Toggle inline shortcuts help",methods:[{keys:["?"]}]},{description:"Toggle thinking/dense view",methods:[{input:"T",keys:["Alt"]}]}],m11=[{description:"Page scroll",methods:[{keys:["Pg Up"]},{keys:["Pg Down"]}]},{description:"Half-page scroll",methods:[{input:"K",keys:["Alt"]},{input:"J",keys:["Alt"]}]},{description:"Mouse wheel scroll",methods:[{keys:["Mouse Wheel"]}]},{description:"Jump to first message",methods:[{keys:["Home"]}]},{description:"Jump to bottom of screen",methods:[{keys:["End"]}]},{description:"Navigate to previous messages",methods:[{keys:["Tab"]},{keys:["Shift","Tab"]}]}];class AG0 extends H1{items;renderRow;constructor({items:A,renderRow:Q}){super();this.items=A,this.renderRow=Q}build(A){let B=s1.of(A).size.width,$=50,J=B<50,Y=[];for(let Z of this.items){let[F,X]=this.renderRow(Z),D;if(J)D=new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[F,new f0({padding:K0.only({left:4}),child:X})]});else D=new r0({crossAxisAlignment:"start",children:[new R1({flex:1,child:F}),new U0({width:1}),new R1({flex:1,child:X})]});Y.push(new f0({padding:K0.horizontal(6),child:D}))}return new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:Y})}}class p11 extends S0{commands;submitOnEnter;constructor({key:A,commands:Q,submitOnEnter:B}){super(A?{key:A}:{});this.commands=Q,this.submitOnEnter=B??!0}createState(){return new Hl4}}class Hl4 extends T0{scrollController;initState(){this.scrollController=new aA,this.scrollController.disableFollowMode(),this.scrollController.jumpTo(0)}dispose(){}build(A){let B=O1.of(A).colorScheme,J=P0.of(A).app,Y=s1.of(A),Z=new v({color:B.primary,bold:!0}),F=new v({color:B.secondary,bold:!0}),X=new v({color:J.keybind}),D=new v({color:J.command}),G=new v({color:B.foreground}),V=new v({color:B.foreground}),U=Y.size.width,K=Y.size.height,E=U-4,z=K-4,W=Math.max(40,Math.min(80,E)),H=new Set(["permissions-disable"]),I=[...this.widget.commands.filter((O)=>{let P=O.noun?.toLowerCase();return P!=="dev"&&P!=="debug"&&!O.id.startsWith("debug-")&&!H.has(O.id)})].sort((O,P)=>{let T=(O.noun??"").toLowerCase(),k=(P.noun??"").toLowerCase(),x=T.localeCompare(k);if(x!==0)return x;let h=O.verb.toLowerCase(),u=P.verb.toLowerCase(),S=h.localeCompare(u);if(S!==0)return S;return O.id.localeCompare(P.id)}),N=new _A({autofocus:!0,controller:this.scrollController,child:new g0({constraints:new w1(W,W,0,Number.POSITIVE_INFINITY),child:new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[new a1({child:new p({text:new C(`Amp CLI - Help & Keyboard Shortcuts
|
|
5698
|
+
${B.errorMessage??""}`;if(Q.add($),this.pluginErrorToastKeys.has($))continue;this.options.toastController.show(this.formatPluginErrorToast(B),"error",8000)}this.pluginErrorToastKeys=Q}formatPluginErrorToast(A){let Q=A.uri.toString();return`Plugin failed: ${Q.split("/").pop()??Q}. See logs: ${this.options.neoContext.logFilePath}`}createPluginCommand(A){return{noun:A.category,verb:A.title,description:A.description??`Run plugin command ${A.category}: ${A.title}`,keywords:["plugin",A.pluginName,A.id],status:{type:"enabled"},run:async(Q,B,$)=>{$();try{await this.options.neoContext.pluginService?.commands.execute(A.pluginName,A.id,{threadID:this.options.getActiveThreadID()})}catch(J){j.error("Neo plugin command failed",{error:J,command:A}),this.options.toastController.show(J instanceof Error?J.message:String(J),"error",5000)}}}}showInputDialog=(A)=>{return new Promise((Q)=>{if(this.disposed||!this.options.state.mounted){Q(void 0);return}this.enqueueDialog({kind:"input",options:A,resolve:Q})})};showConfirmDialog=(A)=>{return new Promise((Q)=>{if(this.disposed||!this.options.state.mounted){Q(!1);return}this.enqueueDialog({kind:"confirm",options:A,resolve:Q})})};showSelectDialog=(A)=>{return new Promise((Q)=>{if(this.disposed||!this.options.state.mounted){Q(void 0);return}this.enqueueDialog({kind:"select",options:A,resolve:Q})})};cancelPendingDialogs(){let A=[];if(this.activeDialog)A.push(this.activeDialog);A.push(...this.queuedDialogs),this.activeDialog=null,this.queuedDialogs=[];for(let Q of A)this.cancelDialog(Q)}cancelDialog(A){switch(A.kind){case"input":A.resolve(void 0);return;case"confirm":A.resolve(!1);return;case"select":A.resolve(void 0);return}}enqueueDialog(A){if(this.activeDialog){this.queuedDialogs.push(A);return}this.options.commandPalette.disable(),this.options.state.setState(()=>{this.activeDialog=A})}resolveInputDialog(A,Q){if(this.activeDialog!==A)return;this.advanceDialog(),A.resolve(Q)}resolveConfirmDialog(A,Q){if(this.activeDialog!==A)return;this.advanceDialog(),A.resolve(Q)}resolveSelectDialog(A,Q){if(this.activeDialog!==A)return;this.advanceDialog(),A.resolve(Q)}advanceDialog(){this.updateDialogState(()=>{this.activeDialog=this.queuedDialogs.shift()??null})}updateDialogState(A){if(this.options.state.mounted)this.options.state.setState(A);else A()}}Bl();q2();import{readFile as VT5}from"node:fs/promises";import k11 from"node:os";function UT5(A=new Date){return A.toISOString().replaceAll("-","").replaceAll(":","").slice(0,15)+"Z"}async function Gl4(A,Q){try{return{path:Q,contents:Zh0(await VT5(A,"utf8"))}}catch{return null}}async function Vl4(A,Q){let B=[],$=UT5(),J=await YA.getThread({thread:Q},{config:A.configService}),Y=J.ok?J.result.thread.data:null;B.push({path:`${$}/thread.json`,contents:JSON.stringify(a$(Y),null,2)});let Z=await Gl4(ry(Q),`${$}/logs/${Q}.log`);if(Z)B.push(Z);let F=await Gl4(A.settingsFilePath,`${$}/settings/global.json`);if(F)B.push(F);let X=await oI()??"unknown",D=await YA.sendReport({threadID:Q,files:B,metadata:{clientVersion:"0.0.1778235017-g38b248",clientOS:`${k11.platform()} ${k11.release()} ${k11.arch()}`,installMethod:X}},{config:A.configService});if(!D.ok)throw Error(`Failed to submit report: ${D.error.message}`);return D.result.reportID}class S11{backStack=[];forwardStack=[];canNavigateBack(){return this.backStack.length>0}canNavigateForward(){return this.forwardStack.length>0}recordNavigation(A){if(!A)return;this.backStack.push(A),this.forwardStack.length=0}startBackNavigation(A){let Q=this.backStack.pop();if(!Q)return null;let B=Boolean(A);if(A)this.forwardStack.push(A);return{targetThreadID:Q,rollback:()=>{if(B)this.forwardStack.pop();this.backStack.push(Q)}}}startForwardNavigation(A){let Q=this.forwardStack.pop();if(!Q)return null;let B=Boolean(A);if(A)this.backStack.push(A);return{targetThreadID:Q,rollback:()=>{if(B)this.backStack.pop();this.forwardStack.push(Q)}}}}d0();F9();q2();async function Ul4(A,Q,B){let $;switch(B){case"private":$="This thread's visibility has been updated to private";break;case"workspace":$="This thread's visibility has been updated to workspace";break;case"group":$="This thread's visibility has been updated to group";break;case"unlisted":$="This thread's visibility has been updated to unlisted. Anyone on the Internet with the link can view it.";break;case"public":$="This thread's visibility has been updated to public. Anyone on the Internet can see it on your public profile, and it is publicly searchable.";break}try{let J=await YA.setThreadMeta({thread:Q,meta:dY(B)},{config:A.configService});if(!J.ok)throw Error(J.error.message);let Y=!1;if(B!=="private"){let F=NB(new URL(A.ampURL),Q).toString();try{await C4.instance.tuiInstance.clipboard.writeText(F),Y=!0}catch(X){j.error("Failed to copy thread URL after visibility update",{error:X})}}let Z=Y?`${$} Link copied to clipboard.`:$;return new cQ(Z)}catch(J){let Y=J instanceof Error?J.message:String(J);if(Y.includes("no-workspace"))return Error("You are not a member of any workspace.");if(Y.includes("groups-disabled"))return Error("The groups feature is not enabled for this workspace.");if(Y.includes("no-groups"))return Error("You are not a member of any groups.");return j.error("Unexpected failure to update thread visibility",{error:J}),Error(`Failed to update thread visibility for ${Q}`)}}class eD0 extends K5{offstage;constructor({key:A,offstage:Q=!0,child:B}){super({key:A,child:B});this.offstage=Q}createRenderObject(){return new v11(this.offstage)}updateRenderObject(A){if(A instanceof v11)A.offstage=this.offstage}}class v11 extends B4{_offstage;constructor(A){super();this._offstage=A}get offstage(){return this._offstage}set offstage(A){if(A===this._offstage)return;this._offstage=A,this.markNeedsLayout()}getMinIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicWidth(A)??0}getMaxIntrinsicWidth(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicWidth(A)??0}getMinIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMinIntrinsicHeight(A)??0}getMaxIntrinsicHeight(A){if(this._offstage)return 0;return this.children[0]?.getMaxIntrinsicHeight(A)??0}performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=this.children[0];if(this._offstage){if(this.setSize(0,0),Q)Q.layout(A),Q.setOffset(0,0)}else if(Q){Q.layout(A);let B=A.constrain(Q.size.width,Q.size.height);this.setSize(B.width,B.height),Q.setOffset(0,0)}else{let B=A.smallest;this.setSize(B.width,B.height)}super.performLayout()}paint(A,Q,B){if(this._offstage)return;super.paint(A,Q,B)}hitTest(A,Q,B,$){if(this._offstage)return!1;return super.hitTest(A,Q,B,$)}}class y11{_state=null;_attach(A){this._state=A}_detach(){this._state=null}push(A){this._state?.push(A)}pushWithDismiss(A){this._state?.pushWithDismiss(A)}pop(){return this._state?.pop()??!1}get canPop(){return this._state?.canPop??!1}}class x11 extends S0{root;controller;constructor(A){super();this.root=A.root,this.controller=A.controller}createState(){return new Kl4}}class Kl4 extends T0{entries=[];initState(){this.widget.controller._attach(this)}didUpdateWidget(A){if(A.controller!==this.widget.controller)A.controller._detach(),this.widget.controller._attach(this)}dispose(){this.widget.controller._detach(),super.dispose()}push(A){let Q=new Hj,B=this.makeScopedDismiss(Q);this.setState(()=>{this.entries.push({key:Q,widget:A,dismiss:B})})}pushWithDismiss(A){let Q=new Hj,B=this.makeScopedDismiss(Q),$=A(B);this.setState(()=>{this.entries.push({key:Q,widget:$,dismiss:B})})}pop(){if(this.entries.length===0)return!1;return this.setState(()=>{this.entries.pop()}),!0}get canPop(){return this.entries.length>0}makeScopedDismiss(A){return()=>{if(!this.mounted)return;let Q=this.entries[this.entries.length-1];if(!Q||Q.key!==A)return;this.setState(()=>{this.entries.pop()})}}build(A){let Q=[];Q.push(new eD0({offstage:this.entries.length>0,child:this.widget.root}));for(let B=0;B<this.entries.length;B++){let $=this.entries[B],J=B===this.entries.length-1,Y=J?new i4({autofocus:!0,debugLabel:`ModalStackEntry[${B}]`,onKey:(Z)=>{if(Z.key!=="Escape")return"ignored";return $.dismiss(),"handled"},child:$.widget}):$.widget;Q.push(new eD0({key:$.key,offstage:!J,child:Y}))}return new e4({fit:"expand",children:Q})}}class b11 extends H1{props;constructor(A){super();this.props=A}build(A){let Q=this.props.commands.filter(($)=>$.status.type!=="hidden"),B=KT5(Q);return new TA({header:"Command Palette",autofocus:!1,barrierOpaque:!1,chromePadding:K0.only({left:1,top:1,right:1}),footer:"none",onDismiss:this.props.onDismiss,child:new b6({items:Q,showBorder:!1,getLabel:($)=>{let J=f11($);return $.keywords&&$.keywords.length>0?`${J} ${$.keywords.join(" ").toLowerCase()}`:J},sortItems:($,J,Y)=>{if(Y===""){let G=$.item.status.type==="disabled"?1:0,V=J.item.status.type==="disabled"?1:0;if(G!==V)return G-V;let U=$.item.sortBoost??0,K=J.item.sortBoost??0;if(U!==K)return K-U;let E=$.item.noun?.toLowerCase()??"",z=J.item.noun?.toLowerCase()??"";if(E!==z)return E<z?-1:1;return 0}let Z=fj($.item.verb.toLowerCase(),Y),F=fj(J.item.verb.toLowerCase(),Y);if(Z!==F)return F-Z;let X=fj(f11($.item),Y),D=fj(f11(J.item),Y);if(X!==D)return D-X;return J.score-$.score},isItemDisabled:($)=>$.status.type==="disabled",buildDisabledReasonWidget:($,J)=>{if($.status.type!=="disabled")return;let{colors:Y}=P0.of(J);return new p({text:new C($.status.reason,new v({color:Y.mutedForeground,dim:!0})),textAlign:"center"})},renderItem:($,J,Y,Z)=>new El4({command:$,isSelected:J,isDisabled:Y,categoryWidth:B,buildContext:Z}),onAccept:($)=>{this.props.onAccept($)},onDismiss:this.props.onDismiss})})}}class El4 extends H1{props;constructor(A){super();this.props=A}build(A){let{command:Q,isSelected:B,isDisabled:$,categoryWidth:J,buildContext:Y}=this.props,Z=P0.of(Y),{colors:F,app:X}=Z,D=B?X.selectionBackground:void 0,G=B?X.selectionForeground:F.foreground,V=B?G:F.mutedForeground,U=new p({text:new C(Q.noun?.toLowerCase()??"",new v({color:V,dim:$||!B})),textAlign:"right"}),K=[new C(Q.verb.toLowerCase(),new v({color:G,bold:!0,dim:$}))];if($)K.push(new C(" (unavailable)",new v({color:G,dim:!0})));let E=p.spans(K),z=[{child:U,fixedWidth:J},{child:E,expanded:!0}];if(Q.shortcut)z.push({child:ET5(Q.shortcut,Z,$)});return new zl4({columns:z,padding:K0.horizontal(1),backgroundColor:D})}}function f11(A){return A.noun?`${A.noun.toLowerCase()} ${A.verb.toLowerCase()}`:A.verb.toLowerCase()}function KT5(A){return A.reduce((Q,B)=>{return B.noun?Math.max(Q,d4(B.noun)):Q},0)}function ET5(A,Q,B){let{colors:$,app:J}=Q,Y=new v({color:$.mutedForeground,dim:B}),Z=[];for(let F of A.modifiers()){if(Z.length>0)Z.push(new C(" ",Y));Z.push(new C(F,new v({color:J.keybind,bold:!0,dim:B})))}if(Z.length>0)Z.push(new C(" ",Y));return Z.push(new C(A.key,new v({color:J.keybind,bold:!0,dim:B}))),p.spans(Z)}class zl4 extends H1{props;constructor(A){super();this.props=A}build(A){let{columns:Q,gap:B=2,padding:$,backgroundColor:J}=this.props,Y=[];for(let F=0;F<Q.length;F++){let X=Q[F];if(F>0&&B>0)Y.push(new U0({width:B}));if(X.fixedWidth!==void 0)Y.push(new U0({width:X.fixedWidth,child:X.child}));else if(X.expanded)Y.push(new R1({child:X.child}));else Y.push(X.child)}let Z=new r0({crossAxisAlignment:"start",children:Y});if(!$&&!J)return Z;return new g0({decoration:J?{color:J}:void 0,padding:$,child:Z})}}class u11{#A=[];#Q=new Set;get commands(){return this.#A}register(A){return this.#A.push(A),this.#B(),()=>{let Q=this.#A.indexOf(A);if(Q===-1)return;this.#A.splice(Q,1),this.#B()}}addListener(A){this.#Q.add(A)}removeListener(A){this.#Q.delete(A)}#B(){for(let A of this.#Q)A()}}class nY extends W6{commandRegistry;constructor({commandRegistry:A,child:Q}){super({child:Q});this.commandRegistry=A}updateShouldNotify(A){return!1}static of(A){let Q=nY.maybeOf(A);if(!Q)throw Error("No NeoCommandRegistryProvider found in widget tree");return Q}static maybeOf(A){return A.dependOnInheritedWidgetOfExactType(nY)?.commandRegistry??null}}class h11 extends S0{onDismiss;constructor(A){super();this.onDismiss=A.onDismiss}createState(){return new Wl4}}class Wl4 extends T0{modalStack=new y11;commandRegistry=null;initState(){super.initState(),queueMicrotask(()=>{if(!this.mounted)return;let A=nY.of(this.context);this.commandRegistry=A,A.addListener(this.onCommandsChanged)})}dispose(){this.commandRegistry?.removeListener(this.onCommandsChanged),this.commandRegistry=null,super.dispose()}onCommandsChanged=()=>{this.setState()};build(A){let Q=nY.of(A).commands,B=new b11({commands:Q,onAccept:($)=>{$.run(this.modalStack,A,this.widget.onDismiss)},onDismiss:()=>{if(this.modalStack.canPop)this.modalStack.pop();else this.widget.onDismiss()}});return new x11({root:B,controller:this.modalStack})}}var g11=[{description:"Move cursor up/down",methods:[{keys:["↑"]},{keys:["↓"]}]},{description:"Move cursor left/right",methods:[{keys:["←"]},{keys:["→"]},{input:"B",keys:["Ctrl"]},{input:"F",keys:["Ctrl"]}]},{description:"Insert newline",methods:[{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!0},{description:"Insert newline",methods:[{keys:["Enter"]},{keys:["Shift","Enter"]},{keys:["Alt","Enter"]},{input:"J",keys:["Ctrl"]}],submitOnEnterOnly:!1},{description:"Submit message",methods:[{keys:["Enter"]}],submitOnEnterOnly:!0},{description:"Submit message",methods:[{keys:["Ctrl/Cmd","Enter"]}],submitOnEnterOnly:!1},{description:"Clear input",methods:[{keys:["Escape"]}]},{description:"Edit prompt in $EDITOR",methods:[{input:"G",keys:["Ctrl"]}]},{description:"Navigate history (previous/next)",methods:[{input:"P",keys:["Ctrl"]},{input:"N",keys:["Ctrl"]}]},{description:"Jump to start of line",methods:[{keys:["Cmd","←"]},{input:"A",keys:["Ctrl"]}]},{description:"Jump to end of line",methods:[{keys:["Cmd","→"]},{input:"E",keys:["Ctrl"]}]},{description:"Jump to previous word",methods:[{keys:["Alt","←"]},{keys:["Ctrl","←"]},{input:"B",keys:["Alt"]}]},{description:"Jump to next word",methods:[{keys:["Alt","→"]},{keys:["Ctrl","→"]},{input:"F",keys:["Alt"]}]},{description:"Delete character backward",methods:[{keys:["Backspace"]},{input:"H",keys:["Ctrl"]}]},{description:"Delete word backward",methods:[{keys:["Alt","Backspace"]},{input:"W",keys:["Ctrl"]}]},{description:"Delete character forward",methods:[{keys:["Delete"]},{input:"D",keys:["Ctrl"]}]},{description:"Delete to start of line",methods:[{keys:["Cmd","Backspace"]},{input:"U",keys:["Ctrl"]}]},{description:"Delete to end of line",methods:[{input:"K",keys:["Ctrl"]}]},{description:"Yank (paste deleted text)",methods:[{input:"Y",keys:["Ctrl"]}]},{description:"Paste image from clipboard",methods:[{input:"V",keys:["Ctrl"]}]},{description:"Switch agent mode",methods:[{input:"S",keys:["Ctrl"]},{input:"S",keys:["Alt"]}]},{description:"Toggle reasoning effort",methods:[{input:"D",keys:["Alt"]}]},{description:"Open command palette",methods:[{input:"O",keys:["Ctrl"]}]},{description:"Mention files",methods:[{keys:["@"]}]},{description:"Mention threads",methods:[{keys:["@@"]}]},{description:"Show prompt history",methods:[{input:"R",keys:["Ctrl"]}]},{description:"Toggle inline shortcuts help",methods:[{keys:["?"]}]},{description:"Toggle thinking/dense view",methods:[{input:"T",keys:["Alt"]}]}],m11=[{description:"Page scroll",methods:[{keys:["Pg Up"]},{keys:["Pg Down"]}]},{description:"Half-page scroll",methods:[{input:"K",keys:["Alt"]},{input:"J",keys:["Alt"]}]},{description:"Mouse wheel scroll",methods:[{keys:["Mouse Wheel"]}]},{description:"Jump to first message",methods:[{keys:["Home"]}]},{description:"Jump to bottom of screen",methods:[{keys:["End"]}]},{description:"Navigate to previous messages",methods:[{keys:["Tab"]},{keys:["Shift","Tab"]}]}];class AG0 extends H1{items;renderRow;constructor({items:A,renderRow:Q}){super();this.items=A,this.renderRow=Q}build(A){let B=s1.of(A).size.width,$=50,J=B<50,Y=[];for(let Z of this.items){let[F,X]=this.renderRow(Z),D;if(J)D=new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[F,new f0({padding:K0.only({left:4}),child:X})]});else D=new r0({crossAxisAlignment:"start",children:[new R1({flex:1,child:F}),new U0({width:1}),new R1({flex:1,child:X})]});Y.push(new f0({padding:K0.horizontal(6),child:D}))}return new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:Y})}}class p11 extends S0{commands;submitOnEnter;constructor({key:A,commands:Q,submitOnEnter:B}){super(A?{key:A}:{});this.commands=Q,this.submitOnEnter=B??!0}createState(){return new Hl4}}class Hl4 extends T0{scrollController;initState(){this.scrollController=new aA,this.scrollController.disableFollowMode(),this.scrollController.jumpTo(0)}dispose(){}build(A){let B=O1.of(A).colorScheme,J=P0.of(A).app,Y=s1.of(A),Z=new v({color:B.primary,bold:!0}),F=new v({color:B.secondary,bold:!0}),X=new v({color:J.keybind}),D=new v({color:J.command}),G=new v({color:B.foreground}),V=new v({color:B.foreground}),U=Y.size.width,K=Y.size.height,E=U-4,z=K-4,W=Math.max(40,Math.min(80,E)),H=new Set(["permissions-disable"]),I=[...this.widget.commands.filter((O)=>{let P=O.noun?.toLowerCase();return P!=="dev"&&P!=="debug"&&!O.id.startsWith("debug-")&&!H.has(O.id)})].sort((O,P)=>{let T=(O.noun??"").toLowerCase(),k=(P.noun??"").toLowerCase(),x=T.localeCompare(k);if(x!==0)return x;let h=O.verb.toLowerCase(),u=P.verb.toLowerCase(),S=h.localeCompare(u);if(S!==0)return S;return O.id.localeCompare(P.id)}),N=new _A({autofocus:!0,controller:this.scrollController,child:new g0({constraints:new w1(W,W,0,Number.POSITIVE_INFINITY),child:new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[new a1({child:new p({text:new C(`Amp CLI - Help & Keyboard Shortcuts
|
|
5699
5699
|
`,Z)})}),new U0({height:1}),new f0({padding:K0.horizontal(2),child:new p({text:new C(`Editor Shortcuts
|
|
5700
5700
|
`,F)})}),new AG0({items:g11.filter((O)=>O.submitOnEnterOnly===void 0||O.submitOnEnterOnly===this.widget.submitOnEnter),renderRow:(O)=>{let P=[];for(let k of O.methods){let x=this.buildCleanKeyCombination(k);P.push(x)}let T=P.join(", ");return[new p({text:new C(T,X)}),new p({text:new C(O.description,G)})]}}),new U0({height:1}),new f0({padding:K0.horizontal(2),child:new p({text:new C(`Scrolling & Navigation
|
|
5701
5701
|
`,F)})}),new AG0({items:m11,renderRow:(O)=>{let P=[];for(let k of O.methods){let x=this.buildCleanKeyCombination(k);P.push(x)}let T=P.join(", ");return[new p({text:new C(T,X)}),new p({text:new C(O.description,G)})]}}),new U0({height:1}),new f0({padding:K0.horizontal(2),child:new p({text:new C(`Command Palette Commands
|
|
@@ -5761,13 +5761,13 @@ Recent keys (newest first)
|
|
|
5761
5761
|
return ""
|
|
5762
5762
|
end try
|
|
5763
5763
|
`;try{let{stdout:$}=await sj("osascript",["-e",B]);if($.trim()===Q)try{let Y=await b41(Q);if(Y.size>0)return j.debug(`Successfully pasted image from clipboard (${A.extension})`,{tempFile:Q,size:Y.size}),Q;j.debug(`Skipping empty file for ${A.extension}`),await ai4(Q)}catch{j.debug(`File not created for ${A.extension}`)}}catch($){j.debug(`Failed to paste ${A.extension} image with osascript`,{error:$})}}return null}async function vS5(){for(let A of u41){if(!A.mimeType)continue;try{let{stdout:Q}=await sj("wl-paste",["--type",A.mimeType,"--no-newline"],{encoding:"buffer",maxBuffer:52428800,timeout:3000});if(Q.length>0){let B=WG0(A.extension);return await oi4(B,Q),j.debug(`Successfully pasted image from clipboard (${A.extension})`,{tempFile:B}),B}}catch(Q){j.debug(`Failed to paste ${A.extension} image with wl-paste`,{error:Q})}}return null}async function yS5(){for(let A of u41){if(!A.mimeType)continue;try{let{stdout:Q}=await sj("xclip",["-selection","clipboard","-t",A.mimeType,"-o"],{encoding:"buffer",maxBuffer:52428800,timeout:3000});if(Q.length>0){let B=WG0(A.extension);return await oi4(B,Q),j.debug(`Successfully pasted image from clipboard (${A.extension})`,{tempFile:B}),B}}catch(Q){j.debug(`Failed to paste ${A.extension} image with xclip`,{error:Q})}}return null}async function xS5(){let A=await si4();if(!A)return null;try{let Q=await b41(A);if(Q.size>0)return j.debug("Successfully pasted image from clipboard (png)",{tempFile:A,size:Q.size}),A;j.debug("Skipping empty file for png")}catch(Q){j.debug("Failed to read pasted image file from PowerShell path",{error:Q,pastedFilePath:A})}try{await ai4(A)}catch{}return null}async function fS5(){let A=await si4();if(!A)return null;try{if(!await f41("wslpath"))return j.debug("wslpath command is not available; cannot read clipboard image from WSL"),null;let Q=await kS5(A);if(!Q)return null;let B=await b41(Q);if(B.size===0)return j.debug("Skipping empty clipboard image file from Windows temp path",{windowsPath:A,wslPath:Q}),null;let $=WG0("png");return await CS5(Q,$),j.debug("Successfully pasted image from Windows clipboard in WSL",{windowsPath:A,wslPath:Q,linuxTempPath:$,size:B.size}),$}catch(Q){return j.debug("Failed to paste clipboard image in WSL",{error:Q,windowsPath:A}),null}finally{await TS5(A)}}async function If(){let A=ri4();if(A==="darwin")return SS5();if(A==="win32")return xS5();let Q=process.env.WAYLAND_DISPLAY&&await f41("wl-paste"),B=process.env.DISPLAY&&await f41("xclip");if(Q){let $=await vS5();if($!==null)return $}if(B){let $=await yS5();if($!==null)return $}if(jS5()){let $=await fS5();if($!==null)return $}return j.info("No clipboard tools available for image pasting"),null}class Bn4 extends A8{color;constructor({color:A,key:Q}){super({key:Q});this.color=A}createRenderObject(){return new $n4(this.color)}updateRenderObject(A){A.color=this.color}}class $n4 extends B4{color;constructor(A){super();this.color=A}performLayout(){let A=this._lastConstraints;if(A)this.setSize(A.maxWidth,1)}paint(A,Q,B){let $=Math.floor(this.size.width);for(let J=0;J<$;J++)A.setChar(Q+J,B,"─",{fg:this.color},1)}}var bS5=30,Jn4={keys:"Ctrl+O",description:"command palette"},Yn4={keys:"Ctrl+R",description:"prompt history"},uS5={keys:"$ or $$",description:"shell commands"},Zn4={keys:"Ctrl+V",description:"paste images"},HG0={keys:"Shift+Enter",description:"newline"},Fn4={keys:"Ctrl+S",description:"switch modes"},Xn4={keys:"Alt+D",description:"toggle reasoning effort"},Dn4={keys:"Alt+T",description:"expand/collapse details"},Gn4={keys:"Ctrl+G",description:"edit in $EDITOR"},Vn4={keys:"Tab/Shift+Tab",description:"navigate messages"},Un4={keys:"@ / @@",description:"mention files/threads"},Kn4={keys:"?",description:"toggle this help"},ti4={keys:"Ctrl/Cmd+Enter",description:"submit"},ei4={keys:"",description:""},hS5={left:[Jn4,uS5,HG0,Xn4,Gn4,Un4],right:[Yn4,Zn4,Fn4,Dn4,Vn4,Kn4]},gS5={left:[Jn4,Zn4,Fn4,Gn4,Un4,Kn4],right:[Yn4,HG0,Xn4,Dn4,Vn4]};function An4(A){if(!A.keys&&!A.description)return 0;return d4(A.keys)+1+d4(A.description)}function Qn4(A,Q,B){if(!A.keys&&!A.description)return[];return[new C(A.keys,Q),new C(" ",B),new C(A.description,B)]}function mS5(A,Q){let B=A==="neo"?gS5:hS5;if(Q)return B;return{left:B.left.map(($)=>$.keys===HG0.keys?ti4:$),right:B.right.map(($)=>$.keys===HG0.keys?ti4:$)}}function pS5({layout:A,submitOnEnter:Q,displayKeys:B}){let $=mS5(A,Q),J=(F)=>{return{keys:B(F.keys),description:F.description}},Y=[],Z=Math.max($.left.length,$.right.length);for(let F=0;F<Z;F++)Y.push({left:J($.left[F]??ei4),right:J($.right[F]??ei4)});return Y}class Xs extends H1{submitOnEnter;layout;constructor(A={}){super(A.key?{key:A.key}:{});this.submitOnEnter=A.submitOnEnter??!0,this.layout=A.layout??"classic"}build(A){let B=O1.of(A).colorScheme,J=P0.of(A).app,Y=new v({color:J.keybind}),Z=new v({color:B.foreground,dim:!0}),F=PD()&&!Zt0,X=(K)=>K==="Shift+Enter"&&F?"Alt+Enter":K,D=pS5({layout:this.layout,submitOnEnter:this.submitOnEnter,displayKeys:X}),G=Math.max(bS5,...D.map((K)=>An4(K.left))),V=D.map((K)=>{let E=An4(K.left),z=" ".repeat(Math.max(0,G-E));return new p({text:new C("",void 0,[...Qn4(K.left,Y,Z),new C(z+" ",Z),...Qn4(K.right,Y,Z)])})});if(F)V.push(new U0({height:1})),V.push(new T1({onClick:()=>mA(A,"https://ampcode.com/manual/appendix#amp-cli-tmux"),cursor:"pointer",child:new p({text:new C("",void 0,[new C("Enable ",Z),new C("extended-keys",new v({color:J.command})),new C(" in tmux to use ",Z),new C("Shift+Enter",Y),new C(". See ",Z),GA.createSpan("https://ampcode.com/manual/appendix#amp-cli-tmux","https://ampcode.com/manual/appendix#amp-cli-tmux",new v({color:J.link,underline:!0}))])})}));let U=new r0({children:[new R1({child:new Bn4({color:B.border})})]});return new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[...V,U]})}}class h41 extends Ef{_mode="auto";_isResizing=!1;_isHandleHovered=!1;get mode(){return this._mode}get isResizing(){return this._isResizing}get isHandleHovered(){return this._isHandleHovered}_update(A,Q,B){let $=this._mode!==A||this._isResizing!==Q||this._isHandleHovered!==B;if(this._mode=A,this._isResizing=Q,this._isHandleHovered=B,$)this.notifyListeners()}}class g41 extends S0{child;minRows;maxRows;initialRows;initialMode;dragThresholdRows;handleLeftInset;handleRightInset;onHandleDoubleClick;controller;constructor({key:A,child:Q,minRows:B=3,maxRows:$=12,initialRows:J=null,initialMode:Y="auto",dragThresholdRows:Z=0,handleLeftInset:F=0,handleRightInset:X=0,onHandleDoubleClick:D,controller:G}){super(A?{key:A}:{});if(B>$)throw Error("minRows must be <= maxRows");if(Z<0)throw Error("dragThresholdRows must be >= 0");if(X<0)throw Error("handleRightInset must be >= 0");if(F<0)throw Error("handleLeftInset must be >= 0");this.child=Q,this.minRows=B,this.maxRows=$,this.initialRows=J,this.initialMode=Y,this.dragThresholdRows=Z,this.handleLeftInset=F,this.handleRightInset=X,this.onHandleDoubleClick=D,this.controller=G}createState(){return new En4}}class En4 extends T0{_mode="auto";_heightRows=3;_dragSession=null;_isHandleHovered=!1;initState(){super.initState(),this._syncToInitialProps()}didUpdateWidget(A){if(super.didUpdateWidget(A),A.initialMode!==this.widget.initialMode||A.initialRows!==this.widget.initialRows){this._syncToInitialProps();return}this._heightRows=this._clampRows(this._heightRows)}build(A){let Q=this._mode==="manual"?new g0({height:this._heightRows,child:this.widget.child}):new g0({constraints:new w1(0,Number.POSITIVE_INFINITY,this.widget.minRows,this.widget.maxRows),child:this.widget.child});return new e4({children:[Q,this._buildHandleOverlay()]})}get _effectiveMinRows(){return this.widget.minRows}_buildHandleOverlay(){return new zA({top:0,left:this.widget.handleLeftInset,right:this.widget.handleRightInset,height:1,child:new T1({cursor:l6.NS_RESIZE,onClick:this._handleHandlePress,onDrag:this._handleHandleDrag,onRelease:this._handleHandleRelease,onEnter:()=>this._setHandleHovered(!0),onExit:()=>this._setHandleHovered(!1),child:new U0({height:1})})})}_notifyController(){this.widget.controller?._update(this._mode,!!this._dragSession,this._isHandleHovered)}_setHandleHovered(A){if(this._isHandleHovered===A)return;this.setState(()=>{this._isHandleHovered=A,this._notifyController()})}_handleHandlePress=(A)=>{if(A.button!=="left")return;let Q=this._currentRenderedHeightRows(),B=this._toTerminalRow(A.position.y),$=A.clickCount===2?this.widget.onHandleDoubleClick?.({mode:this._mode,currentRows:Q,minRows:this._effectiveMinRows,maxRows:this.widget.maxRows}):void 0,J=this._mode==="manual"&&A.clickCount===2&&$===void 0;this.setState(()=>{this._dragSession={modeAtStart:this._mode,baseHeightRows:Q,startRow:B,currentRow:B,resetToAutoOnRelease:J,doubleClickOverride:$},this._notifyController()})};_handleHandleDrag=(A)=>{if(A.button!=="left"||!this._dragSession)return;let Q=this._toTerminalRow(A.position.y),B=this._dragSession,$=Q-B.startRow,J=B.modeAtStart==="manual"||Math.abs($)>=this.widget.dragThresholdRows;this.setState(()=>{if(B.currentRow=Q,$!==0)B.resetToAutoOnRelease=!1,B.doubleClickOverride=void 0;if(J)this._mode="manual",this._heightRows=this._clampRows(B.baseHeightRows-$);this._notifyController()})};_handleHandleRelease=(A)=>{if(A.button!=="left"||!this._dragSession)return;let Q=this._dragSession,B=Q.currentRow-Q.startRow,$=Q.doubleClickOverride==="auto-min"&&B===0,J=Q.doubleClickOverride==="manual-max"&&B===0,Y=Q.resetToAutoOnRelease&&B===0,Z=Q.modeAtStart==="auto"&&this._mode==="auto"&&this.widget.dragThresholdRows===0&&B===0;this.setState(()=>{if($)this._mode="auto",this._heightRows=this._clampRows(this._effectiveMinRows);else if(J)this._mode="manual",this._heightRows=this._clampRows(this.widget.maxRows);else if(Y)this._mode="auto";else if(Z)this._mode="manual",this._heightRows=this._clampRows(Q.baseHeightRows);this._dragSession=null,this._notifyController()})};_syncToInitialProps(){this._mode=this.widget.initialMode,this._heightRows=this._resolveInitialRows(),this._dragSession=null,this._notifyController()}_resolveInitialRows(){return this._clampRows(this.widget.initialRows??this._effectiveMinRows)}_clampRows(A){return Math.max(this._effectiveMinRows,Math.min(A,this.widget.maxRows))}_currentRenderedHeightRows(){return this.context.findRenderObject()?.size.height??this._heightRows}_toTerminalRow(A){return Math.floor(A)}}var dS5=22,cS5=14;class m41 extends S0{childBuilder;minBodyRows;maxBodyRows;initialRows;initialMode;dragThresholdRows;onHandleDoubleClick;topLeftLabel;topRightLabel;bottomLeftLabel;bottomRightLabel;borderColor;topRightLabelHandleInset;constructor(A){let{key:Q,minBodyRows:B=3,maxBodyRows:$=12,initialRows:J=null,initialMode:Y="auto",dragThresholdRows:Z=0,onHandleDoubleClick:F,topLeftLabel:X,topRightLabel:D,bottomLeftLabel:G,bottomRightLabel:V,borderColor:U,topRightLabelHandleInset:K}=A;super(Q?{key:Q}:{});this.childBuilder="childBuilder"in A&&A.childBuilder?A.childBuilder:()=>A.child,this.minBodyRows=B,this.maxBodyRows=$,this.initialRows=J,this.initialMode=Y,this.dragThresholdRows=Z,this.onHandleDoubleClick=F,this.topLeftLabel=X,this.topRightLabel=D,this.bottomLeftLabel=G,this.bottomRightLabel=V,this.borderColor=U,this.topRightLabelHandleInset=K}createState(){return new zn4}}class zn4 extends T0{_controller=new h41;_onControllerChanged=()=>{this.setState(()=>{})};initState(){super.initState(),this._controller.addListener(this._onControllerChanged)}dispose(){this._controller.removeListener(this._onControllerChanged),this._controller.dispose(),super.dispose()}build(A){let Q=O1.of(A),B=this.widget.borderColor??Q.colorScheme.border,J=this._controller.isResizing||this._controller.isHandleHovered?2:1,Y=[];if(this.widget.topLeftLabel)Y.push({child:this.widget.topLeftLabel,position:"top",alignment:"left"});if(this.widget.topRightLabel)Y.push({child:this.widget.topRightLabel,position:"top",alignment:"right"});if(this.widget.bottomLeftLabel)Y.push({child:this.widget.bottomLeftLabel,position:"bottom",alignment:"left",offsetX:-1});if(this.widget.bottomRightLabel)Y.push({child:this.widget.bottomRightLabel,position:"bottom",alignment:"right"});return new g41({controller:this._controller,minRows:this.widget.minBodyRows+2,maxRows:this.widget.maxBodyRows+2,initialRows:this.widget.initialRows,initialMode:this.widget.initialMode,dragThresholdRows:this.widget.dragThresholdRows,handleLeftInset:this.widget.topLeftLabel?dS5:0,handleRightInset:this.widget.topRightLabel?this.widget.topRightLabelHandleInset??cS5:0,onHandleDoubleClick:this.widget.onHandleDoubleClick,child:new I8({decoration:new f4(Q.colorScheme.background,new d1(new c1(B,J,"rounded"),new c1(B,1,"rounded"),new c1(B,1,"rounded"),new c1(B,1,"rounded"))),overlays:Y,child:this.widget.childBuilder(this._controller.mode)})})}}var lS5=/\bhand(?:[\s-]+)?off\b/i,Wn4={message:"Uploading — Esc to keep editing",withSpinner:!0};function qG0(A){return lS5.test(A)}function IG0(A,Q){return!A.ctrlKey&&!A.altKey&&!A.metaKey&&A.key===Q}class Hn4 extends H1{onDismiss;constructor(A){super();this.onDismiss=A}build(A){let Q=O1.of(A).colorScheme,B=new v({color:Q.foreground}),$=new v({color:Q.foreground,dim:!0});return new TA({header:"Handoff Removed",autofocus:!1,minWidth:68,maxWidth:76,footer:[{keys:["Esc"],label:"close"}],onDismiss:this.onDismiss,child:new m4({autofocus:!0,debugLabel:"HandoffRemovedDetailsModal",child:new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[new p({text:new C("Compaction is enabled by default now in all new Amp threads. It will run automatically when needed.",B)}),new f0({padding:K0.only({top:1}),child:new p({text:new C("You can still reference threads by typing @@ to open the thread picker, then choosing the thread you want to use as context.",$)})})]})})})}}class qn4 extends H1{build(A){let B=O1.of(A).colorScheme,$=P0.of(A),J=new v({color:B.warning}),Y=new v({color:B.foreground,dim:!0}),Z=new v({color:$.app.keybind}),F=new r0({children:[new R1({child:new p({text:new C("",void 0,[new C("Handoff has been removed. ",J),new C("Use @@ to reference other threads.",Y)])})}),new p({text:new C("",void 0,[new C("?",Z),new C(" details ",Y),new C("Esc",Z),new C(" close",Y)])})]}),X=new g0({height:1,decoration:{border:new d1(new c1(B.border))}});return new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[F,X]})}}class p41 extends S0{props;constructor(A){super();this.props=A}createState(){return new In4}}class In4 extends T0{pendingUploads=new Map;get imageEntries(){return this.widget.props.imageAttachmentsController.entries}parkedSubmit=null;nextParkedSubmitId=0;isShowingShortcutsHelp=!1;isShowingHandoffRemovedNotice=!1;hasDismissedHandoffRemovedNotice=!1;removeKeyInterceptor=null;removeEditorTextListener=null;removeImageAttachmentsListener=null;imagePreviewOverlay=null;mentionPickerOverlay=null;handoffDetailsOverlay=null;unregisterCommands=null;editorFocusNode=new Z6({debugLabel:"NeoEditorPanelPromptEditor"});get isUploadLocked(){return this.parkedSubmit!==null}get effectiveEditorEnabled(){return this.widget.props.editorEnabled&&!this.isUploadLocked}initState(){super.initState(),this.isShowingShortcutsHelp=this.widget.props.showShortcutsHelp??!1,this.isShowingHandoffRemovedNotice=qG0(this.widget.props.editorController.text),this.attachEditorTextListener(this.widget.props.editorController),this.attachImageAttachmentsListener(this.widget.props.imageAttachmentsController),this.unregisterCommands=this.registerCommands(),this.removeKeyInterceptor=C4.instance.addKeyInterceptor((A)=>{let Q=this.widget.props.editorController;if(this.mentionPickerOverlay&&IG0(A,"Escape"))return this.dismissMentionPicker(),!0;if(!this.promptOwnsKeybindings())return!1;if(this.isUploadLocked){if(IG0(A,"Escape"))this.cancelPendingSubmit();return!0}if(this.isShowingHandoffRemovedNotice&&IG0(A,"?"))return this.dismissHandoffRemovedNotice(),this.showHandoffRemovedDetails(),!0;if(this.isShowingHandoffRemovedNotice&&IG0(A,"Escape"))return this.dismissHandoffRemovedNotice(),!0;if(A.key==="?"){if(this.effectiveEditorEnabled&&Q.text===""&&Q.cursorPosition===0)return this.setState(()=>{this.isShowingShortcutsHelp=!this.isShowingShortcutsHelp}),!0}if(A.key==="/"){if(this.effectiveEditorEnabled&&Q.text===""&&Q.cursorPosition===0){if(t4.maybeInvoke(this.context,new mr)==="handled")return!0}}if(this.isShowingShortcutsHelp){if(this.setState(()=>{this.isShowingShortcutsHelp=!1}),A.key==="Escape")return!0;return!1}return!1})}didUpdateWidget(A){if(super.didUpdateWidget(A),A.props.editorController!==this.widget.props.editorController)this.removeEditorTextListener?.(),this.removeEditorTextListener=null,this.hasDismissedHandoffRemovedNotice=!1,this.isShowingHandoffRemovedNotice=qG0(this.widget.props.editorController.text),this.attachEditorTextListener(this.widget.props.editorController);if(A.props.imageAttachmentsController!==this.widget.props.imageAttachmentsController)this.removeImageAttachmentsListener?.(),this.removeImageAttachmentsListener=null,this.attachImageAttachmentsListener(this.widget.props.imageAttachmentsController);if(!A.props.editorEnabled&&this.widget.props.editorEnabled)this.editorFocusNode.requestFocus();let Q=this.parkedSubmit,B=this.widget.props.activeThreadID;if(Q!==null&&Q.activeThreadID!==B)if(Q.activeThreadID===null&&B!==null)this.setState(()=>{this.parkedSubmit={...Q,activeThreadID:B}});else this.setParkedSubmit(null)}dispose(){if(this.isUploadLocked)this.widget.props.onUploadLockChange(!1);this.dismissImagePreview(),this.dismissMentionPicker(),this.dismissHandoffRemovedDetails(),this.unregisterCommands?.(),this.unregisterCommands=null,this.removeEditorTextListener?.(),this.removeEditorTextListener=null,this.removeImageAttachmentsListener?.(),this.removeImageAttachmentsListener=null,this.removeKeyInterceptor?.(),this.removeKeyInterceptor=null,this.editorFocusNode.dispose(),super.dispose()}attachEditorTextListener(A){let Q=()=>this.syncHandoffRemovedNotice();A.addListener(Q),this.removeEditorTextListener=()=>A.removeListener(Q)}attachImageAttachmentsListener(A){let Q=()=>{if(!this.mounted)return;this.setState()};A.addListener(Q),this.removeImageAttachmentsListener=()=>A.removeListener(Q)}promptOwnsKeybindings(){return this.editorFocusNode.hasFocus&&this.imagePreviewOverlay===null&&this.mentionPickerOverlay===null&&this.handoffDetailsOverlay===null}syncHandoffRemovedNotice(){if(!qG0(this.widget.props.editorController.text)){if(!this.isShowingHandoffRemovedNotice)this.hasDismissedHandoffRemovedNotice=!1;return}if(this.isShowingHandoffRemovedNotice||this.hasDismissedHandoffRemovedNotice)return;this.setState(()=>{this.isShowingHandoffRemovedNotice=!0})}dismissHandoffRemovedNotice(){this.setState(()=>{this.isShowingHandoffRemovedNotice=!1,this.hasDismissedHandoffRemovedNotice=qG0(this.widget.props.editorController.text)})}showHandoffRemovedDetails(){this.dismissHandoffRemovedDetails();let A=new pD(()=>new Hn4(()=>this.dismissHandoffRemovedDetails()));this.handoffDetailsOverlay=A,s7.of(this.context).insert(A)}dismissHandoffRemovedDetails(){if(this.handoffDetailsOverlay)this.handoffDetailsOverlay.remove(),this.handoffDetailsOverlay=null}registerCommands(){let A=this,Q=nY.of(this.context),$=[{noun:"prompt",verb:"open in editor",description:"Edit prompt in $EDITOR",keywords:["external","edit"],shortcut:_1.ctrl("g"),get status(){return A.effectiveEditorEnabled?{type:"enabled"}:{type:"disabled",reason:"Prompt editor is not available"}},run:async(J,Y,Z)=>{if(!A.effectiveEditorEnabled){Z();return}try{await E41(A.widget.props.editorController)}finally{Z()}}},{noun:"prompt",verb:"clear",description:"Clear input",keywords:["reset","empty"],get status(){if(!A.effectiveEditorEnabled)return{type:"disabled",reason:"Prompt editor is not available"};return A.widget.props.editorController.text.trim().length>0?{type:"enabled"}:{type:"disabled",reason:"No prompt text to clear"}},run:(J,Y,Z)=>{if(!A.effectiveEditorEnabled){Z();return}A.widget.props.editorController.clear(),Z()}},{noun:"prompt",verb:"dequeue",description:"Dequeue prompts",keywords:["queue","pop"],get status(){if(A.isUploadLocked)return{type:"disabled",reason:"Prompt editor is not available"};if(!A.effectiveEditorEnabled)return{type:"disabled",reason:"Cannot use prompt: dequeue while editing or selecting a message"};return A.widget.props.queuedMessages.length>0?{type:"enabled"}:{type:"disabled",reason:"Can only use prompt: dequeue when there are queued messages"}},run:(J,Y,Z)=>{A.handleDequeueAll(),Z()}},{noun:"prompt",verb:"steer with queued message",description:"Steer with the next queued prompt",keywords:["queue","steer","now","send queued message"],get status(){if(A.widget.props.queuedMessages.some((J)=>!J.steer))return{type:"enabled"};return A.widget.props.queuedMessages.length>0?{type:"disabled",reason:"All queued messages are already marked as steering"}:{type:"disabled",reason:"Can only use prompt: steer with queued message when there are queued messages"}},run:(J,Y,Z)=>{A.widget.props.onSteerNextQueuedMessage(),Z()}},{noun:"prompt",verb:"copy selection",description:"Copy selection",keywords:["clipboard","copy"],get status(){if(!A.effectiveEditorEnabled)return{type:"disabled",reason:"Prompt editor is not available"};return A.widget.props.editorController.hasSelection?{type:"enabled"}:{type:"disabled",reason:"No selected text to copy"}},run:(J,Y,Z)=>{t4.maybeInvoke(Y,new r7(A.widget.props.editorController.selectedText)),Z()}},{noun:"prompt",verb:"paste image from clipboard",description:"Paste image from clipboard",keywords:["clipboard","image","paste","attachment"],shortcut:_1.ctrl("v"),get status(){if(!A.effectiveEditorEnabled)return{type:"disabled",reason:"Prompt editor is not available"};return A.imageEntries.length<p9?{type:"enabled"}:{type:"disabled",reason:`Maximum of ${p9} images per message`}},run:async(J,Y,Z)=>{Z(),await A.handlePasteImageFromClipboard()}},{noun:"thread",verb:"mention",description:"Mention a thread",keywords:["reference","link","attach","cite"],get status(){return A.effectiveEditorEnabled?{type:"enabled"}:{type:"disabled",reason:"Prompt editor is not available"}},run:(J,Y,Z)=>{if(!A.effectiveEditorEnabled){Z();return}J.pushWithDismiss((F)=>Ys({activeThreadID:A.widget.props.activeThreadID,loadThreads:()=>j3.of(A.context).listThreads(),onSelectThread:(X)=>{A.insertThreadMention(X)},onDismiss:F,onThreadSelected:Z}))}}].map((J)=>Q.register(J));return()=>{for(let J of $)J()}}handleDoubleAtTrigger=()=>{this.showMentionPicker()};showMentionPicker(){if(!this.effectiveEditorEnabled)return;this.dismissMentionPicker();let A=new pD(()=>Ys({activeThreadID:this.widget.props.activeThreadID,loadThreads:()=>j3.of(this.context).listThreads(),onSelectThread:(Q)=>{this.insertThreadMention(Q)},onDismiss:()=>this.dismissMentionPicker(),onThreadSelected:()=>this.dismissMentionPicker()}));this.mentionPickerOverlay=A,s7.of(this.context).insert(A)}dismissMentionPicker(){if(this.mentionPickerOverlay)this.mentionPickerOverlay.remove(),this.mentionPickerOverlay=null}insertThreadMention(A){if(!this.effectiveEditorEnabled)return;VG0(this.widget.props.editorController,A)}acceptPreviousThreadHint=()=>{if(!this.effectiveEditorEnabled)return;let A=this.widget.props.previousThreadIDForReference;if(!A)return;this.widget.props.editorController.text=`following: @${A} `};handleInsertImage=async(A)=>{return await this.tryInsertImage(A),!1};async tryInsertImage(A){if(this.isUploadLocked)return!1;if(this.imageEntries.length>=p9)return!1;let Q=await cF(A);if(typeof Q==="string")return!1;let B=this.widget.props.imageAttachmentsController,$=Q.source.type==="base64",J=B.add(Q,{uploading:$});if(Q.source.type==="base64")this.uploadEntryInBackground(J,Q.source);return!0}handlePasteImageFromClipboard=async()=>{if(!this.effectiveEditorEnabled)return;if(this.imageEntries.length>=p9){Q5.error(this.context,`Maximum of ${p9} images per message`);return}try{let A=await If();if(!A)return;if(!await this.tryInsertImage(A))Q5.error(this.context,"Failed to paste image from clipboard")}catch(A){j.error("Failed to paste image from clipboard",{error:A}),Q5.error(this.context,"Failed to paste image from clipboard")}};async uploadEntryInBackground(A,Q){let B=(async()=>{try{let{configService:$}=j3.of(this.context),J=await ni4(Q,$);if(!this.mounted)return;let Y=this.imageEntries.find((F)=>F.id===A);if(!Y)return;let Z=ii4(J)?Y.image:{type:"image",source:{type:"url",url:J},sourcePath:Y.image.sourcePath};this.widget.props.imageAttachmentsController.updateById(A,{image:Z,uploading:!1})}catch($){if(j.error("Failed to upload image attachment",{error:$}),!this.mounted)return;this.widget.props.imageAttachmentsController.updateById(A,{uploading:!1})}finally{this.pendingUploads.delete(A)}})();this.pendingUploads.set(A,B)}handlePopImage=()=>{if(this.isUploadLocked)return;let A=this.widget.props.imageAttachmentsController.popLast();if(A)this.pendingUploads.delete(A.id)};handleDequeueAll=()=>{if(this.isUploadLocked)return;let A=this.widget.props.queuedMessages;if(A.length===0)return;let Q=[],B=[];for(let Y of A){let Z=Y.queuedMessage.content.filter((X)=>X.type==="text").map((X)=>X.text).join("").trim();if(Z)Q.push(Z);let F=Y.queuedMessage.content.filter((X)=>X.type==="image");B.push(...F)}let $=B.slice(-p9),J=Q.join(`
|
|
5764
|
-
`).trim();this.widget.props.onDequeueAllMessages(),this.widget.props.editorController.text=J;for(let Y of this.imageEntries)this.pendingUploads.delete(Y.id);this.widget.props.imageAttachmentsController.setImages($)};handleImageClick=(A)=>{if(this.isUploadLocked)return;let Q=this.imageEntries[A];if(!Q||Q.uploading)return;this.dismissImagePreview();let B=new pD(()=>new RN({image:Q.image,imageIndex:A,onDismiss:()=>this.dismissImagePreview(),onRemove:()=>{this.dismissImagePreview();let $=this.imageEntries[A];if($)this.pendingUploads.delete($.id);this.widget.props.imageAttachmentsController.removeAt(A)}}));this.imagePreviewOverlay=B,s7.of(this.context).insert(B)};dismissImagePreview(){if(this.imagePreviewOverlay)this.imagePreviewOverlay.remove(),this.imagePreviewOverlay=null}handleSubmitted=(A)=>{if(this.isUploadLocked)return;if(this.pendingUploads.size>0){let Q=++this.nextParkedSubmitId;this.setParkedSubmit({id:Q,text:A,activeThreadID:this.widget.props.activeThreadID}),this.waitAndSubmit(Q).catch((B)=>{j.error("Failed to submit prompt after image uploads completed",{error:B})})}else this.submit(A)};submit(A){let Q=this.imageEntries.map(($)=>$.image),B=this.isUploadLocked;if(this.setState(()=>{this.parkedSubmit=null}),this.widget.props.imageAttachmentsController.clear(),B)this.widget.props.onUploadLockChange(!1);this.widget.props.onSubmitted(A,Q)}setParkedSubmit(A){let Q=this.isUploadLocked;this.setState(()=>{this.parkedSubmit=A});let B=A!==null;if(Q!==B)this.widget.props.onUploadLockChange(B)}async waitAndSubmit(A){while(!0){let Q=[...this.pendingUploads.values()];if(await Promise.all(Q),!this.mounted)return;let B=this.parkedSubmit;if(B===null||B.id!==A)return;if(B.activeThreadID!==this.widget.props.activeThreadID){this.setParkedSubmit(null);return}if(this.pendingUploads.size===0){this.submit(B.text);return}}}cancelPendingSubmit(){if(this.parkedSubmit===null)return;this.setParkedSubmit(null),this.editorFocusNode.requestFocus()}uploadingIndices(){let A=new Set;for(let Q=0;Q<this.imageEntries.length;Q++)if(this.imageEntries[Q]?.uploading)A.add(Q);return A}buildTopWidget(){return new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[this.isShowingHandoffRemovedNotice?new qn4:U0.shrink(),this.isShowingShortcutsHelp?new Xs({layout:"neo"}):U0.shrink()]})}buildBottomLeftLabel(A){if(!this.isUploadLocked)return this.widget.props.bottomLeftLabel;let Q=s1.of(A);return new U0({width:Math.min(Math.max(0,Math.floor(Q.size.width*0.6)),hi4(Wn4,Q.supportsEmojiWidth)),child:new v41(Wn4)})}build(A){let{editorController:Q,queuedMessages:B,selectedQueuedMessageIndex:$,maxBodyRows:J}=this.widget.props,Y=this.buildTopWidget(),Z=B.length>0,F=this.effectiveEditorEnabled,X=O1.of(A),{observerOnly:D}=j3.of(A),G=D?X.colorScheme.info:void 0,V=this.widget.props.topRightLabel,U=this.buildBottomLeftLabel(A),K=this.imageEntries.length>0?2:0,E=[];if(Z)E.push(new f0({padding:K0.horizontal(1),child:new rj({queuedMessages:B,selectedIndex:$,bottomRightLabel:V})}));return E.push(new m41({initialRows:3,minBodyRows:3,maxBodyRows:J+K,topLeftLabel:this.widget.props.topLeftLabel,topRightLabel:Z?void 0:V,bottomLeftLabel:U,bottomRightLabel:this.widget.props.bottomRightLabel,...G?{borderColor:G}:{},...this.widget.props.topRightLabelHandleInset!==void 0?{topRightLabelHandleInset:this.widget.props.topRightLabelHandleInset}:{},onHandleDoubleClick:({currentRows:z,maxRows:W})=>z>=W?"auto-min":"manual-max",childBuilder:(z)=>new f0({padding:K0.horizontal(1),child:new t4({actions:new Map([[FN,new X4(()=>{return this.handlePasteImageFromClipboard(),"ignored"})]]),child:new h5({debugLabel:"NeoEditorPanelShortcuts",shortcuts:new Map([[_1.ctrl("v"),new FN]]),focusNode:this.editorFocusNode,child:new dD({controller:Q,triggers:[new HJ],completionBuilder:LN.of(A),focusNode:this.editorFocusNode,autoOverlayPosition:!0,theme:X.colorScheme,previousThreadId:this.widget.props.previousThreadIDForReference??void 0,onPreviousThreadHintAccepted:this.acceptPreviousThreadHint,onInsertImage:this.handleInsertImage,imageAttachments:this.imageEntries.map((W)=>W.image),popImage:this.handlePopImage,onImageClick:this.handleImageClick,uploadingImageIndices:this.uploadingIndices(),enabled:F,onDoubleAtTrigger:this.handleDoubleAtTrigger,onSubmitted:this.handleSubmitted,fillAvailableHeight:z==="manual",topWidget:Y})})})})})),new T1({opaque:!1,onClick:!F?()=>t4.maybeInvoke(this.context,new br):void 0,child:new _X0({children:E})})}}function iS5(A){if(A==="smart")return E0.rgb(200,230,68);if(A==="deep")return E0.rgb(103,255,168);return kz(A)}class Ds extends H1{props;constructor(A){super();this.props=A}onSubmitted=(A,Q)=>{let B=A.trim(),$=[];if(B.length>0)$.push({type:"text",text:B});$.push(...Q),this.props.onSubmit($),this.props.editorController.clear()};build(A){let{child:Q,editorController:B,hints:$,clientStatus:J,cancelling:Y,agentMode:Z,reasoningEffort:F,speedCostMultiplier:X,statusMessage:D,queuedMessages:G,selectedQueuedMessageIndex:V,editorEnabled:U,connectionError:K,activeError:E,onErrorResponse:z}=this.props,W=s1.of(A),{width:H,height:q}=W.size,I=vi4(A,this.props.environment),N=new P41({agentMode:Z,reasoningEffort:F,speedCostMultiplier:X,color:iS5(Z),horizontalPadding:1}),w=O1.of(A).colorScheme.border,L=new p({text:new C("─",new v({color:w})),maxLines:1}),O=new r0({mainAxisSize:"min",children:[this.props.usageGauge??U0.shrink(),L,N]}),P=28,T={hints:$,clientStatus:J,stageBytes:this.props.stageBytes??null,cancelling:Y,connectionError:K,statusMessage:D},k=bi4(T)?new U0({width:Math.min(Math.max(0,Math.floor(H*0.6)),ui4(T,W.supportsEmojiWidth)),child:new S41(T)}):void 0,x=new Map([[_1.key("ArrowUp"),new Gf],[_1.key("Tab"),new Gf],[_1.key("ArrowDown"),new Df],[_1.shift("Tab"),new Df],[_1.key("Enter"),new fr],[_1.key("Backspace"),new yr],[_1.key("PageUp"),new hr],[_1.key("PageDown"),new gr]]),h=E?new _41({error:E,onResponse:(S)=>z?.(S)}):new p41({editorController:B,imageAttachmentsController:this.props.imageAttachmentsController,activeThreadID:this.props.activeThreadID,queuedMessages:G,selectedQueuedMessageIndex:V,editorEnabled:U,maxBodyRows:Math.floor(W.size.height/3),onSubmitted:this.onSubmitted,onUploadLockChange:this.props.onEditorUploadLockChange,onSteerNextQueuedMessage:this.props.onSteerNextQueuedMessage,onDequeueAllMessages:this.props.onDequeueAllMessages,showShortcutsHelp:this.props.showShortcutsHelp,topRightLabel:O,topRightLabelHandleInset:28,bottomLeftLabel:k,bottomRightLabel:I,previousThreadIDForReference:this.props.previousThreadIDForReference??null}),u=[new x41,new R1({child:Q}),h];return new h5({debugLabel:"NeoThreadUIShortcuts",shortcuts:x,child:new s7({child:new g0({constraints:w1.tight(H,q),child:new x0({mainAxisSize:"max",crossAxisAlignment:"stretch",children:u})})})})}}function Nn4(A){let Q=[],B=[];for(let $ of A)if($.steer)Q.push($);else B.push($);return[...Q,...B]}/*!
|
|
5764
|
+
`).trim();this.widget.props.onDequeueAllMessages(),this.widget.props.editorController.text=J;for(let Y of this.imageEntries)this.pendingUploads.delete(Y.id);this.widget.props.imageAttachmentsController.setImages($)};handleImageClick=(A)=>{if(this.isUploadLocked)return;let Q=this.imageEntries[A];if(!Q||Q.uploading)return;this.dismissImagePreview();let B=new pD(()=>new RN({image:Q.image,imageIndex:A,onDismiss:()=>this.dismissImagePreview(),onRemove:()=>{this.dismissImagePreview();let $=this.imageEntries[A];if($)this.pendingUploads.delete($.id);this.widget.props.imageAttachmentsController.removeAt(A)}}));this.imagePreviewOverlay=B,s7.of(this.context).insert(B)};dismissImagePreview(){if(this.imagePreviewOverlay)this.imagePreviewOverlay.remove(),this.imagePreviewOverlay=null}handleSubmitted=(A)=>{if(this.isUploadLocked)return;if(A.trim().length===0&&this.imageEntries.length===0){this.widget.props.onEmptySubmitted?.();return}if(this.pendingUploads.size>0){let Q=++this.nextParkedSubmitId;this.setParkedSubmit({id:Q,text:A,activeThreadID:this.widget.props.activeThreadID}),this.waitAndSubmit(Q).catch((B)=>{j.error("Failed to submit prompt after image uploads completed",{error:B})})}else this.submit(A)};submit(A){let Q=this.imageEntries.map(($)=>$.image),B=this.isUploadLocked;if(this.setState(()=>{this.parkedSubmit=null}),this.widget.props.imageAttachmentsController.clear(),B)this.widget.props.onUploadLockChange(!1);this.widget.props.onSubmitted(A,Q)}setParkedSubmit(A){let Q=this.isUploadLocked;this.setState(()=>{this.parkedSubmit=A});let B=A!==null;if(Q!==B)this.widget.props.onUploadLockChange(B)}async waitAndSubmit(A){while(!0){let Q=[...this.pendingUploads.values()];if(await Promise.all(Q),!this.mounted)return;let B=this.parkedSubmit;if(B===null||B.id!==A)return;if(B.activeThreadID!==this.widget.props.activeThreadID){this.setParkedSubmit(null);return}if(this.pendingUploads.size===0){this.submit(B.text);return}}}cancelPendingSubmit(){if(this.parkedSubmit===null)return;this.setParkedSubmit(null),this.editorFocusNode.requestFocus()}uploadingIndices(){let A=new Set;for(let Q=0;Q<this.imageEntries.length;Q++)if(this.imageEntries[Q]?.uploading)A.add(Q);return A}buildTopWidget(){return new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[this.isShowingHandoffRemovedNotice?new qn4:U0.shrink(),this.isShowingShortcutsHelp?new Xs({layout:"neo"}):U0.shrink()]})}buildBottomLeftLabel(A){if(!this.isUploadLocked)return this.widget.props.bottomLeftLabel;let Q=s1.of(A);return new U0({width:Math.min(Math.max(0,Math.floor(Q.size.width*0.6)),hi4(Wn4,Q.supportsEmojiWidth)),child:new v41(Wn4)})}build(A){let{editorController:Q,queuedMessages:B,selectedQueuedMessageIndex:$,maxBodyRows:J}=this.widget.props,Y=this.buildTopWidget(),Z=B.length>0,F=this.effectiveEditorEnabled,X=O1.of(A),{observerOnly:D}=j3.of(A),G=D?X.colorScheme.info:void 0,V=this.widget.props.topRightLabel,U=this.buildBottomLeftLabel(A),K=this.imageEntries.length>0?2:0,E=[];if(Z)E.push(new f0({padding:K0.horizontal(1),child:new rj({queuedMessages:B,selectedIndex:$,bottomRightLabel:V})}));return E.push(new m41({initialRows:3,minBodyRows:3,maxBodyRows:J+K,topLeftLabel:this.widget.props.topLeftLabel,topRightLabel:Z?void 0:V,bottomLeftLabel:U,bottomRightLabel:this.widget.props.bottomRightLabel,...G?{borderColor:G}:{},...this.widget.props.topRightLabelHandleInset!==void 0?{topRightLabelHandleInset:this.widget.props.topRightLabelHandleInset}:{},onHandleDoubleClick:({currentRows:z,maxRows:W})=>z>=W?"auto-min":"manual-max",childBuilder:(z)=>new f0({padding:K0.horizontal(1),child:new t4({actions:new Map([[FN,new X4(()=>{return this.handlePasteImageFromClipboard(),"ignored"})]]),child:new h5({debugLabel:"NeoEditorPanelShortcuts",shortcuts:new Map([[_1.ctrl("v"),new FN]]),focusNode:this.editorFocusNode,child:new dD({controller:Q,triggers:[new HJ],completionBuilder:LN.of(A),focusNode:this.editorFocusNode,autoOverlayPosition:!0,theme:X.colorScheme,previousThreadId:this.widget.props.previousThreadIDForReference??void 0,onPreviousThreadHintAccepted:this.acceptPreviousThreadHint,onInsertImage:this.handleInsertImage,imageAttachments:this.imageEntries.map((W)=>W.image),popImage:this.handlePopImage,onImageClick:this.handleImageClick,uploadingImageIndices:this.uploadingIndices(),enabled:F,onDoubleAtTrigger:this.handleDoubleAtTrigger,onSubmitted:this.handleSubmitted,fillAvailableHeight:z==="manual",topWidget:Y})})})})})),new T1({opaque:!1,onClick:!F?()=>t4.maybeInvoke(this.context,new br):void 0,child:new _X0({children:E})})}}function iS5(A){if(A==="smart")return E0.rgb(200,230,68);if(A==="deep")return E0.rgb(103,255,168);return kz(A)}class Ds extends H1{props;constructor(A){super();this.props=A}onSubmitted=(A,Q)=>{let B=A.trim(),$=[];if(B.length>0)$.push({type:"text",text:B});$.push(...Q),this.props.onSubmit($),this.props.editorController.clear()};onEmptySubmitted=()=>{this.props.onEmptySubmit?.()};build(A){let{child:Q,editorController:B,hints:$,clientStatus:J,cancelling:Y,agentMode:Z,reasoningEffort:F,speedCostMultiplier:X,statusMessage:D,queuedMessages:G,selectedQueuedMessageIndex:V,editorEnabled:U,connectionError:K,activeError:E,onErrorResponse:z}=this.props,W=s1.of(A),{width:H,height:q}=W.size,I=vi4(A,this.props.environment),N=new P41({agentMode:Z,reasoningEffort:F,speedCostMultiplier:X,color:iS5(Z),horizontalPadding:1}),w=O1.of(A).colorScheme.border,L=new p({text:new C("─",new v({color:w})),maxLines:1}),O=new r0({mainAxisSize:"min",children:[this.props.usageGauge??U0.shrink(),L,N]}),P=28,T={hints:$,clientStatus:J,stageBytes:this.props.stageBytes??null,cancelling:Y,connectionError:K,statusMessage:D},k=bi4(T)?new U0({width:Math.min(Math.max(0,Math.floor(H*0.6)),ui4(T,W.supportsEmojiWidth)),child:new S41(T)}):void 0,x=new Map([[_1.key("ArrowUp"),new Gf],[_1.key("Tab"),new Gf],[_1.key("ArrowDown"),new Df],[_1.shift("Tab"),new Df],[_1.key("Enter"),new fr],[_1.key("Backspace"),new yr],[_1.key("PageUp"),new hr],[_1.key("PageDown"),new gr]]),h=E?new _41({error:E,onResponse:(S)=>z?.(S)}):new p41({editorController:B,imageAttachmentsController:this.props.imageAttachmentsController,activeThreadID:this.props.activeThreadID,queuedMessages:G,selectedQueuedMessageIndex:V,editorEnabled:U,maxBodyRows:Math.floor(W.size.height/3),onSubmitted:this.onSubmitted,onEmptySubmitted:this.onEmptySubmitted,onUploadLockChange:this.props.onEditorUploadLockChange,onSteerNextQueuedMessage:this.props.onSteerNextQueuedMessage,onDequeueAllMessages:this.props.onDequeueAllMessages,showShortcutsHelp:this.props.showShortcutsHelp,topRightLabel:O,topRightLabelHandleInset:28,bottomLeftLabel:k,bottomRightLabel:I,previousThreadIDForReference:this.props.previousThreadIDForReference??null}),u=[new x41,new R1({child:Q}),h];return new h5({debugLabel:"NeoThreadUIShortcuts",shortcuts:x,child:new s7({child:new g0({constraints:w1.tight(H,q),child:new x0({mainAxisSize:"max",crossAxisAlignment:"stretch",children:u})})})})}}function Nn4(A){let Q=[],B=[];for(let $ of A)if($.steer)Q.push($);else B.push($);return[...Q,...B]}/*!
|
|
5765
5765
|
* decimal.js v10.5.0
|
|
5766
5766
|
* An arbitrary-precision Decimal type for JavaScript.
|
|
5767
5767
|
* https://github.com/MikeMcl/decimal.js
|
|
5768
5768
|
* Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>
|
|
5769
5769
|
* MIT Licence
|
|
5770
|
-
*/var Nf=9000000000000000,SN=1e9,d41="0123456789abcdef",CG0="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",MG0="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",c41={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Nf,maxE:Nf,crypto:!1},Ln4,mz,cA=!0,OG0="[DecimalError] ",kN=OG0+"Invalid argument: ",On4=OG0+"Precision limit exceeded",jn4=OG0+"crypto unavailable",Rn4="[object Decimal]",tQ=Math.floor,P9=Math.pow,nS5=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,aS5=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,oS5=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Pn4=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,cD=1e7,kA=7,rS5=9007199254740991,sS5=CG0.length-1,l41=MG0.length-1,h1={toStringTag:Rn4};h1.absoluteValue=h1.abs=function(){var A=new this.constructor(this);if(A.s<0)A.s=1;return VA(A)};h1.ceil=function(){return VA(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(kN+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,F=(A=new Y.constructor(A)).d,X=Y.s,D=A.s;if(!Z||!F)return!X||!D?NaN:X!==D?X:Z===F?0:!Z^X<0?1:-1;if(!Z[0]||!F[0])return Z[0]?X:F[0]?-D:0;if(X!==D)return X;if(Y.e!==A.e)return Y.e>A.e^X<0?1:-1;$=Z.length,J=F.length;for(Q=0,B=$<J?$:J;Q<B;++Q)if(Z[Q]!==F[Q])return Z[Q]>F[Q]^X<0?1:-1;return $===J?0:$>J^X<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())+kA,$.rounding=1,B=tS5($,vn4($,B)),$.precision=A,$.rounding=Q,VA(mz==2||mz==3?B.neg():B,A,Q,!0)};h1.cubeRoot=h1.cbrt=function(){var A,Q,B,$,J,Y,Z,F,X,D,G=this,V=G.constructor;if(!G.isFinite()||G.isZero())return new V(G);if(cA=!1,Y=G.s*P9(G.s*G,0.3333333333333333),!Y||Math.abs(Y)==1/0){if(B=t7(G.d),A=G.e,Y=(A-B.length+1)%3)B+=Y==1||Y==-2?"0":"00";if(Y=P9(B,0.3333333333333333),A=tQ((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(F=$,X=F.times(F).times(F),D=X.plus(G),$=R3(D.plus(G).times(F),D.plus(X),Z+2,1),t7(F.d).slice(0,Z)===(B=t7($.d)).slice(0,Z))if(B=B.slice(Z-3,Z+1),B=="9999"||!J&&B=="4999"){if(!J){if(VA(F,A+1,0),F.times(F).times(F).eq(G)){$=F;break}}Z+=4,J=1}else{if(!+B||!+B.slice(1)&&B.charAt(0)=="5")VA($,A+1,1),Q=!$.times($).times($).eq(G);break}return cA=!0,VA($,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-tQ(this.e/kA))*kA,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 R3(this,new this.constructor(A))};h1.dividedToIntegerBy=h1.divToInt=function(A){var Q=this,B=Q.constructor;return VA(R3(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 VA(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,F=new Z(1);if(!Y.isFinite())return new Z(Y.s?1/0:NaN);if(Y.isZero())return F;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/RG0(4,A)).toString();else A=16,Q="2.3283064365386962890625e-10";Y=wf(Z,1,Y.times(Q),new Z(1),!0);var X,D=A,G=new Z(8);for(;D--;)X=Y.times(Y),Y=F.minus(X.times(G.minus(X.times(G))));return VA(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=wf(Y,2,J,J,!0);else{A=1.4*Math.sqrt($),A=A>16?16:A|0,J=J.times(1/RG0(5,A)),J=wf(Y,2,J,J,!0);var Z,F=new Y(5),X=new Y(16),D=new Y(20);for(;A--;)Z=J.times(J),J=J.times(F.plus(Z.times(X.times(Z).plus(D))))}return Y.precision=Q,Y.rounding=B,VA(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,R3(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()?bU(Q,$,J):new Q(0):new Q(NaN);if(A.isZero())return bU(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 VA(new Y(J),A,Q,!0);return Y.precision=B=$-J.e,J=R3(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=bU(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,F,X,D=this,G=D.constructor,V=G.precision,U=G.rounding;if(!D.isFinite()){if(!D.s)return new G(NaN);if(V+4<=l41)return Z=bU(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<=l41)return Z=bU(G,V+4,U).times(0.25),Z.s=D.s,Z;G.precision=F=V+10,G.rounding=1,B=Math.min(28,F/kA+2|0);for(A=B;A;--A)D=D.div(D.times(D).plus(1).sqrt().plus(1));cA=!1,Q=Math.ceil(F/kA),$=1,X=D.times(D),Z=new G(D),J=D;for(;A!==-1;)if(J=J.times(X),Y=Z.minus(J.div($+=2)),J=J.times(X),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,VA(Z,G.precision=V,G.rounding=U,!0)};h1.isFinite=function(){return!!this.d};h1.isInteger=h1.isInt=function(){return!!this.d&&tQ(this.e/kA)>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,F,X,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,F=V+K,Z=TN(D,F),$=Q?LG0(G,F+10):TN(A,F),X=R3(Z,$,F,1),Gs(X.d,J=V,U))do if(F+=10,Z=TN(D,F),$=Q?LG0(G,F+10):TN(A,F),X=R3(Z,$,F,1),!Y){if(+t7(X.d).slice(J+1,J+15)+1==100000000000000)X=VA(X,V+1,0);break}while(Gs(X.d,J+=10,U));return cA=!0,VA(X,V,U)};h1.minus=h1.sub=function(A){var Q,B,$,J,Y,Z,F,X,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,F=E.precision,X=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(X===3?-0:0);return cA?VA(A,F,X):A}if(B=tQ(A.e/kA),G=tQ(K.e/kA),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(F/kA),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]=cD-1;--D[J],D[$]+=cD}D[$]-=U[$]}for(;D[--Z]===0;)D.pop();for(;D[0]===0;D.shift())--B;if(!D[0])return new E(X===3?-0:0);return A.d=D,A.e=jG0(D,B),cA?VA(A,F,X):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 VA(new $(B),$.precision,$.rounding);if(cA=!1,$.modulo==9)Q=R3(B,A.abs(),0,3,1),Q.s*=A.s;else Q=R3(B,A,0,$.modulo,1);return Q=Q.times(A),cA=!0,B.minus(Q)};h1.naturalExponential=h1.exp=function(){return i41(this)};h1.naturalLogarithm=h1.ln=function(){return TN(this)};h1.negated=h1.neg=function(){var A=new this.constructor(this);return A.s=-A.s,VA(A)};h1.plus=h1.add=function(A){var Q,B,$,J,Y,Z,F,X,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,F=U.precision,X=U.rounding,!D[0]||!G[0]){if(!G[0])A=new U(V);return cA?VA(A,F,X):A}if(Y=tQ(V.e/kA),$=tQ(A.e/kA),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(F/kA),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)/cD|0,D[J]%=cD;if(Q)D.unshift(Q),++$;for(Z=D.length;D[--Z]==0;)D.pop();return A.d=D,A.e=jG0(D,$),cA?VA(A,F,X):A};h1.precision=h1.sd=function(A){var Q,B=this;if(A!==void 0&&A!==!!A&&A!==1&&A!==0)throw Error(kN+A);if(B.d){if(Q=_n4(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 VA(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())+kA,$.rounding=1,B=Av5($,vn4($,B)),$.precision=A,$.rounding=Q,VA(mz>2?B.neg():B,A,Q,!0)};h1.squareRoot=h1.sqrt=function(){var A,Q,B,$,J,Y,Z=this,F=Z.d,X=Z.e,D=Z.s,G=Z.constructor;if(D!==1||!F||!F[0])return new G(!D||D<0&&(!F||F[0])?NaN:F?Z:1/0);if(cA=!1,D=Math.sqrt(+Z),D==0||D==1/0){if(Q=t7(F),(Q.length+X)%2==0)Q+="0";if(D=Math.sqrt(Q),X=tQ((X+1)/2)-(X<0||X%2),D==1/0)Q="5e"+X;else Q=D.toExponential(),Q=Q.slice(0,Q.indexOf("e")+1)+X;$=new G(Q)}else $=new G(D.toString());B=(X=G.precision)+3;for(;;)if(Y=$,$=Y.plus(R3(Z,Y,B+2,1)).times(0.5),t7(Y.d).slice(0,B)===(Q=t7($.d)).slice(0,B))if(Q=Q.slice(B-3,B+1),Q=="9999"||!J&&Q=="4999"){if(!J){if(VA(Y,X+1,0),Y.times(Y).eq(Z)){$=Y;break}}B+=4,J=1}else{if(!+Q||!+Q.slice(1)&&Q.charAt(0)=="5")VA($,X+1,1),A=!$.times($).eq(Z);break}return cA=!0,VA($,X,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=R3(B,new $(1).minus(B.times(B)).sqrt(),A+10,0),$.precision=A,$.rounding=Q,VA(mz==2||mz==4?B.neg():B,A,Q,!0)};h1.times=h1.mul=function(A){var Q,B,$,J,Y,Z,F,X,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=tQ(G.e/kA)+tQ(A.e/kA),X=U.length,D=K.length,X<D)Y=U,U=K,K=Y,Z=X,X=D,D=Z;Y=[],Z=X+D;for($=Z;$--;)Y.push(0);for($=D;--$>=0;){Q=0;for(J=X+$;J>$;)F=Y[J]+K[$]*U[J-$-1]+Q,Y[J--]=F%cD|0,Q=F/cD|0;Y[J]=(Y[J]+Q)%cD|0}for(;!Y[--Z];)Y.pop();if(Q)++B;else Y.shift();return A.d=Y,A.e=jG0(Y,B),cA?VA(A,V.precision,V.rounding):A};h1.toBinary=function(A,Q){return n41(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(qJ(A,0,SN),Q===void 0)Q=$.rounding;else qJ(Q,0,8);return VA(B,A+B.e+1,Q)};h1.toExponential=function(A,Q){var B,$=this,J=$.constructor;if(A===void 0)B=uU($,!0);else{if(qJ(A,0,SN),Q===void 0)Q=J.rounding;else qJ(Q,0,8);$=VA(new J($),A+1,Q),B=uU($,!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=uU(J);else{if(qJ(A,0,SN),Q===void 0)Q=Y.rounding;else qJ(Q,0,8);$=VA(new Y(J),A+J.e+1,Q),B=uU($,!1,A+$.e+1)}return J.isNeg()&&!J.isZero()?"-"+B:B};h1.toFraction=function(A){var Q,B,$,J,Y,Z,F,X,D,G,V,U,K=this,E=K.d,z=K.constructor;if(!E)return new z(K);if(D=B=new z(1),$=X=new z(0),Q=new z($),Y=Q.e=_n4(E)-K.e-1,Z=Y%kA,Q.d[0]=P9(10,Z<0?kA+Z:Z),A==null)A=Y>0?Q:D;else{if(F=new z(A),!F.isInt()||F.lt(D))throw Error(kN+F);A=F.gt(Q)?Y>0?Q:D:F}cA=!1,F=new z(t7(E)),G=z.precision,z.precision=Y=E.length*kA*2;for(;;){if(V=R3(F,Q,0,1,1),J=B.plus(V.times($)),J.cmp(A)==1)break;B=$,$=J,J=D,D=X.plus(V.times(J)),X=J,J=Q,Q=F.minus(V.times(J)),F=J}return J=R3(A.minus(B),$,0,1,1),X=X.plus(J.times(D)),B=B.plus(J.times($)),X.s=D.s=K.s,U=R3(D,$,Y,1).minus(K).abs().cmp(R3(X,B,Y,1).minus(K).abs())<1?[D,$]:[X,B],z.precision=G,cA=!0,U};h1.toHexadecimal=h1.toHex=function(A,Q){return n41(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 qJ(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=R3(B,A,0,Q,1).times(A),cA=!0,VA(B);else A.s=B.s,B=A;return B};h1.toNumber=function(){return+this};h1.toOctal=function(A,Q){return n41(this,8,A,Q)};h1.toPower=h1.pow=function(A){var Q,B,$,J,Y,Z,F=this,X=F.constructor,D=+(A=new X(A));if(!F.d||!A.d||!F.d[0]||!A.d[0])return new X(P9(+F,D));if(F=new X(F),F.eq(1))return F;if($=X.precision,Y=X.rounding,A.eq(1))return VA(F,$,Y);if(Q=tQ(A.e/kA),Q>=A.d.length-1&&(B=D<0?-D:D)<=rS5)return J=Tn4(X,F,B,$),A.s<0?new X(1).div(J):VA(J,$,Y);if(Z=F.s,Z<0){if(Q<A.d.length-1)return new X(NaN);if((A.d[Q]&1)==0)Z=1;if(F.e==0&&F.d[0]==1&&F.d.length==1)return F.s=Z,F}if(B=P9(+F,D),Q=B==0||!isFinite(B)?tQ(D*(Math.log("0."+t7(F.d))/Math.LN10+F.e+1)):new X(B+"").e,Q>X.maxE+1||Q<X.minE-1)return new X(Q>0?Z/0:0);if(cA=!1,X.rounding=F.s=1,B=Math.min(12,(Q+"").length),J=i41(A.times(TN(F,$+B)),$),J.d){if(J=VA(J,$+5,1),Gs(J.d,$,Y)){if(Q=$+10,J=VA(i41(A.times(TN(F,Q+B)),Q),Q+5,1),+t7(J.d).slice($+1,$+15)+1==100000000000000)J=VA(J,$+1,0)}}return J.s=Z,cA=!0,X.rounding=Y,VA(J,$,Y)};h1.toPrecision=function(A,Q){var B,$=this,J=$.constructor;if(A===void 0)B=uU($,$.e<=J.toExpNeg||$.e>=J.toExpPos);else{if(qJ(A,1,SN),Q===void 0)Q=J.rounding;else qJ(Q,0,8);$=VA(new J($),A,Q),B=uU($,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(qJ(A,1,SN),Q===void 0)Q=$.rounding;else qJ(Q,0,8);return VA(new $(B),A,Q)};h1.toString=function(){var A=this,Q=A.constructor,B=uU(A,A.e<=Q.toExpNeg||A.e>=Q.toExpPos);return A.isNeg()&&!A.isZero()?"-"+B:B};h1.truncated=h1.trunc=function(){return VA(new this.constructor(this),this.e+1,1)};h1.valueOf=h1.toJSON=function(){var A=this,Q=A.constructor,B=uU(A,A.e<=Q.toExpNeg||A.e>=Q.toExpPos);return A.isNeg()?"-"+B:B};function t7(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=kA-$.length,B)Y+=_N(B);Y+=$}if(Z=A[Q],$=Z+"",B=kA-$.length,B)Y+=_N(B)}else if(Z===0)return"0";for(;Z%10===0;)Z/=10;return Y+Z}function qJ(A,Q,B){if(A!==~~A||A<Q||A>B)throw Error(kN+A)}function Gs(A,Q,B,$){var J,Y,Z,F;for(Y=A[0];Y>=10;Y/=10)--Q;if(--Q<0)Q+=kA,J=0;else J=Math.ceil((Q+1)/kA),Q%=kA;if(Y=P9(10,kA-Q),F=A[J]%Y|0,$==null)if(Q<3){if(Q==0)F=F/100|0;else if(Q==1)F=F/10|0;Z=B<4&&F==99999||B>3&&F==49999||F==50000||F==0}else Z=(B<4&&F+1==Y||B>3&&F+1==Y/2)&&(A[J+1]/Y/100|0)==P9(10,Q-2)-1||(F==Y/2||F==0)&&(A[J+1]/Y/100|0)==0;else if(Q<4){if(Q==0)F=F/1000|0;else if(Q==1)F=F/100|0;else if(Q==2)F=F/10|0;Z=($||B<4)&&F==9999||!$&&B>3&&F==4999}else Z=(($||B<4)&&F+1==Y||!$&&B>3&&F+1==Y/2)&&(A[J+1]/Y/1000|0)==P9(10,Q-3)-1;return Z}function NG0(A,Q,B){var $,J=[0],Y,Z=0,F=A.length;for(;Z<F;){for(Y=J.length;Y--;)J[Y]*=Q;J[0]+=d41.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 tS5(A,Q){var B,$,J;if(Q.isZero())return Q;if($=Q.d.length,$<32)B=Math.ceil($/3),J=(1/RG0(4,B)).toString();else B=16,J="2.3283064365386962890625e-10";A.precision+=B,Q=wf(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 R3=function(){function A($,J,Y){var Z,F=0,X=$.length;for($=$.slice();X--;)Z=$[X]*J+F,$[X]=Z%Y|0,F=Z/Y|0;if(F)$.unshift(F);return $}function Q($,J,Y,Z){var F,X;if(Y!=Z)X=Y>Z?1:-1;else for(F=X=0;F<Y;F++)if($[F]!=J[F]){X=$[F]>J[F]?1:-1;break}return X}function B($,J,Y,Z){var F=0;for(;Y--;)$[Y]-=F,F=$[Y]<J[Y]?1:0,$[Y]=F*Z+$[Y]-J[Y];for(;!$[0]&&$.length>1;)$.shift()}return function($,J,Y,Z,F,X){var D,G,V,U,K,E,z,W,H,q,I,N,w,L,O,P,T,k,x,h,u=$.constructor,S=$.s==J.s?1:-1,b=$.d,d=J.d;if(!b||!b[0]||!d||!d[0])return new u(!$.s||!J.s||(b?d&&b[0]==d[0]:!d)?NaN:b&&b[0]==0||!d?S*0:S/0);if(X)K=1,G=$.e-J.e;else X=cD,K=kA,G=tQ($.e/K)-tQ(J.e/K);x=d.length,T=b.length,H=new u(S),q=H.d=[];for(V=0;d[V]==(b[V]||0);V++);if(d[V]>(b[V]||0))G--;if(Y==null)L=Y=u.precision,Z=u.rounding;else if(F)L=Y+($.e-J.e)+1;else L=Y;if(L<0)q.push(1),E=!0;else{if(L=L/K+2|0,V=0,x==1){U=0,d=d[0],L++;for(;(V<T||U)&&L--;V++)O=U*X+(b[V]||0),q[V]=O/d|0,U=O%d|0;E=U||V<T}else{if(U=X/(d[0]+1)|0,U>1)d=A(d,U,X),b=A(b,U,X),x=d.length,T=b.length;P=x,I=b.slice(0,x),N=I.length;for(;N<x;)I[N++]=0;if(h=d.slice(),h.unshift(0),k=d[0],d[1]>=X/2)++k;do{if(U=0,D=Q(d,I,x,N),D<0){if(w=I[0],x!=N)w=w*X+(I[1]||0);if(U=w/k|0,U>1){if(U>=X)U=X-1;if(z=A(d,U,X),W=z.length,N=I.length,D=Q(z,I,W,N),D==1)U--,B(z,x<W?h:d,W,X)}else{if(U==0)D=U=1;z=d.slice()}if(W=z.length,W<N)z.unshift(0);if(B(I,z,N,X),D==-1){if(N=I.length,D=Q(d,I,x,N),D<1)U++,B(I,x<N?h:d,N,X)}N=I.length}else if(D===0)U++,I=[0];if(q[V++]=U,D&&I[0])I[N++]=b[P]||0;else I=[b[P]],N=1}while((P++<T||I[0]!==void 0)&&L--);E=I[0]!==void 0}if(!q[0])q.shift()}if(K==1)H.e=G,Ln4=E;else{for(V=1,U=q[0];U>=10;U/=10)V++;H.e=V+G*K-1,VA(H,F?Y+H.e+1:Y,Z,E)}return H}}();function VA(A,Q,B,$){var J,Y,Z,F,X,D,G,V,U,K=A.constructor;A:if(Q!=null){if(V=A.d,!V)return A;for(J=1,F=V[0];F>=10;F/=10)J++;if(Y=Q-J,Y<0)Y+=kA,Z=Q,G=V[U=0],X=G/P9(10,J-Z-1)%10|0;else if(U=Math.ceil((Y+1)/kA),F=V.length,U>=F)if($){for(;F++<=U;)V.push(0);G=X=0,J=1,Y%=kA,Z=Y-kA+1}else break A;else{G=F=V[U];for(J=1;F>=10;F/=10)J++;Y%=kA,Z=Y-kA+J,X=Z<0?0:G/P9(10,J-Z-1)%10|0}if($=$||Q<0||V[U+1]!==void 0||(Z<0?G:G%P9(10,J-Z-1)),D=B<4?(X||$)&&(B==0||B==(A.s<0?3:2)):X>5||X==5&&(B==4||$||B==6&&(Y>0?Z>0?G/P9(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]=P9(10,(kA-Q%kA)%kA),A.e=-Q||0;else V[0]=A.e=0;return A}if(Y==0)V.length=U,F=1,U--;else V.length=U+1,F=P9(10,kA-Y),V[U]=Z>0?(G/P9(10,J-Z)%P9(10,Z)|0)*F:0;if(D)for(;;)if(U==0){for(Y=1,Z=V[0];Z>=10;Z/=10)Y++;Z=V[0]+=F;for(F=1;Z>=10;Z/=10)F++;if(Y!=F){if(A.e++,V[0]==cD)V[0]=1}break}else{if(V[U]+=F,V[U]!=cD)break;V[U--]=0,F=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 uU(A,Q,B){if(!A.isFinite())return Sn4(A);var $,J=A.e,Y=t7(A.d),Z=Y.length;if(Q){if(B&&($=B-Z)>0)Y=Y.charAt(0)+"."+Y.slice(1)+_N($);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."+_N(-J-1)+Y,B&&($=B-Z)>0)Y+=_N($)}else if(J>=Z){if(Y+=_N(J+1-Z),B&&($=B-J-1)>0)Y=Y+"."+_N($)}else{if(($=J+1)<Z)Y=Y.slice(0,$)+"."+Y.slice($);if(B&&($=B-Z)>0){if(J+1===Z)Y+=".";Y+=_N($)}}return Y}function jG0(A,Q){var B=A[0];for(Q*=kA;B>=10;B/=10)Q++;return Q}function LG0(A,Q,B){if(Q>sS5){if(cA=!0,B)A.precision=B;throw Error(On4)}return VA(new A(CG0),Q,1,!0)}function bU(A,Q,B){if(Q>l41)throw Error(On4);return VA(new A(MG0),Q,B,!0)}function _n4(A){var Q=A.length-1,B=Q*kA+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 _N(A){var Q="";for(;A--;)Q+="0";return Q}function Tn4(A,Q,B,$){var J,Y=new A(1),Z=Math.ceil($/kA+4);cA=!1;for(;;){if(B%2){if(Y=Y.times(Q),Cn4(Y.d,Z))J=!0}if(B=tQ(B/2),B===0){if(B=Y.d.length-1,J&&Y.d[B]===0)++Y.d[B];break}Q=Q.times(Q),Cn4(Q.d,Z)}return cA=!0,Y}function wn4(A){return A.d[A.d.length-1]&1}function kn4(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 i41(A,Q){var B,$,J,Y,Z,F,X,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,X=E;else X=Q;F=new U(0.03125);while(A.e>-2)A=A.times(F),V+=5;$=Math.log(P9(2,V))/Math.LN10*2+5|0,X+=$,B=Y=Z=new U(1),U.precision=X;for(;;){if(Y=VA(Y.times(A),X,1),B=B.times(++G),F=Z.plus(R3(Y,B,X,1)),t7(F.d).slice(0,X)===t7(Z.d).slice(0,X)){J=V;while(J--)Z=VA(Z.times(Z),X,1);if(Q==null)if(D<3&&Gs(Z.d,X-$,K,D))U.precision=X+=10,B=Y=F=new U(1),G=0,D++;else return VA(Z,U.precision=E,K,cA=!0);else return U.precision=E,Z}Z=F}}function TN(A,Q){var B,$,J,Y,Z,F,X,D,G,V,U,K=1,E=10,z=A,W=z.d,H=z.constructor,q=H.rounding,I=H.precision;if(z.s<0||!W||!W[0]||!z.e&&W[0]==1&&W.length==1)return new H(W&&!W[0]?-1/0:z.s!=1?NaN:W?0:z);if(Q==null)cA=!1,G=I;else G=Q;if(H.precision=G+=E,B=t7(W),$=B.charAt(0),Math.abs(Y=z.e)<1500000000000000){while($<7&&$!=1||$==1&&B.charAt(1)>3)z=z.times(A),B=t7(z.d),$=B.charAt(0),K++;if(Y=z.e,$>1)z=new H("0."+B),Y++;else z=new H($+"."+B.slice(1))}else return D=LG0(H,G+2,I).times(Y+""),z=TN(new H($+"."+B.slice(1)),G-E).plus(D),H.precision=I,Q==null?VA(z,I,q,cA=!0):z;V=z,X=Z=z=R3(z.minus(1),z.plus(1),G,1),U=VA(z.times(z),G,1),J=3;for(;;){if(Z=VA(Z.times(U),G,1),D=X.plus(R3(Z,new H(J),G,1)),t7(D.d).slice(0,G)===t7(X.d).slice(0,G)){if(X=X.times(2),Y!==0)X=X.plus(LG0(H,G+2,I).times(Y+""));if(X=R3(X,new H(K),G,1),Q==null)if(Gs(X.d,G-E,q,F))H.precision=G+=E,D=Z=z=R3(V.minus(1),V.plus(1),G,1),U=VA(z.times(z),G,1),J=F=1;else return VA(X,H.precision=I,q,cA=!0);else return H.precision=I,X}X=D,J+=2}}function Sn4(A){return String(A.s*A.s/0)}function wG0(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)%kA,B<0)$+=kA;if($<J){if($)A.d.push(+Q.slice(0,$));for(J-=kA;$<J;)A.d.push(+Q.slice($,$+=kA));Q=Q.slice($),$=kA-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 eS5(A,Q){var B,$,J,Y,Z,F,X,D,G;if(Q.indexOf("_")>-1){if(Q=Q.replace(/(\d)_(?=\d)/g,"$1"),Pn4.test(Q))return wG0(A,Q)}else if(Q==="Infinity"||Q==="NaN"){if(!+Q)A.s=NaN;return A.e=NaN,A.d=null,A}if(aS5.test(Q))B=16,Q=Q.toLowerCase();else if(nS5.test(Q))B=2;else if(oS5.test(Q))B=8;else throw Error(kN+Q);if(Y=Q.search(/p/i),Y>0)X=+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(".",""),F=Q.length,Y=F-Y,J=Tn4($,new $(B),Y,Y*2);D=NG0(Q,B,cD),G=D.length-1;for(Y=G;D[Y]===0;--Y)D.pop();if(Y<0)return new $(A.s*0);if(A.e=jG0(D,G),A.d=D,cA=!1,Z)A=R3(A,J,F*4);if(X)A=A.times(Math.abs(X)<54?P9(2,X):Vs.pow(2,X));return cA=!0,A}function Av5(A,Q){var B,$=Q.d.length;if($<3)return Q.isZero()?Q:wf(A,2,Q,Q);B=1.4*Math.sqrt($),B=B>16?16:B|0,Q=Q.times(1/RG0(5,B)),Q=wf(A,2,Q,Q);var J,Y=new A(5),Z=new A(16),F=new A(20);for(;B--;)J=Q.times(Q),Q=Q.times(Y.plus(J.times(Z.times(J).minus(F))));return Q}function wf(A,Q,B,$,J){var Y,Z,F,X,D=1,G=A.precision,V=Math.ceil(G/kA);cA=!1,X=B.times(B),F=new A($);for(;;){if(Z=R3(F.times(X),new A(Q++*Q++),G,1),F=J?$.plus(Z):$.minus(Z),$=R3(Z.times(X),new A(Q++*Q++),G,1),Z=F.plus($),Z.d[V]!==void 0){for(Y=V;Z.d[Y]===F.d[Y]&&Y--;);if(Y==-1)break}Y=F,F=$,$=Z,Z=Y,D++}return cA=!0,Z.d.length=V+1,Z}function RG0(A,Q){var B=A;while(--Q)B*=A;return B}function vn4(A,Q){var B,$=Q.s<0,J=bU(A,A.precision,1),Y=J.times(0.5);if(Q=Q.abs(),Q.lte(Y))return mz=$?4:1,Q;if(B=Q.divToInt(J),B.isZero())mz=$?3:2;else{if(Q=Q.minus(B.times(J)),Q.lte(Y))return mz=wn4(B)?$?2:3:$?4:1,Q;mz=wn4(B)?$?1:4:$?3:2}return Q.minus(J).abs()}function n41(A,Q,B,$){var J,Y,Z,F,X,D,G,V,U,K=A.constructor,E=B!==void 0;if(E)if(qJ(B,1,SN),$===void 0)$=K.rounding;else qJ($,0,8);else B=K.precision,$=K.rounding;if(!A.isFinite())G=Sn4(A);else{if(G=uU(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=NG0(uU(U),10,J),U.e=U.d.length;V=NG0(G,10,J),Y=X=V.length;for(;V[--X]==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=R3(A,U,B,$,0,J),V=A.d,Y=A.e,D=Ln4;if(Z=V[B],F=J/2,D=D||V[B+1]!==void 0,D=$<4?(Z!==void 0||D)&&($===0||$===(A.s<0?3:2)):Z>F||Z===F&&($===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(X=V.length;!V[X-1];--X);for(Z=0,G="";Z<X;Z++)G+=d41.charAt(V[Z]);if(E){if(X>1)if(Q==16||Q==8){Z=Q==16?4:3;for(--X;X%Z;X++)G+="0";V=NG0(G,J,Q);for(X=V.length;!V[X-1];--X);for(Z=1,G="1.";Z<X;Z++)G+=d41.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>X)for(Y-=X;Y--;)G+="0";else if(Y<X)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 Cn4(A,Q){if(A.length>Q)return A.length=Q,!0}function Qv5(A){return new this(A).abs()}function Bv5(A){return new this(A).acos()}function $v5(A){return new this(A).acosh()}function Jv5(A,Q){return new this(A).plus(Q)}function Yv5(A){return new this(A).asin()}function Zv5(A){return new this(A).asinh()}function Fv5(A){return new this(A).atan()}function Xv5(A){return new this(A).atanh()}function Dv5(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=bU(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?bU(this,$,J):new this(0),B.s=A.s;else if(!A.d||Q.isZero())B=bU(this,Y,1).times(0.5),B.s=A.s;else if(Q.s<0)this.precision=Y,this.rounding=1,B=this.atan(R3(A,Q,Y,1)),Q=bU(this,Y,1),this.precision=$,this.rounding=J,B=A.s<0?B.minus(Q):B.plus(Q);else B=this.atan(R3(A,Q,Y,1));return B}function Gv5(A){return new this(A).cbrt()}function Vv5(A){return VA(A=new this(A),A.e+1,2)}function Uv5(A,Q,B){return new this(A).clamp(Q,B)}function Kv5(A){if(!A||typeof A!=="object")throw Error(OG0+"Object expected");var Q,B,$,J=A.defaults===!0,Y=["precision",1,SN,"rounding",0,8,"toExpNeg",-Nf,0,"toExpPos",0,Nf,"maxE",0,Nf,"minE",-Nf,0,"modulo",0,9];for(Q=0;Q<Y.length;Q+=3){if(B=Y[Q],J)this[B]=c41[B];if(($=A[B])!==void 0)if(tQ($)===$&&$>=Y[Q+1]&&$<=Y[Q+2])this[B]=$;else throw Error(kN+B+": "+$)}if(B="crypto",J)this[B]=c41[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(jn4);else this[B]=!1;else throw Error(kN+B+": "+$);return this}function Ev5(A){return new this(A).cos()}function zv5(A){return new this(A).cosh()}function yn4(A){var Q,B,$;function J(Y){var Z,F,X,D=this;if(!(D instanceof J))return new J(Y);if(D.constructor=J,Mn4(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(X=typeof Y,X==="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,F=Y;F>=10;F/=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 wG0(D,Y.toString())}if(X==="string"){if((F=Y.charCodeAt(0))===45)Y=Y.slice(1),D.s=-1;else{if(F===43)Y=Y.slice(1);D.s=1}return Pn4.test(Y)?wG0(D,Y):eS5(D,Y)}if(X==="bigint"){if(Y<0)Y=-Y,D.s=-1;else D.s=1;return wG0(D,Y.toString())}throw Error(kN+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=Kv5,J.clone=yn4,J.isDecimal=Mn4,J.abs=Qv5,J.acos=Bv5,J.acosh=$v5,J.add=Jv5,J.asin=Yv5,J.asinh=Zv5,J.atan=Fv5,J.atanh=Xv5,J.atan2=Dv5,J.cbrt=Gv5,J.ceil=Vv5,J.clamp=Uv5,J.cos=Ev5,J.cosh=zv5,J.div=Wv5,J.exp=Hv5,J.floor=qv5,J.hypot=Iv5,J.ln=Nv5,J.log=wv5,J.log10=Mv5,J.log2=Cv5,J.max=Lv5,J.min=Ov5,J.mod=jv5,J.mul=Rv5,J.pow=Pv5,J.random=_v5,J.round=Tv5,J.sign=kv5,J.sin=Sv5,J.sinh=vv5,J.sqrt=yv5,J.sub=xv5,J.sum=fv5,J.tan=bv5,J.tanh=uv5,J.trunc=hv5,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 Wv5(A,Q){return new this(A).div(Q)}function Hv5(A){return new this(A).exp()}function qv5(A){return VA(A=new this(A),A.e+1,3)}function Iv5(){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 Mn4(A){return A instanceof Vs||A&&A.toStringTag===Rn4||!1}function Nv5(A){return new this(A).ln()}function wv5(A,Q){return new this(A).log(Q)}function Cv5(A){return new this(A).log(2)}function Mv5(A){return new this(A).log(10)}function Lv5(){return kn4(this,arguments,-1)}function Ov5(){return kn4(this,arguments,1)}function jv5(A,Q){return new this(A).mod(Q)}function Rv5(A,Q){return new this(A).mul(Q)}function Pv5(A,Q){return new this(A).pow(Q)}function _v5(A){var Q,B,$,J,Y=0,Z=new this(1),F=[];if(A===void 0)A=this.precision;else qJ(A,1,SN);if($=Math.ceil(A/kA),!this.crypto)for(;Y<$;)F[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 F[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 F.push(J%1e7),Y+=4;Y=$/4}else throw Error(jn4);if($=F[--Y],A%=kA,$&&A)J=P9(10,kA-A),F[Y]=($/J|0)*J;for(;F[Y]===0;Y--)F.pop();if(Y<0)B=0,F=[0];else{B=-1;for(;F[0]===0;B-=kA)F.shift();for($=1,J=F[0];J>=10;J/=10)$++;if($<kA)B-=kA-$}return Z.e=B,Z.d=F,Z}function Tv5(A){return VA(A=new this(A),A.e+1,this.rounding)}function kv5(A){return A=new this(A),A.d?A.d[0]?A.s:0*A.s:A.s||NaN}function Sv5(A){return new this(A).sin()}function vv5(A){return new this(A).sinh()}function yv5(A){return new this(A).sqrt()}function xv5(A,Q){return new this(A).sub(Q)}function fv5(){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,VA(B,this.precision,this.rounding)}function bv5(A){return new this(A).tan()}function uv5(A){return new this(A).tanh()}function hv5(A){return VA(A=new this(A),A.e+1,1)}h1[Symbol.for("nodejs.util.inspect.custom")]=h1.toString;h1[Symbol.toStringTag]="Decimal";var Vs=h1.constructor=yn4(c41);CG0=new Vs(CG0);MG0=new Vs(MG0);var a41=2;function gv5(A,Q){let B=Q.decimalPlaces==="more-if-tiny"?Math.abs(A)<0.01?a41+1:a41:Q.decimalPlaces??a41,$=Q.intent==="balance"?A<0?"expand":"trunc":"halfExpand";return{decimalPlaces:B,roundingMode:$}}function hU(A,Q){let{decimalPlaces:B,roundingMode:$}=gv5(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 Us(A){if(A>=1e6)return`${Math.round(A/1e6)}M`;if(A>=1000)return`${Math.round(A/1000)}k`;return A.toString()}function mv5(A){if(!A)return"";let Q=A.split("-");if(Q.length>=2)return Q.slice(0,2).join("-");return A}function xn4(A){let Q=[],B=(A.inputTokens??0)+(A.cacheCreationInputTokens??0),$=A.cacheReadInputTokens??0;if(B>0)Q.push(`${Us(B)} in`);if($>0)Q.push(`${Us($)} cache read`);if(A.outputTokens)Q.push(`${Us(A.outputTokens)} out`);if(A.model)Q.push(mv5(A.model));if(Q.length>0)return`(${Q.join(", ")})`;return""}d0();q2();C1();var bn4="cost",pv5=5000,fn4=10;function un4(A){let Q=0;for(let B of A){if(B.role!=="assistant")continue;let $=B.usage;if(!$)continue;Q+=$.totalInputTokens+$.outputTokens}return Q}function dv5(A){let Q=A?.gauge;if(Q===!1||Q==="tokens"||Q==="cost")return Q;return bn4}class o41 extends S0{props;constructor(A){super();this.props=A}createState(){return new hn4}}class hn4 extends T0{mode=bn4;showCosts=!0;costInfo=null;fetchInFlight=!1;lastFetchAt=0;throttleTimer=null;isHovered=!1;configSubscription=null;initState(){super.initState(),this.configSubscription=this.widget.props.configService.config.pipe(N1((A)=>({mode:dv5(A.settings),showCosts:A.settings.showCosts??!0})),P4((A,Q)=>A.mode===Q.mode&&A.showCosts===Q.showCosts)).subscribe({next:({mode:A,showCosts:Q})=>{if(!this.mounted)return;if(this.mode!==A||this.showCosts!==Q)this.setState(()=>{this.mode=A,this.showCosts=Q});if(Q&&A==="cost"&&this.costInfo===null)this.scheduleThrottledFetch()}})}didUpdateWidget(A){if(super.didUpdateWidget(A),A.props.activeThreadID!==this.widget.props.activeThreadID){if(this.costInfo=null,this.lastFetchAt=0,this.cancelThrottleTimer(),this.mode!==!1)this.scheduleThrottledFetch();return}if(this.mode!==!1&&A.props.cumulativeBilledTokens!==this.widget.props.cumulativeBilledTokens)this.scheduleThrottledFetch();if(this.mode==="cost"&&this.showCosts&&this.costInfo===null)this.scheduleThrottledFetch()}dispose(){this.cancelThrottleTimer(),this.configSubscription?.unsubscribe(),this.configSubscription=null,super.dispose()}cancelThrottleTimer(){if(this.throttleTimer)clearTimeout(this.throttleTimer),this.throttleTimer=null}scheduleThrottledFetch(){if(!this.widget.props.activeThreadID)return;if(this.throttleTimer||this.fetchInFlight)return;let A=Date.now()-this.lastFetchAt,Q=Math.max(0,pv5-A);this.throttleTimer=setTimeout(()=>{this.throttleTimer=null,this.fetchCost()},Q)}async fetchCost(){let A=this.widget.props.activeThreadID;if(!A||this.fetchInFlight)return;this.fetchInFlight=!0,this.lastFetchAt=Date.now();try{let Q=await YA.threadDisplayCostInfo({threadID:A},{config:this.widget.props.configService});if(!this.mounted)return;if(Q.ok)this.setState(()=>{this.costInfo=Q.result});else j.debug("UsageGauge cost fetch returned non-ok",{threadID:A})}catch(Q){j.debug("UsageGauge cost fetch failed",{error:Q,threadID:A})}finally{this.fetchInFlight=!1}}handleClick=()=>{let A=this.mode==="cost"?"tokens":"cost";if(this.setState(()=>{this.mode=A}),A==="cost"&&this.costInfo===null)this.scheduleThrottledFetch();this.widget.props.configService.updateSettings("gauge",A,"global").catch((Q)=>{j.debug("UsageGauge failed to persist gauge setting",{error:Q,next:A})})};handleEnter=()=>{if(this.isHovered)return;this.setState(()=>{this.isHovered=!0})};handleExit=()=>{if(!this.isHovered)return;this.setState(()=>{this.isHovered=!1})};renderLabel(){if(this.mode==="tokens")return`${cx4(this.widget.props.cumulativeBilledTokens)} tok`;let A=this.costInfo?.totalCostUSD;if(A===null||A===void 0)return null;return hU(A,{decimalPlaces:"more-if-tiny",intent:"cost"})}build(A){if(this.mode===!1||!this.showCosts||!this.widget.props.activeThreadID)return U0.shrink();let Q=this.gaugeWidth();return new U0({width:Q,height:1,child:this.buildGaugeChild(A,Q)})}gaugeWidth(){let A=this.renderLabel();if(A===null)return fn4;let Q=" ".repeat(this.widget.props.horizontalPadding??1);return Math.max(d4(`${Q}${A}${Q}`),fn4)}buildGaugeChild(A,Q){let B=this.renderLabel();if(B===null)return U0.shrink();let $=O1.of(A).colorScheme,J=new v({color:$.foreground,dim:!0,bold:this.isHovered}),Y=" ".repeat(this.widget.props.horizontalPadding??1),Z=`${Y}${B}${Y}`,F=d4(Z),X="─".repeat(F);return new r0({mainAxisAlignment:"end",children:[new U0({width:Q,height:1,child:new r0({mainAxisAlignment:"end",children:[new T1({onClick:this.handleClick,onEnter:this.handleEnter,onExit:this.handleExit,cursor:"pointer",child:new Fs({text:Z,style:J,initialText:X,animateNonDigits:!0,key:new PA(`gauge:${this.widget.props.activeThreadID}:${this.mode}`)})})]})})]})}}class r41 extends S0{editorController;copyOnSelectEnabled;client;observer;hints;ideStatus;onPromptSubmitted;onEditorUploadLockChange;editorUploadLocked;environmentFallback;constructor(A){super({key:new Oz(A.observingClient.client)});this.editorController=A.editorController,this.copyOnSelectEnabled=A.copyOnSelectEnabled,this.client=A.observingClient.client,this.observer=A.observingClient.observer,this.hints=A.hints,this.ideStatus=A.ideStatus,this.onPromptSubmitted=A.onPromptSubmitted,this.onEditorUploadLockChange=A.onEditorUploadLockChange,this.editorUploadLocked=A.editorUploadLocked,this.environmentFallback=A.environmentFallback}createState(){return new gn4}}function cv5(A){return x6.safeParse(A).data}class gn4 extends T0{agentState=new x8(this,"idle");connectionError=new x8(this,null);pendingSend=new x8(this,!1);clientStatus=new x8(this,"disconnected");stageBytes=new x8(this,null);queuedMessages=new x8(this,[]);activeError=new x8(this,null);threadSettings=new x8(this,null);environment=new x8(this,null);cancelling=null;cancelHintTimer=new fx(this,1000);doubleEnterHintTimer=new fx(this,2000);threadController=null;imageAttachmentsController=new rr;controllerUnsubscription=null;cancelledSubscription=null;agentMessageIdSubscription=null;queuedMessagesRemovalSubscription=null;imagePreviewOverlay=null;editingMessageId=null;editingController=null;doubleEnterMessage=null;pendingQueuedMessageRestore=null;editorUploadLocked=!1;initState(){this.editorUploadLocked=this.widget.editorUploadLocked,this.subscribeToEditorController(),this.recreateThreadController(),this.subscribeToObserver()}didUpdateWidget(A){if(A.editorController!==this.widget.editorController)this.unsubscribeFromEditorController(A.editorController),this.subscribeToEditorController();if(A.editorUploadLocked!==this.widget.editorUploadLocked)this.editorUploadLocked=this.widget.editorUploadLocked;if(A.client!==this.widget.client||A.observer!==this.widget.observer)this.recreateThreadController(),this.resetThreadClientState(),this.subscribeToObserver()}resetThreadClientState(){this.pendingQueuedMessageRestore=null,this.agentState.dispose(),this.connectionError.dispose(),this.pendingSend.dispose(),this.clientStatus.dispose(),this.stageBytes.dispose(),this.queuedMessages.dispose(),this.activeError.dispose(),this.threadSettings.dispose(),this.environment.dispose()}subscribeToObserver(){this.cancelledSubscription?.unsubscribe(),this.agentMessageIdSubscription?.unsubscribe(),this.queuedMessagesRemovalSubscription?.unsubscribe(),this.agentState.subscribe(this.widget.observer.agentState()),this.connectionError.subscribe(this.widget.observer.connectionError()),this.pendingSend.subscribe(this.widget.observer.pendingSend()),this.clientStatus.subscribe(this.widget.observer.status()),this.stageBytes.subscribe(this.widget.observer.stageBytes()),this.queuedMessages.subscribe(this.widget.observer.queuedMessages()),this.activeError.subscribe(this.widget.observer.activeError()),this.threadSettings.subscribe(this.widget.observer.threadSettings()),this.environment.subscribe(this.widget.client.environmentChanges()),this.queuedMessagesRemovalSubscription=this.widget.observer.queuedMessageRemovalEvents().subscribe((A)=>this.restoreLocallyRemovedQueuedMessage(A)),this.cancelledSubscription=this.widget.observer.cancelled().subscribe((A)=>{if(!this.mounted||!this.cancelledMessageMatchesLocalCancel(A))return;this.setState(()=>{this.cancelling=null})}),this.agentMessageIdSubscription=this.widget.observer.agentMessageId().subscribe((A)=>{if(!this.mounted||!this.agentMessageIdClearsLocalCancel(A))return;this.setState(()=>{this.cancelling=null})})}cancelledMessageMatchesLocalCancel(A){if(this.cancelling===null)return!1;if(this.cancelling.messageId===null)return!0;return A.messageId===this.cancelling.messageId}agentMessageIdClearsLocalCancel(A){if(this.cancelling===null)return!1;if(this.cancelling.messageId===null)return!0;return A===null||A!==this.cancelling.messageId}subscribeToThreadController(){let A=this.threadController;if(!A)return;this.controllerUnsubscription=A.subscribe(()=>{this.setState()})}recreateThreadController(){this.controllerUnsubscription?.(),this.threadController?.dispose(),this.threadController=new s11(this.widget.observer.reader()),this.subscribeToThreadController()}onEscPressed=()=>{if(this.editingMessageId!==null)return this.cancelEdit(),"handled";if(this.threadController?.hasSelection)return this.threadController.clearSelection(),"handled";if(this.cancelling!==null)return"handled";if(!i7(this.agentState.getValue()))return"ignored";if(this.cancelHintTimer.isActive()){this.cancelHintTimer.clear();let A=this.widget.observer.agentMessageId().getValue();this.setState(()=>{this.cancelling={messageId:A}}),this.widget.client.cancelAgentLoop()}else this.cancelHintTimer.activate();return"handled"};onEditIntent=()=>{if(this.editingMessageId!==null)return"ignored";let A=this.threadController;if(!A)return"ignored";let Q=A.selectedMessageIndex;if(Q===null)return"ignored";let B=A.entries[Q];if(!B||B.type!=="message"||B.role!=="user")return"ignored";let $=cv5(B.sourceMessageID);if($===void 0)return"ignored";let J=new N8;return J.text=B.text,J.cursorPosition=B.text.length,this.editingMessageId=$,this.editingController=J,this.clearDoubleEnterMessage(),"handled"};cancelEdit(){this.editingController?.dispose(),this.editingMessageId=null,this.editingController=null,this.setState()}onSubmitEdit=(A,Q,B)=>{let $=Q.trim();if($.length===0&&B.length===0)return;let J=[];if($.length>0)J.push({type:"text",text:$});J.push(...B),this.widget.client.editUserMessage(A,J,rS4()),this.editingController?.dispose(),this.editingMessageId=null,this.editingController=null,this.threadController?.clearSelection(),this.threadController?.onScrollToBottom?.(),this.setState()};buildHints(){let A=new Set(this.widget.hints);if(this.cancelHintTimer.isActive())A.add(Zf);if(this.doubleEnterHintTimer.isActive()&&this.getDoubleEnterMessage()!==null)A.add(Xf);return A}dispose(){this.dismissImagePreview(),this.unsubscribeFromEditorController(this.widget.editorController),this.doubleEnterMessage=null,this.editingController?.dispose(),this.editingController=null,this.editingMessageId=null,this.cancelling=null,this.pendingQueuedMessageRestore=null,this.cancelledSubscription?.unsubscribe(),this.cancelledSubscription=null,this.agentMessageIdSubscription?.unsubscribe(),this.agentMessageIdSubscription=null,this.queuedMessagesRemovalSubscription?.unsubscribe(),this.queuedMessagesRemovalSubscription=null,this.controllerUnsubscription?.(),this.threadController?.dispose(),this.imageAttachmentsController.dispose(),super.dispose()}onShowImagePreview=(A,Q,B)=>{this.showOverlay(A,()=>new RN({image:Q,imageIndex:B,onDismiss:()=>this.dismissImagePreview()}))};onShowFileImagePreview=(A)=>{this.showOverlay(this.context,()=>new xj({filePath:A,onDismiss:()=>this.dismissImagePreview()}))};onShowPainterSaveDialog=(A,Q,B)=>{this.showOverlay(A,()=>new xj({filePath:B,imageBlock:Q,onDismiss:()=>this.dismissImagePreview()}))};showOverlay(A,Q){this.dismissImagePreview();let B=new pD(Q);this.imagePreviewOverlay=B,s7.of(A).insert(B)}dismissImagePreview(){if(this.imagePreviewOverlay)this.imagePreviewOverlay.remove(),this.imagePreviewOverlay=null}onErrorResponse=(A)=>{let{client:Q,observer:B}=this.widget;switch(A){case"retry":B.dismissActiveError(),Q.retryAgentLoop();break;case"dismiss":Q.dismissActiveError(B.getActiveErrorSeq()??void 0),B.dismissActiveError();break;case"add-credits":break}};getSelectedQueuedMessage(){let A=this.threadController?.selectedQueuedMessageIndex;if(A===null||A===void 0)return null;return Nn4(this.queuedMessages.getValue())[A]??null}steerNextQueuedMessage=()=>{let A=this.queuedMessages.getValue().find((Q)=>!Q.steer);if(!A)return;this.widget.client.steerQueuedMessage(A.queuedMessage.messageId)};subscribeToEditorController(){this.widget.editorController.addListener(this.clearDoubleEnterMessageOnEdit)}unsubscribeFromEditorController(A){A.removeListener(this.clearDoubleEnterMessageOnEdit)}clearDoubleEnterMessageOnEdit=()=>{if(this.doubleEnterMessage===null||this.widget.editorController.text==="")return;this.clearDoubleEnterMessage()};clearDoubleEnterMessage(){this.doubleEnterHintTimer.clear(),this.setState(()=>{this.doubleEnterMessage=null})}setDoubleEnterMessage(A){this.doubleEnterHintTimer.activate(),this.setState(()=>{this.doubleEnterMessage=A})}getDoubleEnterMessage(){let A=this.doubleEnterMessage;if(A===null)return null;if(this.queuedMessages.getValue().some((B)=>B.queuedMessage.messageId===A))return A;if(this.pendingSend.getValue())return null;return this.doubleEnterMessage=null,null}trySubmitDoubleEnterMessage(){let A=this.getDoubleEnterMessage();if(!A)return;if(this.clearDoubleEnterMessage(),!i7(this.agentState.getValue())||this.editingMessageId!==null||this.threadController?.hasSelection)return;this.widget.client.steerQueuedMessage(A)}handleEditorUploadLockChange=(A)=>{this.editorUploadLocked=A,this.widget.onEditorUploadLockChange(A)};restoreLocallyRemovedQueuedMessage(A){let Q=this.pendingQueuedMessageRestore;if(!Q||A.serverMessage.queuedMessageId!==Q.queuedMessage.messageId)return;if(this.pendingQueuedMessageRestore=null,this.editorUploadLocked)return;this.popRemovedQueuedMessageIntoEditor(Q)}popRemovedQueuedMessageIntoEditor(A){this.widget.editorController.text=rj.rowText(A),this.imageAttachmentsController.setImages(A.queuedMessage.content.filter(F30)),this.threadController?.clearSelection()}build(A){let{editorController:Q,client:B}=this.widget,$=this.threadController,J=this.widget.observer.agentMode,Y=this.widget.observer.reasoningEffort,Z=this.queuedMessages.getValue();$.setQueuedMessageCount(Z.length);let{configService:F}=j3.of(A),X=B.getThreadId()??null,D=un4(this.widget.observer.protocolMessages()),G=this.threadSettings.getValue(),V=new o41({activeThreadID:X,configService:F,cumulativeBilledTokens:D}),U=t11(J,G),K=new X4(()=>{return this.onEscPressed()}),E=new X4(()=>{let P=this.getSelectedQueuedMessage();if(!P)return"ignored";return B.steerQueuedMessage(P.queuedMessage.messageId),"handled"}),z=new X4(()=>{let P=this.getSelectedQueuedMessage();if(!P)return"ignored";return this.pendingQueuedMessageRestore=P,B.removeQueuedMessage(P.queuedMessage.messageId),this.clearDoubleEnterMessage(),"handled"}),W=new X4(()=>{if($.selectPrevious())return this.clearDoubleEnterMessage(),"handled";return"ignored"}),H=new X4(()=>{if($.selectNext())return this.clearDoubleEnterMessage(),"handled";return"ignored"}),q=new X4(()=>{return $.onPageUp?.(),"handled"}),I=new X4(()=>{return $.onPageDown?.(),"handled"}),N=new X4(()=>{return $.clearSelection(),"handled"}),w=new X4(()=>this.onEditIntent()),L=new X4((P)=>{if($.selectQueuedMessage(P.visualIndex))return this.clearDoubleEnterMessage(),"handled";return"ignored"});return new t4({actions:new Map([[cD0,K],[lD0,w],[br,N],[xr,L],[fr,E],[yr,z],[Gf,W],[Df,H],[hr,q],[gr,I]]),child:new h5({debugLabel:"ActiveThreadShortcuts",shortcuts:new Map([[_1.key("Escape"),new cD0],[_1.key("e"),new lD0]]),child:new mD({onShowImagePreview:this.onShowFileImagePreview,child:new jN({onShowImagePreview:this.onShowImagePreview,onShowSaveDialog:this.onShowPainterSaveDialog,child:new Ds({child:new M41({threadController:$,copyOnSelectEnabled:this.widget.copyOnSelectEnabled,onShowImagePreview:this.onShowImagePreview,activeThreadID:X,editingMessageId:this.editingMessageId,editingController:this.editingController,onSubmitEdit:this.onSubmitEdit}),editorController:Q,imageAttachmentsController:this.imageAttachmentsController,activeThreadID:X,usageGauge:V,queuedMessages:Z,selectedQueuedMessageIndex:$.selectedQueuedMessageIndex,onSteerNextQueuedMessage:this.steerNextQueuedMessage,onDequeueAllMessages:()=>{this.pendingQueuedMessageRestore=null;for(let P of this.queuedMessages.getValue())B.removeQueuedMessage(P.queuedMessage.messageId);$.clearSelection()},onEditorUploadLockChange:this.handleEditorUploadLockChange,editorEnabled:!$.hasSelection&&this.editingMessageId===null,hints:this.buildHints(),clientStatus:this.clientStatus.getValue(),stageBytes:this.stageBytes.getValue(),connectionError:this.connectionError.getValue(),cancelling:this.cancelling!==null,agentMode:J,reasoningEffort:Y,speedCostMultiplier:U,activeError:this.activeError.getValue(),onErrorResponse:this.onErrorResponse,ideStatus:this.widget.ideStatus,environment:this.environment.getValue()??this.widget.environmentFallback,onSubmit:(P)=>{if(P.length===0){this.trySubmitDoubleEnterMessage();return}let T=P.find((u)=>u.type==="text");if(T&&T.type==="text")this.widget.onPromptSubmitted(T.text);let k=ZY0(this.widget.ideStatus),x=i7(this.agentState.getValue()),h=B.sendUserMessage(P,void 0,{userState:k});if(x)this.setDoubleEnterMessage(h);else this.clearDoubleEnterMessage();$.onScrollToBottom?.()}})})})})})}}function mn4(A,Q){return{noun:"thread",verb:"archive and exit",description:"Archive thread and exit",keywords:["close","done","finish","quit"],get status(){return Q()?{type:"enabled"}:{type:"disabled",reason:"Cannot archive an empty thread"}},run:(B,$,J)=>{let Y=Q()?.client.getThreadId();if(!Y)return;let Z=Q5.maybeOf($);(async()=>{let F=await A.archiveThread(Y);if(J(),F===null)t4.maybeInvoke($,new Vf);else Z?.show(`Failed to archive thread: ${F.message}`,"error")})()}}}G8();function lv5(A){return new Date(A).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}class Ks extends H1{message;onDestruct;constructor({key:A,message:Q,onDestruct:B}){super(A?{key:A}:{});this.message=Q,this.onDestruct=B}build(A){let B=P0.of(A).colors,$=s1.of(A),J=new v({color:B.foreground,dim:!0}),Y=new v({color:B.foreground}),Z=Math.max(50,Math.min(80,$.size.width-4)),F=[{keys:["Esc"],label:"destroy message"}];return new TA({header:this.message.title,footer:F,visualStyle:{borderShape:"classic",borderAnimation:"mysterious-message",titleAnimation:"scramble"},chromePadding:K0.symmetric(2,2),minWidth:Z,maxWidth:Z,maxHeight:$.size.height,autofocus:!1,onDismiss:this.onDestruct,child:new e5({child:new iY({autofocus:!0,child:new x0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new a1({child:new p({text:new C(lv5(this.message.visibleFrom),J)})}),new U0({height:1}),new p({text:new C(this.message.body,Y),selectable:!0})]})})})})}}var s41=" .:-=+*#%@",t41=[" ",".","·","·",":",":","•","•","●","●"],Cf=0.5,vN=64,iv5=30,Es=0.9,dn4=1.4,e41=Es+dn4,AA1=6,pn4=0.5,nv5=1.6,av5=28;class QA1 extends S0{originX;originY;agentMode;visualStyle;primaryColor;secondaryColor;elapsed;fps;onComplete;constructor({originX:A,originY:Q,agentMode:B,visualStyle:$="classic",primaryColor:J,secondaryColor:Y,elapsed:Z,fps:F=iv5,onComplete:X,key:D}){super(D?{key:D}:{});this.originX=A,this.originY=Q,this.agentMode=B,this.visualStyle=$,this.primaryColor=J,this.secondaryColor=Y,this.elapsed=Z,this.fps=F,this.onComplete=X}createState(){return new cn4}}class cn4 extends T0{elapsed=0;timer=null;startMs=0;completed=!1;glow=new M9;initState(){if(super.initState(),this.widget.elapsed!==void 0){this.elapsed=this.widget.elapsed;return}if(this.startMs=performance.now(),this.widget.fps<=0){this.elapsed=e41,this.complete();return}let A=Math.max(16,Math.floor(1000/this.widget.fps));this.timer=setInterval(()=>{if(!this.mounted)return;if(this.elapsed=(performance.now()-this.startMs)/1000,this.elapsed>=e41){this.elapsed=e41,this.setState(()=>{}),this.complete();return}this.setState(()=>{})},A)}didUpdateWidget(A){if(super.didUpdateWidget(A),this.widget.elapsed!==void 0&&this.widget.elapsed!==A.elapsed)this.elapsed=this.widget.elapsed,this.setState(()=>{})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null;super.dispose()}complete(){if(this.completed)return;if(this.completed=!0,this.timer)clearInterval(this.timer),this.timer=null;this.widget.onComplete?.()}build(A){let Q=O1.of(A);return new ln4({originX:this.widget.originX,originY:this.widget.originY,elapsed:this.elapsed,agentMode:this.widget.agentMode,visualStyle:this.widget.visualStyle,primaryColor:this.widget.primaryColor,secondaryColor:this.widget.secondaryColor,backgroundColor:Q.colorScheme.background,glow:this.glow})}}class ln4 extends A8{props;constructor(A,Q){super(Q?{key:Q}:{});this.props=A}createElement(){return new pQ(this)}createRenderObject(){return new in4(this.props)}updateRenderObject(A){A.update(this.props)}}function ov5(A){let Q=A>>>0;return()=>{Q=Q+1831565813>>>0;let B=Q;return B=Math.imul(B^B>>>15,B|1),B^=B+Math.imul(B^B>>>7,B|61),((B^B>>>14)>>>0)/4294967296}}class in4 extends B4{_props;_palette=[];_paletteSignature="";_fragments=null;_fragmentRadius=0;_fragmentVisualStyle="classic";constructor(A){super();this._props=A,this.rebuildPalette()}update(A){let Q=A.agentMode!==this._props.agentMode||A.visualStyle!==this._props.visualStyle||A.primaryColor!==this._props.primaryColor||A.secondaryColor!==this._props.secondaryColor;if(this._props=A,Q)this.rebuildPalette();this.markNeedsPaint()}rebuildPalette(){let A=this._props.primaryColor&&this._props.secondaryColor?{primary:this._props.primaryColor,secondary:this._props.secondaryColor}:void 0;this._palette=Array.from({length:vN},(Q,B)=>{let $=B/(vN-1);return dQ($,this._props.agentMode,A)}),this._paletteSignature=`${this._props.agentMode??"smart"}|${this._props.primaryColor?`${this._props.primaryColor.r},${this._props.primaryColor.g},${this._props.primaryColor.b}`:""}|${this._props.secondaryColor?`${this._props.secondaryColor.r},${this._props.secondaryColor.g},${this._props.secondaryColor.b}`:""}`}performLayout(){let A=this._lastConstraints,Q=A.constrain(A.biggest.width,A.biggest.height);this.setSize(Q.width,Q.height),super.performLayout()}getMaxRadius(A,Q){let B=A*pn4,$=Q*pn4*(1/Cf);return Math.max(AA1+1,Math.min(B,$))}buildFragments(A,Q){let B=ov5(2654435761),$=[],J=Q==="neo"?t41:s41,Y=Math.min(600,Math.max(120,Math.floor(A*A*0.45)));for(let Z=0;Z<Y;Z++){let F=Math.sqrt(B()),X=B()*Math.PI*2,D=Math.cos(X)*F*A,G=Math.sin(X)*F*A*Cf,V=(0.5+F*0.9)*nv5*A,U=0.7+B()*0.6,K=Math.cos(X)*V*U,E=Math.sin(X)*V*U*Cf-B()*A*0.6,z=0.4+B()*0.6,W=Math.min(J.length-1,Math.floor(z*J.length));$.push({x:D,y:G,vx:K,vy:E,glyph:J[W]||"*",intensity:z})}return $}paint(A,Q=0,B=0){let{elapsed:$,originX:J,originY:Y,backgroundColor:Z,glow:F}=this._props,X=Q+this.offset.x,D=B+this.offset.y,G=Math.floor(this.size.width),V=Math.floor(this.size.height),U=A.getSize(),K=U.width,E=U.height,z=this._palette;this._paletteSignature;let W=this.getMaxRadius(G,V),H=J-X,q=Y-D;if($<Es){let O=1-(1-$/Es)**3,P=AA1+(W-AA1)*O;this.paintOrb(A,X,D,H,q,P,1,$,F,z,Z,K,E);return}if(!this._fragments||this._fragmentRadius!==W||this._fragmentVisualStyle!==this._props.visualStyle)this._fragments=this.buildFragments(W,this._props.visualStyle),this._fragmentRadius=W,this._fragmentVisualStyle=this._props.visualStyle;let I=Math.min(1,($-Es)/dn4);if(I<0.2){let L=1-I/0.2;this.paintOrb(A,X,D,H,q,W,L,$,F,z,Z,K,E)}let N=$-Es,w=1-I;for(let L of this._fragments){let O=L.x+L.vx*N,P=L.y+L.vy*N+0.5*av5*N*N,T=Math.round(X+H+O),k=Math.round(D+q+P);if(T<0||T>=K||k<0||k>=E)continue;let x=Math.max(0.05,L.intensity*w),h=this._props.visualStyle==="neo"?t41:s41,u=Math.min(h.length-1,Math.floor(x*h.length)),S=I>0.7?".":h[u]||L.glyph,b=Math.min(vN-1,Math.floor(x*vN)),d=z[b]||z[vN-1];if(!d)continue;A.setCell(T,k,{char:S,width:1,style:{fg:d,bg:Z,dim:I>0.55,bold:I<0.15}})}}paintOrb(A,Q,B,$,J,Y,Z,F,X,D,G,V,U){let K=Math.max(1,Y),E=K*K,z=1/E,W=1/Cf,H=this._props.visualStyle,q=Math.max(0,Math.floor(J-K*Cf)),I=Math.min(U-B-1,Math.ceil(J+K*Cf));for(let N=q;N<=I;N++){let w=B+N;if(w<0||w>=U)continue;let L=(N-J)*W,O=L*L;if(O>=E)continue;let P=Math.sqrt(E-O),T=Math.max(0,Math.floor($-P)),k=Math.min(V-Q-1,Math.ceil($+P));for(let x=T;x<=k;x++){let h=x-$,u=h*h+O;if(u>=E)continue;let S=1-u*z,b=X.sample(x,N,F,1),d=b*S*Z,c=s41;if(H==="neo"){let V0=Math.sqrt(u*z),w0=h/K,Z0=L/K,R0=Math.sqrt(Math.max(0,1-V0*V0)),B0=Math.max(0,w0*-0.45+Z0*-0.35+R0*0.88),I0=Math.max(0,1-R0)**1.8,n=Math.exp(-((w0+0.28)*(w0+0.28)*54+(Z0+0.32)*(Z0+0.32)*115));if(d=(0.12+S*0.16+B0*0.6+I0*0.34+n*0.75+b*0.16)*Z,c=t41,d<0.08)continue}if(d<=0)continue;let g=Math.max(H==="neo"?1:0,Math.min(c.length-1,Math.floor(d*c.length))),l=c[g]||" ",s=Math.min(vN-1,Math.floor(d*vN*(H==="neo"?1.2:1))),A0=D[s]||D[vN-1];if(!A0)continue;let H0=Q+x;if(H0<0||H0>=V)continue;A.setCell(H0,w,{char:l,width:1,style:{fg:A0,bg:G,bold:H==="neo"&&d>0.65}})}}}}var BA1=5,nn4=3.8,an4=280;var rv5=["*","+",".",":","'"];function on4(A,Q,B=Date.now()){return Math.floor(A)*73856093^Math.floor(Q)*19349663^B}function rn4(A,Q,B={}){let{burstParticleCount:$=72,burstSpeedMin:J=10,burstSpeedRange:Y=16,rainSpeedMin:Z=4,rainSpeedRange:F=9,burstDelayMax:X=0.18,rainDelayMax:D=1,burstLifetimeMin:G=1.4,burstLifetimeRange:V=1.2,rainLifetimeMin:U=2.8,rainLifetimeRange:K=1.8,burstDriftMin:E=0.3,burstDriftRange:z=0.9,rainDriftMin:W=0.8,rainDriftRange:H=1.8,rainAngleCenter:q=Math.PI/2,rainAngleSpread:I=1.4,colorIndexCount:N=6,sparkleGlyphs:w=rv5}=B,L=sv5(A),O=[];for(let P=0;P<Q;P++){let T=P<$,k=T?L()*Math.PI*2:q+(L()-0.5)*I,x=T?J+L()*Y:Z+L()*F,h=T?L()*X:L()*D,u=T?G+L()*V:U+L()*K,S=T?E+L()*z:W+L()*H,b=L()*Math.PI*2,d=w[Math.floor(L()*w.length)]??"*";O.push({kind:T?"burst":"rain",angle:k,speed:x,delay:h,lifetime:u,drift:S,phase:b,glyph:d,colorIndex:Math.floor(L()*N)})}return O}function sn4(A,Q){let{elapsedSeconds:B,originX:$,originY:J,unitScale:Y=1}=Q,Z=B-A.delay;if(Z<0||Z>A.lifetime)return null;let F=A.kind==="burst"?9:12,X=A.speed*Y,D=Math.cos(A.angle)*X,G=Math.sin(A.angle)*X,V=Math.sin((Z+A.phase)*8)*A.drift*Y;return{x:$+D*Z+V,y:J+G*Z+F*Y*Z*Z,progress:Z/A.lifetime}}function sv5(A){let Q=A>>>0;if(Q===0)Q=2654435769;return()=>{return Q=Q*1664525+1013904223>>>0,Q/4294967296}}class PG0 extends A8{text;baseColor;backgroundColor;glow;time;agentMode;orbWidth;orbHeight;glowIntensity;shockwaves;constructor({key:A,text:Q,baseColor:B,backgroundColor:$,glow:J,time:Y,agentMode:Z,orbWidth:F=40,orbHeight:X=40,glowIntensity:D=0.4,shockwaves:G=[]}){super(A?{key:A}:{});this.text=Q,this.baseColor=B,this.backgroundColor=$,this.glow=J,this.time=Y,this.agentMode=Z,this.orbWidth=F,this.orbHeight=X,this.glowIntensity=D,this.shockwaves=G}createElement(){return new pQ(this)}createRenderObject(){return new tn4(this.text,this.baseColor,this.backgroundColor,this.glow,this.time,this.agentMode,this.orbWidth,this.orbHeight,this.glowIntensity,this.shockwaves)}updateRenderObject(A){A.update(this.text,this.baseColor,this.backgroundColor,this.glow,this.time,this.agentMode,this.orbWidth,this.orbHeight,this.glowIntensity,this.shockwaves)}}var tv5=0.5;class tn4 extends B4{_text;_baseColor;_backgroundColor;_glow;_time;_agentMode;_orbWidth;_orbHeight;_glowIntensity;_shockwaves;constructor(A,Q,B,$,J,Y,Z,F,X,D){super();this._text=A;this._baseColor=Q;this._backgroundColor=B;this._glow=$;this._time=J;this._agentMode=Y;this._orbWidth=Z;this._orbHeight=F;this._glowIntensity=X;this._shockwaves=D}update(A,Q,B,$,J,Y,Z,F,X,D){let G=A!==this._text;if(this._text=A,this._baseColor=Q,this._backgroundColor=B,this._glow=$,this._time=J,this._agentMode=Y,this._orbWidth=Z,this._orbHeight=F,this._glowIntensity=X,this._shockwaves=D,G)this.markNeedsLayout();this.markNeedsPaint()}getMinIntrinsicWidth(A){return d4(this._text,!1)}getMaxIntrinsicWidth(A){return d4(this._text,!1)}getMinIntrinsicHeight(A){return 1}getMaxIntrinsicHeight(A){return 1}performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=d4(this._text,!1),B=A.constrain(Q,1);this.setSize(B.width,B.height),super.performLayout()}paint(A,Q=0,B=0){let $=Q+this.offset.x,J=B+this.offset.y,Y=L4(this._text),Z=this._agentMode==="rush"?2.5:1,{primary:F,secondary:X}=Ct0(this._agentMode),D=$;for(let G=0;G<Y.length;G++){let V=Y[G],U=f6(V,!1),E=(1-G/Math.max(Y.length-1,1)*0.7)**1.2,z=this._glow.sample(this._orbWidth-2+G*0.5,this._orbHeight/2,this._time,Z),W=0;for(let N of this._shockwaves){let w=this._time-N.startTime;if(w<0||w>kD)continue;let L=this._orbWidth*0.7+G,O=this._orbHeight/2,P=L-N.x,T=(O-N.y)/tv5,k=Math.sqrt(P*P+T*T),x=w*FX0,h=Math.abs(k-x);if(h<Rz){let u=1-w/kD,S=(1-h/Rz)*u;W=Math.max(W,S*0.6)}}let H=z**0.7,q=Math.min(1,H*E+W),I=this.blendWithGlow(this._baseColor,q,F,X);A.setCell(D,J,{char:V,width:U,style:{fg:I,bg:this._backgroundColor}}),D+=U}}blendWithGlow(A,Q,B,$){let J=qj(B,$,Q),Y=Q*this._glowIntensity;if(A.type==="rgb"){let Z=A.value,F=Math.round(Z.r*(1-Y)+J.r*Y),X=Math.round(Z.g*(1-Y)+J.g*Y),D=Math.round(Z.b*(1-Y)+J.b*Y);return{type:"rgb",value:{r:F,g:X,b:D}}}if(Y>0.15)return{type:"rgb",value:{r:J.r,g:J.g,b:J.b}};return A}}var en4=["ctrl+x","y","z"],Aa4=1.5,ev5=2000,_G0="!@#$%^&*()_+-=[]{}|;:,.<>?/~`0123456789",FA1="Welcome to ",zs=2,ZA1=1,Qa4=zs+ZA1,Ba4=3.2,Ay5=0.18,Qy5=1.5,$a4=1.4,Ja4=30,$A1=0.16,Ua4=[{suffix:"the Orb",palettePosition:0.62},{suffix:"the Future",palettePosition:0.72},{suffix:"the Frontier",palettePosition:0.82},{suffix:"the Jungle",palettePosition:0.54},{suffix:"your Agent",palettePosition:0.68}],XA1={suffix:"Amp",palettePosition:0.98,final:!0},By5=[...Ua4,XA1],$y5=Math.max(...By5.map((A)=>d4(A.suffix,!1))),Jy5=L4(FA1).length,Yy5=L4(`${FA1}${XA1.suffix}`).length;function Zy5(){let A=[...Ua4];for(let Q=A.length-1;Q>0;Q--){let B=Math.floor(Math.random()*(Q+1)),$=A[Q];A[Q]=A[B],A[B]=$}return A.push(XA1),A}function Fy5(A,Q){let B=Q.length-1;if(A>=zs)return Q[B];let $=zs/B,J=Math.min(B,Math.floor(A/$));return Q[J]}function Ya4(A,Q){let B={color:A};if(Q)B.bold=!0;return new v(B)}function Xy5(A,Q){let $=Math.max(0,A-zs)%Ba4/Ba4*1.6-0.3,J=Q/Math.max(1,Yy5-1),Y=Math.abs(J-$);return Math.max(0,1-Y/Ay5)**2}function Za4(A,Q,B,$,J,Y){if(!Y.bold)return new C(A,Ya4(dQ(Q,$,J),!1));return new C("",void 0,L4(A).map((Z,F)=>{let X=Xy5(B,Y.characterOffset+F),D=dQ(Math.min(1,Q+X*0.14),$,J);return new C(Z,Ya4(D,!0))}))}function Dy5(A,Q,B,$){let J=Fy5(A,Q),Y="final"in J,Z=Math.max(0,A-zs),F=Y&&Z<ZA1?Math.sin(Z/ZA1*Math.PI):0,X=Y?0.74+F*0.22:Math.max(0.34,J.palettePosition-0.24),D=Y?0.88+F*0.12:J.palettePosition,G=Za4(FA1,X,A,B,$,{bold:Y,characterOffset:0}),V=Za4(J.suffix,D,A,B,$,{bold:Y,characterOffset:Jy5});return new r0({mainAxisSize:"min",children:[new p({text:G}),new U0({width:$y5,child:new Sz({contentKey:J.suffix,durationMs:280,child:new p({text:V})})})]})}function Gy5(A,Q,B){let $=Math.max(A.length,Q.length),J=[];for(let Y=0;Y<$;Y++){let Z=A[Y]??" ",F=Q[Y]??" ",X=Z===" "||Z===`
|
|
5770
|
+
*/var Nf=9000000000000000,SN=1e9,d41="0123456789abcdef",CG0="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",MG0="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",c41={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Nf,maxE:Nf,crypto:!1},Ln4,mz,cA=!0,OG0="[DecimalError] ",kN=OG0+"Invalid argument: ",On4=OG0+"Precision limit exceeded",jn4=OG0+"crypto unavailable",Rn4="[object Decimal]",tQ=Math.floor,P9=Math.pow,nS5=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,aS5=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,oS5=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Pn4=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,cD=1e7,kA=7,rS5=9007199254740991,sS5=CG0.length-1,l41=MG0.length-1,h1={toStringTag:Rn4};h1.absoluteValue=h1.abs=function(){var A=new this.constructor(this);if(A.s<0)A.s=1;return VA(A)};h1.ceil=function(){return VA(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(kN+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,F=(A=new Y.constructor(A)).d,X=Y.s,D=A.s;if(!Z||!F)return!X||!D?NaN:X!==D?X:Z===F?0:!Z^X<0?1:-1;if(!Z[0]||!F[0])return Z[0]?X:F[0]?-D:0;if(X!==D)return X;if(Y.e!==A.e)return Y.e>A.e^X<0?1:-1;$=Z.length,J=F.length;for(Q=0,B=$<J?$:J;Q<B;++Q)if(Z[Q]!==F[Q])return Z[Q]>F[Q]^X<0?1:-1;return $===J?0:$>J^X<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())+kA,$.rounding=1,B=tS5($,vn4($,B)),$.precision=A,$.rounding=Q,VA(mz==2||mz==3?B.neg():B,A,Q,!0)};h1.cubeRoot=h1.cbrt=function(){var A,Q,B,$,J,Y,Z,F,X,D,G=this,V=G.constructor;if(!G.isFinite()||G.isZero())return new V(G);if(cA=!1,Y=G.s*P9(G.s*G,0.3333333333333333),!Y||Math.abs(Y)==1/0){if(B=t7(G.d),A=G.e,Y=(A-B.length+1)%3)B+=Y==1||Y==-2?"0":"00";if(Y=P9(B,0.3333333333333333),A=tQ((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(F=$,X=F.times(F).times(F),D=X.plus(G),$=R3(D.plus(G).times(F),D.plus(X),Z+2,1),t7(F.d).slice(0,Z)===(B=t7($.d)).slice(0,Z))if(B=B.slice(Z-3,Z+1),B=="9999"||!J&&B=="4999"){if(!J){if(VA(F,A+1,0),F.times(F).times(F).eq(G)){$=F;break}}Z+=4,J=1}else{if(!+B||!+B.slice(1)&&B.charAt(0)=="5")VA($,A+1,1),Q=!$.times($).times($).eq(G);break}return cA=!0,VA($,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-tQ(this.e/kA))*kA,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 R3(this,new this.constructor(A))};h1.dividedToIntegerBy=h1.divToInt=function(A){var Q=this,B=Q.constructor;return VA(R3(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 VA(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,F=new Z(1);if(!Y.isFinite())return new Z(Y.s?1/0:NaN);if(Y.isZero())return F;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/RG0(4,A)).toString();else A=16,Q="2.3283064365386962890625e-10";Y=wf(Z,1,Y.times(Q),new Z(1),!0);var X,D=A,G=new Z(8);for(;D--;)X=Y.times(Y),Y=F.minus(X.times(G.minus(X.times(G))));return VA(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=wf(Y,2,J,J,!0);else{A=1.4*Math.sqrt($),A=A>16?16:A|0,J=J.times(1/RG0(5,A)),J=wf(Y,2,J,J,!0);var Z,F=new Y(5),X=new Y(16),D=new Y(20);for(;A--;)Z=J.times(J),J=J.times(F.plus(Z.times(X.times(Z).plus(D))))}return Y.precision=Q,Y.rounding=B,VA(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,R3(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()?bU(Q,$,J):new Q(0):new Q(NaN);if(A.isZero())return bU(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 VA(new Y(J),A,Q,!0);return Y.precision=B=$-J.e,J=R3(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=bU(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,F,X,D=this,G=D.constructor,V=G.precision,U=G.rounding;if(!D.isFinite()){if(!D.s)return new G(NaN);if(V+4<=l41)return Z=bU(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<=l41)return Z=bU(G,V+4,U).times(0.25),Z.s=D.s,Z;G.precision=F=V+10,G.rounding=1,B=Math.min(28,F/kA+2|0);for(A=B;A;--A)D=D.div(D.times(D).plus(1).sqrt().plus(1));cA=!1,Q=Math.ceil(F/kA),$=1,X=D.times(D),Z=new G(D),J=D;for(;A!==-1;)if(J=J.times(X),Y=Z.minus(J.div($+=2)),J=J.times(X),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,VA(Z,G.precision=V,G.rounding=U,!0)};h1.isFinite=function(){return!!this.d};h1.isInteger=h1.isInt=function(){return!!this.d&&tQ(this.e/kA)>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,F,X,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,F=V+K,Z=TN(D,F),$=Q?LG0(G,F+10):TN(A,F),X=R3(Z,$,F,1),Gs(X.d,J=V,U))do if(F+=10,Z=TN(D,F),$=Q?LG0(G,F+10):TN(A,F),X=R3(Z,$,F,1),!Y){if(+t7(X.d).slice(J+1,J+15)+1==100000000000000)X=VA(X,V+1,0);break}while(Gs(X.d,J+=10,U));return cA=!0,VA(X,V,U)};h1.minus=h1.sub=function(A){var Q,B,$,J,Y,Z,F,X,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,F=E.precision,X=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(X===3?-0:0);return cA?VA(A,F,X):A}if(B=tQ(A.e/kA),G=tQ(K.e/kA),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(F/kA),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]=cD-1;--D[J],D[$]+=cD}D[$]-=U[$]}for(;D[--Z]===0;)D.pop();for(;D[0]===0;D.shift())--B;if(!D[0])return new E(X===3?-0:0);return A.d=D,A.e=jG0(D,B),cA?VA(A,F,X):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 VA(new $(B),$.precision,$.rounding);if(cA=!1,$.modulo==9)Q=R3(B,A.abs(),0,3,1),Q.s*=A.s;else Q=R3(B,A,0,$.modulo,1);return Q=Q.times(A),cA=!0,B.minus(Q)};h1.naturalExponential=h1.exp=function(){return i41(this)};h1.naturalLogarithm=h1.ln=function(){return TN(this)};h1.negated=h1.neg=function(){var A=new this.constructor(this);return A.s=-A.s,VA(A)};h1.plus=h1.add=function(A){var Q,B,$,J,Y,Z,F,X,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,F=U.precision,X=U.rounding,!D[0]||!G[0]){if(!G[0])A=new U(V);return cA?VA(A,F,X):A}if(Y=tQ(V.e/kA),$=tQ(A.e/kA),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(F/kA),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)/cD|0,D[J]%=cD;if(Q)D.unshift(Q),++$;for(Z=D.length;D[--Z]==0;)D.pop();return A.d=D,A.e=jG0(D,$),cA?VA(A,F,X):A};h1.precision=h1.sd=function(A){var Q,B=this;if(A!==void 0&&A!==!!A&&A!==1&&A!==0)throw Error(kN+A);if(B.d){if(Q=_n4(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 VA(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())+kA,$.rounding=1,B=Av5($,vn4($,B)),$.precision=A,$.rounding=Q,VA(mz>2?B.neg():B,A,Q,!0)};h1.squareRoot=h1.sqrt=function(){var A,Q,B,$,J,Y,Z=this,F=Z.d,X=Z.e,D=Z.s,G=Z.constructor;if(D!==1||!F||!F[0])return new G(!D||D<0&&(!F||F[0])?NaN:F?Z:1/0);if(cA=!1,D=Math.sqrt(+Z),D==0||D==1/0){if(Q=t7(F),(Q.length+X)%2==0)Q+="0";if(D=Math.sqrt(Q),X=tQ((X+1)/2)-(X<0||X%2),D==1/0)Q="5e"+X;else Q=D.toExponential(),Q=Q.slice(0,Q.indexOf("e")+1)+X;$=new G(Q)}else $=new G(D.toString());B=(X=G.precision)+3;for(;;)if(Y=$,$=Y.plus(R3(Z,Y,B+2,1)).times(0.5),t7(Y.d).slice(0,B)===(Q=t7($.d)).slice(0,B))if(Q=Q.slice(B-3,B+1),Q=="9999"||!J&&Q=="4999"){if(!J){if(VA(Y,X+1,0),Y.times(Y).eq(Z)){$=Y;break}}B+=4,J=1}else{if(!+Q||!+Q.slice(1)&&Q.charAt(0)=="5")VA($,X+1,1),A=!$.times($).eq(Z);break}return cA=!0,VA($,X,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=R3(B,new $(1).minus(B.times(B)).sqrt(),A+10,0),$.precision=A,$.rounding=Q,VA(mz==2||mz==4?B.neg():B,A,Q,!0)};h1.times=h1.mul=function(A){var Q,B,$,J,Y,Z,F,X,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=tQ(G.e/kA)+tQ(A.e/kA),X=U.length,D=K.length,X<D)Y=U,U=K,K=Y,Z=X,X=D,D=Z;Y=[],Z=X+D;for($=Z;$--;)Y.push(0);for($=D;--$>=0;){Q=0;for(J=X+$;J>$;)F=Y[J]+K[$]*U[J-$-1]+Q,Y[J--]=F%cD|0,Q=F/cD|0;Y[J]=(Y[J]+Q)%cD|0}for(;!Y[--Z];)Y.pop();if(Q)++B;else Y.shift();return A.d=Y,A.e=jG0(Y,B),cA?VA(A,V.precision,V.rounding):A};h1.toBinary=function(A,Q){return n41(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(qJ(A,0,SN),Q===void 0)Q=$.rounding;else qJ(Q,0,8);return VA(B,A+B.e+1,Q)};h1.toExponential=function(A,Q){var B,$=this,J=$.constructor;if(A===void 0)B=uU($,!0);else{if(qJ(A,0,SN),Q===void 0)Q=J.rounding;else qJ(Q,0,8);$=VA(new J($),A+1,Q),B=uU($,!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=uU(J);else{if(qJ(A,0,SN),Q===void 0)Q=Y.rounding;else qJ(Q,0,8);$=VA(new Y(J),A+J.e+1,Q),B=uU($,!1,A+$.e+1)}return J.isNeg()&&!J.isZero()?"-"+B:B};h1.toFraction=function(A){var Q,B,$,J,Y,Z,F,X,D,G,V,U,K=this,E=K.d,z=K.constructor;if(!E)return new z(K);if(D=B=new z(1),$=X=new z(0),Q=new z($),Y=Q.e=_n4(E)-K.e-1,Z=Y%kA,Q.d[0]=P9(10,Z<0?kA+Z:Z),A==null)A=Y>0?Q:D;else{if(F=new z(A),!F.isInt()||F.lt(D))throw Error(kN+F);A=F.gt(Q)?Y>0?Q:D:F}cA=!1,F=new z(t7(E)),G=z.precision,z.precision=Y=E.length*kA*2;for(;;){if(V=R3(F,Q,0,1,1),J=B.plus(V.times($)),J.cmp(A)==1)break;B=$,$=J,J=D,D=X.plus(V.times(J)),X=J,J=Q,Q=F.minus(V.times(J)),F=J}return J=R3(A.minus(B),$,0,1,1),X=X.plus(J.times(D)),B=B.plus(J.times($)),X.s=D.s=K.s,U=R3(D,$,Y,1).minus(K).abs().cmp(R3(X,B,Y,1).minus(K).abs())<1?[D,$]:[X,B],z.precision=G,cA=!0,U};h1.toHexadecimal=h1.toHex=function(A,Q){return n41(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 qJ(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=R3(B,A,0,Q,1).times(A),cA=!0,VA(B);else A.s=B.s,B=A;return B};h1.toNumber=function(){return+this};h1.toOctal=function(A,Q){return n41(this,8,A,Q)};h1.toPower=h1.pow=function(A){var Q,B,$,J,Y,Z,F=this,X=F.constructor,D=+(A=new X(A));if(!F.d||!A.d||!F.d[0]||!A.d[0])return new X(P9(+F,D));if(F=new X(F),F.eq(1))return F;if($=X.precision,Y=X.rounding,A.eq(1))return VA(F,$,Y);if(Q=tQ(A.e/kA),Q>=A.d.length-1&&(B=D<0?-D:D)<=rS5)return J=Tn4(X,F,B,$),A.s<0?new X(1).div(J):VA(J,$,Y);if(Z=F.s,Z<0){if(Q<A.d.length-1)return new X(NaN);if((A.d[Q]&1)==0)Z=1;if(F.e==0&&F.d[0]==1&&F.d.length==1)return F.s=Z,F}if(B=P9(+F,D),Q=B==0||!isFinite(B)?tQ(D*(Math.log("0."+t7(F.d))/Math.LN10+F.e+1)):new X(B+"").e,Q>X.maxE+1||Q<X.minE-1)return new X(Q>0?Z/0:0);if(cA=!1,X.rounding=F.s=1,B=Math.min(12,(Q+"").length),J=i41(A.times(TN(F,$+B)),$),J.d){if(J=VA(J,$+5,1),Gs(J.d,$,Y)){if(Q=$+10,J=VA(i41(A.times(TN(F,Q+B)),Q),Q+5,1),+t7(J.d).slice($+1,$+15)+1==100000000000000)J=VA(J,$+1,0)}}return J.s=Z,cA=!0,X.rounding=Y,VA(J,$,Y)};h1.toPrecision=function(A,Q){var B,$=this,J=$.constructor;if(A===void 0)B=uU($,$.e<=J.toExpNeg||$.e>=J.toExpPos);else{if(qJ(A,1,SN),Q===void 0)Q=J.rounding;else qJ(Q,0,8);$=VA(new J($),A,Q),B=uU($,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(qJ(A,1,SN),Q===void 0)Q=$.rounding;else qJ(Q,0,8);return VA(new $(B),A,Q)};h1.toString=function(){var A=this,Q=A.constructor,B=uU(A,A.e<=Q.toExpNeg||A.e>=Q.toExpPos);return A.isNeg()&&!A.isZero()?"-"+B:B};h1.truncated=h1.trunc=function(){return VA(new this.constructor(this),this.e+1,1)};h1.valueOf=h1.toJSON=function(){var A=this,Q=A.constructor,B=uU(A,A.e<=Q.toExpNeg||A.e>=Q.toExpPos);return A.isNeg()?"-"+B:B};function t7(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=kA-$.length,B)Y+=_N(B);Y+=$}if(Z=A[Q],$=Z+"",B=kA-$.length,B)Y+=_N(B)}else if(Z===0)return"0";for(;Z%10===0;)Z/=10;return Y+Z}function qJ(A,Q,B){if(A!==~~A||A<Q||A>B)throw Error(kN+A)}function Gs(A,Q,B,$){var J,Y,Z,F;for(Y=A[0];Y>=10;Y/=10)--Q;if(--Q<0)Q+=kA,J=0;else J=Math.ceil((Q+1)/kA),Q%=kA;if(Y=P9(10,kA-Q),F=A[J]%Y|0,$==null)if(Q<3){if(Q==0)F=F/100|0;else if(Q==1)F=F/10|0;Z=B<4&&F==99999||B>3&&F==49999||F==50000||F==0}else Z=(B<4&&F+1==Y||B>3&&F+1==Y/2)&&(A[J+1]/Y/100|0)==P9(10,Q-2)-1||(F==Y/2||F==0)&&(A[J+1]/Y/100|0)==0;else if(Q<4){if(Q==0)F=F/1000|0;else if(Q==1)F=F/100|0;else if(Q==2)F=F/10|0;Z=($||B<4)&&F==9999||!$&&B>3&&F==4999}else Z=(($||B<4)&&F+1==Y||!$&&B>3&&F+1==Y/2)&&(A[J+1]/Y/1000|0)==P9(10,Q-3)-1;return Z}function NG0(A,Q,B){var $,J=[0],Y,Z=0,F=A.length;for(;Z<F;){for(Y=J.length;Y--;)J[Y]*=Q;J[0]+=d41.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 tS5(A,Q){var B,$,J;if(Q.isZero())return Q;if($=Q.d.length,$<32)B=Math.ceil($/3),J=(1/RG0(4,B)).toString();else B=16,J="2.3283064365386962890625e-10";A.precision+=B,Q=wf(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 R3=function(){function A($,J,Y){var Z,F=0,X=$.length;for($=$.slice();X--;)Z=$[X]*J+F,$[X]=Z%Y|0,F=Z/Y|0;if(F)$.unshift(F);return $}function Q($,J,Y,Z){var F,X;if(Y!=Z)X=Y>Z?1:-1;else for(F=X=0;F<Y;F++)if($[F]!=J[F]){X=$[F]>J[F]?1:-1;break}return X}function B($,J,Y,Z){var F=0;for(;Y--;)$[Y]-=F,F=$[Y]<J[Y]?1:0,$[Y]=F*Z+$[Y]-J[Y];for(;!$[0]&&$.length>1;)$.shift()}return function($,J,Y,Z,F,X){var D,G,V,U,K,E,z,W,H,q,I,N,w,L,O,P,T,k,x,h,u=$.constructor,S=$.s==J.s?1:-1,b=$.d,d=J.d;if(!b||!b[0]||!d||!d[0])return new u(!$.s||!J.s||(b?d&&b[0]==d[0]:!d)?NaN:b&&b[0]==0||!d?S*0:S/0);if(X)K=1,G=$.e-J.e;else X=cD,K=kA,G=tQ($.e/K)-tQ(J.e/K);x=d.length,T=b.length,H=new u(S),q=H.d=[];for(V=0;d[V]==(b[V]||0);V++);if(d[V]>(b[V]||0))G--;if(Y==null)L=Y=u.precision,Z=u.rounding;else if(F)L=Y+($.e-J.e)+1;else L=Y;if(L<0)q.push(1),E=!0;else{if(L=L/K+2|0,V=0,x==1){U=0,d=d[0],L++;for(;(V<T||U)&&L--;V++)O=U*X+(b[V]||0),q[V]=O/d|0,U=O%d|0;E=U||V<T}else{if(U=X/(d[0]+1)|0,U>1)d=A(d,U,X),b=A(b,U,X),x=d.length,T=b.length;P=x,I=b.slice(0,x),N=I.length;for(;N<x;)I[N++]=0;if(h=d.slice(),h.unshift(0),k=d[0],d[1]>=X/2)++k;do{if(U=0,D=Q(d,I,x,N),D<0){if(w=I[0],x!=N)w=w*X+(I[1]||0);if(U=w/k|0,U>1){if(U>=X)U=X-1;if(z=A(d,U,X),W=z.length,N=I.length,D=Q(z,I,W,N),D==1)U--,B(z,x<W?h:d,W,X)}else{if(U==0)D=U=1;z=d.slice()}if(W=z.length,W<N)z.unshift(0);if(B(I,z,N,X),D==-1){if(N=I.length,D=Q(d,I,x,N),D<1)U++,B(I,x<N?h:d,N,X)}N=I.length}else if(D===0)U++,I=[0];if(q[V++]=U,D&&I[0])I[N++]=b[P]||0;else I=[b[P]],N=1}while((P++<T||I[0]!==void 0)&&L--);E=I[0]!==void 0}if(!q[0])q.shift()}if(K==1)H.e=G,Ln4=E;else{for(V=1,U=q[0];U>=10;U/=10)V++;H.e=V+G*K-1,VA(H,F?Y+H.e+1:Y,Z,E)}return H}}();function VA(A,Q,B,$){var J,Y,Z,F,X,D,G,V,U,K=A.constructor;A:if(Q!=null){if(V=A.d,!V)return A;for(J=1,F=V[0];F>=10;F/=10)J++;if(Y=Q-J,Y<0)Y+=kA,Z=Q,G=V[U=0],X=G/P9(10,J-Z-1)%10|0;else if(U=Math.ceil((Y+1)/kA),F=V.length,U>=F)if($){for(;F++<=U;)V.push(0);G=X=0,J=1,Y%=kA,Z=Y-kA+1}else break A;else{G=F=V[U];for(J=1;F>=10;F/=10)J++;Y%=kA,Z=Y-kA+J,X=Z<0?0:G/P9(10,J-Z-1)%10|0}if($=$||Q<0||V[U+1]!==void 0||(Z<0?G:G%P9(10,J-Z-1)),D=B<4?(X||$)&&(B==0||B==(A.s<0?3:2)):X>5||X==5&&(B==4||$||B==6&&(Y>0?Z>0?G/P9(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]=P9(10,(kA-Q%kA)%kA),A.e=-Q||0;else V[0]=A.e=0;return A}if(Y==0)V.length=U,F=1,U--;else V.length=U+1,F=P9(10,kA-Y),V[U]=Z>0?(G/P9(10,J-Z)%P9(10,Z)|0)*F:0;if(D)for(;;)if(U==0){for(Y=1,Z=V[0];Z>=10;Z/=10)Y++;Z=V[0]+=F;for(F=1;Z>=10;Z/=10)F++;if(Y!=F){if(A.e++,V[0]==cD)V[0]=1}break}else{if(V[U]+=F,V[U]!=cD)break;V[U--]=0,F=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 uU(A,Q,B){if(!A.isFinite())return Sn4(A);var $,J=A.e,Y=t7(A.d),Z=Y.length;if(Q){if(B&&($=B-Z)>0)Y=Y.charAt(0)+"."+Y.slice(1)+_N($);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."+_N(-J-1)+Y,B&&($=B-Z)>0)Y+=_N($)}else if(J>=Z){if(Y+=_N(J+1-Z),B&&($=B-J-1)>0)Y=Y+"."+_N($)}else{if(($=J+1)<Z)Y=Y.slice(0,$)+"."+Y.slice($);if(B&&($=B-Z)>0){if(J+1===Z)Y+=".";Y+=_N($)}}return Y}function jG0(A,Q){var B=A[0];for(Q*=kA;B>=10;B/=10)Q++;return Q}function LG0(A,Q,B){if(Q>sS5){if(cA=!0,B)A.precision=B;throw Error(On4)}return VA(new A(CG0),Q,1,!0)}function bU(A,Q,B){if(Q>l41)throw Error(On4);return VA(new A(MG0),Q,B,!0)}function _n4(A){var Q=A.length-1,B=Q*kA+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 _N(A){var Q="";for(;A--;)Q+="0";return Q}function Tn4(A,Q,B,$){var J,Y=new A(1),Z=Math.ceil($/kA+4);cA=!1;for(;;){if(B%2){if(Y=Y.times(Q),Cn4(Y.d,Z))J=!0}if(B=tQ(B/2),B===0){if(B=Y.d.length-1,J&&Y.d[B]===0)++Y.d[B];break}Q=Q.times(Q),Cn4(Q.d,Z)}return cA=!0,Y}function wn4(A){return A.d[A.d.length-1]&1}function kn4(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 i41(A,Q){var B,$,J,Y,Z,F,X,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,X=E;else X=Q;F=new U(0.03125);while(A.e>-2)A=A.times(F),V+=5;$=Math.log(P9(2,V))/Math.LN10*2+5|0,X+=$,B=Y=Z=new U(1),U.precision=X;for(;;){if(Y=VA(Y.times(A),X,1),B=B.times(++G),F=Z.plus(R3(Y,B,X,1)),t7(F.d).slice(0,X)===t7(Z.d).slice(0,X)){J=V;while(J--)Z=VA(Z.times(Z),X,1);if(Q==null)if(D<3&&Gs(Z.d,X-$,K,D))U.precision=X+=10,B=Y=F=new U(1),G=0,D++;else return VA(Z,U.precision=E,K,cA=!0);else return U.precision=E,Z}Z=F}}function TN(A,Q){var B,$,J,Y,Z,F,X,D,G,V,U,K=1,E=10,z=A,W=z.d,H=z.constructor,q=H.rounding,I=H.precision;if(z.s<0||!W||!W[0]||!z.e&&W[0]==1&&W.length==1)return new H(W&&!W[0]?-1/0:z.s!=1?NaN:W?0:z);if(Q==null)cA=!1,G=I;else G=Q;if(H.precision=G+=E,B=t7(W),$=B.charAt(0),Math.abs(Y=z.e)<1500000000000000){while($<7&&$!=1||$==1&&B.charAt(1)>3)z=z.times(A),B=t7(z.d),$=B.charAt(0),K++;if(Y=z.e,$>1)z=new H("0."+B),Y++;else z=new H($+"."+B.slice(1))}else return D=LG0(H,G+2,I).times(Y+""),z=TN(new H($+"."+B.slice(1)),G-E).plus(D),H.precision=I,Q==null?VA(z,I,q,cA=!0):z;V=z,X=Z=z=R3(z.minus(1),z.plus(1),G,1),U=VA(z.times(z),G,1),J=3;for(;;){if(Z=VA(Z.times(U),G,1),D=X.plus(R3(Z,new H(J),G,1)),t7(D.d).slice(0,G)===t7(X.d).slice(0,G)){if(X=X.times(2),Y!==0)X=X.plus(LG0(H,G+2,I).times(Y+""));if(X=R3(X,new H(K),G,1),Q==null)if(Gs(X.d,G-E,q,F))H.precision=G+=E,D=Z=z=R3(V.minus(1),V.plus(1),G,1),U=VA(z.times(z),G,1),J=F=1;else return VA(X,H.precision=I,q,cA=!0);else return H.precision=I,X}X=D,J+=2}}function Sn4(A){return String(A.s*A.s/0)}function wG0(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)%kA,B<0)$+=kA;if($<J){if($)A.d.push(+Q.slice(0,$));for(J-=kA;$<J;)A.d.push(+Q.slice($,$+=kA));Q=Q.slice($),$=kA-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 eS5(A,Q){var B,$,J,Y,Z,F,X,D,G;if(Q.indexOf("_")>-1){if(Q=Q.replace(/(\d)_(?=\d)/g,"$1"),Pn4.test(Q))return wG0(A,Q)}else if(Q==="Infinity"||Q==="NaN"){if(!+Q)A.s=NaN;return A.e=NaN,A.d=null,A}if(aS5.test(Q))B=16,Q=Q.toLowerCase();else if(nS5.test(Q))B=2;else if(oS5.test(Q))B=8;else throw Error(kN+Q);if(Y=Q.search(/p/i),Y>0)X=+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(".",""),F=Q.length,Y=F-Y,J=Tn4($,new $(B),Y,Y*2);D=NG0(Q,B,cD),G=D.length-1;for(Y=G;D[Y]===0;--Y)D.pop();if(Y<0)return new $(A.s*0);if(A.e=jG0(D,G),A.d=D,cA=!1,Z)A=R3(A,J,F*4);if(X)A=A.times(Math.abs(X)<54?P9(2,X):Vs.pow(2,X));return cA=!0,A}function Av5(A,Q){var B,$=Q.d.length;if($<3)return Q.isZero()?Q:wf(A,2,Q,Q);B=1.4*Math.sqrt($),B=B>16?16:B|0,Q=Q.times(1/RG0(5,B)),Q=wf(A,2,Q,Q);var J,Y=new A(5),Z=new A(16),F=new A(20);for(;B--;)J=Q.times(Q),Q=Q.times(Y.plus(J.times(Z.times(J).minus(F))));return Q}function wf(A,Q,B,$,J){var Y,Z,F,X,D=1,G=A.precision,V=Math.ceil(G/kA);cA=!1,X=B.times(B),F=new A($);for(;;){if(Z=R3(F.times(X),new A(Q++*Q++),G,1),F=J?$.plus(Z):$.minus(Z),$=R3(Z.times(X),new A(Q++*Q++),G,1),Z=F.plus($),Z.d[V]!==void 0){for(Y=V;Z.d[Y]===F.d[Y]&&Y--;);if(Y==-1)break}Y=F,F=$,$=Z,Z=Y,D++}return cA=!0,Z.d.length=V+1,Z}function RG0(A,Q){var B=A;while(--Q)B*=A;return B}function vn4(A,Q){var B,$=Q.s<0,J=bU(A,A.precision,1),Y=J.times(0.5);if(Q=Q.abs(),Q.lte(Y))return mz=$?4:1,Q;if(B=Q.divToInt(J),B.isZero())mz=$?3:2;else{if(Q=Q.minus(B.times(J)),Q.lte(Y))return mz=wn4(B)?$?2:3:$?4:1,Q;mz=wn4(B)?$?1:4:$?3:2}return Q.minus(J).abs()}function n41(A,Q,B,$){var J,Y,Z,F,X,D,G,V,U,K=A.constructor,E=B!==void 0;if(E)if(qJ(B,1,SN),$===void 0)$=K.rounding;else qJ($,0,8);else B=K.precision,$=K.rounding;if(!A.isFinite())G=Sn4(A);else{if(G=uU(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=NG0(uU(U),10,J),U.e=U.d.length;V=NG0(G,10,J),Y=X=V.length;for(;V[--X]==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=R3(A,U,B,$,0,J),V=A.d,Y=A.e,D=Ln4;if(Z=V[B],F=J/2,D=D||V[B+1]!==void 0,D=$<4?(Z!==void 0||D)&&($===0||$===(A.s<0?3:2)):Z>F||Z===F&&($===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(X=V.length;!V[X-1];--X);for(Z=0,G="";Z<X;Z++)G+=d41.charAt(V[Z]);if(E){if(X>1)if(Q==16||Q==8){Z=Q==16?4:3;for(--X;X%Z;X++)G+="0";V=NG0(G,J,Q);for(X=V.length;!V[X-1];--X);for(Z=1,G="1.";Z<X;Z++)G+=d41.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>X)for(Y-=X;Y--;)G+="0";else if(Y<X)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 Cn4(A,Q){if(A.length>Q)return A.length=Q,!0}function Qv5(A){return new this(A).abs()}function Bv5(A){return new this(A).acos()}function $v5(A){return new this(A).acosh()}function Jv5(A,Q){return new this(A).plus(Q)}function Yv5(A){return new this(A).asin()}function Zv5(A){return new this(A).asinh()}function Fv5(A){return new this(A).atan()}function Xv5(A){return new this(A).atanh()}function Dv5(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=bU(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?bU(this,$,J):new this(0),B.s=A.s;else if(!A.d||Q.isZero())B=bU(this,Y,1).times(0.5),B.s=A.s;else if(Q.s<0)this.precision=Y,this.rounding=1,B=this.atan(R3(A,Q,Y,1)),Q=bU(this,Y,1),this.precision=$,this.rounding=J,B=A.s<0?B.minus(Q):B.plus(Q);else B=this.atan(R3(A,Q,Y,1));return B}function Gv5(A){return new this(A).cbrt()}function Vv5(A){return VA(A=new this(A),A.e+1,2)}function Uv5(A,Q,B){return new this(A).clamp(Q,B)}function Kv5(A){if(!A||typeof A!=="object")throw Error(OG0+"Object expected");var Q,B,$,J=A.defaults===!0,Y=["precision",1,SN,"rounding",0,8,"toExpNeg",-Nf,0,"toExpPos",0,Nf,"maxE",0,Nf,"minE",-Nf,0,"modulo",0,9];for(Q=0;Q<Y.length;Q+=3){if(B=Y[Q],J)this[B]=c41[B];if(($=A[B])!==void 0)if(tQ($)===$&&$>=Y[Q+1]&&$<=Y[Q+2])this[B]=$;else throw Error(kN+B+": "+$)}if(B="crypto",J)this[B]=c41[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(jn4);else this[B]=!1;else throw Error(kN+B+": "+$);return this}function Ev5(A){return new this(A).cos()}function zv5(A){return new this(A).cosh()}function yn4(A){var Q,B,$;function J(Y){var Z,F,X,D=this;if(!(D instanceof J))return new J(Y);if(D.constructor=J,Mn4(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(X=typeof Y,X==="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,F=Y;F>=10;F/=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 wG0(D,Y.toString())}if(X==="string"){if((F=Y.charCodeAt(0))===45)Y=Y.slice(1),D.s=-1;else{if(F===43)Y=Y.slice(1);D.s=1}return Pn4.test(Y)?wG0(D,Y):eS5(D,Y)}if(X==="bigint"){if(Y<0)Y=-Y,D.s=-1;else D.s=1;return wG0(D,Y.toString())}throw Error(kN+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=Kv5,J.clone=yn4,J.isDecimal=Mn4,J.abs=Qv5,J.acos=Bv5,J.acosh=$v5,J.add=Jv5,J.asin=Yv5,J.asinh=Zv5,J.atan=Fv5,J.atanh=Xv5,J.atan2=Dv5,J.cbrt=Gv5,J.ceil=Vv5,J.clamp=Uv5,J.cos=Ev5,J.cosh=zv5,J.div=Wv5,J.exp=Hv5,J.floor=qv5,J.hypot=Iv5,J.ln=Nv5,J.log=wv5,J.log10=Mv5,J.log2=Cv5,J.max=Lv5,J.min=Ov5,J.mod=jv5,J.mul=Rv5,J.pow=Pv5,J.random=_v5,J.round=Tv5,J.sign=kv5,J.sin=Sv5,J.sinh=vv5,J.sqrt=yv5,J.sub=xv5,J.sum=fv5,J.tan=bv5,J.tanh=uv5,J.trunc=hv5,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 Wv5(A,Q){return new this(A).div(Q)}function Hv5(A){return new this(A).exp()}function qv5(A){return VA(A=new this(A),A.e+1,3)}function Iv5(){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 Mn4(A){return A instanceof Vs||A&&A.toStringTag===Rn4||!1}function Nv5(A){return new this(A).ln()}function wv5(A,Q){return new this(A).log(Q)}function Cv5(A){return new this(A).log(2)}function Mv5(A){return new this(A).log(10)}function Lv5(){return kn4(this,arguments,-1)}function Ov5(){return kn4(this,arguments,1)}function jv5(A,Q){return new this(A).mod(Q)}function Rv5(A,Q){return new this(A).mul(Q)}function Pv5(A,Q){return new this(A).pow(Q)}function _v5(A){var Q,B,$,J,Y=0,Z=new this(1),F=[];if(A===void 0)A=this.precision;else qJ(A,1,SN);if($=Math.ceil(A/kA),!this.crypto)for(;Y<$;)F[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 F[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 F.push(J%1e7),Y+=4;Y=$/4}else throw Error(jn4);if($=F[--Y],A%=kA,$&&A)J=P9(10,kA-A),F[Y]=($/J|0)*J;for(;F[Y]===0;Y--)F.pop();if(Y<0)B=0,F=[0];else{B=-1;for(;F[0]===0;B-=kA)F.shift();for($=1,J=F[0];J>=10;J/=10)$++;if($<kA)B-=kA-$}return Z.e=B,Z.d=F,Z}function Tv5(A){return VA(A=new this(A),A.e+1,this.rounding)}function kv5(A){return A=new this(A),A.d?A.d[0]?A.s:0*A.s:A.s||NaN}function Sv5(A){return new this(A).sin()}function vv5(A){return new this(A).sinh()}function yv5(A){return new this(A).sqrt()}function xv5(A,Q){return new this(A).sub(Q)}function fv5(){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,VA(B,this.precision,this.rounding)}function bv5(A){return new this(A).tan()}function uv5(A){return new this(A).tanh()}function hv5(A){return VA(A=new this(A),A.e+1,1)}h1[Symbol.for("nodejs.util.inspect.custom")]=h1.toString;h1[Symbol.toStringTag]="Decimal";var Vs=h1.constructor=yn4(c41);CG0=new Vs(CG0);MG0=new Vs(MG0);var a41=2;function gv5(A,Q){let B=Q.decimalPlaces==="more-if-tiny"?Math.abs(A)<0.01?a41+1:a41:Q.decimalPlaces??a41,$=Q.intent==="balance"?A<0?"expand":"trunc":"halfExpand";return{decimalPlaces:B,roundingMode:$}}function hU(A,Q){let{decimalPlaces:B,roundingMode:$}=gv5(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 Us(A){if(A>=1e6)return`${Math.round(A/1e6)}M`;if(A>=1000)return`${Math.round(A/1000)}k`;return A.toString()}function mv5(A){if(!A)return"";let Q=A.split("-");if(Q.length>=2)return Q.slice(0,2).join("-");return A}function xn4(A){let Q=[],B=(A.inputTokens??0)+(A.cacheCreationInputTokens??0),$=A.cacheReadInputTokens??0;if(B>0)Q.push(`${Us(B)} in`);if($>0)Q.push(`${Us($)} cache read`);if(A.outputTokens)Q.push(`${Us(A.outputTokens)} out`);if(A.model)Q.push(mv5(A.model));if(Q.length>0)return`(${Q.join(", ")})`;return""}d0();q2();C1();var bn4="cost",pv5=5000,fn4=10;function un4(A){let Q=0;for(let B of A){if(B.role!=="assistant")continue;let $=B.usage;if(!$)continue;Q+=$.totalInputTokens+$.outputTokens}return Q}function dv5(A){let Q=A?.gauge;if(Q===!1||Q==="tokens"||Q==="cost")return Q;return bn4}class o41 extends S0{props;constructor(A){super();this.props=A}createState(){return new hn4}}class hn4 extends T0{mode=bn4;showCosts=!0;costInfo=null;fetchInFlight=!1;lastFetchAt=0;throttleTimer=null;isHovered=!1;configSubscription=null;initState(){super.initState(),this.configSubscription=this.widget.props.configService.config.pipe(N1((A)=>({mode:dv5(A.settings),showCosts:A.settings.showCosts??!0})),P4((A,Q)=>A.mode===Q.mode&&A.showCosts===Q.showCosts)).subscribe({next:({mode:A,showCosts:Q})=>{if(!this.mounted)return;if(this.mode!==A||this.showCosts!==Q)this.setState(()=>{this.mode=A,this.showCosts=Q});if(Q&&A==="cost"&&this.costInfo===null)this.scheduleThrottledFetch()}})}didUpdateWidget(A){if(super.didUpdateWidget(A),A.props.activeThreadID!==this.widget.props.activeThreadID){if(this.costInfo=null,this.lastFetchAt=0,this.cancelThrottleTimer(),this.mode!==!1)this.scheduleThrottledFetch();return}if(this.mode!==!1&&A.props.cumulativeBilledTokens!==this.widget.props.cumulativeBilledTokens)this.scheduleThrottledFetch();if(this.mode==="cost"&&this.showCosts&&this.costInfo===null)this.scheduleThrottledFetch()}dispose(){this.cancelThrottleTimer(),this.configSubscription?.unsubscribe(),this.configSubscription=null,super.dispose()}cancelThrottleTimer(){if(this.throttleTimer)clearTimeout(this.throttleTimer),this.throttleTimer=null}scheduleThrottledFetch(){if(!this.widget.props.activeThreadID)return;if(this.throttleTimer||this.fetchInFlight)return;let A=Date.now()-this.lastFetchAt,Q=Math.max(0,pv5-A);this.throttleTimer=setTimeout(()=>{this.throttleTimer=null,this.fetchCost()},Q)}async fetchCost(){let A=this.widget.props.activeThreadID;if(!A||this.fetchInFlight)return;this.fetchInFlight=!0,this.lastFetchAt=Date.now();try{let Q=await YA.threadDisplayCostInfo({threadID:A},{config:this.widget.props.configService});if(!this.mounted)return;if(Q.ok)this.setState(()=>{this.costInfo=Q.result});else j.debug("UsageGauge cost fetch returned non-ok",{threadID:A})}catch(Q){j.debug("UsageGauge cost fetch failed",{error:Q,threadID:A})}finally{this.fetchInFlight=!1}}handleClick=()=>{let A=this.mode==="cost"?"tokens":"cost";if(this.setState(()=>{this.mode=A}),A==="cost"&&this.costInfo===null)this.scheduleThrottledFetch();this.widget.props.configService.updateSettings("gauge",A,"global").catch((Q)=>{j.debug("UsageGauge failed to persist gauge setting",{error:Q,next:A})})};handleEnter=()=>{if(this.isHovered)return;this.setState(()=>{this.isHovered=!0})};handleExit=()=>{if(!this.isHovered)return;this.setState(()=>{this.isHovered=!1})};renderLabel(){if(this.mode==="tokens")return`${cx4(this.widget.props.cumulativeBilledTokens)} tok`;let A=this.costInfo?.totalCostUSD;if(A===null||A===void 0)return null;return hU(A,{decimalPlaces:"more-if-tiny",intent:"cost"})}build(A){if(this.mode===!1||!this.showCosts||!this.widget.props.activeThreadID)return U0.shrink();let Q=this.gaugeWidth();return new U0({width:Q,height:1,child:this.buildGaugeChild(A,Q)})}gaugeWidth(){let A=this.renderLabel();if(A===null)return fn4;let Q=" ".repeat(this.widget.props.horizontalPadding??1);return Math.max(d4(`${Q}${A}${Q}`),fn4)}buildGaugeChild(A,Q){let B=this.renderLabel();if(B===null)return U0.shrink();let $=O1.of(A).colorScheme,J=new v({color:$.foreground,dim:!0,bold:this.isHovered}),Y=" ".repeat(this.widget.props.horizontalPadding??1),Z=`${Y}${B}${Y}`,F=d4(Z),X="─".repeat(F);return new r0({mainAxisAlignment:"end",children:[new U0({width:Q,height:1,child:new r0({mainAxisAlignment:"end",children:[new T1({onClick:this.handleClick,onEnter:this.handleEnter,onExit:this.handleExit,cursor:"pointer",child:new Fs({text:Z,style:J,initialText:X,animateNonDigits:!0,key:new PA(`gauge:${this.widget.props.activeThreadID}:${this.mode}`)})})]})})]})}}class r41 extends S0{editorController;copyOnSelectEnabled;client;observer;hints;ideStatus;onPromptSubmitted;onEditorUploadLockChange;editorUploadLocked;environmentFallback;constructor(A){super({key:new Oz(A.observingClient.client)});this.editorController=A.editorController,this.copyOnSelectEnabled=A.copyOnSelectEnabled,this.client=A.observingClient.client,this.observer=A.observingClient.observer,this.hints=A.hints,this.ideStatus=A.ideStatus,this.onPromptSubmitted=A.onPromptSubmitted,this.onEditorUploadLockChange=A.onEditorUploadLockChange,this.editorUploadLocked=A.editorUploadLocked,this.environmentFallback=A.environmentFallback}createState(){return new gn4}}function cv5(A){return x6.safeParse(A).data}class gn4 extends T0{agentState=new x8(this,"idle");connectionError=new x8(this,null);pendingSend=new x8(this,!1);clientStatus=new x8(this,"disconnected");stageBytes=new x8(this,null);queuedMessages=new x8(this,[]);activeError=new x8(this,null);threadSettings=new x8(this,null);environment=new x8(this,null);cancelling=null;cancelHintTimer=new fx(this,1000);doubleEnterHintTimer=new fx(this,2000);threadController=null;imageAttachmentsController=new rr;controllerUnsubscription=null;cancelledSubscription=null;agentMessageIdSubscription=null;queuedMessagesRemovalSubscription=null;imagePreviewOverlay=null;editingMessageId=null;editingController=null;doubleEnterMessage=null;pendingQueuedMessageRestore=null;editorUploadLocked=!1;initState(){this.editorUploadLocked=this.widget.editorUploadLocked,this.subscribeToEditorController(),this.recreateThreadController(),this.subscribeToObserver()}didUpdateWidget(A){if(A.editorController!==this.widget.editorController)this.unsubscribeFromEditorController(A.editorController),this.subscribeToEditorController();if(A.editorUploadLocked!==this.widget.editorUploadLocked)this.editorUploadLocked=this.widget.editorUploadLocked;if(A.client!==this.widget.client||A.observer!==this.widget.observer)this.recreateThreadController(),this.resetThreadClientState(),this.subscribeToObserver()}resetThreadClientState(){this.pendingQueuedMessageRestore=null,this.agentState.dispose(),this.connectionError.dispose(),this.pendingSend.dispose(),this.clientStatus.dispose(),this.stageBytes.dispose(),this.queuedMessages.dispose(),this.activeError.dispose(),this.threadSettings.dispose(),this.environment.dispose()}subscribeToObserver(){this.cancelledSubscription?.unsubscribe(),this.agentMessageIdSubscription?.unsubscribe(),this.queuedMessagesRemovalSubscription?.unsubscribe(),this.agentState.subscribe(this.widget.observer.agentState()),this.connectionError.subscribe(this.widget.observer.connectionError()),this.pendingSend.subscribe(this.widget.observer.pendingSend()),this.clientStatus.subscribe(this.widget.observer.status()),this.stageBytes.subscribe(this.widget.observer.stageBytes()),this.queuedMessages.subscribe(this.widget.observer.queuedMessages()),this.activeError.subscribe(this.widget.observer.activeError()),this.threadSettings.subscribe(this.widget.observer.threadSettings()),this.environment.subscribe(this.widget.client.environmentChanges()),this.queuedMessagesRemovalSubscription=this.widget.observer.queuedMessageRemovalEvents().subscribe((A)=>this.restoreLocallyRemovedQueuedMessage(A)),this.cancelledSubscription=this.widget.observer.cancelled().subscribe((A)=>{if(!this.mounted||!this.cancelledMessageMatchesLocalCancel(A))return;this.setState(()=>{this.cancelling=null})}),this.agentMessageIdSubscription=this.widget.observer.agentMessageId().subscribe((A)=>{if(!this.mounted||!this.agentMessageIdClearsLocalCancel(A))return;this.setState(()=>{this.cancelling=null})})}cancelledMessageMatchesLocalCancel(A){if(this.cancelling===null)return!1;if(this.cancelling.messageId===null)return!0;return A.messageId===this.cancelling.messageId}agentMessageIdClearsLocalCancel(A){if(this.cancelling===null)return!1;if(this.cancelling.messageId===null)return!0;return A===null||A!==this.cancelling.messageId}subscribeToThreadController(){let A=this.threadController;if(!A)return;this.controllerUnsubscription=A.subscribe(()=>{this.setState()})}recreateThreadController(){this.controllerUnsubscription?.(),this.threadController?.dispose(),this.threadController=new s11(this.widget.observer.reader()),this.subscribeToThreadController()}onEscPressed=()=>{if(this.editingMessageId!==null)return this.cancelEdit(),"handled";if(this.threadController?.hasSelection)return this.threadController.clearSelection(),"handled";if(this.cancelling!==null)return"handled";if(!i7(this.agentState.getValue()))return"ignored";if(this.cancelHintTimer.isActive()){this.cancelHintTimer.clear();let A=this.widget.observer.agentMessageId().getValue();this.setState(()=>{this.cancelling={messageId:A}}),this.widget.client.cancelAgentLoop()}else this.cancelHintTimer.activate();return"handled"};onEditIntent=()=>{if(this.editingMessageId!==null)return"ignored";let A=this.threadController;if(!A)return"ignored";let Q=A.selectedMessageIndex;if(Q===null)return"ignored";let B=A.entries[Q];if(!B||B.type!=="message"||B.role!=="user")return"ignored";let $=cv5(B.sourceMessageID);if($===void 0)return"ignored";let J=new N8;return J.text=B.text,J.cursorPosition=B.text.length,this.editingMessageId=$,this.editingController=J,this.clearDoubleEnterMessage(),"handled"};cancelEdit(){this.editingController?.dispose(),this.editingMessageId=null,this.editingController=null,this.setState()}onSubmitEdit=(A,Q,B)=>{let $=Q.trim();if($.length===0&&B.length===0)return;let J=[];if($.length>0)J.push({type:"text",text:$});J.push(...B),this.widget.client.editUserMessage(A,J,rS4()),this.editingController?.dispose(),this.editingMessageId=null,this.editingController=null,this.threadController?.clearSelection(),this.threadController?.onScrollToBottom?.(),this.setState()};buildHints(){let A=new Set(this.widget.hints);if(this.cancelHintTimer.isActive())A.add(Zf);if(this.doubleEnterHintTimer.isActive()&&this.getDoubleEnterMessage()!==null)A.add(Xf);return A}dispose(){this.dismissImagePreview(),this.unsubscribeFromEditorController(this.widget.editorController),this.doubleEnterMessage=null,this.editingController?.dispose(),this.editingController=null,this.editingMessageId=null,this.cancelling=null,this.pendingQueuedMessageRestore=null,this.cancelledSubscription?.unsubscribe(),this.cancelledSubscription=null,this.agentMessageIdSubscription?.unsubscribe(),this.agentMessageIdSubscription=null,this.queuedMessagesRemovalSubscription?.unsubscribe(),this.queuedMessagesRemovalSubscription=null,this.controllerUnsubscription?.(),this.threadController?.dispose(),this.imageAttachmentsController.dispose(),super.dispose()}onShowImagePreview=(A,Q,B)=>{this.showOverlay(A,()=>new RN({image:Q,imageIndex:B,onDismiss:()=>this.dismissImagePreview()}))};onShowFileImagePreview=(A)=>{this.showOverlay(this.context,()=>new xj({filePath:A,onDismiss:()=>this.dismissImagePreview()}))};onShowPainterSaveDialog=(A,Q,B)=>{this.showOverlay(A,()=>new xj({filePath:B,imageBlock:Q,onDismiss:()=>this.dismissImagePreview()}))};showOverlay(A,Q){this.dismissImagePreview();let B=new pD(Q);this.imagePreviewOverlay=B,s7.of(A).insert(B)}dismissImagePreview(){if(this.imagePreviewOverlay)this.imagePreviewOverlay.remove(),this.imagePreviewOverlay=null}onErrorResponse=(A)=>{let{client:Q,observer:B}=this.widget;switch(A){case"retry":B.dismissActiveError(),Q.retryAgentLoop();break;case"dismiss":Q.dismissActiveError(B.getActiveErrorSeq()??void 0),B.dismissActiveError();break;case"add-credits":break}};getSelectedQueuedMessage(){let A=this.threadController?.selectedQueuedMessageIndex;if(A===null||A===void 0)return null;return Nn4(this.queuedMessages.getValue())[A]??null}steerNextQueuedMessage=()=>{let A=this.queuedMessages.getValue().find((Q)=>!Q.steer);if(!A)return;this.widget.client.steerQueuedMessage(A.queuedMessage.messageId)};subscribeToEditorController(){this.widget.editorController.addListener(this.clearDoubleEnterMessageOnEdit)}unsubscribeFromEditorController(A){A.removeListener(this.clearDoubleEnterMessageOnEdit)}clearDoubleEnterMessageOnEdit=()=>{if(this.doubleEnterMessage===null||this.widget.editorController.text==="")return;this.clearDoubleEnterMessage()};clearDoubleEnterMessage(){this.doubleEnterHintTimer.clear(),this.setState(()=>{this.doubleEnterMessage=null})}setDoubleEnterMessage(A){this.doubleEnterHintTimer.activate(),this.setState(()=>{this.doubleEnterMessage=A})}getDoubleEnterMessage(){let A=this.doubleEnterMessage;if(A===null)return null;if(this.queuedMessages.getValue().some((B)=>B.queuedMessage.messageId===A))return A;if(this.pendingSend.getValue())return null;return this.doubleEnterMessage=null,null}trySubmitDoubleEnterMessage(){let A=this.getDoubleEnterMessage();if(!A)return;if(this.clearDoubleEnterMessage(),!i7(this.agentState.getValue())||this.editingMessageId!==null||this.threadController?.hasSelection)return;this.widget.client.steerQueuedMessage(A)}handleEditorUploadLockChange=(A)=>{this.editorUploadLocked=A,this.widget.onEditorUploadLockChange(A)};restoreLocallyRemovedQueuedMessage(A){let Q=this.pendingQueuedMessageRestore;if(!Q||A.serverMessage.queuedMessageId!==Q.queuedMessage.messageId)return;if(this.pendingQueuedMessageRestore=null,this.editorUploadLocked)return;this.popRemovedQueuedMessageIntoEditor(Q)}popRemovedQueuedMessageIntoEditor(A){this.widget.editorController.text=rj.rowText(A),this.imageAttachmentsController.setImages(A.queuedMessage.content.filter(F30)),this.threadController?.clearSelection()}build(A){let{editorController:Q,client:B}=this.widget,$=this.threadController,J=this.widget.observer.agentMode,Y=this.widget.observer.reasoningEffort,Z=this.queuedMessages.getValue();$.setQueuedMessageCount(Z.length);let{configService:F}=j3.of(A),X=B.getThreadId()??null,D=un4(this.widget.observer.protocolMessages()),G=this.threadSettings.getValue(),V=new o41({activeThreadID:X,configService:F,cumulativeBilledTokens:D}),U=t11(J,G),K=new X4(()=>{return this.onEscPressed()}),E=new X4(()=>{let P=this.getSelectedQueuedMessage();if(!P)return"ignored";return B.steerQueuedMessage(P.queuedMessage.messageId),"handled"}),z=new X4(()=>{let P=this.getSelectedQueuedMessage();if(!P)return"ignored";return this.pendingQueuedMessageRestore=P,B.removeQueuedMessage(P.queuedMessage.messageId),this.clearDoubleEnterMessage(),"handled"}),W=new X4(()=>{if($.selectPrevious())return this.clearDoubleEnterMessage(),"handled";return"ignored"}),H=new X4(()=>{if($.selectNext())return this.clearDoubleEnterMessage(),"handled";return"ignored"}),q=new X4(()=>{return $.onPageUp?.(),"handled"}),I=new X4(()=>{return $.onPageDown?.(),"handled"}),N=new X4(()=>{return $.clearSelection(),"handled"}),w=new X4(()=>this.onEditIntent()),L=new X4((P)=>{if($.selectQueuedMessage(P.visualIndex))return this.clearDoubleEnterMessage(),"handled";return"ignored"});return new t4({actions:new Map([[cD0,K],[lD0,w],[br,N],[xr,L],[fr,E],[yr,z],[Gf,W],[Df,H],[hr,q],[gr,I]]),child:new h5({debugLabel:"ActiveThreadShortcuts",shortcuts:new Map([[_1.key("Escape"),new cD0],[_1.key("e"),new lD0]]),child:new mD({onShowImagePreview:this.onShowFileImagePreview,child:new jN({onShowImagePreview:this.onShowImagePreview,onShowSaveDialog:this.onShowPainterSaveDialog,child:new Ds({child:new M41({threadController:$,copyOnSelectEnabled:this.widget.copyOnSelectEnabled,onShowImagePreview:this.onShowImagePreview,activeThreadID:X,editingMessageId:this.editingMessageId,editingController:this.editingController,onSubmitEdit:this.onSubmitEdit}),editorController:Q,imageAttachmentsController:this.imageAttachmentsController,activeThreadID:X,usageGauge:V,queuedMessages:Z,selectedQueuedMessageIndex:$.selectedQueuedMessageIndex,onSteerNextQueuedMessage:this.steerNextQueuedMessage,onDequeueAllMessages:()=>{this.pendingQueuedMessageRestore=null;for(let P of this.queuedMessages.getValue())B.removeQueuedMessage(P.queuedMessage.messageId);$.clearSelection()},onEditorUploadLockChange:this.handleEditorUploadLockChange,editorEnabled:!$.hasSelection&&this.editingMessageId===null,hints:this.buildHints(),clientStatus:this.clientStatus.getValue(),stageBytes:this.stageBytes.getValue(),connectionError:this.connectionError.getValue(),cancelling:this.cancelling!==null,agentMode:J,reasoningEffort:Y,speedCostMultiplier:U,activeError:this.activeError.getValue(),onErrorResponse:this.onErrorResponse,ideStatus:this.widget.ideStatus,environment:this.environment.getValue()??this.widget.environmentFallback,onSubmit:(P)=>{let T=P.find((u)=>u.type==="text");if(T&&T.type==="text")this.widget.onPromptSubmitted(T.text);let k=ZY0(this.widget.ideStatus),x=i7(this.agentState.getValue()),h=B.sendUserMessage(P,void 0,{userState:k});if(x)this.setDoubleEnterMessage(h);else this.clearDoubleEnterMessage();$.onScrollToBottom?.()},onEmptySubmit:()=>this.trySubmitDoubleEnterMessage()})})})})})}}function mn4(A,Q){return{noun:"thread",verb:"archive and exit",description:"Archive thread and exit",keywords:["close","done","finish","quit"],get status(){return Q()?{type:"enabled"}:{type:"disabled",reason:"Cannot archive an empty thread"}},run:(B,$,J)=>{let Y=Q()?.client.getThreadId();if(!Y)return;let Z=Q5.maybeOf($);(async()=>{let F=await A.archiveThread(Y);if(J(),F===null)t4.maybeInvoke($,new Vf);else Z?.show(`Failed to archive thread: ${F.message}`,"error")})()}}}G8();function lv5(A){return new Date(A).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}class Ks extends H1{message;onDestruct;constructor({key:A,message:Q,onDestruct:B}){super(A?{key:A}:{});this.message=Q,this.onDestruct=B}build(A){let B=P0.of(A).colors,$=s1.of(A),J=new v({color:B.foreground,dim:!0}),Y=new v({color:B.foreground}),Z=Math.max(50,Math.min(80,$.size.width-4)),F=[{keys:["Esc"],label:"destroy message"}];return new TA({header:this.message.title,footer:F,visualStyle:{borderShape:"classic",borderAnimation:"mysterious-message",titleAnimation:"scramble"},chromePadding:K0.symmetric(2,2),minWidth:Z,maxWidth:Z,maxHeight:$.size.height,autofocus:!1,onDismiss:this.onDestruct,child:new e5({child:new iY({autofocus:!0,child:new x0({crossAxisAlignment:"stretch",mainAxisSize:"min",children:[new a1({child:new p({text:new C(lv5(this.message.visibleFrom),J)})}),new U0({height:1}),new p({text:new C(this.message.body,Y),selectable:!0})]})})})})}}var s41=" .:-=+*#%@",t41=[" ",".","·","·",":",":","•","•","●","●"],Cf=0.5,vN=64,iv5=30,Es=0.9,dn4=1.4,e41=Es+dn4,AA1=6,pn4=0.5,nv5=1.6,av5=28;class QA1 extends S0{originX;originY;agentMode;visualStyle;primaryColor;secondaryColor;elapsed;fps;onComplete;constructor({originX:A,originY:Q,agentMode:B,visualStyle:$="classic",primaryColor:J,secondaryColor:Y,elapsed:Z,fps:F=iv5,onComplete:X,key:D}){super(D?{key:D}:{});this.originX=A,this.originY=Q,this.agentMode=B,this.visualStyle=$,this.primaryColor=J,this.secondaryColor=Y,this.elapsed=Z,this.fps=F,this.onComplete=X}createState(){return new cn4}}class cn4 extends T0{elapsed=0;timer=null;startMs=0;completed=!1;glow=new M9;initState(){if(super.initState(),this.widget.elapsed!==void 0){this.elapsed=this.widget.elapsed;return}if(this.startMs=performance.now(),this.widget.fps<=0){this.elapsed=e41,this.complete();return}let A=Math.max(16,Math.floor(1000/this.widget.fps));this.timer=setInterval(()=>{if(!this.mounted)return;if(this.elapsed=(performance.now()-this.startMs)/1000,this.elapsed>=e41){this.elapsed=e41,this.setState(()=>{}),this.complete();return}this.setState(()=>{})},A)}didUpdateWidget(A){if(super.didUpdateWidget(A),this.widget.elapsed!==void 0&&this.widget.elapsed!==A.elapsed)this.elapsed=this.widget.elapsed,this.setState(()=>{})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null;super.dispose()}complete(){if(this.completed)return;if(this.completed=!0,this.timer)clearInterval(this.timer),this.timer=null;this.widget.onComplete?.()}build(A){let Q=O1.of(A);return new ln4({originX:this.widget.originX,originY:this.widget.originY,elapsed:this.elapsed,agentMode:this.widget.agentMode,visualStyle:this.widget.visualStyle,primaryColor:this.widget.primaryColor,secondaryColor:this.widget.secondaryColor,backgroundColor:Q.colorScheme.background,glow:this.glow})}}class ln4 extends A8{props;constructor(A,Q){super(Q?{key:Q}:{});this.props=A}createElement(){return new pQ(this)}createRenderObject(){return new in4(this.props)}updateRenderObject(A){A.update(this.props)}}function ov5(A){let Q=A>>>0;return()=>{Q=Q+1831565813>>>0;let B=Q;return B=Math.imul(B^B>>>15,B|1),B^=B+Math.imul(B^B>>>7,B|61),((B^B>>>14)>>>0)/4294967296}}class in4 extends B4{_props;_palette=[];_paletteSignature="";_fragments=null;_fragmentRadius=0;_fragmentVisualStyle="classic";constructor(A){super();this._props=A,this.rebuildPalette()}update(A){let Q=A.agentMode!==this._props.agentMode||A.visualStyle!==this._props.visualStyle||A.primaryColor!==this._props.primaryColor||A.secondaryColor!==this._props.secondaryColor;if(this._props=A,Q)this.rebuildPalette();this.markNeedsPaint()}rebuildPalette(){let A=this._props.primaryColor&&this._props.secondaryColor?{primary:this._props.primaryColor,secondary:this._props.secondaryColor}:void 0;this._palette=Array.from({length:vN},(Q,B)=>{let $=B/(vN-1);return dQ($,this._props.agentMode,A)}),this._paletteSignature=`${this._props.agentMode??"smart"}|${this._props.primaryColor?`${this._props.primaryColor.r},${this._props.primaryColor.g},${this._props.primaryColor.b}`:""}|${this._props.secondaryColor?`${this._props.secondaryColor.r},${this._props.secondaryColor.g},${this._props.secondaryColor.b}`:""}`}performLayout(){let A=this._lastConstraints,Q=A.constrain(A.biggest.width,A.biggest.height);this.setSize(Q.width,Q.height),super.performLayout()}getMaxRadius(A,Q){let B=A*pn4,$=Q*pn4*(1/Cf);return Math.max(AA1+1,Math.min(B,$))}buildFragments(A,Q){let B=ov5(2654435761),$=[],J=Q==="neo"?t41:s41,Y=Math.min(600,Math.max(120,Math.floor(A*A*0.45)));for(let Z=0;Z<Y;Z++){let F=Math.sqrt(B()),X=B()*Math.PI*2,D=Math.cos(X)*F*A,G=Math.sin(X)*F*A*Cf,V=(0.5+F*0.9)*nv5*A,U=0.7+B()*0.6,K=Math.cos(X)*V*U,E=Math.sin(X)*V*U*Cf-B()*A*0.6,z=0.4+B()*0.6,W=Math.min(J.length-1,Math.floor(z*J.length));$.push({x:D,y:G,vx:K,vy:E,glyph:J[W]||"*",intensity:z})}return $}paint(A,Q=0,B=0){let{elapsed:$,originX:J,originY:Y,backgroundColor:Z,glow:F}=this._props,X=Q+this.offset.x,D=B+this.offset.y,G=Math.floor(this.size.width),V=Math.floor(this.size.height),U=A.getSize(),K=U.width,E=U.height,z=this._palette;this._paletteSignature;let W=this.getMaxRadius(G,V),H=J-X,q=Y-D;if($<Es){let O=1-(1-$/Es)**3,P=AA1+(W-AA1)*O;this.paintOrb(A,X,D,H,q,P,1,$,F,z,Z,K,E);return}if(!this._fragments||this._fragmentRadius!==W||this._fragmentVisualStyle!==this._props.visualStyle)this._fragments=this.buildFragments(W,this._props.visualStyle),this._fragmentRadius=W,this._fragmentVisualStyle=this._props.visualStyle;let I=Math.min(1,($-Es)/dn4);if(I<0.2){let L=1-I/0.2;this.paintOrb(A,X,D,H,q,W,L,$,F,z,Z,K,E)}let N=$-Es,w=1-I;for(let L of this._fragments){let O=L.x+L.vx*N,P=L.y+L.vy*N+0.5*av5*N*N,T=Math.round(X+H+O),k=Math.round(D+q+P);if(T<0||T>=K||k<0||k>=E)continue;let x=Math.max(0.05,L.intensity*w),h=this._props.visualStyle==="neo"?t41:s41,u=Math.min(h.length-1,Math.floor(x*h.length)),S=I>0.7?".":h[u]||L.glyph,b=Math.min(vN-1,Math.floor(x*vN)),d=z[b]||z[vN-1];if(!d)continue;A.setCell(T,k,{char:S,width:1,style:{fg:d,bg:Z,dim:I>0.55,bold:I<0.15}})}}paintOrb(A,Q,B,$,J,Y,Z,F,X,D,G,V,U){let K=Math.max(1,Y),E=K*K,z=1/E,W=1/Cf,H=this._props.visualStyle,q=Math.max(0,Math.floor(J-K*Cf)),I=Math.min(U-B-1,Math.ceil(J+K*Cf));for(let N=q;N<=I;N++){let w=B+N;if(w<0||w>=U)continue;let L=(N-J)*W,O=L*L;if(O>=E)continue;let P=Math.sqrt(E-O),T=Math.max(0,Math.floor($-P)),k=Math.min(V-Q-1,Math.ceil($+P));for(let x=T;x<=k;x++){let h=x-$,u=h*h+O;if(u>=E)continue;let S=1-u*z,b=X.sample(x,N,F,1),d=b*S*Z,c=s41;if(H==="neo"){let V0=Math.sqrt(u*z),w0=h/K,Z0=L/K,R0=Math.sqrt(Math.max(0,1-V0*V0)),B0=Math.max(0,w0*-0.45+Z0*-0.35+R0*0.88),I0=Math.max(0,1-R0)**1.8,n=Math.exp(-((w0+0.28)*(w0+0.28)*54+(Z0+0.32)*(Z0+0.32)*115));if(d=(0.12+S*0.16+B0*0.6+I0*0.34+n*0.75+b*0.16)*Z,c=t41,d<0.08)continue}if(d<=0)continue;let g=Math.max(H==="neo"?1:0,Math.min(c.length-1,Math.floor(d*c.length))),l=c[g]||" ",s=Math.min(vN-1,Math.floor(d*vN*(H==="neo"?1.2:1))),A0=D[s]||D[vN-1];if(!A0)continue;let H0=Q+x;if(H0<0||H0>=V)continue;A.setCell(H0,w,{char:l,width:1,style:{fg:A0,bg:G,bold:H==="neo"&&d>0.65}})}}}}var BA1=5,nn4=3.8,an4=280;var rv5=["*","+",".",":","'"];function on4(A,Q,B=Date.now()){return Math.floor(A)*73856093^Math.floor(Q)*19349663^B}function rn4(A,Q,B={}){let{burstParticleCount:$=72,burstSpeedMin:J=10,burstSpeedRange:Y=16,rainSpeedMin:Z=4,rainSpeedRange:F=9,burstDelayMax:X=0.18,rainDelayMax:D=1,burstLifetimeMin:G=1.4,burstLifetimeRange:V=1.2,rainLifetimeMin:U=2.8,rainLifetimeRange:K=1.8,burstDriftMin:E=0.3,burstDriftRange:z=0.9,rainDriftMin:W=0.8,rainDriftRange:H=1.8,rainAngleCenter:q=Math.PI/2,rainAngleSpread:I=1.4,colorIndexCount:N=6,sparkleGlyphs:w=rv5}=B,L=sv5(A),O=[];for(let P=0;P<Q;P++){let T=P<$,k=T?L()*Math.PI*2:q+(L()-0.5)*I,x=T?J+L()*Y:Z+L()*F,h=T?L()*X:L()*D,u=T?G+L()*V:U+L()*K,S=T?E+L()*z:W+L()*H,b=L()*Math.PI*2,d=w[Math.floor(L()*w.length)]??"*";O.push({kind:T?"burst":"rain",angle:k,speed:x,delay:h,lifetime:u,drift:S,phase:b,glyph:d,colorIndex:Math.floor(L()*N)})}return O}function sn4(A,Q){let{elapsedSeconds:B,originX:$,originY:J,unitScale:Y=1}=Q,Z=B-A.delay;if(Z<0||Z>A.lifetime)return null;let F=A.kind==="burst"?9:12,X=A.speed*Y,D=Math.cos(A.angle)*X,G=Math.sin(A.angle)*X,V=Math.sin((Z+A.phase)*8)*A.drift*Y;return{x:$+D*Z+V,y:J+G*Z+F*Y*Z*Z,progress:Z/A.lifetime}}function sv5(A){let Q=A>>>0;if(Q===0)Q=2654435769;return()=>{return Q=Q*1664525+1013904223>>>0,Q/4294967296}}class PG0 extends A8{text;baseColor;backgroundColor;glow;time;agentMode;orbWidth;orbHeight;glowIntensity;shockwaves;constructor({key:A,text:Q,baseColor:B,backgroundColor:$,glow:J,time:Y,agentMode:Z,orbWidth:F=40,orbHeight:X=40,glowIntensity:D=0.4,shockwaves:G=[]}){super(A?{key:A}:{});this.text=Q,this.baseColor=B,this.backgroundColor=$,this.glow=J,this.time=Y,this.agentMode=Z,this.orbWidth=F,this.orbHeight=X,this.glowIntensity=D,this.shockwaves=G}createElement(){return new pQ(this)}createRenderObject(){return new tn4(this.text,this.baseColor,this.backgroundColor,this.glow,this.time,this.agentMode,this.orbWidth,this.orbHeight,this.glowIntensity,this.shockwaves)}updateRenderObject(A){A.update(this.text,this.baseColor,this.backgroundColor,this.glow,this.time,this.agentMode,this.orbWidth,this.orbHeight,this.glowIntensity,this.shockwaves)}}var tv5=0.5;class tn4 extends B4{_text;_baseColor;_backgroundColor;_glow;_time;_agentMode;_orbWidth;_orbHeight;_glowIntensity;_shockwaves;constructor(A,Q,B,$,J,Y,Z,F,X,D){super();this._text=A;this._baseColor=Q;this._backgroundColor=B;this._glow=$;this._time=J;this._agentMode=Y;this._orbWidth=Z;this._orbHeight=F;this._glowIntensity=X;this._shockwaves=D}update(A,Q,B,$,J,Y,Z,F,X,D){let G=A!==this._text;if(this._text=A,this._baseColor=Q,this._backgroundColor=B,this._glow=$,this._time=J,this._agentMode=Y,this._orbWidth=Z,this._orbHeight=F,this._glowIntensity=X,this._shockwaves=D,G)this.markNeedsLayout();this.markNeedsPaint()}getMinIntrinsicWidth(A){return d4(this._text,!1)}getMaxIntrinsicWidth(A){return d4(this._text,!1)}getMinIntrinsicHeight(A){return 1}getMaxIntrinsicHeight(A){return 1}performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=d4(this._text,!1),B=A.constrain(Q,1);this.setSize(B.width,B.height),super.performLayout()}paint(A,Q=0,B=0){let $=Q+this.offset.x,J=B+this.offset.y,Y=L4(this._text),Z=this._agentMode==="rush"?2.5:1,{primary:F,secondary:X}=Ct0(this._agentMode),D=$;for(let G=0;G<Y.length;G++){let V=Y[G],U=f6(V,!1),E=(1-G/Math.max(Y.length-1,1)*0.7)**1.2,z=this._glow.sample(this._orbWidth-2+G*0.5,this._orbHeight/2,this._time,Z),W=0;for(let N of this._shockwaves){let w=this._time-N.startTime;if(w<0||w>kD)continue;let L=this._orbWidth*0.7+G,O=this._orbHeight/2,P=L-N.x,T=(O-N.y)/tv5,k=Math.sqrt(P*P+T*T),x=w*FX0,h=Math.abs(k-x);if(h<Rz){let u=1-w/kD,S=(1-h/Rz)*u;W=Math.max(W,S*0.6)}}let H=z**0.7,q=Math.min(1,H*E+W),I=this.blendWithGlow(this._baseColor,q,F,X);A.setCell(D,J,{char:V,width:U,style:{fg:I,bg:this._backgroundColor}}),D+=U}}blendWithGlow(A,Q,B,$){let J=qj(B,$,Q),Y=Q*this._glowIntensity;if(A.type==="rgb"){let Z=A.value,F=Math.round(Z.r*(1-Y)+J.r*Y),X=Math.round(Z.g*(1-Y)+J.g*Y),D=Math.round(Z.b*(1-Y)+J.b*Y);return{type:"rgb",value:{r:F,g:X,b:D}}}if(Y>0.15)return{type:"rgb",value:{r:J.r,g:J.g,b:J.b}};return A}}var en4=["ctrl+x","y","z"],Aa4=1.5,ev5=2000,_G0="!@#$%^&*()_+-=[]{}|;:,.<>?/~`0123456789",FA1="Welcome to ",zs=2,ZA1=1,Qa4=zs+ZA1,Ba4=3.2,Ay5=0.18,Qy5=1.5,$a4=1.4,Ja4=30,$A1=0.16,Ua4=[{suffix:"the Orb",palettePosition:0.62},{suffix:"the Future",palettePosition:0.72},{suffix:"the Frontier",palettePosition:0.82},{suffix:"the Jungle",palettePosition:0.54},{suffix:"your Agent",palettePosition:0.68}],XA1={suffix:"Amp",palettePosition:0.98,final:!0},By5=[...Ua4,XA1],$y5=Math.max(...By5.map((A)=>d4(A.suffix,!1))),Jy5=L4(FA1).length,Yy5=L4(`${FA1}${XA1.suffix}`).length;function Zy5(){let A=[...Ua4];for(let Q=A.length-1;Q>0;Q--){let B=Math.floor(Math.random()*(Q+1)),$=A[Q];A[Q]=A[B],A[B]=$}return A.push(XA1),A}function Fy5(A,Q){let B=Q.length-1;if(A>=zs)return Q[B];let $=zs/B,J=Math.min(B,Math.floor(A/$));return Q[J]}function Ya4(A,Q){let B={color:A};if(Q)B.bold=!0;return new v(B)}function Xy5(A,Q){let $=Math.max(0,A-zs)%Ba4/Ba4*1.6-0.3,J=Q/Math.max(1,Yy5-1),Y=Math.abs(J-$);return Math.max(0,1-Y/Ay5)**2}function Za4(A,Q,B,$,J,Y){if(!Y.bold)return new C(A,Ya4(dQ(Q,$,J),!1));return new C("",void 0,L4(A).map((Z,F)=>{let X=Xy5(B,Y.characterOffset+F),D=dQ(Math.min(1,Q+X*0.14),$,J);return new C(Z,Ya4(D,!0))}))}function Dy5(A,Q,B,$){let J=Fy5(A,Q),Y="final"in J,Z=Math.max(0,A-zs),F=Y&&Z<ZA1?Math.sin(Z/ZA1*Math.PI):0,X=Y?0.74+F*0.22:Math.max(0.34,J.palettePosition-0.24),D=Y?0.88+F*0.12:J.palettePosition,G=Za4(FA1,X,A,B,$,{bold:Y,characterOffset:0}),V=Za4(J.suffix,D,A,B,$,{bold:Y,characterOffset:Jy5});return new r0({mainAxisSize:"min",children:[new p({text:G}),new U0({width:$y5,child:new Sz({contentKey:J.suffix,durationMs:280,child:new p({text:V})})})]})}function Gy5(A,Q,B){let $=Math.max(A.length,Q.length),J=[];for(let Y=0;Y<$;Y++){let Z=A[Y]??" ",F=Q[Y]??" ",X=Z===" "||Z===`
|
|
5771
5771
|
`||Z==="\t",D=F===" "||F===`
|
|
5772
5772
|
`||F==="\t";if(X&&D){J.push(B<0.5?Z:F);continue}let G=Y/$*0.4,V=Math.max(0,Math.min(1,(B-G)/(1-G)));if(V===0)J.push(Z);else if(V>=1)J.push(F);else if(X)J.push(V<0.7?" ":F);else if(D)J.push(V<0.3?Z:" ");else if(V<0.5){let U=V*2;if(Math.random()<U)J.push(_G0[Math.floor(Math.random()*_G0.length)]);else J.push(Z)}else{let U=(V-0.5)*2;if(Math.random()<U)J.push(F);else J.push(_G0[Math.floor(Math.random()*_G0.length)])}}return J.join("").trimEnd()}var Vy5="https://ampcode.com/news/neo",Uy5={type:"quote",text:`"Wait, a completely rebuilt Amp? Called Neo?
|
|
5773
5773
|
I have to see this."`,url:Vy5,linkText:"Neo"},Fa4=[{type:"command",text:'amp -x "What package manager do we use here?"'},{type:"command",text:'amp -x "Run the linter and fix the errors"'},{type:"hint",text:"Use Ctrl+G to edit the prompt in your $EDITOR"},{type:"hint",text:"Use the `prompt: queue` command to enqueue messages without interrupting the agent"},{type:"hint",text:"Use the `thread: browser` command to open your thread in the browser"},{type:"hint",text:"Use the `thread: new` command to start a fresh thread"},{type:"hint",text:"Use the `thread: handoff` command to draft a new thread with relevant context"},{type:"hint",text:"Use the `thread: visibility` command to change thread visibility settings"},{type:"hint",text:"Use the `settings: open in editor` command to configure Amp"},{type:"hint",text:"Use the `agents-md: generate` command to create an AGENTS.md"},{type:"hint",text:"Use Tab/Shift+Tab to navigate to previous messages to edit or restore to a previous state"},{type:"prompt",text:'"Use the oracle to review the code we just wrote."'},{type:"prompt",text:'"Use subagents to update these components to use the new attribute we added."'},{type:"prompt",text:'"Do not write any code yet. Plan first."'},{type:"prompt",text:'"Think hard before you start implementing."'},{type:"prompt",text:`"Use 'psql' to change all blog_posts to have comments"`},{type:"prompt",text:'"Run <build command> and fix all the errors"'},{type:"quote",text:`"We are at the 'introduction of photography' period of programming. Painting by hand just doesn't have the same appeal anymore" - Orta Therox`},{type:"quote",text:'"Programming in the normal way feels like walking. You type out each expression, stepping incrementally toward your goal. When programming with AI, each move is bigger than a step. You lift off the ground." - Mary Rose Cook'},{type:"quote",text:'"Tomorrow all this may change, but right now after daily experience writing code with LLMs I strongly believe the maximum quality of work is reached using the human+LLM equation." - antirez'},{type:"quote",text:`"The magic that's coming now is the most powerful yet. And that means that we're beginning a profound period of exploration and creativity, trying to understand how to make that magic work and to derive new advantages from its power." - Tim O'Reilly`},{type:"quote",text:`"They're applying years of hard-won engineering wisdom to shape and constrain the AI's output. The AI is accelerating their implementation, but their expertise is what keeps the code maintainable." - Addy Osmani`},{type:"quote",text:'"I love computers just for the—sheer machine of it. This is the most exciting new thing that computers have been doing, probably in my lifetime." - DHH'},{type:"quote",text:`"We wouldn't even need to bother looking at the AI-generated code any more, just like we don't bother looking at the machine code generated by a compiler." - Martin Kleppmann`},{type:"quote",text:'"Real progress is messy, iterative, and deeply intertwined with the tools we build. Large language models are the latest, most dramatic example of that truth." - Daniel Lemire'},{type:"quote",text:`"'Human in the loop' is evolving from 'human who fixes AI mistakes' to 'human who directs AI work.'" - Ethan Mollick`},{type:"quote",text:`"I'm trying to code like a surgeon. A surgeon isn't a manager, they do the actual work! But their skills and time are highly leveraged." - Geoffrey Litt`},{type:"quote",text:`"It's important to do things fast. You learn more per unit time because you make contact with reality more frequently." - Nat Friedman`},{type:"quote",text:'"Once coding speed jumps, everything around it becomes the constraint. Your throughput gets capped by whatever is slowest." - Paul Dix'},{type:"quote",text:'"Bubble or no bubble, no one knows anything." - Benedict Evans'},{type:"quote",text:`"I actually don't think documentation is too important: LLMs can read the code a lot faster than you to figure out how to use it." - Simon Willison`},{type:"quote",text:`"The vast majority of AI tokens in the future will be used on things we don't even do today as workers." - Aaron Levie`},{type:"quote",text:`"Once you're airborne, you're suddenly immune to the length of the runway. You have days, not months. Time to break some things." - Kent Beck`},{type:"quote",text:'"Absolutely every fundamental assumption about how I work has to be questioned. There are days when it feels like I would be better off if I did not know anything about programming and started from scratch." - David Crawshaw'},{type:"quote",text:'"Code was the easiest part." - Andrej Karpathy'},{type:"quote",text:`"It's amazing for learning a codebase you're not familiar with, so it's great for discovery. Getting us out of writing boilerplate, getting us out of memorizing APIs, getting us out of looking up that thing from Stack Overflow." - Jeremy Howard`},{type:"quote",text:`"Don't anthropomorphize them!" - Steven Sinofsky`}],JA1=40,YA1=40,Xa4=44,Da4=36,Ky5=8,Ey5=8,Ka4=50,Ea4=2,zy5=4,Wy5=4,Hy5={primary:{r:140,g:38,b:0},secondary:{r:255,g:225,b:102}},qy5={primary:{r:10,g:42,b:18},secondary:{r:200,g:230,b:68}},Iy5={primary:{r:18,g:0,b:107},secondary:{r:103,g:255,b:168}};function Ny5(A){return A==="rush"?3.4:A==="deep"?0.9:1.45}function Ga4(A,Q,B){let $=(A-Q)/B;return Math.exp(-($*$))}function wy5(A){return 1-(1-Math.max(0,Math.min(1,A)))**3}function Cy5(A,Q){let B=Ny5(Q),$=0.35,J=4.5,Y=72,Z=A+1.4,F=Number.NEGATIVE_INFINITY;for(let X=0;X<72;X++){let D=X/Math.max(1,71),G=A+0.35+4.15*D,V=G*B,U=V*1.35,E=(Math.sin(U)+1)*0.5,z=1-Math.abs(Math.cos(U)),W=Math.cos(V*1.55)*0.38-0.18,H=Math.sin(V*1.15)*0.25-0.26,q=Ga4(W,-0.14,0.2)*0.45+Ga4(H,-0.29,0.12)*0.55,I=(1-Math.abs(Math.sin(V*1.55)))*0.5+(1-Math.abs(Math.cos(V*1.15)))*0.5,N=V*0.45,w=(1-Math.abs(Math.cos(N)))*0.6+(1-Math.abs(Math.sin(N*0.7)))*0.4,L=1-D,O=E*0.34+z*0.24+q*0.22+I*0.12+w*0.04+L*0.04;if(O>F)F=O,Z=G}return Z}function Va4(A,Q){if(A==="frontier")return{colorMode:"vertical",colors:Hy5};if(Q&&A==="smart")return{colorMode:"vertical",colors:qy5};if(Q&&A==="deep")return{colorMode:"vertical",colors:Iy5};return{colorMode:"intensity"}}function My5(A,Q,B,$){if(A.type==="hint")return A.text.split(/(`[^`]+`)/g).map((Y)=>{if(Y.startsWith("`")&&Y.endsWith("`"))return new C(Y.slice(1,-1),B);return new C(Y,Q)});if(A.url&&A.linkText){let J=A.text.indexOf(A.linkText);if(J>=0){let Y=A.url,Z=A.text.slice(0,J),F=A.text.slice(J+A.linkText.length);return[new C(Z,Q),new C(A.linkText,Q.copyWith({underline:!0}),void 0,Mz(Y),()=>$(Y)),new C(F,Q)]}}return[new C(A.text,Q)]}function Ly5(A){let Q=Math.max(Ky5,A.width-Ka4-Ea4-zy5),B=Math.max(Ey5,A.height-Wy5),$=Math.min(Xa4,Q),J=Math.ceil($/Xa4*Da4),Y=Math.min(Da4,B,J);return{width:$,height:Y}}function Oy5(A,Q){return dQ(A==="frontier"?0.78:0.9,A,Q)}class Mf extends S0{agentMode;orbVisualStyle;mysteriousMessage;mysterySequenceProgress;onOrbExplode;settleAnimation;interactive;useNeoColors;constructor(A={}){super(A.key?{key:A.key}:{});this.agentMode=A.agentMode,this.orbVisualStyle=A.orbVisualStyle??"classic",this.mysteriousMessage=A.mysteriousMessage,this.mysterySequenceProgress=A.mysterySequenceProgress,this.onOrbExplode=A.onOrbExplode,this.settleAnimation=A.settleAnimation??!1,this.interactive=A.interactive??!0,this.useNeoColors=A.useNeoColors??!1}createState(){return new za4}}class za4 extends T0{_glow;_neoWelcomeVariants;_t=0;_effectTime=0;_neoWelcomeTime=0;_timer=null;_fps=0;_animateNeoWelcome=!1;_lastTickTimeMs=null;_settleStartTimeMs=null;_settleStartAnimationTime=null;_settleTargetAnimationTime=null;_shockwaves=[];_neoOrbClickComboCount=0;_neoOrbLastClickTime=null;_neoOrbChargeStartTime=null;_neoOrbRegrowStartTime=null;_suggestion;_morphStartTime=null;_previousHasMystery=!1;initState(){if(super.initState(),this._glow=new M9,this._neoWelcomeVariants=Zy5(),this.widget.orbVisualStyle==="neo")this._suggestion=Uy5;else{let A=process.env.NO_SPLASH_QUOTE==="1"?Fa4.filter((Q)=>Q.type!=="quote"):Fa4;this._suggestion=A[Math.floor(Math.random()*A.length)]}if(this._previousHasMystery=!!this.widget.mysteriousMessage,this.widget.settleAnimation)this.startSettlingAnimation()}didUpdateWidget(A){if(super.didUpdateWidget(A),!A.settleAnimation&&this.widget.settleAnimation)this.startSettlingAnimation()}getMorphProgress(A){if(this._morphStartTime===null)return null;let Q=A-this._morphStartTime;if(Q>=Aa4)return null;return Q/Aa4}handleShockwave=(A)=>{if(this._shockwaves.push(A),this._timer===null&&this._fps>0)this.startAnimation(this._fps,this._animateNeoWelcome);this.setState(()=>{})};handleOrbClick=(A)=>{if(this.widget.orbVisualStyle!=="neo")return;if(this.getNeoOrbRegrowthScale(A.time)<1){this._neoOrbClickComboCount=0,this._neoOrbLastClickTime=null,this._neoOrbChargeStartTime=null;return}let Q=this._neoOrbLastClickTime===null?Number.POSITIVE_INFINITY:A.time-this._neoOrbLastClickTime,B=Q>=0&&Q<=Qy5;if(this._neoOrbClickComboCount=B?this._neoOrbClickComboCount+1:1,this._neoOrbLastClickTime=A.time,this._neoOrbChargeStartTime=A.time,this._timer===null&&this._fps>0)this.startAnimation(this._fps,this._animateNeoWelcome);if(this._neoOrbClickComboCount>=BA1){this._neoOrbClickComboCount=0,this._neoOrbLastClickTime=null,this._neoOrbChargeStartTime=null,this._neoOrbRegrowStartTime=A.time;let $=Va4(this.widget.agentMode,this.widget.useNeoColors).colors,J={x:A.x,y:A.y};if($)J.primaryColor=$.primary,J.secondaryColor=$.secondary;this.widget.onOrbExplode?.(J)}this.setState(()=>{})};dispose(){if(this._timer)clearInterval(this._timer),this._timer=null;this._lastTickTimeMs=null,super.dispose()}startSettlingAnimation(){if(this._settleStartTimeMs!==null)return;this._settleStartTimeMs=Date.now(),this._settleStartAnimationTime=this._t,this._settleTargetAnimationTime=this.widget.orbVisualStyle==="neo"?Cy5(this._t,this.widget.agentMode):this._t}getSettleProgress(A){if(this._settleStartTimeMs===null)return null;return Math.min(1,Math.max(0,(A-this._settleStartTimeMs)/ev5))}getCurrentEffectTime(){if(this._timer===null&&this._lastTickTimeMs!==null)return this._effectTime+(Date.now()-this._lastTickTimeMs)/1000;return this._effectTime}getNeoOrbClickCharge(A=this.getCurrentEffectTime()){if(this.widget.orbVisualStyle!=="neo"||this._neoOrbChargeStartTime===null)return 0;let Q=A-this._neoOrbChargeStartTime;if(Q<0||Q>$a4)return 0;let B=Math.min(1,this._neoOrbClickComboCount/Math.max(1,BA1-1)),$=1-Q/$a4,J=Math.exp(-Q*4)*0.12;return Math.max(0,Math.min(1,B*(0.3+$*0.7)+J))}getNeoOrbRegrowthScale(A=this.getCurrentEffectTime()){if(this.widget.orbVisualStyle!=="neo"||this._neoOrbRegrowStartTime===null)return 1;let Q=A-this._neoOrbRegrowStartTime;if(Q<=0)return $A1;if(Q>=Ja4)return 1;let B=Q/Ja4;return $A1+(1-$A1)*B}getAnimationSpeed(A){let Q=this.getSettleProgress(A);if(Q===null)return 1;return(1-Q)*(1-Q)}getSettledOrbTime(A){let Q=this.getSettleProgress(A);if(Q===null||this._settleStartAnimationTime===null||this._settleTargetAnimationTime===null)return null;return this._settleStartAnimationTime+(this._settleTargetAnimationTime-this._settleStartAnimationTime)*wy5(Q)}isNeoWelcomeAnimationPending(){return this._animateNeoWelcome&&this._neoWelcomeTime<Qa4}isClickEffectPending(){let A=this.getCurrentEffectTime();return this._shockwaves.some((Q)=>A-Q.startTime<kD)||this.getNeoOrbClickCharge(A)>0||this.getNeoOrbRegrowthScale(A)<1}stopAnimationTimer(){if(this._timer)clearInterval(this._timer),this._timer=null;this._lastTickTimeMs=null}startAnimation(A,Q){if(this.stopAnimationTimer(),this._fps=A,this._animateNeoWelcome=Q,A>0&&(this.getAnimationSpeed(Date.now())>0||this.isNeoWelcomeAnimationPending()||this.isClickEffectPending()))this._lastTickTimeMs=Date.now(),this._timer=setInterval(()=>{let B=Date.now(),$=this.getAnimationSpeed(B);if($<=0&&!this.isNeoWelcomeAnimationPending()&&!this.isClickEffectPending()){let Y=this.getSettledOrbTime(B);if(Y!==null)this._t=Y;this.stopAnimationTimer(),this.setState(()=>{});return}let J=this._lastTickTimeMs===null?1/A:(B-this._lastTickTimeMs)/1000;if(this._lastTickTimeMs=B,this._effectTime+=J,this._animateNeoWelcome)this._neoWelcomeTime+=J;if($>0){let Y=this.getSettledOrbTime(B);this._t=Y??this._t+J*$}this._shockwaves=this._shockwaves.filter((Y)=>this._effectTime-Y.startTime<kD),this.setState(()=>{})},1000/A)}build(A){let B=O1.of(A).colorScheme,J=P0.of(A).app,Y=s1.of(A),Z=Y.capabilities.animationSupport,F=Z==="fast"?30:Z==="slow"?15:0,X=this.widget.orbVisualStyle==="neo"&&Z==="fast";if(F!==this._fps||X!==this._animateNeoWelcome)this.startAnimation(F,X);let D=!!this.widget.mysteriousMessage,G=this._suggestion,V=Z==="disabled"?3:this._t,U=Z==="disabled"?Qa4:this._neoWelcomeTime;if(D&&!this._previousHasMystery&&Z!=="disabled")this._morphStartTime=V;this._previousHasMystery=D;let K=this.getMorphProgress(V),E=K!==null,z=Va4(this.widget.agentMode,this.widget.useNeoColors),W=z.colors,H=this.widget.orbVisualStyle==="neo",q=Oy5(this.widget.agentMode,W),I=H?new v({color:B.foreground,dim:!0}):G.type==="quote"||G.type==="news"?new v({color:B.foreground,dim:!0}):G.type==="hint"?new v({color:B.secondary}):new v({color:G.type==="prompt"||G.type==="note"?B.primary:B.warning}),N=H?new v({color:B.foreground,bold:!0}):new v({color:J.keybind}),w=H?new v({color:q}):new v({color:J.command}),L=new v({color:B.foreground,dim:!0}),O=My5(G,I,w,(H0)=>{mA(A,H0)}),P=Z==="fast",T=P&&this.widget.orbVisualStyle==="classic",k;if(T)k=new PG0({text:"Welcome to Amp",baseColor:B.foreground,backgroundColor:B.background,glow:this._glow,time:V,agentMode:this.widget.agentMode,orbWidth:JA1,orbHeight:YA1,glowIntensity:1,shockwaves:this._shockwaves});else if(X)k=Dy5(U,this._neoWelcomeVariants,this.widget.agentMode,W);else k=new p({text:new C("Welcome to Amp",new v({color:B.foreground}))});let x=null;if(D){let V0=0.3+(Math.sin(V*0.5)*0.5+0.5)*0.4,w0=new v({color:B.primary,italic:!0,dim:V0<0.5}),R0=this.widget.mysterySequenceProgress?.matched.length??0,B0=R0>0?"Keep going...":"A message awaits...",I0=[];for(let n=0;n<en4.length;n++){let o=en4[n],r=o==="ctrl+x"?"Ctrl-X":o.toUpperCase(),X0=n<R0?new v({color:B.primary,bold:!0}):N;if(n>0)I0.push(new C(", ",L));I0.push(new C(r,X0))}x=new x0({crossAxisAlignment:"start",mainAxisSize:"min",children:[P?new PG0({text:B0,baseColor:B.primary,glow:this._glow,time:V,agentMode:this.widget.agentMode,orbWidth:JA1,orbHeight:YA1,glowIntensity:0.6,shockwaves:this._shockwaves}):new p({text:new C(B0,w0)}),new p({text:new C("",void 0,[...I0,new C(" to unlock",L)])})]})}let h,u=`A message awaits...
|
|
@@ -5795,7 +5795,7 @@ Ctrl-X, Y, Z to unlock`;if(E){let V0=G.text.replace(/`([^`]+)`/g,"$1")+`
|
|
|
5795
5795
|
`))}function Kx5(A,Q){let{colors:B,app:$}=Q;switch(A){case"pending":return{icon:"◌",color:B.warning};case"registered":return{icon:"•",color:B.mutedForeground};case"failed":return{icon:"✗",color:$.toolError};case"duplicate":return{icon:"◇",color:B.warning};default:return{icon:"?",color:B.foreground}}}function pa4(A,Q){let B=A.replace(/\s+/g," ").trim();if(d4(B)<=Q)return B;let $="...",J=d4($);if(Q<=J)return xF($,Q);return`${xF(B,Q-J,!0,"")}${$}`}var NA1="https://ampcode.com/news/neo",wA1=[{title:"Meet the new Amp CLI",body:[]},{title:"Rebuilt From The Ground Up",body:["Same close-up terminal workflow. Completely different underneath."]},{title:"Just Keep Typing",body:["Context is summarized automatically at ~90%.","No handoff flow. No context percentage to babysit."]},{title:"Queueing and Steering",body:["Sending a message now queues by default instead of cancelling tools.","Use steering when you want the agent to see something sooner."]},{title:"Remote Control",body:["Start a thread in the CLI, then keep going from ampcode.com.","Watch live updates and queue follow-ups from any device."]},{title:"Customize Amp with Amp",body:[{text:"Amp now has a ",linkText:"complete plugin API",href:"https://ampcode.com/manual/plugin-api",textAfter:"."},"Add tools, commands, control UI, and hook into events."]},{title:"Permissions",body:[{text:"By default (when no ",highlightText:"amp.permissions",textAfterHighlight:" setting is present), Amp no longer asks for confirmation before running any tools and commands. And you can now implement your own custom permission logic with ",linkText:"plugins",href:"https://ampcode.com/manual/plugin-api",textAfter:"."}]},{title:null,body:["Check out the full news post for more:",{text:NA1,href:NA1},"","",{text:"Need old Amp for a bit? Use ",keybind:"amp --take-me-back"}]}];function Ex5(A){return[{title:"Upgrade your Amp CLI",body:[{text:"This npm-based distribution of Amp CLI has been deprecated. To use the ",linkText:"new Amp CLI",href:NA1,textAfter:" you'll need to switch to the binary install:",linkWidget:!0},"",{codeBlock:["npm uninstall -g @sourcegraph/amp",A]}]}]}function zx5(){if(process.platform==="win32")return'powershell -c "irm https://ampcode.com/install.ps1 | iex"';return"curl -fsSL https://ampcode.com/install.sh | bash"}var Lf=50,tj=40,qA1=1000,Wx5=420,Hx5=760,qx5=-250,Ix5=1100,kG0=33,ia4=0.999,Nx5=2.1,wx5=720,Cx5=420,Ao4="Meet the new",Qo4="Amp",Bo4="CLI",CA1=L4(Ao4).length,Mx5=L4(Qo4).length,Lx5=L4(Bo4).length,SG0={primary:{r:140,g:38,b:0},secondary:{r:255,g:225,b:102}},na4={primary:{r:10,g:42,b:18},secondary:{r:200,g:230,b:68}},aa4={primary:{r:18,g:0,b:107},secondary:{r:103,g:255,b:168}},oa4=[SG0,na4,aa4,SG0,na4,aa4,SG0],Ox5=SG0;class MA1 extends S0{onDismiss;onQuit;animationProgress;variant;binaryInstallCommand;introStages;dismissible;constructor(A){super();this.onDismiss=A.onDismiss,this.onQuit=A.onQuit,this.animationProgress=A.animationProgress,this.variant=A.variant??"intro",this.binaryInstallCommand=A.binaryInstallCommand??zx5(),this.introStages=this.variant==="npm-migration"?Ex5(this.binaryInstallCommand):wA1,this.dismissible=this.variant!=="npm-migration"}createState(){return new $o4}}class $o4 extends T0{startedAt=performance.now();animationTimer=null;stageTransitionTimer=null;firstStageTitleTimer=null;firstStageHintTimer=null;firstStageRevealTimer=null;firstStageTitleRevealStartedAt=null;firstStageHintRevealStartedAt=null;stageTransitionStartedAt=performance.now();animationStartProgress=0;animationTargetProgress=1;animationDurationMs=qA1;onAnimationComplete=null;animationProgress=0;introStage=0;previousIntroStage=null;stageTransitionProgress=1;stageTransitionDirection=1;firstStageTitleVisible=!1;firstStageHintVisible=!1;firstStageTitleRevealProgress=0;firstStageHintRevealProgress=0;dismissTimer=null;dismissStartedAt=performance.now();dismissProgress=0;isDismissing=!1;splashOrbGlow=new M9(42);initState(){super.initState(),this.startAnimationIfNeeded()}didUpdateWidget(A){if(super.didUpdateWidget(A),A.animationProgress!==this.widget.animationProgress)this.startAnimationIfNeeded()}dispose(){this.stopAnimation(),this.stopStageTransitionTimer(),this.stopFirstStageRevealTimers(),this.stopDismissAnimation(),super.dispose()}startAnimationIfNeeded(){if(this.stopAnimation(),this.stopFirstStageRevealTimers(),this.widget.animationProgress!==void 0){this.animationProgress=aY(this.widget.animationProgress),this.firstStageTitleVisible=this.animationProgress>=ia4,this.firstStageHintVisible=this.animationProgress>=ia4,this.firstStageTitleRevealProgress=this.firstStageTitleVisible?1:0,this.firstStageHintRevealProgress=this.firstStageHintVisible?1:0;return}if(this.firstStageTitleVisible=!1,this.firstStageHintVisible=!1,this.firstStageTitleRevealProgress=0,this.firstStageHintRevealProgress=0,this.startProgressAnimation({from:0,to:1,durationMs:qA1,onComplete:()=>{if(!this.widget.dismissible)this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1})}}),this.widget.dismissible)this.startFirstStageRevealSequence()}startDismissAnimation(){if(this.isDismissing)return;this.stopFirstStageRevealTimers(),this.stopStageTransitionTimer(),this.dismissStartedAt=performance.now(),this.setState(()=>{this.isDismissing=!0,this.dismissProgress=0}),this.dismissTimer=setInterval(()=>{let A=performance.now()-this.dismissStartedAt,Q=aY(A/Hx5);if(this.setState(()=>{this.dismissProgress=Q}),Q>=1)this.stopDismissAnimation(),this.widget.onDismiss()},kG0)}canNavigateIntroStage(){if(this.isDismissing)return!1;if(!this.firstStageHintVisible)return!1;if(this.introStage===0&&this.firstStageHintRevealProgress<1)return!1;return!0}advanceIntroStage(){if(!this.canNavigateIntroStage())return;if(this.isFinalIntroStage()){if(this.widget.dismissible)this.startDismissAnimation();return}this.moveIntroStage(1)}dismissFromFinalIntroStage(){if(!this.widget.dismissible||!this.canNavigateIntroStage()||!this.isFinalIntroStage())return!1;return this.startDismissAnimation(),!0}nextIntroStage(){if(!this.canNavigateIntroStage()||this.isFinalIntroStage())return;this.moveIntroStage(1)}goToPreviousIntroStage(){if(!this.canNavigateIntroStage()||this.introStage<=0)return;this.moveIntroStage(-1)}isFinalIntroStage(){return this.introStage>=this.widget.introStages.length-1}moveIntroStage(A){let Q=this.introStage+A;if(this.stopStageTransitionTimer(),this.stageTransitionStartedAt=performance.now(),this.setState(()=>{this.previousIntroStage=this.introStage,this.introStage=Q,this.stageTransitionDirection=A}),this.widget.animationProgress!==void 0){this.setState(()=>{this.previousIntroStage=null,this.stageTransitionProgress=1});return}this.setState(()=>{this.stageTransitionProgress=0}),this.stageTransitionTimer=setInterval(()=>{let B=performance.now()-this.stageTransitionStartedAt,$=aY(B/Wx5);if(this.setState(()=>{if(this.stageTransitionProgress=$,$>=1)this.previousIntroStage=null}),$>=1)this.stopStageTransitionTimer()},kG0)}startProgressAnimation({from:A,to:Q,durationMs:B,onComplete:$}){this.stopAnimation(),this.startedAt=performance.now(),this.animationStartProgress=A,this.animationTargetProgress=Q,this.animationDurationMs=B,this.onAnimationComplete=$,this.animationProgress=A,this.animationTimer=setInterval(()=>{let J=performance.now()-this.startedAt,Y=aY(J/this.animationDurationMs),Z=this.animationStartProgress+(this.animationTargetProgress-this.animationStartProgress)*Of(Y);if(this.setState(()=>{this.animationProgress=Z}),Y>=1)this.stopAnimation(),this.onAnimationComplete?.(),this.onAnimationComplete=null},kG0)}stopAnimation(){if(this.animationTimer)clearInterval(this.animationTimer),this.animationTimer=null}stopStageTransitionTimer(){if(this.stageTransitionTimer)clearInterval(this.stageTransitionTimer),this.stageTransitionTimer=null}startFirstStageRevealSequence(){this.stopFirstStageRevealTimers(),this.setState(()=>{this.firstStageTitleVisible=!1,this.firstStageHintVisible=!1,this.firstStageTitleRevealProgress=0,this.firstStageHintRevealProgress=0});let A=Math.max(0,qA1+qx5),Q=A+Ix5;this.firstStageTitleTimer=setTimeout(()=>{this.firstStageTitleRevealStartedAt=performance.now(),this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageTitleRevealProgress=0}),this.startFirstStageRevealTimer()},A),this.firstStageHintTimer=setTimeout(()=>{this.firstStageHintRevealStartedAt=performance.now(),this.setState(()=>{this.firstStageHintVisible=!0,this.firstStageHintRevealProgress=0}),this.startFirstStageRevealTimer()},Q)}startFirstStageRevealTimer(){if(this.firstStageRevealTimer)return;this.firstStageRevealTimer=setInterval(()=>{let A=performance.now(),Q=this.firstStageTitleRevealStartedAt?aY((A-this.firstStageTitleRevealStartedAt)/wx5):this.firstStageTitleRevealProgress,B=this.firstStageHintRevealStartedAt?aY((A-this.firstStageHintRevealStartedAt)/Cx5):this.firstStageHintRevealProgress;if(this.setState(()=>{this.firstStageTitleRevealProgress=Q,this.firstStageHintRevealProgress=B}),Q>=1&&B>=1)this.stopFirstStageRevealTimer()},kG0)}stopFirstStageRevealTimers(){if(this.stopFirstStageRevealTimer(),this.firstStageTitleRevealStartedAt=null,this.firstStageHintRevealStartedAt=null,this.firstStageTitleTimer)clearTimeout(this.firstStageTitleTimer),this.firstStageTitleTimer=null;if(this.firstStageHintTimer)clearTimeout(this.firstStageHintTimer),this.firstStageHintTimer=null}stopFirstStageRevealTimer(){if(this.firstStageRevealTimer)clearInterval(this.firstStageRevealTimer),this.firstStageRevealTimer=null}stopDismissAnimation(){if(this.dismissTimer)clearInterval(this.dismissTimer),this.dismissTimer=null}currentOrbPalette(){let A=ra4(this.introStage),Q=this.previousIntroStage===null||this.stageTransitionProgress>=1?A:sa4(ra4(this.previousIntroStage),A,Of(this.stageTransitionProgress));return this.dismissProgress>0?sa4(Q,Ox5,Of(this.dismissProgress)):Q}build(A){let Q=O1.of(A).colorScheme,B=P0.of(A),$=this.currentOrbPalette(),J=dQ(1,"frontier",$),Y=s1.of(A).size,F=this.widget.animationProgress??this.animationProgress,X=Math.max(Y.width/Lf,Y.height/tj)*Nx5,D=X+(1-X)*F,G=Of(this.dismissProgress),V=Math.max(Lf,Math.round(Lf*D)),U=Math.max(tj,Math.round(tj*D)),K=Math.round((Y.width-V)/2),E=Math.round((Y.height-U)/2),z=Math.max(0,Math.floor((Y.width-Lf)/2)),W=-Math.floor(tj/2),H=Math.round(K+(z-K)*F),q=Math.round(E+(W-E)*F),I=H+V/2,N=q+U/2,w=jx5({dismissProgress:this.dismissProgress,easedDismissProgress:G,introOrbScale:D,normalOrbCenterX:I,normalOrbCenterY:N,size:Y}),L=Math.max(Lf,Math.round(Lf*w.orbScale)),O=Math.max(tj,Math.round(tj*w.orbScale)),P=w.orbCenterX,T=w.orbCenterY,k=Math.round(P-L/2),x=Math.round(T-O/2),h=Math.max(3,Math.min(Y.height-5,Math.floor(tj/2)+2)),u=Math.max(h+3,Y.height-3),S=w.textDissolveProgress,b=this.isFinalIntroStage()?w.backdropDissolveProgress:0,d=this.firstStageTitleVisible&&S<1,c=d&&this.firstStageHintVisible,g=c&&this.widget.dismissible&&this.introStage>0&&!this.isFinalIntroStage(),l=this.introStage===0?this.firstStageTitleRevealProgress:1,s=this.introStage===0?this.firstStageHintRevealProgress:1,A0=Math.max(24,Math.min(74,Y.width-4)),H0=Math.min(12,Math.max(8,Y.height-h-6)),V0=Math.max(0,Math.floor((Y.width-A0)/2)),w0=Math.max(0,Math.min(Y.height-H0,Math.floor(Y.height*0.55-H0/2))),R0=this.widget.animationProgress!==void 0?new Ix({width:L,height:O,agentMode:"frontier",visualStyle:"neo",neoGlyphSet:"dotField",backgroundColor:Q.background,primaryColor:$.primary,secondaryColor:$.secondary,glow:this.splashOrbGlow,seed:42,fps:0,onClick:()=>{}}):new Ix({width:L,height:O,agentMode:"frontier",visualStyle:"neo",neoGlyphSet:"dotField",backgroundColor:Q.background,primaryColor:$.primary,secondaryColor:$.secondary,glow:this.splashOrbGlow,onClick:()=>{}});return new i4({autofocus:!0,canRequestFocus:!0,debugLabel:"NeoWelcomeTakeover",onKey:(B0)=>{if(B0.key==="Enter")return this.advanceIntroStage(),"handled";if(!this.widget.dismissible&&B0.key==="c"&&B0.ctrlKey)return this.widget.onQuit?.(),"handled";if(!this.widget.dismissible&&B0.key==="q")return this.widget.onQuit?.(),"handled";if((B0.key===" "||B0.key==="Space")&&!this.isFinalIntroStage())return this.advanceIntroStage(),"handled";if(B0.key==="Escape"||B0.key==="Esc"){if(!this.widget.dismissible)return this.widget.onQuit?.(),"handled";return this.dismissFromFinalIntroStage()?"handled":"ignored"}if(B0.key==="ArrowRight")return this.nextIntroStage(),"handled";if(B0.key==="ArrowLeft")return this.goToPreviousIntroStage(),"handled";return"ignored"},child:new e4({fit:"expand",children:[new Jo4({color:Q.background,dissolveProgress:b}),new e4({fit:"expand",children:[new T1({onClick:()=>{},child:U0.expand()}),new zA({left:k,top:x,width:L,height:O,child:R0}),...d?[new zA({left:V0,top:w0,width:A0,height:H0,child:Px5({introStages:this.widget.introStages,stage:this.introStage,previousStage:this.previousIntroStage,progress:this.stageTransitionProgress,direction:this.stageTransitionDirection,width:A0,height:H0,foreground:Q.foreground,mutedForeground:Q.mutedForeground,accent:J,link:B.app.link,keybind:B.app.keybind,titleRevealProgress:l,dissolveProgress:S,context:A})})]:[],...c?[...g?[new zA({left:V0,top:Math.max(0,u-1),width:A0,height:1,child:new p({text:yx5({stage:this.introStage,featureStageCount:Math.max(0,this.widget.introStages.length-2),foreground:Q.mutedForeground,dissolveProgress:S}),textAlign:"center"})})]:[],new zA({left:V0,top:u,width:A0,height:1,child:fx5({finalStage:this.isFinalIntroStage(),dismissible:this.widget.dismissible,foreground:Q.mutedForeground,keybind:B.app.keybind,revealProgress:s,dissolveProgress:S,context:A})})]:[]]})]})})}}class Jo4 extends A8{color;dissolveProgress;constructor({color:A,dissolveProgress:Q}){super();this.color=A,this.dissolveProgress=Q}createRenderObject(){return new Yo4(this.color,this.dissolveProgress)}updateRenderObject(A){A.update(this.color,this.dissolveProgress)}}class Yo4 extends B4{color;dissolveProgress;constructor(A,Q){super();this.color=A,this.dissolveProgress=Q}update(A,Q){this.color=A,this.dissolveProgress=Q,this.markNeedsPaint()}performLayout(){let A=this._lastConstraints;q4(!!A,"performLayout called without constraints");let Q=A.constrain(A.biggest.width,A.biggest.height);this.setSize(Q.width,Q.height),super.performLayout()}paint(A,Q=0,B=0){let $=Math.floor(Q+this.offset.x),J=Math.floor(B+this.offset.y),Y=Math.floor(this.size.width),Z=Math.floor(this.size.height),F={bg:this.color},X=aY(this.dissolveProgress);if(X<=0){A.fill($,J,Y,Z," ",F);return}if(X>=1)return;for(let D=0;D<Z;D++)for(let G=0;G<Y;G++)if(!Rx5(G,D,Y,Z,X))A.fill($+G,J+D,1,1," ",F)}}function aY(A){return Math.min(1,Math.max(0,A))}function Of(A){return 1-(1-A)**3}function ra4(A){return oa4[A]??oa4[0]}function sa4(A,Q,B){return{primary:qj(A.primary,Q.primary,B),secondary:qj(A.secondary,Q.secondary,B)}}function jx5({dismissProgress:A,easedDismissProgress:Q,introOrbScale:B,normalOrbCenterX:$,normalOrbCenterY:J,size:Y}){return{orbScale:B+(B*0.86-B)*Q,orbCenterX:$+(Y.width*0.54-$)*Q,orbCenterY:J-Y.height*0.44*Q,textDissolveProgress:aY(A/0.52),backdropDissolveProgress:Of(aY((A-0.12)/0.88))}}function Rx5(A,Q,B,$,J){let Y=$<=1?0:Q/($-1),Z=Zo4(A+Q*Math.max(1,B));return(1-Y)*0.72+Z*0.28<J}function Px5({introStages:A,stage:Q,previousStage:B,progress:$,direction:J,width:Y,height:Z,foreground:F,mutedForeground:X,accent:D,link:G,keybind:V,titleRevealProgress:U,dissolveProgress:K,context:E}){if(B===null||$>=1)return IA1({introStages:A,stage:Q,foreground:F,mutedForeground:X,accent:D,link:G,keybind:V,titleRevealProgress:U,dissolveProgress:K,context:E});let z=Of($),W=J*Math.round((1-z)*Y),H=-J*Math.round(z*Y);return new _z(new e4({fit:"expand",children:[new zA({left:H,top:0,width:Y,height:Z,child:IA1({introStages:A,stage:B,foreground:F,mutedForeground:X,accent:D,link:G,keybind:V,titleRevealProgress:B===0?1:U,dissolveProgress:K,context:E})}),new zA({left:W,top:0,width:Y,height:Z,child:IA1({introStages:A,stage:Q,foreground:F,mutedForeground:X,accent:D,link:G,keybind:V,titleRevealProgress:U,dissolveProgress:K,context:E})})]}))}function IA1({introStages:A,stage:Q,foreground:B,mutedForeground:$,accent:J,link:Y,keybind:Z,titleRevealProgress:F,dissolveProgress:X,context:D}){let G=A[Q]??A[0]??wA1[0],V=new v({color:J,bold:!0}),U=new v({color:B}),K=A===wA1&&Q===0,E=[...G.title===null?[]:[new p({text:K?vG0(kx5({progress:F,foreground:J,pulseColor:J}),X):new C(rB(G.title,X),V),textAlign:"center"})],...G.body.length>0?[_x5()]:[],...G.body.map((z)=>Tx5(z,U,$,Y,Z,X,D))];return new a1({child:new f0({padding:K0.horizontal(1),child:new x0({crossAxisAlignment:"stretch",mainAxisAlignment:"center",mainAxisSize:"min",children:E})})})}function _x5(){return U0.height(1)}function Tx5(A,Q,B,$,J,Y,Z){if(typeof A==="string")return new p({text:new C(rB(A,Y),Q),textAlign:"center"});if("codeBlock"in A)return new e5({onCopy:(F,X)=>{if(X)Q5.success(Z,"Copied to clipboard",2000)},child:new x0({mainAxisSize:"min",children:A.codeBlock.map((F)=>new p({text:new C(rB(F,Y),new v({color:J})),textAlign:"center",selectable:!0}))})});if("keybind"in A){let F=new p({text:new C("",void 0,[new C(rB(A.text,Y),new v({color:B,dim:!0})),new C(rB(A.keybind,Y,L4(A.text).length),new v({color:J}))]),textAlign:"center",selectable:"selectable"in A?A.selectable:!1});if("selectable"in A)return new a1({child:new e5({child:F})});return F}if("highlightText"in A){let F=GA.createSpan(A.href,A.linkText,new v({color:$,underline:!0})),X=mD.of(Z),D=new C("",void 0,[new C(A.text,Q),new C(A.highlightText,new v({color:J})),new C(A.textAfterHighlight,Q),new C(F.text,F.style,F.children,F.hyperlink,()=>{mA(Z,A.href,{forceExternal:!1,onShowImagePreview:X})}),new C(A.textAfter,Q)]);return new p({text:vG0(D,Y),textAlign:"center"})}if("linkText"in A){if(A.linkWidget)return new x0({mainAxisSize:"min",children:[new p({text:new C(rB(A.text,Y),Q),textAlign:"center"}),new a1({child:new r0({mainAxisSize:"min",children:[GA.createWidget(Z,A.href,rB(A.linkText,Y),new v({color:$,underline:!0})),new p({text:new C(rB(A.textAfter,Y),Q)})]})})]});let F=GA.createSpan(A.href,A.linkText,new v({color:$,underline:!0})),X=mD.of(Z),D=new C("",void 0,[new C(A.text,Q),new C(F.text,F.style,F.children,F.hyperlink,()=>{mA(Z,A.href,{forceExternal:!1,onShowImagePreview:X})}),new C(A.textAfter,Q)]);return new p({text:vG0(D,Y),textAlign:"center"})}if(Y>0)return new p({text:new C(rB(A.text,Y),new v({color:$,underline:!0})),textAlign:"center"});return new a1({child:GA.createWidget(Z,A.href,A.text,new v({color:$,underline:!0}))})}function kx5({progress:A,foreground:Q,pulseColor:B}){let $=new v({color:Q,bold:!0}),J=new v({color:vx5({progress:A,foreground:Q,pulseColor:B}),bold:!0});return new C("",void 0,[new C(Sx5(A).padEnd(CA1," "),$),new C(" ",$),new C(ta4(Qo4,Mx5,A,0.72),$),new C(" ",$),new C(ta4(Bo4,Lx5,A,0.88),J)])}function Sx5(A){let Q=L4(Ao4),B=Math.min(CA1,Math.ceil(aY(A/0.62)*CA1));return Q.slice(0,B).join("")}function ta4(A,Q,B,$){return B>=$?A:"".padEnd(Q," ")}function vx5({progress:A,foreground:Q,pulseColor:B}){if(A<0.88||A>=1)return Q;let $=aY((A-0.88)/0.12);return Math.cos($*Math.PI*4)*(1-$)>0.12?B:Q}function yx5({stage:A,featureStageCount:Q,foreground:B,dissolveProgress:$}){return new C(rB(`${A}/${Q}`,$),new v({color:B,dim:!0}))}function xx5({finalStage:A,dismissible:Q,foreground:B,keybind:$,revealProgress:J,dissolveProgress:Y}){let Z=new v({color:$}),F=new v({color:B,dim:!0}),X=Q?A?"Enter":"Space":"Esc",D=Q?A?" to get started":" to continue":" to quit, or use ",G=Q?"":"amp --take-me-back",V=Q?"":" to use the old version",U=`${D}${G}${V}`;if(!Q)return new C("",void 0,[new C(X,Z),new C(D,F),new C(G,Z),new C(V,F)]);let K=ea4(X,J),E=ea4(U,aY((J*(L4(X).length+L4(U).length)-L4(X).length)/L4(U).length));return new C("",void 0,[new C(rB(K,Y),Z),new C(rB(E.slice(0,D.length),Y),F),new C(rB(E.slice(D.length,D.length+G.length),Y),Z),new C(rB(E.slice(D.length+G.length),Y),F)])}function fx5({finalStage:A,dismissible:Q,foreground:B,keybind:$,revealProgress:J,dissolveProgress:Y,context:Z}){if(Q)return new p({text:xx5({finalStage:A,dismissible:Q,foreground:B,keybind:$,revealProgress:J,dissolveProgress:Y}),textAlign:"center"});let F=new v({color:$}),X=new v({color:B,dim:!0});return new e5({onCopy:(D,G)=>{if(G)Q5.success(Z,"Copied to clipboard",2000)},child:new p({text:new C("",void 0,[new C("q",F),new C(" to quit, or use ",X),new C("amp --take-me-back",F),new C(" to use the old version",X)]),textAlign:"center",selectable:!0})})}function ea4(A,Q){let B=L4(A),$=Math.min(B.length,Math.ceil(aY(Q)*B.length));return B.slice(0,$).join("").padEnd(B.length," ")}function vG0(A,Q,B=0){if(Q<=0)return A;let $=B+L4(A.text??"").length,J=A.children?.map((Y)=>{let Z=vG0(Y,Q,$);return $+=L4(Y.toPlainText()).length,Z});return new C(A.text?rB(A.text,Q,B):A.text,A.style,J,A.hyperlink,A.onClick)}function rB(A,Q,B=0){if(Q<=0)return A;return L4(A).map((J,Y)=>{if(J.trim()==="")return J;return Zo4(B+Y)<Q?" ":J}).join("")}function Zo4(A){let Q=Math.sin((A+1)*12.9898)*43758.5453;return Q-Math.floor(Q)}d0();q2();function yN(A,Q){let{colors:B,dim:$}=Q,J=[];if(A.totalCostUSD===null)return J;let Y=A.costBreakdown,Z=Y?.freeUSD??0,F=Y?.paidUSD??0;if(Z===0&&F===0)return J;let D={decimalPlaces:"more-if-tiny",intent:"cost"};if(F===0)J.push(new C(hU(Z,D),new v({color:B.foreground,dim:$}))),J.push(new C(" (free)",new v({color:B.foreground,dim:$})));else if(Z>0)J.push(new C(hU(Z,D),new v({color:B.foreground,dim:$}))),J.push(new C(" (free)",new v({color:B.foreground,dim:$}))),J.push(new C(" + ",new v({color:B.foreground,dim:$}))),J.push(new C(hU(F,D),new v({color:B.foreground,dim:$,bold:!$})));else J.push(new C(hU(F,D),new v({color:B.foreground,dim:$,bold:!$})));return J}class LA1 extends l4{}class OA1 extends l4{}function bx5(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 ux5(A,Q){let B=P0.of(Q),{colors:$}=B,J=yN(A,{colors:{foreground:$.foreground}}),Y=[];if(J.length>0)Y.push(new C("Total: ",new v({color:$.mutedForeground}))),Y.push(...J);else if(A.totalCostUSD===null)Y.push(new C("Usage information is currently unavailable."));else Y.push(new C("No usage recorded for this thread yet."));if(A.costBreakdownURL)Y.push(new C(`
|
|
5796
5796
|
|
|
5797
5797
|
`)),Y.push(new C("Details: ",new v({color:$.mutedForeground}))),Y.push(new C(A.costBreakdownURL,new v({color:B.app.link})));return new p({text:new C("",void 0,Y)})}function hx5(A,Q,B){let $=ux5(A,Q);if(!A.costBreakdownURL)return new TA({header:"Thread Cost",minWidth:80,maxWidth:100,onDismiss:B,child:$});let J=A.costBreakdownURL,Y=new X4(()=>{return t4.maybeInvoke(Q,new r7(J,"Cost breakdown URL copied to clipboard","Failed to copy cost breakdown URL")),"handled"}),Z=new X4(()=>{return mA(Q,J),"handled"});return new TA({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 t4({actions:new Map([[LA1,Y],[OA1,Z]]),child:new h5({debugLabel:"ThreadCostShortcuts",shortcuts:new Map([[_1.key("o"),new OA1],[_1.key("y"),new LA1]]),child:new m4({autofocus:!0,debugLabel:"ThreadCostBody",child:$})})})})}function Fo4(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 YA.threadDisplayCostInfo({threadID:J},{config:A.configService});if(!Y.ok){A.toastController.show(bx5(J,Y.error),"error",5000),$();return}Q.push(hx5(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 gx5=250,mx5=2000;function px5({ampURL:A,threadID:Q,logPath:B}){return[`Debug thread ${NB(new URL(A),Q).toString()} (cli log: ${B}). Start with the CLI log, actor logs, and Rivet DB/inspector as sources of truth. Read thread-actors/docs/debugging-actors.md and thread-actors/scripts/README.md. For dev, actor logs are in .amp/in/thread-actors.json.log; for staging/prod, logs are in gcloud.`,"","Problem: "].join(`
|
|
5798
|
-
`)}class jA1 extends S0{analyzeContextForThread;listSkillsForThread;clientPool;completionBuilder;history;ideManager;configService;initialThreadID;showNeoWelcome;neoWelcomeVariant;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.neoWelcomeVariant=A.neoWelcomeVariant??"intro",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 Do4}}class Do4 extends T0{editorController=new N8;commandPalette=new co(this);commandRegistry=new u11;toastController=new Ke0;exitHintTimer=new fx(this,1000);ideStatus=new x8(this,{});threadNavigationHistory=new S11;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;titleSubscription=null;agentStateSubscription=null;currentTitleText=void 0;currentAgentBusy=!1;currentTerminalTitle=void 0;terminalTitleSpinner=new z6;terminalTitleSpinnerTimer=null;connectionErrorsSubscription=null;configSubscription=null;connectingToThreadID=null;switchThreadPickerVisible=!1;neoWelcomeVisible=!1;debugOverlayVisible=!1;focusDebugVisible=!1;unregisterCommands=null;pluginIntegration=null;configReloadSubscription=null;configReloadToastTimer=null;pendingConfigReloadToastType=null;lastConfigReloadToast=null;loadThreads=async()=>{return this.widget.neoContext.listThreads()};onSwitchThread=(A)=>{this.connectToExistingThread(A,{recordNavigation:!0})};sendFeedbackReport=async(A)=>Vl4({configService:this.widget.configService,settingsFilePath:this.widget.neoContext.settingsFilePath},A);setThreadVisibility=(A,Q)=>{return Ul4({ampURL:this.widget.neoContext.ampURL,configService:this.widget.configService},A,Q)};archiveThread=async(A)=>{let Q=await Yp4({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let B=await Zp4({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 Fp4({configService:this.widget.configService},A,Q);if(B instanceof Error)return B;return this.toastController.show(B.message,B.type,2000),null};initState(){if(dB.getInstance().interceptConsole(),this.widget.showNeoWelcome)this.neoWelcomeVisible=!0;if(this.connectionErrorsSubscription=this.widget.clientPool.connectionErrors$.subscribe(({threadID:Q,error:B})=>{if(j.error("Neo failed to connect to thread",{threadID:Q,error:B}),!Q)this.toastController.show(`Connection failed: ${B.message}`,"error",4000)}),this.configReloadSubscription=this.widget.configService.configReloadEvents.subscribe((Q)=>this.scheduleConfigReloadToast(Q)),this.configSubscription=this.widget.configService.config.subscribe((Q)=>{this.applyDraftThreadSettingsSeed(this.applySessionDefaultsToThreadSettings(z30(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 T11({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=C4.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()},gx5),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<mx5)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?Fl4({pluginService:this.widget.neoContext.pluginService,workspaceRoot:this.widget.neoContext.workspaceRoot,logFilePath:this.widget.neoContext.logFilePath,toastController:this.toastController}):[],$=[{noun:"thread",verb:"switch",description:"Switch to existing thread",keywords:["recent","history","open","resume","change"],status:{type:"enabled"},sortBoost:100,run:(J,Y,Z)=>{J.pushWithDismiss((F)=>w41({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:F,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()}},Fo4({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 a11({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 HA1({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 mA(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:()=>{VJ(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((F)=>new i11({onCancel:F,onSelect:(X)=>{this.handleIdeSelection(X),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 d11({commands:nY.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 TA({header:"Amp Version",maxWidth:72,onDismiss:Z,child:new p({text:new C(Ze0({version:"0.0.1778228828-g14902a",buildTimestamp:"2026-05-08T08:31:11.735Z",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:_1.ctrl("c"),status:{type:"enabled"},run:(J,Y)=>{t4.maybeInvoke(Y,new Vf)}},...Q,...oc4(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 WA1({initialAgentMode:this.widget.neoContext.sessionAgentMode,analyzeContextForThread:this.widget.analyzeContextForThread,listSkillsForThread:this.widget.listSkillsForThread,threadContext:this.activeThreadContext,draftThreadSettings:this.draftThreadSettings,editorController:this.editorController,history:this.widget.history,updateDraftThreadSettings:this.updateDraftThreadSettings,onNewThread:this.onNewThread,sendFeedbackReport:this.sendFeedbackReport,setThreadVisibility:this.setThreadVisibility,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:B}),J=s1.of(A),Z=[new g0({constraints:w1.tight(J.size.width,J.size.height),child:$})];if(this.commandPalette.isEnabled())Z.push(new i4({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new h11({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.neoWelcomeVisible)Z.push(w41({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:this.closeSwitchThreadPicker,onThreadSelected:this.closeSwitchThreadPicker}));if(this.neoWelcomeVisible)Z.push(new i4({debugLabel:"NeoWelcomeDialogOverlay",child:new MA1({onDismiss:this.dismissNeoWelcome,onQuit:()=>C4.instance.stop(),variant:this.widget.neoWelcomeVariant})}));if(Z.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.neoContext.isInternalUser)Z.push(new c11({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:Ws.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)Z.push(new l11);return new j3({neoContext:this.widget.neoContext,child:new nY({commandRegistry:this.commandRegistry,child:new LN({completionBuilder:this.widget.completionBuilder,child:new Q5({controller:this.toastController,child:new t4({actions:this.buildActions(),child:new h5({debugLabel:"NeoAppShortcuts",shortcuts:new Map([[_1.ctrl("c"),new iD0],[_1.ctrl("o"),new nD0],[_1.alt("i"),new oD0],[_1.alt("p"),new XN],[_1.ctrl("t"),new rD0]]),child:new m4({debugLabel:"AppShellFocus",child:new Ee0({controller:this.toastController,child:new e4({children:Z})})})})})})})})})}buildActions(){let A=new X4(()=>{if(GJ.hasAnyCopyableSelection())return GJ.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new X4(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),B=new X4(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),$=new X4(()=>{return this.startNewDraftThread(),"handled"}),J=new X4(()=>{return C4.instance.stop(),"handled"}),Y=new X4((U)=>{if(!U.text)return"ignored";return C4.instance.tuiInstance.clipboard.writeText(U.text).then(()=>{this.toastController.show(U.successMessage,"success",2000)}).catch((K)=>{j.error("Failed to copy Neo text to clipboard",{error:K}),this.toastController.show(U.failureMessage,"error",2000)}),"handled"}),Z=new X4(()=>{return C4.instance.toggleFrameStatsOverlay(),"handled"}),F=new X4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),X=new X4(()=>{let U=this.activeThreadContext?.client.getThreadId();if(!U)return this.toastController.show("No active thread","error",2000),"handled";let K=ry(U);return C4.instance.tuiInstance.clipboard.writeText(K).then(()=>{this.toastController.show("Copied log path to clipboard","success",2000)}).catch((E)=>{j.error("Failed to copy thread log path",{error:E,threadID:U,logPath:K}),this.toastController.show("Failed to copy log path","error",2000)}),"handled"}),D=new X4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";let U=this.activeThreadContext?.client.getThreadId();if(!U)return"handled";return this.prepareThreadIssueInvestigation(U),"handled"}),G=new X4(()=>{let U=this.activeThreadContext?.client.getThreadId();if(!U)return this.toastController.show("No active thread","error",2000),"handled";return this.toastController.show("Sending report...","success",2000),this.sendFeedbackReport(U).then(async(K)=>{try{await C4.instance.tuiInstance.clipboard.writeText(K),this.toastController.show("Sent report and copied report ID","success",3000)}catch(E){j.warn("Failed to copy report ID to clipboard",{error:E,reportID:K}),this.toastController.show(`Sent report ${K}`,"success",3000)}}).catch((K)=>{j.error("Failed to send report from debug overlay",{error:K,threadID:U}),this.toastController.show("Failed to send report","error",3000)}),"handled"}),V=new X4(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[iD0,A],[ur,$],[Vf,J],[r7,Y],[mr,B],[nD0,Q],[oD0,F],[pr,X],[dr,D],[cr,G],[XN,Z],[rD0,V]])}startNewDraftThread(A={}){let Q=this.activeThreadContext?.client.getThreadId();if(this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(Q),this.setState(()=>{if(this.titleSubscription?.unsubscribe(),this.titleSubscription=null,this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=null,this.currentAgentBusy=!1,this.syncTerminalTitleSpinner(),this.clearTerminalTitle(),this.activeThreadContext=null,this.connectingToThreadID=null,A.hideDebugOverlay)this.debugOverlayVisible=!1}),A.prompt!==void 0)this.editorController.text=A.prompt}prepareThreadIssueInvestigation(A){try{this.startNewDraftThread({prompt:px5({ampURL:this.widget.neoContext.ampURL,threadID:A,logPath:ry(A)}),hideDebugOverlay:!0})}catch(Q){j.error("Failed to prepare thread issue investigation",{error:Q,threadID:A})}}closeCommandPaletteOnFocusLoss=(A)=>{if(A||!this.commandPalette.isEnabled())return;this.commandPalette.disable()};ensureDraftThreadSettingsInitialized(){if(this.hasDraftThreadSettingsSeed)return Promise.resolve();if(!this.draftThreadSettingsInitPromise)this.draftThreadSettingsInitPromise=this.initDraftThreadSettings();return this.draftThreadSettingsInitPromise}async initDraftThreadSettings(){try{let A=this.applySessionDefaultsToThreadSettings(await jx(this.widget.configService));this.applyDraftThreadSettingsSeed(A)}catch(A){j.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applySessionDefaultsToThreadSettings(A){let Q=this.widget.neoContext.sessionAgentMode,B=A,$=cB(Q),J=HX0(this.widget.neoContext,Q);if($!==void 0&&J!==void 0)B={...B,[$]:J};return WX0(B,{agentMode:Q,explicitEffort:this.widget.neoContext.explicitReasoningEffort,sessionState:this.widget.neoContext})}applyDraftThreadSettingsSeed(A){if(!this.mounted)return;if(!this.hasDraftThreadSettingsSeed){this.setState(()=>{this.hasDraftThreadSettingsSeed=!0,this.draftThreadSettings=Xo4(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if(vZ(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=Xo4(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(MN);if(this.exitHintTimer.isActive())A.add(Yf);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),C4.instance.stop();else this.exitHintTimer.activate()};dismissNeoWelcome=()=>{if(!this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!1}),this.widget.onNeoWelcomeDismissed?.()};showNeoWelcome=()=>{if(this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!0})};closeSwitchThreadPicker=()=>{if(!this.switchThreadPickerVisible)return;this.setState(()=>{this.switchThreadPickerVisible=!1})};updateDraftThreadSettings=(A)=>{this.setState(()=>{this.draftThreadSettings=A(this.draftThreadSettings)})};onNewThread=async(A,Q,B=null,$)=>{await this.ensureDraftThreadSettingsInitialized();let J=this.activeThreadContext?.client.getThreadId(),Y=A.find((F)=>F.type==="text");if(Y&&Y.type==="text")this.widget.history.add(Y.text,Ws.cwd()),this.widget.history.reset();let Z=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,B?dY(B):void 0);this.sendUserMessage(Z,A,Q,$),this.rememberSessionDefaultsForNewMessage(Q,this.draftThreadSettings),this.threadNavigationHistory.recordNavigation(J),this.setActiveClient(Z)};rememberSessionDefaultsForNewMessage(A,Q){this.widget.neoContext.sessionAgentMode=A;let B=Q["reasoning.effort"];if(B!==void 0)this.widget.neoContext.lastReasoningEffortByMode={...this.widget.neoContext.lastReasoningEffortByMode??{},[A]:B};let $=cB(A),J=$?Q[$]:void 0;if(J!==void 0)this.widget.neoContext.lastSpeedByMode={...this.widget.neoContext.lastSpeedByMode??{},[A]:J};DJ((Y)=>{let Z={...Y,agentMode:A};if(B!==void 0)Z={...Z,lastReasoningEffortByMode:{...Z.lastReasoningEffortByMode??{},[A]:B}};if(J!==void 0)Z={...Z,lastSpeedByMode:{...Z.lastSpeedByMode??{},[A]:J}};return Z}).catch((Y)=>{j.warn("Failed to persist Neo session defaults for new message",{error:Y instanceof Error?Y.message:String(Y)})})}sendUserMessage(A,Q,B,$){let J=ZY0(this.ideStatus.getValue());if($===void 0){A.client.sendUserMessage(Q,B,{userState:J});return}A.client.sendUserMessage(Q,B,{reasoningEffort:$,userState:J})}getActiveThreadID=()=>{return this.activeThreadContext?.client.getThreadId()??void 0};appendPluginMessagesToThread=async(A,Q)=>{let B=this.activeThreadContext;if(!B)throw Error("appendToThread is not available - no active thread");let $=B.client.getThreadId();if(Q&&$!==Q)throw Error("thread.append is only available for the active executor thread");for(let J of A)this.sendUserMessage(B,[{type:"text",text:J.content}])};async connectToExistingThread(A,Q={}){let B=this.activeThreadContext?.client.getThreadId();this.setState(()=>{this.connectingToThreadID=A});try{let $=await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.neoContext.observerOnly});if(this.setActiveClient($),Q.recordNavigation&&B!==A)this.threadNavigationHistory.recordNavigation(B);if(Q.initialUserInput)this.sendUserMessage($,[{type:"text",text:Q.initialUserInput}])}catch($){if(j.error("Failed to load thread",{error:$,threadID:A}),this.toastController.show(`Failed to load ${A}: ${$ instanceof Error?$.message:String($)}`,"error",4000),Q.rethrowError)throw $}finally{this.setState(()=>{this.connectingToThreadID=null})}}async navigateBack(){let A=this.threadNavigationHistory.startBackNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateForward(){let A=this.threadNavigationHistory.startForwardNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateToThread(A){try{await this.connectToExistingThread(A.targetThreadID,{rethrowError:!0})}catch{A.rollback()}}async reconnectActiveThread(){let A=this.activeThreadContext;if(!A){this.toastController.show("No active thread to reconnect","error",2000);return}let Q=A.client.getThreadId(),B=this.toastController.show(Q?`Reconnecting ${Q}...`:"Reconnecting thread...","warning",60000);try{await A.client.reconnect(),this.toastController.update(B,Q?`Reconnected ${Q}`:"Reconnected thread","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{await A.client.disconnectAndWait(),this.toastController.update(B,Q?`Disconnected ${Q}`:"Disconnected thread","success",2000)}catch($){j.error("Failed to disconnect thread",{error:$,threadID:Q});let J=$ instanceof Error?$.message:String($);this.toastController.update(B,`Disconnect failed: ${J}`,"error",4000)}}setActiveClient({client:A,observer:Q}){this.setState(()=>{this.activeThreadContext={client:A,observer:Q},this.subscribeTitleUpdates(Q),this.subscribeNotifications(Q)})}subscribeTitleUpdates(A){this.titleSubscription?.unsubscribe(),this.titleSubscription=A.title().subscribe({next:(Q)=>{this.currentTitleText=Q,this.updateTerminalTitle()}}),this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=A.agentState().subscribe({next:(Q)=>{let B=Q!=="idle"&&Q!=="error";if(B===this.currentAgentBusy)return;this.currentAgentBusy=B,this.syncTerminalTitleSpinner(),this.updateTerminalTitle()}})}subscribeNotifications(A){this.widget.notificationService.attach(A.agentState())}clearTerminalTitle(){this.currentTitleText=void 0,this.updateTerminalTitle()}updateTerminalTitle(){let A=Ws.cwd().replace(Ws.env.HOME||"","~"),Q=this.currentAgentBusy?`${this.terminalTitleSpinner.toBraille()} `:"",B=this.currentTitleText?`${Q}amp - ${this.currentTitleText} - ${A}`:this.currentAgentBusy?`${Q}amp - ${A}`:"";if(B===this.currentTerminalTitle)return;this.currentTerminalTitle=B,Ws.stdout.write(eI(B))}syncTerminalTitleSpinner(){if(this.currentAgentBusy){if(this.terminalTitleSpinnerTimer)return;this.terminalTitleSpinnerTimer=setInterval(()=>{this.terminalTitleSpinner.step(),this.updateTerminalTitle()},200);return}if(this.terminalTitleSpinnerTimer)clearInterval(this.terminalTitleSpinnerTimer),this.terminalTitleSpinnerTimer=null}handleIdeSelection=async(A)=>{try{await this.widget.ideManager.connect(A)}catch(Q){j.error("Failed to connect to IDE",{error:Q});let B=Q instanceof Error?Q.message:String(Q);this.toastController.show(`IDE connection failed: ${B}`,"error",4000)}};dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.pluginIntegration?.dispose(),this.pluginIntegration=null,this.titleSubscription?.unsubscribe(),this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=null,this.terminalTitleSpinnerTimer)clearInterval(this.terminalTitleSpinnerTimer),this.terminalTitleSpinnerTimer=null;if(this.connectionErrorsSubscription?.unsubscribe(),this.configSubscription?.unsubscribe(),this.configSubscription=null,this.configReloadSubscription?.unsubscribe(),this.configReloadSubscription=null,this.configReloadToastTimer)clearTimeout(this.configReloadToastTimer),this.configReloadToastTimer=null;this.pendingConfigReloadToastType=null,this.widget.notificationService.detach(),this.toastController.dispose(),super.dispose()}hasBlockingTopLevelModal(){return this.switchThreadPickerVisible||this.neoWelcomeVisible||(this.pluginIntegration?.hasBlockingDialog()??!1)}}function Xo4(A,Q,B){let $={...A};for(let J of dx5(Q,B)){if(!vZ(A[J],Q[J]))continue;let Y=B[J];if(Y===void 0)delete $[J];else $[J]=Y}return $}function dx5(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}c4();function Go4(A,Q,B,$){let J=bT(A),Y="\x1B[0m",Z="\x1B[34m",F="\x1B[90m",X="\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 uY(G,V),K=new M9(42),E=new BN(G,V,G,V,G,V,0,A.agentMode??"smart","intensity","classic","braille",void 0,void 0,E0.default(),K);E.layout(w1.tight(G,V)),E.paint(U,0,0);let z=U.getBuffer().getCells(),W=0;for(let P=0;P<V;P++)if(z[P].some((T)=>T.char!==" ")){W=P;break}let H=V-1;for(let P=V-1;P>=0;P--)if(z[P].some((T)=>T.char!==" ")){H=P;break}function q(P,T){if(!P)return"";if(P.type==="rgb"){let{r:k,g:x,b:h}=P.value;if(B.getColorDepth()>=24)return`\x1B[${T?38:48};2;${k};${x};${h}m`;let u=zj(k,x,h);return`\x1B[${T?38:48};5;${u}m`}return""}let I=[];if(H>=W)for(let P=W;P<=H;P++){let T="";for(let k=0;k<G;k++){let x=z[P][k],h=x.char,u=q(x.style.fg,!0);T+=u+h+"\x1B[0m"}I.push(T)}let N=I.length,w=Math.max(N,D.length),L=Math.floor((w-N)/2),O=Math.floor((w-D.length)/2);for(let P=0;P<w;P++){let T=" ".repeat(G);if(P>=L&&P<L+N)T=I[P-L];let k=" ",x="";if(P>=O&&P<O+D.length)x=D[P-O];B.write(T+k+x+`
|
|
5798
|
+
`)}class jA1 extends S0{analyzeContextForThread;listSkillsForThread;clientPool;completionBuilder;history;ideManager;configService;initialThreadID;showNeoWelcome;neoWelcomeVariant;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.neoWelcomeVariant=A.neoWelcomeVariant??"intro",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 Do4}}class Do4 extends T0{editorController=new N8;commandPalette=new co(this);commandRegistry=new u11;toastController=new Ke0;exitHintTimer=new fx(this,1000);ideStatus=new x8(this,{});threadNavigationHistory=new S11;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;titleSubscription=null;agentStateSubscription=null;currentTitleText=void 0;currentAgentBusy=!1;currentTerminalTitle=void 0;terminalTitleSpinner=new z6;terminalTitleSpinnerTimer=null;connectionErrorsSubscription=null;configSubscription=null;connectingToThreadID=null;switchThreadPickerVisible=!1;neoWelcomeVisible=!1;debugOverlayVisible=!1;focusDebugVisible=!1;unregisterCommands=null;pluginIntegration=null;configReloadSubscription=null;configReloadToastTimer=null;pendingConfigReloadToastType=null;lastConfigReloadToast=null;loadThreads=async()=>{return this.widget.neoContext.listThreads()};onSwitchThread=(A)=>{this.connectToExistingThread(A,{recordNavigation:!0})};sendFeedbackReport=async(A)=>Vl4({configService:this.widget.configService,settingsFilePath:this.widget.neoContext.settingsFilePath},A);setThreadVisibility=(A,Q)=>{return Ul4({ampURL:this.widget.neoContext.ampURL,configService:this.widget.configService},A,Q)};archiveThread=async(A)=>{let Q=await Yp4({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let B=await Zp4({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 Fp4({configService:this.widget.configService},A,Q);if(B instanceof Error)return B;return this.toastController.show(B.message,B.type,2000),null};initState(){if(dB.getInstance().interceptConsole(),this.widget.showNeoWelcome)this.neoWelcomeVisible=!0;if(this.connectionErrorsSubscription=this.widget.clientPool.connectionErrors$.subscribe(({threadID:Q,error:B})=>{if(j.error("Neo failed to connect to thread",{threadID:Q,error:B}),!Q)this.toastController.show(`Connection failed: ${B.message}`,"error",4000)}),this.configReloadSubscription=this.widget.configService.configReloadEvents.subscribe((Q)=>this.scheduleConfigReloadToast(Q)),this.configSubscription=this.widget.configService.config.subscribe((Q)=>{this.applyDraftThreadSettingsSeed(this.applySessionDefaultsToThreadSettings(z30(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 T11({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=C4.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()},gx5),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<mx5)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?Fl4({pluginService:this.widget.neoContext.pluginService,workspaceRoot:this.widget.neoContext.workspaceRoot,logFilePath:this.widget.neoContext.logFilePath,toastController:this.toastController}):[],$=[{noun:"thread",verb:"switch",description:"Switch to existing thread",keywords:["recent","history","open","resume","change"],status:{type:"enabled"},sortBoost:100,run:(J,Y,Z)=>{J.pushWithDismiss((F)=>w41({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:F,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()}},Fo4({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 a11({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 HA1({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 mA(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:()=>{VJ(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((F)=>new i11({onCancel:F,onSelect:(X)=>{this.handleIdeSelection(X),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 d11({commands:nY.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 TA({header:"Amp Version",maxWidth:72,onDismiss:Z,child:new p({text:new C(Ze0({version:"0.0.1778235017-g38b248",buildTimestamp:"2026-05-08T10:14:11.559Z",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:_1.ctrl("c"),status:{type:"enabled"},run:(J,Y)=>{t4.maybeInvoke(Y,new Vf)}},...Q,...oc4(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 WA1({initialAgentMode:this.widget.neoContext.sessionAgentMode,analyzeContextForThread:this.widget.analyzeContextForThread,listSkillsForThread:this.widget.listSkillsForThread,threadContext:this.activeThreadContext,draftThreadSettings:this.draftThreadSettings,editorController:this.editorController,history:this.widget.history,updateDraftThreadSettings:this.updateDraftThreadSettings,onNewThread:this.onNewThread,sendFeedbackReport:this.sendFeedbackReport,setThreadVisibility:this.setThreadVisibility,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:B}),J=s1.of(A),Z=[new g0({constraints:w1.tight(J.size.width,J.size.height),child:$})];if(this.commandPalette.isEnabled())Z.push(new i4({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new h11({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.neoWelcomeVisible)Z.push(w41({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:this.closeSwitchThreadPicker,onThreadSelected:this.closeSwitchThreadPicker}));if(this.neoWelcomeVisible)Z.push(new i4({debugLabel:"NeoWelcomeDialogOverlay",child:new MA1({onDismiss:this.dismissNeoWelcome,onQuit:()=>C4.instance.stop(),variant:this.widget.neoWelcomeVariant})}));if(Z.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.neoContext.isInternalUser)Z.push(new c11({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:Ws.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)Z.push(new l11);return new j3({neoContext:this.widget.neoContext,child:new nY({commandRegistry:this.commandRegistry,child:new LN({completionBuilder:this.widget.completionBuilder,child:new Q5({controller:this.toastController,child:new t4({actions:this.buildActions(),child:new h5({debugLabel:"NeoAppShortcuts",shortcuts:new Map([[_1.ctrl("c"),new iD0],[_1.ctrl("o"),new nD0],[_1.alt("i"),new oD0],[_1.alt("p"),new XN],[_1.ctrl("t"),new rD0]]),child:new m4({debugLabel:"AppShellFocus",child:new Ee0({controller:this.toastController,child:new e4({children:Z})})})})})})})})})}buildActions(){let A=new X4(()=>{if(GJ.hasAnyCopyableSelection())return GJ.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new X4(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),B=new X4(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),$=new X4(()=>{return this.startNewDraftThread(),"handled"}),J=new X4(()=>{return C4.instance.stop(),"handled"}),Y=new X4((U)=>{if(!U.text)return"ignored";return C4.instance.tuiInstance.clipboard.writeText(U.text).then(()=>{this.toastController.show(U.successMessage,"success",2000)}).catch((K)=>{j.error("Failed to copy Neo text to clipboard",{error:K}),this.toastController.show(U.failureMessage,"error",2000)}),"handled"}),Z=new X4(()=>{return C4.instance.toggleFrameStatsOverlay(),"handled"}),F=new X4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),X=new X4(()=>{let U=this.activeThreadContext?.client.getThreadId();if(!U)return this.toastController.show("No active thread","error",2000),"handled";let K=ry(U);return C4.instance.tuiInstance.clipboard.writeText(K).then(()=>{this.toastController.show("Copied log path to clipboard","success",2000)}).catch((E)=>{j.error("Failed to copy thread log path",{error:E,threadID:U,logPath:K}),this.toastController.show("Failed to copy log path","error",2000)}),"handled"}),D=new X4(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";let U=this.activeThreadContext?.client.getThreadId();if(!U)return"handled";return this.prepareThreadIssueInvestigation(U),"handled"}),G=new X4(()=>{let U=this.activeThreadContext?.client.getThreadId();if(!U)return this.toastController.show("No active thread","error",2000),"handled";return this.toastController.show("Sending report...","success",2000),this.sendFeedbackReport(U).then(async(K)=>{try{await C4.instance.tuiInstance.clipboard.writeText(K),this.toastController.show("Sent report and copied report ID","success",3000)}catch(E){j.warn("Failed to copy report ID to clipboard",{error:E,reportID:K}),this.toastController.show(`Sent report ${K}`,"success",3000)}}).catch((K)=>{j.error("Failed to send report from debug overlay",{error:K,threadID:U}),this.toastController.show("Failed to send report","error",3000)}),"handled"}),V=new X4(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[iD0,A],[ur,$],[Vf,J],[r7,Y],[mr,B],[nD0,Q],[oD0,F],[pr,X],[dr,D],[cr,G],[XN,Z],[rD0,V]])}startNewDraftThread(A={}){let Q=this.activeThreadContext?.client.getThreadId();if(this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(Q),this.setState(()=>{if(this.titleSubscription?.unsubscribe(),this.titleSubscription=null,this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=null,this.currentAgentBusy=!1,this.syncTerminalTitleSpinner(),this.clearTerminalTitle(),this.activeThreadContext=null,this.connectingToThreadID=null,A.hideDebugOverlay)this.debugOverlayVisible=!1}),A.prompt!==void 0)this.editorController.text=A.prompt}prepareThreadIssueInvestigation(A){try{this.startNewDraftThread({prompt:px5({ampURL:this.widget.neoContext.ampURL,threadID:A,logPath:ry(A)}),hideDebugOverlay:!0})}catch(Q){j.error("Failed to prepare thread issue investigation",{error:Q,threadID:A})}}closeCommandPaletteOnFocusLoss=(A)=>{if(A||!this.commandPalette.isEnabled())return;this.commandPalette.disable()};ensureDraftThreadSettingsInitialized(){if(this.hasDraftThreadSettingsSeed)return Promise.resolve();if(!this.draftThreadSettingsInitPromise)this.draftThreadSettingsInitPromise=this.initDraftThreadSettings();return this.draftThreadSettingsInitPromise}async initDraftThreadSettings(){try{let A=this.applySessionDefaultsToThreadSettings(await jx(this.widget.configService));this.applyDraftThreadSettingsSeed(A)}catch(A){j.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applySessionDefaultsToThreadSettings(A){let Q=this.widget.neoContext.sessionAgentMode,B=A,$=cB(Q),J=HX0(this.widget.neoContext,Q);if($!==void 0&&J!==void 0)B={...B,[$]:J};return WX0(B,{agentMode:Q,explicitEffort:this.widget.neoContext.explicitReasoningEffort,sessionState:this.widget.neoContext})}applyDraftThreadSettingsSeed(A){if(!this.mounted)return;if(!this.hasDraftThreadSettingsSeed){this.setState(()=>{this.hasDraftThreadSettingsSeed=!0,this.draftThreadSettings=Xo4(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if(vZ(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=Xo4(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(MN);if(this.exitHintTimer.isActive())A.add(Yf);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),C4.instance.stop();else this.exitHintTimer.activate()};dismissNeoWelcome=()=>{if(!this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!1}),this.widget.onNeoWelcomeDismissed?.()};showNeoWelcome=()=>{if(this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!0})};closeSwitchThreadPicker=()=>{if(!this.switchThreadPickerVisible)return;this.setState(()=>{this.switchThreadPickerVisible=!1})};updateDraftThreadSettings=(A)=>{this.setState(()=>{this.draftThreadSettings=A(this.draftThreadSettings)})};onNewThread=async(A,Q,B=null,$)=>{await this.ensureDraftThreadSettingsInitialized();let J=this.activeThreadContext?.client.getThreadId(),Y=A.find((F)=>F.type==="text");if(Y&&Y.type==="text")this.widget.history.add(Y.text,Ws.cwd()),this.widget.history.reset();let Z=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,B?dY(B):void 0);this.sendUserMessage(Z,A,Q,$),this.rememberSessionDefaultsForNewMessage(Q,this.draftThreadSettings),this.threadNavigationHistory.recordNavigation(J),this.setActiveClient(Z)};rememberSessionDefaultsForNewMessage(A,Q){this.widget.neoContext.sessionAgentMode=A;let B=Q["reasoning.effort"];if(B!==void 0)this.widget.neoContext.lastReasoningEffortByMode={...this.widget.neoContext.lastReasoningEffortByMode??{},[A]:B};let $=cB(A),J=$?Q[$]:void 0;if(J!==void 0)this.widget.neoContext.lastSpeedByMode={...this.widget.neoContext.lastSpeedByMode??{},[A]:J};DJ((Y)=>{let Z={...Y,agentMode:A};if(B!==void 0)Z={...Z,lastReasoningEffortByMode:{...Z.lastReasoningEffortByMode??{},[A]:B}};if(J!==void 0)Z={...Z,lastSpeedByMode:{...Z.lastSpeedByMode??{},[A]:J}};return Z}).catch((Y)=>{j.warn("Failed to persist Neo session defaults for new message",{error:Y instanceof Error?Y.message:String(Y)})})}sendUserMessage(A,Q,B,$){let J=ZY0(this.ideStatus.getValue());if($===void 0){A.client.sendUserMessage(Q,B,{userState:J});return}A.client.sendUserMessage(Q,B,{reasoningEffort:$,userState:J})}getActiveThreadID=()=>{return this.activeThreadContext?.client.getThreadId()??void 0};appendPluginMessagesToThread=async(A,Q)=>{let B=this.activeThreadContext;if(!B)throw Error("appendToThread is not available - no active thread");let $=B.client.getThreadId();if(Q&&$!==Q)throw Error("thread.append is only available for the active executor thread");for(let J of A)this.sendUserMessage(B,[{type:"text",text:J.content}])};async connectToExistingThread(A,Q={}){let B=this.activeThreadContext?.client.getThreadId();this.setState(()=>{this.connectingToThreadID=A});try{let $=await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.neoContext.observerOnly});if(this.setActiveClient($),Q.recordNavigation&&B!==A)this.threadNavigationHistory.recordNavigation(B);if(Q.initialUserInput)this.sendUserMessage($,[{type:"text",text:Q.initialUserInput}])}catch($){if(j.error("Failed to load thread",{error:$,threadID:A}),this.toastController.show(`Failed to load ${A}: ${$ instanceof Error?$.message:String($)}`,"error",4000),Q.rethrowError)throw $}finally{this.setState(()=>{this.connectingToThreadID=null})}}async navigateBack(){let A=this.threadNavigationHistory.startBackNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateForward(){let A=this.threadNavigationHistory.startForwardNavigation(this.activeThreadContext?.client.getThreadId());if(!A)return;await this.navigateToThread(A)}async navigateToThread(A){try{await this.connectToExistingThread(A.targetThreadID,{rethrowError:!0})}catch{A.rollback()}}async reconnectActiveThread(){let A=this.activeThreadContext;if(!A){this.toastController.show("No active thread to reconnect","error",2000);return}let Q=A.client.getThreadId(),B=this.toastController.show(Q?`Reconnecting ${Q}...`:"Reconnecting thread...","warning",60000);try{await A.client.reconnect(),this.toastController.update(B,Q?`Reconnected ${Q}`:"Reconnected thread","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{await A.client.disconnectAndWait(),this.toastController.update(B,Q?`Disconnected ${Q}`:"Disconnected thread","success",2000)}catch($){j.error("Failed to disconnect thread",{error:$,threadID:Q});let J=$ instanceof Error?$.message:String($);this.toastController.update(B,`Disconnect failed: ${J}`,"error",4000)}}setActiveClient({client:A,observer:Q}){this.setState(()=>{this.activeThreadContext={client:A,observer:Q},this.subscribeTitleUpdates(Q),this.subscribeNotifications(Q)})}subscribeTitleUpdates(A){this.titleSubscription?.unsubscribe(),this.titleSubscription=A.title().subscribe({next:(Q)=>{this.currentTitleText=Q,this.updateTerminalTitle()}}),this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=A.agentState().subscribe({next:(Q)=>{let B=Q!=="idle"&&Q!=="error";if(B===this.currentAgentBusy)return;this.currentAgentBusy=B,this.syncTerminalTitleSpinner(),this.updateTerminalTitle()}})}subscribeNotifications(A){this.widget.notificationService.attach(A.agentState())}clearTerminalTitle(){this.currentTitleText=void 0,this.updateTerminalTitle()}updateTerminalTitle(){let A=Ws.cwd().replace(Ws.env.HOME||"","~"),Q=this.currentAgentBusy?`${this.terminalTitleSpinner.toBraille()} `:"",B=this.currentTitleText?`${Q}amp - ${this.currentTitleText} - ${A}`:this.currentAgentBusy?`${Q}amp - ${A}`:"";if(B===this.currentTerminalTitle)return;this.currentTerminalTitle=B,Ws.stdout.write(eI(B))}syncTerminalTitleSpinner(){if(this.currentAgentBusy){if(this.terminalTitleSpinnerTimer)return;this.terminalTitleSpinnerTimer=setInterval(()=>{this.terminalTitleSpinner.step(),this.updateTerminalTitle()},200);return}if(this.terminalTitleSpinnerTimer)clearInterval(this.terminalTitleSpinnerTimer),this.terminalTitleSpinnerTimer=null}handleIdeSelection=async(A)=>{try{await this.widget.ideManager.connect(A)}catch(Q){j.error("Failed to connect to IDE",{error:Q});let B=Q instanceof Error?Q.message:String(Q);this.toastController.show(`IDE connection failed: ${B}`,"error",4000)}};dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.pluginIntegration?.dispose(),this.pluginIntegration=null,this.titleSubscription?.unsubscribe(),this.agentStateSubscription?.unsubscribe(),this.agentStateSubscription=null,this.terminalTitleSpinnerTimer)clearInterval(this.terminalTitleSpinnerTimer),this.terminalTitleSpinnerTimer=null;if(this.connectionErrorsSubscription?.unsubscribe(),this.configSubscription?.unsubscribe(),this.configSubscription=null,this.configReloadSubscription?.unsubscribe(),this.configReloadSubscription=null,this.configReloadToastTimer)clearTimeout(this.configReloadToastTimer),this.configReloadToastTimer=null;this.pendingConfigReloadToastType=null,this.widget.notificationService.detach(),this.toastController.dispose(),super.dispose()}hasBlockingTopLevelModal(){return this.switchThreadPickerVisible||this.neoWelcomeVisible||(this.pluginIntegration?.hasBlockingDialog()??!1)}}function Xo4(A,Q,B){let $={...A};for(let J of dx5(Q,B)){if(!vZ(A[J],Q[J]))continue;let Y=B[J];if(Y===void 0)delete $[J];else $[J]=Y}return $}function dx5(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}c4();function Go4(A,Q,B,$){let J=bT(A),Y="\x1B[0m",Z="\x1B[34m",F="\x1B[90m",X="\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 uY(G,V),K=new M9(42),E=new BN(G,V,G,V,G,V,0,A.agentMode??"smart","intensity","classic","braille",void 0,void 0,E0.default(),K);E.layout(w1.tight(G,V)),E.paint(U,0,0);let z=U.getBuffer().getCells(),W=0;for(let P=0;P<V;P++)if(z[P].some((T)=>T.char!==" ")){W=P;break}let H=V-1;for(let P=V-1;P>=0;P--)if(z[P].some((T)=>T.char!==" ")){H=P;break}function q(P,T){if(!P)return"";if(P.type==="rgb"){let{r:k,g:x,b:h}=P.value;if(B.getColorDepth()>=24)return`\x1B[${T?38:48};2;${k};${x};${h}m`;let u=zj(k,x,h);return`\x1B[${T?38:48};5;${u}m`}return""}let I=[];if(H>=W)for(let P=W;P<=H;P++){let T="";for(let k=0;k<G;k++){let x=z[P][k],h=x.char,u=q(x.style.fg,!0);T+=u+h+"\x1B[0m"}I.push(T)}let N=I.length,w=Math.max(N,D.length),L=Math.floor((w-N)/2),O=Math.floor((w-D.length)/2);for(let P=0;P<w;P++){let T=" ".repeat(G);if(P>=L&&P<L+N)T=I[P-L];let k=" ",x="";if(P>=O&&P<O+D.length)x=D[P-O];B.write(T+k+x+`
|
|
5799
5799
|
`)}if($)B.write(`
|
|
5800
5800
|
\x1B[90m${$}\x1B[0m
|
|
5801
5801
|
`)}d0();RX0();var cx5=2000;function Vo4(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<cx5)return;if(J=U,Cj())return;if(PF0())_F0();else lY0(V)},Z=(V)=>{if(!Q||!B)return;if(Cj()&&!yo()&&!Wx())return;process.stdout.write(_D(`\x1B]777;notify;Amp;${V}\x1B\\`))},F=null,X=null,D=()=>{F?.unsubscribe(),F=null,X=null};return{attach:(V)=>{D(),F=V.subscribe({next:(U)=>{try{let K=X!==null&&i7(X),E=X==="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{X=U}},error:(U)=>{j.debug("Neo notification agent state stream errored",{error:U})}})},detach:D,unsubscribe(){D(),$.unsubscribe()}}}function lx5({initialUserInput:A,showNeoWelcome:Q,neoWelcomeVariant:B,neoWelcomeDismissed:$}){if(B==="npm-migration")return{show:!0,markDismissedOnDismiss:!1};if(Q)return{show:!0,markDismissedOnDismiss:!0};let J=!A&&!$;return{show:J,markDismissedOnDismiss:J}}async function ix5(A){await DJ((Q)=>NX0(Q,A,"interactive"))}async function Uo4(A,Q={}){let{initialThreadID:B,initialUserInput:$,openThreadPickerOnStart:J=!1,observerOnly:Y=!1,initialAgentMode:Z,initialReasoningEffort:F,showNeoWelcome:X=!1,neoWelcomeVariant:D="intro"}=Q,G=D==="npm-migration",V=async(L)=>{let O=await A.getThreadFromServer(L);if(!O)return null;return KF0(O)},U=async(L)=>{let O=await A.getThreadFromServer(L);if(!O)throw Error(`Thread ${L} not found`);let P=await xY(L,A.configService,A.apiKey,{usesThreadActors:!0}),x=await HU({endpoint:A.rivetEndpoint}).threadActor.getOrCreate([L],{params:{wsToken:P.wsToken},createWithInput:{threadId:P.threadId,threadVersion:P.threadVersion,ownerUserId:P.ownerUserId,...P.agentMode?{agentMode:P.agentMode}:{}}}).fetch("/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({thread:yv4(O)}),skipReadyWait:!0});if(!x.ok&&x.status!==409)throw Error(`Thread import failed (${x.status}): ${await x.text()}`);try{await Xy4(L,A.configService,A.apiKey,{executorType:"local-client"})}catch(h){j.warn("failed to mark thread as imported on server",{threadID:L,error:h instanceof Error?h.message:String(h)})}},K=new ht0(A.rivetEndpoint,A.apiKey,A.configService,{clientID:pI.parse(`neo-${crypto.randomUUID()}`),toolService:A.toolService,skillService:A.skillService,requestPluginToolCall:(L)=>A.pluginService.event.toolCall(L),requestPluginToolResult:(L)=>A.pluginService.event.toolResult(L),pluginService:A.pluginService,invokeTool:async(L,O)=>{let P=typeof O.args==="object"&&O.args!==null?O.args:{},T=await lI({toolName:O.toolName,configService:A.configService,toolService:A.toolService,mcpService:A.mcpService,skillService:A.skillService,toolUseID:O.toolCallId,threadId:L});return A.toolService.invokeTool(O.toolName,{args:P},T)},persistLastThreadID:ix5,readFileSystemDirectory:A.readFileSystemDirectory},V,U),E=await ZN(),z=lx5({initialUserInput:$,showNeoWelcome:X,neoWelcomeVariant:D,neoWelcomeDismissed:E.neoWelcomeDismissed}),W={ampURL:A.ampURL,configService:A.configService,getThreadMarkdown:async(L)=>{let O=await A.getThreadFromServer(L);return O?LV(O):null},isInternalUser:A.isInternalUser,listThreads:A.listThreads,logFilePath:ka,mcpServers:A.mcpService.servers,pluginPlatform:A.pluginPlatform,pluginService:A.pluginService,toolboxes:A.toolboxes,observerOnly:G?!1:Y,sessionAgentMode:Z??E.agentMode,explicitReasoningEffort:F,lastReasoningEffortByMode:E.lastReasoningEffortByMode,lastSpeedByMode:E.lastSpeedByMode,settingsFilePath:A.settingsFilePath,splashOrbVisualStyle:Q.splashOrbVisualStyle??"neo",workspaceRoot:A.workspaceRoot},H=(L,O)=>{return iy({ampURL:A.ampURL,configService:A.configService,threadID:L,signal:O})},q=(L,O)=>{return Fu4({ampURL:A.ampURL,configService:A.configService,threadID:L,signal:O})},I=new Ye0,N=Vo4({configService:A.configService}),w=new Set;try{await xo(new jA1({clientPool:K,analyzeContextForThread:H,listSkillsForThread:q,completionBuilder:A.completionBuilder,history:new ca,ideManager:I,configService:A.configService,initialThreadID:G?void 0:B,notificationService:N,initialUserInput:G?void 0:$,openThreadPickerOnStart:G?!1:J,neoContext:W,showNeoWelcome:z.show,neoWelcomeVariant:D,onNeoWelcomeDismissed:z.markDismissedOnDismiss?()=>{DJ(Vu4).catch((O)=>{j.warn("Failed to mark Neo welcome as dismissed",{error:O})})}:void 0,onThreadArchived:(O)=>{w.add(O)}}));let L=K.lastActiveObservingClient;if(L){let{client:O,observer:P}=L,T=O.getThreadId();if(T){let k={id:T,title:P.title().getValue(),agentMode:P.agentMode,archived:w.has(T)},x=`${A.ampURL.replace(/\/$/,"")}/threads/${T}`;Go4(k,x,process.stdout)}}}finally{process.stdout.write(eI("")),N.unsubscribe(),K.dispose(),await A.dispose?.()}process.exit(0)}Rp();lK();async function nx5(A,Q,B){let $=Q80(A);if(!$.success)throw Error(`Invalid permission format: ${$.error.message}`);if($.data.length===0)throw Error("No permission entry provided");let J=OH($.data);if(!J.success){let X=J.error.issues.map((D)=>D.message).join(", ");throw Error(`Invalid permission entry: ${X}`)}let Y=await Q.get("permissions",B)??[],F=[$.data[0],...Y];await Q.set("permissions",F,B)}async function Ko4(A){try{let Q=A.args.map((B)=>{if(/[\s/\\*?[\]{}()"]/.test(B))return`"${B}"`;return B}).join(" ");await nx5(Q,A.settings,A.scope),A.exit(0)}catch(Q){let B=Q instanceof Error?Q.message:"Unknown error";A.stderr.write(`Error: ${B}
|
|
@@ -7433,7 +7433,7 @@ ${J}`,Q);this.line=B,this.column=$,this.codeblock=J}}/*!
|
|
|
7433
7433
|
`),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 C(G.slice(1,-1),new v({color:$.app.keybind,bold:!0})));else Y.push(new C(G,new v({color:B.colorScheme.foreground})));if(Z<J.length-1)Y.push(new C(`
|
|
7434
7434
|
`))}return new g0({decoration:{color:B.colorScheme.background,border:d1.all(new c1($.app.keybind,1,"rounded"))},child:new f0({padding:K0.symmetric(0,1),child:new p({text:new C(void 0,void 0,Y)})})})}}class v61 extends A8{chartData;highlightIndex;showAxes;colors;constructor({key:A,chartData:Q,highlightIndex:B=null,showAxes:$=!0,colors:J=iV0}){super(A?{key:A}:{});this.chartData=Q,this.highlightIndex=B,this.showAxes=$,this.colors=J}createRenderObject(){return new k61({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 kt4(A,Q,B,$,J,Y,Z){if(Y<=0)return null;switch(A){case"horizontal-bar":{let F=B;return F>=0&&F<Y?F:null}case"bar":case"stacked-bar":{let F=Z?u8:0,X=$-F;if(X<=0)return null;let D=Q-F;if(D<0||D>=X)return null;let G=Math.max(1,Math.floor(X/Y)),V=Math.floor(D/G);return V>=0&&V<Y?V:null}case"line":case"sparkline":case"stacked-area":{let F=Z?u8:0,X=$-F;if(X<=0)return null;let D=Math.max(0,Math.min(X-1,Q-F));if(Y===1)return 0;let G=X/(Y-1),V=Math.round(D/G);return Math.max(0,Math.min(Y-1,V))}default:return null}}function Qp5(A,Q,B,$,J,Y,Z,F){if(J<=0||Q<0||Q>=J)return null;let X=2;switch(A){case"horizontal-bar":return{x:Math.floor(B/2),y:Q};case"bar":case"stacked-bar":{let D=Y?u8:0,G=B-D,V=$-(Y?X: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=F>0?Z/F:0,z=Math.round((1-E)*(V-1));return{x:K,y:z}}case"line":case"sparkline":case"stacked-area":{let D=Y?u8:0,G=B-D,V=$-(Y?X: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=F>0?Z/F:0,E=Math.round((1-K)*(V-1));return{x:U,y:E}}default:return null}}function Bp5(A){let Q=0;for(let B of A)for(let $ of B.points)if($.value>Q)Q=$.value;return Q||1}function $p5(A,Q,B,$,J){if(B.length<=1){let F=$(A.value),X=A.meta?` (${A.meta})`:"";return A.label.length+2+F.length+X.length}let Y=A.label.length,Z=0;for(let F of B){let X=F.points[Q];if(!X)continue;Z+=X.value;let D=2+F.name.length+2+$(X.value).length;Y=Math.max(Y,D)}if(J){let F=9+$(Z).length;Y=Math.max(Y,F)}return Y}function Jp5(A,Q,B,$,J,Y,Z){let F;try{let E=O1.of(A),z=P0.of(A);F={foreground:E.colorScheme.foreground,background:E.colorScheme.background,border:z.app.keybind}}catch{F={foreground:{type:"index",value:15},background:{type:"index",value:0},border:{type:"index",value:7}}}let X=new v({color:F.foreground,bold:!0}),D=new v({color:F.foreground}),G=new v({color:F.foreground,dim:!0}),V=[],U=new v({color:F.foreground,underline:!0}),K=(E,z)=>new C(z,U,void 0,Mz(E),()=>{mA(A,E)});if($.length<=1){if(V.push(new C(`${Q.label}: `,X)),Q.link)V.push(K(Q.link,Y(Q.value)));else V.push(new C(Y(Q.value),D));if(Q.meta)V.push(new C(` (${Q.meta})`,G))}else{let E=Z==="stacked-bar"||Z==="stacked-area";V.push(new C(`${Q.label}
|
|
7435
7435
|
`,X));let z=0;for(let W=0;W<$.length;W++){let H=$[W],q=H.points[B];if(!q)continue;z+=q.value;let I=H.color??J[W%J.length]??F.foreground;if(V.push(new C("● ",new v({color:I}))),V.push(new C(`${H.name}: `,G)),q.link)V.push(K(q.link,Y(q.value)));else V.push(new C(Y(q.value),D));if(W<$.length-1||E)V.push(new C(`
|
|
7436
|
-
`))}if(E)V.push(new C(" ",G)),V.push(new C("Total: ",G)),V.push(new C(Y(z),D))}return new g0({decoration:{color:F.background,border:d1.all(new c1(F.border,1,"rounded"))},child:new p({text:new C(void 0,void 0,V)})})}d0();I3();G8();r5();_7();C7();F9();q2();MB();MV();c4();TS();$T();C1();d0();F9();class y61{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.1778228828-g14902a"},parameters:{metadata:{count:B}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(A);await V30(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 nN extends S0{props;constructor(A){super();this.props=A}createState(){return new St4}}class St4 extends T0{_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 vt4 extends T0{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=P0.of(A),{colors:B,app:$}=Q,J=this.widget.props.isRequiredArg??!0,Y=this.controller.text.trim().length>0,Z=!J||Y,F=d1.all(new c1(B.foreground,1,"solid")),X=new lB({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 r0({children:[new g0({decoration:{color:B.background},child:new p({text:new C(">",new v({color:B.foreground}))})}),new R1({child:X})]}),G=new g0({padding:K0.symmetric(1,0),child:new p({text:this.widget.props.title?new C(this.widget.props.title,new v({color:$.command,bold:!0})):new C("",void 0,[new C("Command: ",new v({color:B.foreground})),new C(this.widget.props.commandName,new v({color:$.command,bold:!0}))])})}),V=[];if(Z)V.push(new C("Enter",new v({color:$.keybind}))),V.push(new C(" to submit, ",new v({color:B.foreground,dim:!0})));V.push(new C("Esc",new v({color:$.keybind}))),V.push(new C(" to cancel",new v({color:B.foreground,dim:!0})));let U=new g0({padding:K0.symmetric(1,0),child:new p({text:new C("",void 0,V)})});return new g0({decoration:{border:F,color:B.background},padding:K0.all(1),child:new x0({children:[G,new U0({height:1}),D,new A5,U]})})}}class vs extends S0{props;constructor(A){super();this.props=A}createState(){return new vt4}}MB();class yt4 extends T0{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>=p9)return!1;let Q=await cF(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=P0.of(A),{colors:B,app:$}=Q,Y=s1.of(A).size.height,Z=Math.max(Math.floor(Y*0.5),10),F=new dD({controller:this.controller,triggers:[new HJ],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:C4.instance.tuiInstance.clipboard,autoOverlayPosition:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),X=new m4({debugLabel:"CommandMultilinePrompt",focusNode:this.focusNode,child:F}),D=new g0({constraints:new w1({maxHeight:Z}),padding:K0.symmetric(1,0),child:X}),G=new g0({padding:K0.symmetric(1,0),child:new p({text:new C("",void 0,[new C("Command: ",new v({color:B.foreground})),new C(this.widget.props.commandName,new v({color:$.command,bold:!0}))])})}),V=new g0({padding:K0.symmetric(1,0),child:new p({text:this.isConfirmingClearInput?new C("",void 0,[new C("Esc",new v({color:$.keybind})),new C(" again to clear input",new v({color:B.foreground,dim:!0}))]):new C("",void 0,[new C("Press ",new v({color:B.foreground,dim:!0})),new C("Enter",new v({color:$.keybind})),new C(" to submit, ",new v({color:B.foreground,dim:!0})),new C("Esc",new v({color:$.keybind})),new C(" to clear",new v({color:B.foreground,dim:!0}))])})}),U=[G,new U0({height:1}),new R1({child:D}),new U0({height:1}),V];return new g0({decoration:{border:d1.all(new c1(B.foreground,1,"solid")),color:B.background},padding:K0.all(1),child:new x0({children:U})})}}class x61 extends S0{props;constructor(A){super();this.props=A}createState(){return new yt4}}function xt4(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 f61 extends H1{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)=>xt4(J.pubDate).length));return new b6({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,F)=>{let X=P0.of(F),{colors:D}=X,G=X.app,V=Y?G.selectionBackground:void 0,U=Y?G.selectionForeground:D.foreground,K=D.mutedForeground,E=(z,W)=>new U0({width:W,child:r0.end([new p({text:new C(z,new v({color:K}))})])});return new g0({decoration:V?{color:V}:void 0,padding:K0.symmetric(2,0),child:new r0({children:[new R1({child:new p({text:new C(J.title,new v({color:U})),overflow:"ellipsis",maxLines:1})}),new U0({width:2}),E(xt4(J.pubDate),B)]})})}})}}class BB{static _instance=null;_allExpanded=!1;_listeners=new Set;static get instance(){if(!BB._instance)BB._instance=new BB;return BB._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()}}d0();class ft4 extends T0{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=P0.of(A),{app:B,colors:$}=Q,J=this.currentQuery.trim().toLowerCase(),Y=J.length>0?this.getValidationError(J):null,Z=this.getAvailableLabels(),X=[{id:"__create__",name:"__create_placeholder__",createdAt:"",__isCreateMarker:!0},...Z];return new b6({title:"Add Label",items:X,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 W=this.currentQuery.trim().toLowerCase();return new g0({decoration:K?{color:K}:void 0,padding:K0.symmetric(2,0),child:new p({text:new C("",void 0,[new C("Create new label: ",new v({color:E})),new C(W,new v({color:E,bold:!0}))])})})}return new g0({decoration:K?{color:K}:void 0,padding:K0.symmetric(2,0),child:new p({text:new C(D.name,new v({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 b61 extends S0{props;constructor(A){super();this.props=A}createState(){return new ft4}}class iD extends S0{props;constructor(A){super();this.props=A}createState(){return new bt4}}class bt4 extends T0{_spinner=new z6;animationInterval=null;initState(){super.initState(),this.animationInterval=setInterval(()=>{this._spinner.step(),this.setState(()=>{})},100)}dispose(){if(this.animationInterval)clearInterval(this.animationInterval),this.animationInterval=null;super.dispose()}build(A){let Q=P0.of(A),{colors:B,app:$}=Q,J=d1.all(new c1(B.foreground,1,"solid")),Y=this._spinner.toBraille(),Z=new p({textAlign:"center",text:new C("",void 0,[new C(Y,new v({color:$.processing})),new C(" ",void 0),new C(this.widget.props.message,new v({color:B.foreground}))])}),X=[new R1({child:new x0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[Z]})})];if(this.widget.props.onAbort)X.push(new U0({height:2,child:new g0({padding:K0.symmetric(2,0),child:new p({text:new C("",new v({dim:!0}),[new C("Press ",new v({color:B.foreground})),new C("Esc",new v({color:B.info})),new C(" to cancel",new v({color:B.foreground}))])})})}));let D=new g0({decoration:new f4(B.background,J),child:new U0({width:60,height:7,child:new x0({mainAxisAlignment:"start",children:X})})});if(this.widget.props.onAbort)return new i4({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 pU extends S0{props;constructor(A){super();this.props=A}createState(){return new ut4}}class ut4 extends T0{scrollController=new aA;scrollAreaKey=new A2("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 P2}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=P0.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=ZD0(B);return{title:G.title,type:G.type,description:G.description}})(),J=$.type==="error"?Q.app.toolError:Q.app.command,Y=d1.all(new c1(Q.colors.border,1,"solid")),Z=new g0({padding:K0.symmetric(1,0),child:new p({text:new C($.title,new v({color:J,bold:!0}))})}),F=this.isWidgetMessage(B)?B.widget:new p({text:new C($.description,new v({color:Q.colors.foreground})),selectable:!0}),X=new R1({child:new e5({child:new g0({padding:K0.symmetric(1,0),child:new r0({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new R1({child:new _A({controller:this.scrollController,autofocus:!0,child:F})}),new J2({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 g0({padding:K0.symmetric(1,0),child:new p({text:(()=>{if(this.widget.props.onRetry)return new C("",void 0,[new C("Press ",new v({color:Q.colors.foreground,dim:!0})),new C("R",new v({color:Q.app.keybind})),new C(" to retry, ",new v({color:Q.colors.foreground,dim:!0})),new C("Esc",new v({color:Q.app.keybind})),new C(" to cancel",new v({color:Q.colors.foreground,dim:!0}))]);let G=this.resolveFooterStyle(this.widget.props.message);if(G==="none")return new C("",new v({color:Q.colors.foreground,dim:!0}));if(G==="help"){let V=new v({color:Q.app.keybind}),U=new v({color:Q.colors.foreground,dim:!0});return new C("",U,[new C("Press ",U),new C("Escape",V),new C(" to close • Use ",U),new C("↑↓",V),new C(" or ",U),new C("j/k",V),new C(" to scroll",U)])}return new C("Press any key to close",new v({color:Q.colors.foreground,dim:!0,italic:!0}))})()})});return new i4({debugLabel:"MessageDialog",child:new e4({fit:"expand",children:[new T1({onClick:()=>{},child:new U0}),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 g0({decoration:{border:Y,color:Q.colors.background},padding:K0.all(1),child:new x0({mainAxisAlignment:"center",children:[Z,new U0({height:1}),X,D]})})})]})})}}I3();o1();class ht4 extends S0{props;constructor(A){super();this.props=A}createState(){return new gt4}}class gt4 extends T0{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=o0.file(this.widget.props.cwd),B=Y1.relativePath(Q,MA(A));if(B!==null&&B!==""&&B!==".."&&!B.startsWith("../"))return B;return L5(A)}statusIcon(A){let Q=f8.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=P0.of(A),{app:B}=Q;if(this.plugins.length===0)return new p({text:new C("No plugins found.",new v({dim:!0}))});let $=[],J=this.plugins.length,Y=this.plugins.filter((X)=>X.status==="active").length,Z=this.plugins.reduce((X,D)=>X+D.registeredCommands.length,0),F=this.plugins.reduce((X,D)=>X+D.registeredTools.length,0);if($.push(new C(`${Y}/${J} ${V4(J,"plugin")} active`,new v({bold:!0}))),Z>0||F>0)$.push(new C(` (${Z} ${V4(Z,"command")}, ${F} ${V4(F,"tool")})`,new v({dim:!0})));$.push(new C(`
|
|
7436
|
+
`))}if(E)V.push(new C(" ",G)),V.push(new C("Total: ",G)),V.push(new C(Y(z),D))}return new g0({decoration:{color:F.background,border:d1.all(new c1(F.border,1,"rounded"))},child:new p({text:new C(void 0,void 0,V)})})}d0();I3();G8();r5();_7();C7();F9();q2();MB();MV();c4();TS();$T();C1();d0();F9();class y61{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.1778235017-g38b248"},parameters:{metadata:{count:B}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(A);await V30(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 nN extends S0{props;constructor(A){super();this.props=A}createState(){return new St4}}class St4 extends T0{_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 vt4 extends T0{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=P0.of(A),{colors:B,app:$}=Q,J=this.widget.props.isRequiredArg??!0,Y=this.controller.text.trim().length>0,Z=!J||Y,F=d1.all(new c1(B.foreground,1,"solid")),X=new lB({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 r0({children:[new g0({decoration:{color:B.background},child:new p({text:new C(">",new v({color:B.foreground}))})}),new R1({child:X})]}),G=new g0({padding:K0.symmetric(1,0),child:new p({text:this.widget.props.title?new C(this.widget.props.title,new v({color:$.command,bold:!0})):new C("",void 0,[new C("Command: ",new v({color:B.foreground})),new C(this.widget.props.commandName,new v({color:$.command,bold:!0}))])})}),V=[];if(Z)V.push(new C("Enter",new v({color:$.keybind}))),V.push(new C(" to submit, ",new v({color:B.foreground,dim:!0})));V.push(new C("Esc",new v({color:$.keybind}))),V.push(new C(" to cancel",new v({color:B.foreground,dim:!0})));let U=new g0({padding:K0.symmetric(1,0),child:new p({text:new C("",void 0,V)})});return new g0({decoration:{border:F,color:B.background},padding:K0.all(1),child:new x0({children:[G,new U0({height:1}),D,new A5,U]})})}}class vs extends S0{props;constructor(A){super();this.props=A}createState(){return new vt4}}MB();class yt4 extends T0{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>=p9)return!1;let Q=await cF(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=P0.of(A),{colors:B,app:$}=Q,Y=s1.of(A).size.height,Z=Math.max(Math.floor(Y*0.5),10),F=new dD({controller:this.controller,triggers:[new HJ],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:C4.instance.tuiInstance.clipboard,autoOverlayPosition:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),X=new m4({debugLabel:"CommandMultilinePrompt",focusNode:this.focusNode,child:F}),D=new g0({constraints:new w1({maxHeight:Z}),padding:K0.symmetric(1,0),child:X}),G=new g0({padding:K0.symmetric(1,0),child:new p({text:new C("",void 0,[new C("Command: ",new v({color:B.foreground})),new C(this.widget.props.commandName,new v({color:$.command,bold:!0}))])})}),V=new g0({padding:K0.symmetric(1,0),child:new p({text:this.isConfirmingClearInput?new C("",void 0,[new C("Esc",new v({color:$.keybind})),new C(" again to clear input",new v({color:B.foreground,dim:!0}))]):new C("",void 0,[new C("Press ",new v({color:B.foreground,dim:!0})),new C("Enter",new v({color:$.keybind})),new C(" to submit, ",new v({color:B.foreground,dim:!0})),new C("Esc",new v({color:$.keybind})),new C(" to clear",new v({color:B.foreground,dim:!0}))])})}),U=[G,new U0({height:1}),new R1({child:D}),new U0({height:1}),V];return new g0({decoration:{border:d1.all(new c1(B.foreground,1,"solid")),color:B.background},padding:K0.all(1),child:new x0({children:U})})}}class x61 extends S0{props;constructor(A){super();this.props=A}createState(){return new yt4}}function xt4(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 f61 extends H1{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)=>xt4(J.pubDate).length));return new b6({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,F)=>{let X=P0.of(F),{colors:D}=X,G=X.app,V=Y?G.selectionBackground:void 0,U=Y?G.selectionForeground:D.foreground,K=D.mutedForeground,E=(z,W)=>new U0({width:W,child:r0.end([new p({text:new C(z,new v({color:K}))})])});return new g0({decoration:V?{color:V}:void 0,padding:K0.symmetric(2,0),child:new r0({children:[new R1({child:new p({text:new C(J.title,new v({color:U})),overflow:"ellipsis",maxLines:1})}),new U0({width:2}),E(xt4(J.pubDate),B)]})})}})}}class BB{static _instance=null;_allExpanded=!1;_listeners=new Set;static get instance(){if(!BB._instance)BB._instance=new BB;return BB._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()}}d0();class ft4 extends T0{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=P0.of(A),{app:B,colors:$}=Q,J=this.currentQuery.trim().toLowerCase(),Y=J.length>0?this.getValidationError(J):null,Z=this.getAvailableLabels(),X=[{id:"__create__",name:"__create_placeholder__",createdAt:"",__isCreateMarker:!0},...Z];return new b6({title:"Add Label",items:X,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 W=this.currentQuery.trim().toLowerCase();return new g0({decoration:K?{color:K}:void 0,padding:K0.symmetric(2,0),child:new p({text:new C("",void 0,[new C("Create new label: ",new v({color:E})),new C(W,new v({color:E,bold:!0}))])})})}return new g0({decoration:K?{color:K}:void 0,padding:K0.symmetric(2,0),child:new p({text:new C(D.name,new v({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 b61 extends S0{props;constructor(A){super();this.props=A}createState(){return new ft4}}class iD extends S0{props;constructor(A){super();this.props=A}createState(){return new bt4}}class bt4 extends T0{_spinner=new z6;animationInterval=null;initState(){super.initState(),this.animationInterval=setInterval(()=>{this._spinner.step(),this.setState(()=>{})},100)}dispose(){if(this.animationInterval)clearInterval(this.animationInterval),this.animationInterval=null;super.dispose()}build(A){let Q=P0.of(A),{colors:B,app:$}=Q,J=d1.all(new c1(B.foreground,1,"solid")),Y=this._spinner.toBraille(),Z=new p({textAlign:"center",text:new C("",void 0,[new C(Y,new v({color:$.processing})),new C(" ",void 0),new C(this.widget.props.message,new v({color:B.foreground}))])}),X=[new R1({child:new x0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[Z]})})];if(this.widget.props.onAbort)X.push(new U0({height:2,child:new g0({padding:K0.symmetric(2,0),child:new p({text:new C("",new v({dim:!0}),[new C("Press ",new v({color:B.foreground})),new C("Esc",new v({color:B.info})),new C(" to cancel",new v({color:B.foreground}))])})})}));let D=new g0({decoration:new f4(B.background,J),child:new U0({width:60,height:7,child:new x0({mainAxisAlignment:"start",children:X})})});if(this.widget.props.onAbort)return new i4({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 pU extends S0{props;constructor(A){super();this.props=A}createState(){return new ut4}}class ut4 extends T0{scrollController=new aA;scrollAreaKey=new A2("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 P2}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=P0.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=ZD0(B);return{title:G.title,type:G.type,description:G.description}})(),J=$.type==="error"?Q.app.toolError:Q.app.command,Y=d1.all(new c1(Q.colors.border,1,"solid")),Z=new g0({padding:K0.symmetric(1,0),child:new p({text:new C($.title,new v({color:J,bold:!0}))})}),F=this.isWidgetMessage(B)?B.widget:new p({text:new C($.description,new v({color:Q.colors.foreground})),selectable:!0}),X=new R1({child:new e5({child:new g0({padding:K0.symmetric(1,0),child:new r0({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new R1({child:new _A({controller:this.scrollController,autofocus:!0,child:F})}),new J2({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 g0({padding:K0.symmetric(1,0),child:new p({text:(()=>{if(this.widget.props.onRetry)return new C("",void 0,[new C("Press ",new v({color:Q.colors.foreground,dim:!0})),new C("R",new v({color:Q.app.keybind})),new C(" to retry, ",new v({color:Q.colors.foreground,dim:!0})),new C("Esc",new v({color:Q.app.keybind})),new C(" to cancel",new v({color:Q.colors.foreground,dim:!0}))]);let G=this.resolveFooterStyle(this.widget.props.message);if(G==="none")return new C("",new v({color:Q.colors.foreground,dim:!0}));if(G==="help"){let V=new v({color:Q.app.keybind}),U=new v({color:Q.colors.foreground,dim:!0});return new C("",U,[new C("Press ",U),new C("Escape",V),new C(" to close • Use ",U),new C("↑↓",V),new C(" or ",U),new C("j/k",V),new C(" to scroll",U)])}return new C("Press any key to close",new v({color:Q.colors.foreground,dim:!0,italic:!0}))})()})});return new i4({debugLabel:"MessageDialog",child:new e4({fit:"expand",children:[new T1({onClick:()=>{},child:new U0}),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 g0({decoration:{border:Y,color:Q.colors.background},padding:K0.all(1),child:new x0({mainAxisAlignment:"center",children:[Z,new U0({height:1}),X,D]})})})]})})}}I3();o1();class ht4 extends S0{props;constructor(A){super();this.props=A}createState(){return new gt4}}class gt4 extends T0{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=o0.file(this.widget.props.cwd),B=Y1.relativePath(Q,MA(A));if(B!==null&&B!==""&&B!==".."&&!B.startsWith("../"))return B;return L5(A)}statusIcon(A){let Q=f8.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=P0.of(A),{app:B}=Q;if(this.plugins.length===0)return new p({text:new C("No plugins found.",new v({dim:!0}))});let $=[],J=this.plugins.length,Y=this.plugins.filter((X)=>X.status==="active").length,Z=this.plugins.reduce((X,D)=>X+D.registeredCommands.length,0),F=this.plugins.reduce((X,D)=>X+D.registeredTools.length,0);if($.push(new C(`${Y}/${J} ${V4(J,"plugin")} active`,new v({bold:!0}))),Z>0||F>0)$.push(new C(` (${Z} ${V4(Z,"command")}, ${F} ${V4(F,"tool")})`,new v({dim:!0})));$.push(new C(`
|
|
7437
7437
|
|
|
7438
7438
|
`));for(let X of this.plugins){let{icon:D,color:G}=this.statusIcon(X.status),V=this.getRelativePath(X.uri);if($.push(new C(`${D} `,new v({color:G}))),$.push(new C(V,new v({bold:!0}))),$.push(new C(` ${X.status}`,new v({dim:!0}))),$.push(new C(`
|
|
7439
7439
|
`)),X.status==="active"&&X.registeredEvents.length>0)$.push(new C(" Events: ",new v({dim:!0}))),$.push(new C(X.registeredEvents.join(", "),new v({color:B.link}))),$.push(new C(`
|
|
@@ -7611,7 +7611,7 @@ ${r.content||""}`:r.content||"",b0=[],h0=r.baseDir.startsWith("file://")?wU0(r.b
|
|
|
7611
7611
|
`)}function w1A(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"),F=dt1({settings:{url:Y.ampURL,proxy:Z},secrets:{getToken:(D,G)=>Y.secrets.get(D,G)}}),X=await YA.userDisplayBalanceInfo({},{config:F});if(!X.ok){if(X.error.code==="auth-required")process.stderr.write(n0.red("Error: ")+"You must be logged in to view usage. Run `amp login` first.\n"),process.exit(1);process.stderr.write(n0.red("Error: ")+X.error.message+`
|
|
7612
7612
|
`),process.exit(1)}process.stdout.write(await Cl5(X.result.displayText)+`
|
|
7613
7613
|
`),process.exit(0)})}var co5=Ht.join(j$,"logs","headless.log"),g81=Ht.join(Kx,"device-id.json"),lo5=`cli-tui-${a6A(16).toString("hex")}`;async function io5(){for(let A of jM)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(() => S4(zb(),1))}catch{}if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(A){OJ.write(`Failed to change directory to ${process.env.AMP_PWD}: ${A}
|
|
7614
|
-
`)}function no5(A){process.emitWarning=(Q,B,$,J)=>{let Y=typeof Q==="string"?Q:Q.message||String(Q),Z=B||"Warning",F=!1;A.warn(Y,{name:Z,code:$})}}function S2(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")rJ("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli")rJ("experimental.agentMode",Q.mode);if(A.getOptionValueSourceWithGlobals("model")==="cli"&&Q.model)rJ("internal.model",ro5(Q.model))}function p6A(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 ao5(A){if(A===void 0)return;let Q=A.trim();if(Tt1(Q))return Q;throw new J4(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function oo5(A,Q){if(TX(A,Q))return;let B=v$(A)?.levels,$=B?` Allowed for ${A}: ${B.join(", ")}.`:"";throw new J4(`Reasoning effort "${Q}" is not available for ${A} mode.${$}`,1)}function ro5(A){if(!A.includes("="))return p6A(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);p6A(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 so5(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 to5(A){try{return await o6A(A,"utf-8")}catch{return A}}async function m81(A,Q,B){let $=so5(A,Q);if(!$)return;let J=xA(B)?B.features:[],Y=xA(B)?B.user.email:void 0;if(!KK0(J,HB.HARNESS_SYSTEM_PROMPT)&&!(Y&&N7(Y)))throw new J4("You are not allowed to do this.",1);rJ("systemPrompt",await to5($))}function KK0(A,Q){return A?.some((B)=>B.name===Q&&B.enabled)??!1}function eo5(A){return A!=="pending"}function IR(A){if(!xA(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function Ar5(A){let Q=IR(A);if(Q)return Q.id;if(_X(A))throw Error(A.error.message);throw Error("unreachable")}function Qr5(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 Br5(A){let $=Qr5(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 qt(A,Q){let B=Hr0(Error(A.error.message));if(B.message===A7.networkOffline||B.message===A7.networkTimeout)return Br5(Q);if(B.message!==A7.internalBug)return new J4(B.message,1,B.suggestion);return new J4(A.error.message.replace(/^Error: /,""),1)}async function $r5(){if(process.versions.bun)return!1;try{return await oI()==="npm"}catch(A){return j.debug("Failed to detect package manager for Neo npm migration welcome",{error:A}),!1}}var d6A=[{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??vF,description:`Custom settings file path (overrides the default location ${vF})`},{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 ${ka})`},{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:e2(),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:LM.SMART.key,description:`Set the agent mode (${k$({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:Array.from(new Set(k$().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}],c6A=(A)=>("deprecated"in A)&&A.deprecated===!0,Jr5=(A)=>("hidden"in A)&&A.hidden===!0,Yr5=(A)=>("default"in A),Zr5=(A)=>("default"in A)?A.default:void 0;function GK0(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let B=ao5(Q.effort);if(B!==void 0)oo5(Q.mode,B);return B}function Fr5(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((F)=>B.includes(F)||F.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(A7.unknownCommand(B),1,Z)}}async function EK0(A){return{...A,getThreadEnvironment:Uz,getEnvironmentData:(Q,B)=>rX({filesystem:A.fileSystem},Q,B),osFileSystem:A.fileSystem,skillService:A.skillService,fileChangeTrackerStorage:new XL(A.fileSystem),generateThreadTitle:mY4,deleteThread:(Q)=>A.threadService.delete(Q),getServerStatus:()=>WQ(A.configService),pluginService:A.pluginService}}function r6A(A){return{toolService:A.toolService,configService:A.configService,skillService:A.skillService,getThreadEnvironment:Uz,getEnvironmentData:(Q,B)=>rX({filesystem:A.fileSystem},Q,B),filesystem:A.fileSystem,threadService:A.threadService}}var VK0=o0.file(do5.homedir()),p81=process.env.XDG_CONFIG_HOME?o0.file(process.env.XDG_CONFIG_HOME):Y1.joinPath(VK0,".config");function Xr5(A){return zj4({playNotificationSound:async(Q)=>{if(A.useNotificationsForService){if(PF0())_F0();else lY0(Q);let B=Cj(),$=yo();if((!B||$||Wx())&&A.config.settings["notifications.system.enabled"]!==!1){if(Q==="idle")process.stdout.write(_D("\x1B]777;notify;Amp;Agent is ready\x1B\\"));else if(Q==="requires-user-input")process.stdout.write(_D("\x1B]777;notify;Amp;Waiting for approval\x1B\\"))}}},windowFocused:()=>Promise.resolve(Cj()),threadService:A.threadService,configService:A.configService,threadViewStates$:A.threadViewStates$})}async function h8(A,Q,B){let $=B?.deferAuth??!1,J=B?.skipToolProviders??!1;wt1("0.0.
|
|
7614
|
+
`)}function no5(A){process.emitWarning=(Q,B,$,J)=>{let Y=typeof Q==="string"?Q:Q.message||String(Q),Z=B||"Warning",F=!1;A.warn(Y,{name:Z,code:$})}}function S2(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")rJ("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli")rJ("experimental.agentMode",Q.mode);if(A.getOptionValueSourceWithGlobals("model")==="cli"&&Q.model)rJ("internal.model",ro5(Q.model))}function p6A(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 ao5(A){if(A===void 0)return;let Q=A.trim();if(Tt1(Q))return Q;throw new J4(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function oo5(A,Q){if(TX(A,Q))return;let B=v$(A)?.levels,$=B?` Allowed for ${A}: ${B.join(", ")}.`:"";throw new J4(`Reasoning effort "${Q}" is not available for ${A} mode.${$}`,1)}function ro5(A){if(!A.includes("="))return p6A(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);p6A(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 so5(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 to5(A){try{return await o6A(A,"utf-8")}catch{return A}}async function m81(A,Q,B){let $=so5(A,Q);if(!$)return;let J=xA(B)?B.features:[],Y=xA(B)?B.user.email:void 0;if(!KK0(J,HB.HARNESS_SYSTEM_PROMPT)&&!(Y&&N7(Y)))throw new J4("You are not allowed to do this.",1);rJ("systemPrompt",await to5($))}function KK0(A,Q){return A?.some((B)=>B.name===Q&&B.enabled)??!1}function eo5(A){return A!=="pending"}function IR(A){if(!xA(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function Ar5(A){let Q=IR(A);if(Q)return Q.id;if(_X(A))throw Error(A.error.message);throw Error("unreachable")}function Qr5(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 Br5(A){let $=Qr5(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 qt(A,Q){let B=Hr0(Error(A.error.message));if(B.message===A7.networkOffline||B.message===A7.networkTimeout)return Br5(Q);if(B.message!==A7.internalBug)return new J4(B.message,1,B.suggestion);return new J4(A.error.message.replace(/^Error: /,""),1)}async function $r5(){if(process.versions.bun)return!1;try{return await oI()==="npm"}catch(A){return j.debug("Failed to detect package manager for Neo npm migration welcome",{error:A}),!1}}var d6A=[{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??vF,description:`Custom settings file path (overrides the default location ${vF})`},{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 ${ka})`},{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:e2(),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:LM.SMART.key,description:`Set the agent mode (${k$({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:Array.from(new Set(k$().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}],c6A=(A)=>("deprecated"in A)&&A.deprecated===!0,Jr5=(A)=>("hidden"in A)&&A.hidden===!0,Yr5=(A)=>("default"in A),Zr5=(A)=>("default"in A)?A.default:void 0;function GK0(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let B=ao5(Q.effort);if(B!==void 0)oo5(Q.mode,B);return B}function Fr5(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((F)=>B.includes(F)||F.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(A7.unknownCommand(B),1,Z)}}async function EK0(A){return{...A,getThreadEnvironment:Uz,getEnvironmentData:(Q,B)=>rX({filesystem:A.fileSystem},Q,B),osFileSystem:A.fileSystem,skillService:A.skillService,fileChangeTrackerStorage:new XL(A.fileSystem),generateThreadTitle:mY4,deleteThread:(Q)=>A.threadService.delete(Q),getServerStatus:()=>WQ(A.configService),pluginService:A.pluginService}}function r6A(A){return{toolService:A.toolService,configService:A.configService,skillService:A.skillService,getThreadEnvironment:Uz,getEnvironmentData:(Q,B)=>rX({filesystem:A.fileSystem},Q,B),filesystem:A.fileSystem,threadService:A.threadService}}var VK0=o0.file(do5.homedir()),p81=process.env.XDG_CONFIG_HOME?o0.file(process.env.XDG_CONFIG_HOME):Y1.joinPath(VK0,".config");function Xr5(A){return zj4({playNotificationSound:async(Q)=>{if(A.useNotificationsForService){if(PF0())_F0();else lY0(Q);let B=Cj(),$=yo();if((!B||$||Wx())&&A.config.settings["notifications.system.enabled"]!==!1){if(Q==="idle")process.stdout.write(_D("\x1B]777;notify;Amp;Agent is ready\x1B\\"));else if(Q==="requires-user-input")process.stdout.write(_D("\x1B]777;notify;Amp;Waiting for approval\x1B\\"))}}},windowFocused:()=>Promise.resolve(Cj()),threadService:A.threadService,configService:A.configService,threadViewStates$:A.threadViewStates$})}async function h8(A,Q,B){let $=B?.deferAuth??!1,J=B?.skipToolProviders??!1;wt1("0.0.1778235017-g38b248");let Y=H30({storage:A.settings,secretStorage:A.secrets,workspaceRoot:m0.of(o0.file(process.cwd())),defaultAmpURL:A.ampURL,homeDir:VK0,userConfigDir:p81});bo4(Y);let Z=await Y.getLatest();j.debug("Global configuration initialized",{settingsKeys:Object.keys(Z.settings)});let F=!1;{let g=await A.secrets.get("apiKey",A.ampURL);if(F=Boolean(g),j.info("API key lookup before login",{found:Boolean(g),ampURL:A.ampURL,deferAuth:$}),!g)if($)j.info("No API key found, continuing startup with deferred auth");else{Y5.write(`No API key found. Starting login flow...
|
|
7615
7615
|
`);let l=await Dr5(A),s=await A.secrets.get("apiKey",A.ampURL);if(j.info("Login flow completed",{success:l,storedKeyPresent:Boolean(s),ampURL:A.ampURL}),!l)await qz(),process.exit(1);F=!0}}{let g=await Y.getLatest(),l=g.settings.url,s=g.secrets.isSet?.[l];j.info("Config secrets state after login",{configURL:l,apiKeySet:s?.apiKey??!1})}let X=k1(WQ(Y).pipe(O5(eo5))),D=$?"pending":await X;if(!$)j.info("Server status resolved",{status:"ready",isAuthenticated:xA(D),isError:_X(D),errorMessage:_X(D)?D.error.message:void 0});let G=X.then((g)=>Ar5(g));G.catch(()=>{return});let U=!Q.takeMeBack&&xA(D)&&KK0(D.features,HB.THREAD_ACTORS_TUI)?"all":process.env.PLUGINS??"permissions",{toolService:K,dispose:E}=Gj4({configService:Y}),z=new Map,W=()=>z.clear(),H=new Yf0(Y,A.settings.getWorkspaceRootPath()),q=H$4({configService:Y,filesystem:C3}),I=X94({configService:Y,trustStore:H,skillMCPServers:q.skillMCPServers,createOAuthProvider:async(g,l,s)=>{let A0=`${g}:${l}`,H0=z.get(A0);if(H0)return j.debug("Reusing existing OAuth provider for server",{serverName:g,serverUrl:l}),H0;j.debug("Creating OAuth provider for server",{serverName:g,serverUrl:l});let V0=(async()=>{let w0=new SM(A.secrets),Z0=await w0.getClientInfo(g,l),R0=s?.scopes??Z0?.scopes,B0=ny4();j.info("OAuth headless mode check",{useHeadless:B0,executeMode:A.executeMode,envVar:process.env.AMP_HEADLESS_OAUTH,isTTY:Y5.isTTY});let I0;if(B0)I0=A.executeMode?iy4():ly4(g);let n=new WS0({storage:w0,serverName:g,serverUrl:l,clientId:s?.clientId??Z0?.clientId,clientSecret:s?.clientSecret??Z0?.clientSecret,authUrl:s?.authUrl??Z0?.authUrl,tokenUrl:s?.tokenUrl??Z0?.tokenUrl,scopes:R0,headlessAuthHandler:I0});return j.debug("OAuth provider created",{serverName:g,serverUrl:l,hasManualClientId:!!(s?.clientId??Z0?.clientId),willUseDCR:!(s?.clientId??Z0?.clientId),scopes:R0,headlessMode:B0,executeMode:A.executeMode}),n})();return z.set(A0,V0),V0}}),N=Zn0({configService:Y,filesystem:C3,spawn:VY0}),w=Q.headless?Io4():void 0,L=w??new yG0({configService:Y}),O=L instanceof yG0?L:void 0;if(O)O.pluginExecutorKind="local";let P=Mf0({configService:Y,fileSystem:C3,platform:L,loadGlobalPlugins:ws0(Y),pluginFilter:U}),T=Z74(P),k=[I,N,T],x;if(J)x=new Map;else if(A.executeMode){let g=await gM4({toolService:K,providers:k,initialTimeout:15000});x=g.registrations;for(let[l,s]of g.initErrors)j.warn(`${l} provider initialization slow or failed:`,s)}else x=Fn0({toolService:K,providers:k});if(Q.jetbrains)NM("JetBrains");else if(Q.ide&&kx4())NM("VS Code");else if(Q.ide&&Sx4())NM("Neovim");else if(Q.ide){let g=await io5();if(g){let l=R30(g.ideName);if(l)NM(l)}}if(A.executeMode)Ct1(!0);let h,u=x3.status.pipe(N1((g)=>Boolean(g.connected&&g.authenticated&&g.ideName&&Ie1(g.ideName))),P4()).subscribe((g)=>{if(g){if(!h)h=K.registerTool(hM4)}else h?.dispose(),h=void 0}),S;if(!A.executeMode){let g=await A.settings.get("fuzzy.alwaysIncludePaths")??[];S=new OF0(process.cwd(),{alwaysIncludePaths:g},!0)}else S=new class extends OF0{async start(){}async query(){return[]}async queryCompletions(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};let b=new Ch0(Gl(Y,{usesThreadActors:!1}),{maxThreads:200});j.info("Starting Amp background services");let d=new vA1,c={configService:Y,toolService:K,mcpService:I,skillService:q,toolboxService:N,trustStore:H,threadService:b,secretStorage:A.secrets,settingsStorage:A.settings,fuzzyServer:S,fileSystem:C3,terminal:d,pluginService:P,pluginPlatform:O,headlessPluginPlatform:w,serverStatus:D,serverStatusPromise:X,viewerUserIDPromise:G,hasAPIKeyAtStartup:F};return{...c,async asyncDispose(){if(c.mcpService.hasAuthenticatingClients())j.info("Waiting for OAuth authentication to complete before exit..."),await c.mcpService.waitForAuthentication();for(let g of x.values())g.dispose();await c.mcpService.dispose(),W(),await c.threadService.asyncDispose(),c.configService.unsubscribe(),E(),c.fuzzyServer.dispose(),c.settingsStorage[Symbol.dispose](),u.unsubscribe(),h?.dispose(),await c.pluginService.dispose()}}}async function Dr5(A){if(!A.executeMode){if(!await EX0("Would you like to log in to Amp? [(y)es, (n)o]: "))return Y5.write(`Login cancelled. Run the command again to retry.
|
|
7616
7616
|
`),!1}return await s6A(A)}async function s6A(A){let Q=a6A(32).toString("hex"),B=await Ox(A.ampURL,Q),$=new AbortController;try{await jX(B,$.signal)}catch(Y){j.error("Error opening browser",{error:Y})}let J=await Ox(A.ampURL,Q,!1);Y5.write(`If your browser does not open automatically, visit:
|
|
7617
7617
|
|
|
@@ -7619,7 +7619,7 @@ ${n0.blue.bold(J)}
|
|
|
7619
7619
|
|
|
7620
7620
|
`);try{return await ob4(A.ampURL,Q,A.secrets,$),Y5.write("\nLogin successful! Run `amp` to get started.\n"),!0}catch(Y){return j.error("Login failed",{error:Y}),OJ.write(`
|
|
7621
7621
|
Login failed: ${Y instanceof Error?Y.message:String(Y)}
|
|
7622
|
-
`),!1}}async function Gr5(A,Q,B){let $=await Q.get("apiKey",A);if(!$)throw new J4("No Amp API key found. Run `amp login` first.",1);let J=go5("curl",["-H",`Authorization: Bearer ${$}`,...B],{stdio:"inherit"});process.exitCode=await new Promise((Y,Z)=>{J.on("error",Z),J.on("close",(F)=>Y(F??1))})}function Vr5(A){let Q=new kI().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((W)=>{if(W.code==="commander.help"||W.code==="commander.version"||W.exitCode===0)Aj(),process.exit(0);let H=W.originalError??W;ik4(H)}),Qh4(Q,{version:"0.0.
|
|
7622
|
+
`),!1}}async function Gr5(A,Q,B){let $=await Q.get("apiKey",A);if(!$)throw new J4("No Amp API key found. Run `amp login` first.",1);let J=go5("curl",["-H",`Authorization: Bearer ${$}`,...B],{stdio:"inherit"});process.exitCode=await new Promise((Y,Z)=>{J.on("error",Z),J.on("close",(F)=>Y(F??1))})}function Vr5(A){let Q=new kI().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((W)=>{if(W.code==="commander.help"||W.code==="commander.version"||W.exitCode===0)Aj(),process.exit(0);let H=W.originalError??W;ik4(H)}),Qh4(Q,{version:"0.0.1778235017-g38b248",buildTimestamp:"2026-05-08T10:14:11.559Z",buildType:"'release'"}),Q.addHelpText("after",Px4()),Q.configureHelp({formatHelp:_x4}),Q.command("logout").description("Log out by removing stored API key").action(async(W,H)=>{let q=H.optsWithGlobals(),I=await g5(q);await Nr5(I)}),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(W,H)=>{let q=H.optsWithGlobals(),I=await g5(q);await Ir5(I,await vs0(q,I.settings))}),dk4(Q,g5);let $=Q.command("internal",{hidden:!0}).description("Internal commands").command("curl [args...]").description("Internal: run curl with the current Amp API key as a bearer token").allowUnknownOption(!0).allowExcessArguments(!0).action(async(...W)=>{let H=W.find((w)=>typeof w==="object"&&w!==null&&typeof w.optsWithGlobals==="function")??$,q=W.filter((w)=>w!==H).flatMap((w)=>Array.isArray(w)?w:typeof w==="string"?[w]:[]),I=H.optsWithGlobals(),N=await g5(I);await Gr5(N.ampURL,N.secrets,q),process.exit(process.exitCode??0)});Q.command("git-credential-helper [action]",{hidden:!0}).summary("Git credential helper for GitHub").description("Internal: implements the git credential helper protocol. Used inside sandboxes to authenticate git operations with GitHub.").action(async(W,H,q)=>{let I=q.optsWithGlobals(),N=await g5(I);await by4(W??"get",N.ampURL,N.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(W,H)=>{let q=H.optsWithGlobals(),I=await g5(q);await uy4(I.ampURL,I.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(W)=>{await af4({raw:W.raw===!0}),process.exit(process.exitCode??0)}),Q.command("live-sync [threadIDOrURL]",{hidden:!0}).summary("Mirror live DTW thread changes into the current checkout").description("Experimental: watch a v2 thread URL or ID and mirror its live working-tree changes into your local checkout, or apply the current snapshot once and exit.").addHelpText("after",["","Examples:"," amp live-sync T-5928a90d-d53b-488f-a829-4e36442142ee"," amp live-sync --apply T-5928a90d-d53b-488f-a829-4e36442142ee"," amp live-sync https://ampcode.com/threads/T-5928a90d-d53b-488f-a829-4e36442142ee"].join(`
|
|
7623
7623
|
`)).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(W,H,q)=>{if(W&&H.apply)throw new J4("Choose either a positional thread ID/URL or --apply <thread-id>, not both.",1);let I=H.apply??W;if(!I||I.trim().length===0)Y5.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.
|
|
7624
7624
|
|
|
7625
7625
|
`),q.outputHelp(),process.exit(0);let N=W2(I)??ZJ(I),w=q.optsWithGlobals(),L=await g5(w);S2(q,w);let O=await h8(L,w),P=!1;try{if(H.checkout&&H.skipCheckout)throw new J4("Choose either --checkout or --skip-checkout, not both.",1);if(_X(O.serverStatus))throw qt(O.serverStatus,L.ampURL);let T=xA(O.serverStatus)?O.serverStatus.features:void 0;if(!KK0(T,HB.V2))throw new J4("live-sync is not enabled for your user",1);await ub4({ampURL:L.ampURL,threadId:N,configService:O.configService,threadService:O.threadService,apiKey:process.env.AMP_API_KEY,applyOnce:typeof H.apply==="string",checkoutMode:H.checkout?"always":H.skipCheckout?"never":"prompt",promptForYesNo:EX0}),P=!0}finally{if(await O.asyncDispose(),P)process.exit(0)}});let J=async(W,H,q)=>{H30({storage:H.settings,secretStorage:H.secrets,workspaceRoot:m0.of(o0.file(process.cwd())),defaultAmpURL:H.ampURL,homeDir:VK0,userConfigDir:p81});let I={...H,executeMode:!1};await UK0(I,{...W,openThreadSwitcher:!0},q,A)},Y=Q.command("threads").alias("t").alias("thread").summary("Manage threads").description("Thread management commands. When no subcommand is provided, defaults to listing threads.").option("--include-archived","Include archived threads in the list").action(async(W,H)=>{let q=H.optsWithGlobals(),I=await g5(q);await n6A(q,I,H)});Y.command("new").alias("n").summary("Create a new thread").description("Create a new thread and print its ID. The thread will be empty. You can set the visibility using the --visibility option.").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").action(async(W,H)=>{let q=H.optsWithGlobals(),I=await g5(q);await kr5(q,I,H)}),Y.command("continue [threadIDOrURL]").alias("c").summary("Continue an existing thread").description("Continue an existing thread by resuming the conversation. By default, interactive mode shows a picker. Use --last to continue the last thread for the current mode directly.").option("--last","Continue the last thread for the current mode directly").option("--pick","Pick a thread interactively from a list (DEPRECATED: picker is now the default)").action(async(W,H,q)=>{let I=q.optsWithGlobals(),N=await g5(I);if(H.pick)OJ.write(`${n0.yellow("Warning:")} The --pick flag is deprecated. The picker is now shown by default.
|
|
@@ -7652,8 +7652,8 @@ ${L}
|
|
|
7652
7652
|
`))}),H.args.length>0)Fr5(I,H);await UK0(I,q,H,A)}),Gf4(Q),Q}async function Wb(A,Q){await DJ((B)=>NX0(B,A,Q))}async function l6A(A,Q,B){let $=Date.now(),[J,Y]=await Promise.all([YA.getThreadLinkInfo({thread:A},{config:Q}),B]);if(j.getChild("fetchAndStartThread").info(`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.
|
|
7653
7653
|
|
|
7654
7654
|
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 t6A(A){if(A.streamJsonInput)return{userInput:"",stdinInput:null};if(typeof A.execute==="string"){let Q=(await fG0()).trimEnd();return{userInput:A.execute,stdinInput:Q||null}}return{userInput:(await fG0()).trimEnd(),stdinInput:null}}function e6A(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"
|
|
7655
|
-
Or pipe via stdin: echo "your message" | amp --execute`)}function Ur5(A,Q){if(i14([P50.parse({tool:"*",action:"allow"})]),f14({bypass:!0}),wo4(A.settings))j.debug("Enabling permissions plugin"),Q.registerInternalPlugin({name:"permissions",entryPoint:PA1})}async function UK0(A,Q,B,$){if(Q.headless)return Kr5(A,Q,B);let J=await h8(A,Q),Y=await J.serverStatusPromise,Z=await J.configService.getLatest(),F=xA(Y)&&KK0(Y.features,HB.THREAD_ACTORS_TUI),X=F&&!Q.takeMeBack;if(Q.showWelcome&&!F)throw await J.asyncDispose(),new J4("--show-welcome is only available with the new Amp CLI feature flag",1);if(X){let D=!A.executeMode&&await $r5();return Ur5(Z,J.pluginService),Er5(A,Q,B,J,{showNpmMigrationWelcome:D})}else{if(Q.threadId&&KQ(Q.threadId)){let D=await YA.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 zr5(A,Q,B,$,{dependencies:J})}}async function Kr5(A,Q,B){let $=(H,q)=>{let I=Number(process.hrtime.bigint()-q)/1e6,N=Xr0();j.info("Startup phase",{phase:H,phaseMs:Math.round(I),sinceMainMs:N===null?void 0:Math.round(N)})};S2(B,Q);let J=process.hrtime.bigint(),Y=await h8(A,Q);$("runMainThread:createThreadDependencies",J);let{serverStatus:Z}=Y;if(_X(Z))throw qt(Z,A.ampURL);let F=xA(Z)?Z:null,X=F?.user.email;await m81(B,Q,Z);let D=IR(Z),G=po(Q,D);if(G instanceof Error)y5(G.message);if(F&&!pT(Q.mode,X))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!X||!N7(X)))throw new J4("Headless executor mode is only available for Amp employees",1);iZ0();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&&!KQ(K))throw new J4(`Invalid thread ID: ${K}`,1);let E=K?void 0:await _r5({dependencies:Y,apiKey:U,visibility:G??void 0}),z=K??E?.threadId;if(!z)throw new J4("Failed to resolve headless thread ID",1);let W=await sy4(z);if(W.status==="already-running")await Y.asyncDispose(),await qz(),process.exit(0);try{await py4({ampURL:A.ampURL,apiKey:U,workspaceRoot:process.cwd(),threadId:z,ownerUserId:E?.ownerUserId,threadVersion:E?.threadVersion,agentMode:E?.agentMode,initialToolDiscovery:Promise.all([Y.mcpService.initialized,Y.toolboxService.initialized,Y.pluginService.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 W.release(),await Y.asyncDispose()}await qz(),process.exit(0)}async function Er5(A,Q,B,$,J){let{userInput:Y,stdinInput:Z}=await t6A(Q),F=!!Q.streamJson||!!Q.streamJsonThinking;e6A({...Q,streamJson:F},A.executeMode,Y),S2(B,Q),fk4(),iZ0();let X=Q.threadId&&KQ(Q.threadId)?Q.threadId:void 0,D=Q.observe?W2(Q.observe)??ZJ(Q.observe):void 0,G=await $.serverStatusPromise;if(_X(G))throw qt(G,A.ampURL);let V=await $.secretStorage.get("apiKey",A.ampURL);if(!V)throw new J4("API key required. Please run `amp login` first.",1);let U=xA(G)&&N7(G.user.email);if(A.executeMode){xt0($.mcpService,A.settings);try{let K=GK0(B,Q),E=await ZN(),z=X?K:zX0({agentMode:Q.mode,explicitEffort:K,sessionState:E}),W=X?void 0:WX0(await jx($.configService),{agentMode:Q.mode,explicitEffort:K,sessionState:E}),H=await zy4({apiKey:V,ampURL:A.ampURL,workspaceRoot:process.cwd(),dependencies:$,userInput:Y,stdinInput:Z,stats:!!Q.stats,streamJson:F,streamJsonThinking:!!Q.streamJsonThinking,streamJsonInput:!!Q.streamJsonInput,stdin:process.stdin,agentMode:Q.mode,reasoningEffort:z,labels:Q.label,initialThreadID:X,initialSettings:W});if(await Wb(H,"execute"),Q.archive)await $.threadService.archive(H,!0)}finally{await $.asyncDispose()}await qz(),process.exit(0)}else{let K=GK0(B,Q),E=J.showNpmMigrationWelcome?"npm-migration":"intro",z=Gl($.configService),W=new ys($.fuzzyServer),H=process.cwd();await Uo4({ampURL:A.ampURL,apiKey:V,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??TF(A.ampURL),configService:$.configService,toolService:$.toolService,pluginPlatform:$.pluginPlatform,pluginService:$.pluginService,skillService:$.skillService,mcpService:$.mcpService,readFileSystemDirectory:({uri:q})=>Yx({fileSystem:$.fileSystem,workspaceRoot:H},q),completionBuilder:W,workspaceRoot:H,listThreads:()=>z.listThreads(),getThreadFromServer:(q)=>z.getThread(q),toolboxes:$.toolboxService.toolboxes,isInternalUser:U,settingsFilePath:$.settingsStorage.getSettingsFilePath()},{initialThreadID:D??X,initialUserInput:Y||void 0,openThreadPickerOnStart:Q.openThreadSwitcher,observerOnly:!!D,splashOrbVisualStyle:"neo",showNeoWelcome:Q.showWelcome,neoWelcomeVariant:E,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,initialReasoningEffort:K}),process.exit(0)}}async function zr5(A,Q,B,$,J){let Y=process.hrtime.bigint(),Z=(Z0,R0)=>{let B0=Number(process.hrtime.bigint()-R0)/1e6,I0=Xr0();j.info("Startup phase",{phase:Z0,phaseMs:Math.round(B0),sinceMainMs:I0===null?void 0:Math.round(I0)})},{userInput:F,stdinInput:X}=await t6A(Q),D=!!Q.streamJson||!!Q.streamJsonThinking;e6A({...Q,streamJson:D},A.executeMode,F),S2(B,Q);let G=process.hrtime.bigint(),V=J?.dependencies??await h8(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&&_X(E))throw qt(E,A.ampURL);let z=xA(E)?E:null,W=z?.user.email,H=!!(W&&N7(W));if(H)iZ0();if(!K)await m81(B,Q,E);let q=IR(E),I=q?.features??[],N=q?.team??null,w=po(Q,q);if(w instanceof Error)y5(w.message);if(z&&!pT(Q.mode,W))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);let L=Q.threadId&&KQ(Q.threadId)?Q.threadId:void 0;G=process.hrtime.bigint();let O=await EK0(V);Z("runMainThread:createWorkerDeps",G);let P=A.executeMode?void 0:async(Z0)=>Wb(Z0,"interactive"),T={threadService:V.threadService,workerDeps:O,createThread:async(Z0)=>{let R0=K?await V.serverStatusPromise:E,B0=await nZ0(A.settings,process.cwd(),IR(R0),w);if(B0 instanceof Error)y5(B0.message);return K31(O,{threadMeta:B0?dY(B0):void 0,agentMode:Z0??Q.mode,onFirstAssistantMessage:P})},validateThreadOwnership:async(Z0,R0)=>{if(R0?.nonBlockingOwnershipCheck){l6A(Z0,V.configService,V.viewerUserIDPromise).catch((B0)=>{if(B0 instanceof J4){if(R0.onOwnershipError){R0.onOwnershipError(B0,Z0);return}Iz(B0,Z0);return}j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:B0})});return}try{await l6A(Z0,V.configService,V.viewerUserIDPromise)}catch(B0){if(B0 instanceof J4)throw B0;j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:B0})}},switchThreadVisibility:w,switchThreadAgentMode:Q.mode,onFirstAssistantMessage:P,handleError:Iz},k=async()=>{try{return H1A(T,Q.threadId,{nonBlockingOwnershipCheck:Q.nonBlockingThreadOwnershipCheck})}catch(Z0){if(Z0 instanceof J4)throw Z0;throw await Iz(Z0,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 Z0=await V.configService.getLatest(),R0=Nm(Z0),B0=await YA.getUserFreeTierStatus({},{config:V.configService,signal:AbortSignal.timeout(R0)});if(B0.ok)return j.info("User free tier status:",B0),B0.result;return}catch(Z0){j.error("Failed to fetch free tier status:",Z0);return}})(),u=!A.executeMode?new uA1:null,S,b=null;if(u)S=u,b=(async()=>{let Z0=K?await V.serverStatusPromise:V.serverStatus;if(_X(Z0))throw qt(Z0,A.ampURL);await m81(B,Q,Z0);let R0=process.hrtime.bigint(),B0=await k();if(Z("runMainThread:createThreadPool",R0),u.attach(B0),F){let I0=await k1(B0.threadHandles$);if(!I0)throw new J4("No active thread is available yet.",1);await I0.sendMessage({content:[{type:"text",text:F}]})}})(),b.catch(async(Z0)=>{let R0=Z0 instanceof Error?Z0:Error(String(Z0));u.setInitError(R0),await Iz(Z0,Q.threadId)});else G=process.hrtime.bigint(),S=await k(),Z("runMainThread:createThreadPool",G);let d=Q.notifications!==void 0?Q.notifications:!A.executeMode;G=process.hrtime.bigint();let c=await V.configService.getLatest();if(Z("runMainThread:configService.getLatest",G),G=process.hrtime.bigint(),Xr5({configService:V.configService,threadService:V.threadService,config:c,useNotificationsForService:d,threadViewStates$:()=>S.threadHandles$.pipe(u4((Z0)=>{if(!Z0)return m0.of({});return j6(Z0.thread$,Z0.threadViewState$).pipe(N1(([R0,B0])=>({[R0.id]:B0})))}))}),Z("runMainThread:createCliNotificationService",G),A.executeMode){xt0(V.mcpService,A.settings);let Z0=GK0(B,Q),R0=await ZN(),B0=L?Z0:zX0({agentMode:Q.mode,explicitEffort:Z0,sessionState:R0}),I0={userInput:F,stdinInput:X,dependencies:V,streamJson:D,streamJsonInput:!!Q.streamJsonInput,streamJsonThinking:!!Q.streamJsonThinking,stats:!!Q.stats,ampURL:A.ampURL,isInternalUser:H,agentMode:Q.mode,reasoningEffort:B0,labels:Q.label},n=await KS4({threadPool:S,...I0});if(await Wb(n,"execute"),Q.archive)await V.threadService.archive(n,!0);await V.asyncDispose(),process.exit(0)}let g=!1,l=!1;if(Q.jetbrains||Q.ide){await P30();let Z0=await SX({jetbrainsOnly:Q.jetbrains});if(Z0.length===0){if(Q.jetbrains)g=!await V.configService.get("jetbrains.skipInstall")}else if(Z0.length===1){let R0=Z0[0];if(R0)x3.selectConfig(R0)}else l=!0}G=process.hrtime.bigint();let s=Qt0("0.0.1778228828-g14902a",V.settingsStorage,{startDelayMs:3000});Z("runMainThread:createUpdateService",G),G=process.hrtime.bigint();let A0=new ft0(V.mcpService,A.settings.getWorkspaceRootPath());if(Z("runMainThread:createMcpTrustHandler",G),F&&A.executeMode){let Z0=await k1(S.threadHandles$);if(!Z0)throw new J4("No active thread is available yet.",1);await Z0.sendMessage({content:[{type:"text",text:F}]})}G=process.hrtime.bigint();let H0=await ZN();Z("runMainThread:loadSessionState",G),j.info("Loaded session state:",H0);let V0=GK0(B,Q),w0={...H0,launchCount:H0.launchCount+1,lastReasoningEffortByMode:V0?{...H0.lastReasoningEffortByMode,[Q.mode]:V0}:H0.lastReasoningEffortByMode};DJ((Z0)=>({...Z0,launchCount:Z0.launchCount+1}));try{if(G=process.hrtime.bigint(),await kr4({history:new ca,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,skillService:V.skillService,configService:V.configService,secretStorage:V.secretStorage,internalAPIClient:YA,threadPool:S,createSystemPromptDeps:async()=>r6A(V),ideClient:x3,mcpService:V.mcpService,toolboxService:V.toolboxService,mcpTrustHandler:A0,updateService:s,pluginPlatform:V.pluginPlatform,pluginService:V.pluginService},{initialServerStatus:V.serverStatus,stdout:process.stdout,hasAPIKeyAtStartup:V.hasAPIKeyAtStartup,ampURL:A.ampURL,startupThreadID:L,showJetBrainsInstaller:g,showIdePickerHint:l,openThreadSwitcher:Q.openThreadSwitcher,jetbrainsMode:Q.jetbrains,clientId:lo5,logFile:{path:$},sessionState:w0,freeTierStatusPromise:x,workspace:N??null,features:I,isInternalUser:H,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,splashOrbVisualStyle:Q.neoOrb?"neo":"classic",buildTimestamp:"2026-05-08T08:31:11.735Z"},(Z0)=>new lA1({...Z0,threadPool:Z0.threadPool},(R0)=>new V31({...R0,threadState:R0.threadState}))),Z("runMainThread:mountApp-returned",G),b)await b}finally{await S.dispose().catch((Z0)=>{j.error("Failed to dispose thread pool during shutdown",Z0)})}await V.asyncDispose(),Z("runMainThread:dependencies.asyncDispose",Y),process.exit(0)}async function g5(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)OJ.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
7656
|
-
`);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 K94({get:async(F)=>{if(F!==Md)return;try{let X=await o6A(g81,"utf-8");return JSON.parse(X).installationID}catch{return}},set:async(F,X)=>{if(F!==Md)return;await mo5(Ht.dirname(g81),{recursive:!0}),await po5(g81,JSON.stringify({installationID:X},null,2),{mode:384})}},{clientType:"cli",platform:t20()});Mt1($);let J=await Gx4({...A,workspaceTrust:{current:!0,changes:KT0},getHook:process.env.AMP_URL?(F,X)=>{if(F==="url")return Promise.resolve(process.env.AMP_URL);return X()}:void 0});if(A.mcpConfig){let F=await Yu4(A.mcpConfig);J=Zu4(J,F)}let Y=Ht.dirname(J.getSettingsFilePath());Ej4(Kx,Y),J=Qr1(J);let Z=await J.get("url","admin")??await J.get("url","global");if(!Z)Z=w7;if(j.info("Resolved Amp URL",{ampURL:Z,settingsFile:J.getSettingsFilePath(),workspaceRoot:J.getWorkspaceRootPath()}),!LH(Z))j.info("Targeting custom Amp server",{ampURL:Z});return{executeMode:Q,isTTY:B,ampURL:Z,settings:J,secrets:vo4(await vs0(A,J))}}function Wr5(A){let Q={};for(let B=0;B<A.length;B++){let $=A[B];if($?.startsWith("--")){let Y=$.slice(2).replace(/-([a-z])/g,(F,X)=>X.toUpperCase()),Z=A[B+1];if(Z&&!Z.startsWith("--"))Q[Y]=Z,B++}}return Q}function Hr5(A,Q){let B=A.includes("--headless")||A.some((J)=>J.startsWith("--headless=")),$=Ht.resolve(Q.logFile??process.env.AMP_LOG_FILE??(B?co5:ka));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:$}}async function qr5(){Tk4();let A=Wr5(process.argv),Q=Hr5(process.argv,A),B=bk4(Q);HZ0("silent");let $=process.argv.includes("--no-color"),J=process.argv.includes("--color"),Y=process.stdout.isTTY&&process.stderr.isTTY;if($||!J&&!Y)n0.level=0;if(no5(j),j.info("Starting Amp CLI.",{version:"0.0.
|
|
7655
|
+
Or pipe via stdin: echo "your message" | amp --execute`)}function Ur5(A,Q){if(i14([P50.parse({tool:"*",action:"allow"})]),f14({bypass:!0}),wo4(A.settings))j.debug("Enabling permissions plugin"),Q.registerInternalPlugin({name:"permissions",entryPoint:PA1})}async function UK0(A,Q,B,$){if(Q.headless)return Kr5(A,Q,B);let J=await h8(A,Q),Y=await J.serverStatusPromise,Z=await J.configService.getLatest(),F=xA(Y)&&KK0(Y.features,HB.THREAD_ACTORS_TUI),X=F&&!Q.takeMeBack;if(Q.showWelcome&&!F)throw await J.asyncDispose(),new J4("--show-welcome is only available with the new Amp CLI feature flag",1);if(X){let D=!A.executeMode&&await $r5();return Ur5(Z,J.pluginService),Er5(A,Q,B,J,{showNpmMigrationWelcome:D})}else{if(Q.threadId&&KQ(Q.threadId)){let D=await YA.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 zr5(A,Q,B,$,{dependencies:J})}}async function Kr5(A,Q,B){let $=(H,q)=>{let I=Number(process.hrtime.bigint()-q)/1e6,N=Xr0();j.info("Startup phase",{phase:H,phaseMs:Math.round(I),sinceMainMs:N===null?void 0:Math.round(N)})};S2(B,Q);let J=process.hrtime.bigint(),Y=await h8(A,Q);$("runMainThread:createThreadDependencies",J);let{serverStatus:Z}=Y;if(_X(Z))throw qt(Z,A.ampURL);let F=xA(Z)?Z:null,X=F?.user.email;await m81(B,Q,Z);let D=IR(Z),G=po(Q,D);if(G instanceof Error)y5(G.message);if(F&&!pT(Q.mode,X))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!X||!N7(X)))throw new J4("Headless executor mode is only available for Amp employees",1);iZ0();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&&!KQ(K))throw new J4(`Invalid thread ID: ${K}`,1);let E=K?void 0:await _r5({dependencies:Y,apiKey:U,visibility:G??void 0}),z=K??E?.threadId;if(!z)throw new J4("Failed to resolve headless thread ID",1);let W=await sy4(z);if(W.status==="already-running")await Y.asyncDispose(),await qz(),process.exit(0);try{await py4({ampURL:A.ampURL,apiKey:U,workspaceRoot:process.cwd(),threadId:z,ownerUserId:E?.ownerUserId,threadVersion:E?.threadVersion,agentMode:E?.agentMode,initialToolDiscovery:Promise.all([Y.mcpService.initialized,Y.toolboxService.initialized,Y.pluginService.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 W.release(),await Y.asyncDispose()}await qz(),process.exit(0)}async function Er5(A,Q,B,$,J){let{userInput:Y,stdinInput:Z}=await t6A(Q),F=!!Q.streamJson||!!Q.streamJsonThinking;e6A({...Q,streamJson:F},A.executeMode,Y),S2(B,Q),fk4(),iZ0();let X=Q.threadId&&KQ(Q.threadId)?Q.threadId:void 0,D=Q.observe?W2(Q.observe)??ZJ(Q.observe):void 0,G=await $.serverStatusPromise;if(_X(G))throw qt(G,A.ampURL);let V=await $.secretStorage.get("apiKey",A.ampURL);if(!V)throw new J4("API key required. Please run `amp login` first.",1);let U=xA(G)&&N7(G.user.email);if(A.executeMode){xt0($.mcpService,A.settings);try{let K=GK0(B,Q),E=await ZN(),z=X?K:zX0({agentMode:Q.mode,explicitEffort:K,sessionState:E}),W=X?void 0:WX0(await jx($.configService),{agentMode:Q.mode,explicitEffort:K,sessionState:E}),H=await zy4({apiKey:V,ampURL:A.ampURL,workspaceRoot:process.cwd(),dependencies:$,userInput:Y,stdinInput:Z,stats:!!Q.stats,streamJson:F,streamJsonThinking:!!Q.streamJsonThinking,streamJsonInput:!!Q.streamJsonInput,stdin:process.stdin,agentMode:Q.mode,reasoningEffort:z,labels:Q.label,initialThreadID:X,initialSettings:W});if(await Wb(H,"execute"),Q.archive)await $.threadService.archive(H,!0)}finally{await $.asyncDispose()}await qz(),process.exit(0)}else{let K=GK0(B,Q),E=J.showNpmMigrationWelcome?"npm-migration":"intro",z=Gl($.configService),W=new ys($.fuzzyServer),H=process.cwd();await Uo4({ampURL:A.ampURL,apiKey:V,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??TF(A.ampURL),configService:$.configService,toolService:$.toolService,pluginPlatform:$.pluginPlatform,pluginService:$.pluginService,skillService:$.skillService,mcpService:$.mcpService,readFileSystemDirectory:({uri:q})=>Yx({fileSystem:$.fileSystem,workspaceRoot:H},q),completionBuilder:W,workspaceRoot:H,listThreads:()=>z.listThreads(),getThreadFromServer:(q)=>z.getThread(q),toolboxes:$.toolboxService.toolboxes,isInternalUser:U,settingsFilePath:$.settingsStorage.getSettingsFilePath()},{initialThreadID:D??X,initialUserInput:Y||void 0,openThreadPickerOnStart:Q.openThreadSwitcher,observerOnly:!!D,splashOrbVisualStyle:"neo",showNeoWelcome:Q.showWelcome,neoWelcomeVariant:E,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,initialReasoningEffort:K}),process.exit(0)}}async function zr5(A,Q,B,$,J){let Y=process.hrtime.bigint(),Z=(Z0,R0)=>{let B0=Number(process.hrtime.bigint()-R0)/1e6,I0=Xr0();j.info("Startup phase",{phase:Z0,phaseMs:Math.round(B0),sinceMainMs:I0===null?void 0:Math.round(I0)})},{userInput:F,stdinInput:X}=await t6A(Q),D=!!Q.streamJson||!!Q.streamJsonThinking;e6A({...Q,streamJson:D},A.executeMode,F),S2(B,Q);let G=process.hrtime.bigint(),V=J?.dependencies??await h8(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&&_X(E))throw qt(E,A.ampURL);let z=xA(E)?E:null,W=z?.user.email,H=!!(W&&N7(W));if(H)iZ0();if(!K)await m81(B,Q,E);let q=IR(E),I=q?.features??[],N=q?.team??null,w=po(Q,q);if(w instanceof Error)y5(w.message);if(z&&!pT(Q.mode,W))throw new J4(`Agent mode '${Q.mode}' is only available for Amp employees`,1);let L=Q.threadId&&KQ(Q.threadId)?Q.threadId:void 0;G=process.hrtime.bigint();let O=await EK0(V);Z("runMainThread:createWorkerDeps",G);let P=A.executeMode?void 0:async(Z0)=>Wb(Z0,"interactive"),T={threadService:V.threadService,workerDeps:O,createThread:async(Z0)=>{let R0=K?await V.serverStatusPromise:E,B0=await nZ0(A.settings,process.cwd(),IR(R0),w);if(B0 instanceof Error)y5(B0.message);return K31(O,{threadMeta:B0?dY(B0):void 0,agentMode:Z0??Q.mode,onFirstAssistantMessage:P})},validateThreadOwnership:async(Z0,R0)=>{if(R0?.nonBlockingOwnershipCheck){l6A(Z0,V.configService,V.viewerUserIDPromise).catch((B0)=>{if(B0 instanceof J4){if(R0.onOwnershipError){R0.onOwnershipError(B0,Z0);return}Iz(B0,Z0);return}j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:B0})});return}try{await l6A(Z0,V.configService,V.viewerUserIDPromise)}catch(B0){if(B0 instanceof J4)throw B0;j.warn("Failed to validate thread ownership in CLI, allowing to open",{error:B0})}},switchThreadVisibility:w,switchThreadAgentMode:Q.mode,onFirstAssistantMessage:P,handleError:Iz},k=async()=>{try{return H1A(T,Q.threadId,{nonBlockingOwnershipCheck:Q.nonBlockingThreadOwnershipCheck})}catch(Z0){if(Z0 instanceof J4)throw Z0;throw await Iz(Z0,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 Z0=await V.configService.getLatest(),R0=Nm(Z0),B0=await YA.getUserFreeTierStatus({},{config:V.configService,signal:AbortSignal.timeout(R0)});if(B0.ok)return j.info("User free tier status:",B0),B0.result;return}catch(Z0){j.error("Failed to fetch free tier status:",Z0);return}})(),u=!A.executeMode?new uA1:null,S,b=null;if(u)S=u,b=(async()=>{let Z0=K?await V.serverStatusPromise:V.serverStatus;if(_X(Z0))throw qt(Z0,A.ampURL);await m81(B,Q,Z0);let R0=process.hrtime.bigint(),B0=await k();if(Z("runMainThread:createThreadPool",R0),u.attach(B0),F){let I0=await k1(B0.threadHandles$);if(!I0)throw new J4("No active thread is available yet.",1);await I0.sendMessage({content:[{type:"text",text:F}]})}})(),b.catch(async(Z0)=>{let R0=Z0 instanceof Error?Z0:Error(String(Z0));u.setInitError(R0),await Iz(Z0,Q.threadId)});else G=process.hrtime.bigint(),S=await k(),Z("runMainThread:createThreadPool",G);let d=Q.notifications!==void 0?Q.notifications:!A.executeMode;G=process.hrtime.bigint();let c=await V.configService.getLatest();if(Z("runMainThread:configService.getLatest",G),G=process.hrtime.bigint(),Xr5({configService:V.configService,threadService:V.threadService,config:c,useNotificationsForService:d,threadViewStates$:()=>S.threadHandles$.pipe(u4((Z0)=>{if(!Z0)return m0.of({});return j6(Z0.thread$,Z0.threadViewState$).pipe(N1(([R0,B0])=>({[R0.id]:B0})))}))}),Z("runMainThread:createCliNotificationService",G),A.executeMode){xt0(V.mcpService,A.settings);let Z0=GK0(B,Q),R0=await ZN(),B0=L?Z0:zX0({agentMode:Q.mode,explicitEffort:Z0,sessionState:R0}),I0={userInput:F,stdinInput:X,dependencies:V,streamJson:D,streamJsonInput:!!Q.streamJsonInput,streamJsonThinking:!!Q.streamJsonThinking,stats:!!Q.stats,ampURL:A.ampURL,isInternalUser:H,agentMode:Q.mode,reasoningEffort:B0,labels:Q.label},n=await KS4({threadPool:S,...I0});if(await Wb(n,"execute"),Q.archive)await V.threadService.archive(n,!0);await V.asyncDispose(),process.exit(0)}let g=!1,l=!1;if(Q.jetbrains||Q.ide){await P30();let Z0=await SX({jetbrainsOnly:Q.jetbrains});if(Z0.length===0){if(Q.jetbrains)g=!await V.configService.get("jetbrains.skipInstall")}else if(Z0.length===1){let R0=Z0[0];if(R0)x3.selectConfig(R0)}else l=!0}G=process.hrtime.bigint();let s=Qt0("0.0.1778235017-g38b248",V.settingsStorage,{startDelayMs:3000});Z("runMainThread:createUpdateService",G),G=process.hrtime.bigint();let A0=new ft0(V.mcpService,A.settings.getWorkspaceRootPath());if(Z("runMainThread:createMcpTrustHandler",G),F&&A.executeMode){let Z0=await k1(S.threadHandles$);if(!Z0)throw new J4("No active thread is available yet.",1);await Z0.sendMessage({content:[{type:"text",text:F}]})}G=process.hrtime.bigint();let H0=await ZN();Z("runMainThread:loadSessionState",G),j.info("Loaded session state:",H0);let V0=GK0(B,Q),w0={...H0,launchCount:H0.launchCount+1,lastReasoningEffortByMode:V0?{...H0.lastReasoningEffortByMode,[Q.mode]:V0}:H0.lastReasoningEffortByMode};DJ((Z0)=>({...Z0,launchCount:Z0.launchCount+1}));try{if(G=process.hrtime.bigint(),await kr4({history:new ca,fuzzyServer:V.fuzzyServer,settingsStorage:V.settingsStorage,threadService:V.threadService,skillService:V.skillService,configService:V.configService,secretStorage:V.secretStorage,internalAPIClient:YA,threadPool:S,createSystemPromptDeps:async()=>r6A(V),ideClient:x3,mcpService:V.mcpService,toolboxService:V.toolboxService,mcpTrustHandler:A0,updateService:s,pluginPlatform:V.pluginPlatform,pluginService:V.pluginService},{initialServerStatus:V.serverStatus,stdout:process.stdout,hasAPIKeyAtStartup:V.hasAPIKeyAtStartup,ampURL:A.ampURL,startupThreadID:L,showJetBrainsInstaller:g,showIdePickerHint:l,openThreadSwitcher:Q.openThreadSwitcher,jetbrainsMode:Q.jetbrains,clientId:lo5,logFile:{path:$},sessionState:w0,freeTierStatusPromise:x,workspace:N??null,features:I,isInternalUser:H,initialAgentMode:B.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,splashOrbVisualStyle:Q.neoOrb?"neo":"classic",buildTimestamp:"2026-05-08T10:14:11.559Z"},(Z0)=>new lA1({...Z0,threadPool:Z0.threadPool},(R0)=>new V31({...R0,threadState:R0.threadState}))),Z("runMainThread:mountApp-returned",G),b)await b}finally{await S.dispose().catch((Z0)=>{j.error("Failed to dispose thread pool during shutdown",Z0)})}await V.asyncDispose(),Z("runMainThread:dependencies.asyncDispose",Y),process.exit(0)}async function g5(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)OJ.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
|
|
7656
|
+
`);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 K94({get:async(F)=>{if(F!==Md)return;try{let X=await o6A(g81,"utf-8");return JSON.parse(X).installationID}catch{return}},set:async(F,X)=>{if(F!==Md)return;await mo5(Ht.dirname(g81),{recursive:!0}),await po5(g81,JSON.stringify({installationID:X},null,2),{mode:384})}},{clientType:"cli",platform:t20()});Mt1($);let J=await Gx4({...A,workspaceTrust:{current:!0,changes:KT0},getHook:process.env.AMP_URL?(F,X)=>{if(F==="url")return Promise.resolve(process.env.AMP_URL);return X()}:void 0});if(A.mcpConfig){let F=await Yu4(A.mcpConfig);J=Zu4(J,F)}let Y=Ht.dirname(J.getSettingsFilePath());Ej4(Kx,Y),J=Qr1(J);let Z=await J.get("url","admin")??await J.get("url","global");if(!Z)Z=w7;if(j.info("Resolved Amp URL",{ampURL:Z,settingsFile:J.getSettingsFilePath(),workspaceRoot:J.getWorkspaceRootPath()}),!LH(Z))j.info("Targeting custom Amp server",{ampURL:Z});return{executeMode:Q,isTTY:B,ampURL:Z,settings:J,secrets:vo4(await vs0(A,J))}}function Wr5(A){let Q={};for(let B=0;B<A.length;B++){let $=A[B];if($?.startsWith("--")){let Y=$.slice(2).replace(/-([a-z])/g,(F,X)=>X.toUpperCase()),Z=A[B+1];if(Z&&!Z.startsWith("--"))Q[Y]=Z,B++}}return Q}function Hr5(A,Q){let B=A.includes("--headless")||A.some((J)=>J.startsWith("--headless=")),$=Ht.resolve(Q.logFile??process.env.AMP_LOG_FILE??(B?co5:ka));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:$}}async function qr5(){Tk4();let A=Wr5(process.argv),Q=Hr5(process.argv,A),B=bk4(Q);HZ0("silent");let $=process.argv.includes("--no-color"),J=process.argv.includes("--color"),Y=process.stdout.isTTY&&process.stderr.isTTY;if($||!J&&!Y)n0.level=0;if(no5(j),j.info("Starting Amp CLI.",{version:"0.0.1778235017-g38b248",buildTimestamp:"2026-05-08T10:14:11.559Z"}),process.platform==="win32"&&Gj())sx4();if(parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new J4(A7.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await Vr5(B).parseAsync(process.argv)}Uj4().startActiveSpan("main",async(A)=>{process.on("exit",()=>A.end()),await qr5().catch(Iz)});async function Ir5(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"),Y5.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
|
|
7657
7657
|
`);else if(!LH(A.ampURL))Y5.write(`Logging in to ${new URL(A.ampURL).hostname}
|
|
7658
7658
|
`);let $=process.env.AMP_API_KEY;if($)Y5.write(`API key found in environment variable, storing...
|
|
7659
7659
|
`),await Q.set("apiKey",$,A.ampURL),Y5.write(`API key successfully stored.
|