@sourcegraph/amp 0.0.1779345702-g49e69d → 0.0.1779354043-g150a4f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.js +11 -11
  2. package/package.json +2 -2
package/dist/main.js CHANGED
@@ -4566,7 +4566,7 @@ ${Y8(hQ3)}
4566
4566
  `)+$,D=B+1,B=A.indexOf(`
4567
4567
  `,D)}while(B!==-1);return J+=A.slice(D),J}var{stdout:cu4,stderr:lu4}=mu4,to0=Symbol("GENERATOR"),Ff=Symbol("STYLER"),la=Symbol("IS_EMPTY"),iu4=["ansi","ansi","ansi256","ansi16m"],Yf=Object.create(null),K$3=(A,Q={})=>{if(Q.level&&!(Number.isInteger(Q.level)&&Q.level>=0&&Q.level<=3))throw Error("The `level` option should be an integer from 0 to 3");let $=cu4?cu4.level:0;A.level=Q.level===void 0?$:Q.level};var z$3=(A)=>{let Q=(...$)=>$.join(" ");return K$3(Q,A),Object.setPrototypeOf(Q,ia.prototype),Q};function ia(A){return z$3(A)}Object.setPrototypeOf(ia.prototype,Function.prototype);for(let[A,Q]of Object.entries(fZ))Yf[A]={get(){let $=sF0(this,Ar0(Q.open,Q.close,this[Ff]),this[la]);return Object.defineProperty(this,A,{value:$}),$}};Yf.visible={get(){let A=sF0(this,this[Ff],!0);return Object.defineProperty(this,"visible",{value:A}),A}};var eo0=(A,Q,$,...B)=>{if(A==="rgb"){if(Q==="ansi16m")return fZ[$].ansi16m(...B);if(Q==="ansi256")return fZ[$].ansi256(fZ.rgbToAnsi256(...B));return fZ[$].ansi(fZ.rgbToAnsi(...B))}if(A==="hex")return eo0("rgb",Q,$,...fZ.hexToRgb(...B));return fZ[$][A](...B)},I$3=["rgb","hex","ansi256"];for(let A of I$3){Yf[A]={get(){let{level:$}=this;return function(...B){let D=Ar0(eo0(A,iu4[$],"color",...B),fZ.color.close,this[Ff]);return sF0(this,D,this[la])}}};let Q="bg"+A[0].toUpperCase()+A.slice(1);Yf[Q]={get(){let{level:$}=this;return function(...B){let D=Ar0(eo0(A,iu4[$],"bgColor",...B),fZ.bgColor.close,this[Ff]);return sF0(this,D,this[la])}}}}var W$3=Object.defineProperties(()=>{},{...Yf,level:{enumerable:!0,get(){return this[to0].level},set(A){this[to0].level=A}}}),Ar0=(A,Q,$)=>{let B,D;if($===void 0)B=A,D=Q;else B=$.openAll+A,D=Q+$.closeAll;return{open:A,close:Q,openAll:B,closeAll:D,parent:$}},sF0=(A,Q,$)=>{let B=(...D)=>H$3(B,D.length===1?""+D[0]:D.join(" "));return Object.setPrototypeOf(B,W$3),B[to0]=A,B[Ff]=Q,B[la]=$,B},H$3=(A,Q)=>{if(A.level<=0||!Q)return A[la]?"":Q;let $=A[Ff];if($===void 0)return Q;let{openAll:B,closeAll:D}=$;if(Q.includes("\x1B"))while($!==void 0)Q=du4(Q,$.close,$.open),$=$.parent;let J=Q.indexOf(`
4568
4568
  `);if(J!==-1)Q=pu4(Q,D,B,J);return B+Q+D};Object.defineProperties(ia.prototype,Yf);var q$3=ia(),MV2=ia({level:lu4?lu4.level:0});var t0=q$3;var Z_4=b4(E_4(),1),{program:TV2,createCommand:vV2,createArgument:kV2,createOption:SV2,CommanderError:U_4,InvalidArgumentError:X_4,InvalidOptionArgumentError:fV2,Command:JN,Argument:yV2,Option:IG,Help:xV2}=Z_4.default;var aa="internal_error",V_4="An internal error occurred";function e$3(A){return typeof A==="object"&&A!==null&&(("public"in A)||("metadata"in A)||("statusCode"in A)||("actor"in A)||("cause"in A))}function AB3(A){return A==="ActorError"||A==="RivetError"}function QB3(A,Q=String(A)){if(A&&typeof A==="object"&&"message"in A&&typeof A.message==="string")return A.message;return Q}function G_4(A){return typeof A==="object"&&A!==null&&"group"in A&&typeof A.group==="string"&&"code"in A&&typeof A.code==="string"&&"message"in A&&typeof A.message==="string"&&(!("__type"in A)||AB3(A.__type))}var T3=class extends Error{__type="RivetError";public;metadata;statusCode;actor;group;code;static isRivetError(A){return G_4(A)}static isActorError(A){return G_4(A)}constructor(A,Q,$,B){let D=e$3(B)?B:{metadata:B};super($,{cause:D.cause});this.name="RivetError",this.group=A,this.code=Q,this.public=D.public??!1,this.metadata=D.metadata,this.statusCode=D.statusCode??(this.public?400:500),this.actor=D.actor}toString(){return this.message}};function eF0(A){return new T3("request","invalid",`Invalid request: ${QB3(A,String(A))}`,{public:!0,cause:A instanceof Error?A:void 0})}function K_4(A){return new T3("actor","not_found",A?`Actor not found: ${A} (https://www.rivet.dev/docs/clients/javascript)`:"Actor not found (https://www.rivet.dev/docs/clients/javascript)",{public:!0})}fQ();var wY0=b4(Gv4(),1),zv4=()=>gY("RIVET_ENGINE"),Iv4=()=>gY("RIVET_ENDPOINT"),Wv4=()=>gY("RIVET_TOKEN"),Hv4=()=>gY("RIVET_NAMESPACE"),qv4=()=>gY("RIVET_POOL");var TY3=()=>gY("RIVET_LOG_LEVEL")??gY("LOG_LEVEL"),vY3=()=>gY("RIVET_LOG_TARGET")==="1",kY3=()=>gY("RIVET_LOG_TIMESTAMP")==="1",Nv4=()=>gY("RIVET_LOG_MESSAGE")==="1",SY3=()=>gY("RIVET_LOG_ERROR_STACK")==="1";var wv4=()=>gY("NEXT_PHASE");function zj(A){throw Error(`Unreachable case: ${A}`)}function fY3(A){return A instanceof T3||typeof A==="object"&&A!==null&&"__type"in A&&A.__type==="RivetError"&&"group"in A&&typeof A.group==="string"&&"code"in A&&typeof A.code==="string"&&"message"in A&&typeof A.message==="string"}function ta(A,Q=!1){let $,B,D,J,F,Y,E;if(fY3(A))$=typeof A.statusCode==="number"?A.statusCode:A.public?400:500,B=A.public??!1,D=A.group,J=A.code,F=A.message,Y=A.metadata,E=A.actor;else if(T3.isActorError(A)&&A.public)$="statusCode"in A&&A.statusCode?A.statusCode:400,B=!0,D=A.group,J=A.code,F=NY0(A),Y=A.metadata,E=A.actor;else if(Q)if(T3.isActorError(A))$=500,B=!1,D=A.group,J=A.code,F=NY0(A),Y=A.metadata,E=A.actor;else $=500,B=!1,D="rivetkit",J=aa,F=NY0(A);else{if($=500,B=!1,D="rivetkit",J=aa,F=V_4,T3.isActorError(A))E=A.actor;Y={}}return{__type:"ActorError",statusCode:$,public:B,group:D,code:J,message:F,metadata:Y,actor:E}}function m9(A){if(A instanceof Error)if(typeof process<"u"&&SY3()){let Q;try{Q=A.stack}catch{Q=void 0}return`${A.name}: ${A.message}${Q?`
4569
- ${Q}`:""}`}else return`${A.name}: ${A.message}`;else if(typeof A==="string")return A;else if(typeof A==="object"&&A!==null)try{return`${JSON.stringify(A)}`}catch{return"[cannot stringify error]"}else return`Unknown error: ${NY0(A)}`}function NY0(A){if(A&&typeof A==="object"&&"message"in A&&typeof A.message==="string")return A.message;else return String(A)}function Cv4(){return async()=>{}}var yY3={name:"rivetkit",version:"0.0.0-rivetkit-shutdown-use-engine-stop-threshold.837e20f",description:"Lightweight libraries for building stateful actors on edge platforms",license:"Apache-2.0",keywords:["rivetkit","stateful","serverless","actors","agents","realtime","websocket","actors","framework"],files:["dist","schemas","src","package.json"],type:"module",exports:{".":{import:{types:"./dist/tsup/mod.d.ts",default:"./dist/tsup/mod.js"},require:{types:"./dist/tsup/mod.d.cts",default:"./dist/tsup/mod.cjs"}},"./workflow":{import:{types:"./dist/tsup/workflow/mod.d.ts",default:"./dist/tsup/workflow/mod.js"},require:{types:"./dist/tsup/workflow/mod.d.cts",default:"./dist/tsup/workflow/mod.cjs"}},"./test":{import:{types:"./dist/tsup/test/mod.d.ts",default:"./dist/tsup/test/mod.js"},require:{types:"./dist/tsup/test/mod.d.cts",default:"./dist/tsup/test/mod.cjs"}},"./db":{import:{types:"./dist/tsup/db/mod.d.ts",default:"./dist/tsup/db/mod.js"},require:{types:"./dist/tsup/db/mod.d.cts",default:"./dist/tsup/db/mod.cjs"}},"./db/drizzle":{import:{types:"./dist/tsup/db/drizzle.d.ts",default:"./dist/tsup/db/drizzle.js"},require:{types:"./dist/tsup/db/drizzle.d.cts",default:"./dist/tsup/db/drizzle.cjs"}},"./client":{import:{browser:{types:"./dist/browser/client.d.ts",default:"./dist/browser/client.js"},types:"./dist/tsup/client/mod.d.ts",default:"./dist/tsup/client/mod.js"},require:{types:"./dist/tsup/client/mod.d.cts",default:"./dist/tsup/client/mod.cjs"}},"./log":{import:{types:"./dist/tsup/common/log.d.ts",default:"./dist/tsup/common/log.js"},require:{types:"./dist/tsup/common/log.d.cts",default:"./dist/tsup/common/log.cjs"}},"./errors":{import:{types:"./dist/tsup/actor/errors.d.ts",default:"./dist/tsup/actor/errors.js"},require:{types:"./dist/tsup/actor/errors.d.cts",default:"./dist/tsup/actor/errors.cjs"}},"./inspector":{import:{types:"./dist/tsup/inspector/mod.d.ts",default:"./dist/tsup/inspector/mod.js"},require:{types:"./dist/tsup/inspector/mod.d.cts",default:"./dist/tsup/inspector/mod.cjs"}},"./inspector/client":{import:{types:"./dist/browser/inspector/client.d.ts",default:"./dist/browser/inspector/client.js"}},"./utils":{import:{types:"./dist/tsup/utils.d.ts",default:"./dist/tsup/utils.js"},require:{types:"./dist/tsup/utils.d.cts",default:"./dist/tsup/utils.cjs"}},"./agent-os":{import:{types:"./dist/tsup/agent-os/index.d.ts",default:"./dist/tsup/agent-os/index.js"},require:{types:"./dist/tsup/agent-os/index.d.cts",default:"./dist/tsup/agent-os/index.cjs"}}},engines:{node:">=22.0.0"},sideEffects:["./dist/tsup/chunk-*.js","./dist/tsup/chunk-*.cjs"],scripts:{build:"tsup src/mod.ts src/client/mod.ts src/common/log.ts src/common/websocket.ts src/actor/errors.ts src/utils.ts src/workflow/mod.ts src/test/mod.ts src/inspector/mod.ts src/db/mod.ts src/db/drizzle.ts && tsup src/agent-os/index.ts --no-clean --out-dir dist/tsup/agent-os","build:browser":"tsup --config tsup.browser.config.ts","check-types":"tsc --noEmit",lint:"biome check . && pnpm run check:test-skips && pnpm run check:wait-for-comments","lint:fix":"biome check --write .","check:test-skips":"tsx scripts/check-annotated-skips.ts","check:wait-for-comments":"tsx scripts/check-wait-for-comments.ts",format:"biome format .","format:write":"biome format --write .",test:"vitest run","test:platforms":"pnpm run build && RIVETKIT_INCLUDE_PLATFORM_TESTS=1 vitest run tests/platforms --passWithNoTests","test:watch":"vitest","dump-asyncapi":"tsx scripts/dump-asyncapi.ts","registry-config-schema-gen":"tsx scripts/registry-config-schema-gen.ts","actor-config-schema-gen":"tsx scripts/actor-config-schema-gen.ts"},dependencies:{"@rivet-dev/agent-os-core":"^0.1.1","@hono/node-server":"^1.18.2","@hono/node-ws":"^1.1.1","@hono/zod-openapi":"^1.1.5","@rivetkit/bare-ts":"^0.6.2","@rivetkit/engine-cli":"workspace:*","@rivetkit/engine-envoy-protocol":"workspace:*","@rivetkit/rivetkit-napi":"workspace:*","@rivetkit/rivetkit-wasm":"workspace:*","@rivetkit/traces":"workspace:*","@rivetkit/virtual-websocket":"workspace:*","@rivetkit/workflow-engine":"workspace:*","cbor-x":"^1.6.0","drizzle-orm":"^0.44.2","get-port":"^7.1.0",hono:"^4.7.0",invariant:"^2.2.4","p-retry":"^6.2.1",pino:"^9.5.0",uuid:"^12.0.0",vbare:"^0.0.4",zod:"^4.1.0"},devDependencies:{"@copilotkit/llmock":"^1.6.0","@rivet-dev/agent-os-common":"*","@rivet-dev/agent-os-pi":"^0.1.1","@biomejs/biome":"^2.3","@standard-schema/spec":"^1.0.0","@types/invariant":"^2","@types/node":"^22.13.1",eventsource:"^4.0.0",tsup:"^8.4.0",tsx:"^4.19.4",typescript:"^5.7.3","vite-tsconfig-paths":"^5.1.4",vitest:"^3.1.1",ws:"^8.18.1"},peerDependencies:{"drizzle-kit":"^0.31.2",eventsource:"^4.0.0",ws:"^8.0.0"},peerDependenciesMeta:{"drizzle-kit":{optional:!0},eventsource:{optional:!0},ws:{optional:!0}},stableVersion:"0.8.0"},As0,Qs0,$s0=new Map,Mv4=x.enum(["trace","debug","info","warn","error","fatal","silent"]);function Lv4(A){if(A)return A;if(Qs0)return Qs0;let Q=(TY3()||"warn").toString().toLowerCase(),$=Mv4.safeParse(Q);if($.success)return $.data;return"info"}function Ov4(){return vY3()}function CY0(A){if(A)Qs0=A;As0=wY0.pino({level:Lv4(A),messageKey:"msg",base:{},formatters:{level(Q,$){return{level:$}}},timestamp:kY3()?wY0.stdTimeFunctions.epochTime:!1},bY3()),$s0.clear()}function jv4(){if(!As0)CY0();return As0}function YN(A="default"){let Q=$s0.get(A);if(Q)return Q;let $=jv4(),B=Ov4()?$.child({target:A}):$;return $s0.set(A,B),B}var xY3={10:"trace",20:"debug",30:"info",40:"warn",50:"error",60:"fatal"};function bY3(){return{write(A){var Q;let $=hY3(A);if(typeof process<"u"&&((Q=process.stdout)==null?void 0:Q.write))process.stdout.write(`${$}
4569
+ ${Q}`:""}`}else return`${A.name}: ${A.message}`;else if(typeof A==="string")return A;else if(typeof A==="object"&&A!==null)try{return`${JSON.stringify(A)}`}catch{return"[cannot stringify error]"}else return`Unknown error: ${NY0(A)}`}function NY0(A){if(A&&typeof A==="object"&&"message"in A&&typeof A.message==="string")return A.message;else return String(A)}function Cv4(){return async()=>{}}var yY3={name:"rivetkit",version:"0.0.0-nathan-2-3-0-rc.9bfd2bc",description:"Lightweight libraries for building stateful actors on edge platforms",license:"Apache-2.0",keywords:["rivetkit","stateful","serverless","actors","agents","realtime","websocket","actors","framework"],files:["dist","schemas","src","package.json"],type:"module",exports:{".":{import:{types:"./dist/tsup/mod.d.ts",default:"./dist/tsup/mod.js"},require:{types:"./dist/tsup/mod.d.cts",default:"./dist/tsup/mod.cjs"}},"./workflow":{import:{types:"./dist/tsup/workflow/mod.d.ts",default:"./dist/tsup/workflow/mod.js"},require:{types:"./dist/tsup/workflow/mod.d.cts",default:"./dist/tsup/workflow/mod.cjs"}},"./test":{import:{types:"./dist/tsup/test/mod.d.ts",default:"./dist/tsup/test/mod.js"},require:{types:"./dist/tsup/test/mod.d.cts",default:"./dist/tsup/test/mod.cjs"}},"./db":{import:{types:"./dist/tsup/db/mod.d.ts",default:"./dist/tsup/db/mod.js"},require:{types:"./dist/tsup/db/mod.d.cts",default:"./dist/tsup/db/mod.cjs"}},"./db/drizzle":{import:{types:"./dist/tsup/db/drizzle.d.ts",default:"./dist/tsup/db/drizzle.js"},require:{types:"./dist/tsup/db/drizzle.d.cts",default:"./dist/tsup/db/drizzle.cjs"}},"./client":{import:{browser:{types:"./dist/browser/client.d.ts",default:"./dist/browser/client.js"},types:"./dist/tsup/client/mod.d.ts",default:"./dist/tsup/client/mod.js"},require:{types:"./dist/tsup/client/mod.d.cts",default:"./dist/tsup/client/mod.cjs"}},"./log":{import:{types:"./dist/tsup/common/log.d.ts",default:"./dist/tsup/common/log.js"},require:{types:"./dist/tsup/common/log.d.cts",default:"./dist/tsup/common/log.cjs"}},"./errors":{import:{types:"./dist/tsup/actor/errors.d.ts",default:"./dist/tsup/actor/errors.js"},require:{types:"./dist/tsup/actor/errors.d.cts",default:"./dist/tsup/actor/errors.cjs"}},"./inspector":{import:{types:"./dist/tsup/inspector/mod.d.ts",default:"./dist/tsup/inspector/mod.js"},require:{types:"./dist/tsup/inspector/mod.d.cts",default:"./dist/tsup/inspector/mod.cjs"}},"./inspector/client":{import:{types:"./dist/browser/inspector/client.d.ts",default:"./dist/browser/inspector/client.js"}},"./utils":{import:{types:"./dist/tsup/utils.d.ts",default:"./dist/tsup/utils.js"},require:{types:"./dist/tsup/utils.d.cts",default:"./dist/tsup/utils.cjs"}},"./agent-os":{import:{types:"./dist/tsup/agent-os/index.d.ts",default:"./dist/tsup/agent-os/index.js"},require:{types:"./dist/tsup/agent-os/index.d.cts",default:"./dist/tsup/agent-os/index.cjs"}}},engines:{node:">=22.0.0"},sideEffects:["./dist/tsup/chunk-*.js","./dist/tsup/chunk-*.cjs"],scripts:{build:"tsup src/mod.ts src/client/mod.ts src/common/log.ts src/common/websocket.ts src/actor/errors.ts src/utils.ts src/workflow/mod.ts src/test/mod.ts src/inspector/mod.ts src/db/mod.ts src/db/drizzle.ts && tsup src/agent-os/index.ts --no-clean --out-dir dist/tsup/agent-os","build:browser":"tsup --config tsup.browser.config.ts","check-types":"tsc --noEmit",lint:"biome check . && pnpm run check:test-skips && pnpm run check:wait-for-comments","lint:fix":"biome check --write .","check:test-skips":"tsx scripts/check-annotated-skips.ts","check:wait-for-comments":"tsx scripts/check-wait-for-comments.ts",format:"biome format .","format:write":"biome format --write .",test:"vitest run","test:platforms":"pnpm run build && RIVETKIT_INCLUDE_PLATFORM_TESTS=1 vitest run tests/platforms --passWithNoTests","test:watch":"vitest","dump-asyncapi":"tsx scripts/dump-asyncapi.ts","registry-config-schema-gen":"tsx scripts/registry-config-schema-gen.ts","actor-config-schema-gen":"tsx scripts/actor-config-schema-gen.ts"},dependencies:{"@rivet-dev/agent-os-core":"^0.1.1","@hono/node-server":"^1.18.2","@hono/node-ws":"^1.1.1","@hono/zod-openapi":"^1.1.5","@rivetkit/bare-ts":"^0.6.2","@rivetkit/engine-cli":"workspace:*","@rivetkit/engine-envoy-protocol":"workspace:*","@rivetkit/rivetkit-napi":"workspace:*","@rivetkit/rivetkit-wasm":"workspace:*","@rivetkit/traces":"workspace:*","@rivetkit/virtual-websocket":"workspace:*","@rivetkit/workflow-engine":"workspace:*","cbor-x":"^1.6.0","drizzle-orm":"^0.44.2","get-port":"^7.1.0",hono:"^4.7.0",invariant:"^2.2.4","p-retry":"^6.2.1",pino:"^9.5.0",uuid:"^12.0.0",vbare:"^0.0.4",zod:"^4.1.0"},devDependencies:{"@copilotkit/llmock":"^1.6.0","@rivet-dev/agent-os-common":"*","@rivet-dev/agent-os-pi":"^0.1.1","@biomejs/biome":"^2.3","@standard-schema/spec":"^1.0.0","@types/invariant":"^2","@types/node":"^22.13.1",eventsource:"^4.0.0",tsup:"^8.4.0",tsx:"^4.19.4",typescript:"^5.7.3","vite-tsconfig-paths":"^5.1.4",vitest:"^3.1.1",ws:"^8.18.1"},peerDependencies:{"drizzle-kit":"^0.31.2",eventsource:"^4.0.0",ws:"^8.0.0"},peerDependenciesMeta:{"drizzle-kit":{optional:!0},eventsource:{optional:!0},ws:{optional:!0}},stableVersion:"0.8.0"},As0,Qs0,$s0=new Map,Mv4=x.enum(["trace","debug","info","warn","error","fatal","silent"]);function Lv4(A){if(A)return A;if(Qs0)return Qs0;let Q=(TY3()||"warn").toString().toLowerCase(),$=Mv4.safeParse(Q);if($.success)return $.data;return"info"}function Ov4(){return vY3()}function CY0(A){if(A)Qs0=A;As0=wY0.pino({level:Lv4(A),messageKey:"msg",base:{},formatters:{level(Q,$){return{level:$}}},timestamp:kY3()?wY0.stdTimeFunctions.epochTime:!1},bY3()),$s0.clear()}function jv4(){if(!As0)CY0();return As0}function YN(A="default"){let Q=$s0.get(A);if(Q)return Q;let $=jv4(),B=Ov4()?$.child({target:A}):$;return $s0.set(A,B),B}var xY3={10:"trace",20:"debug",30:"info",40:"warn",50:"error",60:"fatal"};function bY3(){return{write(A){var Q;let $=hY3(A);if(typeof process<"u"&&((Q=process.stdout)==null?void 0:Q.write))process.stdout.write(`${$}
4570
4570
  `);else console.log($)}}}function hY3(A){let Q;try{Q=JSON.parse(A)}catch{return A.trimEnd()}let $=[];if(tr0($,"level",gY3(Q.level)),Q.time!==void 0)tr0($,"ts",Q.time);for(let[B,D]of Object.entries(Q)){if(B==="level"||B==="time")continue;tr0($,B,D)}return $.join(" ")}function gY3(A){if(typeof A==="number")return xY3[A]??A.toString();if(typeof A==="string")return A.toLowerCase();return"info"}function tr0(A,Q,$){let B=Q.replace(/[\s="]/g,"");if(B.length===0)return;A.push(`${B}=${mY3($)}`)}function mY3(A){if(typeof A==="number"||typeof A==="boolean")return String(A);if(A===null||A===void 0)return"null";if(typeof A==="string")return Vv4(A);return Vv4(JSON.stringify(A))}function Vv4(A){if(!/[\s="]/.test(A))return A;return`"${A.replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/\n/g,"\\n")}"`}var Bs0=yY3.version,er0;function Kv4(){return YN("utils")}function Rv4(){if(er0!==void 0)return er0;let A=`RivetKit/${Bs0}`,Q=typeof navigator<"u"?navigator:void 0;if(Q==null?void 0:Q.userAgent)A+=` ${Q.userAgent}`;return er0=A,A}function gY(A){if(typeof Deno<"u")return Deno.env.get(A);else if(typeof process<"u")return process.env[A]}function Xf(A){let Q,$,B=new Promise((D,J)=>{Q=D,$=J});return B.catch(A),{promise:B,resolve:Q,reject:$}}var HK2=class{#A;runningDrainLoop;#Q;enqueue(A){if(this.#A=A,!this.#Q)this.#Q=Xf(($)=>Kv4().warn({msg:"unhandled single promise queue rejection",reason:$}));let Q=this.#Q.promise;if(!this.runningDrainLoop)this.runningDrainLoop=this.#$();return Q}async#$(){try{while(this.#A){let A=this.#Q;this.#Q=void 0;let Q=this.#A;this.#A=void 0;try{await Q(),A==null||A.resolve()}catch($){Kv4().error({msg:"error in SinglePromiseQueue drain loop",error:m9($)}),A==null||A.reject($)}}}finally{this.runningDrainLoop=void 0}}};function MY0(A){return A.buffer.slice(A.byteOffset,A.byteOffset+A.byteLength)}function Gf(A,Q,$){let B=new URL(A),D=Q.split("?"),J=D[0],F=D[1]||"",Y=B.pathname.replace(/\/$/,""),E=J.startsWith("/")?J:`/${J}`,Z=(Y+E).replace(/\/\//g,"/"),U=[];if(F)U.push(F);if($){for(let[G,V]of Object.entries($))if(V!==void 0)U.push(`${encodeURIComponent(G)}=${encodeURIComponent(V)}`)}let X=U.length>0?`?${U.join("&")}`:"";return`${B.protocol}//${B.host}${Z}${X}`}var Pv4=process.hrtime.bigint(),Ds0=null;function uv4(){Ds0=process.hrtime.bigint()}function Js0(){if(Ds0===null)return null;return Number(process.hrtime.bigint()-Ds0)/1e6}import Kf from"node:fs";import zf from"node:path";W50();function Fs0(A,Q){let $=Q.formatter??X50,B=Q.encoder??new TextEncoder,D=Q.maxSize??1048576,J=Q.maxFiles??5,F=Q.bufferSize??8192,Y=Q.flushInterval??5000,E=0;try{E=Q.statSync(A).size}catch{}let Z=Q.openSync(A),U=Date.now(),X="";function G(O){return E+O.length>D}function V(){Q.closeSync(Z);for(let O=J-1;O>0;O--){let L=`${A}.${O}`,j=`${A}.${O+1}`;try{Q.renameSync(L,j)}catch(k){}}Q.renameSync(A,`${A}.1`),E=0,Z=Q.openSync(A)}if(!Q.nonBlocking){let O=function(){if(X.length>0){let j=B.encode(X);if(X="",G(j))V();Q.writeSync(Z,j),Q.flushSync(Z),E+=j.length,U=Date.now()}},L=(j)=>{X+=$(j);let k=X.length>=F,_=Y>0&&j.timestamp-U>=Y;if(k||_)O()};return L[Symbol.dispose]=()=>{O(),Q.closeSync(Z)},L}let K=Q,z=!1,I=null,W=null;async function H(){if(X.length===0)return;let O=X;X="";try{let L=B.encode(O);if(G(L))V();K.writeSync(Z,L),await K.flush(Z),E+=L.length,U=Date.now()}catch{}}function q(){if(I||z)return;I=H().finally(()=>{I=null})}function N(){if(W!==null||z)return;W=setInterval(()=>{q()},Y)}let w=(O)=>{if(z)return;X+=$(O);let L=X.length>=F,j=Y>0&&O.timestamp-U>=Y;if(L||j)q();else if(W===null&&Y>0)N()};return w[Symbol.asyncDispose]=async()=>{if(z=!0,W!==null)clearInterval(W),W=null;await H();try{await K.close(Z)}catch{}},w}import w7 from"node:fs";import{join as _v4}from"node:path";import{promisify as LY0}from"node:util";var Ys0={openSync(A){return w7.openSync(A,"a")},writeSync:w7.writeSync,writeManySync(A,Q){if(Q.length===0)return;if(Q.length===1){w7.writeSync(A,Q[0]);return}w7.writevSync(A,Q)},flushSync:w7.fsyncSync,closeSync:w7.closeSync,statSync:w7.statSync,renameSync:w7.renameSync},Tv4={...Ys0,async writeMany(A,Q){if(Q.length===0)return;if(Q.length===1){await LY0(w7.write)(A,Q[0]);return}await LY0(w7.writev)(A,Q)},flush:LY0(w7.fsync),close:LY0(w7.close)},kK2={...Ys0,readdirSync:w7.readdirSync,unlinkSync:w7.unlinkSync,mkdirSync:w7.mkdirSync,joinPath:_v4},SK2={...Tv4,readdirSync:w7.readdirSync,unlinkSync:w7.unlinkSync,mkdirSync:w7.mkdirSync,joinPath:_v4};function Es0(A,Q={}){if(Q.nonBlocking)return Fs0(A,{...Q,...Tv4});return Fs0(A,{...Q,...Ys0})}W50();lF();p0();var Zs0=b4(L4(),1);import{inspect as dY3}from"node:util";function OY0(A,...Q){if(Q.length===0)return A;return($)=>{let B=$;for(let D of Q)B=D(B);A(B)}}var jY0=(A)=>{let Q=Zs0.trace.getActiveSpan();if(!Q)return A;let{traceId:$,spanId:B}=Q.spanContext();return{...A,properties:{...A.properties,traceId:$,spanId:B}}},RY0=(A)=>{let Q=null;for(let $ of Object.keys(A.properties)){let B=A.properties[$];if(B instanceof Error)Q??={...A.properties},Q[$]=vv4(B)}return Q===null?A:{...A,properties:Q}},vv4=(A)=>({name:A.name,message:A.message,stack:A.stack,cause:A.cause instanceof Error?vv4(A.cause):A.cause}),Us0=(A)=>({...A,properties:{...A.properties,pid:process.pid}});var kv4=(A)=>{let Q=Zs0.trace.getActiveSpan();if(!Q)return;Q.addEvent(pY3(A.message),A.properties)};var Vf={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",gray:"\x1B[90m"};var pK2={trace:Vf.magenta,debug:Vf.blue,info:Vf.green,warning:Vf.yellow,error:Vf.red,fatal:Vf.red};function pY3(A,Q){let $="";for(let B=0;B<A.length;B++){let D=A[B];if(B%2===0)$+=typeof D==="string"?D:String(D);else $+=typeof D==="string"?D:dY3(D,Q)}return $}var Sv4=zf.join(lB,"logs"),cY3=604800000,PY0=zf.join(Sv4,"threads"),Ao=zf.join(Sv4,"cli.log"),lY3=Number(process.env.AMP_MAX_LOG_FILE_SIZE)||10485760,iY3={error:"error",warn:"warning",info:"info",debug:"debug"},Xs0=!1,ea=null,Gs0=!1;function _Y0(){Gs0=!0}function If(A){return zf.join(PY0,`${A}.log`)}function fv4(A=Date.now()){let Q;try{Q=Kf.readdirSync(PY0)}catch{return}let $=A-cY3;for(let B of Q){if(!B.endsWith(".log"))continue;let D=zf.join(PY0,B);try{let J=Kf.statSync(D);if(J.isFile()&&J.mtimeMs<$)Kf.rmSync(D,{force:!0})}catch{}}}function yv4(A){ea=null,Gs0=!1;let{logFile:Q,logLevel:$}=A,B=iY3[pt1.catch("info").parse($)],D=G50({properties:"flatten"});return Kf.mkdirSync(zf.dirname(Q),{recursive:!0}),m_(),Jd({sinks:{file:OY0(Es0(Q,{maxSize:lY3,maxFiles:2,formatter:D}),Us0,jY0,RY0),otel:OY0(kv4,jY0,RY0),thread:OY0(nY3(PY0,D),Us0,jY0,RY0)},loggers:[{category:["logtape","meta"],sinks:["file"],lowestLevel:"warning"},{category:[],sinks:["file","otel","thread"],lowestLevel:B}]}),Xs0=!0,Q}var uY0=new Map;function nY3(A,Q){return($)=>{if(!Gs0)return;let B=$.properties.threadId;if(typeof B!=="string"||B.length===0)return;try{let D=uY0.get(B);if(!D)Kf.mkdirSync(A,{recursive:!0}),D=Kf.createWriteStream(If(B),{flags:"a"}),uY0.set(B,D);D.write(Q($))}catch{}}}function vz(){if(ea)return ea;if(!Xs0)return Promise.resolve();return ea=aY3(),ea}async function aY3(){await new Promise((D)=>{setImmediate(D)});let A=Array.from(uY0.values());uY0.clear();let Q=Promise.all(A.map((D)=>new Promise((J)=>D.end(()=>J())))),$,B=new Promise((D)=>{$=setTimeout(D,500)});try{await Promise.race([Promise.all([Q,z50()]),B])}finally{if($)clearTimeout($)}try{m_()}catch{}Xs0=!1}Q4();p0();import*as xv4 from"node:child_process";import*as bv4 from"node:fs/promises";import*as hv4 from"node:path";import{promisify as rY3}from"node:util";function oY3(A){if(A.startsWith("http://")||A.startsWith("https://"))try{let Q=new URL(A);return Q.username="",Q.password="",Q.toString()}catch{}return A}function TY0(A){let Q=["github.com","gitlab.com","bitbucket.org"];A=oY3(A);let $=null,B=null,D=A.match(/^([^@]+)@([^:/]+)[:/](.+)$/);if(D&&D[1]&&D[2]&&D[3]){let J=D[1],F=D[2],Y=D[3],E=J==="git",Z=F==="github.com"&&J.startsWith("org-");if(E||Z)$=F,B=Y}if(!$||!B){let J=A.match(/^https?:\/\/([^/]+)\/(.+)$/);if(J&&J[1]&&J[2])$=J[1],B=J[2]}if(!$||!B){let J=A.match(/^([^:]+):(.+)$/);if(J&&J[1]&&J[2])$=J[1],B=J[2]}if($&&B&&Q.includes($)){let J=B.replace(/\.git$/,"").replace(/\/+$/,"").replace(/@[^/]+$/,"");return`https://${$}/${J}`.toLowerCase()}return A.replace(/\.git$/,"").replace(/\/+$/,"").replace(/@[^/]+$/,"").toLowerCase()}var Vs0=rY3(xv4.exec);async function gv4(A){let Q={displayName:B1.basename(A)};if(!Qd(A))return Q;Q.uri=t1(A);try{if(!await bv4.access(hv4.join(A.fsPath,".git")).then(()=>!0).catch(()=>!1))return Q;let{stdout:B}=await Vs0("git remote get-url origin",{cwd:A.fsPath}).catch(()=>({stdout:""}));if(!B.trim())return Q;let{stdout:D}=await Vs0("git symbolic-ref HEAD",{cwd:A.fsPath}).catch(()=>({stdout:""})),{stdout:J}=await Vs0("git rev-parse HEAD",{cwd:A.fsPath}).catch(()=>({stdout:""}));return{...Q,repository:{type:"git",url:TY0(B.trim()),ref:D.trim()||void 0,sha:J.trim()??void 0}}}catch($){return P.error("Error getting repository info:",$,{dir:A.fsPath}),Q}}SQ();function mv4(){let A=i5(),Q=A70(),$=c14();return{os:Q.os,osVersion:Q.osVersion,cpuArchitecture:Q.cpuArchitecture,webBrowser:Q.webBrowser,client:A.name,clientVersion:A.version,clientType:A.type,installationID:$?.installationID,deviceFingerprint:$?.deviceFingerprint}}Q4();async function kz(){return{trees:[await gv4(i0.file(process.cwd()))],platform:mv4()}}p0();import{execFileSync as sY3}from"node:child_process";import{mkdir as tY3,writeFile as eY3}from"node:fs/promises";import AE3 from"node:path";function EN(){if(process.platform==="win32")return"edit";return process.env.AMP_EDITOR||process.env.EDITOR||process.env.VISUAL||"vi"}async function QE3(A){await tY3(AE3.dirname(A),{recursive:!0});try{await eY3(A,`{
4571
4571
  }
4572
4572
  `,{encoding:"utf-8",flag:"wx",mode:384})}catch(Q){if(Q.code!=="EEXIST")throw Q}}async function $E3(A){await QE3(A);let Q=EN();try{sY3(Q,[A],{stdio:"inherit"})}catch($){throw P.error("Failed to open settings file in editor",{editor:Q,settingsPath:A,error:$}),Error(`Failed to open ${Q}`)}}function dv4(A,Q){let $=A.command("config").summary("Manage Amp configuration").description("Manage Amp configuration").action(()=>{$.outputHelp(),process.exit(0)});$.command("edit").summary("Open the Amp settings file in $EDITOR").description("Open the Amp settings file in $EDITOR. By default, this opens user settings. Use --workspace to edit the workspace-specific .amp/settings.json file.").option("--global","Edit user settings (default)").option("--workspace","Edit workspace settings").action(async(B,D)=>{if(B.global&&B.workspace)throw Error("Use only one of --global or --workspace");let J=await Q(D.optsWithGlobals()),F=B.workspace?J.settings.getWorkspaceSettingsPath():J.settings.getSettingsFilePath();await $E3(F),process.exit(0)})}p0();import{execFile as BE3}from"node:child_process";import{promisify as DE3}from"node:util";var JE3=DE3(BE3),FE3=["private","public","workspace"];function YE3(A){switch(A){case"private":return{visibility:"private",sharedGroupIDs:[]};case"public":return{visibility:"public_discoverable"};case"workspace":return{visibility:"thread_workspace_shared"};case"group":return{visibility:"private",shareWithAllCreatorGroups:!0}}}function Ks0(A){return A.endsWith("/")?A.slice(0,-1):A}function EE3(A){let Q=TY0(A);try{let D=new URL(Q);return Ks0(`${D.host}${D.pathname}`).replace(/^\//,"")}catch{}let $=Q.match(/^[^@]+@([^:/]+)[:/](.+)$/);if($?.[1]&&$[2])return Ks0(`${$[1]}/${$[2]}`).replace(/\.git$/,"");let B=Q.match(/^([^:]+):(.+)$/);if(B?.[1]&&B[2])return Ks0(`${B[1]}/${B[2]}`).replace(/\.git$/,"");return null}async function cv4(A){try{let{stdout:Q}=await JE3("git",["remote","get-url","origin"],{cwd:A}),$=Q.trim();if(!$)return null;return EE3($)}catch{return null}}function ZE3(A){let Q=[...FE3];if(A?.team?.disablePrivateThreads){let $=Q.indexOf("private");if($!==-1)Q.splice($,1)}if(A?.team?.groups&&A.team.groups.length>0)Q.push("group");return Q}function UE3(A){if(A?.team?.groups!==void 0)return Error(["Group visibility is not available. ",`You are not a member of any group in this workspace.
@@ -4795,13 +4795,13 @@ ${z}`))}},error:(K)=>{if(!V)V=!0,Z(Error(`Failed to spawn brew: ${K.message}`))}
4795
4795
  ${z}`;if(F==="pnpm"&&z.includes("Unable to find the global bin directory"))I+=`
4796
4796
 
4797
4797
  Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
4798
- npm install -g ${J}`;Z(Error(I))}},error:(K)=>{if(!G)G=!0,Z(Error(`Failed to spawn ${F}: ${K.message}`))},complete:()=>{if(!G)G=!0,E()}})})}p0();p0();Iz();var nC3="@ampcode/cli";async function mE0(A,Q,$=nC3){let D=`${Q||"https://registry.npmjs.org"}/${$}/latest`,J=new AbortController,F=setTimeout(()=>J.abort(),5000);try{let Y=await fetch(D,{signal:J.signal});if(!Y.ok)return{hasUpdate:!1,currentVersion:A,source:"npm"};let E=await Y.json(),Z=E.version??E["dist-tags"]?.latest;if(!Z)return{hasUpdate:!1,currentVersion:A,source:"npm"};let U=eo(A,Z),X=U<0,G,V;if(E.time){let K=E.time[A],z=E.time[Z],I=Date.now();if(K)G=Math.floor((I-new Date(K).getTime())/3600000);if(z)V=Math.floor((I-new Date(z).getTime())/3600000)}return P.info("NPM version comparison",{currentVersion:A,latestVersion:Z,compareResult:U,hasUpdate:X,currentVersionAge:G,latestVersionAge:V}),{hasUpdate:X,latestVersion:Z,currentVersion:A,currentVersionAge:G,latestVersionAge:V,source:"npm"}}catch(Y){return P.debug("Error checking npm version",{error:Y}),{hasUpdate:!1,currentVersion:A,source:"npm"}}finally{clearTimeout(F)}}var aC3="https://static.ampcode.com/cli/cli-version.txt";async function dE0(A){let Q=new AbortController,$=setTimeout(()=>Q.abort(),5000);try{let B=await fetch(`${aC3}?t=${Date.now()}`,{signal:Q.signal,cache:"no-store"});if(!B.ok)return{hasUpdate:!1,currentVersion:A,source:"bin"};let D=(await B.text()).trim();if(!D||!/^\d+\.\d+\.\d+/.test(D))return{hasUpdate:!1,currentVersion:A,source:"bin"};let J=eo(A,D),F=J<0;return P.info("Bin version comparison",{currentVersion:A,latestVersion:D,compareResult:J,hasUpdate:F}),{hasUpdate:F,latestVersion:D,currentVersion:A,source:"bin"}}catch(B){return P.debug("Error checking bin version",{error:B}),{hasUpdate:!1,currentVersion:A,source:"bin"}}finally{clearTimeout($)}}var oC3=604800000;function pb4(A){if(!A)return null;let Q=typeof A==="number"?A:new Date(A).getTime();if(isNaN(Q))return null;let $=Date.now()-Q;if($>oC3)return{ageMs:$};return null}function eo(A,Q){let $=(F)=>{let[Y,E]=F.split("-");return{parts:Y?.split(".").map(Number)||[],label:E}},B=$(A),D=$(Q),J=Math.max(B.parts.length,D.parts.length);for(let F=0;F<J;F++){let Y=B.parts[F]||0,E=D.parts[F]||0;if(Y<E)return-1;if(Y>E)return 1}if(B.label===D.label)return 0;if(!B.label&&D.label)return 1;if(B.label&&!D.label)return-1;if(B.label&&D.label)return B.label<D.label?-1:1;return 0}function Ar(A){try{let Q=A.match(/^0\.0\.(\d+)(?:-(.+))?/);if(!Q)return null;let $=parseInt(Q[1],10),B=$!==0?$*1000:void 0,J=Q[2]?.match(/^g?([a-f0-9]+)$/)?.[1],F=B!==void 0?uY(B):void 0;return{sha:J,timestamp:B,age:F}}catch{return null}}P1();p0();import{readFile as rC3,realpath as sC3}from"node:fs/promises";import{dirname as cb4,join as tC3}from"node:path";async function lb4(A){switch(A){case"binary":case"brew":return eC3(so());case"npm":case"pnpm":case"yarn":case"bun":return AM3()}}async function eC3(A){let Q=await LN(A,["--version"],5000);if(Q.reason!=="success")return P.debug("failed to read version from binary",{binaryPath:A,result:Q}),null;return Q.output.trim().split(/\s+/)[0]||null}async function AM3(){try{let A=process.argv[1];if(!A)return null;let Q=await sC3(A),$=cb4(cb4(Q));return await QM3(tC3($,"package.json"))}catch(A){return P.debug("failed to read installed version from package.json",{error:A}),null}}async function QM3(A){let Q=await rC3(A,"utf8"),$=JSON.parse(Q);if(!$.name||!A01($.name))return P.debug("package.json name mismatch",{pkgJsonPath:A,name:$.name}),null;return $.version||null}p0();import{spawn as $M3}from"node:child_process";function Y01(A){if(A=A.replace(/\/$/,""),!A.startsWith("http://")&&!A.startsWith("https://"))A=`https://${A}`;try{return new URL(A),A}catch{return P.warn(`Invalid registry URL: ${A}, falling back to npmjs.org`),"https://registry.npmjs.org"}}var pE0=null,Qr=null;function ib4(A){return new Promise((Q)=>{let $=$M3("npm",["config","get",A],{stdio:["ignore","pipe","ignore"],timeout:5000,shell:process.platform==="win32"}),B="";$.stdout.on("data",(D)=>{B+=D.toString()}),$.on("close",(D,J)=>{if(D!==0||J==="SIGTERM"){Q(null);return}let F=B.trim();Q(F&&F!=="undefined"?F:null)}),$.on("error",()=>{Q(null)})})}async function cE0(){if(pE0)return pE0;if(Qr)return Qr;Qr=(async()=>{let A=process.env.NPM_CONFIG_REGISTRY??process.env.npm_config_registry;if(A)return Y01(A);let Q=await ib4("@sourcegraph:registry");if(Q)return Y01(Q);let $=await ib4("registry");if($)return Y01($);return"https://registry.npmjs.org"})();try{return pE0=await Qr,pE0}finally{Qr=null}}var BM3=3600000,DM3=5000;function lE0(A,Q,$={}){let B=new p4,D=B.pipe(t6({shouldCountRefs:!1})),J=$.startDelayMs??0,F=$.checkIntervalMs??BM3,Y=!1,E=()=>{Y=!0};return setImmediate(async()=>{let Z=P.getChild("update");if(J>0){if(await BG(J),Y)return}let U=D.subscribe({next:(G)=>{Z.debug("emit new state",G)}}),X=A;try{while(!Y){let G=await JM3(X,Q,Z,B);if(G.stop)return;if(G.updatedTo)X=G.updatedTo;if(G.emittedVisibleState){if(await BG(DM3),Y)return;B.next("hidden")}if(F<=0)return;let V=1000,K=F;while(K>0&&!Y){let z=Math.min(V,K);await BG(z),K-=z}}}finally{U.unsubscribe(),B.complete()}}),{state:D,dispose:E}}async function JM3(A,Q,$,B){let D={stop:!1,emittedVisibleState:!1};try{if(process.env.AMP_SKIP_UPDATE_CHECK==="1")return $.debug("checking disabled via AMP_SKIP_UPDATE_CHECK environment variable"),D.stop=!0,D;let J=await Q.get("updates.mode");if(J==="disabled")return $.debug("checking disabled"),D.stop=!0,D;let F=await kG(),Y=F==="binary"||F==="brew",E=Y?void 0:await ON();$.debug("checking",{currentVersion:A,mode:J,packageManager:F,isBinaryDistribution:Y,npmPackageName:E});let Z;if(Y)Z=await dE0(A);else{let G=await cE0();Z=await mE0(A,G,E)}if(!(Z.latestVersion&&Z.hasUpdate))return $.debug("no update available"),D;let U=(G)=>{B.next(G),D.emittedVisibleState=!0};if(F){let G=await lb4(F);if(G&&eo(G,Z.latestVersion)>=0){if($.debug("on-disk version already up to date",{currentVersion:A,installedVersion:G,latestVersion:Z.latestVersion}),D.updatedTo=G,eo(A,G)<0){let V=await pz(G),K={from:A,to:G,externallyUpdated:!0,...V};if(V.status==="same")$.info("on-disk already updated by another instance",K),U("updated");else $.warn("on-disk already updated by another instance, with PATH warning",K),U("updated-with-warning")}return D}}let X=()=>{if(Z.currentVersionAge!==void 0&&Z.latestVersionAge!==void 0){let G=Z.currentVersionAge-Z.latestVersionAge,V=0.5;if(Math.abs(G)<0.5)return $.debug("versions too close together, suppressing update warning",{currentVersionAge:Z.currentVersionAge,latestVersionAge:Z.latestVersionAge,ageDifferenceHours:G}),!0}return!1};if(!J)J=F==="pnpm"?"warn":"auto",$.debug("no configured update mode; selected default based on package manager",{packageManager:F,mode:J});if(F==="brew"){if(!X())U("update-available-brew");return D}if(F==="binary"&&process.execPath!==so()){if($.debug("non-standard binary path, showing warning"),!X())U("update-available-unrecognized-path");return D}if(J==="warn"){if(!X())U("update-available");return D}if(!F){if($.debug("auto-update not supported, falling back to warn mode"),!X())U("update-available");return D}try{await to(Z.latestVersion,F),D.updatedTo=Z.latestVersion;let G=await pz(Z.latestVersion),V={from:Z.currentVersion,to:Z.latestVersion,...G};if(G.status==="same")$.info("success",V),U("updated");else $.warn("success with warning",V),U("updated-with-warning")}catch(G){U("update-error")}return D}catch(J){return $.debug("check failed",{error:J}),D}}Iz();import{stderr as aY}from"node:process";function nb4(A){let Q=new JN().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(B)=>{await te0(B.force||!1,B.verbose||!1,"0.0.1779345702-g49e69d"),process.exit()});A.addCommand(Q,{hidden:!0});let $=new JN("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(B)=>{await EM3(B.targetVersion)});A.addCommand($)}function FM3(A){let Q=Boolean(A.isTTY),$=0,B=!1;function D(){if(!Q||!B)return;A.write(`
4798
+ npm install -g ${J}`;Z(Error(I))}},error:(K)=>{if(!G)G=!0,Z(Error(`Failed to spawn ${F}: ${K.message}`))},complete:()=>{if(!G)G=!0,E()}})})}p0();p0();Iz();var nC3="@ampcode/cli";async function mE0(A,Q,$=nC3){let D=`${Q||"https://registry.npmjs.org"}/${$}/latest`,J=new AbortController,F=setTimeout(()=>J.abort(),5000);try{let Y=await fetch(D,{signal:J.signal});if(!Y.ok)return{hasUpdate:!1,currentVersion:A,source:"npm"};let E=await Y.json(),Z=E.version??E["dist-tags"]?.latest;if(!Z)return{hasUpdate:!1,currentVersion:A,source:"npm"};let U=eo(A,Z),X=U<0,G,V;if(E.time){let K=E.time[A],z=E.time[Z],I=Date.now();if(K)G=Math.floor((I-new Date(K).getTime())/3600000);if(z)V=Math.floor((I-new Date(z).getTime())/3600000)}return P.info("NPM version comparison",{currentVersion:A,latestVersion:Z,compareResult:U,hasUpdate:X,currentVersionAge:G,latestVersionAge:V}),{hasUpdate:X,latestVersion:Z,currentVersion:A,currentVersionAge:G,latestVersionAge:V,source:"npm"}}catch(Y){return P.debug("Error checking npm version",{error:Y}),{hasUpdate:!1,currentVersion:A,source:"npm"}}finally{clearTimeout(F)}}var aC3="https://static.ampcode.com/cli/cli-version.txt";async function dE0(A){let Q=new AbortController,$=setTimeout(()=>Q.abort(),5000);try{let B=await fetch(`${aC3}?t=${Date.now()}`,{signal:Q.signal,cache:"no-store"});if(!B.ok)return{hasUpdate:!1,currentVersion:A,source:"bin"};let D=(await B.text()).trim();if(!D||!/^\d+\.\d+\.\d+/.test(D))return{hasUpdate:!1,currentVersion:A,source:"bin"};let J=eo(A,D),F=J<0;return P.info("Bin version comparison",{currentVersion:A,latestVersion:D,compareResult:J,hasUpdate:F}),{hasUpdate:F,latestVersion:D,currentVersion:A,source:"bin"}}catch(B){return P.debug("Error checking bin version",{error:B}),{hasUpdate:!1,currentVersion:A,source:"bin"}}finally{clearTimeout($)}}var oC3=604800000;function pb4(A){if(!A)return null;let Q=typeof A==="number"?A:new Date(A).getTime();if(isNaN(Q))return null;let $=Date.now()-Q;if($>oC3)return{ageMs:$};return null}function eo(A,Q){let $=(F)=>{let[Y,E]=F.split("-");return{parts:Y?.split(".").map(Number)||[],label:E}},B=$(A),D=$(Q),J=Math.max(B.parts.length,D.parts.length);for(let F=0;F<J;F++){let Y=B.parts[F]||0,E=D.parts[F]||0;if(Y<E)return-1;if(Y>E)return 1}if(B.label===D.label)return 0;if(!B.label&&D.label)return 1;if(B.label&&!D.label)return-1;if(B.label&&D.label)return B.label<D.label?-1:1;return 0}function Ar(A){try{let Q=A.match(/^0\.0\.(\d+)(?:-(.+))?/);if(!Q)return null;let $=parseInt(Q[1],10),B=$!==0?$*1000:void 0,J=Q[2]?.match(/^g?([a-f0-9]+)$/)?.[1],F=B!==void 0?uY(B):void 0;return{sha:J,timestamp:B,age:F}}catch{return null}}P1();p0();import{readFile as rC3,realpath as sC3}from"node:fs/promises";import{dirname as cb4,join as tC3}from"node:path";async function lb4(A){switch(A){case"binary":case"brew":return eC3(so());case"npm":case"pnpm":case"yarn":case"bun":return AM3()}}async function eC3(A){let Q=await LN(A,["--version"],5000);if(Q.reason!=="success")return P.debug("failed to read version from binary",{binaryPath:A,result:Q}),null;return Q.output.trim().split(/\s+/)[0]||null}async function AM3(){try{let A=process.argv[1];if(!A)return null;let Q=await sC3(A),$=cb4(cb4(Q));return await QM3(tC3($,"package.json"))}catch(A){return P.debug("failed to read installed version from package.json",{error:A}),null}}async function QM3(A){let Q=await rC3(A,"utf8"),$=JSON.parse(Q);if(!$.name||!A01($.name))return P.debug("package.json name mismatch",{pkgJsonPath:A,name:$.name}),null;return $.version||null}p0();import{spawn as $M3}from"node:child_process";function Y01(A){if(A=A.replace(/\/$/,""),!A.startsWith("http://")&&!A.startsWith("https://"))A=`https://${A}`;try{return new URL(A),A}catch{return P.warn(`Invalid registry URL: ${A}, falling back to npmjs.org`),"https://registry.npmjs.org"}}var pE0=null,Qr=null;function ib4(A){return new Promise((Q)=>{let $=$M3("npm",["config","get",A],{stdio:["ignore","pipe","ignore"],timeout:5000,shell:process.platform==="win32"}),B="";$.stdout.on("data",(D)=>{B+=D.toString()}),$.on("close",(D,J)=>{if(D!==0||J==="SIGTERM"){Q(null);return}let F=B.trim();Q(F&&F!=="undefined"?F:null)}),$.on("error",()=>{Q(null)})})}async function cE0(){if(pE0)return pE0;if(Qr)return Qr;Qr=(async()=>{let A=process.env.NPM_CONFIG_REGISTRY??process.env.npm_config_registry;if(A)return Y01(A);let Q=await ib4("@sourcegraph:registry");if(Q)return Y01(Q);let $=await ib4("registry");if($)return Y01($);return"https://registry.npmjs.org"})();try{return pE0=await Qr,pE0}finally{Qr=null}}var BM3=3600000,DM3=5000;function lE0(A,Q,$={}){let B=new p4,D=B.pipe(t6({shouldCountRefs:!1})),J=$.startDelayMs??0,F=$.checkIntervalMs??BM3,Y=!1,E=()=>{Y=!0};return setImmediate(async()=>{let Z=P.getChild("update");if(J>0){if(await BG(J),Y)return}let U=D.subscribe({next:(G)=>{Z.debug("emit new state",G)}}),X=A;try{while(!Y){let G=await JM3(X,Q,Z,B);if(G.stop)return;if(G.updatedTo)X=G.updatedTo;if(G.emittedVisibleState){if(await BG(DM3),Y)return;B.next("hidden")}if(F<=0)return;let V=1000,K=F;while(K>0&&!Y){let z=Math.min(V,K);await BG(z),K-=z}}}finally{U.unsubscribe(),B.complete()}}),{state:D,dispose:E}}async function JM3(A,Q,$,B){let D={stop:!1,emittedVisibleState:!1};try{if(process.env.AMP_SKIP_UPDATE_CHECK==="1")return $.debug("checking disabled via AMP_SKIP_UPDATE_CHECK environment variable"),D.stop=!0,D;let J=await Q.get("updates.mode");if(J==="disabled")return $.debug("checking disabled"),D.stop=!0,D;let F=await kG(),Y=F==="binary"||F==="brew",E=Y?void 0:await ON();$.debug("checking",{currentVersion:A,mode:J,packageManager:F,isBinaryDistribution:Y,npmPackageName:E});let Z;if(Y)Z=await dE0(A);else{let G=await cE0();Z=await mE0(A,G,E)}if(!(Z.latestVersion&&Z.hasUpdate))return $.debug("no update available"),D;let U=(G)=>{B.next(G),D.emittedVisibleState=!0};if(F){let G=await lb4(F);if(G&&eo(G,Z.latestVersion)>=0){if($.debug("on-disk version already up to date",{currentVersion:A,installedVersion:G,latestVersion:Z.latestVersion}),D.updatedTo=G,eo(A,G)<0){let V=await pz(G),K={from:A,to:G,externallyUpdated:!0,...V};if(V.status==="same")$.info("on-disk already updated by another instance",K),U("updated");else $.warn("on-disk already updated by another instance, with PATH warning",K),U("updated-with-warning")}return D}}let X=()=>{if(Z.currentVersionAge!==void 0&&Z.latestVersionAge!==void 0){let G=Z.currentVersionAge-Z.latestVersionAge,V=0.5;if(Math.abs(G)<0.5)return $.debug("versions too close together, suppressing update warning",{currentVersionAge:Z.currentVersionAge,latestVersionAge:Z.latestVersionAge,ageDifferenceHours:G}),!0}return!1};if(!J)J=F==="pnpm"?"warn":"auto",$.debug("no configured update mode; selected default based on package manager",{packageManager:F,mode:J});if(F==="brew"){if(!X())U("update-available-brew");return D}if(F==="binary"&&process.execPath!==so()){if($.debug("non-standard binary path, showing warning"),!X())U("update-available-unrecognized-path");return D}if(J==="warn"){if(!X())U("update-available");return D}if(!F){if($.debug("auto-update not supported, falling back to warn mode"),!X())U("update-available");return D}try{await to(Z.latestVersion,F),D.updatedTo=Z.latestVersion;let G=await pz(Z.latestVersion),V={from:Z.currentVersion,to:Z.latestVersion,...G};if(G.status==="same")$.info("success",V),U("updated");else $.warn("success with warning",V),U("updated-with-warning")}catch(G){U("update-error")}return D}catch(J){return $.debug("check failed",{error:J}),D}}Iz();import{stderr as aY}from"node:process";function nb4(A){let Q=new JN().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(B)=>{await te0(B.force||!1,B.verbose||!1,"0.0.1779354043-g150a4f"),process.exit()});A.addCommand(Q,{hidden:!0});let $=new JN("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(B)=>{await EM3(B.targetVersion)});A.addCommand($)}function FM3(A){let Q=Boolean(A.isTTY),$=0,B=!1;function D(){if(!Q||!B)return;A.write(`
4799
4799
  `),B=!1,$=0}function J(F){if(!Q)return;let Y=F.padEnd($," ");A.write(`\r${Y}`),B=!0,$=Y.length}return{flushProgressLine:D,renderProgress:J}}function YM3(A){if(A.source==="npm"&&A.latestVersionAge!==void 0&&A.latestVersionAge>36)aY.write(t0.yellow(`The latest Amp CLI version reported by npm is older than expected. Be aware that you may be using an npm proxy with a corporate policy to delay package updates.
4800
4800
  `))}async function EM3(A){let $=process.platform==="win32"&&xj()?{currentExecutablePath:process.execPath}:void 0,{flushProgressLine:B,renderProgress:D}=FM3(aY);if(process.env.AMP_SKIP_UPDATE_CHECK==="1")aY.write(t0.yellow(`Note: AMP_SKIP_UPDATE_CHECK=1 is set, which disables automatic update checking. Manual updates will still work.
4801
4801
 
4802
4802
  `));try{if(!A){aY.write(t0.blue(`Checking for updates...
4803
- `));let Y=!1,E;if(xj()){let Z=await dE0("0.0.1779345702-g49e69d");Y=Z.hasUpdate,E=Z.latestVersion}else{let Z=await cE0(),U=await ON(),X=await mE0("0.0.1779345702-g49e69d",Z,U);YM3(X),Y=X.hasUpdate,E=X.latestVersion}if(!Y){let Z=Ar("0.0.1779345702-g49e69d"),U=Z?.age?`released ${Z.age} ago`:`built ${uY(new Date("2026-05-21T06:46:29.871Z"))} ago`;aY.write(t0.green(`✓ Amp is already up to date on version ${"0.0.1779345702-g49e69d"} (${U})
4804
- `));let X=await pz("0.0.1779345702-g49e69d",$);if(X.warning)aY.write(`
4803
+ `));let Y=!1,E;if(xj()){let Z=await dE0("0.0.1779354043-g150a4f");Y=Z.hasUpdate,E=Z.latestVersion}else{let Z=await cE0(),U=await ON(),X=await mE0("0.0.1779354043-g150a4f",Z,U);YM3(X),Y=X.hasUpdate,E=X.latestVersion}if(!Y){let Z=Ar("0.0.1779354043-g150a4f"),U=Z?.age?`released ${Z.age} ago`:`built ${uY(new Date("2026-05-21T09:06:08.537Z"))} ago`;aY.write(t0.green(`✓ Amp is already up to date on version ${"0.0.1779354043-g150a4f"} (${U})
4804
+ `));let X=await pz("0.0.1779354043-g150a4f",$);if(X.warning)aY.write(`
4805
4805
  `+t0.yellow(X.warning)+`
4806
4806
  `);process.exit(0)}if(!E)aY.write(t0.yellow("[WARN] could not find latest version")),process.exit(0);A=E}aY.write(t0.blue(`Updating to version ${A}...
4807
4807
  `)),await to(A,void 0,(Y)=>{B(),aY.write(t0.dim(`Running: ${Y}
@@ -5230,7 +5230,7 @@ ${B}`).join(`
5230
5230
  `).length,D=new d({text:new C(A,new T({color:$}))});if(B<=WX0)return D;return new X0({width:1/0,height:WX0,child:new i8({autofocus:!1,controller:Q,child:D})})}function Cb3(){return new Map([[G1.key("PageUp"),new HX0],[G1.key("PageDown"),new r61],[G1.ctrl("u"),new HX0],[G1.shift("Home"),new s61],[G1.shift("End"),new t61]])}function Mb3(A,Q,$){return Math.max(Q,Math.min(A,$))}var e61=8,pa4=1,ca4=e61-1;class AA1 extends V4{}class QA1 extends V4{}class qX0 extends V4{}class NX0 extends V4{}class $A1 extends V4{}class BA1 extends V4{}class DA1 extends P0{props;constructor(A){super(A.key===void 0?{}:{key:A.key});this.props=A}createState(){return new la4}}class la4 extends R0{messageScroll=new v6;initState(){super.initState(),this.messageScroll.followMode=!1,this.messageScroll.jumpTo(0)}dispose(){this.messageScroll.dispose(),super.dispose()}build(A){let Q=this.widget.props,$=Lb3(Q,this.messageScroll),B=Ob3(Q.options.message),D=B?new x4({actions:this.buildScrollActions(),child:new kA({debugLabel:"NeoSelectDialogScrollShortcuts",shortcuts:Rb3(),child:$})}):$,J=[{keys:["↑/↓","j/k"],label:"move"},{keys:["Enter"],label:"select"}];if(B)J.push({keys:["Ctrl+E","Ctrl+Y"],label:"scroll"});return J.push({keys:["Esc"],label:"cancel"}),new w6({header:Q.options.title,minWidth:64,maxWidth:80,footer:J,autofocus:!1,onDismiss:Q.onCancel,child:D})}buildScrollActions(){let A=(Q)=>{let $=Pb3(this.messageScroll.offset+Q,0,this.messageScroll.maxScrollExtent);this.messageScroll.jumpTo($)};return new Map([[AA1,new T1(()=>A(-pa4))],[QA1,new T1(()=>A(pa4))],[qX0,new T1(()=>A(-ca4))],[NX0,new T1(()=>A(ca4))],[$A1,new T1(()=>this.messageScroll.jumpTo(0))],[BA1,new T1(()=>this.messageScroll.jumpTo(this.messageScroll.maxScrollExtent))]])}}function Lb3(A,Q){let $=A.options.options.map((D)=>({value:D,label:D})),B=Math.max(0,$.findIndex((D)=>D.value===A.options.initialValue));return new I8({options:$,selectedIndex:B,body:jb3(A.options.message,Q),onSelect:(D)=>{if(D===null){A.onCancel();return}A.onSelect(D)},padding:V0.all(0),showBorder:!1,showDismissalMessage:!1,enableMouseInteraction:!0,wrapOptions:!0})}function Ob3(A){if(A===void 0)return!1;return A.split(`
5231
5231
  `).length>e61}function jb3(A,Q){if(A===void 0)return;let $=A.split(`
5232
5232
  `).length,B=Math.min($,e61);return new X0({width:1/0,height:B,child:new i8({autofocus:!1,controller:Q,child:new d({text:new C(A)})})})}function Rb3(){return new Map([[G1.key("PageUp"),new qX0],[G1.key("PageDown"),new NX0],[G1.ctrl("u"),new qX0],[G1.ctrl("d"),new NX0],[G1.ctrl("y"),new AA1],[G1.ctrl("e"),new QA1],[G1.shift("Home"),new $A1],[G1.shift("End"),new BA1]])}function Pb3(A,Q,$){return Math.max(Q,Math.min(A,$))}var ub3=3,_b3=new m6("NeoPluginDialogOverlay");function ia4(A,Q,$){if($!==void 0)return{type:"response",id:A,error:$};if(Q===void 0)return{type:"response",id:A};return{type:"response",id:A,result:Q}}class JA1{options;unregisterPluginCommands=null;pluginCommandSubscriptions=[];pluginErrorToastKeys=new Set;activeDialog=null;queuedDialogs=[];resolvingDialog=null;pendingOwnerUIRequests=new Map;pendingActorUIRequests=new Map;stateBackedRequestIDs=new Set;pluginUIRespondRequestCounter=0;statusItems=new Map;blockingConfirmDialog=!1;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.cancelOwnerUIRequests(),this.cancelPendingDialogs(),this.statusItems.clear(),this.clearPluginPlatformStatusHandlers()}handlePluginMessage(A,Q){let $=A.message;if($.type==="response"){this.cancelOwnerUIRequest($.id),this.cancelActorUIRequest($.id);return}if($.type==="event"){if(this.handlePluginUIStateEvent($,Q))return;this.handlePluginEvent($);return}if(this.stateBackedRequestIDs.has($.id))return;if(!pY0($.method))return;this.handleOwnerUIRequest($,Q)}cancelOwnerUIRequests(){let A=[...this.pendingOwnerUIRequests.values(),...this.pendingActorUIRequests.values()];this.pendingOwnerUIRequests.clear(),this.pendingActorUIRequests.clear(),this.stateBackedRequestIDs.clear();for(let Q of A)Q.abort()}hasBlockingDialog(){return this.activeDialog!==null}hasBlockingConfirmDialog(){return this.activeDialog?.kind==="confirm"}buildDialogLayers(){let A=this.activeDialog;if(!A)return[];return[new k4({key:_b3,debugLabel:"PluginDialogOverlay",autofocus:!1,canRequestFocus:!0,child:this.buildActiveDialog(A)})]}buildActiveDialog(A){switch(A.kind){case"input":return new ps({key:new nz(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 o61({key:new nz(A),options:A.options,onConfirm:()=>this.resolveConfirmDialog(A,!0),onCancel:()=>this.resolveConfirmDialog(A,!1)});case"select":return new DA1({key:new nz(A),options:A.options,onSelect:(Q)=>this.resolveSelectDialog(A,Q),onCancel:()=>this.resolveSelectDialog(A,void 0)})}}getStatusItems(){return[...this.statusItems.values()].flatMap((A)=>A.value===void 0?[]:[{pluginURI:A.pluginURI,id:A.id,value:A.value}])}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,A.createStatusItemHandler=this.createStatusItem,A.updateStatusItemHandler=this.updateStatusItem,A.removeStatusItemHandler=this.removeStatusItem}handlePluginEvent(A){if(A.event!=="ui.notify")return;let Q=A.data;if(typeof Q.message==="string")this.options.toastController.show(Q.message,"success")}async handleOwnerUIRequest(A,Q){let $=new AbortController;this.pendingOwnerUIRequests.set(A.id,$);try{let B=await this.dispatchOwnerUIRequest(A,$.signal);if(this.pendingOwnerUIRequests.get(A.id)!==$)return;this.pendingOwnerUIRequests.delete(A.id),Q(ia4(A.id,B))}catch(B){if(this.pendingOwnerUIRequests.get(A.id)!==$)return;this.pendingOwnerUIRequests.delete(A.id),Q(ia4(A.id,void 0,B instanceof Error?B.message:String(B)))}}dispatchOwnerUIRequest(A,Q){switch(A.method){case"ui.input":return this.showInputDialog(A.params.options,Q);case"ui.confirm":return this.showConfirmDialog(A.params.options,Q);case"ui.select":return this.showSelectDialog(A.params.options,Q);default:throw Error(`Unknown owner UI request method: ${A.method}`)}}cancelOwnerUIRequest(A){let Q=this.pendingOwnerUIRequests.get(A);if(!Q)return;this.pendingOwnerUIRequests.delete(A),Q.abort()}cancelActorUIRequest(A){let Q=this.pendingActorUIRequests.get(A);if(!Q)return;this.pendingActorUIRequests.delete(A),Q.abort()}buildPluginUIRespondRequest(A,Q,$){this.pluginUIRespondRequestCounter+=1;let B={requestId:A};if($!==void 0)B.error=$;else if(Q!==void 0)B.result=Q;return{type:"request",id:`plugin-ui-respond-${A}-${this.pluginUIRespondRequestCounter}`,method:"plugin.ui.respond",params:B}}async handleActorUIRequest(A,Q){let $=new AbortController;this.pendingActorUIRequests.set(A.requestId,$);let B={type:"request",id:A.requestId,method:A.method,params:A.params};try{let D=await this.dispatchOwnerUIRequest(B,$.signal);if(this.pendingActorUIRequests.get(A.requestId)!==$)return;this.pendingActorUIRequests.delete(A.requestId),Q(this.buildPluginUIRespondRequest(A.requestId,D))}catch(D){if(this.pendingActorUIRequests.get(A.requestId)!==$)return;this.pendingActorUIRequests.delete(A.requestId),Q(this.buildPluginUIRespondRequest(A.requestId,void 0,D instanceof Error?D.message:String(D)))}}upsertActorUIState(A,Q){if(this.stateBackedRequestIDs.add(A.requestId),A.status!=="pending"){this.cancelActorUIRequest(A.requestId);return}if(this.pendingActorUIRequests.has(A.requestId))return;this.handleActorUIRequest(A,Q)}handlePluginUISnapshot(A,Q){let $=new Set(A.requests.map((B)=>B.requestId));for(let B of this.pendingActorUIRequests.keys())if(!$.has(B))this.cancelActorUIRequest(B);for(let B of this.stateBackedRequestIDs)if(!$.has(B))this.stateBackedRequestIDs.delete(B);for(let B of A.requests)this.upsertActorUIState(B,Q)}handlePluginUIRequestAdded(A,Q){this.upsertActorUIState(A.request,Q)}handlePluginUIRequestSettled(A,Q){this.upsertActorUIState(A.request,Q)}handlePluginUIRequestRemoved(A){this.cancelActorUIRequest(A.requestId),this.stateBackedRequestIDs.delete(A.requestId)}handlePluginUIStateEvent(A,Q){if(A.event==="plugin.ui.snapshot"){let $=Pk4.safeParse(A.data);if($.success)this.handlePluginUISnapshot($.data,Q);return!0}if(A.event==="plugin.ui.request_added"){let $=uk4.safeParse(A.data);if($.success)this.handlePluginUIRequestAdded($.data,Q);return!0}if(A.event==="plugin.ui.request_settled"){let $=_k4.safeParse(A.data);if($.success)this.handlePluginUIRequestSettled($.data,Q);return!0}if(A.event==="plugin.ui.request_removed"){let $=Tk4.safeParse(A.data);if($.success)this.handlePluginUIRequestRemoved($.data);return!0}return!1}clearPluginPlatformStatusHandlers(){let A=this.options.neoContext.pluginPlatform;if(!A)return;if(A.createStatusItemHandler===this.createStatusItem)A.createStatusItemHandler=null;if(A.updateStatusItemHandler===this.updateStatusItem)A.updateStatusItemHandler=null;if(A.removeStatusItemHandler===this.removeStatusItem)A.removeStatusItemHandler=null}subscribePluginCommands(){let A=this.options.neoContext.pluginService;if(!A)return;this.refreshPluginCommands(A.commands.list()),this.pluginCommandSubscriptions=[A.plugins.subscribe((Q)=>{this.removeInactivePluginStatusItems(Q),this.showNewPluginErrorToasts(Q),this.refreshPluginCommands(A.commands.list())}),A.commands.changed.subscribe(()=>{this.refreshPluginCommands(A.commands.list())})]}refreshPluginCommands(A){this.unregisterPluginCommands?.();let $=A.map((B)=>this.createPluginCommand(B)).map((B)=>this.options.commandRegistry.register(B));this.unregisterPluginCommands=()=>{for(let B of $)B()}}showNewPluginErrorToasts(A){let Q=new Set;for(let $ of A){if($.status!=="error")continue;if(Cc($.errorMessage))continue;let B=`${$.uri.toString()}
5233
- ${$.errorMessage??""}`;if(Q.add(B),this.pluginErrorToastKeys.has(B))continue;this.options.toastController.show(this.formatPluginErrorToast($),"error",8000)}this.pluginErrorToastKeys=Q}removeInactivePluginStatusItems(A){let Q=new Set(A.filter((B)=>B.status==="active").map((B)=>B.uri.toString())),$=[];for(let[B,D]of this.statusItems){if(Q.has(D.pluginURI))continue;$.push(B)}if($.length===0)return;this.updateStatusItemState(()=>{for(let B of $)this.statusItems.delete(B)})}formatPluginErrorToast(A){let Q=A.uri.toString();return`Plugin failed: ${Q.split("/").pop()??Q}. See logs: ${this.options.neoContext.logFilePath}`}createPluginCommand(A){return{id:A.id,noun:A.category,verb:A.title,description:A.description??`Run plugin command ${A.category}: ${A.title}`,keywords:["plugin",A.pluginName,A.id],status:A.availability,run:async(Q,$,B)=>{B();try{await this.options.neoContext.pluginService?.commands.execute(A.pluginName,A.id,{threadID:this.options.getActiveThreadID()})}catch(D){P.error("Neo plugin command failed",{error:D,command:A}),this.options.toastController.show(D instanceof Error?D.message:String(D),"error",5000)}}}}showInputDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(void 0);return}let B={kind:"input",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=QY(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};showConfirmDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(!1);return}let B={kind:"confirm",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=QY(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};showSelectDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(void 0);return}let B={kind:"select",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=QY(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};createStatusItem=(A,Q,$)=>{if(this.disposed)return;this.updateStatusItemState(()=>{let B=this.statusItemKey(A,Q),D={pluginURI:A,id:Q};if($!==void 0)D.value=$;this.statusItems.set(B,D)})};updateStatusItem=(A,Q,$)=>{if(this.disposed)return;this.updateStatusItemState(()=>{this.statusItems.set(this.statusItemKey(A,Q),{pluginURI:A,id:Q,value:$})})};removeStatusItem=(A,Q)=>{if(this.disposed)return;this.updateStatusItemState(()=>{this.statusItems.delete(this.statusItemKey(A,Q))})};updateStatusItemState(A){if(this.options.state.mounted)this.options.state.setState(A);else A()}statusItemKey(A,Q){return`${A}\x00${Q}`}cancelPendingDialogs(){let A=[];if(this.activeDialog)A.push(this.activeDialog);A.push(...this.queuedDialogs),this.activeDialog=null,this.queuedDialogs=[],this.resolvingDialog=null,this.emitBlockingConfirmDialogChange();for(let Q of A)this.cancelDialog(Q)}cancelDialog(A){switch(A.abortUnsubscribe(),A.kind){case"input":A.resolve(void 0);return;case"confirm":A.resolve(!1);return;case"select":A.resolve(void 0);return}}abortDialog(A){if(this.activeDialog===A){this.advanceDialog(),this.cancelDialog(A);return}let Q=this.queuedDialogs.indexOf(A);if(Q===-1)return;this.updateDialogState(()=>{this.queuedDialogs.splice(Q,1)}),this.cancelDialog(A)}enqueueDialog(A){if(this.activeDialog){if(this.queuedDialogs.push(A),this.resolvingDialog===this.activeDialog)this.advanceResolvingDialog(this.activeDialog);return}this.options.commandPalette.disable(),this.options.state.setState(()=>{this.activeDialog=A}),this.emitBlockingConfirmDialogChange()}resolveInputDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveConfirmDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveSelectDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveDialog(A,Q){if(this.activeDialog!==A||this.resolvingDialog===A)return;this.resolvingDialog=A,A.abortUnsubscribe(),Q(),this.scheduleResolvingDialogAdvance(A,ub3)}scheduleResolvingDialogAdvance(A,Q){i6.instance.addPostFrameCallback(()=>{if(this.activeDialog!==A)return;if(this.queuedDialogs.length>0||Q<=1){this.advanceResolvingDialog(A);return}this.scheduleResolvingDialogAdvance(A,Q-1)},"NeoPluginIntegration.advanceDialog")}advanceResolvingDialog(A){if(this.resolvingDialog===A)this.resolvingDialog=null;if(this.activeDialog!==A)return;this.advanceDialog()}advanceDialog(){this.updateDialogState(()=>{this.activeDialog=this.queuedDialogs.shift()??null})}updateDialogState(A){if(this.options.state.mounted)this.options.state.setState(A);else A();this.emitBlockingConfirmDialogChange()}emitBlockingConfirmDialogChange(){let A=this.hasBlockingConfirmDialog();if(A===this.blockingConfirmDialog)return;this.blockingConfirmDialog=A,this.options.onBlockingConfirmDialogChange?.(A)}}var Tb3=48;class FA1{visible=!1;onClick=void 0;listeners=new Set;show(A){this.visible=!0,this.onClick=A,this.notifyListeners()}activate(){this.onClick?.()}get isVisible(){return this.visible}dismiss(){this.visible=!1,this.onClick=void 0,this.notifyListeners()}addListener(A){this.listeners.add(A)}removeListener(A){this.listeners.delete(A)}buildComplexToast(){if(!this.visible||!this.onClick)return null;return new hs({width:Tb3,title:"Relaunch to Update Amp",message:"Your threads will resume.",variant:"success",mouseBehavior:"click-anywhere",action:{keyboardShortcut:"Ctrl+O",command:"amp: relaunch",confirmShortcut:"Enter",label:"relaunch",onAction:()=>this.activate()}})}notifyListeners(){for(let A of this.listeners)A()}}p0();import{spawnSync as vb3}from"node:child_process";import YI from"node:process";var na4={options:new Set(["settings-file","log-level","log-file","mcp-config"]),booleans:new Set(["color","dangerously-allow-all","ide","jetbrains","neo-orb","notifications"])};function cs(A){let Q=A.getRelaunchThreadIDs();if(A.onRelaunchRequested?.(Q),A.stop)A.stop();else z4.instance.stop()}function aa4(A){return{noun:"amp",verb:"Relaunch (Quit, then Reopen & Resume Thread)",description:"Quit, reopen Amp, and resume active threads",keywords:["restart","update","resume","reopen"],shortcut:YI.env.NODE_ENV==="development"&&YI.platform==="darwin"?G1.meta("r"):void 0,status:{type:"enabled"},sortBoost:90,run:(Q,$,B)=>{B(),cs(A)}}}function kb3(A,Q){P.info("Relaunching Amp; threads will be resumed",{threadIDs:A});let{command:$,args:B}=Sb3(A),D=vb3($,B,{cwd:Q,env:YI.env,stdio:"inherit"});if(D.error)return P.error("Failed to relaunch Amp",{error:D.error}),1;return D.status??1}class YA1{relaunchRequested=!1;requestedThreadIDs=[];request=(A)=>{P.info("Relaunch requested; threads will be resumed",{threadIDs:A}),this.relaunchRequested=!0,this.requestedThreadIDs=A};get shouldShowExitSummary(){return!this.relaunchRequested}relaunchIfRequested(A){if(!this.relaunchRequested)return;return kb3(this.requestedThreadIDs,A)}}function Sb3(A){let Q=A.length>0?["threads","continue",...A]:[],$=fb3(YI.argv),B=xb3();if(B)return{command:B.command,args:[...B.args,...$,...Q]};let D=YI.argv[1],J=D&&yb3(D)?[D]:[];return{command:YI.execPath,args:[...J,...$,...Q]}}function fb3(A){let Q=[],$=A.slice(2);for(let B=0;B<$.length;B+=1){let D=$[B];if(!D?.startsWith("--"))continue;let[J,F]=D.split("=",2);if(!J)continue;let Y=J.slice(2),E=Y.startsWith("no-")?Y.slice(3):Y;if(na4.booleans.has(E)){Q.push(D);continue}if(!na4.options.has(Y))continue;if(F!==void 0){Q.push(D);continue}let Z=$[B+1];if(Z===void 0||Z.startsWith("--"))continue;Q.push(D,Z),B+=1}return Q}function yb3(A){return A!==YI.execPath&&!A.startsWith("/$bunfs/")}function xb3(){if(YI.env.NODE_ENV!=="development")return null;let A=YI.env.AMP_DEV_RELAUNCH_COMMAND?.trim();if(!A)return null;let Q=bb3(A),$=Q[0];if(!$)return null;return{command:$,args:Q.slice(1)}}function bb3(A){if(A.startsWith("["))try{let Q=JSON.parse(A);if(Array.isArray(Q)&&Q.every(($)=>typeof $==="string"))return Q}catch{return[]}return A.split(/\s+/).filter(Boolean)}var hb3=18000000;class EA1{options;subscription=null;relaunchNotificationShown=!1;relaunchNotificationPending=!1;relaunchNotificationTimer=null;openedAt=Date.now();constructor(A){this.options=A}init(){if(this.subscription=this.options.updateService?.state.subscribe((A)=>{this.handleUpdateState(A)})??null,process.env.DEV_SHOW_RELAUNCH_NOTIF_ON_STARTUP==="1")this.showUpdateRelaunchNotification(!0)}dispose(){if(this.subscription?.unsubscribe(),this.subscription=null,this.relaunchNotificationTimer)clearTimeout(this.relaunchNotificationTimer),this.relaunchNotificationTimer=null}handleUpdateState(A){if(A!=="updated")return;this.showUpdateRelaunchNotification()}showUpdateRelaunchNotification(A=!1){if(this.relaunchNotificationShown)return;let $=(this.options.minimumOpenDurationMs??hb3)-(Date.now()-this.openedAt);if($>0&&!A){if(this.relaunchNotificationPending=!0,!this.relaunchNotificationTimer)this.relaunchNotificationTimer=setTimeout(()=>{if(this.relaunchNotificationTimer=null,!this.relaunchNotificationPending)return;this.relaunchNotificationPending=!1,this.showUpdateRelaunchNotification()},$),this.relaunchNotificationTimer.unref();return}this.relaunchNotificationPending=!1,this.relaunchNotificationShown=!0,this.options.relaunchNotificationController.show(()=>cs(this.options))}}ol();$8();import{readFile as gb3}from"node:fs/promises";import ZA1 from"node:os";function mb3(A=new Date){return A.toISOString().replaceAll("-","").replaceAll(":","").slice(0,15)+"Z"}async function oa4(A,Q){try{return{path:Q,contents:Dm0(await gb3(A,"utf8"))}}catch{return null}}async function wX0(A,Q){let $=[],B=mb3(),D=await e4.getThread({thread:Q},{config:A.configService}),J=D.ok?D.result.thread.data:null;$.push({path:`${B}/thread.json`,contents:JSON.stringify(XD(J),null,2)});let F=await oa4(If(Q),`${B}/logs/${Q}.log`);if(F)$.push(F);let Y=await oa4(A.settingsFilePath,`${B}/settings/global.json`);if(Y)$.push(Y);let E=await kG()??"unknown",Z=await e4.sendReport({threadID:Q,files:$,metadata:{clientVersion:"0.0.1779345702-g49e69d",clientOS:`${ZA1.platform()} ${ZA1.release()} ${ZA1.arch()}`,installMethod:E}},{config:A.configService});if(!Z.ok)throw Error(`Failed to submit report: ${Z.error.message}`);return Z.result.reportID}class UA1{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 $=Boolean(A);if(A)this.forwardStack.push(A);return{targetThreadID:Q,rollback:()=>{if($)this.forwardStack.pop();this.backStack.push(Q)}}}startForwardNavigation(A){let Q=this.forwardStack.pop();if(!Q)return null;let $=Boolean(A);if(A)this.backStack.push(A);return{targetThreadID:Q,rollback:()=>{if($)this.backStack.pop();this.forwardStack.push(Q)}}}}class CX0 extends g3{offstage;constructor({key:A,offstage:Q=!0,child:$}){super({key:A,child:$});this.offstage=Q}createRenderObject(){return new XA1(this.offstage)}updateRenderObject(A){if(A instanceof XA1)A.offstage=this.offstage}}class XA1 extends p1{_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 $=A.constrain(Q.size.width,Q.size.height);this.setSize($.width,$.height),Q.setOffset(0,0)}else{let $=A.smallest;this.setSize($.width,$.height)}super.performLayout()}paint(A,Q,$){if(this._offstage)return;super.paint(A,Q,$)}hitTest(A,Q,$,B){if(this._offstage)return!1;return super.hitTest(A,Q,$,B)}}class ls{_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 GA1 extends P0{root;controller;constructor(A){super();this.root=A.root,this.controller=A.controller}createState(){return new ra4}}class ra4 extends R0{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 pj,$=this.makeScopedDismiss(Q);this.setState(()=>{this.entries.push({key:Q,widget:A,dismiss:$})})}pushWithDismiss(A){let Q=new pj,$=this.makeScopedDismiss(Q),B=A($);this.setState(()=>{this.entries.push({key:Q,widget:B,dismiss:$})})}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 CX0({offstage:this.entries.length>0,child:this.widget.root}));for(let $=0;$<this.entries.length;$++){let B=this.entries[$],D=$===this.entries.length-1,J=D?new k4({autofocus:!0,debugLabel:`ModalStackEntry[${$}]`,onKey:(F)=>{if(F.key!=="Escape")return"ignored";return B.dismiss(),"handled"},child:B.widget}):B.widget;Q.push(new CX0({key:B.key,offstage:!D,child:J}))}return new i4({fit:"expand",children:Q})}}import sa4 from"node:process";class KA1 extends H1{props;constructor(A){super();this.props=A}build(A){let Q=this.props.commands.filter((B)=>B.status.type!=="hidden"),$=db3(Q);return new w6({header:"Command Palette",autofocus:!1,barrierOpaque:!1,chromePadding:V0.only({left:1,top:1,right:1}),footer:"none",onDismiss:this.props.onDismiss,child:new lA({items:Q,showBorder:!1,getLabel:(B)=>{let D=VA1(B);return B.keywords&&B.keywords.length>0?`${D} ${B.keywords.join(" ").toLowerCase()}`:D},sortItems:(B,D,J)=>{if(J===""){let U=B.item.status.type==="disabled"?1:0,X=D.item.status.type==="disabled"?1:0;if(U!==X)return U-X;let G=B.item.sortBoost??0,V=D.item.sortBoost??0;if(G!==V)return V-G;let K=B.item.noun?.toLowerCase()??"",z=D.item.noun?.toLowerCase()??"";if(K!==z)return K<z?-1:1;return 0}let F=ZR(B.item.verb.toLowerCase(),J),Y=ZR(D.item.verb.toLowerCase(),J);if(F!==Y)return Y-F;let E=ZR(VA1(B.item),J),Z=ZR(VA1(D.item),J);if(E!==Z)return Z-E;return D.score-B.score},isItemDisabled:(B)=>B.status.type==="disabled",buildDisabledReasonWidget:(B,D)=>{if(B.status.type!=="disabled")return;let{colors:J}=O0.of(D);return new d({text:new C(B.status.reason,new T({color:J.mutedForeground,dim:!0})),textAlign:"center"})},renderItem:(B,D,J,F)=>new ta4({command:B,isSelected:D,isDisabled:J,categoryWidth:$,buildContext:F}),onAccept:(B)=>{this.props.onAccept(B)},onDismiss:this.props.onDismiss})})}}class ta4 extends H1{props;constructor(A){super();this.props=A}build(A){let{command:Q,isSelected:$,isDisabled:B,categoryWidth:D,buildContext:J}=this.props,F=O0.of(J),{colors:Y,app:E}=F,Z=$?E.selectionBackground:void 0,U=$?E.selectionForeground:Y.foreground,X=$?U:Y.mutedForeground,G=new d({text:new C(Q.noun?.toLowerCase()??"",new T({color:X,dim:B||!$})),textAlign:"right"}),V=[new C(Q.verb.toLowerCase(),new T({color:U,bold:!0,dim:B}))];if(B)V.push(new C(" (unavailable)",new T({color:U,dim:!0})));let K=d.spans(V),z=[{child:G,fixedWidth:D},{child:K,expanded:!0}];if(Q.shortcut)z.push({child:pb3(Q.shortcut,F,B)});return new ea4({columns:z,padding:V0.horizontal(1),backgroundColor:Z})}}function VA1(A){return A.noun?`${A.noun.toLowerCase()} ${A.verb.toLowerCase()}`:A.verb.toLowerCase()}function db3(A){return A.reduce((Q,$)=>{return $.noun?Math.max(Q,J4($.noun)):Q},0)}function pb3(A,Q,$){let{colors:B,app:D}=Q,J=new T({color:B.mutedForeground,dim:$}),F=[];for(let Y of A.modifiers()){if(F.length>0)F.push(new C(" ",J));F.push(new C(cb3(Y),new T({color:D.keybind,bold:!0,dim:$})))}if(F.length>0)F.push(new C(" ",J));return F.push(new C(lb3(A),new T({color:D.keybind,bold:!0,dim:$}))),d.spans(F)}function cb3(A){return A==="Meta"&&sa4.platform==="darwin"?"Cmd":A}function lb3(A){return A.meta&&sa4.platform==="darwin"?A.key.toUpperCase():A.key}class ea4 extends H1{props;constructor(A){super();this.props=A}build(A){let{columns:Q,gap:$=2,padding:B,backgroundColor:D}=this.props,J=[];for(let Y=0;Y<Q.length;Y++){let E=Q[Y];if(Y>0&&$>0)J.push(new X0({width:$}));if(E.fixedWidth!==void 0)J.push(new X0({width:E.fixedWidth,child:E.child}));else if(E.expanded)J.push(new R1({child:E.child}));else J.push(E.child)}let F=new r0({crossAxisAlignment:"start",children:J});if(!B&&!D)return F;return new b0({decoration:D?{color:D}:void 0,padding:B,child:F})}}class zA1{#A=[];#Q=new Set;get commands(){return this.#A}register(A){return this.#A.push(A),this.#$(),()=>{let Q=this.#A.indexOf(A);if(Q===-1)return;this.#A.splice(Q,1),this.#$()}}findByID(A){return this.#A.find((Q)=>Q.id===A)}runByID(A,Q){let $=this.findByID(A);if(!$||$.status.type!=="enabled")return!1;return $.run(new ls,Q,()=>{}),!0}addListener(A){this.#Q.add(A)}removeListener(A){this.#Q.delete(A)}#$(){for(let A of this.#Q)A()}}class M9 extends KA{commandRegistry;constructor({commandRegistry:A,child:Q}){super({child:Q});this.commandRegistry=A}updateShouldNotify(A){return!1}static of(A){let Q=M9.maybeOf(A);if(!Q)throw Error("No NeoCommandRegistryProvider found in widget tree");return Q}static maybeOf(A){return A.dependOnInheritedWidgetOfExactType(M9)?.commandRegistry??null}}class IA1 extends P0{onDismiss;constructor(A){super();this.onDismiss=A.onDismiss}createState(){return new Ao4}}class Ao4 extends R0{modalStack=new ls;commandRegistry=null;initState(){super.initState(),queueMicrotask(()=>{if(!this.mounted)return;let A=M9.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=M9.of(A).commands,$=new KA1({commands:Q,onAccept:(B)=>{B.run(this.modalStack,A,this.widget.onDismiss)},onDismiss:()=>{if(this.modalStack.canPop)this.modalStack.pop();else this.widget.onDismiss()}});return new GA1({root:$,controller:this.modalStack})}}var WA1=[{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"]}]},{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"]}]}],HA1=[{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 MX0 extends H1{items;renderRow;constructor({items:A,renderRow:Q}){super();this.items=A,this.renderRow=Q}build(A){let $=c1.of(A).size.width,B=50,D=$<50,J=[];for(let F of this.items){let[Y,E]=this.renderRow(F),Z;if(D)Z=new S0({crossAxisAlignment:"start",mainAxisSize:"min",children:[Y,new f0({padding:V0.only({left:4}),child:E})]});else Z=new r0({crossAxisAlignment:"start",children:[new R1({flex:1,child:Y}),new X0({width:1}),new R1({flex:1,child:E})]});J.push(new f0({padding:V0.horizontal(6),child:Z}))}return new S0({crossAxisAlignment:"start",mainAxisSize:"min",children:J})}}class qA1 extends P0{commands;submitOnEnter;constructor({key:A,commands:Q,submitOnEnter:$}){super(A?{key:A}:{});this.commands=Q,this.submitOnEnter=$??!0}createState(){return new Qo4}}class Qo4 extends R0{scrollController;initState(){this.scrollController=new v6,this.scrollController.disableFollowMode(),this.scrollController.jumpTo(0)}dispose(){}build(A){let $=L1.of(A).colorScheme,D=O0.of(A).app,J=c1.of(A),F=new T({color:$.primary,bold:!0}),Y=new T({color:$.secondary,bold:!0}),E=new T({color:D.keybind}),Z=new T({color:D.command}),U=new T({color:$.foreground}),X=new T({color:$.foreground}),G=J.size.width,V=J.size.height,K=G-4,z=V-4,I=Math.max(40,Math.min(80,K)),W=new Set(["permissions-disable"]),q=[...this.widget.commands.filter((L)=>{let j=L.noun?.toLowerCase();return j!=="dev"&&j!=="debug"&&!L.id.startsWith("debug-")&&!W.has(L.id)})].sort((L,j)=>{let k=(L.noun??"").toLowerCase(),_=(j.noun??"").toLowerCase(),f=k.localeCompare(_);if(f!==0)return f;let h=L.verb.toLowerCase(),b=j.verb.toLowerCase(),v=h.localeCompare(b);if(v!==0)return v;return L.id.localeCompare(j.id)}),N=new k6({autofocus:!0,controller:this.scrollController,child:new b0({constraints:new C1(I,I,0,Number.POSITIVE_INFINITY),child:new S0({crossAxisAlignment:"start",mainAxisSize:"min",children:[new $4({child:new d({text:new C(`Amp CLI - Help & Keyboard Shortcuts
5233
+ ${$.errorMessage??""}`;if(Q.add(B),this.pluginErrorToastKeys.has(B))continue;this.options.toastController.show(this.formatPluginErrorToast($),"error",8000)}this.pluginErrorToastKeys=Q}removeInactivePluginStatusItems(A){let Q=new Set(A.filter((B)=>B.status==="active").map((B)=>B.uri.toString())),$=[];for(let[B,D]of this.statusItems){if(Q.has(D.pluginURI))continue;$.push(B)}if($.length===0)return;this.updateStatusItemState(()=>{for(let B of $)this.statusItems.delete(B)})}formatPluginErrorToast(A){let Q=A.uri.toString();return`Plugin failed: ${Q.split("/").pop()??Q}. See logs: ${this.options.neoContext.logFilePath}`}createPluginCommand(A){return{id:A.id,noun:A.category,verb:A.title,description:A.description??`Run plugin command ${A.category}: ${A.title}`,keywords:["plugin",A.pluginName,A.id],status:A.availability,run:async(Q,$,B)=>{B();try{await this.options.neoContext.pluginService?.commands.execute(A.pluginName,A.id,{threadID:this.options.getActiveThreadID()})}catch(D){P.error("Neo plugin command failed",{error:D,command:A}),this.options.toastController.show(D instanceof Error?D.message:String(D),"error",5000)}}}}showInputDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(void 0);return}let B={kind:"input",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=QY(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};showConfirmDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(!1);return}let B={kind:"confirm",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=QY(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};showSelectDialog=(A,Q)=>{return new Promise(($)=>{if(this.disposed||!this.options.state.mounted||Q?.aborted){$(void 0);return}let B={kind:"select",options:A,resolve:$,abortUnsubscribe:()=>{}};B.abortUnsubscribe=QY(Q,()=>this.abortDialog(B)),this.enqueueDialog(B)})};createStatusItem=(A,Q,$)=>{if(this.disposed)return;this.updateStatusItemState(()=>{let B=this.statusItemKey(A,Q),D={pluginURI:A,id:Q};if($!==void 0)D.value=$;this.statusItems.set(B,D)})};updateStatusItem=(A,Q,$)=>{if(this.disposed)return;this.updateStatusItemState(()=>{this.statusItems.set(this.statusItemKey(A,Q),{pluginURI:A,id:Q,value:$})})};removeStatusItem=(A,Q)=>{if(this.disposed)return;this.updateStatusItemState(()=>{this.statusItems.delete(this.statusItemKey(A,Q))})};updateStatusItemState(A){if(this.options.state.mounted)this.options.state.setState(A);else A()}statusItemKey(A,Q){return`${A}\x00${Q}`}cancelPendingDialogs(){let A=[];if(this.activeDialog)A.push(this.activeDialog);A.push(...this.queuedDialogs),this.activeDialog=null,this.queuedDialogs=[],this.resolvingDialog=null,this.emitBlockingConfirmDialogChange();for(let Q of A)this.cancelDialog(Q)}cancelDialog(A){switch(A.abortUnsubscribe(),A.kind){case"input":A.resolve(void 0);return;case"confirm":A.resolve(!1);return;case"select":A.resolve(void 0);return}}abortDialog(A){if(this.activeDialog===A){this.advanceDialog(),this.cancelDialog(A);return}let Q=this.queuedDialogs.indexOf(A);if(Q===-1)return;this.updateDialogState(()=>{this.queuedDialogs.splice(Q,1)}),this.cancelDialog(A)}enqueueDialog(A){if(this.activeDialog){if(this.queuedDialogs.push(A),this.resolvingDialog===this.activeDialog)this.advanceResolvingDialog(this.activeDialog);return}this.options.commandPalette.disable(),this.options.state.setState(()=>{this.activeDialog=A}),this.emitBlockingConfirmDialogChange()}resolveInputDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveConfirmDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveSelectDialog(A,Q){this.resolveDialog(A,()=>A.resolve(Q))}resolveDialog(A,Q){if(this.activeDialog!==A||this.resolvingDialog===A)return;this.resolvingDialog=A,A.abortUnsubscribe(),Q(),this.scheduleResolvingDialogAdvance(A,ub3)}scheduleResolvingDialogAdvance(A,Q){i6.instance.addPostFrameCallback(()=>{if(this.activeDialog!==A)return;if(this.queuedDialogs.length>0||Q<=1){this.advanceResolvingDialog(A);return}this.scheduleResolvingDialogAdvance(A,Q-1)},"NeoPluginIntegration.advanceDialog")}advanceResolvingDialog(A){if(this.resolvingDialog===A)this.resolvingDialog=null;if(this.activeDialog!==A)return;this.advanceDialog()}advanceDialog(){this.updateDialogState(()=>{this.activeDialog=this.queuedDialogs.shift()??null})}updateDialogState(A){if(this.options.state.mounted)this.options.state.setState(A);else A();this.emitBlockingConfirmDialogChange()}emitBlockingConfirmDialogChange(){let A=this.hasBlockingConfirmDialog();if(A===this.blockingConfirmDialog)return;this.blockingConfirmDialog=A,this.options.onBlockingConfirmDialogChange?.(A)}}var Tb3=48;class FA1{visible=!1;onClick=void 0;listeners=new Set;show(A){this.visible=!0,this.onClick=A,this.notifyListeners()}activate(){this.onClick?.()}get isVisible(){return this.visible}dismiss(){this.visible=!1,this.onClick=void 0,this.notifyListeners()}addListener(A){this.listeners.add(A)}removeListener(A){this.listeners.delete(A)}buildComplexToast(){if(!this.visible||!this.onClick)return null;return new hs({width:Tb3,title:"Relaunch to Update Amp",message:"Your threads will resume.",variant:"success",mouseBehavior:"click-anywhere",action:{keyboardShortcut:"Ctrl+O",command:"amp: relaunch",confirmShortcut:"Enter",label:"relaunch",onAction:()=>this.activate()}})}notifyListeners(){for(let A of this.listeners)A()}}p0();import{spawnSync as vb3}from"node:child_process";import YI from"node:process";var na4={options:new Set(["settings-file","log-level","log-file","mcp-config"]),booleans:new Set(["color","dangerously-allow-all","ide","jetbrains","neo-orb","notifications"])};function cs(A){let Q=A.getRelaunchThreadIDs();if(A.onRelaunchRequested?.(Q),A.stop)A.stop();else z4.instance.stop()}function aa4(A){return{noun:"amp",verb:"Relaunch (Quit, then Reopen & Resume Thread)",description:"Quit, reopen Amp, and resume active threads",keywords:["restart","update","resume","reopen"],shortcut:YI.env.NODE_ENV==="development"&&YI.platform==="darwin"?G1.meta("r"):void 0,status:{type:"enabled"},sortBoost:90,run:(Q,$,B)=>{B(),cs(A)}}}function kb3(A,Q){P.info("Relaunching Amp; threads will be resumed",{threadIDs:A});let{command:$,args:B}=Sb3(A),D=vb3($,B,{cwd:Q,env:YI.env,stdio:"inherit"});if(D.error)return P.error("Failed to relaunch Amp",{error:D.error}),1;return D.status??1}class YA1{relaunchRequested=!1;requestedThreadIDs=[];request=(A)=>{P.info("Relaunch requested; threads will be resumed",{threadIDs:A}),this.relaunchRequested=!0,this.requestedThreadIDs=A};get shouldShowExitSummary(){return!this.relaunchRequested}relaunchIfRequested(A){if(!this.relaunchRequested)return;return kb3(this.requestedThreadIDs,A)}}function Sb3(A){let Q=A.length>0?["threads","continue",...A]:[],$=fb3(YI.argv),B=xb3();if(B)return{command:B.command,args:[...B.args,...$,...Q]};let D=YI.argv[1],J=D&&yb3(D)?[D]:[];return{command:YI.execPath,args:[...J,...$,...Q]}}function fb3(A){let Q=[],$=A.slice(2);for(let B=0;B<$.length;B+=1){let D=$[B];if(!D?.startsWith("--"))continue;let[J,F]=D.split("=",2);if(!J)continue;let Y=J.slice(2),E=Y.startsWith("no-")?Y.slice(3):Y;if(na4.booleans.has(E)){Q.push(D);continue}if(!na4.options.has(Y))continue;if(F!==void 0){Q.push(D);continue}let Z=$[B+1];if(Z===void 0||Z.startsWith("--"))continue;Q.push(D,Z),B+=1}return Q}function yb3(A){return A!==YI.execPath&&!A.startsWith("/$bunfs/")}function xb3(){if(YI.env.NODE_ENV!=="development")return null;let A=YI.env.AMP_DEV_RELAUNCH_COMMAND?.trim();if(!A)return null;let Q=bb3(A),$=Q[0];if(!$)return null;return{command:$,args:Q.slice(1)}}function bb3(A){if(A.startsWith("["))try{let Q=JSON.parse(A);if(Array.isArray(Q)&&Q.every(($)=>typeof $==="string"))return Q}catch{return[]}return A.split(/\s+/).filter(Boolean)}var hb3=18000000;class EA1{options;subscription=null;relaunchNotificationShown=!1;relaunchNotificationPending=!1;relaunchNotificationTimer=null;openedAt=Date.now();constructor(A){this.options=A}init(){if(this.subscription=this.options.updateService?.state.subscribe((A)=>{this.handleUpdateState(A)})??null,process.env.DEV_SHOW_RELAUNCH_NOTIF_ON_STARTUP==="1")this.showUpdateRelaunchNotification(!0)}dispose(){if(this.subscription?.unsubscribe(),this.subscription=null,this.relaunchNotificationTimer)clearTimeout(this.relaunchNotificationTimer),this.relaunchNotificationTimer=null}handleUpdateState(A){if(A!=="updated")return;this.showUpdateRelaunchNotification()}showUpdateRelaunchNotification(A=!1){if(this.relaunchNotificationShown)return;let $=(this.options.minimumOpenDurationMs??hb3)-(Date.now()-this.openedAt);if($>0&&!A){if(this.relaunchNotificationPending=!0,!this.relaunchNotificationTimer)this.relaunchNotificationTimer=setTimeout(()=>{if(this.relaunchNotificationTimer=null,!this.relaunchNotificationPending)return;this.relaunchNotificationPending=!1,this.showUpdateRelaunchNotification()},$),this.relaunchNotificationTimer.unref();return}this.relaunchNotificationPending=!1,this.relaunchNotificationShown=!0,this.options.relaunchNotificationController.show(()=>cs(this.options))}}ol();$8();import{readFile as gb3}from"node:fs/promises";import ZA1 from"node:os";function mb3(A=new Date){return A.toISOString().replaceAll("-","").replaceAll(":","").slice(0,15)+"Z"}async function oa4(A,Q){try{return{path:Q,contents:Dm0(await gb3(A,"utf8"))}}catch{return null}}async function wX0(A,Q){let $=[],B=mb3(),D=await e4.getThread({thread:Q},{config:A.configService}),J=D.ok?D.result.thread.data:null;$.push({path:`${B}/thread.json`,contents:JSON.stringify(XD(J),null,2)});let F=await oa4(If(Q),`${B}/logs/${Q}.log`);if(F)$.push(F);let Y=await oa4(A.settingsFilePath,`${B}/settings/global.json`);if(Y)$.push(Y);let E=await kG()??"unknown",Z=await e4.sendReport({threadID:Q,files:$,metadata:{clientVersion:"0.0.1779354043-g150a4f",clientOS:`${ZA1.platform()} ${ZA1.release()} ${ZA1.arch()}`,installMethod:E}},{config:A.configService});if(!Z.ok)throw Error(`Failed to submit report: ${Z.error.message}`);return Z.result.reportID}class UA1{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 $=Boolean(A);if(A)this.forwardStack.push(A);return{targetThreadID:Q,rollback:()=>{if($)this.forwardStack.pop();this.backStack.push(Q)}}}startForwardNavigation(A){let Q=this.forwardStack.pop();if(!Q)return null;let $=Boolean(A);if(A)this.backStack.push(A);return{targetThreadID:Q,rollback:()=>{if($)this.backStack.pop();this.forwardStack.push(Q)}}}}class CX0 extends g3{offstage;constructor({key:A,offstage:Q=!0,child:$}){super({key:A,child:$});this.offstage=Q}createRenderObject(){return new XA1(this.offstage)}updateRenderObject(A){if(A instanceof XA1)A.offstage=this.offstage}}class XA1 extends p1{_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 $=A.constrain(Q.size.width,Q.size.height);this.setSize($.width,$.height),Q.setOffset(0,0)}else{let $=A.smallest;this.setSize($.width,$.height)}super.performLayout()}paint(A,Q,$){if(this._offstage)return;super.paint(A,Q,$)}hitTest(A,Q,$,B){if(this._offstage)return!1;return super.hitTest(A,Q,$,B)}}class ls{_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 GA1 extends P0{root;controller;constructor(A){super();this.root=A.root,this.controller=A.controller}createState(){return new ra4}}class ra4 extends R0{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 pj,$=this.makeScopedDismiss(Q);this.setState(()=>{this.entries.push({key:Q,widget:A,dismiss:$})})}pushWithDismiss(A){let Q=new pj,$=this.makeScopedDismiss(Q),B=A($);this.setState(()=>{this.entries.push({key:Q,widget:B,dismiss:$})})}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 CX0({offstage:this.entries.length>0,child:this.widget.root}));for(let $=0;$<this.entries.length;$++){let B=this.entries[$],D=$===this.entries.length-1,J=D?new k4({autofocus:!0,debugLabel:`ModalStackEntry[${$}]`,onKey:(F)=>{if(F.key!=="Escape")return"ignored";return B.dismiss(),"handled"},child:B.widget}):B.widget;Q.push(new CX0({key:B.key,offstage:!D,child:J}))}return new i4({fit:"expand",children:Q})}}import sa4 from"node:process";class KA1 extends H1{props;constructor(A){super();this.props=A}build(A){let Q=this.props.commands.filter((B)=>B.status.type!=="hidden"),$=db3(Q);return new w6({header:"Command Palette",autofocus:!1,barrierOpaque:!1,chromePadding:V0.only({left:1,top:1,right:1}),footer:"none",onDismiss:this.props.onDismiss,child:new lA({items:Q,showBorder:!1,getLabel:(B)=>{let D=VA1(B);return B.keywords&&B.keywords.length>0?`${D} ${B.keywords.join(" ").toLowerCase()}`:D},sortItems:(B,D,J)=>{if(J===""){let U=B.item.status.type==="disabled"?1:0,X=D.item.status.type==="disabled"?1:0;if(U!==X)return U-X;let G=B.item.sortBoost??0,V=D.item.sortBoost??0;if(G!==V)return V-G;let K=B.item.noun?.toLowerCase()??"",z=D.item.noun?.toLowerCase()??"";if(K!==z)return K<z?-1:1;return 0}let F=ZR(B.item.verb.toLowerCase(),J),Y=ZR(D.item.verb.toLowerCase(),J);if(F!==Y)return Y-F;let E=ZR(VA1(B.item),J),Z=ZR(VA1(D.item),J);if(E!==Z)return Z-E;return D.score-B.score},isItemDisabled:(B)=>B.status.type==="disabled",buildDisabledReasonWidget:(B,D)=>{if(B.status.type!=="disabled")return;let{colors:J}=O0.of(D);return new d({text:new C(B.status.reason,new T({color:J.mutedForeground,dim:!0})),textAlign:"center"})},renderItem:(B,D,J,F)=>new ta4({command:B,isSelected:D,isDisabled:J,categoryWidth:$,buildContext:F}),onAccept:(B)=>{this.props.onAccept(B)},onDismiss:this.props.onDismiss})})}}class ta4 extends H1{props;constructor(A){super();this.props=A}build(A){let{command:Q,isSelected:$,isDisabled:B,categoryWidth:D,buildContext:J}=this.props,F=O0.of(J),{colors:Y,app:E}=F,Z=$?E.selectionBackground:void 0,U=$?E.selectionForeground:Y.foreground,X=$?U:Y.mutedForeground,G=new d({text:new C(Q.noun?.toLowerCase()??"",new T({color:X,dim:B||!$})),textAlign:"right"}),V=[new C(Q.verb.toLowerCase(),new T({color:U,bold:!0,dim:B}))];if(B)V.push(new C(" (unavailable)",new T({color:U,dim:!0})));let K=d.spans(V),z=[{child:G,fixedWidth:D},{child:K,expanded:!0}];if(Q.shortcut)z.push({child:pb3(Q.shortcut,F,B)});return new ea4({columns:z,padding:V0.horizontal(1),backgroundColor:Z})}}function VA1(A){return A.noun?`${A.noun.toLowerCase()} ${A.verb.toLowerCase()}`:A.verb.toLowerCase()}function db3(A){return A.reduce((Q,$)=>{return $.noun?Math.max(Q,J4($.noun)):Q},0)}function pb3(A,Q,$){let{colors:B,app:D}=Q,J=new T({color:B.mutedForeground,dim:$}),F=[];for(let Y of A.modifiers()){if(F.length>0)F.push(new C(" ",J));F.push(new C(cb3(Y),new T({color:D.keybind,bold:!0,dim:$})))}if(F.length>0)F.push(new C(" ",J));return F.push(new C(lb3(A),new T({color:D.keybind,bold:!0,dim:$}))),d.spans(F)}function cb3(A){return A==="Meta"&&sa4.platform==="darwin"?"Cmd":A}function lb3(A){return A.meta&&sa4.platform==="darwin"?A.key.toUpperCase():A.key}class ea4 extends H1{props;constructor(A){super();this.props=A}build(A){let{columns:Q,gap:$=2,padding:B,backgroundColor:D}=this.props,J=[];for(let Y=0;Y<Q.length;Y++){let E=Q[Y];if(Y>0&&$>0)J.push(new X0({width:$}));if(E.fixedWidth!==void 0)J.push(new X0({width:E.fixedWidth,child:E.child}));else if(E.expanded)J.push(new R1({child:E.child}));else J.push(E.child)}let F=new r0({crossAxisAlignment:"start",children:J});if(!B&&!D)return F;return new b0({decoration:D?{color:D}:void 0,padding:B,child:F})}}class zA1{#A=[];#Q=new Set;get commands(){return this.#A}register(A){return this.#A.push(A),this.#$(),()=>{let Q=this.#A.indexOf(A);if(Q===-1)return;this.#A.splice(Q,1),this.#$()}}findByID(A){return this.#A.find((Q)=>Q.id===A)}runByID(A,Q){let $=this.findByID(A);if(!$||$.status.type!=="enabled")return!1;return $.run(new ls,Q,()=>{}),!0}addListener(A){this.#Q.add(A)}removeListener(A){this.#Q.delete(A)}#$(){for(let A of this.#Q)A()}}class M9 extends KA{commandRegistry;constructor({commandRegistry:A,child:Q}){super({child:Q});this.commandRegistry=A}updateShouldNotify(A){return!1}static of(A){let Q=M9.maybeOf(A);if(!Q)throw Error("No NeoCommandRegistryProvider found in widget tree");return Q}static maybeOf(A){return A.dependOnInheritedWidgetOfExactType(M9)?.commandRegistry??null}}class IA1 extends P0{onDismiss;constructor(A){super();this.onDismiss=A.onDismiss}createState(){return new Ao4}}class Ao4 extends R0{modalStack=new ls;commandRegistry=null;initState(){super.initState(),queueMicrotask(()=>{if(!this.mounted)return;let A=M9.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=M9.of(A).commands,$=new KA1({commands:Q,onAccept:(B)=>{B.run(this.modalStack,A,this.widget.onDismiss)},onDismiss:()=>{if(this.modalStack.canPop)this.modalStack.pop();else this.widget.onDismiss()}});return new GA1({root:$,controller:this.modalStack})}}var WA1=[{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"]}]},{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"]}]}],HA1=[{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 MX0 extends H1{items;renderRow;constructor({items:A,renderRow:Q}){super();this.items=A,this.renderRow=Q}build(A){let $=c1.of(A).size.width,B=50,D=$<50,J=[];for(let F of this.items){let[Y,E]=this.renderRow(F),Z;if(D)Z=new S0({crossAxisAlignment:"start",mainAxisSize:"min",children:[Y,new f0({padding:V0.only({left:4}),child:E})]});else Z=new r0({crossAxisAlignment:"start",children:[new R1({flex:1,child:Y}),new X0({width:1}),new R1({flex:1,child:E})]});J.push(new f0({padding:V0.horizontal(6),child:Z}))}return new S0({crossAxisAlignment:"start",mainAxisSize:"min",children:J})}}class qA1 extends P0{commands;submitOnEnter;constructor({key:A,commands:Q,submitOnEnter:$}){super(A?{key:A}:{});this.commands=Q,this.submitOnEnter=$??!0}createState(){return new Qo4}}class Qo4 extends R0{scrollController;initState(){this.scrollController=new v6,this.scrollController.disableFollowMode(),this.scrollController.jumpTo(0)}dispose(){}build(A){let $=L1.of(A).colorScheme,D=O0.of(A).app,J=c1.of(A),F=new T({color:$.primary,bold:!0}),Y=new T({color:$.secondary,bold:!0}),E=new T({color:D.keybind}),Z=new T({color:D.command}),U=new T({color:$.foreground}),X=new T({color:$.foreground}),G=J.size.width,V=J.size.height,K=G-4,z=V-4,I=Math.max(40,Math.min(80,K)),W=new Set(["permissions-disable"]),q=[...this.widget.commands.filter((L)=>{let j=L.noun?.toLowerCase();return j!=="dev"&&j!=="debug"&&!L.id.startsWith("debug-")&&!W.has(L.id)})].sort((L,j)=>{let k=(L.noun??"").toLowerCase(),_=(j.noun??"").toLowerCase(),f=k.localeCompare(_);if(f!==0)return f;let h=L.verb.toLowerCase(),b=j.verb.toLowerCase(),v=h.localeCompare(b);if(v!==0)return v;return L.id.localeCompare(j.id)}),N=new k6({autofocus:!0,controller:this.scrollController,child:new b0({constraints:new C1(I,I,0,Number.POSITIVE_INFINITY),child:new S0({crossAxisAlignment:"start",mainAxisSize:"min",children:[new $4({child:new d({text:new C(`Amp CLI - Help & Keyboard Shortcuts
5234
5234
  `,F)})}),new X0({height:1}),new f0({padding:V0.horizontal(2),child:new d({text:new C(`Editor Shortcuts
5235
5235
  `,Y)})}),new MX0({items:WA1.filter((L)=>L.submitOnEnterOnly===void 0||L.submitOnEnterOnly===this.widget.submitOnEnter),renderRow:(L)=>{let j=[];for(let _ of L.methods){let f=this.buildCleanKeyCombination(_);j.push(f)}let k=j.join(", ");return[new d({text:new C(k,E)}),new d({text:new C(L.description,U)})]}}),new X0({height:1}),new f0({padding:V0.horizontal(2),child:new d({text:new C(`Scrolling & Navigation
5236
5236
  `,Y)})}),new MX0({items:HA1,renderRow:(L)=>{let j=[];for(let _ of L.methods){let f=this.buildCleanKeyCombination(_);j.push(f)}let k=j.join(", ");return[new d({text:new C(k,E)}),new d({text:new C(L.description,U)})]}}),new X0({height:1}),new f0({padding:V0.horizontal(2),child:new d({text:new C(`Command Palette Commands
@@ -5320,7 +5320,7 @@ Ctrl-X, Y, Z to unlock`;if(this.widget.centerContent)h=this.widget.centerContent
5320
5320
  `))}return F}function Di3(A,Q,$){let{colors:B,app:D}=$,J=Ji3(Q.status,$);if(A.push(new C(` ${J.icon} `,new T({color:J.color}))),A.push(new C(Q.name,new T({color:Q.status==="pending"?B.warning:D.command}))),Q.status==="pending")A.push(new C(" discovering...",new T({color:B.foreground,dim:!0})));else if(Q.description)A.push(new C(` ${ke4(Q.description,50)}`,new T({color:B.foreground,dim:!0})));if(Q.error)A.push(new C(` ${ke4(Q.error,40)}`,new T({color:D.toolError})));A.push(new C(`
5321
5321
  `))}function Ji3(A,Q){let{colors:$,app:B}=Q;switch(A){case"pending":return{icon:"◌",color:$.warning};case"registered":return{icon:"•",color:$.mutedForeground};case"failed":return{icon:"✗",color:B.toolError};case"duplicate":return{icon:"◇",color:$.warning};default:return{icon:"?",color:$.foreground}}}function ke4(A,Q){let $=A.replace(/\s+/g," ").trim();if(J4($)<=Q)return $;let B="...",D=J4(B);if(Q<=D)return VQ(B,Q);return`${VQ($,Q-D,!0,"")}${B}`}var _51="https://ampcode.com/news/neo",T51=[{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:_51,href:_51},"","",{text:"Need old Amp for a bit? Use ",keybind:"amp --take-me-back"}]}];function Fi3(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:_51,textAfter:" you'll need to switch to the binary install:",linkWidget:!0},"",{codeBlock:["npm uninstall -g @sourcegraph/amp",A]}]}]}function Yi3(){if(process.platform==="win32")return'powershell -c "irm https://ampcode.com/install.ps1 | iex"';return"curl -fsSL https://ampcode.com/install.sh | bash"}var Yx=50,vR=40,P51=1000,Ei3=420,Zi3=760,Ui3=-250,Xi3=1100,qG0=33,xe4=0.999,Gi3=2.1,Vi3=720,Ki3=420,le4="Meet the new",ie4="Amp",ne4="CLI",v51=G4(le4).length,zi3=G4(ie4).length,Ii3=G4(ne4).length,NG0={primary:{r:140,g:38,b:0},secondary:{r:255,g:225,b:102}},be4={primary:{r:10,g:42,b:18},secondary:{r:200,g:230,b:68}},he4={primary:{r:18,g:0,b:107},secondary:{r:103,g:255,b:168}},ge4=[NG0,be4,he4,NG0,be4,he4,NG0],Wi3=NG0;class k51 extends P0{onDismiss;onQuit;animationProgress;animationsEnabled;variant;binaryInstallCommand;introStages;dismissible;constructor(A){super();this.onDismiss=A.onDismiss,this.onQuit=A.onQuit,this.animationProgress=A.animationProgress,this.animationsEnabled=A.animationsEnabled??!0,this.variant=A.variant??"intro",this.binaryInstallCommand=A.binaryInstallCommand??Yi3(),this.introStages=this.variant==="npm-migration"?Fi3(this.binaryInstallCommand):T51,this.dismissible=this.variant!=="npm-migration"}createState(){return new ae4}}class ae4 extends R0{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=P51;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 a9(42);initState(){super.initState(),this.startAnimationIfNeeded()}didUpdateWidget(A){if(super.didUpdateWidget(A),A.animationProgress!==this.widget.animationProgress||A.animationsEnabled!==this.widget.animationsEnabled)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=YF(this.widget.animationProgress),this.firstStageTitleVisible=this.animationProgress>=xe4,this.firstStageHintVisible=this.animationProgress>=xe4,this.firstStageTitleRevealProgress=this.firstStageTitleVisible?1:0,this.firstStageHintRevealProgress=this.firstStageHintVisible?1:0;return}if(!this.widget.animationsEnabled){this.stopStageTransitionTimer(),this.stopDismissAnimation(),this.animationProgress=1,this.isDismissing=!1,this.dismissProgress=0,this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1,this.previousIntroStage=null,this.stageTransitionProgress=1;return}if(this.firstStageTitleVisible=!1,this.firstStageHintVisible=!1,this.firstStageTitleRevealProgress=0,this.firstStageHintRevealProgress=0,this.startProgressAnimation({from:0,to:1,durationMs:P51,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;if(!this.widget.animationsEnabled){this.widget.onDismiss();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=YF(A/Zi3);if(this.setState(()=>{this.dismissProgress=Q}),Q>=1)this.stopDismissAnimation(),this.widget.onDismiss()},qG0)}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.widget.animationsEnabled){this.setState(()=>{this.previousIntroStage=null,this.stageTransitionProgress=1});return}this.setState(()=>{this.stageTransitionProgress=0}),this.stageTransitionTimer=setInterval(()=>{let $=performance.now()-this.stageTransitionStartedAt,B=YF($/Ei3);if(this.setState(()=>{if(this.stageTransitionProgress=B,B>=1)this.previousIntroStage=null}),B>=1)this.stopStageTransitionTimer()},qG0)}startProgressAnimation({from:A,to:Q,durationMs:$,onComplete:B}){this.stopAnimation(),this.startedAt=performance.now(),this.animationStartProgress=A,this.animationTargetProgress=Q,this.animationDurationMs=$,this.onAnimationComplete=B,this.animationProgress=A,this.animationTimer=setInterval(()=>{let D=performance.now()-this.startedAt,J=YF(D/this.animationDurationMs),F=this.animationStartProgress+(this.animationTargetProgress-this.animationStartProgress)*Ex(J);if(this.setState(()=>{this.animationProgress=F}),J>=1)this.stopAnimation(),this.onAnimationComplete?.(),this.onAnimationComplete=null},qG0)}stopAnimation(){if(this.animationTimer)clearInterval(this.animationTimer),this.animationTimer=null}stopStageTransitionTimer(){if(this.stageTransitionTimer)clearInterval(this.stageTransitionTimer),this.stageTransitionTimer=null}startFirstStageRevealSequence(){if(this.stopFirstStageRevealTimers(),!this.widget.animationsEnabled){this.setState(()=>{this.firstStageTitleVisible=!0,this.firstStageHintVisible=!0,this.firstStageTitleRevealProgress=1,this.firstStageHintRevealProgress=1});return}this.setState(()=>{this.firstStageTitleVisible=!1,this.firstStageHintVisible=!1,this.firstStageTitleRevealProgress=0,this.firstStageHintRevealProgress=0});let A=Math.max(0,P51+Ui3),Q=A+Xi3;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?YF((A-this.firstStageTitleRevealStartedAt)/Vi3):this.firstStageTitleRevealProgress,$=this.firstStageHintRevealStartedAt?YF((A-this.firstStageHintRevealStartedAt)/Ki3):this.firstStageHintRevealProgress;if(this.setState(()=>{this.firstStageTitleRevealProgress=Q,this.firstStageHintRevealProgress=$}),Q>=1&&$>=1)this.stopFirstStageRevealTimer()},qG0)}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=me4(this.introStage),Q=this.previousIntroStage===null||this.stageTransitionProgress>=1?A:de4(me4(this.previousIntroStage),A,Ex(this.stageTransitionProgress));return this.dismissProgress>0?de4(Q,Wi3,Ex(this.dismissProgress)):Q}build(A){let Q=L1.of(A).colorScheme,$=O0.of(A),B=this.currentOrbPalette(),D=J$(1,"frontier",B),J=c1.of(A).size,Y=this.widget.animationProgress??this.animationProgress,E=Math.max(J.width/Yx,J.height/vR)*Gi3,Z=E+(1-E)*Y,U=Ex(this.dismissProgress),X=Math.max(Yx,Math.round(Yx*Z)),G=Math.max(vR,Math.round(vR*Z)),V=Math.round((J.width-X)/2),K=Math.round((J.height-G)/2),z=Math.max(0,Math.floor((J.width-Yx)/2)),I=-Math.floor(vR/2),W=Math.round(V+(z-V)*Y),H=Math.round(K+(I-K)*Y),q=W+X/2,N=H+G/2,w=Hi3({dismissProgress:this.dismissProgress,easedDismissProgress:U,introOrbScale:Z,normalOrbCenterX:q,normalOrbCenterY:N,size:J}),O=Math.max(Yx,Math.round(Yx*w.orbScale)),L=Math.max(vR,Math.round(vR*w.orbScale)),j=w.orbCenterX,k=w.orbCenterY,_=Math.round(j-O/2),f=Math.round(k-L/2),h=Math.max(3,Math.min(J.height-5,Math.floor(vR/2)+2)),b=Math.max(h+3,J.height-3),v=w.textDissolveProgress,y=this.isFinalIntroStage()?w.backdropDissolveProgress:0,p=this.firstStageTitleVisible&&v<1,c=p&&this.firstStageHintVisible,g=c&&this.widget.dismissible&&this.introStage>0&&!this.isFinalIntroStage(),i=this.introStage===0?this.firstStageTitleRevealProgress:1,r=this.introStage===0?this.firstStageHintRevealProgress:1,A0=Math.max(24,Math.min(74,J.width-4)),I0=Math.min(12,Math.max(8,J.height-h-6)),E0=Math.max(0,Math.floor((J.width-A0)/2)),W0=Math.max(0,Math.min(J.height-I0,Math.floor(J.height*0.55-I0/2))),j0=this.widget.animationProgress!==void 0||!this.widget.animationsEnabled?new _N({width:O,height:L,agentMode:"frontier",visualStyle:"neo",neoGlyphSet:"dotField",backgroundColor:Q.background,primaryColor:B.primary,secondaryColor:B.secondary,glow:this.splashOrbGlow,seed:42,fps:0,onClick:()=>{}}):new _N({width:O,height:L,agentMode:"frontier",visualStyle:"neo",neoGlyphSet:"dotField",backgroundColor:Q.background,primaryColor:B.primary,secondaryColor:B.secondary,glow:this.splashOrbGlow,onClick:()=>{}});return new k4({autofocus:!0,canRequestFocus:!0,debugLabel:"NeoWelcomeTakeover",onKey:(Q0)=>{if(Q0.key==="Enter")return this.advanceIntroStage(),"handled";if(!this.widget.dismissible&&Q0.key==="c"&&Q0.ctrlKey)return this.widget.onQuit?.(),"handled";if(!this.widget.dismissible&&Q0.key==="q")return this.widget.onQuit?.(),"handled";if((Q0.key===" "||Q0.key==="Space")&&!this.isFinalIntroStage())return this.advanceIntroStage(),"handled";if(Q0.key==="Escape"||Q0.key==="Esc"){if(!this.widget.dismissible)return this.widget.onQuit?.(),"handled";return this.dismissFromFinalIntroStage()?"handled":"ignored"}if(Q0.key==="ArrowRight")return this.nextIntroStage(),"handled";if(Q0.key==="ArrowLeft")return this.goToPreviousIntroStage(),"handled";return"ignored"},child:new i4({fit:"expand",children:[new oe4({color:Q.background,dissolveProgress:y}),new i4({fit:"expand",children:[new O1({onClick:()=>{},child:X0.expand()}),new o4({left:_,top:f,width:O,height:L,child:j0}),...p?[new o4({left:E0,top:W0,width:A0,height:I0,child:Ni3({introStages:this.widget.introStages,stage:this.introStage,previousStage:this.previousIntroStage,progress:this.stageTransitionProgress,direction:this.stageTransitionDirection,width:A0,height:I0,foreground:Q.foreground,mutedForeground:Q.mutedForeground,accent:D,link:$.app.link,keybind:$.app.keybind,titleRevealProgress:i,dissolveProgress:v,context:A})})]:[],...c?[...g?[new o4({left:E0,top:Math.max(0,b-1),width:A0,height:1,child:new d({text:ji3({stage:this.introStage,featureStageCount:Math.max(0,this.widget.introStages.length-2),foreground:Q.mutedForeground,dissolveProgress:v}),textAlign:"center"})})]:[],new o4({left:E0,top:b,width:A0,height:1,child:Pi3({finalStage:this.isFinalIntroStage(),dismissible:this.widget.dismissible,foreground:Q.mutedForeground,keybind:$.app.keybind,revealProgress:r,dissolveProgress:v,context:A})})]:[]]})]})})}}class oe4 extends R5{color;dissolveProgress;constructor({color:A,dissolveProgress:Q}){super();this.color=A,this.dissolveProgress=Q}createRenderObject(){return new re4(this.color,this.dissolveProgress)}updateRenderObject(A){A.update(this.color,this.dissolveProgress)}}class re4 extends p1{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,$=0){let B=Math.floor(Q+this.offset.x),D=Math.floor($+this.offset.y),J=Math.floor(this.size.width),F=Math.floor(this.size.height),Y={bg:this.color},E=YF(this.dissolveProgress);if(E<=0){A.fill(B,D,J,F," ",Y);return}if(E>=1)return;for(let Z=0;Z<F;Z++)for(let U=0;U<J;U++)if(!qi3(U,Z,J,F,E))A.fill(B+U,D+Z,1,1," ",Y)}}function YF(A){return Math.min(1,Math.max(0,A))}function Ex(A){return 1-(1-A)**3}function me4(A){return ge4[A]??ge4[0]}function de4(A,Q,$){return{primary:lj(A.primary,Q.primary,$),secondary:lj(A.secondary,Q.secondary,$)}}function Hi3({dismissProgress:A,easedDismissProgress:Q,introOrbScale:$,normalOrbCenterX:B,normalOrbCenterY:D,size:J}){return{orbScale:$+($*0.86-$)*Q,orbCenterX:B+(J.width*0.54-B)*Q,orbCenterY:D-J.height*0.44*Q,textDissolveProgress:YF(A/0.52),backdropDissolveProgress:Ex(YF((A-0.12)/0.88))}}function qi3(A,Q,$,B,D){let J=B<=1?0:Q/(B-1),F=se4(A+Q*Math.max(1,$));return(1-J)*0.72+F*0.28<D}function Ni3({introStages:A,stage:Q,previousStage:$,progress:B,direction:D,width:J,height:F,foreground:Y,mutedForeground:E,accent:Z,link:U,keybind:X,titleRevealProgress:G,dissolveProgress:V,context:K}){if($===null||B>=1)return u51({introStages:A,stage:Q,foreground:Y,mutedForeground:E,accent:Z,link:U,keybind:X,titleRevealProgress:G,dissolveProgress:V,context:K});let z=Ex(B),I=D*Math.round((1-z)*J),W=-D*Math.round(z*J);return new sz(new i4({fit:"expand",children:[new o4({left:W,top:0,width:J,height:F,child:u51({introStages:A,stage:$,foreground:Y,mutedForeground:E,accent:Z,link:U,keybind:X,titleRevealProgress:$===0?1:G,dissolveProgress:V,context:K})}),new o4({left:I,top:0,width:J,height:F,child:u51({introStages:A,stage:Q,foreground:Y,mutedForeground:E,accent:Z,link:U,keybind:X,titleRevealProgress:G,dissolveProgress:V,context:K})})]}))}function u51({introStages:A,stage:Q,foreground:$,mutedForeground:B,accent:D,link:J,keybind:F,titleRevealProgress:Y,dissolveProgress:E,context:Z}){let U=A[Q]??A[0]??T51[0],X=new T({color:D,bold:!0}),G=new T({color:$}),V=A===T51&&Q===0,K=[...U.title===null?[]:[new d({text:V?wG0(Mi3({progress:Y,foreground:D,pulseColor:D}),E):new C(zB(U.title,E),X),textAlign:"center"})],...U.body.length>0?[wi3()]:[],...U.body.map((z)=>Ci3(z,G,B,J,F,E,Z))];return new $4({child:new f0({padding:V0.horizontal(1),child:new S0({crossAxisAlignment:"stretch",mainAxisAlignment:"center",mainAxisSize:"min",children:K})})})}function wi3(){return X0.height(1)}function Ci3(A,Q,$,B,D,J,F){if(typeof A==="string")return new d({text:new C(zB(A,J),Q),textAlign:"center"});if("codeBlock"in A)return new X5({onCopy:(Y,E)=>{if(E)L3.success(F,"Copied to clipboard",2000)},child:new S0({mainAxisSize:"min",children:A.codeBlock.map((Y)=>new d({text:new C(zB(Y,J),new T({color:D})),textAlign:"center",selectable:!0}))})});if("keybind"in A){let Y=new d({text:new C("",void 0,[new C(zB(A.text,J),new T({color:$,dim:!0})),new C(zB(A.keybind,J,G4(A.text).length),new T({color:D}))]),textAlign:"center",selectable:"selectable"in A?A.selectable:!1});if("selectable"in A)return new $4({child:new X5({child:Y})});return Y}if("highlightText"in A){let Y=u6.createSpan(A.href,A.linkText,new T({color:B,underline:!0})),E=eZ.of(F),Z=new C("",void 0,[new C(A.text,Q),new C(A.highlightText,new T({color:D})),new C(A.textAfterHighlight,Q),new C(Y.text,Y.style,Y.children,Y.hyperlink,()=>{n6(F,A.href,{forceExternal:!1,onShowImagePreview:E})}),new C(A.textAfter,Q)]);return new d({text:wG0(Z,J),textAlign:"center"})}if("linkText"in A){if(A.linkWidget)return new S0({mainAxisSize:"min",children:[new d({text:new C(zB(A.text,J),Q),textAlign:"center"}),new $4({child:new r0({mainAxisSize:"min",children:[u6.createWidget(F,A.href,zB(A.linkText,J),new T({color:B,underline:!0})),new d({text:new C(zB(A.textAfter,J),Q)})]})})]});let Y=u6.createSpan(A.href,A.linkText,new T({color:B,underline:!0})),E=eZ.of(F),Z=new C("",void 0,[new C(A.text,Q),new C(Y.text,Y.style,Y.children,Y.hyperlink,()=>{n6(F,A.href,{forceExternal:!1,onShowImagePreview:E})}),new C(A.textAfter,Q)]);return new d({text:wG0(Z,J),textAlign:"center"})}if(J>0)return new d({text:new C(zB(A.text,J),new T({color:B,underline:!0})),textAlign:"center"});return new $4({child:u6.createWidget(F,A.href,A.text,new T({color:B,underline:!0}))})}function Mi3({progress:A,foreground:Q,pulseColor:$}){let B=new T({color:Q,bold:!0}),D=new T({color:Oi3({progress:A,foreground:Q,pulseColor:$}),bold:!0});return new C("",void 0,[new C(Li3(A).padEnd(v51," "),B),new C(" ",B),new C(pe4(ie4,zi3,A,0.72),B),new C(" ",B),new C(pe4(ne4,Ii3,A,0.88),D)])}function Li3(A){let Q=G4(le4),$=Math.min(v51,Math.ceil(YF(A/0.62)*v51));return Q.slice(0,$).join("")}function pe4(A,Q,$,B){return $>=B?A:"".padEnd(Q," ")}function Oi3({progress:A,foreground:Q,pulseColor:$}){if(A<0.88||A>=1)return Q;let B=YF((A-0.88)/0.12);return Math.cos(B*Math.PI*4)*(1-B)>0.12?$:Q}function ji3({stage:A,featureStageCount:Q,foreground:$,dissolveProgress:B}){return new C(zB(`${A}/${Q}`,B),new T({color:$,dim:!0}))}function Ri3({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:D,dissolveProgress:J}){let F=new T({color:B}),Y=new T({color:$,dim:!0}),E=Q?A?"Enter":"Space":"Esc",Z=Q?A?" to get started":" to continue":" to quit, or use ",U=Q?"":"amp --take-me-back",X=Q?"":" to use the old version",G=`${Z}${U}${X}`;if(!Q)return new C("",void 0,[new C(E,F),new C(Z,Y),new C(U,F),new C(X,Y)]);let V=ce4(E,D),K=ce4(G,YF((D*(G4(E).length+G4(G).length)-G4(E).length)/G4(G).length));return new C("",void 0,[new C(zB(V,J),F),new C(zB(K.slice(0,Z.length),J),Y),new C(zB(K.slice(Z.length,Z.length+U.length),J),F),new C(zB(K.slice(Z.length+U.length),J),Y)])}function Pi3({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:D,dissolveProgress:J,context:F}){if(Q)return new d({text:Ri3({finalStage:A,dismissible:Q,foreground:$,keybind:B,revealProgress:D,dissolveProgress:J}),textAlign:"center"});let Y=new T({color:B}),E=new T({color:$,dim:!0});return new X5({onCopy:(Z,U)=>{if(U)L3.success(F,"Copied to clipboard",2000)},child:new d({text:new C("",void 0,[new C("q",Y),new C(" to quit, or use ",E),new C("amp --take-me-back",Y),new C(" to use the old version",E)]),textAlign:"center",selectable:!0})})}function ce4(A,Q){let $=G4(A),B=Math.min($.length,Math.ceil(YF(Q)*$.length));return $.slice(0,B).join("").padEnd($.length," ")}function wG0(A,Q,$=0){if(Q<=0)return A;let B=$+G4(A.text??"").length,D=A.children?.map((J)=>{let F=wG0(J,Q,B);return B+=G4(J.toPlainText()).length,F});return new C(A.text?zB(A.text,Q,$):A.text,A.style,D,A.hyperlink,A.onClick)}function zB(A,Q,$=0){if(Q<=0)return A;return G4(A).map((D,J)=>{if(D.trim()==="")return D;return se4($+J)<Q?" ":D}).join("")}function se4(A){let Q=Math.sin((A+1)*12.9898)*43758.5453;return Q-Math.floor(Q)}p0();$8();function Gw(A,Q){let{colors:$,dim:B}=Q,D=[];if(A.totalCostUSD===null)return D;let J=A.costBreakdown,F=J?.freeUSD??0,Y=J?.paidUSD??0;if(F===0&&Y===0)return D;let Z={decimalPlaces:"more-if-tiny",intent:"cost"};if(Y===0)D.push(new C(eG(F,Z),new T({color:$.foreground,dim:B}))),D.push(new C(" (free)",new T({color:$.foreground,dim:B})));else if(F>0)D.push(new C(eG(F,Z),new T({color:$.foreground,dim:B}))),D.push(new C(" (free)",new T({color:$.foreground,dim:B}))),D.push(new C(" + ",new T({color:$.foreground,dim:B}))),D.push(new C(eG(Y,Z),new T({color:$.foreground,dim:B,bold:!B})));else D.push(new C(eG(Y,Z),new T({color:$.foreground,dim:B,bold:!B})));return D}class S51 extends V4{}class f51 extends V4{}function ui3(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 _i3(A,Q){let $=O0.of(Q),{colors:B}=$,D=Gw(A,{colors:{foreground:B.foreground}}),J=[];if(D.length>0)J.push(new C("Total: ",new T({color:B.mutedForeground}))),J.push(...D);else if(A.totalCostUSD===null)J.push(new C("Usage information is currently unavailable."));else J.push(new C("No usage recorded for this thread yet."));if(A.costBreakdownURL)J.push(new C(`
5322
5322
 
5323
- `)),J.push(new C("Details: ",new T({color:B.mutedForeground}))),J.push(new C(A.costBreakdownURL,new T({color:$.app.link})));return new d({text:new C("",void 0,J)})}function Ti3(A,Q,$){let B=_i3(A,Q);if(!A.costBreakdownURL)return new w6({header:"Thread Cost",minWidth:80,maxWidth:100,onDismiss:$,child:B});let D=A.costBreakdownURL,J=new T1(()=>{return x4.maybeInvoke(Q,new H8(D,"Cost breakdown URL copied to clipboard","Failed to copy cost breakdown URL")),"handled"}),F=new T1(()=>{return n6(Q,D),"handled"});return new w6({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:$,child:new x4({actions:new Map([[S51,J],[f51,F]]),child:new kA({debugLabel:"ThreadCostShortcuts",shortcuts:new Map([[G1.key("o"),new f51],[G1.key("y"),new S51]]),child:new v4({autofocus:!0,debugLabel:"ThreadCostBody",child:B})})})})}function te4(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 D=A.getActiveThreadID();if(!D)return;try{let J=await e4.threadDisplayCostInfo({threadID:D},{config:A.configService});if(!J.ok){A.toastController.show(ui3(D,J.error),"error",5000),B();return}Q.push(Ti3(J.result,$,B))}catch(J){P.error("Failed to load Neo thread cost",{error:J,threadID:D}),A.toastController.show(`Failed to show thread cost: ${J instanceof Error?J.message:String(J)}`,"error",5000),B()}}}}p0();u9();Q4();class XI extends V4{direction;constructor(A){super();this.direction=A}}class CG0 extends V4{}class It extends V4{}class MG0 extends V4{index;constructor(A){super();this.index=A}}function y51(A){return A.length+2}class x51 extends P0{props;constructor(A){super();this.props=A}createState(){return new ee4}}class ee4 extends R0{selectedIndex=0;initState(){super.initState(),this.selectedIndex=this.findSelectableIndex(this.widget.props.initialSelectedIndex??0)}didUpdateWidget(A){this.selectedIndex=this.findSelectableIndex(this.selectedIndex)}isSelectable(A){let Q=this.widget.props.entries[A];return Q?.type==="item"&&(Q.enabled??!0)}findSelectableIndex(A){let{entries:Q}=this.widget.props;if(Q.length===0)return 0;let $=Math.max(0,Math.min(A,Q.length-1));if(this.isSelectable($))return $;for(let B=1;B<Q.length;B++){let D=$+B;if(D<Q.length&&this.isSelectable(D))return D;let J=$-B;if(J>=0&&this.isSelectable(J))return J}return 0}moveSelection(A){let Q=this.findNextSelectableIndex(A);if(Q===this.selectedIndex)return;this.setState(()=>{this.selectedIndex=Q})}findNextSelectableIndex(A){let{entries:Q}=this.widget.props;for(let $=this.selectedIndex+A;$>=0&&$<Q.length;$+=A)if(this.isSelectable($))return $;return this.selectedIndex}acceptIndex(A){let Q=this.widget.props.entries[A];if(Q?.type!=="item"||!(Q.enabled??!0))return;this.setState(()=>{this.selectedIndex=A}),this.widget.props.onAccept(Q.value)}invoke=(A)=>{if(A instanceof XI)return this.moveSelection(A.direction),"handled";if(A instanceof CG0)return this.acceptIndex(this.selectedIndex),"handled";if(A instanceof It)return this.widget.props.onDismiss(),"handled";if(A instanceof MG0)return this.acceptIndex(A.index),"handled";return"ignored"};buildShortcuts(){let A=new Map([[G1.key("ArrowDown"),new XI(1)],[G1.key("j"),new XI(1)],[G1.ctrl("n"),new XI(1)],[G1.key("ArrowUp"),new XI(-1)],[G1.key("k"),new XI(-1)],[G1.ctrl("p"),new XI(-1)],[G1.key("Enter"),new CG0],[G1.key("Escape"),new It],[G1.ctrl("."),new It]]);return this.widget.props.entries.forEach((Q,$)=>{if(Q.type==="item"&&Q.shortcut)A.set(Q.shortcut,new MG0($))}),A}buildActions(){return new Map([[XI,new T1(this.invoke)],[CG0,new T1(this.invoke)],[It,new T1(this.invoke)],[MG0,new T1(this.invoke)]])}build(A){let Q=O0.of(A),$=vi3(this.widget.props.entries,c1.of(A).supportsEmojiWidth);return new b0({width:this.widget.props.width,height:y51(this.widget.props.entries),decoration:new R4(Q.colors.background,m1.all(new d1(Q.colors.border,1,"solid"))),child:new x4({actions:this.buildActions(),child:new kA({debugLabel:"NeoContextPickerShortcuts",shortcuts:this.buildShortcuts(),child:new v4({autofocus:!0,debugLabel:"NeoContextPicker",child:new S0({mainAxisSize:"min",crossAxisAlignment:"stretch",children:this.widget.props.entries.map((B,D)=>this.buildEntry(B,D,$,Q))})})})})})}buildEntry(A,Q,$,B){if(A.type==="separator")return new b0({height:1,decoration:{border:new m1(new d1(B.colors.border,1,"solid"))}});let D=Q===this.selectedIndex,J=A.enabled??!0,F=new T({color:D?B.app.selectionForeground:B.colors.foreground,dim:!J}),Y=new T({color:D?B.app.selectionForeground:B.app.keybind,bold:!0,dim:!J});return new O1({onClick:()=>this.acceptIndex(Q),child:new b0({padding:V0.symmetric(1,0),decoration:D?new R4(B.app.selectionBackground):void 0,child:new r0({crossAxisAlignment:"start",children:[new R1({child:new d({text:new C(A.label,F),maxLines:1,overflow:"ellipsis"})}),new X0({width:1}),new X0({width:$,child:new d({text:new C(A06(A),Y),textAlign:"right",maxLines:1,overflow:"ellipsis"})})]})})})}}function vi3(A,Q){return A.reduce(($,B)=>{return B.type==="item"?Math.max($,J4(A06(B),Q)):$},0)}function A06(A){return A.shortcutLabel??A.shortcut?.toString().toLowerCase()??""}var ki3=36,Si3=24,fi3=72;class Q06 extends P0{child;onContext;constructor(A,Q){super();this.child=A;this.onContext=Q}createState(){return new $06}}class $06 extends R0{build(A){return this.widget.onContext(A),this.widget.child}}function B06(A){return A.replace(/ ago$/,"")}function LG0(A){return A.reduce((Q,$)=>Math.max(Q,J4(B06($.description.timeAgo))),0)}function D06(A){return Math.max(Si3,Math.min(A,fi3))}class b51 extends V4{}class h51 extends V4{}class g51{options;visibility;width=ki3;constructor(A){this.options=A;this.visibility=new xr(A.state)}isVisible(){return this.visibility.isEnabled()}buildBody(A){return new r0({crossAxisAlignment:"stretch",children:[this.buildSlot(),new R1({child:A})]})}buildSlot(){if(!this.options.isAvailable()||this.visibility.isDisabled())return new X0({width:0});return new X0({width:this.width,child:new k4({debugLabel:"ThreadListSidebar",child:new J06({activeThreadID:this.options.getActiveThreadID(),currentWorkspaceURI:t1(i0.file(this.options.getWorkspaceRoot())),width:this.width,loadThreads:this.options.loadThreads,onSelectThread:this.options.onSelectThread,onDismiss:this.close,onResizeWidth:this.resize})})})}commands(){if(!this.options.isAvailable())return[];return[{noun:"thread",verb:"toggle sidebar",description:"Show or hide the thread sidebar",keywords:["sidebar","recent","history","threads"],shortcut:G1.alt("s"),status:{type:"enabled"},run:(A,Q,$)=>{$(),this.toggle()}}]}shortcutEntries(){return this.options.isAvailable()?[[G1.alt("s"),new ZX0]]:[]}actionEntries(){if(!this.options.isAvailable())return[];return[[ZX0,new T1(()=>this.toggle())]]}toggle=()=>{if(!this.options.isAvailable())return"ignored";if(this.visibility.isDisabled()&&this.options.isBlocked())return"ignored";return this.visibility.toggle(),"handled"};close=()=>{this.visibility.disable()};resize=(A)=>{let Q=D06(A);if(Q===this.width)return;this.options.state.setState(()=>{this.width=Q})}}class J06 extends P0{props;constructor(A){super();this.props=A}createState(){return new F06}}class F06 extends R0{threads=[];isLoading=!0;isSwitchingThread=!1;hasError=!1;filterByWorkspace=!0;timeColWidth=0;contextMenu=null;pendingThreadMutations=new Map;resizeSession=null;isResizeHandleHovered=!1;pickerController=new Qs;threadItemContexts=new Map;shortcuts=new Map([[G1.alt("w"),new b51],[G1.ctrl("."),new h51]]);actions=new Map([[b51,new T1(()=>{return this.setState(()=>{this.filterByWorkspace=!this.filterByWorkspace,this.contextMenu=null}),"handled"})],[h51,new T1(()=>this.openContextMenu())]]);get isBusy(){return this.isLoading||this.isSwitchingThread}get isResizeActive(){return this.resizeSession!==null||this.isResizeHandleHovered}didUpdateWidget(A){if(this.contextMenu&&(A.props.width!==this.widget.props.width||A.props.currentWorkspaceURI!==this.widget.props.currentWorkspaceURI))this.contextMenu=null}initState(){super.initState(),this.loadThreadSummaries()}async loadThreadSummaries(){try{let A=await this.widget.props.loadThreads(),Q=P31(A);if(!this.mounted)return;this.setState(()=>{this.pickerController.selectedItem=Q.find(($)=>$.id===this.widget.props.activeThreadID)??null,this.threads=Q,this.timeColWidth=LG0(Q),this.isLoading=!1,this.hasError=!1})}catch(A){if(P.error("Failed to load threads for Neo sidebar",{error:A}),!this.mounted)return;this.setState(()=>{this.isLoading=!1,this.hasError=!0})}}handleSelectThread=async(A)=>{if(this.isSwitchingThread)return;this.setState(()=>{this.isSwitchingThread=!0});try{await this.widget.props.onSelectThread(A),this.widget.props.onDismiss()}catch(Q){P.error("Failed to switch thread from Neo sidebar",{error:Q,threadID:A})}finally{if(this.mounted)this.setState(()=>{this.isSwitchingThread=!1})}};getOptimisticThreads(){return this.threads.flatMap((A)=>{if(this.pendingThreadMutations.get(A.id)?.kind==="archive")return[];return[A]})}getThreadsForDisplay(){let A=this.getOptimisticThreads();return this.filterByWorkspace?A.filter((Q)=>!Q.workspaceURI||Q.workspaceURI===this.widget.props.currentWorkspaceURI):A}buildContextMenuEntries(){return[{type:"item",value:"archive",label:"Archive Thread",shortcut:G1.key("a"),shortcutLabel:"a"},{type:"separator"},{type:"item",value:"copy-id",label:"Copy ID",shortcut:G1.ctrl("c"),shortcutLabel:"ctrl+c"},{type:"item",value:"copy-url",label:"Copy URL",shortcut:new G1("c",{shift:!0,ctrl:!0}),shortcutLabel:"shift+ctrl+c"}]}openContextMenu(){let A=this.pickerController.selectedItem;if(!A||this.isBusy||this.hasError)return"ignored";let Q=this.buildContextMenuEntries(),$=y51(Q),B=this.getContextMenuWidth(),D=this.getContextMenuPosition(A.id,$,B);return this.setState(()=>{this.contextMenu={threadID:A.id,left:D.left,top:D.top,width:B,height:$}}),"handled"}getContextMenuWidth(){let A=Math.max(24,this.widget.props.width-3);return Math.max(1,Math.min(A,this.widget.props.width-2))}getContextMenuPosition(A,Q,$){let B=Math.max(0,Math.min(2,this.widget.props.width-$)),D=1,J=this.threadItemContexts.get(A)?.findRenderObject(),F=this.context.findRenderObject();if(!(J instanceof p1)||!(F instanceof p1))return{left:B,top:1};let Y=J.localToGlobal({x:0,y:0}),E=F.localToGlobal({x:0,y:0}),Z=Y.y-E.y,U=Z+J.size.height,X=c1.sizeOf(this.context).height,G=Math.max(1,Math.min(F.size.height,X-E.y)),z=G-U>=Q||Z<G/2?U:Z-Q,I=Math.max(0,G-Q);return{left:B,top:Math.max(0,Math.min(z,I))}}closeContextMenu=()=>{if(!this.contextMenu)return;this.setState(()=>{this.contextMenu=null})};handleContextMenuAccept=(A)=>{let Q=this.contextMenu?.threadID;if(!Q)return;if(this.closeContextMenu(),A==="archive"){this.archiveContextMenuThread(Q);return}if(A==="copy-id"){x4.maybeInvoke(this.context,new H8(Q,"Thread ID copied to clipboard","Failed to copy thread ID"));return}x4.maybeInvoke(this.context,new H8(this.getThreadURL(Q),"Thread URL copied to clipboard","Failed to copy thread URL"))};beginOptimisticArchive(A){if(this.pendingThreadMutations.has(A))return!1;if(!this.threads.some(($)=>$.id===A))return!1;let Q={kind:"archive",fallbackSelectedThreadID:null};return this.setState(()=>{this.pendingThreadMutations.set(A,Q),this.timeColWidth=LG0(this.getOptimisticThreads())}),i6.instance.addPostFrameCallback(()=>{if(!this.mounted)return;let $=this.pendingThreadMutations.get(A);if($?.kind!=="archive")return;$.fallbackSelectedThreadID=this.pickerController.selectedItem?.id??null}),!0}commitOptimisticArchive(A){if(this.pendingThreadMutations.get(A)?.kind!=="archive")return;this.pendingThreadMutations.delete(A),this.threads=this.threads.filter(($)=>$.id!==A),this.timeColWidth=LG0(this.getOptimisticThreads())}rollbackOptimisticArchive(A){let Q=this.pendingThreadMutations.get(A);if(Q?.kind!=="archive")return;let $=this.threads.find((B)=>B.id===A);if(!$){this.pendingThreadMutations.delete(A);return}this.setState(()=>{this.pendingThreadMutations.delete(A),this.timeColWidth=LG0(this.getOptimisticThreads());let B=this.pickerController.selectedItem?.id??null;if(B===null||B===Q.fallbackSelectedThreadID)this.pickerController.selectedItem=$})}async archiveContextMenuThread(A){let Q=L3.maybeOf(this.context),{configService:$}=V5.of(this.context);if(!this.beginOptimisticArchive(A))return;try{let B=await VU0({configService:$},A);if(!this.mounted)return;if(B){this.rollbackOptimisticArchive(A),Q?.show(B.message,"error");return}this.commitOptimisticArchive(A)}catch(B){if(P.error("Failed to archive thread from Neo sidebar context menu",{error:B,threadID:A}),!this.mounted)return;this.rollbackOptimisticArchive(A),Q?.show("Failed to archive thread","error")}}getThreadURL(A){return y$(new URL(V5.of(this.context).ampURL),A).toString()}buildContextMenuOverlay(){let A=this.contextMenu;if(!A||!this.getThreadsForDisplay().some((Q)=>Q.id===A.threadID))return null;return new o4({left:A.left,top:A.top,width:A.width,height:A.height,child:new k4({debugLabel:"ThreadListSidebarContextMenu",onFocusChange:(Q)=>{if(!Q)this.closeContextMenu()},child:new x51({entries:this.buildContextMenuEntries(),width:A.width,onAccept:this.handleContextMenuAccept,onDismiss:this.closeContextMenu})})})}buildContextMenuBackdrop(){return new o4({left:0,top:0,right:0,bottom:0,child:new O1({onClick:()=>this.closeContextMenu(),child:X0.expand()})})}buildThreadItem(A,Q,$,B){let D=O0.of(B),{app:J,colors:F}=D,Y=!Q,E=Q?J.selectionForeground:F.foreground,Z=Q?J.selectionForeground:F.mutedForeground,X=A.id===this.widget.props.activeThreadID?new d({text:new C("*",new T({color:Q?J.selectionForeground:F.success,dim:Y}))}):void 0,G=B06(A.description.timeAgo);return new Q06(new b0({padding:V0.symmetric(1,0),child:new r0({children:[new X0({width:2,child:X}),new R1({child:new d({text:new C(A.title,new T({color:E,dim:Y})),overflow:"ellipsis",maxLines:1})}),new X0({width:2}),new X0({width:$,child:r0.end([new d({text:new C(G,new T({color:Z,dim:Y}))})])})]})}),(V)=>{this.threadItemContexts.set(A.id,V)})}handleResizeHandlePress=(A)=>{if(A.button!=="left")return;this.setState(()=>{this.resizeSession={baseWidthColumns:this.widget.props.width,startColumn:Math.floor(A.position.x)}})};handleResizeHandleDrag=(A)=>{if(A.button!=="left"||this.resizeSession===null)return;let Q=Math.floor(A.position.x)-this.resizeSession.startColumn,$=D06(this.resizeSession.baseWidthColumns+Q);if($!==this.widget.props.width)this.widget.props.onResizeWidth($)};handleResizeHandleRelease=(A)=>{if(A.button!=="left"||this.resizeSession===null)return;this.setState(()=>{this.resizeSession=null})};handleResizeHandleEnter=()=>{if(this.isResizeHandleHovered)return;this.setState(()=>{this.isResizeHandleHovered=!0})};handleResizeHandleExit=()=>{if(!this.isResizeHandleHovered)return;this.setState(()=>{this.isResizeHandleHovered=!1})};buildResizeHandle(){return new o4({top:0,right:0,bottom:0,width:1,child:new O1({cursor:ZA.EW_RESIZE,onClick:this.handleResizeHandlePress,onDrag:this.handleResizeHandleDrag,onRelease:this.handleResizeHandleRelease,onEnter:this.handleResizeHandleEnter,onExit:this.handleResizeHandleExit,child:new X0({width:1})})})}build(A){let Q=O0.of(A),$=this.getThreadsForDisplay(),B=this.hasError?[]:$;this.threadItemContexts.clear();let D=this.isSwitchingThread?"Switching thread...":"Loading threads...",J=this.hasError?"Failed to load threads":"No threads match your filter",F=this.isResizeActive?2:1,Y=new m1(void 0,new d1(Q.colors.border,F),void 0,void 0),E=this.buildContextMenuOverlay(),Z=[new b0({decoration:new R4(Q.colors.background,Y),child:new x4({actions:this.actions,child:new kA({shortcuts:this.shortcuts,debugLabel:"ThreadListSidebarFilter",child:new lA({items:B,getLabel:(U)=>`${U.title} ${U.id}`,controller:this.pickerController,onAccept:(U)=>void this.handleSelectThread(U.id),onDismiss:this.widget.props.onDismiss,renderItem:(U,X,G,V)=>this.buildThreadItem(U,X,this.timeColWidth,V),enabled:!this.isBusy,isLoading:this.isBusy,hidePromptWhenLoading:!0,loadingText:D,emptyStateText:J,maxRenderItems:200,showBorder:!1})})})}),this.buildResizeHandle()];if(E)Z.push(this.buildContextMenuBackdrop()),Z.push(E);return new b0({width:this.widget.props.width,child:new i4({fit:"expand",children:Z})})}}class m51 extends P0{listSkillsForThread;clientPool;completionBuilder;history;ideManager;configService;updateService;initialThreadIDs;showNeoWelcome;neoWelcomeVariant;onNeoWelcomeDismissed;notificationService;mcpTrustHandler;onThreadArchived;onActiveThreadChange;onRelaunchRequested;onFirstFrame;initialUserInput;getDefaultNewThreadVisibility;openThreadPickerOnStart;workspaceSettingsFilePath;neoContext;constructor(A){super();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.updateService=A.updateService,this.initialThreadIDs=A.initialThreadIDs??[],this.showNeoWelcome=A.showNeoWelcome??!1,this.neoWelcomeVariant=A.neoWelcomeVariant??"intro",this.onNeoWelcomeDismissed=A.onNeoWelcomeDismissed,this.notificationService=A.notificationService,this.mcpTrustHandler=A.mcpTrustHandler,this.onThreadArchived=A.onThreadArchived,this.onActiveThreadChange=A.onActiveThreadChange,this.onRelaunchRequested=A.onRelaunchRequested,this.onFirstFrame=A.onFirstFrame,this.initialUserInput=A.initialUserInput,this.getDefaultNewThreadVisibility=A.getDefaultNewThreadVisibility,this.openThreadPickerOnStart=A.openThreadPickerOnStart??!1,this.workspaceSettingsFilePath=A.workspaceSettingsFilePath,this.neoContext=A.neoContext}createState(){return new E06}}class E06 extends R0{editorController=new T2;commandPalette=new xr(this);commandRegistry=new zA1;toastController=new T11;relaunchNotificationController=new FA1;exitHintTimer=new yr(this,1000);ideStatus=new z8(this,{});threadNavigationHistory=new UA1;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;activeThreadIDSubscription=null;activePluginMessageSubscription=null;activePluginUIRequestsSubscription=null;connectionErrorsSubscription=null;configSubscription=null;connectingToThreadID=null;executorAlreadyConnectedDialog=null;switchThreadPickerVisible=!1;neoWelcomeVisible=!1;endCreditsVisible=!1;neoInvadersHighScore=0;debugOverlayVisible=!1;focusDebugVisible=!1;unregisterCommands=null;emptyThreadTerminalTitleController=new ss;pluginIntegration=null;mcpTrustIntegration=null;updateRelaunchIntegration=null;noticesPollingTimeout=null;notices;loadThreads=async()=>{return this.widget.neoContext.listThreads()};analyzeContextForThread=async(A,Q)=>{return Ld4({ampURL:this.widget.neoContext.ampURL,configService:this.widget.configService,threadID:A,signal:Q})};onSwitchThread=(A)=>{return this.connectToExistingThread(A,{recordNavigation:!0,rethrowError:!0})};threadListSidebar=new g51({state:this,isAvailable:()=>this.widget.neoContext.isInternalUser,isBlocked:()=>this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal(),getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??null,getWorkspaceRoot:()=>this.widget.neoContext.workspaceRoot,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread});sendFeedbackReport=async(A)=>wX0({configService:this.widget.configService,settingsFilePath:this.widget.neoContext.settingsFilePath},A);archiveThread=async(A)=>{let Q=await VU0({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let $=await vl4({configService:this.widget.configService},A,Q);if($ instanceof Error)return $;return this.toastController.show($.message,$.type,2000),null};removeThreadLabel=async(A,Q)=>{let $=await kl4({configService:this.widget.configService},A,Q);if($ instanceof Error)return $;return this.toastController.show($.message,$.type,2000),null};initState(){if(YB.getInstance().interceptConsole(),this.neoInvadersHighScore=this.widget.neoContext.neoInvadersHighScore??0,this.notices=new i61(this.widget.configService,($)=>this.setState($)),i6.instance.addPostFrameCallback(()=>{setTimeout(()=>this.widget.onFirstFrame?.(),0),this.noticesPollingTimeout=setTimeout(()=>{this.noticesPollingTimeout=null,this.notices.startPolling()},500)},"Neo notices polling"),this.widget.showNeoWelcome)this.neoWelcomeVisible=!0;if(this.connectionErrorsSubscription=this.widget.clientPool.connectionErrors$.subscribe(({threadID:$,error:B})=>{if(P.error("Neo failed to connect to thread",{threadID:$,error:B}),!$)this.toastController.show(`Connection failed: ${B.message}`,"error",4000)}),this.configSubscription=this.widget.configService.config.subscribe(($)=>{this.applyDraftThreadSettingsSeed(this.applySessionDefaultsToThreadSettings(H20($.settings)))}),this.updateRelaunchIntegration=new EA1({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested,relaunchNotificationController:this.relaunchNotificationController,updateService:this.widget.updateService}),this.updateRelaunchIntegration.init(),this.ideStatus.subscribe(this.widget.ideManager.status),this.widget.openThreadPickerOnStart)this.switchThreadPickerVisible=!0;this.ensureDraftThreadSettingsInitialized();let A=this.widget.initialUserInput,Q=this.widget.initialThreadIDs[0];if(Q){let $={};if(A)$.initialUserInput=A;this.connectToInitialThreads(Q,$)}else if(A)this.onNewThread([{type:"text",text:A}],this.widget.neoContext.sessionAgentMode);this.pluginIntegration=new JA1({state:this,commandPalette:this.commandPalette,commandRegistry:this.commandRegistry,toastController:this.toastController,neoContext:this.widget.neoContext,getActiveThreadID:this.getActiveThreadID,appendToThread:this.appendPluginMessagesToThread,onBlockingConfirmDialogChange:this.syncEmptyThreadPluginConfirmationTitle}),this.pluginIntegration.init(),this.mcpTrustIntegration=new l61({state:this,mcpTrustHandler:this.widget.mcpTrustHandler,toastController:this.toastController,workspaceSettingsFilePath:this.widget.workspaceSettingsFilePath}),this.mcpTrustIntegration.init(),this.unregisterCommands=this.registerAppCommands(),queueMicrotask(()=>{if(!this.mounted)return;this.replayEarlyInputToEditor()})}replayEarlyInputToEditor(){let A=z4.instance.tuiInstance.getEarlyInputText();if(!A)return;this.editorController.insertText(A)}registerAppCommands(){let A=this,Q=this.widget.neoContext.pluginService?ha4({pluginService:this.widget.neoContext.pluginService,workspaceRoot:this.widget.neoContext.workspaceRoot,logFilePath:this.widget.neoContext.logFilePath,toastController:this.toastController}):[],B=[aa4({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested}),{noun:"thread",verb:"switch",description:"Switch to existing thread",keywords:["recent","history","open","resume","change"],status:{type:"enabled"},sortBoost:100,run:(D,J,F)=>{D.pushWithDismiss((Y)=>u31({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:Y,onThreadSelected:F}))}},...this.threadListSidebar.commands(),{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:(D,J,F)=>{A.navigateBack(),F()}},te4({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:(D,J,F)=>{A.navigateForward(),F()}},{noun:"mcp",verb:"info",description:"Show MCP servers and tools",keywords:["servers","tools","plugins","integrations"],status:{type:"enabled"},run:(D,J,F)=>{D.push(new tA1({mcpServers:this.widget.neoContext.mcpServers,onDismiss:F}))}},{noun:"toolbox",verb:"list",description:"List all toolboxes and their tools",keywords:["tools","toolbox"],status:{type:"enabled"},run:(D)=>{D.pushWithDismiss((J)=>new R51({toolboxes:this.widget.neoContext.toolboxes,onDismiss:J}))}},{noun:"news",verb:"open",description:"Open Amp Chronicle in browser",keywords:["chronicle","updates","blog","announcements"],status:{type:"enabled"},run:async(D,J,F)=>{try{await n6(J,"https://ampcode.com/chronicle")}finally{F()}}},{noun:"settings",verb:"open in editor",description:"Open CLI settings in $EDITOR",keywords:["config","preferences","edit"],status:{type:"enabled"},run:()=>{F$(this.widget.neoContext.settingsFilePath).catch((D)=>{P.error("Failed to open settings file in editor",{error:D})})}},{noun:"IDE",verb:"connect",description:"Connect to an IDE",keywords:["vscode","cursor","jetbrains","editor","attach"],status:{type:"enabled"},run:(D,J,F)=>{D.pushWithDismiss((Y)=>new rA1({onCancel:Y,onSelect:(E)=>{this.handleIdeSelection(E),F()}}))}},{noun:"amp",verb:"help",description:"Show help & keyboard shortcuts",keywords:["shortcuts","keybindings","docs","manual","?"],status:{type:"enabled"},run:(D,J,F)=>{D.push(new NA1({commands:M9.of(J).commands,onDismiss:F}))}},{noun:"amp",verb:"show welcome",description:"Show the welcome message again",keywords:["intro","onboarding","getting started"],status:{type:"enabled"},run:(D,J,F)=>{F(),A.showNeoWelcome()}},{noun:"amp",verb:"end credits",description:"Roll the full-screen Amp credits",keywords:["team","contributors","movie","credits","easter egg"],status:{type:"enabled"},run:(D,J,F)=>{F(),A.showEndCredits()}},{noun:"amp",verb:"show version",description:"Show current Amp version",keywords:["about","release","build"],status:{type:"enabled"},run:(D,J,F)=>{D.push(new w6({header:"Amp Version",maxWidth:72,onDismiss:F,child:new d({text:new C(gZ0({version:"0.0.1779345702-g49e69d",buildTimestamp:"2026-05-21T06:46:29.871Z",buildType:"release"}))})}))}},{noun:"amp",verb:"quit",description:"Exit application",keywords:["exit","close","leave","bye"],shortcut:G1.ctrl("c"),status:{type:"enabled"},run:(D,J)=>{x4.maybeInvoke(J,new gy)}},...Q,...wa4(this.widget.neoContext.logFilePath)].map((D)=>this.commandRegistry.register(D));return()=>{for(let D of B)D()}}build(A){let Q=this.buildHints(),$=this.ideStatus.getValue(),B=this.notices.current,D=new j51({initialAgentMode:this.widget.neoContext.sessionAgentMode,analyzeContextForThread:this.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,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:$,statusItems:this.pluginIntegration?.getStatusItems()??[],pluginConfirmationBlocked:this.pluginIntegration?.hasBlockingConfirmDialog()??!1,notificationService:this.widget.notificationService,notice:this.activeThreadContext||this.neoWelcomeVisible?null:B,onDismissNotice:(U)=>this.notices.dismiss(U)}),J=c1.of(A),F=J.capabilities.animationSupport!=="disabled",E=[new b0({constraints:C1.tight(J.size.width,J.size.height),child:this.threadListSidebar.buildBody(D)})];if(this.commandPalette.isEnabled())E.push(new k4({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new IA1({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.neoWelcomeVisible)E.push(u31({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:this.closeSwitchThreadPicker,onThreadSelected:this.closeSwitchThreadPicker}));if(this.neoWelcomeVisible)E.push(new k4({debugLabel:"NeoWelcomeDialogOverlay",child:new k51({onDismiss:this.dismissNeoWelcome,onQuit:()=>z4.instance.stop(),animationsEnabled:F,variant:this.widget.neoWelcomeVariant})}));let Z=this.executorAlreadyConnectedDialog;if(Z)E.push(new k4({debugLabel:"NeoExecutorAlreadyConnectedDialogOverlay",child:new aA1({existingExecutorPid:Z.existingExecutorPid,onChoice:this.handleExecutorAlreadyConnectedChoice})}));if(E.push(...this.mcpTrustIntegration?.buildDialogLayers()??[]),E.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.neoContext.isInternalUser)E.push(new CA1({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:OG0.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)E.push(new oA1);if(this.endCreditsVisible)E.push(new dA1({onComplete:this.completeEndCredits,highScore:this.neoInvadersHighScore,onHighScoreChange:this.updateNeoInvadersHighScore}));return new V5({neoContext:this.widget.neoContext,child:new M9({commandRegistry:this.commandRegistry,child:new py({completionBuilder:this.widget.completionBuilder,child:new L3({controller:this.toastController,child:new x4({actions:this.buildActions(),child:new kA({debugLabel:"NeoAppShortcuts",shortcuts:this.buildShortcuts(),child:new v4({debugLabel:"AppShellFocus",child:new v11({controller:this.toastController,complexToastControllers:[this.relaunchNotificationController,...B&&this.activeThreadContext&&!this.neoWelcomeVisible?[this.notices]:[]],child:new wA1({configReloadEvents:this.widget.configService.configReloadEvents,toastController:this.toastController,child:new i4({children:E})})})})})})})})})})}buildShortcuts(){let A=new Map([[G1.ctrl("c"),new DX0],[G1.ctrl("o"),new FX0],[G1.alt("i"),new EX0],[G1.alt("p"),new yN],[G1.ctrl("."),new XX0],[G1.ctrl("t"),new KX0],...this.threadListSidebar.shortcutEntries()]);if(OG0.env.NODE_ENV==="development"&&OG0.platform==="darwin")A.set(G1.meta("r"),new JX0);return A}buildActions(){let A=new T1(()=>{if(jD.hasAnyCopyableSelection())return jD.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new T1(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),$=new T1(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),B=new T1(()=>{return this.startNewDraftThread(),"handled"}),D=new T1(()=>{return z4.instance.stop(),"handled"}),J=new T1(()=>{return cs({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested}),"handled"}),F=new T1((G)=>{if(!G.text)return"ignored";return z4.instance.tuiInstance.clipboard.writeText(G.text).then((V)=>{if(V.ok)this.toastController.show(G.successMessage,"success",2000);else this.toastController.show(`${G.failureMessage}: ${V.userFacingErrorMessage}`,"error",4000)}).catch((V)=>{P.error("Failed to copy Neo text to clipboard",{error:V}),this.toastController.show(G.failureMessage,"error",2000)}),"handled"}),Y=new T1(()=>{return z4.instance.toggleFrameStatsOverlay(),"handled"}),E=new T1(()=>this.notices.dismissCurrent()?"handled":"ignored"),Z=new T1(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),U=Jo4({getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??null,neoContext:this.widget.neoContext,toastController:this.toastController,startNewDraftThread:this.startNewDraftThread,sendFeedbackReport:this.sendFeedbackReport}),X=new T1(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[DX0,A],[Ss,B],[gy,D],[JX0,J],[H8,F],[bs,$],[FX0,Q],[EX0,Z],...this.threadListSidebar.actionEntries(),[XX0,E],...U,[yN,Y],[KX0,X]])}startNewDraftThread(A={}){let Q=this.activeThreadContext?.client.getThreadId();if(this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(Q),this.setState(()=>{if(this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=null,this.activePluginMessageSubscription?.unsubscribe(),this.activePluginMessageSubscription=null,this.activePluginUIRequestsSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription=null,this.pluginIntegration?.cancelOwnerUIRequests(),this.activeThreadContext=null,this.connectingToThreadID=null,A.hideDebugOverlay)this.debugOverlayVisible=!1}),this.widget.onActiveThreadChange?.(null),this.syncEmptyThreadPluginConfirmationTitle(),A.prompt!==void 0)this.editorController.text=A.prompt}syncEmptyThreadPluginConfirmationTitle=()=>{this.emptyThreadTerminalTitleController.setPluginConfirmationBlocked(this.activeThreadContext===null&&(this.pluginIntegration?.hasBlockingConfirmDialog()??!1))};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 By(this.widget.configService));this.applyDraftThreadSettingsSeed(A)}catch(A){P.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applySessionDefaultsToThreadSettings(A){let Q=this.widget.neoContext.sessionAgentMode,$=A,B=EB(Q),D=jZ0(this.widget.neoContext,Q);if(B!==void 0&&D!==void 0)$={...$,[B]:D};return OZ0($,{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=Y06(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if(iF(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=Y06(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(Aw);if(this.exitHintTimer.isActive())A.add(fy);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),z4.instance.stop();else this.exitHintTimer.activate()};dismissNeoWelcome=()=>{if(!this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!1}),this.widget.onNeoWelcomeDismissed?.()};updateNeoInvadersHighScore=(A)=>{if(A<=this.neoInvadersHighScore)return;this.setState(()=>{this.neoInvadersHighScore=A}),zQ((Q)=>({...Q,neoInvadersHighScore:Math.max(Q.neoInvadersHighScore,A)})).catch((Q)=>{P.warn("Failed to save Neo Invaders high score",{error:Q instanceof Error?Q.message:String(Q)})})};showNeoWelcome=()=>{if(this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!0})};showEndCredits=()=>{if(this.endCreditsVisible)return;this.setState(()=>{this.endCreditsVisible=!0})};completeEndCredits=()=>{if(!this.endCreditsVisible)return;this.setState(()=>{this.endCreditsVisible=!1})};promptExecutorAlreadyConnected(A){return new Promise((Q)=>{this.setState(()=>{this.executorAlreadyConnectedDialog={existingExecutorPid:A.existingExecutorPid,resolve:($)=>{Q($==="watch"?"observe":"disconnect")}}})})}handleExecutorAlreadyConnectedChoice=(A)=>{if(this.resolveExecutorAlreadyConnectedDialog(A),A==="exit")z4.instance.stop()};resolveExecutorAlreadyConnectedDialog(A){let Q=this.executorAlreadyConnectedDialog;if(!Q)return;this.setState(()=>{this.executorAlreadyConnectedDialog=null}),Q.resolve(A)}closeSwitchThreadPicker=()=>{if(!this.switchThreadPickerVisible)return;this.setState(()=>{this.switchThreadPickerVisible=!1})};updateDraftThreadSettings=(A)=>{this.setState(()=>{this.draftThreadSettings=A(this.draftThreadSettings)})};onNewThread=async(A,Q,$=null,B)=>{await this.ensureDraftThreadSettingsInitialized();let D=this.activeThreadContext?.client.getThreadId(),J=A.find(Z20);if(J)this.widget.history.add(J.text,OG0.cwd()),this.widget.history.reset();let F=$?void 0:await this.widget.getDefaultNewThreadVisibility?.(),Y=$??F??null,E=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,Y??void 0);this.sendUserMessage(E,A,Q,B),this.rememberSessionDefaultsForNewMessage(Q,this.draftThreadSettings),this.threadNavigationHistory.recordNavigation(D),this.setActiveClient(E)};rememberSessionDefaultsForNewMessage(A,Q){this.widget.neoContext.sessionAgentMode=A;let $=Q["reasoning.effort"];if($!==void 0)this.widget.neoContext.lastReasoningEffortByMode={...this.widget.neoContext.lastReasoningEffortByMode??{},[A]:$};let B=EB(A),D=B?Q[B]:void 0;if(D!==void 0)this.widget.neoContext.lastSpeedByMode={...this.widget.neoContext.lastSpeedByMode??{},[A]:D};zQ((J)=>{let F={...J,agentMode:A};if($!==void 0)F={...F,lastReasoningEffortByMode:{...F.lastReasoningEffortByMode??{},[A]:$}};if(D!==void 0)F={...F,lastSpeedByMode:{...F.lastSpeedByMode??{},[A]:D}};return F}).catch((J)=>{P.warn("Failed to persist Neo session defaults for new message",{error:J instanceof Error?J.message:String(J)})})}sendUserMessage(A,Q,$,B){let D=VF0(this.ideStatus.getValue());if(B===void 0){A.client.sendUserMessage(Q,$,{userState:D});return}A.client.sendUserMessage(Q,$,{reasoningEffort:B,userState:D})}getActiveThreadID=()=>{return this.activeThreadContext?.client.getThreadId()??void 0};getRelaunchThreadIDs=()=>{let A=new Set,Q=this.getActiveThreadID();if(Q)A.add(Q);for(let $ of this.widget.clientPool.activeThreadIDs)A.add($);return[...A]};appendPluginMessagesToThread=async(A,Q)=>{let $=this.activeThreadContext;if(!$)throw Error("appendToThread is not available - no active thread");let B=$.client.getThreadId();if(Q&&B!==Q)throw Error("thread.append is only available for the active executor thread");for(let D of A)this.sendUserMessage($,[{type:"text",text:D.content}])};async connectToExistingThread(A,Q={}){let $=this.activeThreadContext?.client.getThreadId();this.setState(()=>{this.connectingToThreadID=A});try{let B=await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.neoContext.observerOnly,onExecutorAlreadyConnected:(D)=>this.promptExecutorAlreadyConnected(D)});if(this.setActiveClient(B),Q.recordNavigation&&$!==A)this.threadNavigationHistory.recordNavigation($);if(Q.initialUserInput)this.sendUserMessage(B,[{type:"text",text:Q.initialUserInput}])}catch(B){if(P.error("Failed to load thread",{error:B,threadID:A}),this.toastController.show(`Failed to load ${A}: ${B instanceof Error?B.message:String(B)}`,"error",4000),Q.rethrowError)throw B}finally{this.setState(()=>{this.connectingToThreadID=null})}}async connectToInitialThreads(A,Q={}){await this.connectToExistingThread(A,Q);let $=this.widget.initialThreadIDs.filter((B)=>B!==A);await Promise.all($.map((B)=>this.resumeBackgroundThread(B)))}async resumeBackgroundThread(A){try{await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.neoContext.observerOnly,onExecutorAlreadyConnected:async()=>"observe"})}catch(Q){P.error("Failed to resume background thread",{error:Q,threadID:A}),this.toastController.show(`Failed to resume ${A}: ${Q instanceof Error?Q.message:String(Q)}`,"error",4000)}}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()}}setActiveClient({client:A,observer:Q}){this.setState(()=>{this.activeThreadContext={client:A,observer:Q}}),this.syncEmptyThreadPluginConfirmationTitle(),this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=Q.threadID().subscribe(($)=>{this.widget.onActiveThreadChange?.($)}),this.activePluginMessageSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription?.unsubscribe(),this.pluginIntegration?.cancelOwnerUIRequests(),this.activePluginMessageSubscription=Q.pluginMessages().subscribe(($)=>{this.pluginIntegration?.handlePluginMessage($,(B)=>{A.sendPluginMessage(B)})}),this.activePluginUIRequestsSubscription=Q.pluginUIRequests().subscribe(($)=>{this.pluginIntegration?.handlePluginMessage({type:"plugin_message",message:{type:"event",event:"plugin.ui.snapshot",data:{requests:[...$]}}},(B)=>{A.sendPluginMessage(B)})})}handleIdeSelection=async(A)=>{try{await this.widget.ideManager.connect(A)}catch(Q){P.error("Failed to connect to IDE",{error:Q});let $=Q instanceof Error?Q.message:String(Q);this.toastController.show(`IDE connection failed: ${$}`,"error",4000)}};dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.activePluginMessageSubscription?.unsubscribe(),this.activePluginMessageSubscription=null,this.activePluginUIRequestsSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription=null,this.pluginIntegration?.dispose(),this.pluginIntegration=null,this.emptyThreadTerminalTitleController.dispose(),this.mcpTrustIntegration?.dispose(),this.mcpTrustIntegration=null,this.updateRelaunchIntegration?.dispose(),this.updateRelaunchIntegration=null,this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=null,this.noticesPollingTimeout)clearTimeout(this.noticesPollingTimeout),this.noticesPollingTimeout=null;this.connectionErrorsSubscription?.unsubscribe(),this.configSubscription?.unsubscribe(),this.configSubscription=null,this.notices.dispose(),this.widget.notificationService.detach(),this.toastController.dispose(),super.dispose()}hasBlockingTopLevelModal(){return this.switchThreadPickerVisible||this.executorAlreadyConnectedDialog!==null||this.neoWelcomeVisible||(this.mcpTrustIntegration?.hasBlockingDialog()??!1)||this.endCreditsVisible||(this.pluginIntegration?.hasBlockingDialog()??!1)}}function Y06(A,Q,$){let B={...A};for(let D of yi3(Q,$)){if(!iF(A[D],Q[D]))continue;let J=$[D];if(J===void 0)delete B[D];else B[D]=J}return B}function yi3(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}a4();function Z06(A,Q,$,B){let D=WT(A),J="\x1B[0m",F="\x1B[34m",Y="\x1B[90m",E="\x1B[2m",Z=[];if(A.archived)Z.push("\x1B[90m\x1B[2mArchived\x1B[0m");Z.push(`${D}`),Z.push(`\x1B[34m${Q}\x1B[0m`),Z.push(`\x1B[90mamp threads continue ${A.id}\x1B[0m`);let U=14,X=7,G=new tJ(U,X),V=new a9(42),K=new TN(U,X,U,X,U,X,0,A.agentMode??"smart","intensity","classic","braille",void 0,void 0,K0.default(),V);K.layout(C1.tight(U,X)),K.paint(G,0,0);let z=G.getBuffer().getCells(),I=0;for(let j=0;j<X;j++)if(z[j].some((k)=>k.char!==" ")){I=j;break}let W=X-1;for(let j=X-1;j>=0;j--)if(z[j].some((k)=>k.char!==" ")){W=j;break}function H(j,k){if(!j)return"";if(j.type==="rgb"){let{r:_,g:f,b:h}=j.value;if($.getColorDepth()>=24)return`\x1B[${k?38:48};2;${_};${f};${h}m`;let b=mj(_,f,h);return`\x1B[${k?38:48};5;${b}m`}return""}let q=[];if(W>=I)for(let j=I;j<=W;j++){let k="";for(let _=0;_<U;_++){let f=z[j][_],h=f.char,b=H(f.style.fg,!0);k+=b+h+"\x1B[0m"}q.push(k)}let N=q.length,w=Math.max(N,Z.length),O=Math.floor((w-N)/2),L=Math.floor((w-Z.length)/2);for(let j=0;j<w;j++){let k=" ".repeat(U);if(j>=O&&j<O+N)k=q[j-O];let _=" ",f="";if(j>=L&&j<L+Z.length)f=Z[j-L];$.write(k+_+f+`
5323
+ `)),J.push(new C("Details: ",new T({color:B.mutedForeground}))),J.push(new C(A.costBreakdownURL,new T({color:$.app.link})));return new d({text:new C("",void 0,J)})}function Ti3(A,Q,$){let B=_i3(A,Q);if(!A.costBreakdownURL)return new w6({header:"Thread Cost",minWidth:80,maxWidth:100,onDismiss:$,child:B});let D=A.costBreakdownURL,J=new T1(()=>{return x4.maybeInvoke(Q,new H8(D,"Cost breakdown URL copied to clipboard","Failed to copy cost breakdown URL")),"handled"}),F=new T1(()=>{return n6(Q,D),"handled"});return new w6({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:$,child:new x4({actions:new Map([[S51,J],[f51,F]]),child:new kA({debugLabel:"ThreadCostShortcuts",shortcuts:new Map([[G1.key("o"),new f51],[G1.key("y"),new S51]]),child:new v4({autofocus:!0,debugLabel:"ThreadCostBody",child:B})})})})}function te4(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 D=A.getActiveThreadID();if(!D)return;try{let J=await e4.threadDisplayCostInfo({threadID:D},{config:A.configService});if(!J.ok){A.toastController.show(ui3(D,J.error),"error",5000),B();return}Q.push(Ti3(J.result,$,B))}catch(J){P.error("Failed to load Neo thread cost",{error:J,threadID:D}),A.toastController.show(`Failed to show thread cost: ${J instanceof Error?J.message:String(J)}`,"error",5000),B()}}}}p0();u9();Q4();class XI extends V4{direction;constructor(A){super();this.direction=A}}class CG0 extends V4{}class It extends V4{}class MG0 extends V4{index;constructor(A){super();this.index=A}}function y51(A){return A.length+2}class x51 extends P0{props;constructor(A){super();this.props=A}createState(){return new ee4}}class ee4 extends R0{selectedIndex=0;initState(){super.initState(),this.selectedIndex=this.findSelectableIndex(this.widget.props.initialSelectedIndex??0)}didUpdateWidget(A){this.selectedIndex=this.findSelectableIndex(this.selectedIndex)}isSelectable(A){let Q=this.widget.props.entries[A];return Q?.type==="item"&&(Q.enabled??!0)}findSelectableIndex(A){let{entries:Q}=this.widget.props;if(Q.length===0)return 0;let $=Math.max(0,Math.min(A,Q.length-1));if(this.isSelectable($))return $;for(let B=1;B<Q.length;B++){let D=$+B;if(D<Q.length&&this.isSelectable(D))return D;let J=$-B;if(J>=0&&this.isSelectable(J))return J}return 0}moveSelection(A){let Q=this.findNextSelectableIndex(A);if(Q===this.selectedIndex)return;this.setState(()=>{this.selectedIndex=Q})}findNextSelectableIndex(A){let{entries:Q}=this.widget.props;for(let $=this.selectedIndex+A;$>=0&&$<Q.length;$+=A)if(this.isSelectable($))return $;return this.selectedIndex}acceptIndex(A){let Q=this.widget.props.entries[A];if(Q?.type!=="item"||!(Q.enabled??!0))return;this.setState(()=>{this.selectedIndex=A}),this.widget.props.onAccept(Q.value)}invoke=(A)=>{if(A instanceof XI)return this.moveSelection(A.direction),"handled";if(A instanceof CG0)return this.acceptIndex(this.selectedIndex),"handled";if(A instanceof It)return this.widget.props.onDismiss(),"handled";if(A instanceof MG0)return this.acceptIndex(A.index),"handled";return"ignored"};buildShortcuts(){let A=new Map([[G1.key("ArrowDown"),new XI(1)],[G1.key("j"),new XI(1)],[G1.ctrl("n"),new XI(1)],[G1.key("ArrowUp"),new XI(-1)],[G1.key("k"),new XI(-1)],[G1.ctrl("p"),new XI(-1)],[G1.key("Enter"),new CG0],[G1.key("Escape"),new It],[G1.ctrl("."),new It]]);return this.widget.props.entries.forEach((Q,$)=>{if(Q.type==="item"&&Q.shortcut)A.set(Q.shortcut,new MG0($))}),A}buildActions(){return new Map([[XI,new T1(this.invoke)],[CG0,new T1(this.invoke)],[It,new T1(this.invoke)],[MG0,new T1(this.invoke)]])}build(A){let Q=O0.of(A),$=vi3(this.widget.props.entries,c1.of(A).supportsEmojiWidth);return new b0({width:this.widget.props.width,height:y51(this.widget.props.entries),decoration:new R4(Q.colors.background,m1.all(new d1(Q.colors.border,1,"solid"))),child:new x4({actions:this.buildActions(),child:new kA({debugLabel:"NeoContextPickerShortcuts",shortcuts:this.buildShortcuts(),child:new v4({autofocus:!0,debugLabel:"NeoContextPicker",child:new S0({mainAxisSize:"min",crossAxisAlignment:"stretch",children:this.widget.props.entries.map((B,D)=>this.buildEntry(B,D,$,Q))})})})})})}buildEntry(A,Q,$,B){if(A.type==="separator")return new b0({height:1,decoration:{border:new m1(new d1(B.colors.border,1,"solid"))}});let D=Q===this.selectedIndex,J=A.enabled??!0,F=new T({color:D?B.app.selectionForeground:B.colors.foreground,dim:!J}),Y=new T({color:D?B.app.selectionForeground:B.app.keybind,bold:!0,dim:!J});return new O1({onClick:()=>this.acceptIndex(Q),child:new b0({padding:V0.symmetric(1,0),decoration:D?new R4(B.app.selectionBackground):void 0,child:new r0({crossAxisAlignment:"start",children:[new R1({child:new d({text:new C(A.label,F),maxLines:1,overflow:"ellipsis"})}),new X0({width:1}),new X0({width:$,child:new d({text:new C(A06(A),Y),textAlign:"right",maxLines:1,overflow:"ellipsis"})})]})})})}}function vi3(A,Q){return A.reduce(($,B)=>{return B.type==="item"?Math.max($,J4(A06(B),Q)):$},0)}function A06(A){return A.shortcutLabel??A.shortcut?.toString().toLowerCase()??""}var ki3=36,Si3=24,fi3=72;class Q06 extends P0{child;onContext;constructor(A,Q){super();this.child=A;this.onContext=Q}createState(){return new $06}}class $06 extends R0{build(A){return this.widget.onContext(A),this.widget.child}}function B06(A){return A.replace(/ ago$/,"")}function LG0(A){return A.reduce((Q,$)=>Math.max(Q,J4(B06($.description.timeAgo))),0)}function D06(A){return Math.max(Si3,Math.min(A,fi3))}class b51 extends V4{}class h51 extends V4{}class g51{options;visibility;width=ki3;constructor(A){this.options=A;this.visibility=new xr(A.state)}isVisible(){return this.visibility.isEnabled()}buildBody(A){return new r0({crossAxisAlignment:"stretch",children:[this.buildSlot(),new R1({child:A})]})}buildSlot(){if(!this.options.isAvailable()||this.visibility.isDisabled())return new X0({width:0});return new X0({width:this.width,child:new k4({debugLabel:"ThreadListSidebar",child:new J06({activeThreadID:this.options.getActiveThreadID(),currentWorkspaceURI:t1(i0.file(this.options.getWorkspaceRoot())),width:this.width,loadThreads:this.options.loadThreads,onSelectThread:this.options.onSelectThread,onDismiss:this.close,onResizeWidth:this.resize})})})}commands(){if(!this.options.isAvailable())return[];return[{noun:"thread",verb:"toggle sidebar",description:"Show or hide the thread sidebar",keywords:["sidebar","recent","history","threads"],shortcut:G1.alt("s"),status:{type:"enabled"},run:(A,Q,$)=>{$(),this.toggle()}}]}shortcutEntries(){return this.options.isAvailable()?[[G1.alt("s"),new ZX0]]:[]}actionEntries(){if(!this.options.isAvailable())return[];return[[ZX0,new T1(()=>this.toggle())]]}toggle=()=>{if(!this.options.isAvailable())return"ignored";if(this.visibility.isDisabled()&&this.options.isBlocked())return"ignored";return this.visibility.toggle(),"handled"};close=()=>{this.visibility.disable()};resize=(A)=>{let Q=D06(A);if(Q===this.width)return;this.options.state.setState(()=>{this.width=Q})}}class J06 extends P0{props;constructor(A){super();this.props=A}createState(){return new F06}}class F06 extends R0{threads=[];isLoading=!0;isSwitchingThread=!1;hasError=!1;filterByWorkspace=!0;timeColWidth=0;contextMenu=null;pendingThreadMutations=new Map;resizeSession=null;isResizeHandleHovered=!1;pickerController=new Qs;threadItemContexts=new Map;shortcuts=new Map([[G1.alt("w"),new b51],[G1.ctrl("."),new h51]]);actions=new Map([[b51,new T1(()=>{return this.setState(()=>{this.filterByWorkspace=!this.filterByWorkspace,this.contextMenu=null}),"handled"})],[h51,new T1(()=>this.openContextMenu())]]);get isBusy(){return this.isLoading||this.isSwitchingThread}get isResizeActive(){return this.resizeSession!==null||this.isResizeHandleHovered}didUpdateWidget(A){if(this.contextMenu&&(A.props.width!==this.widget.props.width||A.props.currentWorkspaceURI!==this.widget.props.currentWorkspaceURI))this.contextMenu=null}initState(){super.initState(),this.loadThreadSummaries()}async loadThreadSummaries(){try{let A=await this.widget.props.loadThreads(),Q=P31(A);if(!this.mounted)return;this.setState(()=>{this.pickerController.selectedItem=Q.find(($)=>$.id===this.widget.props.activeThreadID)??null,this.threads=Q,this.timeColWidth=LG0(Q),this.isLoading=!1,this.hasError=!1})}catch(A){if(P.error("Failed to load threads for Neo sidebar",{error:A}),!this.mounted)return;this.setState(()=>{this.isLoading=!1,this.hasError=!0})}}handleSelectThread=async(A)=>{if(this.isSwitchingThread)return;this.setState(()=>{this.isSwitchingThread=!0});try{await this.widget.props.onSelectThread(A),this.widget.props.onDismiss()}catch(Q){P.error("Failed to switch thread from Neo sidebar",{error:Q,threadID:A})}finally{if(this.mounted)this.setState(()=>{this.isSwitchingThread=!1})}};getOptimisticThreads(){return this.threads.flatMap((A)=>{if(this.pendingThreadMutations.get(A.id)?.kind==="archive")return[];return[A]})}getThreadsForDisplay(){let A=this.getOptimisticThreads();return this.filterByWorkspace?A.filter((Q)=>!Q.workspaceURI||Q.workspaceURI===this.widget.props.currentWorkspaceURI):A}buildContextMenuEntries(){return[{type:"item",value:"archive",label:"Archive Thread",shortcut:G1.key("a"),shortcutLabel:"a"},{type:"separator"},{type:"item",value:"copy-id",label:"Copy ID",shortcut:G1.ctrl("c"),shortcutLabel:"ctrl+c"},{type:"item",value:"copy-url",label:"Copy URL",shortcut:new G1("c",{shift:!0,ctrl:!0}),shortcutLabel:"shift+ctrl+c"}]}openContextMenu(){let A=this.pickerController.selectedItem;if(!A||this.isBusy||this.hasError)return"ignored";let Q=this.buildContextMenuEntries(),$=y51(Q),B=this.getContextMenuWidth(),D=this.getContextMenuPosition(A.id,$,B);return this.setState(()=>{this.contextMenu={threadID:A.id,left:D.left,top:D.top,width:B,height:$}}),"handled"}getContextMenuWidth(){let A=Math.max(24,this.widget.props.width-3);return Math.max(1,Math.min(A,this.widget.props.width-2))}getContextMenuPosition(A,Q,$){let B=Math.max(0,Math.min(2,this.widget.props.width-$)),D=1,J=this.threadItemContexts.get(A)?.findRenderObject(),F=this.context.findRenderObject();if(!(J instanceof p1)||!(F instanceof p1))return{left:B,top:1};let Y=J.localToGlobal({x:0,y:0}),E=F.localToGlobal({x:0,y:0}),Z=Y.y-E.y,U=Z+J.size.height,X=c1.sizeOf(this.context).height,G=Math.max(1,Math.min(F.size.height,X-E.y)),z=G-U>=Q||Z<G/2?U:Z-Q,I=Math.max(0,G-Q);return{left:B,top:Math.max(0,Math.min(z,I))}}closeContextMenu=()=>{if(!this.contextMenu)return;this.setState(()=>{this.contextMenu=null})};handleContextMenuAccept=(A)=>{let Q=this.contextMenu?.threadID;if(!Q)return;if(this.closeContextMenu(),A==="archive"){this.archiveContextMenuThread(Q);return}if(A==="copy-id"){x4.maybeInvoke(this.context,new H8(Q,"Thread ID copied to clipboard","Failed to copy thread ID"));return}x4.maybeInvoke(this.context,new H8(this.getThreadURL(Q),"Thread URL copied to clipboard","Failed to copy thread URL"))};beginOptimisticArchive(A){if(this.pendingThreadMutations.has(A))return!1;if(!this.threads.some(($)=>$.id===A))return!1;let Q={kind:"archive",fallbackSelectedThreadID:null};return this.setState(()=>{this.pendingThreadMutations.set(A,Q),this.timeColWidth=LG0(this.getOptimisticThreads())}),i6.instance.addPostFrameCallback(()=>{if(!this.mounted)return;let $=this.pendingThreadMutations.get(A);if($?.kind!=="archive")return;$.fallbackSelectedThreadID=this.pickerController.selectedItem?.id??null}),!0}commitOptimisticArchive(A){if(this.pendingThreadMutations.get(A)?.kind!=="archive")return;this.pendingThreadMutations.delete(A),this.threads=this.threads.filter(($)=>$.id!==A),this.timeColWidth=LG0(this.getOptimisticThreads())}rollbackOptimisticArchive(A){let Q=this.pendingThreadMutations.get(A);if(Q?.kind!=="archive")return;let $=this.threads.find((B)=>B.id===A);if(!$){this.pendingThreadMutations.delete(A);return}this.setState(()=>{this.pendingThreadMutations.delete(A),this.timeColWidth=LG0(this.getOptimisticThreads());let B=this.pickerController.selectedItem?.id??null;if(B===null||B===Q.fallbackSelectedThreadID)this.pickerController.selectedItem=$})}async archiveContextMenuThread(A){let Q=L3.maybeOf(this.context),{configService:$}=V5.of(this.context);if(!this.beginOptimisticArchive(A))return;try{let B=await VU0({configService:$},A);if(!this.mounted)return;if(B){this.rollbackOptimisticArchive(A),Q?.show(B.message,"error");return}this.commitOptimisticArchive(A)}catch(B){if(P.error("Failed to archive thread from Neo sidebar context menu",{error:B,threadID:A}),!this.mounted)return;this.rollbackOptimisticArchive(A),Q?.show("Failed to archive thread","error")}}getThreadURL(A){return y$(new URL(V5.of(this.context).ampURL),A).toString()}buildContextMenuOverlay(){let A=this.contextMenu;if(!A||!this.getThreadsForDisplay().some((Q)=>Q.id===A.threadID))return null;return new o4({left:A.left,top:A.top,width:A.width,height:A.height,child:new k4({debugLabel:"ThreadListSidebarContextMenu",onFocusChange:(Q)=>{if(!Q)this.closeContextMenu()},child:new x51({entries:this.buildContextMenuEntries(),width:A.width,onAccept:this.handleContextMenuAccept,onDismiss:this.closeContextMenu})})})}buildContextMenuBackdrop(){return new o4({left:0,top:0,right:0,bottom:0,child:new O1({onClick:()=>this.closeContextMenu(),child:X0.expand()})})}buildThreadItem(A,Q,$,B){let D=O0.of(B),{app:J,colors:F}=D,Y=!Q,E=Q?J.selectionForeground:F.foreground,Z=Q?J.selectionForeground:F.mutedForeground,X=A.id===this.widget.props.activeThreadID?new d({text:new C("*",new T({color:Q?J.selectionForeground:F.success,dim:Y}))}):void 0,G=B06(A.description.timeAgo);return new Q06(new b0({padding:V0.symmetric(1,0),child:new r0({children:[new X0({width:2,child:X}),new R1({child:new d({text:new C(A.title,new T({color:E,dim:Y})),overflow:"ellipsis",maxLines:1})}),new X0({width:2}),new X0({width:$,child:r0.end([new d({text:new C(G,new T({color:Z,dim:Y}))})])})]})}),(V)=>{this.threadItemContexts.set(A.id,V)})}handleResizeHandlePress=(A)=>{if(A.button!=="left")return;this.setState(()=>{this.resizeSession={baseWidthColumns:this.widget.props.width,startColumn:Math.floor(A.position.x)}})};handleResizeHandleDrag=(A)=>{if(A.button!=="left"||this.resizeSession===null)return;let Q=Math.floor(A.position.x)-this.resizeSession.startColumn,$=D06(this.resizeSession.baseWidthColumns+Q);if($!==this.widget.props.width)this.widget.props.onResizeWidth($)};handleResizeHandleRelease=(A)=>{if(A.button!=="left"||this.resizeSession===null)return;this.setState(()=>{this.resizeSession=null})};handleResizeHandleEnter=()=>{if(this.isResizeHandleHovered)return;this.setState(()=>{this.isResizeHandleHovered=!0})};handleResizeHandleExit=()=>{if(!this.isResizeHandleHovered)return;this.setState(()=>{this.isResizeHandleHovered=!1})};buildResizeHandle(){return new o4({top:0,right:0,bottom:0,width:1,child:new O1({cursor:ZA.EW_RESIZE,onClick:this.handleResizeHandlePress,onDrag:this.handleResizeHandleDrag,onRelease:this.handleResizeHandleRelease,onEnter:this.handleResizeHandleEnter,onExit:this.handleResizeHandleExit,child:new X0({width:1})})})}build(A){let Q=O0.of(A),$=this.getThreadsForDisplay(),B=this.hasError?[]:$;this.threadItemContexts.clear();let D=this.isSwitchingThread?"Switching thread...":"Loading threads...",J=this.hasError?"Failed to load threads":"No threads match your filter",F=this.isResizeActive?2:1,Y=new m1(void 0,new d1(Q.colors.border,F),void 0,void 0),E=this.buildContextMenuOverlay(),Z=[new b0({decoration:new R4(Q.colors.background,Y),child:new x4({actions:this.actions,child:new kA({shortcuts:this.shortcuts,debugLabel:"ThreadListSidebarFilter",child:new lA({items:B,getLabel:(U)=>`${U.title} ${U.id}`,controller:this.pickerController,onAccept:(U)=>void this.handleSelectThread(U.id),onDismiss:this.widget.props.onDismiss,renderItem:(U,X,G,V)=>this.buildThreadItem(U,X,this.timeColWidth,V),enabled:!this.isBusy,isLoading:this.isBusy,hidePromptWhenLoading:!0,loadingText:D,emptyStateText:J,maxRenderItems:200,showBorder:!1})})})}),this.buildResizeHandle()];if(E)Z.push(this.buildContextMenuBackdrop()),Z.push(E);return new b0({width:this.widget.props.width,child:new i4({fit:"expand",children:Z})})}}class m51 extends P0{listSkillsForThread;clientPool;completionBuilder;history;ideManager;configService;updateService;initialThreadIDs;showNeoWelcome;neoWelcomeVariant;onNeoWelcomeDismissed;notificationService;mcpTrustHandler;onThreadArchived;onActiveThreadChange;onRelaunchRequested;onFirstFrame;initialUserInput;getDefaultNewThreadVisibility;openThreadPickerOnStart;workspaceSettingsFilePath;neoContext;constructor(A){super();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.updateService=A.updateService,this.initialThreadIDs=A.initialThreadIDs??[],this.showNeoWelcome=A.showNeoWelcome??!1,this.neoWelcomeVariant=A.neoWelcomeVariant??"intro",this.onNeoWelcomeDismissed=A.onNeoWelcomeDismissed,this.notificationService=A.notificationService,this.mcpTrustHandler=A.mcpTrustHandler,this.onThreadArchived=A.onThreadArchived,this.onActiveThreadChange=A.onActiveThreadChange,this.onRelaunchRequested=A.onRelaunchRequested,this.onFirstFrame=A.onFirstFrame,this.initialUserInput=A.initialUserInput,this.getDefaultNewThreadVisibility=A.getDefaultNewThreadVisibility,this.openThreadPickerOnStart=A.openThreadPickerOnStart??!1,this.workspaceSettingsFilePath=A.workspaceSettingsFilePath,this.neoContext=A.neoContext}createState(){return new E06}}class E06 extends R0{editorController=new T2;commandPalette=new xr(this);commandRegistry=new zA1;toastController=new T11;relaunchNotificationController=new FA1;exitHintTimer=new yr(this,1000);ideStatus=new z8(this,{});threadNavigationHistory=new UA1;draftThreadSettings={};draftThreadSettingsSeed={};hasDraftThreadSettingsSeed=!1;draftThreadSettingsInitPromise=null;activeThreadContext=null;activeThreadIDSubscription=null;activePluginMessageSubscription=null;activePluginUIRequestsSubscription=null;connectionErrorsSubscription=null;configSubscription=null;connectingToThreadID=null;executorAlreadyConnectedDialog=null;switchThreadPickerVisible=!1;neoWelcomeVisible=!1;endCreditsVisible=!1;neoInvadersHighScore=0;debugOverlayVisible=!1;focusDebugVisible=!1;unregisterCommands=null;emptyThreadTerminalTitleController=new ss;pluginIntegration=null;mcpTrustIntegration=null;updateRelaunchIntegration=null;noticesPollingTimeout=null;notices;loadThreads=async()=>{return this.widget.neoContext.listThreads()};analyzeContextForThread=async(A,Q)=>{return Ld4({ampURL:this.widget.neoContext.ampURL,configService:this.widget.configService,threadID:A,signal:Q})};onSwitchThread=(A)=>{return this.connectToExistingThread(A,{recordNavigation:!0,rethrowError:!0})};threadListSidebar=new g51({state:this,isAvailable:()=>this.widget.neoContext.isInternalUser,isBlocked:()=>this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal(),getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??null,getWorkspaceRoot:()=>this.widget.neoContext.workspaceRoot,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread});sendFeedbackReport=async(A)=>wX0({configService:this.widget.configService,settingsFilePath:this.widget.neoContext.settingsFilePath},A);archiveThread=async(A)=>{let Q=await VU0({configService:this.widget.configService},A);if(Q===null)this.widget.onThreadArchived?.(A);return Q};addThreadLabel=async(A,Q)=>{let $=await vl4({configService:this.widget.configService},A,Q);if($ instanceof Error)return $;return this.toastController.show($.message,$.type,2000),null};removeThreadLabel=async(A,Q)=>{let $=await kl4({configService:this.widget.configService},A,Q);if($ instanceof Error)return $;return this.toastController.show($.message,$.type,2000),null};initState(){if(YB.getInstance().interceptConsole(),this.neoInvadersHighScore=this.widget.neoContext.neoInvadersHighScore??0,this.notices=new i61(this.widget.configService,($)=>this.setState($)),i6.instance.addPostFrameCallback(()=>{setTimeout(()=>this.widget.onFirstFrame?.(),0),this.noticesPollingTimeout=setTimeout(()=>{this.noticesPollingTimeout=null,this.notices.startPolling()},500)},"Neo notices polling"),this.widget.showNeoWelcome)this.neoWelcomeVisible=!0;if(this.connectionErrorsSubscription=this.widget.clientPool.connectionErrors$.subscribe(({threadID:$,error:B})=>{if(P.error("Neo failed to connect to thread",{threadID:$,error:B}),!$)this.toastController.show(`Connection failed: ${B.message}`,"error",4000)}),this.configSubscription=this.widget.configService.config.subscribe(($)=>{this.applyDraftThreadSettingsSeed(this.applySessionDefaultsToThreadSettings(H20($.settings)))}),this.updateRelaunchIntegration=new EA1({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested,relaunchNotificationController:this.relaunchNotificationController,updateService:this.widget.updateService}),this.updateRelaunchIntegration.init(),this.ideStatus.subscribe(this.widget.ideManager.status),this.widget.openThreadPickerOnStart)this.switchThreadPickerVisible=!0;this.ensureDraftThreadSettingsInitialized();let A=this.widget.initialUserInput,Q=this.widget.initialThreadIDs[0];if(Q){let $={};if(A)$.initialUserInput=A;this.connectToInitialThreads(Q,$)}else if(A)this.onNewThread([{type:"text",text:A}],this.widget.neoContext.sessionAgentMode);this.pluginIntegration=new JA1({state:this,commandPalette:this.commandPalette,commandRegistry:this.commandRegistry,toastController:this.toastController,neoContext:this.widget.neoContext,getActiveThreadID:this.getActiveThreadID,appendToThread:this.appendPluginMessagesToThread,onBlockingConfirmDialogChange:this.syncEmptyThreadPluginConfirmationTitle}),this.pluginIntegration.init(),this.mcpTrustIntegration=new l61({state:this,mcpTrustHandler:this.widget.mcpTrustHandler,toastController:this.toastController,workspaceSettingsFilePath:this.widget.workspaceSettingsFilePath}),this.mcpTrustIntegration.init(),this.unregisterCommands=this.registerAppCommands(),queueMicrotask(()=>{if(!this.mounted)return;this.replayEarlyInputToEditor()})}replayEarlyInputToEditor(){let A=z4.instance.tuiInstance.getEarlyInputText();if(!A)return;this.editorController.insertText(A)}registerAppCommands(){let A=this,Q=this.widget.neoContext.pluginService?ha4({pluginService:this.widget.neoContext.pluginService,workspaceRoot:this.widget.neoContext.workspaceRoot,logFilePath:this.widget.neoContext.logFilePath,toastController:this.toastController}):[],B=[aa4({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested}),{noun:"thread",verb:"switch",description:"Switch to existing thread",keywords:["recent","history","open","resume","change"],status:{type:"enabled"},sortBoost:100,run:(D,J,F)=>{D.pushWithDismiss((Y)=>u31({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:Y,onThreadSelected:F}))}},...this.threadListSidebar.commands(),{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:(D,J,F)=>{A.navigateBack(),F()}},te4({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:(D,J,F)=>{A.navigateForward(),F()}},{noun:"mcp",verb:"info",description:"Show MCP servers and tools",keywords:["servers","tools","plugins","integrations"],status:{type:"enabled"},run:(D,J,F)=>{D.push(new tA1({mcpServers:this.widget.neoContext.mcpServers,onDismiss:F}))}},{noun:"toolbox",verb:"list",description:"List all toolboxes and their tools",keywords:["tools","toolbox"],status:{type:"enabled"},run:(D)=>{D.pushWithDismiss((J)=>new R51({toolboxes:this.widget.neoContext.toolboxes,onDismiss:J}))}},{noun:"news",verb:"open",description:"Open Amp Chronicle in browser",keywords:["chronicle","updates","blog","announcements"],status:{type:"enabled"},run:async(D,J,F)=>{try{await n6(J,"https://ampcode.com/chronicle")}finally{F()}}},{noun:"settings",verb:"open in editor",description:"Open CLI settings in $EDITOR",keywords:["config","preferences","edit"],status:{type:"enabled"},run:()=>{F$(this.widget.neoContext.settingsFilePath).catch((D)=>{P.error("Failed to open settings file in editor",{error:D})})}},{noun:"IDE",verb:"connect",description:"Connect to an IDE",keywords:["vscode","cursor","jetbrains","editor","attach"],status:{type:"enabled"},run:(D,J,F)=>{D.pushWithDismiss((Y)=>new rA1({onCancel:Y,onSelect:(E)=>{this.handleIdeSelection(E),F()}}))}},{noun:"amp",verb:"help",description:"Show help & keyboard shortcuts",keywords:["shortcuts","keybindings","docs","manual","?"],status:{type:"enabled"},run:(D,J,F)=>{D.push(new NA1({commands:M9.of(J).commands,onDismiss:F}))}},{noun:"amp",verb:"show welcome",description:"Show the welcome message again",keywords:["intro","onboarding","getting started"],status:{type:"enabled"},run:(D,J,F)=>{F(),A.showNeoWelcome()}},{noun:"amp",verb:"end credits",description:"Roll the full-screen Amp credits",keywords:["team","contributors","movie","credits","easter egg"],status:{type:"enabled"},run:(D,J,F)=>{F(),A.showEndCredits()}},{noun:"amp",verb:"show version",description:"Show current Amp version",keywords:["about","release","build"],status:{type:"enabled"},run:(D,J,F)=>{D.push(new w6({header:"Amp Version",maxWidth:72,onDismiss:F,child:new d({text:new C(gZ0({version:"0.0.1779354043-g150a4f",buildTimestamp:"2026-05-21T09:06:08.537Z",buildType:"release"}))})}))}},{noun:"amp",verb:"quit",description:"Exit application",keywords:["exit","close","leave","bye"],shortcut:G1.ctrl("c"),status:{type:"enabled"},run:(D,J)=>{x4.maybeInvoke(J,new gy)}},...Q,...wa4(this.widget.neoContext.logFilePath)].map((D)=>this.commandRegistry.register(D));return()=>{for(let D of B)D()}}build(A){let Q=this.buildHints(),$=this.ideStatus.getValue(),B=this.notices.current,D=new j51({initialAgentMode:this.widget.neoContext.sessionAgentMode,analyzeContextForThread:this.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,archiveThread:this.archiveThread,addThreadLabel:this.addThreadLabel,removeThreadLabel:this.removeThreadLabel,configService:this.widget.configService,hints:Q,ideStatus:$,statusItems:this.pluginIntegration?.getStatusItems()??[],pluginConfirmationBlocked:this.pluginIntegration?.hasBlockingConfirmDialog()??!1,notificationService:this.widget.notificationService,notice:this.activeThreadContext||this.neoWelcomeVisible?null:B,onDismissNotice:(U)=>this.notices.dismiss(U)}),J=c1.of(A),F=J.capabilities.animationSupport!=="disabled",E=[new b0({constraints:C1.tight(J.size.width,J.size.height),child:this.threadListSidebar.buildBody(D)})];if(this.commandPalette.isEnabled())E.push(new k4({debugLabel:"CommandPaletteOverlay",onFocusChange:this.closeCommandPaletteOnFocusLoss,child:new IA1({onDismiss:this.commandPalette.disable})}));if(this.switchThreadPickerVisible&&!this.neoWelcomeVisible)E.push(u31({activeThreadID:this.activeThreadContext?.client.getThreadId()??null,loadThreads:this.loadThreads,onSelectThread:this.onSwitchThread,onDismiss:this.closeSwitchThreadPicker,onThreadSelected:this.closeSwitchThreadPicker}));if(this.neoWelcomeVisible)E.push(new k4({debugLabel:"NeoWelcomeDialogOverlay",child:new k51({onDismiss:this.dismissNeoWelcome,onQuit:()=>z4.instance.stop(),animationsEnabled:F,variant:this.widget.neoWelcomeVariant})}));let Z=this.executorAlreadyConnectedDialog;if(Z)E.push(new k4({debugLabel:"NeoExecutorAlreadyConnectedDialogOverlay",child:new aA1({existingExecutorPid:Z.existingExecutorPid,onChoice:this.handleExecutorAlreadyConnectedChoice})}));if(E.push(...this.mcpTrustIntegration?.buildDialogLayers()??[]),E.push(...this.pluginIntegration?.buildDialogLayers()??[]),this.widget.neoContext.isInternalUser)E.push(new CA1({top:this.focusDebugVisible?33:1,visible:this.debugOverlayVisible,pid:OG0.pid,activeThreadID:this.activeThreadContext?.client.getThreadId()??null,connectionInfo$:this.activeThreadContext?.observer.connectionInfo()??null}));if(this.focusDebugVisible)E.push(new oA1);if(this.endCreditsVisible)E.push(new dA1({onComplete:this.completeEndCredits,highScore:this.neoInvadersHighScore,onHighScoreChange:this.updateNeoInvadersHighScore}));return new V5({neoContext:this.widget.neoContext,child:new M9({commandRegistry:this.commandRegistry,child:new py({completionBuilder:this.widget.completionBuilder,child:new L3({controller:this.toastController,child:new x4({actions:this.buildActions(),child:new kA({debugLabel:"NeoAppShortcuts",shortcuts:this.buildShortcuts(),child:new v4({debugLabel:"AppShellFocus",child:new v11({controller:this.toastController,complexToastControllers:[this.relaunchNotificationController,...B&&this.activeThreadContext&&!this.neoWelcomeVisible?[this.notices]:[]],child:new wA1({configReloadEvents:this.widget.configService.configReloadEvents,toastController:this.toastController,child:new i4({children:E})})})})})})})})})})}buildShortcuts(){let A=new Map([[G1.ctrl("c"),new DX0],[G1.ctrl("o"),new FX0],[G1.alt("i"),new EX0],[G1.alt("p"),new yN],[G1.ctrl("."),new XX0],[G1.ctrl("t"),new KX0],...this.threadListSidebar.shortcutEntries()]);if(OG0.env.NODE_ENV==="development"&&OG0.platform==="darwin")A.set(G1.meta("r"),new JX0);return A}buildActions(){let A=new T1(()=>{if(jD.hasAnyCopyableSelection())return jD.tryCopyAnyActiveSelection(),"handled";return this.onExitPressed(),"handled"}),Q=new T1(()=>{if(!this.commandPalette.isEnabled()&&this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.toggle(),"handled"}),$=new T1(()=>{if(this.commandPalette.isEnabled()||this.hasBlockingTopLevelModal())return"ignored";return this.commandPalette.enable(),"handled"}),B=new T1(()=>{return this.startNewDraftThread(),"handled"}),D=new T1(()=>{return z4.instance.stop(),"handled"}),J=new T1(()=>{return cs({getRelaunchThreadIDs:this.getRelaunchThreadIDs,onRelaunchRequested:this.widget.onRelaunchRequested}),"handled"}),F=new T1((G)=>{if(!G.text)return"ignored";return z4.instance.tuiInstance.clipboard.writeText(G.text).then((V)=>{if(V.ok)this.toastController.show(G.successMessage,"success",2000);else this.toastController.show(`${G.failureMessage}: ${V.userFacingErrorMessage}`,"error",4000)}).catch((V)=>{P.error("Failed to copy Neo text to clipboard",{error:V}),this.toastController.show(G.failureMessage,"error",2000)}),"handled"}),Y=new T1(()=>{return z4.instance.toggleFrameStatsOverlay(),"handled"}),E=new T1(()=>this.notices.dismissCurrent()?"handled":"ignored"),Z=new T1(()=>{if(!this.widget.neoContext.isInternalUser)return"ignored";return this.setState(()=>{this.debugOverlayVisible=!this.debugOverlayVisible}),"handled"}),U=Jo4({getActiveThreadID:()=>this.activeThreadContext?.client.getThreadId()??null,neoContext:this.widget.neoContext,toastController:this.toastController,startNewDraftThread:this.startNewDraftThread,sendFeedbackReport:this.sendFeedbackReport}),X=new T1(()=>{return this.setState(()=>{this.focusDebugVisible=!this.focusDebugVisible}),"handled"});return new Map([[DX0,A],[Ss,B],[gy,D],[JX0,J],[H8,F],[bs,$],[FX0,Q],[EX0,Z],...this.threadListSidebar.actionEntries(),[XX0,E],...U,[yN,Y],[KX0,X]])}startNewDraftThread(A={}){let Q=this.activeThreadContext?.client.getThreadId();if(this.commandPalette.disable(),this.threadNavigationHistory.recordNavigation(Q),this.setState(()=>{if(this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=null,this.activePluginMessageSubscription?.unsubscribe(),this.activePluginMessageSubscription=null,this.activePluginUIRequestsSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription=null,this.pluginIntegration?.cancelOwnerUIRequests(),this.activeThreadContext=null,this.connectingToThreadID=null,A.hideDebugOverlay)this.debugOverlayVisible=!1}),this.widget.onActiveThreadChange?.(null),this.syncEmptyThreadPluginConfirmationTitle(),A.prompt!==void 0)this.editorController.text=A.prompt}syncEmptyThreadPluginConfirmationTitle=()=>{this.emptyThreadTerminalTitleController.setPluginConfirmationBlocked(this.activeThreadContext===null&&(this.pluginIntegration?.hasBlockingConfirmDialog()??!1))};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 By(this.widget.configService));this.applyDraftThreadSettingsSeed(A)}catch(A){P.warn("Failed to initialize Neo draft thread settings",{error:A instanceof Error?A.message:String(A)})}}applySessionDefaultsToThreadSettings(A){let Q=this.widget.neoContext.sessionAgentMode,$=A,B=EB(Q),D=jZ0(this.widget.neoContext,Q);if(B!==void 0&&D!==void 0)$={...$,[B]:D};return OZ0($,{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=Y06(this.draftThreadSettings,{},A),this.draftThreadSettingsSeed={...A}});return}if(iF(this.draftThreadSettingsSeed,A))return;this.setState(()=>{this.draftThreadSettings=Y06(this.draftThreadSettings,this.draftThreadSettingsSeed,A),this.draftThreadSettingsSeed={...A}})}buildHints(){let A=new Set;if(this.connectingToThreadID)A.add(Aw);if(this.exitHintTimer.isActive())A.add(fy);return A}onExitPressed=()=>{if(this.exitHintTimer.isActive())this.exitHintTimer.clear(),z4.instance.stop();else this.exitHintTimer.activate()};dismissNeoWelcome=()=>{if(!this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!1}),this.widget.onNeoWelcomeDismissed?.()};updateNeoInvadersHighScore=(A)=>{if(A<=this.neoInvadersHighScore)return;this.setState(()=>{this.neoInvadersHighScore=A}),zQ((Q)=>({...Q,neoInvadersHighScore:Math.max(Q.neoInvadersHighScore,A)})).catch((Q)=>{P.warn("Failed to save Neo Invaders high score",{error:Q instanceof Error?Q.message:String(Q)})})};showNeoWelcome=()=>{if(this.neoWelcomeVisible)return;this.setState(()=>{this.neoWelcomeVisible=!0})};showEndCredits=()=>{if(this.endCreditsVisible)return;this.setState(()=>{this.endCreditsVisible=!0})};completeEndCredits=()=>{if(!this.endCreditsVisible)return;this.setState(()=>{this.endCreditsVisible=!1})};promptExecutorAlreadyConnected(A){return new Promise((Q)=>{this.setState(()=>{this.executorAlreadyConnectedDialog={existingExecutorPid:A.existingExecutorPid,resolve:($)=>{Q($==="watch"?"observe":"disconnect")}}})})}handleExecutorAlreadyConnectedChoice=(A)=>{if(this.resolveExecutorAlreadyConnectedDialog(A),A==="exit")z4.instance.stop()};resolveExecutorAlreadyConnectedDialog(A){let Q=this.executorAlreadyConnectedDialog;if(!Q)return;this.setState(()=>{this.executorAlreadyConnectedDialog=null}),Q.resolve(A)}closeSwitchThreadPicker=()=>{if(!this.switchThreadPickerVisible)return;this.setState(()=>{this.switchThreadPickerVisible=!1})};updateDraftThreadSettings=(A)=>{this.setState(()=>{this.draftThreadSettings=A(this.draftThreadSettings)})};onNewThread=async(A,Q,$=null,B)=>{await this.ensureDraftThreadSettingsInitialized();let D=this.activeThreadContext?.client.getThreadId(),J=A.find(Z20);if(J)this.widget.history.add(J.text,OG0.cwd()),this.widget.history.reset();let F=$?void 0:await this.widget.getDefaultNewThreadVisibility?.(),Y=$??F??null,E=this.widget.clientPool.createNewThread(Q,this.draftThreadSettings,Y??void 0);this.sendUserMessage(E,A,Q,B),this.rememberSessionDefaultsForNewMessage(Q,this.draftThreadSettings),this.threadNavigationHistory.recordNavigation(D),this.setActiveClient(E)};rememberSessionDefaultsForNewMessage(A,Q){this.widget.neoContext.sessionAgentMode=A;let $=Q["reasoning.effort"];if($!==void 0)this.widget.neoContext.lastReasoningEffortByMode={...this.widget.neoContext.lastReasoningEffortByMode??{},[A]:$};let B=EB(A),D=B?Q[B]:void 0;if(D!==void 0)this.widget.neoContext.lastSpeedByMode={...this.widget.neoContext.lastSpeedByMode??{},[A]:D};zQ((J)=>{let F={...J,agentMode:A};if($!==void 0)F={...F,lastReasoningEffortByMode:{...F.lastReasoningEffortByMode??{},[A]:$}};if(D!==void 0)F={...F,lastSpeedByMode:{...F.lastSpeedByMode??{},[A]:D}};return F}).catch((J)=>{P.warn("Failed to persist Neo session defaults for new message",{error:J instanceof Error?J.message:String(J)})})}sendUserMessage(A,Q,$,B){let D=VF0(this.ideStatus.getValue());if(B===void 0){A.client.sendUserMessage(Q,$,{userState:D});return}A.client.sendUserMessage(Q,$,{reasoningEffort:B,userState:D})}getActiveThreadID=()=>{return this.activeThreadContext?.client.getThreadId()??void 0};getRelaunchThreadIDs=()=>{let A=new Set,Q=this.getActiveThreadID();if(Q)A.add(Q);for(let $ of this.widget.clientPool.activeThreadIDs)A.add($);return[...A]};appendPluginMessagesToThread=async(A,Q)=>{let $=this.activeThreadContext;if(!$)throw Error("appendToThread is not available - no active thread");let B=$.client.getThreadId();if(Q&&B!==Q)throw Error("thread.append is only available for the active executor thread");for(let D of A)this.sendUserMessage($,[{type:"text",text:D.content}])};async connectToExistingThread(A,Q={}){let $=this.activeThreadContext?.client.getThreadId();this.setState(()=>{this.connectingToThreadID=A});try{let B=await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.neoContext.observerOnly,onExecutorAlreadyConnected:(D)=>this.promptExecutorAlreadyConnected(D)});if(this.setActiveClient(B),Q.recordNavigation&&$!==A)this.threadNavigationHistory.recordNavigation($);if(Q.initialUserInput)this.sendUserMessage(B,[{type:"text",text:Q.initialUserInput}])}catch(B){if(P.error("Failed to load thread",{error:B,threadID:A}),this.toastController.show(`Failed to load ${A}: ${B instanceof Error?B.message:String(B)}`,"error",4000),Q.rethrowError)throw B}finally{this.setState(()=>{this.connectingToThreadID=null})}}async connectToInitialThreads(A,Q={}){await this.connectToExistingThread(A,Q);let $=this.widget.initialThreadIDs.filter((B)=>B!==A);await Promise.all($.map((B)=>this.resumeBackgroundThread(B)))}async resumeBackgroundThread(A){try{await this.widget.clientPool.connectToThread(A,{observerOnly:this.widget.neoContext.observerOnly,onExecutorAlreadyConnected:async()=>"observe"})}catch(Q){P.error("Failed to resume background thread",{error:Q,threadID:A}),this.toastController.show(`Failed to resume ${A}: ${Q instanceof Error?Q.message:String(Q)}`,"error",4000)}}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()}}setActiveClient({client:A,observer:Q}){this.setState(()=>{this.activeThreadContext={client:A,observer:Q}}),this.syncEmptyThreadPluginConfirmationTitle(),this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=Q.threadID().subscribe(($)=>{this.widget.onActiveThreadChange?.($)}),this.activePluginMessageSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription?.unsubscribe(),this.pluginIntegration?.cancelOwnerUIRequests(),this.activePluginMessageSubscription=Q.pluginMessages().subscribe(($)=>{this.pluginIntegration?.handlePluginMessage($,(B)=>{A.sendPluginMessage(B)})}),this.activePluginUIRequestsSubscription=Q.pluginUIRequests().subscribe(($)=>{this.pluginIntegration?.handlePluginMessage({type:"plugin_message",message:{type:"event",event:"plugin.ui.snapshot",data:{requests:[...$]}}},(B)=>{A.sendPluginMessage(B)})})}handleIdeSelection=async(A)=>{try{await this.widget.ideManager.connect(A)}catch(Q){P.error("Failed to connect to IDE",{error:Q});let $=Q instanceof Error?Q.message:String(Q);this.toastController.show(`IDE connection failed: ${$}`,"error",4000)}};dispose(){if(this.unregisterCommands?.(),this.unregisterCommands=null,this.activePluginMessageSubscription?.unsubscribe(),this.activePluginMessageSubscription=null,this.activePluginUIRequestsSubscription?.unsubscribe(),this.activePluginUIRequestsSubscription=null,this.pluginIntegration?.dispose(),this.pluginIntegration=null,this.emptyThreadTerminalTitleController.dispose(),this.mcpTrustIntegration?.dispose(),this.mcpTrustIntegration=null,this.updateRelaunchIntegration?.dispose(),this.updateRelaunchIntegration=null,this.activeThreadIDSubscription?.unsubscribe(),this.activeThreadIDSubscription=null,this.noticesPollingTimeout)clearTimeout(this.noticesPollingTimeout),this.noticesPollingTimeout=null;this.connectionErrorsSubscription?.unsubscribe(),this.configSubscription?.unsubscribe(),this.configSubscription=null,this.notices.dispose(),this.widget.notificationService.detach(),this.toastController.dispose(),super.dispose()}hasBlockingTopLevelModal(){return this.switchThreadPickerVisible||this.executorAlreadyConnectedDialog!==null||this.neoWelcomeVisible||(this.mcpTrustIntegration?.hasBlockingDialog()??!1)||this.endCreditsVisible||(this.pluginIntegration?.hasBlockingDialog()??!1)}}function Y06(A,Q,$){let B={...A};for(let D of yi3(Q,$)){if(!iF(A[D],Q[D]))continue;let J=$[D];if(J===void 0)delete B[D];else B[D]=J}return B}function yi3(...A){return Array.from(new Set(A.flatMap((Q)=>Object.keys(Q))))}a4();function Z06(A,Q,$,B){let D=WT(A),J="\x1B[0m",F="\x1B[34m",Y="\x1B[90m",E="\x1B[2m",Z=[];if(A.archived)Z.push("\x1B[90m\x1B[2mArchived\x1B[0m");Z.push(`${D}`),Z.push(`\x1B[34m${Q}\x1B[0m`),Z.push(`\x1B[90mamp threads continue ${A.id}\x1B[0m`);let U=14,X=7,G=new tJ(U,X),V=new a9(42),K=new TN(U,X,U,X,U,X,0,A.agentMode??"smart","intensity","classic","braille",void 0,void 0,K0.default(),V);K.layout(C1.tight(U,X)),K.paint(G,0,0);let z=G.getBuffer().getCells(),I=0;for(let j=0;j<X;j++)if(z[j].some((k)=>k.char!==" ")){I=j;break}let W=X-1;for(let j=X-1;j>=0;j--)if(z[j].some((k)=>k.char!==" ")){W=j;break}function H(j,k){if(!j)return"";if(j.type==="rgb"){let{r:_,g:f,b:h}=j.value;if($.getColorDepth()>=24)return`\x1B[${k?38:48};2;${_};${f};${h}m`;let b=mj(_,f,h);return`\x1B[${k?38:48};5;${b}m`}return""}let q=[];if(W>=I)for(let j=I;j<=W;j++){let k="";for(let _=0;_<U;_++){let f=z[j][_],h=f.char,b=H(f.style.fg,!0);k+=b+h+"\x1B[0m"}q.push(k)}let N=q.length,w=Math.max(N,Z.length),O=Math.floor((w-N)/2),L=Math.floor((w-Z.length)/2);for(let j=0;j<w;j++){let k=" ".repeat(U);if(j>=O&&j<O+N)k=q[j-O];let _=" ",f="";if(j>=L&&j<L+Z.length)f=Z[j-L];$.write(k+_+f+`
5324
5324
  `)}if(B)$.write(`
5325
5325
  \x1B[90m${B}\x1B[0m
5326
5326
  `)}p0();p0();import{exec as kR}from"node:child_process";function jG0(A="idle"){try{if(A==="idle"){if(process.platform==="darwin")kR("afplay /System/Library/Sounds/Submarine.aiff");else if(process.platform==="win32")kR("powershell [console]::beep(800,200)");else if(process.platform==="linux")kR("paplay /usr/share/sounds/freedesktop/stereo/message.oga || beep")}else if(A==="idle-review"){if(process.platform==="darwin")kR("afplay /System/Library/Sounds/Glass.aiff")}else if(A==="requires-user-input"){if(process.platform==="darwin")kR("afplay /System/Library/Sounds/Ping.aiff");else if(process.platform==="win32")kR("powershell [console]::beep(1000,300)");else if(process.platform==="linux")kR("paplay /usr/share/sounds/freedesktop/stereo/dialog-information.oga || beep -f 1000 -l 100")}}catch(Q){P.error(`Failed to play notification sound (${A}):`,Q)}}yZ0();var xi3=2000,bi3="Agent is ready",hi3="Waiting for approval";function U06(A){let Q=!0,$=!0,B=A.configService.config.subscribe((W)=>{Q=W.settings["notifications.enabled"]??!0,$=W.settings["notifications.system.enabled"]!==!1}),D=0,J=()=>{let W=V?.prepareTerminalTitleForNotification();if(W!==void 0)process.stdout.write(QZ0(W))},F=(W)=>{if(!Q)return;let H=Date.now();if(H-D<xi3)return;if(D=H,oj())return;if(SE0())J(),setTimeout(fE0,Ur);else jG0(W)},Y=()=>{F("idle"),K(bi3)},E=()=>{F("requires-user-input"),K(hi3)},Z=(W)=>W?.attempt===void 0||W.attempt===0,U=null,X=null,G=null,V,K=(W)=>{if(!Q||!$)return;if(oj()&&!ur()&&!af())return;J(),setTimeout(()=>{process.stdout.write(Xr(W))},Ur)},z=()=>{U?.unsubscribe(),X?.unsubscribe(),U=null,X=null,G=null,V=void 0};return{attach:(W,H,q)=>{if(z(),V=q,H)X=H.subscribe({next:(N)=>{if(N===null)return;if(!Z(N))return;Y()},error:(N)=>{P.debug("Neo notification active error stream errored",{error:N})}});U=W.subscribe({next:(N)=>{try{let w=G!==null&&tQ(G),O=G==="awaiting_approval",L=w||O;if(N==="awaiting_approval"&&!O)E();else if(N==="idle"&&L)Y()}catch(w){P.debug("Neo notification handling failed",{error:w})}finally{G=N}},error:(N)=>{P.debug("Neo notification agent state stream errored",{error:N})}})},detach:z,unsubscribe(){z(),B.unsubscribe()}}}function gi3({initialUserInput:A,showNeoWelcome:Q,hideNeoWelcome:$,neoWelcomeVariant:B,neoWelcomeDismissed:D}){if($)return{show:!1,markDismissedOnDismiss:!1};if(B==="npm-migration")return{show:!0,markDismissedOnDismiss:!1};if(Q)return{show:!0,markDismissedOnDismiss:!0};let J=!A&&!D;return{show:J,markDismissedOnDismiss:J}}async function mi3(A){await zQ((Q)=>Fy(Q,A,"interactive"))}async function X06(A,Q={}){let{initialThreadIDs:$=[],initialUserInput:B,getDefaultNewThreadVisibility:D,openThreadPickerOnStart:J=!1,observerOnly:F=!1,initialAgentMode:Y,initialReasoningEffort:E,onFirstFrame:Z,showNeoWelcome:U=!1,hideNeoWelcome:X=!1,neoWelcomeVariant:G="intro"}=Q,V=G==="npm-migration";if($.length>1)P.info("Resuming multiple initial threads",{threadIDs:$});let K=async(_)=>{let f=await A.getThreadFromServer(_);if(!f)return null;return CE0(f)},z=async(_)=>{let f=await A.getThreadFromServer(_);if(!f)throw Error(`Thread ${_} not found`);let h=await l9(_,A.configService,A.apiKey,{usesThreadActors:!0}),b=TG({endpoint:A.rivetEndpoint,poolName:h.poolName}),v={wsToken:h.wsToken,transport:"amp-rpc"},p=await b.threadActor.getOrCreate([_],{params:v,createWithInput:{threadId:h.threadId,threadVersion:h.threadVersion,ownerUserId:h.ownerUserId,...h.agentMode?{agentMode:h.agentMode}:{}}}).fetch("/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({thread:dy4(f)}),skipReadyWait:!0});if(!p.ok&&p.status!==409)throw Error(`Thread import failed (${p.status}): ${await p.text()}`);try{await Wx4(_,A.configService,A.apiKey,{executorType:"local-client"})}catch(c){P.warn("failed to mark thread as imported on server",{threadID:_,error:c instanceof Error?c.message:String(c)})}},I=new B11(A.rivetEndpoint,A.apiKey,A.configService,{clientID:UN.parse(`neo-${crypto.randomUUID()}`),toolService:A.toolService,skillService:A.skillService,requestPluginToolCall:(_)=>A.pluginService.event.toolCall(_),requestPluginToolResult:(_)=>A.pluginService.event.toolResult(_),pluginService:A.pluginService,pluginPlatform:A.pluginPlatform,invokeTool:async(_,f)=>{let h=typeof f.args==="object"&&f.args!==null?f.args:{},b=await CN({toolName:f.toolName,configService:A.configService,toolService:A.toolService,mcpService:A.mcpService,skillService:A.skillService,toolUseID:f.toolCallId,threadId:_});return A.toolService.invokeTool(f.toolName,{args:h},b)},persistLastThreadID:mi3,readFileSystemDirectory:A.readFileSystemDirectory},K,z),W=await rz(),H=gi3({initialUserInput:B,showNeoWelcome:U,hideNeoWelcome:X,neoWelcomeVariant:G,neoWelcomeDismissed:W.neoWelcomeDismissed}),q={ampURL:A.ampURL,configService:A.configService,getThreadMarkdown:async(_)=>{let f=await A.getThreadFromServer(_);return f?bX(f):null},isInternalUser:A.isInternalUser,listThreads:A.listThreads,logFilePath:Ao,mcpServers:A.mcpService.servers,pluginPlatform:A.pluginPlatform,pluginService:A.pluginService,toolboxes:A.toolboxes,observerOnly:V?!1:F,neoInvadersHighScore:W.neoInvadersHighScore,sessionAgentMode:Y??W.agentMode,explicitReasoningEffort:E,lastReasoningEffortByMode:W.lastReasoningEffortByMode,lastSpeedByMode:W.lastSpeedByMode,settingsFilePath:A.settingsFilePath,splashOrbVisualStyle:Q.splashOrbVisualStyle??"neo",workspaceRoot:A.workspaceRoot},N=(_,f)=>{return Tm4({ampURL:A.ampURL,configService:A.configService,threadID:_,signal:f})},w=new O11,O=U06({configService:A.configService}),L=await A.configService.getLatest();z4.instance.tuiInstance.setOptions({queryOptions:{animationDisabled:L.settings["terminal.animation"]===!1}});let j=new Set,k=new YA1;try{await _r(new m51({clientPool:I,listSkillsForThread:N,completionBuilder:A.completionBuilder,history:new mo,ideManager:w,configService:A.configService,updateService:A.updateService,initialThreadIDs:V?[]:$,notificationService:O,mcpTrustHandler:A.mcpTrustHandler,initialUserInput:V?void 0:B,getDefaultNewThreadVisibility:D,openThreadPickerOnStart:V?!1:J,workspaceSettingsFilePath:A.workspaceSettingsFilePath,neoContext:q,showNeoWelcome:H.show,neoWelcomeVariant:G,onActiveThreadChange:A.setActiveThreadID,onRelaunchRequested:k.request,onNeoWelcomeDismissed:H.markDismissedOnDismiss?()=>{zQ(Sm4).catch((f)=>{P.warn("Failed to mark Neo welcome as dismissed",{error:f})})}:void 0,onThreadArchived:(f)=>{j.add(f)},onFirstFrame:Z}));let _=I.lastActiveObservingClient;if(_&&k.shouldShowExitSummary){let{client:f,observer:h}=_,b=f.getThreadId();if(b){let v={id:b,title:h.title().getValue(),agentMode:h.agentMode,archived:j.has(b)},y=`${A.ampURL.replace(/\/$/,"")}/threads/${b}`;Z06(v,y,process.stdout)}}}finally{process.stdout.write(RN("")),O.unsubscribe(),I.dispose(),await A.dispose?.()}process.exit(k.relaunchIfRequested(A.workspaceRoot)??0)}Z5();function Zx(A){let Q=[],$={meta:{visibility:"private",sharedGroupIDs:[]}};if(A.workspace?.disablePrivateThreads)$.disabledReason="Disabled by workspace policy";if(Q.push($),A.workspace?.groups&&A.workspace.groups.length>0){let F={meta:{visibility:"private",shareWithAllCreatorGroups:!0}};if(A.creatorIsViewer===!1)F.disabledReason="Can only be set by thread creator";Q.push(F)}if(A.workspace)Q.push({meta:{visibility:"thread_workspace_shared"}});let B=A.workspace?.disablePublicSharing?"Disabled by workspace policy":void 0,D={meta:{visibility:"public_unlisted"}},J={meta:{visibility:"public_discoverable"}};if(B)D.disabledReason=B,J.disabledReason=B;return Q.push(D,J),Q}function G06(A){if(A.visibility==="thread_group_shared")return"sharedGroupIDs"in A&&A.sharedGroupIDs.length>0;if(A.visibility!=="private")return!0;if("shareWithAllCreatorGroups"in A&&A.shareWithAllCreatorGroups)return!0;return"sharedGroupIDs"in A&&A.sharedGroupIDs.length>0}function SR(A,Q={}){switch(A.visibility){case"thread_workspace_shared":return{text:"Workspace",description:"Visible to all members of the workspace"};case"public_discoverable":return{text:"Public",description:"Visible on public profile & publicly searchable"};case"public_unlisted":return{text:"Unlisted",description:"Visible to anyone on the Internet who has the link"};case"thread_group_shared":case"private":{let $=A.visibility==="private"&&"shareWithAllCreatorGroups"in A&&A.shareWithAllCreatorGroups,B=$?Q.workspace?.groups.map((J)=>J.id)??[]:("sharedGroupIDs"in A)?A.sharedGroupIDs:[],D=B.reduce((J,F)=>{let Y=Q.workspace?.groups.find((E)=>E.id===F)?.name;if(Y)J.push(`'${Y}'`);return J},[]);if(D.length>0)return{text:"Group",description:`Shared with ${U4(D.length,"group")} ${D.join(", ")} and workspace admins`};if($)return{text:"Group",description:"Shared with creator groups and workspace admins"};if(B.length>0)return{text:"Group",description:`Shared with ${U4(B.length,"group")} and workspace admins`};return{text:"Private",description:Q.workspace?"Only visible to you and workspace admins":"Only you can see this thread"}}}}function RG0(A){if(A.visibility==="private")return"shareWithAllCreatorGroups"in A?"group":"private";if(A.visibility==="thread_workspace_shared")return"workspace";if(A.visibility==="public_unlisted")return"unlisted";return"public"}function Ux(A,Q=null){let $=A!==null&&typeof A==="object"&&"visibility"in A?A.visibility:void 0;if(!$||typeof $!=="string")return;let D=Zx({workspace:Q?.team??void 0}).filter((J)=>!J.disabledReason).map((J)=>RG0(J.meta));if(D.includes($))return di3($);if($==="group"&&!D.includes("group")){if(Q?.team?.groups!==void 0)return Error(`Group visibility is not available. You are not a member of any group in this workspace.
@@ -7082,7 +7082,7 @@ ${D}`,Q);this.line=$,this.column=B,this.codeblock=D}}/*!
7082
7082
  `),J=[];for(let F=0;F<D.length;F++){let Z=D[F].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 U of Z)if(U.startsWith("\x00")&&U.endsWith("\x01"))J.push(new C(U.slice(1,-1),new T({color:B.app.keybind,bold:!0})));else J.push(new C(U,new T({color:$.colorScheme.foreground})));if(F<D.length-1)J.push(new C(`
7083
7083
  `))}return new b0({decoration:{color:$.colorScheme.background,border:m1.all(new d1(B.app.keybind,1,"rounded"))},child:new f0({padding:V0.symmetric(0,1),child:new d({text:new C(void 0,void 0,J)})})})}}class s21 extends R5{chartData;highlightIndex;showAxes;colors;constructor({key:A,chartData:Q,highlightIndex:$=null,showAxes:B=!0,colors:D=pV0}){super(A?{key:A}:{});this.chartData=Q,this.highlightIndex=$,this.showAxes=B,this.colors=D}createRenderObject(){return new o21({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 i66(A,Q,$,B,D,J,F){if(J<=0)return null;switch(A){case"horizontal-bar":{let Y=$;return Y>=0&&Y<J?Y:null}case"bar":case"stacked-bar":{let Y=F?a2:0,E=B-Y;if(E<=0)return null;let Z=Q-Y;if(Z<0||Z>=E)return null;let U=Math.max(1,Math.floor(E/J)),X=Math.floor(Z/U);return X>=0&&X<J?X:null}case"line":case"sparkline":case"stacked-area":{let Y=F?a2:0,E=B-Y;if(E<=0)return null;let Z=Math.max(0,Math.min(E-1,Q-Y));if(J===1)return 0;let U=E/(J-1),X=Math.round(Z/U);return Math.max(0,Math.min(J-1,X))}default:return null}}function Ve3(A,Q,$,B,D,J,F,Y){if(D<=0||Q<0||Q>=D)return null;let E=2;switch(A){case"horizontal-bar":return{x:Math.floor($/2),y:Q};case"bar":case"stacked-bar":{let Z=J?a2:0,U=$-Z,X=B-(J?E:0);if(U<=0||X<=0)return null;let G=Math.max(1,Math.floor(U/D)),V=Z+Q*G+Math.floor(G/2),K=Y>0?F/Y:0,z=Math.round((1-K)*(X-1));return{x:V,y:z}}case"line":case"sparkline":case"stacked-area":{let Z=J?a2:0,U=$-Z,X=B-(J?E:0);if(U<=0||X<=0)return null;let G=D>1?Z+Math.round(Q/(D-1)*(U-1)):Z+Math.floor(U/2),V=Y>0?F/Y:0,K=Math.round((1-V)*(X-1));return{x:G,y:K}}default:return null}}function Ke3(A){let Q=0;for(let $ of A)for(let B of $.points)if(B.value>Q)Q=B.value;return Q||1}function ze3(A,Q,$,B,D){if($.length<=1){let Y=B(A.value),E=A.meta?` (${A.meta})`:"";return A.label.length+2+Y.length+E.length}let J=A.label.length,F=0;for(let Y of $){let E=Y.points[Q];if(!E)continue;F+=E.value;let Z=2+Y.name.length+2+B(E.value).length;J=Math.max(J,Z)}if(D){let Y=9+B(F).length;J=Math.max(J,Y)}return J}function Ie3(A,Q,$,B,D,J,F){let Y;try{let K=L1.of(A),z=O0.of(A);Y={foreground:K.colorScheme.foreground,background:K.colorScheme.background,border:z.app.keybind}}catch{Y={foreground:{type:"index",value:15},background:{type:"index",value:0},border:{type:"index",value:7}}}let E=new T({color:Y.foreground,bold:!0}),Z=new T({color:Y.foreground}),U=new T({color:Y.foreground,dim:!0}),X=[],G=new T({color:Y.foreground,underline:!0}),V=(K,z)=>new C(z,G,void 0,lz(K),()=>{n6(A,K)});if(B.length<=1){if(X.push(new C(`${Q.label}: `,E)),Q.link)X.push(V(Q.link,J(Q.value)));else X.push(new C(J(Q.value),Z));if(Q.meta)X.push(new C(` (${Q.meta})`,U))}else{let K=F==="stacked-bar"||F==="stacked-area";X.push(new C(`${Q.label}
7084
7084
  `,E));let z=0;for(let I=0;I<B.length;I++){let W=B[I],H=W.points[$];if(!H)continue;z+=H.value;let q=W.color??D[I%D.length]??Y.foreground;if(X.push(new C("● ",new T({color:q}))),X.push(new C(`${W.name}: `,U)),H.link)X.push(V(H.link,J(H.value)));else X.push(new C(J(H.value),Z));if(I<B.length-1||K)X.push(new C(`
7085
- `))}if(K)X.push(new C(" ",U)),X.push(new C("Total: ",U)),X.push(new C(J(z),Z))}return new b0({decoration:{color:Y.background,border:m1.all(new d1(Y.border,1,"rounded"))},child:new d({text:new C(void 0,void 0,X)})})}p0();function n66(A){return A.length===0?A:A[0].toLowerCase()+A.slice(1)}Z5();a5();y5();h$();u9();$8();xQ();Bq();a4();Uk();x_();P1();p0();u9();class t21{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,$])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1779345702-g49e69d"},parameters:{metadata:{count:$}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(A);await V20(Q,this.configService)}catch(Q){P.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 Ow extends P0{props;constructor(A){super();this.props=A}createState(){return new a66}}class a66 extends R0{_state;initState(){super.initState(),this._state=this.widget.props.initialState}build(A){let Q=($)=>{this.setState(()=>{this._state=$(this._state)})};return this.widget.props.builder(A,Q,this._state)}}class o66 extends R0{controller=new T2;focusNode=new r6({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=O0.of(A),{colors:$,app:B}=Q,D=this.widget.props.isRequiredArg??!0,J=this.controller.text.trim().length>0,F=!D||J,Y=m1.all(new d1($.foreground,1,"solid")),E=new UB({controller:this.controller,focusNode:this.focusNode,placeholder:this.widget.props.placeholder??"Enter command argument...",onSubmitted:(V)=>{let K=V.trim();if(D&&K.length===0)return;this.widget.props.onSubmit(K)},autofocus:!0,style:{textColor:$.foreground,border:null},maxLines:1}),Z=new r0({children:[new b0({decoration:{color:$.background},child:new d({text:new C(">",new T({color:$.foreground}))})}),new R1({child:E})]}),U=new b0({padding:V0.symmetric(1,0),child:new d({text:this.widget.props.title?new C(this.widget.props.title,new T({color:B.command,bold:!0})):new C("",void 0,[new C("Command: ",new T({color:$.foreground})),new C(this.widget.props.commandName,new T({color:B.command,bold:!0}))])})}),X=[];if(F)X.push(new C("Enter",new T({color:B.keybind}))),X.push(new C(" to submit, ",new T({color:$.foreground,dim:!0})));X.push(new C("Esc",new T({color:B.keybind}))),X.push(new C(" to cancel",new T({color:$.foreground,dim:!0})));let G=new b0({padding:V0.symmetric(1,0),child:new d({text:new C("",void 0,X)})});return new b0({decoration:{border:Y,color:$.background},padding:V0.all(1),child:new S0({children:[U,new X0({height:1}),Z,new X3,G]})})}}class ft extends P0{props;constructor(A){super();this.props=A}createState(){return new o66}}xQ();class r66 extends R0{controller=new T2;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new r6({debugLabel:"CommandMultilinePrompt",onKey:(A)=>{if(A.key==="Escape"){if(this.isConfirmingClearInput){if(this.controller.clear(),this.setState(()=>{this.isConfirmingClearInput=!1,this.imageAttachments=[],this.imagePaths=[]}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;return"handled"}if(this.controller.text.trim()!==""||this.imageAttachments.length>0){if(this.setState(()=>{this.isConfirmingClearInput=!0}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout);return this.clearInputConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingClearInput=!1}),this.clearInputConfirmTimeout=null},1000),"handled"}return this.widget.props.onDismiss(),"handled"}return"ignored"}});initState(){if(this.widget.props.initialText)this.controller.text=this.widget.props.initialText;if(this.widget.props.initialImages)this.imageAttachments=[...this.widget.props.initialImages];this.focusNode.requestFocus()}_handleInsertImage=async(A)=>{if(this.imageAttachments.length>=T9)return!1;let Q=await rG(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=O0.of(A),{colors:$,app:B}=Q,J=c1.of(A).size.height,F=Math.max(Math.floor(J*0.5),10),Y=new ZI({controller:this.controller,triggers:[new YE],completionBuilder:this.widget.props.completionBuilder,onSubmitted:(V)=>{this.widget.props.onSubmit(V.trim(),this.imageAttachments)},theme:$,placeholder:this.widget.props.placeholder||"Enter your message...",enabled:this.widget.props.enabled??!0,autofocus:!0,clipboard:z4.instance.tuiInstance.clipboard,autoOverlayPosition:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),E=new v4({debugLabel:"CommandMultilinePrompt",focusNode:this.focusNode,child:Y}),Z=new b0({constraints:new C1({maxHeight:F}),padding:V0.symmetric(1,0),child:E}),U=new b0({padding:V0.symmetric(1,0),child:new d({text:new C("",void 0,[new C("Command: ",new T({color:$.foreground})),new C(this.widget.props.commandName,new T({color:B.command,bold:!0}))])})}),X=new b0({padding:V0.symmetric(1,0),child:new d({text:this.isConfirmingClearInput?new C("",void 0,[new C("Esc",new T({color:B.keybind})),new C(" again to clear input",new T({color:$.foreground,dim:!0}))]):new C("",void 0,[new C("Press ",new T({color:$.foreground,dim:!0})),new C("Enter",new T({color:B.keybind})),new C(" to submit, ",new T({color:$.foreground,dim:!0})),new C("Esc",new T({color:B.keybind})),new C(" to clear",new T({color:$.foreground,dim:!0}))])})}),G=[U,new X0({height:1}),new R1({child:Z}),new X0({height:1}),X];return new b0({decoration:{border:m1.all(new d1($.foreground,1,"solid")),color:$.background},padding:V0.all(1),child:new S0({children:G})})}}class e21 extends P0{props;constructor(A){super();this.props=A}createState(){return new r66}}function s66(A){let $=new Date().getTime()-A.getTime(),B=Math.floor($/60000),D=Math.floor($/3600000),J=Math.floor($/86400000);if(B<1)return"just now";if(B<60)return`${B}m ago`;if(D<24)return`${D}h ago`;if(J<7)return`${J}d ago`;return A.toLocaleDateString()}class A81 extends H1{props;debugLabel="NewsFeedPicker";constructor(A){super();this.props=A}build(A){let Q=[...this.props.entries].sort((D,J)=>J.pubDate.getTime()-D.pubDate.getTime()),$=Math.max(0,...Q.map((D)=>s66(D.pubDate).length));return new lA({items:Q,getLabel:(D)=>D.title,onAccept:(D)=>this.props.onSelect?.(D),onDismiss:this.props.onDismiss,title:this.props.title,emptyStateText:"No news entries available",maxRenderItems:100,renderItem:(D,J,F,Y)=>{let E=O0.of(Y),{colors:Z}=E,U=E.app,X=J?U.selectionBackground:void 0,G=J?U.selectionForeground:Z.foreground,V=Z.mutedForeground,K=(z,I)=>new X0({width:I,child:r0.end([new d({text:new C(z,new T({color:V}))})])});return new b0({decoration:X?{color:X}:void 0,padding:V0.symmetric(2,0),child:new r0({children:[new R1({child:new d({text:new C(D.title,new T({color:G})),overflow:"ellipsis",maxLines:1})}),new X0({width:2}),K(s66(D.pubDate),$)]})})}})}}class W${static _instance=null;_allExpanded=!1;_listeners=new Set;static get instance(){if(!W$._instance)W$._instance=new W$;return W$._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()}}p0();class t66 extends R0{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){P.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){P.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 $=this.widget.props.currentLabels||[],B=this.labels.some((J)=>J.name===Q),D=$.includes(Q);return!B&&!D}build(A){let Q=O0.of(A),{app:$,colors:B}=Q,D=this.currentQuery.trim().toLowerCase(),J=D.length>0?this.getValidationError(D):null,F=this.getAvailableLabels(),E=[{id:"__create__",name:"__create_placeholder__",createdAt:"",__isCreateMarker:!0},...F];return new lA({title:"Add Label",items:E,getLabel:(Z)=>{if("__isCreateMarker"in Z)return this.currentQuery.trim().toLowerCase();return Z.name},onAccept:(Z)=>{if("__isCreateMarker"in Z)this.widget.props.onSelect(this.currentQuery.trim().toLowerCase());else this.widget.props.onSelect(Z.name)},onDismiss:this.widget.props.onDismiss,isLoading:this.isLoading,loadingText:"Loading labels...",emptyStateText:J||"Type to create a new label",renderItem:(Z,U,X,G)=>{let V=U?$.selectionBackground:void 0,K=U?$.selectionForeground:B.foreground;if("__isCreateMarker"in Z&&Z.__isCreateMarker){let I=this.currentQuery.trim().toLowerCase();return new b0({decoration:V?{color:V}:void 0,padding:V0.symmetric(2,0),child:new d({text:new C("",void 0,[new C("Create new label: ",new T({color:K})),new C(I,new T({color:K,bold:!0}))])})})}return new b0({decoration:V?{color:V}:void 0,padding:V0.symmetric(2,0),child:new d({text:new C(Z.name,new T({color:K}))})})},filterItem:(Z,U)=>{if(this.currentQuery!==U)this.currentQuery=U,setTimeout(()=>this.setState(),0);if("__isCreateMarker"in Z&&Z.__isCreateMarker)return this.shouldShowCreateMarker(U);let G=U.trim().toLowerCase();return G.length===0||Z.name.includes(G)},sortItems:(Z,U,X)=>{let G="__isCreateMarker"in Z.item&&Z.item.__isCreateMarker,V="__isCreateMarker"in U.item&&U.item.__isCreateMarker;if(G&&!V)return-1;if(!G&&V)return 1;return U.score-Z.score}})}}class Q81 extends P0{props;constructor(A){super();this.props=A}createState(){return new t66}}class DU extends P0{props;constructor(A){super();this.props=A}createState(){return new e66}}class e66 extends R0{_spinner=new NA;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=O0.of(A),{colors:$,app:B}=Q,D=m1.all(new d1($.foreground,1,"solid")),J=this._spinner.toBraille(),F=new d({textAlign:"center",text:new C("",void 0,[new C(J,new T({color:B.processing})),new C(" ",void 0),new C(this.widget.props.message,new T({color:$.foreground}))])}),E=[new R1({child:new S0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[F]})})];if(this.widget.props.onAbort)E.push(new X0({height:2,child:new b0({padding:V0.symmetric(2,0),child:new d({text:new C("",new T({dim:!0}),[new C("Press ",new T({color:$.foreground})),new C("Esc",new T({color:$.info})),new C(" to cancel",new T({color:$.foreground}))])})})}));let Z=new b0({decoration:new R4($.background,D),child:new X0({width:60,height:7,child:new S0({mainAxisAlignment:"start",children:E})})});if(this.widget.props.onAbort)return new k4({debugLabel:"LoadingDialog",child:new v4({debugLabel:"LoadingDialog",autofocus:!0,onKey:(U)=>{if(U.key==="Escape")return this.widget.props.onAbort?.(),"handled";return"ignored"},child:Z})});return Z}}class $V extends P0{props;constructor(A){super();this.props=A}createState(){return new AA6}}class AA6 extends R0{scrollController=new v6;scrollAreaKey=new G8("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 l8}resolveFooterStyle(A){if(this.isWidgetMessage(A))return A.footerStyle;return"default"}getViewportHeight(){let Q=this.scrollAreaKey.currentElement?.renderObject;if(Q&&"size"in Q){let $=Q.size;if(typeof $.height==="number"&&$.height>0)return this.viewportHeight=$.height,$.height}return this.viewportHeight}build(A){let Q=O0.of(A),$=this.widget.props.message,B=(()=>{if(this.isWidgetMessage($))return{title:$.title,type:$.type};if($ instanceof Error&&$.name==="CommandCancelledError")return{title:"Cancelled",type:"info",description:$.message};if($ instanceof Error&&$.name==="CommandTimeoutError")return{title:"Timeout",type:"error",description:$.message};let U=HU0($);return{title:U.title,type:U.type,description:U.description}})(),D=B.type==="error"?Q.app.toolError:Q.app.command,J=m1.all(new d1(Q.colors.border,1,"solid")),F=new b0({padding:V0.symmetric(1,0),child:new d({text:new C(B.title,new T({color:D,bold:!0}))})}),Y=this.isWidgetMessage($)?$.widget:new d({text:new C(B.description,new T({color:Q.colors.foreground})),selectable:!0}),E=new R1({child:new X5({child:new b0({padding:V0.symmetric(1,0),child:new r0({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new R1({child:new k6({controller:this.scrollController,autofocus:!0,child:Y})}),new q8({controller:this.scrollController,thumbColor:Q.app.scrollbarThumb,trackColor:Q.app.scrollbarTrack,getScrollInfo:()=>{let U=this.scrollController.maxScrollExtent,X=this.scrollController.offset,G=this.getViewportHeight(),V=U+G;return{totalContentHeight:Math.max(V,0),viewportHeight:Math.max(G,1),scrollOffset:Math.max(X,0)}}})]})})})}),Z=new b0({padding:V0.symmetric(1,0),child:new d({text:(()=>{if(this.widget.props.onRetry)return new C("",void 0,[new C("Press ",new T({color:Q.colors.foreground,dim:!0})),new C("R",new T({color:Q.app.keybind})),new C(" to retry, ",new T({color:Q.colors.foreground,dim:!0})),new C("Esc",new T({color:Q.app.keybind})),new C(" to cancel",new T({color:Q.colors.foreground,dim:!0}))]);let U=this.resolveFooterStyle(this.widget.props.message);if(U==="none")return new C("",new T({color:Q.colors.foreground,dim:!0}));if(U==="help"){let X=new T({color:Q.app.keybind}),G=new T({color:Q.colors.foreground,dim:!0});return new C("",G,[new C("Press ",G),new C("Escape",X),new C(" to close • Use ",G),new C("↑↓",X),new C(" or ",G),new C("j/k",X),new C(" to scroll",G)])}return new C("Press any key to close",new T({color:Q.colors.foreground,dim:!0,italic:!0}))})()})});return new k4({debugLabel:"MessageDialog",child:new i4({fit:"expand",children:[new O1({onClick:()=>{},child:new X0}),new v4({onKey:(U)=>{if(this.widget.props.onRetry&&U.key==="r")return this.widget.props.onRetry(),"handled";if(U.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 b0({decoration:{border:J,color:Q.colors.background},padding:V0.all(1),child:new S0({mainAxisAlignment:"center",children:[F,new X0({height:1}),E,Z]})})})]})})}}Z5();Q4();class QA6 extends P0{props;constructor(A){super();this.props=A}createState(){return new $A6}}class $A6 extends R0{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=i0.file(this.widget.props.cwd),$=B1.relativePath(Q,GA(A));if($!==null&&$!==""&&$!==".."&&!$.startsWith("../"))return $;return l3(A)}statusIcon(A){let Q=l2.default(),{colors:$,app:B}=Q;switch(A){case"loading":return{icon:"◌",color:$.warning};case"active":return{icon:"✓",color:B.toolSuccess};case"error":return{icon:"✗",color:B.toolError}}}build(A){let Q=O0.of(A),{app:$}=Q;if(this.plugins.length===0)return new d({text:new C("No plugins found.",new T({dim:!0}))});let B=[],D=this.plugins.length,J=this.plugins.filter((E)=>E.status==="active").length,F=this.plugins.reduce((E,Z)=>E+Z.registeredCommands.length,0),Y=this.plugins.reduce((E,Z)=>E+Z.registeredTools.length,0);if(B.push(new C(`${J}/${D} ${U4(D,"plugin")} active`,new T({bold:!0}))),F>0||Y>0)B.push(new C(` (${F} ${U4(F,"command")}, ${Y} ${U4(Y,"tool")})`,new T({dim:!0})));B.push(new C(`
7085
+ `))}if(K)X.push(new C(" ",U)),X.push(new C("Total: ",U)),X.push(new C(J(z),Z))}return new b0({decoration:{color:Y.background,border:m1.all(new d1(Y.border,1,"rounded"))},child:new d({text:new C(void 0,void 0,X)})})}p0();function n66(A){return A.length===0?A:A[0].toLowerCase()+A.slice(1)}Z5();a5();y5();h$();u9();$8();xQ();Bq();a4();Uk();x_();P1();p0();u9();class t21{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,$])=>({feature:"cli.command",action:Q,source:{client:"cli",clientVersion:"0.0.1779354043-g150a4f"},parameters:{metadata:{count:$}},timestamp:Date.now()*1000}));this.commandCounts.clear();try{let Q=JSON.stringify(A);await V20(Q,this.configService)}catch(Q){P.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 Ow extends P0{props;constructor(A){super();this.props=A}createState(){return new a66}}class a66 extends R0{_state;initState(){super.initState(),this._state=this.widget.props.initialState}build(A){let Q=($)=>{this.setState(()=>{this._state=$(this._state)})};return this.widget.props.builder(A,Q,this._state)}}class o66 extends R0{controller=new T2;focusNode=new r6({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=O0.of(A),{colors:$,app:B}=Q,D=this.widget.props.isRequiredArg??!0,J=this.controller.text.trim().length>0,F=!D||J,Y=m1.all(new d1($.foreground,1,"solid")),E=new UB({controller:this.controller,focusNode:this.focusNode,placeholder:this.widget.props.placeholder??"Enter command argument...",onSubmitted:(V)=>{let K=V.trim();if(D&&K.length===0)return;this.widget.props.onSubmit(K)},autofocus:!0,style:{textColor:$.foreground,border:null},maxLines:1}),Z=new r0({children:[new b0({decoration:{color:$.background},child:new d({text:new C(">",new T({color:$.foreground}))})}),new R1({child:E})]}),U=new b0({padding:V0.symmetric(1,0),child:new d({text:this.widget.props.title?new C(this.widget.props.title,new T({color:B.command,bold:!0})):new C("",void 0,[new C("Command: ",new T({color:$.foreground})),new C(this.widget.props.commandName,new T({color:B.command,bold:!0}))])})}),X=[];if(F)X.push(new C("Enter",new T({color:B.keybind}))),X.push(new C(" to submit, ",new T({color:$.foreground,dim:!0})));X.push(new C("Esc",new T({color:B.keybind}))),X.push(new C(" to cancel",new T({color:$.foreground,dim:!0})));let G=new b0({padding:V0.symmetric(1,0),child:new d({text:new C("",void 0,X)})});return new b0({decoration:{border:Y,color:$.background},padding:V0.all(1),child:new S0({children:[U,new X0({height:1}),Z,new X3,G]})})}}class ft extends P0{props;constructor(A){super();this.props=A}createState(){return new o66}}xQ();class r66 extends R0{controller=new T2;imageAttachments=[];imagePaths=[];isConfirmingClearInput=!1;clearInputConfirmTimeout=null;focusNode=new r6({debugLabel:"CommandMultilinePrompt",onKey:(A)=>{if(A.key==="Escape"){if(this.isConfirmingClearInput){if(this.controller.clear(),this.setState(()=>{this.isConfirmingClearInput=!1,this.imageAttachments=[],this.imagePaths=[]}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout),this.clearInputConfirmTimeout=null;return"handled"}if(this.controller.text.trim()!==""||this.imageAttachments.length>0){if(this.setState(()=>{this.isConfirmingClearInput=!0}),this.clearInputConfirmTimeout)clearTimeout(this.clearInputConfirmTimeout);return this.clearInputConfirmTimeout=setTimeout(()=>{this.setState(()=>{this.isConfirmingClearInput=!1}),this.clearInputConfirmTimeout=null},1000),"handled"}return this.widget.props.onDismiss(),"handled"}return"ignored"}});initState(){if(this.widget.props.initialText)this.controller.text=this.widget.props.initialText;if(this.widget.props.initialImages)this.imageAttachments=[...this.widget.props.initialImages];this.focusNode.requestFocus()}_handleInsertImage=async(A)=>{if(this.imageAttachments.length>=T9)return!1;let Q=await rG(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=O0.of(A),{colors:$,app:B}=Q,J=c1.of(A).size.height,F=Math.max(Math.floor(J*0.5),10),Y=new ZI({controller:this.controller,triggers:[new YE],completionBuilder:this.widget.props.completionBuilder,onSubmitted:(V)=>{this.widget.props.onSubmit(V.trim(),this.imageAttachments)},theme:$,placeholder:this.widget.props.placeholder||"Enter your message...",enabled:this.widget.props.enabled??!0,autofocus:!0,clipboard:z4.instance.tuiInstance.clipboard,autoOverlayPosition:!0,onInsertImage:this.widget.props.onInsertImage??this._handleInsertImage,imageAttachments:this.imageAttachments,popImage:this._handlePopImage}),E=new v4({debugLabel:"CommandMultilinePrompt",focusNode:this.focusNode,child:Y}),Z=new b0({constraints:new C1({maxHeight:F}),padding:V0.symmetric(1,0),child:E}),U=new b0({padding:V0.symmetric(1,0),child:new d({text:new C("",void 0,[new C("Command: ",new T({color:$.foreground})),new C(this.widget.props.commandName,new T({color:B.command,bold:!0}))])})}),X=new b0({padding:V0.symmetric(1,0),child:new d({text:this.isConfirmingClearInput?new C("",void 0,[new C("Esc",new T({color:B.keybind})),new C(" again to clear input",new T({color:$.foreground,dim:!0}))]):new C("",void 0,[new C("Press ",new T({color:$.foreground,dim:!0})),new C("Enter",new T({color:B.keybind})),new C(" to submit, ",new T({color:$.foreground,dim:!0})),new C("Esc",new T({color:B.keybind})),new C(" to clear",new T({color:$.foreground,dim:!0}))])})}),G=[U,new X0({height:1}),new R1({child:Z}),new X0({height:1}),X];return new b0({decoration:{border:m1.all(new d1($.foreground,1,"solid")),color:$.background},padding:V0.all(1),child:new S0({children:G})})}}class e21 extends P0{props;constructor(A){super();this.props=A}createState(){return new r66}}function s66(A){let $=new Date().getTime()-A.getTime(),B=Math.floor($/60000),D=Math.floor($/3600000),J=Math.floor($/86400000);if(B<1)return"just now";if(B<60)return`${B}m ago`;if(D<24)return`${D}h ago`;if(J<7)return`${J}d ago`;return A.toLocaleDateString()}class A81 extends H1{props;debugLabel="NewsFeedPicker";constructor(A){super();this.props=A}build(A){let Q=[...this.props.entries].sort((D,J)=>J.pubDate.getTime()-D.pubDate.getTime()),$=Math.max(0,...Q.map((D)=>s66(D.pubDate).length));return new lA({items:Q,getLabel:(D)=>D.title,onAccept:(D)=>this.props.onSelect?.(D),onDismiss:this.props.onDismiss,title:this.props.title,emptyStateText:"No news entries available",maxRenderItems:100,renderItem:(D,J,F,Y)=>{let E=O0.of(Y),{colors:Z}=E,U=E.app,X=J?U.selectionBackground:void 0,G=J?U.selectionForeground:Z.foreground,V=Z.mutedForeground,K=(z,I)=>new X0({width:I,child:r0.end([new d({text:new C(z,new T({color:V}))})])});return new b0({decoration:X?{color:X}:void 0,padding:V0.symmetric(2,0),child:new r0({children:[new R1({child:new d({text:new C(D.title,new T({color:G})),overflow:"ellipsis",maxLines:1})}),new X0({width:2}),K(s66(D.pubDate),$)]})})}})}}class W${static _instance=null;_allExpanded=!1;_listeners=new Set;static get instance(){if(!W$._instance)W$._instance=new W$;return W$._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()}}p0();class t66 extends R0{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){P.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){P.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 $=this.widget.props.currentLabels||[],B=this.labels.some((J)=>J.name===Q),D=$.includes(Q);return!B&&!D}build(A){let Q=O0.of(A),{app:$,colors:B}=Q,D=this.currentQuery.trim().toLowerCase(),J=D.length>0?this.getValidationError(D):null,F=this.getAvailableLabels(),E=[{id:"__create__",name:"__create_placeholder__",createdAt:"",__isCreateMarker:!0},...F];return new lA({title:"Add Label",items:E,getLabel:(Z)=>{if("__isCreateMarker"in Z)return this.currentQuery.trim().toLowerCase();return Z.name},onAccept:(Z)=>{if("__isCreateMarker"in Z)this.widget.props.onSelect(this.currentQuery.trim().toLowerCase());else this.widget.props.onSelect(Z.name)},onDismiss:this.widget.props.onDismiss,isLoading:this.isLoading,loadingText:"Loading labels...",emptyStateText:J||"Type to create a new label",renderItem:(Z,U,X,G)=>{let V=U?$.selectionBackground:void 0,K=U?$.selectionForeground:B.foreground;if("__isCreateMarker"in Z&&Z.__isCreateMarker){let I=this.currentQuery.trim().toLowerCase();return new b0({decoration:V?{color:V}:void 0,padding:V0.symmetric(2,0),child:new d({text:new C("",void 0,[new C("Create new label: ",new T({color:K})),new C(I,new T({color:K,bold:!0}))])})})}return new b0({decoration:V?{color:V}:void 0,padding:V0.symmetric(2,0),child:new d({text:new C(Z.name,new T({color:K}))})})},filterItem:(Z,U)=>{if(this.currentQuery!==U)this.currentQuery=U,setTimeout(()=>this.setState(),0);if("__isCreateMarker"in Z&&Z.__isCreateMarker)return this.shouldShowCreateMarker(U);let G=U.trim().toLowerCase();return G.length===0||Z.name.includes(G)},sortItems:(Z,U,X)=>{let G="__isCreateMarker"in Z.item&&Z.item.__isCreateMarker,V="__isCreateMarker"in U.item&&U.item.__isCreateMarker;if(G&&!V)return-1;if(!G&&V)return 1;return U.score-Z.score}})}}class Q81 extends P0{props;constructor(A){super();this.props=A}createState(){return new t66}}class DU extends P0{props;constructor(A){super();this.props=A}createState(){return new e66}}class e66 extends R0{_spinner=new NA;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=O0.of(A),{colors:$,app:B}=Q,D=m1.all(new d1($.foreground,1,"solid")),J=this._spinner.toBraille(),F=new d({textAlign:"center",text:new C("",void 0,[new C(J,new T({color:B.processing})),new C(" ",void 0),new C(this.widget.props.message,new T({color:$.foreground}))])}),E=[new R1({child:new S0({mainAxisAlignment:"center",crossAxisAlignment:"center",children:[F]})})];if(this.widget.props.onAbort)E.push(new X0({height:2,child:new b0({padding:V0.symmetric(2,0),child:new d({text:new C("",new T({dim:!0}),[new C("Press ",new T({color:$.foreground})),new C("Esc",new T({color:$.info})),new C(" to cancel",new T({color:$.foreground}))])})})}));let Z=new b0({decoration:new R4($.background,D),child:new X0({width:60,height:7,child:new S0({mainAxisAlignment:"start",children:E})})});if(this.widget.props.onAbort)return new k4({debugLabel:"LoadingDialog",child:new v4({debugLabel:"LoadingDialog",autofocus:!0,onKey:(U)=>{if(U.key==="Escape")return this.widget.props.onAbort?.(),"handled";return"ignored"},child:Z})});return Z}}class $V extends P0{props;constructor(A){super();this.props=A}createState(){return new AA6}}class AA6 extends R0{scrollController=new v6;scrollAreaKey=new G8("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 l8}resolveFooterStyle(A){if(this.isWidgetMessage(A))return A.footerStyle;return"default"}getViewportHeight(){let Q=this.scrollAreaKey.currentElement?.renderObject;if(Q&&"size"in Q){let $=Q.size;if(typeof $.height==="number"&&$.height>0)return this.viewportHeight=$.height,$.height}return this.viewportHeight}build(A){let Q=O0.of(A),$=this.widget.props.message,B=(()=>{if(this.isWidgetMessage($))return{title:$.title,type:$.type};if($ instanceof Error&&$.name==="CommandCancelledError")return{title:"Cancelled",type:"info",description:$.message};if($ instanceof Error&&$.name==="CommandTimeoutError")return{title:"Timeout",type:"error",description:$.message};let U=HU0($);return{title:U.title,type:U.type,description:U.description}})(),D=B.type==="error"?Q.app.toolError:Q.app.command,J=m1.all(new d1(Q.colors.border,1,"solid")),F=new b0({padding:V0.symmetric(1,0),child:new d({text:new C(B.title,new T({color:D,bold:!0}))})}),Y=this.isWidgetMessage($)?$.widget:new d({text:new C(B.description,new T({color:Q.colors.foreground})),selectable:!0}),E=new R1({child:new X5({child:new b0({padding:V0.symmetric(1,0),child:new r0({key:this.scrollAreaKey,crossAxisAlignment:"stretch",children:[new R1({child:new k6({controller:this.scrollController,autofocus:!0,child:Y})}),new q8({controller:this.scrollController,thumbColor:Q.app.scrollbarThumb,trackColor:Q.app.scrollbarTrack,getScrollInfo:()=>{let U=this.scrollController.maxScrollExtent,X=this.scrollController.offset,G=this.getViewportHeight(),V=U+G;return{totalContentHeight:Math.max(V,0),viewportHeight:Math.max(G,1),scrollOffset:Math.max(X,0)}}})]})})})}),Z=new b0({padding:V0.symmetric(1,0),child:new d({text:(()=>{if(this.widget.props.onRetry)return new C("",void 0,[new C("Press ",new T({color:Q.colors.foreground,dim:!0})),new C("R",new T({color:Q.app.keybind})),new C(" to retry, ",new T({color:Q.colors.foreground,dim:!0})),new C("Esc",new T({color:Q.app.keybind})),new C(" to cancel",new T({color:Q.colors.foreground,dim:!0}))]);let U=this.resolveFooterStyle(this.widget.props.message);if(U==="none")return new C("",new T({color:Q.colors.foreground,dim:!0}));if(U==="help"){let X=new T({color:Q.app.keybind}),G=new T({color:Q.colors.foreground,dim:!0});return new C("",G,[new C("Press ",G),new C("Escape",X),new C(" to close • Use ",G),new C("↑↓",X),new C(" or ",G),new C("j/k",X),new C(" to scroll",G)])}return new C("Press any key to close",new T({color:Q.colors.foreground,dim:!0,italic:!0}))})()})});return new k4({debugLabel:"MessageDialog",child:new i4({fit:"expand",children:[new O1({onClick:()=>{},child:new X0}),new v4({onKey:(U)=>{if(this.widget.props.onRetry&&U.key==="r")return this.widget.props.onRetry(),"handled";if(U.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 b0({decoration:{border:J,color:Q.colors.background},padding:V0.all(1),child:new S0({mainAxisAlignment:"center",children:[F,new X0({height:1}),E,Z]})})})]})})}}Z5();Q4();class QA6 extends P0{props;constructor(A){super();this.props=A}createState(){return new $A6}}class $A6 extends R0{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=i0.file(this.widget.props.cwd),$=B1.relativePath(Q,GA(A));if($!==null&&$!==""&&$!==".."&&!$.startsWith("../"))return $;return l3(A)}statusIcon(A){let Q=l2.default(),{colors:$,app:B}=Q;switch(A){case"loading":return{icon:"◌",color:$.warning};case"active":return{icon:"✓",color:B.toolSuccess};case"error":return{icon:"✗",color:B.toolError}}}build(A){let Q=O0.of(A),{app:$}=Q;if(this.plugins.length===0)return new d({text:new C("No plugins found.",new T({dim:!0}))});let B=[],D=this.plugins.length,J=this.plugins.filter((E)=>E.status==="active").length,F=this.plugins.reduce((E,Z)=>E+Z.registeredCommands.length,0),Y=this.plugins.reduce((E,Z)=>E+Z.registeredTools.length,0);if(B.push(new C(`${J}/${D} ${U4(D,"plugin")} active`,new T({bold:!0}))),F>0||Y>0)B.push(new C(` (${F} ${U4(F,"command")}, ${Y} ${U4(Y,"tool")})`,new T({dim:!0})));B.push(new C(`
7086
7086
 
7087
7087
  `));for(let E of this.plugins){let{icon:Z,color:U}=this.statusIcon(E.status),X=this.getRelativePath(E.uri);if(B.push(new C(`${Z} `,new T({color:U}))),B.push(new C(X,new T({bold:!0}))),B.push(new C(` ${E.status}`,new T({dim:!0}))),B.push(new C(`
7088
7088
  `)),E.status==="active"&&E.registeredEvents.length>0)B.push(new C(" Events: ",new T({dim:!0}))),B.push(new C(E.registeredEvents.join(", "),new T({color:$.link}))),B.push(new C(`
@@ -7260,7 +7260,7 @@ ${t.content||""}`:t.content||"",d0=[],x0=t.baseDir.startsWith("file://")?WK0(t.b
7260
7260
  `)}function x56(A,Q){A.command("usage").description("Show your current Amp usage and credit balance").action(async($,B)=>{let D=B.optsWithGlobals(),J=await Q(D),F=await J.settings.get("proxy"),Y=W44({settings:{url:J.ampURL,proxy:F},secrets:{getToken:(Z,U)=>J.secrets.get(Z,U)}}),E=await e4.userDisplayBalanceInfo({},{config:Y});if(!E.ok){if(E.error.code==="auth-required")process.stderr.write(t0.red("Error: ")+"You must be logged in to view usage. Run `amp login` first.\n"),process.exit(1);process.stderr.write(t0.red("Error: ")+E.error.message+`
7261
7261
  `),process.exit(1)}process.stdout.write(await y45(E.result.displayText)+`
7262
7262
  `),process.exit(0)})}var D25=qe.join(lB,"logs","headless.log"),DQ1=qe.join(id,"device-id.json"),J25=`cli-tui-${X76(16).toString("hex")}`;async function F25(){let A=await Promise.all(BL.map(async(Q)=>{try{return{query:Q,hasConfigs:(await Q.listConfigs()).length>0}}catch($){return P.debug("Failed to detect query-based IDE integration",{ideName:Q.ideName,error:$}),{query:Q,hasConfigs:!1}}}));for(let Q of A)if(Q.hasConfigs)return Q.query;return}function V76(){F25().then((A)=>{if(A){let Q=S20(A.ideName);if(Q)rM(Q)}})}try{if(process.platform==="win32")await Promise.resolve().then(() => b4(Ab(),1))}catch{}if(process.env.AMP_PWD)try{process.chdir(process.env.AMP_PWD),delete process.env.AMP_PWD}catch(A){H$.write(`Failed to change directory to ${process.env.AMP_PWD}: ${A}
7263
- `)}function Y25(A){process.emitWarning=(Q,$,B,D)=>{let J=typeof Q==="string"?Q:Q.message||String(Q),F=$||"Warning",Y=!1;A.warn(J,{name:F,code:B})}}function r8(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")WJ("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli")WJ("experimental.agentMode",Q.mode);if(A.getOptionValueSourceWithGlobals("model")==="cli"&&Q.model)WJ("internal.model",U25(Q.model))}function D76(A){let Q=A.indexOf(":");if(Q===-1)throw new n1(`Invalid model format "${A}". Expected "provider:model" (e.g., "anthropic:claude-sonnet-4-20250514").`,1);let $=A.slice(0,Q).trim(),B=A.slice(Q+1).trim();if(!$||!B)throw new n1(`Invalid model format "${A}". Both provider and model must be non-empty (e.g., "anthropic:claude-sonnet-4-20250514").`,1)}function E25(A){if(A===void 0)return;let Q=A.trim();if(r14(Q))return Q;throw new n1(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function Z25(A,Q){if(C2(A,Q))return;let $=tB(A)?.levels,B=$?` Allowed for ${A}: ${$.join(", ")}.`:"";throw new n1(`Reasoning effort "${Q}" is not available for ${A} mode.${B}`,1)}function U25(A){if(!A.includes("="))return D76(A),A;let Q={};for(let $ of A.split(",")){let B=$.trim();if(!B)continue;let D=B.indexOf("=");if(D===-1)throw new n1(`Invalid mode-specific model entry "${B}". Expected "mode=provider:model" (e.g., "smart=anthropic:claude-sonnet-4-20250514").`,1);let J=B.slice(0,D).trim(),F=B.slice(D+1).trim();if(!J)throw new n1(`Missing mode name in "${B}". Expected "mode=provider:model".`,1);if(!F)throw new n1(`Missing model value for mode "${J}". Expected "${J}=provider:model".`,1);D76(F),Q[J]=F}if(Object.keys(Q).length===0)throw new n1("No valid model overrides found in --model flag value.",1);return Q}function X25(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 G25(A){try{return await G76(A,"utf-8")}catch{return A}}async function JQ1(A,Q,$){let B=X25(A,Q);if(!B)return;let D=AA($)?$.features:[],J=AA($)?$.user.email:void 0;if(!Ce(D,S$.HARNESS_SYSTEM_PROMPT)&&!(J&&p7(J)))throw new n1("You are not allowed to do this.",1);WJ("systemPrompt",await G25(B))}function Ce(A,Q){return A?.some(($)=>$.name===Q&&$.enabled)??!1}function V25(A){return A!=="pending"}function TI(A){if(!AA(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function K25(A){let Q=TI(A);if(Q)return Q.id;if(lE(A))throw Error(A.error.message);throw Error("unreachable")}function z25(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 I25(A){let B=z25(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 n1(`Couldn't connect to the Amp server at ${A}.`,1,B)}function Ne(A,Q){let $=zs0(Error(A.error.message));if($.message===d9.networkOffline||$.message===d9.networkTimeout)return I25(Q);if($.message!==d9.internalBug)return new n1($.message,1,$.suggestion);return new n1(A.error.message.replace(/^Error: /,""),1)}async function W25(){if(process.versions.bun)return!1;try{return await kG()==="npm"}catch(A){return P.debug("Failed to detect package manager for Neo npm migration welcome",{error:A}),!1}}var J76=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} notification alerts (audio locally, terminal bell over SSH or with AMP_FORCE_BEL; 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??nE,description:`Custom settings file path (overrides the default location ${nE})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(P).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${Ao})`},{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:w9(),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:AL.SMART.key,description:`Set the agent mode (${sB({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:Array.from(new Set(sB().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:"hideWelcome",long:"hide-welcome",type:"switch",description:"Skip the welcome experience on startup",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}],F76=(A)=>("deprecated"in A)&&A.deprecated===!0,H25=(A)=>("hidden"in A)&&A.hidden===!0,q25=(A)=>("default"in A),N25=(A)=>("default"in A)?A.default:void 0;function Fz0(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let $=E25(Q.effort);if($!==void 0)Z25(Q.mode,$);return $}function w25(A,Q){let $=Q.args[0],B=Q.commands.map((J)=>J.name());if($&&!$.includes(" ")&&$.length<30&&!/[./\\]/.test($)){let J=B.filter((Y)=>$.includes(Y)||Y.includes($)),F="Run amp --help for a list of available commands.";if(J.length>0)F=`Did you mean: ${J.join(", ")}? Or run amp --help for all commands.`;throw new n1(d9.unknownCommand($),1,F)}}async function Zz0(A){return{...A,getThreadEnvironment:kz,getEnvironmentData:(Q,$)=>sK(Q,$),skillService:A.skillService,fileChangeTrackerStorage:new dL,generateThreadTitle:wZ4,deleteThread:(Q)=>A.threadService.delete(Q),getServerStatus:()=>sF(A.configService),pluginService:A.pluginService}}function K76(A){return{toolService:A.toolService,configService:A.configService,skillService:A.skillService,getThreadEnvironment:kz,getEnvironmentData:(Q,$)=>sK(Q,$)}}var Yz0=i0.file(B25.homedir()),FQ1=process.env.XDG_CONFIG_HOME?i0.file(process.env.XDG_CONFIG_HOME):B1.joinPath(Yz0,".config");async function o2(A,Q,$){let B=$?.deferAuth??!1,D=$?.skipToolProviders??!1;m14("0.0.1779345702-g49e69d");let J=j20({storage:A.settings,secretStorage:A.secrets,workspaceRoot:h0.of(i0.file(process.cwd())),defaultAmpURL:A.ampURL,homeDir:Yz0,userConfigDir:FQ1}),F=A.secrets.get("apiKey",A.ampURL),Y=sF(J),E=null,Z=()=>{return},U=new Promise((Q0)=>{Z=Q0}),X=F.then(async(Q0)=>{if(!Q0&&!B)await U;return E??=Y.subscribe(()=>{}),k1(Y.pipe(i3(V25)))});X.catch(()=>{return}),n06(J);let G=await J.getLatest();P.debug("Global configuration initialized",{settingsKeys:Object.keys(G.settings)});let V=!1;{let Q0=await F;if(V=Boolean(Q0),P.info("API key lookup before login",{found:Boolean(Q0),ampURL:A.ampURL,deferAuth:B}),!Q0)if(B)P.info("No API key found, continuing startup with deferred auth");else{$3.write(`No API key found. Starting login flow...
7263
+ `)}function Y25(A){process.emitWarning=(Q,$,B,D)=>{let J=typeof Q==="string"?Q:Q.message||String(Q),F=$||"Warning",Y=!1;A.warn(J,{name:F,code:B})}}function r8(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")WJ("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("mode")==="cli")WJ("experimental.agentMode",Q.mode);if(A.getOptionValueSourceWithGlobals("model")==="cli"&&Q.model)WJ("internal.model",U25(Q.model))}function D76(A){let Q=A.indexOf(":");if(Q===-1)throw new n1(`Invalid model format "${A}". Expected "provider:model" (e.g., "anthropic:claude-sonnet-4-20250514").`,1);let $=A.slice(0,Q).trim(),B=A.slice(Q+1).trim();if(!$||!B)throw new n1(`Invalid model format "${A}". Both provider and model must be non-empty (e.g., "anthropic:claude-sonnet-4-20250514").`,1)}function E25(A){if(A===void 0)return;let Q=A.trim();if(r14(Q))return Q;throw new n1(`Invalid effort "${A}". Expected one of: none, minimal, low, medium, high, xhigh, max.`,1)}function Z25(A,Q){if(C2(A,Q))return;let $=tB(A)?.levels,B=$?` Allowed for ${A}: ${$.join(", ")}.`:"";throw new n1(`Reasoning effort "${Q}" is not available for ${A} mode.${B}`,1)}function U25(A){if(!A.includes("="))return D76(A),A;let Q={};for(let $ of A.split(",")){let B=$.trim();if(!B)continue;let D=B.indexOf("=");if(D===-1)throw new n1(`Invalid mode-specific model entry "${B}". Expected "mode=provider:model" (e.g., "smart=anthropic:claude-sonnet-4-20250514").`,1);let J=B.slice(0,D).trim(),F=B.slice(D+1).trim();if(!J)throw new n1(`Missing mode name in "${B}". Expected "mode=provider:model".`,1);if(!F)throw new n1(`Missing model value for mode "${J}". Expected "${J}=provider:model".`,1);D76(F),Q[J]=F}if(Object.keys(Q).length===0)throw new n1("No valid model overrides found in --model flag value.",1);return Q}function X25(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 G25(A){try{return await G76(A,"utf-8")}catch{return A}}async function JQ1(A,Q,$){let B=X25(A,Q);if(!B)return;let D=AA($)?$.features:[],J=AA($)?$.user.email:void 0;if(!Ce(D,S$.HARNESS_SYSTEM_PROMPT)&&!(J&&p7(J)))throw new n1("You are not allowed to do this.",1);WJ("systemPrompt",await G25(B))}function Ce(A,Q){return A?.some(($)=>$.name===Q&&$.enabled)??!1}function V25(A){return A!=="pending"}function TI(A){if(!AA(A))return null;return{...A.user,features:A.features??[],team:A.workspace??void 0}}function K25(A){let Q=TI(A);if(Q)return Q.id;if(lE(A))throw Error(A.error.message);throw Error("unreachable")}function z25(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 I25(A){let B=z25(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 n1(`Couldn't connect to the Amp server at ${A}.`,1,B)}function Ne(A,Q){let $=zs0(Error(A.error.message));if($.message===d9.networkOffline||$.message===d9.networkTimeout)return I25(Q);if($.message!==d9.internalBug)return new n1($.message,1,$.suggestion);return new n1(A.error.message.replace(/^Error: /,""),1)}async function W25(){if(process.versions.bun)return!1;try{return await kG()==="npm"}catch(A){return P.debug("Failed to detect package manager for Neo npm migration welcome",{error:A}),!1}}var J76=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} notification alerts (audio locally, terminal bell over SSH or with AMP_FORCE_BEL; 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??nE,description:`Custom settings file path (overrides the default location ${nE})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(P).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:`Set log file location (overrides the default location ${Ao})`},{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:w9(),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:AL.SMART.key,description:`Set the agent mode (${sB({}).map((A)=>A.mode).join(", ")}) — controls the model, system prompt, and tool selection`,choices:Array.from(new Set(sB().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:"hideWelcome",long:"hide-welcome",type:"switch",description:"Skip the welcome experience on startup",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}],F76=(A)=>("deprecated"in A)&&A.deprecated===!0,H25=(A)=>("hidden"in A)&&A.hidden===!0,q25=(A)=>("default"in A),N25=(A)=>("default"in A)?A.default:void 0;function Fz0(A,Q){if(A.getOptionValueSourceWithGlobals("effort")!=="cli")return;let $=E25(Q.effort);if($!==void 0)Z25(Q.mode,$);return $}function w25(A,Q){let $=Q.args[0],B=Q.commands.map((J)=>J.name());if($&&!$.includes(" ")&&$.length<30&&!/[./\\]/.test($)){let J=B.filter((Y)=>$.includes(Y)||Y.includes($)),F="Run amp --help for a list of available commands.";if(J.length>0)F=`Did you mean: ${J.join(", ")}? Or run amp --help for all commands.`;throw new n1(d9.unknownCommand($),1,F)}}async function Zz0(A){return{...A,getThreadEnvironment:kz,getEnvironmentData:(Q,$)=>sK(Q,$),skillService:A.skillService,fileChangeTrackerStorage:new dL,generateThreadTitle:wZ4,deleteThread:(Q)=>A.threadService.delete(Q),getServerStatus:()=>sF(A.configService),pluginService:A.pluginService}}function K76(A){return{toolService:A.toolService,configService:A.configService,skillService:A.skillService,getThreadEnvironment:kz,getEnvironmentData:(Q,$)=>sK(Q,$)}}var Yz0=i0.file(B25.homedir()),FQ1=process.env.XDG_CONFIG_HOME?i0.file(process.env.XDG_CONFIG_HOME):B1.joinPath(Yz0,".config");async function o2(A,Q,$){let B=$?.deferAuth??!1,D=$?.skipToolProviders??!1;m14("0.0.1779354043-g150a4f");let J=j20({storage:A.settings,secretStorage:A.secrets,workspaceRoot:h0.of(i0.file(process.cwd())),defaultAmpURL:A.ampURL,homeDir:Yz0,userConfigDir:FQ1}),F=A.secrets.get("apiKey",A.ampURL),Y=sF(J),E=null,Z=()=>{return},U=new Promise((Q0)=>{Z=Q0}),X=F.then(async(Q0)=>{if(!Q0&&!B)await U;return E??=Y.subscribe(()=>{}),k1(Y.pipe(i3(V25)))});X.catch(()=>{return}),n06(J);let G=await J.getLatest();P.debug("Global configuration initialized",{settingsKeys:Object.keys(G.settings)});let V=!1;{let Q0=await F;if(V=Boolean(Q0),P.info("API key lookup before login",{found:Boolean(Q0),ampURL:A.ampURL,deferAuth:B}),!Q0)if(B)P.info("No API key found, continuing startup with deferred auth");else{$3.write(`No API key found. Starting login flow...
7264
7264
  `);let M0=await C25(A),n=await A.secrets.get("apiKey",A.ampURL);if(P.info("Login flow completed",{success:M0,storedKeyPresent:Boolean(n),ampURL:A.ampURL}),!M0)await vz(),process.exit(1);V=!0,Z()}}{let Q0=await J.getLatest(),M0=Q0.settings.url,n=Q0.secrets.isSet?.[M0];P.info("Config secrets state after login",{configURL:M0,apiKeySet:n?.apiKey??!1})}let K=B?"pending":await X;if(!B)P.info("Server status resolved",{status:"ready",isAuthenticated:AA(K),isError:lE(K),errorMessage:lE(K)?K.error.message:void 0});let z=X.then((Q0)=>K25(Q0));z.catch(()=>{return});let I=!Q.takeMeBack&&AA(K)&&Ce(K.features,S$.THREAD_ACTORS_TUI),W=!1;if(process.env.AMP_DISABLE_PLUGINS==="1")P.warn("Ignoring AMP_DISABLE_PLUGINS outside development");let H=W?"off":I?"all":process.env.PLUGINS??"permissions",{toolService:q,dispose:N}=Tu4({configService:J}),w=new Map,O=()=>w.clear(),L=new Db0(J,A.settings.getWorkspaceRootPath()),j=rF4({configService:J}),k=k$4({configService:J,trustStore:L,skillMCPServers:j.skillMCPServers,uploadImageAttachments:I,createOAuthProvider:async(Q0,M0,n)=>{let a=`${Q0}:${M0}`,t=w.get(a);if(t)return P.debug("Reusing existing OAuth provider for server",{serverName:Q0,serverUrl:M0}),t;P.debug("Creating OAuth provider for server",{serverName:Q0,serverUrl:M0});let e=(async()=>{let F0=new ZL(A.secrets),J0=await F0.getClientInfo(Q0,M0),w0=n?.scopes??J0?.scopes,C0=nx4();P.info("OAuth headless mode check",{useHeadless:C0,executeMode:A.executeMode,envVar:process.env.AMP_HEADLESS_OAUTH,isTTY:$3.isTTY});let _0;if(C0)_0=A.executeMode?ix4():lx4(Q0);let U0=new KS0({storage:F0,serverName:Q0,serverUrl:M0,clientId:n?.clientId??J0?.clientId,clientSecret:n?.clientSecret??J0?.clientSecret,authUrl:n?.authUrl??J0?.authUrl,tokenUrl:n?.tokenUrl??J0?.tokenUrl,scopes:w0,headlessAuthHandler:_0});return P.debug("OAuth provider created",{serverName:Q0,serverUrl:M0,hasManualClientId:!!(n?.clientId??J0?.clientId),willUseDCR:!(n?.clientId??J0?.clientId),scopes:w0,headlessMode:C0,executeMode:A.executeMode}),U0})();return w.set(a,e),e}}),_=Fo0({configService:J,spawn:HF0}),f=Q.headless?q06():void 0,h=f??new PG0({configService:J}),b=h instanceof PG0?h:void 0;if(b)b.pluginExecutorKind="local";let v=new a1(null),y=null,p=I&&!W?[...C06(G.settings)?[{name:"permissions",entryPoint:l51}]:[],{name:"thread-visibility",entryPoint:O06(J,()=>X.then(TI),()=>y,(Q0)=>{y=Q0}),alwaysLoad:!0}]:[],c=qb0({configService:J,platform:h,loadGlobalPlugins:Se0(J),pluginFilter:H,activeThread$:v,internalPlugins:p}),g=jB4(c),i=[k,_,g],r;if(D)r=new Map;else if(A.executeMode){let Q0=await NR4({toolService:q,providers:i,initialTimeout:15000});r=Q0.registrations;for(let[M0,n]of Q0.initErrors)P.warn(`${M0} provider initialization slow or failed:`,n)}else r=Yo0({toolService:q,providers:i});if(Q.jetbrains)rM("JetBrains");else if(Q.ide&&Hb4())rM("VS Code");else if(Q.ide&&qb4())rM("Neovim");else if(Q.ide&&(!I||A.executeMode||Q.takeMeBack))V76();if(A.executeMode)d14(!0);let A0,I0=o5.status.pipe(N1((Q0)=>Boolean(Q0.connected&&Q0.authenticated&&Q0.ideName&&i44(Q0.ideName))),T4()).subscribe((Q0)=>{if(Q0){if(!A0)A0=q.registerTool(qR4)}else A0?.dispose(),A0=void 0}),E0;if(!A.executeMode){let Q0=await A.settings.get("fuzzy.alwaysIncludePaths")??[];E0=new TE0(process.cwd(),{alwaysIncludePaths:Q0},!0)}else E0=new class extends TE0{async start(){}async query(){return[]}async queryCompletions(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};let W0=new wm0(Ji(J,{usesThreadActors:!1}),{maxThreads:200});P.info("Starting Amp background services");let $0=new s51,j0={configService:J,toolService:q,mcpService:k,skillService:j,toolboxService:_,trustStore:L,threadService:W0,secretStorage:A.secrets,settingsStorage:A.settings,fuzzyServer:E0,terminal:$0,pluginService:c,pluginPlatform:b,headlessPluginPlatform:f,activeThread$:v,serverStatus:K,serverStatusPromise:X,viewerUserIDPromise:z,hasAPIKeyAtStartup:V,consumeDraftNewThreadVisibility:()=>{let Q0=y;return y=null,Q0}};return{...j0,async asyncDispose(){if(j0.mcpService.hasAuthenticatingClients())P.info("Waiting for OAuth authentication to complete before exit..."),await j0.mcpService.waitForAuthentication();for(let Q0 of r.values())Q0.dispose();await j0.mcpService.dispose(),O(),await j0.threadService.asyncDispose(),j0.configService.unsubscribe(),E?.unsubscribe(),N(),j0.fuzzyServer.dispose(),j0.settingsStorage[Symbol.dispose](),I0.unsubscribe(),A0?.dispose(),await j0.pluginService.dispose()}}}async function C25(A){if(!A.executeMode){if(!await CZ0("Would you like to log in to Amp? [(y)es, (n)o]: "))return $3.write(`Login cancelled. Run the command again to retry.
7265
7265
  `),!1}return await z76(A)}async function z76(A){let Q=X76(32).toString("hex"),$=await $y(A.ampURL,Q),B=new AbortController;try{await pE($,B.signal)}catch(J){P.error("Error opening browser",{error:J})}let D=await $y(A.ampURL,Q,!1);$3.write(`If your browser does not open automatically, visit:
7266
7266
 
@@ -7268,7 +7268,7 @@ ${t0.blue.bold(D)}
7268
7268
 
7269
7269
  `);try{return await Sg4(A.ampURL,Q,A.secrets,B),$3.write("\nLogin successful! Run `amp` to get started.\n"),!0}catch(J){return P.error("Login failed",{error:J}),H$.write(`
7270
7270
  Login failed: ${J instanceof Error?J.message:String(J)}
7271
- `),!1}}async function M25(A,Q,$){let B=await Q.get("apiKey",A);if(!B)throw new n1("No Amp API key found. Run `amp login` first.",1);let D=A25("curl",["-H",`Authorization: Bearer ${B}`,...$],{stdio:"inherit"});process.exitCode=await new Promise((J,F)=>{D.on("error",F),D.on("close",(Y)=>J(Y??1))})}function L25(A){let Q=new JN().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((I)=>{if(I.code==="commander.help"||I.code==="commander.version"||I.exitCode===0)Ij(),process.exit(0);let W=I.originalError??I;sv4(W)}),jd4(Q,{version:"0.0.1779345702-g49e69d",buildTimestamp:"2026-05-21T06:46:29.871Z",buildType:"release"}),Q.addHelpText("after",zb4()),Q.configureHelp({formatHelp:Ib4}),Q.command("logout").description("Log out by removing stored API key").action(async(I,W)=>{let H=W.optsWithGlobals(),q=await d3(H);await S25(q)}),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(I,W)=>{let H=W.optsWithGlobals(),q=await d3(H);await k25(q,await n51(H,q.settings))}),av4(Q,d3);let B=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(...I)=>{let W=I.find((w)=>typeof w==="object"&&w!==null&&typeof w.optsWithGlobals==="function")??B,H=I.filter((w)=>w!==W).flatMap((w)=>Array.isArray(w)?w:typeof w==="string"?[w]:[]),q=W.optsWithGlobals(),N=await d3(q);await M25(N.ampURL,N.secrets,H),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(I,W,H)=>{let q=H.optsWithGlobals(),N=await d3(q);await xx4(I??"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(I,W)=>{let H=W.optsWithGlobals(),q=await d3(H);await bx4(q.ampURL,q.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(I)=>{await kh4({raw:I.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(`
7271
+ `),!1}}async function M25(A,Q,$){let B=await Q.get("apiKey",A);if(!B)throw new n1("No Amp API key found. Run `amp login` first.",1);let D=A25("curl",["-H",`Authorization: Bearer ${B}`,...$],{stdio:"inherit"});process.exitCode=await new Promise((J,F)=>{D.on("error",F),D.on("close",(Y)=>J(Y??1))})}function L25(A){let Q=new JN().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, workspace, group)").configureOutput({writeErr:()=>{}});Q.exitOverride((I)=>{if(I.code==="commander.help"||I.code==="commander.version"||I.exitCode===0)Ij(),process.exit(0);let W=I.originalError??I;sv4(W)}),jd4(Q,{version:"0.0.1779354043-g150a4f",buildTimestamp:"2026-05-21T09:06:08.537Z",buildType:"release"}),Q.addHelpText("after",zb4()),Q.configureHelp({formatHelp:Ib4}),Q.command("logout").description("Log out by removing stored API key").action(async(I,W)=>{let H=W.optsWithGlobals(),q=await d3(H);await S25(q)}),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(I,W)=>{let H=W.optsWithGlobals(),q=await d3(H);await k25(q,await n51(H,q.settings))}),av4(Q,d3);let B=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(...I)=>{let W=I.find((w)=>typeof w==="object"&&w!==null&&typeof w.optsWithGlobals==="function")??B,H=I.filter((w)=>w!==W).flatMap((w)=>Array.isArray(w)?w:typeof w==="string"?[w]:[]),q=W.optsWithGlobals(),N=await d3(q);await M25(N.ampURL,N.secrets,H),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(I,W,H)=>{let q=H.optsWithGlobals(),N=await d3(q);await xx4(I??"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(I,W)=>{let H=W.optsWithGlobals(),q=await d3(H);await bx4(q.ampURL,q.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(I)=>{await kh4({raw:I.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(`
7272
7272
  `)).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(I,W,H)=>{if(I&&W.apply)throw new n1("Choose either a positional thread ID/URL or --apply <thread-id>, not both.",1);let q=W.apply??I;if(!q||q.trim().length===0)$3.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.
7273
7273
 
7274
7274
  `),H.outputHelp(),process.exit(0);let N=k8(q)??DB(q),w=H.optsWithGlobals(),O=await d3(w);r8(H,w);let L=await o2(O,w),j=!1;try{if(W.checkout&&W.skipCheckout)throw new n1("Choose either --checkout or --skip-checkout, not both.",1);if(lE(L.serverStatus))throw Ne(L.serverStatus,O.ampURL);let k=AA(L.serverStatus)?L.serverStatus.features:void 0;if(!Ce(k,S$.V2))throw new n1("live-sync is not enabled for your user",1);await Mg4({ampURL:O.ampURL,threadId:N,configService:L.configService,threadService:L.threadService,apiKey:process.env.AMP_API_KEY,applyOnce:typeof W.apply==="string",checkoutMode:W.checkout?"always":W.skipCheckout?"never":"prompt",promptForYesNo:CZ0}),j=!0}finally{if(await L.asyncDispose(),j)process.exit(0)}});let D=async(I,W,H)=>{j20({storage:W.settings,secretStorage:W.secrets,workspaceRoot:h0.of(i0.file(process.cwd())),defaultAmpURL:W.ampURL,homeDir:Yz0,userConfigDir:FQ1});let q={...W,executeMode:!1};await Ez0(q,{...I,openThreadSwitcher:!0},H,A)},J=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(I,W)=>{let H=W.optsWithGlobals(),q=await d3(H);await U76(H,q,W)});J.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(I,W)=>{let H=W.optsWithGlobals(),q=await d3(H);await n25(H,q,W)}),J.command("continue [threadIDOrURLs...]").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. When multiple thread are given, all are resumed and the first is shown in the foreground.").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(I,W,H)=>{let q=H.optsWithGlobals(),N=await d3(q),w=Array.isArray(I)?I:[];if(W.pick)H$.write(`${t0.yellow("Warning:")} The --pick flag is deprecated. The picker is now shown by default.
@@ -7301,8 +7301,8 @@ ${O}
7301
7301
  `))}),W.args.length>0)w25(q,W);await Ez0(q,H,W,A)}),nb4(Q),Q}async function we(A,Q){await zQ(($)=>Fy($,A,Q))}async function Y76(A,Q,$){let B=Date.now(),[D,J]=await Promise.all([e4.getThreadLinkInfo({thread:A},{config:Q}),$]);if(P.getChild("fetchAndStartThread").info(`Ownership check in ${Date.now()-B}ms`),D.ok){let F=D.result.creatorUserID;if(F&&F!==J&&!process.env.AMP_RESUME_OTHER_USER_THREADS_INSECURE)throw new n1(`Cannot resume thread created by another user.
7302
7302
 
7303
7303
  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 I76(A){if(A.streamJsonInput)return{userInput:"",stdinInput:null};if(typeof A.execute==="string"){let Q=(await kG0()).trimEnd();return{userInput:A.execute,stdinInput:Q||null}}return{userInput:(await kG0()).trimEnd(),stdinInput:null}}function W76(A,Q,$){if(A.streamJson&&!Q)throw new n1("The --stream-json flag requires --execute mode",1,'Use: amp --execute "your message" --stream-json');if(A.streamJsonInput&&!Q)throw new n1("The --stream-json-input flag requires --execute mode",1,"Use: amp --execute --stream-json --stream-json-input");if(A.streamJsonInput&&!A.streamJson)throw new n1("The --stream-json-input flag requires --stream-json",1,"Use: amp --execute --stream-json --stream-json-input");if(A.stats&&A.streamJson)throw new n1("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 n1("The --stats flag requires --execute mode",1,'Use: amp --execute "your message" --stats');if(A.archive&&!Q)throw new n1("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 n1("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&&$===""&&!A.streamJsonInput&&!A.headless)throw new n1("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"
7304
- Or pipe via stdin: echo "your message" | amp --execute`)}function O25(){h34([M20.parse({tool:"*",action:"allow"})]),G34({bypass:!0})}function j25(A){if(A.threadId&&!P9(A.threadId))delete A.threadId}async function Ez0(A,Q,$,B){if(Q.headless)return R25(A,Q,$);let D=await o2(A,Q),J=await D.serverStatusPromise,F=AA(J)&&Ce(J.features,S$.THREAD_ACTORS_TUI),Y=F&&!Q.takeMeBack;if(Q.showWelcome&&Q.hideWelcome)throw await D.asyncDispose(),new n1("Cannot use --show-welcome and --hide-welcome together",1);if(Q.showWelcome&&!F)throw await D.asyncDispose(),new n1("--show-welcome is only available with the new Amp CLI feature flag",1);if(Y){let E=!A.executeMode&&await W25();return O25(),j25(Q),P25(A,Q,$,D,{showNpmMigrationWelcome:E})}else{if(Q.threadId&&P9(Q.threadId)){let E=await e4.getThreadLinkInfo({thread:Q.threadId},{config:D.configService}).catch(()=>null);if(E?.ok&&E.result.usesThreadActors)throw await D.asyncDispose(),new n1(`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 u25(A,Q,$,B,{dependencies:D})}}async function R25(A,Q,$){let B=(W,H)=>{let q=Number(process.hrtime.bigint()-H)/1e6,N=Js0();P.info("Startup phase",{phase:W,phaseMs:Math.round(q),sinceMainMs:N===null?void 0:Math.round(N)})};r8($,Q);let D=process.hrtime.bigint(),J=await o2(A,Q);B("runMainThread:createThreadDependencies",D);let{serverStatus:F}=J;if(lE(F))throw Ne(F,A.ampURL);let Y=AA(F)?F:null,E=Y?.user.email;await JQ1($,Q,F);let Z=TI(F),U=Ux(Q,Z);if(U instanceof Error)P3(U.message);if(Y&&!eM(Q.mode,E))throw new n1(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!E||!p7(E)))throw new n1("Headless executor mode is only available for Amp employees",1);_Y0();let G=await J.secretStorage.get("apiKey",A.ampURL);if(!G)throw new n1("API key required for headless mode. Please run `amp login` first.",1);let V=typeof Q.headless==="string"&&Q.headless!=="true"?Q.headless:void 0;if(V&&!P9(V))throw new n1(`Invalid thread ID: ${V}`,1);let K=V?void 0:await l25({dependencies:J,apiKey:G,visibility:U??void 0}),z=V??K?.threadId;if(!z)throw new n1("Failed to resolve headless thread ID",1);let I=await sx4(z);if(I.status==="already-running")await J.asyncDispose(),await vz(),process.exit(0);try{await dx4({ampURL:A.ampURL,apiKey:G,workspaceRoot:process.cwd(),threadId:z,ownerUserId:K?.ownerUserId,threadVersion:K?.threadVersion,agentMode:K?.agentMode,initialToolDiscovery:Promise.all([J.mcpService.initialized,J.toolboxService.initialized,J.pluginService.initialized]).then(()=>{return}),configService:J.configService,mcpService:J.mcpService,toolService:J.toolService,skillService:J.skillService,pluginService:J.pluginService,pluginPlatform:J.headlessPluginPlatform})}finally{await I.release(),await J.asyncDispose()}await vz(),process.exit(0)}async function P25(A,Q,$,B,D){let{userInput:J,stdinInput:F}=await I76(Q),Y=!!Q.streamJson||!!Q.streamJsonThinking;W76({...Q,streamJson:Y},A.executeMode,J),r8($,Q),fv4(),_Y0();let E=Q.threadId,Z=Q.resumeThreadIDs??(E?[E]:[]),U=Q.observe?k8(Q.observe)??DB(Q.observe):void 0,X=await B.serverStatusPromise;if(lE(X))throw Ne(X,A.ampURL);let G=TI(X),V=Ux(Q,G);if(V instanceof Error)P3(V.message);let K=null,z=async()=>{let H=B.consumeDraftNewThreadVisibility();if(H!==null)return H;return K??=(async()=>{let q=await Qo(A.settings,process.cwd(),G,V);if(q instanceof Error)P3(q.message);return q})(),K},I=await B.secretStorage.get("apiKey",A.ampURL);if(!I)throw new n1("API key required. Please run `amp login` first.",1);let W=AA(X)&&p7(X.user.email);if(A.executeMode){if(Z.length>1)throw new n1("Execute mode can only resume one thread.",1);m01(B.mcpService,A.settings);try{let H=Fz0($,Q),q=await rz(),N=E?H:LZ0({agentMode:Q.mode,explicitEffort:H,sessionState:q}),w=E?void 0:OZ0(await By(B.configService),{agentMode:Q.mode,explicitEffort:H,sessionState:q}),O=E?void 0:await z(),L=await Lx4({apiKey:I,ampURL:A.ampURL,workspaceRoot:process.cwd(),dependencies:B,userInput:J,stdinInput:F,stats:!!Q.stats,streamJson:Y,streamJsonThinking:!!Q.streamJsonThinking,streamJsonInput:!!Q.streamJsonInput,stdin:process.stdin,agentMode:Q.mode,reasoningEffort:N,labels:Q.label,initialThreadID:E,initialThreadMeta:O,initialSettings:w});if(await we(L,"execute"),Q.archive)await B.threadService.archive(L,!0)}finally{await B.asyncDispose()}await vz(),process.exit(0)}else{let H=Fz0($,Q),q=D.showNpmMigrationWelcome?"npm-migration":"intro",N=lE0("0.0.1779345702-g49e69d",B.settingsStorage,{startDelayMs:3000}),w=new MZ0(B.mcpService,A.settings.getWorkspaceRootPath()),O=Ji(B.configService),L=new yt(B.fuzzyServer),j=process.cwd();await X06({ampURL:A.ampURL,apiKey:I,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??rJ(A.ampURL),configService:B.configService,toolService:B.toolService,pluginPlatform:B.pluginPlatform,pluginService:B.pluginService,skillService:B.skillService,mcpService:B.mcpService,readFileSystemDirectory:({uri:k})=>bf({workspaceRoot:j},k),completionBuilder:L,updateService:N,workspaceRoot:j,listThreads:()=>O.listThreads(),getThreadFromServer:(k)=>O.getThread(k),toolboxes:B.toolboxService.toolboxes,isInternalUser:W,settingsFilePath:B.settingsStorage.getSettingsFilePath(),workspaceSettingsFilePath:B.settingsStorage.getWorkspaceSettingsPath(),mcpTrustHandler:w,setActiveThreadID:(k)=>B.activeThread$.next(k),dispose:()=>{return w.dispose(),N.dispose(),B.asyncDispose()}},{initialThreadIDs:U?[U]:Z,initialUserInput:J||void 0,getDefaultNewThreadVisibility:z,onFirstFrame:Q.ide?V76:void 0,openThreadPickerOnStart:Q.openThreadSwitcher,observerOnly:!!U,splashOrbVisualStyle:"neo",hideNeoWelcome:!!Q.hideWelcome,showNeoWelcome:Q.showWelcome,neoWelcomeVariant:q,initialAgentMode:$.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,initialReasoningEffort:H}),process.exit(0)}}async function u25(A,Q,$,B,D){let J=process.hrtime.bigint(),F=($0,j0)=>{let Q0=Number(process.hrtime.bigint()-j0)/1e6,M0=Js0();P.info("Startup phase",{phase:$0,phaseMs:Math.round(Q0),sinceMainMs:M0===null?void 0:Math.round(M0)})},{userInput:Y,stdinInput:E}=await I76(Q),Z=!!Q.streamJson||!!Q.streamJsonThinking;W76({...Q,streamJson:Z},A.executeMode,Y),r8($,Q);let U=process.hrtime.bigint(),X=D?.dependencies??await o2(A,Q),G=X.hasAPIKeyAtStartup,V=X.serverStatus==="pending";if(P.info("Interactive auth startup mode",{deferInteractiveAuth:V,hasAPIKeyAtStartup:G,executeMode:A.executeMode,headless:Boolean(Q.headless)}),!D)F("runMainThread:createThreadDependencies",U);let{serverStatus:K}=X;if(!V&&lE(K))throw Ne(K,A.ampURL);let z=AA(K)?K:null,I=z?.user.email,W=!!(I&&p7(I));if(W)_Y0();if(!V)await JQ1($,Q,K);let H=TI(K),q=H?.features??[],N=H?.team??null,w=Ux(Q,H);if(w instanceof Error)P3(w.message);if(z&&!eM(Q.mode,I))throw new n1(`Agent mode '${Q.mode}' is only available for Amp employees`,1);let O=Q.threadId&&P9(Q.threadId)?Q.threadId:void 0;U=process.hrtime.bigint();let L=await Zz0(X);F("runMainThread:createWorkerDeps",U);let j=A.executeMode?void 0:async($0)=>we($0,"interactive"),k={threadService:X.threadService,workerDeps:L,createThread:async($0)=>{let j0=V?await X.serverStatusPromise:K,Q0=await Qo(A.settings,process.cwd(),TI(j0),w);if(Q0 instanceof Error)P3(Q0.message);return T91(L,{threadMeta:Q0,agentMode:$0??Q.mode,onFirstAssistantMessage:j})},validateThreadOwnership:async($0,j0)=>{if(j0?.nonBlockingOwnershipCheck){Y76($0,X.configService,X.viewerUserIDPromise).catch((Q0)=>{if(Q0 instanceof n1){if(j0.onOwnershipError){j0.onOwnershipError(Q0,$0);return}Sz(Q0,$0);return}P.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Q0})});return}try{await Y76($0,X.configService,X.viewerUserIDPromise)}catch(Q0){if(Q0 instanceof n1)throw Q0;P.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Q0})}},switchThreadVisibility:w,switchThreadAgentMode:Q.mode,onFirstAssistantMessage:j,handleError:Sz},_=async()=>{try{return k56(k,Q.threadId,{nonBlockingOwnershipCheck:Q.nonBlockingThreadOwnershipCheck})}catch($0){if($0 instanceof n1)throw $0;throw await Sz($0,Q.threadId),Error("handleError should have called process.exit()")}},f=(async()=>{if(V){P.info("Skipping initial free tier status fetch until auth is complete");return}try{let $0=await X.configService.getLatest(),j0=Yd($0),Q0=await e4.getUserFreeTierStatus({},{config:X.configService,signal:AbortSignal.timeout(j0)});if(Q0.ok)return P.info("User free tier status:",Q0),Q0.result;return}catch($0){P.error("Failed to fetch free tier status:",$0);return}})(),b=!A.executeMode?new $21:null,v,y=null;if(b)v=b,y=(async()=>{let $0=V?await X.serverStatusPromise:X.serverStatus;if(lE($0))throw Ne($0,A.ampURL);await JQ1($,Q,$0);let j0=process.hrtime.bigint(),Q0=await _();if(F("runMainThread:createThreadPool",j0),b.attach(Q0),Y){let M0=await k1(Q0.threadHandles$);if(!M0)throw new n1("No active thread is available yet.",1);await M0.sendMessage({content:[{type:"text",text:Y}]})}})(),y.catch(async($0)=>{let j0=$0 instanceof Error?$0:Error(String($0));b.setInitError(j0),await Sz($0,Q.threadId)});else U=process.hrtime.bigint(),v=await _(),F("runMainThread:createThreadPool",U);let p=Q.notifications!==void 0?Q.notifications:!A.executeMode;U=process.hrtime.bigint();let c=await X.configService.getLatest();if(F("runMainThread:configService.getLatest",U),U=process.hrtime.bigint(),q16({configService:X.configService,threadService:X.threadService,threadPool:v,config:c,useNotifications:p}),F("runMainThread:createLegacyTuiNotificationService",U),A.executeMode){m01(X.mcpService,A.settings);let $0=Fz0($,Q),j0=await rz(),Q0=O?$0:LZ0({agentMode:Q.mode,explicitEffort:$0,sessionState:j0}),M0={userInput:Y,stdinInput:E,dependencies:X,streamJson:Z,streamJsonInput:!!Q.streamJsonInput,streamJsonThinking:!!Q.streamJsonThinking,stats:!!Q.stats,ampURL:A.ampURL,isInternalUser:W,agentMode:Q.mode,reasoningEffort:Q0,labels:Q.label},n=await Hk4({threadPool:v,...M0});if(await we(n,"execute"),Q.archive)await X.threadService.archive(n,!0);await X.asyncDispose(),process.exit(0)}let g=!1,i=!1;if(Q.jetbrains||Q.ide){await y20();let $0=await oE({jetbrainsOnly:Q.jetbrains});if($0.length===0){if(Q.jetbrains)g=!await X.configService.get("jetbrains.skipInstall")}else if($0.length===1){let j0=$0[0];if(j0)o5.selectConfig(j0)}else i=!0}U=process.hrtime.bigint();let r=lE0("0.0.1779345702-g49e69d",X.settingsStorage,{startDelayMs:3000});F("runMainThread:createUpdateService",U),U=process.hrtime.bigint();let A0=new MZ0(X.mcpService,A.settings.getWorkspaceRootPath());if(F("runMainThread:createMcpTrustHandler",U),Y&&A.executeMode){let $0=await k1(v.threadHandles$);if(!$0)throw new n1("No active thread is available yet.",1);await $0.sendMessage({content:[{type:"text",text:Y}]})}U=process.hrtime.bigint();let I0=await rz();F("runMainThread:loadSessionState",U),P.info("Loaded session state:",I0);let E0=Fz0($,Q),W0={...I0,launchCount:I0.launchCount+1,lastReasoningEffortByMode:E0?{...I0.lastReasoningEffortByMode,[Q.mode]:E0}:I0.lastReasoningEffortByMode};zQ(($0)=>({...$0,launchCount:$0.launchCount+1}));try{if(U=process.hrtime.bigint(),await i16({history:new mo,fuzzyServer:X.fuzzyServer,settingsStorage:X.settingsStorage,threadService:X.threadService,skillService:X.skillService,configService:X.configService,secretStorage:X.secretStorage,internalAPIClient:e4,threadPool:v,createSystemPromptDeps:async()=>K76(X),ideClient:o5,mcpService:X.mcpService,toolboxService:X.toolboxService,mcpTrustHandler:A0,updateService:r,pluginPlatform:X.pluginPlatform,pluginService:X.pluginService},{initialServerStatus:X.serverStatus,stdout:process.stdout,hasAPIKeyAtStartup:X.hasAPIKeyAtStartup,ampURL:A.ampURL,startupThreadID:O,showJetBrainsInstaller:g,showIdePickerHint:i,openThreadSwitcher:Q.openThreadSwitcher,jetbrainsMode:Q.jetbrains,clientId:J25,logFile:{path:B},sessionState:W0,freeTierStatusPromise:f,workspace:N??null,features:q,isInternalUser:W,initialAgentMode:$.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,splashOrbVisualStyle:Q.neoOrb?"neo":"classic",buildTimestamp:"2026-05-21T06:46:29.871Z"},($0)=>new Z21({...$0,threadPool:$0.threadPool},(j0)=>new u91({...j0,threadState:j0.threadState}))),F("runMainThread:mountApp-returned",U),y)await y}finally{await v.dispose().catch(($0)=>{P.error("Failed to dispose thread pool during shutdown",$0)})}await X.asyncDispose(),F("runMainThread:dependencies.asyncDispose",J),process.exit(0)}async function d3(A){if(P.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)H$.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
7305
- `);let Q=!!A.execute||!process.stdout.isTTY&&!A.streamJson,$=process.stdout.isTTY&&process.stderr.isTTY;P.info("Execution mode resolved",{executeMode:Q,stdoutTTY:process.stdout.isTTY,stderrTTY:process.stderr.isTTY,streamJson:A.streamJson,executeFlag:A.execute});let B=await b$4({get:async(Y)=>{if(Y!==Kc)return;try{let E=await G76(DQ1,"utf-8");return JSON.parse(E).installationID}catch{return}},set:async(Y,E)=>{if(Y!==Kc)return;await Q25(qe.dirname(DQ1),{recursive:!0}),await $25(DQ1,JSON.stringify({installationID:E},null,2),{mode:384})}},{clientType:"cli",platform:A70()});p14(B);let D=await p06({...A,workspaceTrust:{current:!0,changes:Ed},getHook:process.env.AMP_URL?(Y,E)=>{if(Y==="url")return Promise.resolve(process.env.AMP_URL);return E()}:void 0});if(A.mcpConfig){let Y=await cg4(A.mcpConfig);D=lg4(D,Y)}let J=qe.dirname(D.getSettingsFilePath());fu4(id,J),D=We1(D);let F=await D.get("url","admin")??await D.get("url","global");if(!F)F=a7;if(P.info("Resolved Amp URL",{ampURL:F,settingsFile:D.getSettingsFilePath(),workspaceRoot:D.getWorkspaceRootPath()}),!BH(F))P.info("Targeting custom Amp server",{ampURL:F});return{executeMode:Q,isTTY:$,ampURL:F,settings:D,secrets:x06(await n51(A,D))}}function _25(A){let Q={};for(let $=0;$<A.length;$++){let B=A[$];if(B?.startsWith("--")){let J=B.slice(2).replace(/-([a-z])/g,(Y,E)=>E.toUpperCase()),F=A[$+1];if(F&&!F.startsWith("--"))Q[J]=F,$++}}return Q}function T25(A,Q){let $=A.includes("--headless")||A.some((D)=>D.startsWith("--headless=")),B=qe.resolve(Q.logFile??process.env.AMP_LOG_FILE??($?D25:Ao));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:B}}async function v25(){uv4();let A=_25(process.argv),Q=T25(process.argv,A),$=yv4(Q);CY0("silent");let B=process.argv.includes("--no-color"),D=process.argv.includes("--color"),J=process.stdout.isTTY&&process.stderr.isTTY;if(B||!D&&!J)t0.level=0;if(Y25(P),P.info("Starting Amp CLI.",{version:"0.0.1779345702-g49e69d",buildTimestamp:"2026-05-21T06:46:29.871Z"}),process.platform==="win32"&&xj())mb4();if(parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new n1(d9.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await L25($).parseAsync(process.argv)}ku4().startActiveSpan("main",async(A)=>{process.on("exit",()=>A.end()),await v25().catch(Sz)});async function k25(A,Q){let $=A.ampURL.includes("localhost")||A.ampURL.includes("127.0.0.1");if(process.env.AMP_URL&&!$)await A.settings.set("url",process.env.AMP_URL,"global"),$3.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
7304
+ Or pipe via stdin: echo "your message" | amp --execute`)}function O25(){h34([M20.parse({tool:"*",action:"allow"})]),G34({bypass:!0})}function j25(A){if(A.threadId&&!P9(A.threadId))delete A.threadId}async function Ez0(A,Q,$,B){if(Q.headless)return R25(A,Q,$);let D=await o2(A,Q),J=await D.serverStatusPromise,F=AA(J)&&Ce(J.features,S$.THREAD_ACTORS_TUI),Y=F&&!Q.takeMeBack;if(Q.showWelcome&&Q.hideWelcome)throw await D.asyncDispose(),new n1("Cannot use --show-welcome and --hide-welcome together",1);if(Q.showWelcome&&!F)throw await D.asyncDispose(),new n1("--show-welcome is only available with the new Amp CLI feature flag",1);if(Y){let E=!A.executeMode&&await W25();return O25(),j25(Q),P25(A,Q,$,D,{showNpmMigrationWelcome:E})}else{if(Q.threadId&&P9(Q.threadId)){let E=await e4.getThreadLinkInfo({thread:Q.threadId},{config:D.configService}).catch(()=>null);if(E?.ok&&E.result.usesThreadActors)throw await D.asyncDispose(),new n1(`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 u25(A,Q,$,B,{dependencies:D})}}async function R25(A,Q,$){let B=(W,H)=>{let q=Number(process.hrtime.bigint()-H)/1e6,N=Js0();P.info("Startup phase",{phase:W,phaseMs:Math.round(q),sinceMainMs:N===null?void 0:Math.round(N)})};r8($,Q);let D=process.hrtime.bigint(),J=await o2(A,Q);B("runMainThread:createThreadDependencies",D);let{serverStatus:F}=J;if(lE(F))throw Ne(F,A.ampURL);let Y=AA(F)?F:null,E=Y?.user.email;await JQ1($,Q,F);let Z=TI(F),U=Ux(Q,Z);if(U instanceof Error)P3(U.message);if(Y&&!eM(Q.mode,E))throw new n1(`Agent mode '${Q.mode}' is only available for Amp employees`,1);if(process.env.AMP_EXECUTOR!=="1"&&(!E||!p7(E)))throw new n1("Headless executor mode is only available for Amp employees",1);_Y0();let G=await J.secretStorage.get("apiKey",A.ampURL);if(!G)throw new n1("API key required for headless mode. Please run `amp login` first.",1);let V=typeof Q.headless==="string"&&Q.headless!=="true"?Q.headless:void 0;if(V&&!P9(V))throw new n1(`Invalid thread ID: ${V}`,1);let K=V?void 0:await l25({dependencies:J,apiKey:G,visibility:U??void 0}),z=V??K?.threadId;if(!z)throw new n1("Failed to resolve headless thread ID",1);let I=await sx4(z);if(I.status==="already-running")await J.asyncDispose(),await vz(),process.exit(0);try{await dx4({ampURL:A.ampURL,apiKey:G,workspaceRoot:process.cwd(),threadId:z,ownerUserId:K?.ownerUserId,threadVersion:K?.threadVersion,agentMode:K?.agentMode,initialToolDiscovery:Promise.all([J.mcpService.initialized,J.toolboxService.initialized,J.pluginService.initialized]).then(()=>{return}),configService:J.configService,mcpService:J.mcpService,toolService:J.toolService,skillService:J.skillService,pluginService:J.pluginService,pluginPlatform:J.headlessPluginPlatform})}finally{await I.release(),await J.asyncDispose()}await vz(),process.exit(0)}async function P25(A,Q,$,B,D){let{userInput:J,stdinInput:F}=await I76(Q),Y=!!Q.streamJson||!!Q.streamJsonThinking;W76({...Q,streamJson:Y},A.executeMode,J),r8($,Q),fv4(),_Y0();let E=Q.threadId,Z=Q.resumeThreadIDs??(E?[E]:[]),U=Q.observe?k8(Q.observe)??DB(Q.observe):void 0,X=await B.serverStatusPromise;if(lE(X))throw Ne(X,A.ampURL);let G=TI(X),V=Ux(Q,G);if(V instanceof Error)P3(V.message);let K=null,z=async()=>{let H=B.consumeDraftNewThreadVisibility();if(H!==null)return H;return K??=(async()=>{let q=await Qo(A.settings,process.cwd(),G,V);if(q instanceof Error)P3(q.message);return q})(),K},I=await B.secretStorage.get("apiKey",A.ampURL);if(!I)throw new n1("API key required. Please run `amp login` first.",1);let W=AA(X)&&p7(X.user.email);if(A.executeMode){if(Z.length>1)throw new n1("Execute mode can only resume one thread.",1);m01(B.mcpService,A.settings);try{let H=Fz0($,Q),q=await rz(),N=E?H:LZ0({agentMode:Q.mode,explicitEffort:H,sessionState:q}),w=E?void 0:OZ0(await By(B.configService),{agentMode:Q.mode,explicitEffort:H,sessionState:q}),O=E?void 0:await z(),L=await Lx4({apiKey:I,ampURL:A.ampURL,workspaceRoot:process.cwd(),dependencies:B,userInput:J,stdinInput:F,stats:!!Q.stats,streamJson:Y,streamJsonThinking:!!Q.streamJsonThinking,streamJsonInput:!!Q.streamJsonInput,stdin:process.stdin,agentMode:Q.mode,reasoningEffort:N,labels:Q.label,initialThreadID:E,initialThreadMeta:O,initialSettings:w});if(await we(L,"execute"),Q.archive)await B.threadService.archive(L,!0)}finally{await B.asyncDispose()}await vz(),process.exit(0)}else{let H=Fz0($,Q),q=D.showNpmMigrationWelcome?"npm-migration":"intro",N=lE0("0.0.1779354043-g150a4f",B.settingsStorage,{startDelayMs:3000}),w=new MZ0(B.mcpService,A.settings.getWorkspaceRootPath()),O=Ji(B.configService),L=new yt(B.fuzzyServer),j=process.cwd();await X06({ampURL:A.ampURL,apiKey:I,rivetEndpoint:process.env.RIVET_PUBLIC_ENDPOINT??rJ(A.ampURL),configService:B.configService,toolService:B.toolService,pluginPlatform:B.pluginPlatform,pluginService:B.pluginService,skillService:B.skillService,mcpService:B.mcpService,readFileSystemDirectory:({uri:k})=>bf({workspaceRoot:j},k),completionBuilder:L,updateService:N,workspaceRoot:j,listThreads:()=>O.listThreads(),getThreadFromServer:(k)=>O.getThread(k),toolboxes:B.toolboxService.toolboxes,isInternalUser:W,settingsFilePath:B.settingsStorage.getSettingsFilePath(),workspaceSettingsFilePath:B.settingsStorage.getWorkspaceSettingsPath(),mcpTrustHandler:w,setActiveThreadID:(k)=>B.activeThread$.next(k),dispose:()=>{return w.dispose(),N.dispose(),B.asyncDispose()}},{initialThreadIDs:U?[U]:Z,initialUserInput:J||void 0,getDefaultNewThreadVisibility:z,onFirstFrame:Q.ide?V76:void 0,openThreadPickerOnStart:Q.openThreadSwitcher,observerOnly:!!U,splashOrbVisualStyle:"neo",hideNeoWelcome:!!Q.hideWelcome,showNeoWelcome:Q.showWelcome,neoWelcomeVariant:q,initialAgentMode:$.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,initialReasoningEffort:H}),process.exit(0)}}async function u25(A,Q,$,B,D){let J=process.hrtime.bigint(),F=($0,j0)=>{let Q0=Number(process.hrtime.bigint()-j0)/1e6,M0=Js0();P.info("Startup phase",{phase:$0,phaseMs:Math.round(Q0),sinceMainMs:M0===null?void 0:Math.round(M0)})},{userInput:Y,stdinInput:E}=await I76(Q),Z=!!Q.streamJson||!!Q.streamJsonThinking;W76({...Q,streamJson:Z},A.executeMode,Y),r8($,Q);let U=process.hrtime.bigint(),X=D?.dependencies??await o2(A,Q),G=X.hasAPIKeyAtStartup,V=X.serverStatus==="pending";if(P.info("Interactive auth startup mode",{deferInteractiveAuth:V,hasAPIKeyAtStartup:G,executeMode:A.executeMode,headless:Boolean(Q.headless)}),!D)F("runMainThread:createThreadDependencies",U);let{serverStatus:K}=X;if(!V&&lE(K))throw Ne(K,A.ampURL);let z=AA(K)?K:null,I=z?.user.email,W=!!(I&&p7(I));if(W)_Y0();if(!V)await JQ1($,Q,K);let H=TI(K),q=H?.features??[],N=H?.team??null,w=Ux(Q,H);if(w instanceof Error)P3(w.message);if(z&&!eM(Q.mode,I))throw new n1(`Agent mode '${Q.mode}' is only available for Amp employees`,1);let O=Q.threadId&&P9(Q.threadId)?Q.threadId:void 0;U=process.hrtime.bigint();let L=await Zz0(X);F("runMainThread:createWorkerDeps",U);let j=A.executeMode?void 0:async($0)=>we($0,"interactive"),k={threadService:X.threadService,workerDeps:L,createThread:async($0)=>{let j0=V?await X.serverStatusPromise:K,Q0=await Qo(A.settings,process.cwd(),TI(j0),w);if(Q0 instanceof Error)P3(Q0.message);return T91(L,{threadMeta:Q0,agentMode:$0??Q.mode,onFirstAssistantMessage:j})},validateThreadOwnership:async($0,j0)=>{if(j0?.nonBlockingOwnershipCheck){Y76($0,X.configService,X.viewerUserIDPromise).catch((Q0)=>{if(Q0 instanceof n1){if(j0.onOwnershipError){j0.onOwnershipError(Q0,$0);return}Sz(Q0,$0);return}P.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Q0})});return}try{await Y76($0,X.configService,X.viewerUserIDPromise)}catch(Q0){if(Q0 instanceof n1)throw Q0;P.warn("Failed to validate thread ownership in CLI, allowing to open",{error:Q0})}},switchThreadVisibility:w,switchThreadAgentMode:Q.mode,onFirstAssistantMessage:j,handleError:Sz},_=async()=>{try{return k56(k,Q.threadId,{nonBlockingOwnershipCheck:Q.nonBlockingThreadOwnershipCheck})}catch($0){if($0 instanceof n1)throw $0;throw await Sz($0,Q.threadId),Error("handleError should have called process.exit()")}},f=(async()=>{if(V){P.info("Skipping initial free tier status fetch until auth is complete");return}try{let $0=await X.configService.getLatest(),j0=Yd($0),Q0=await e4.getUserFreeTierStatus({},{config:X.configService,signal:AbortSignal.timeout(j0)});if(Q0.ok)return P.info("User free tier status:",Q0),Q0.result;return}catch($0){P.error("Failed to fetch free tier status:",$0);return}})(),b=!A.executeMode?new $21:null,v,y=null;if(b)v=b,y=(async()=>{let $0=V?await X.serverStatusPromise:X.serverStatus;if(lE($0))throw Ne($0,A.ampURL);await JQ1($,Q,$0);let j0=process.hrtime.bigint(),Q0=await _();if(F("runMainThread:createThreadPool",j0),b.attach(Q0),Y){let M0=await k1(Q0.threadHandles$);if(!M0)throw new n1("No active thread is available yet.",1);await M0.sendMessage({content:[{type:"text",text:Y}]})}})(),y.catch(async($0)=>{let j0=$0 instanceof Error?$0:Error(String($0));b.setInitError(j0),await Sz($0,Q.threadId)});else U=process.hrtime.bigint(),v=await _(),F("runMainThread:createThreadPool",U);let p=Q.notifications!==void 0?Q.notifications:!A.executeMode;U=process.hrtime.bigint();let c=await X.configService.getLatest();if(F("runMainThread:configService.getLatest",U),U=process.hrtime.bigint(),q16({configService:X.configService,threadService:X.threadService,threadPool:v,config:c,useNotifications:p}),F("runMainThread:createLegacyTuiNotificationService",U),A.executeMode){m01(X.mcpService,A.settings);let $0=Fz0($,Q),j0=await rz(),Q0=O?$0:LZ0({agentMode:Q.mode,explicitEffort:$0,sessionState:j0}),M0={userInput:Y,stdinInput:E,dependencies:X,streamJson:Z,streamJsonInput:!!Q.streamJsonInput,streamJsonThinking:!!Q.streamJsonThinking,stats:!!Q.stats,ampURL:A.ampURL,isInternalUser:W,agentMode:Q.mode,reasoningEffort:Q0,labels:Q.label},n=await Hk4({threadPool:v,...M0});if(await we(n,"execute"),Q.archive)await X.threadService.archive(n,!0);await X.asyncDispose(),process.exit(0)}let g=!1,i=!1;if(Q.jetbrains||Q.ide){await y20();let $0=await oE({jetbrainsOnly:Q.jetbrains});if($0.length===0){if(Q.jetbrains)g=!await X.configService.get("jetbrains.skipInstall")}else if($0.length===1){let j0=$0[0];if(j0)o5.selectConfig(j0)}else i=!0}U=process.hrtime.bigint();let r=lE0("0.0.1779354043-g150a4f",X.settingsStorage,{startDelayMs:3000});F("runMainThread:createUpdateService",U),U=process.hrtime.bigint();let A0=new MZ0(X.mcpService,A.settings.getWorkspaceRootPath());if(F("runMainThread:createMcpTrustHandler",U),Y&&A.executeMode){let $0=await k1(v.threadHandles$);if(!$0)throw new n1("No active thread is available yet.",1);await $0.sendMessage({content:[{type:"text",text:Y}]})}U=process.hrtime.bigint();let I0=await rz();F("runMainThread:loadSessionState",U),P.info("Loaded session state:",I0);let E0=Fz0($,Q),W0={...I0,launchCount:I0.launchCount+1,lastReasoningEffortByMode:E0?{...I0.lastReasoningEffortByMode,[Q.mode]:E0}:I0.lastReasoningEffortByMode};zQ(($0)=>({...$0,launchCount:$0.launchCount+1}));try{if(U=process.hrtime.bigint(),await i16({history:new mo,fuzzyServer:X.fuzzyServer,settingsStorage:X.settingsStorage,threadService:X.threadService,skillService:X.skillService,configService:X.configService,secretStorage:X.secretStorage,internalAPIClient:e4,threadPool:v,createSystemPromptDeps:async()=>K76(X),ideClient:o5,mcpService:X.mcpService,toolboxService:X.toolboxService,mcpTrustHandler:A0,updateService:r,pluginPlatform:X.pluginPlatform,pluginService:X.pluginService},{initialServerStatus:X.serverStatus,stdout:process.stdout,hasAPIKeyAtStartup:X.hasAPIKeyAtStartup,ampURL:A.ampURL,startupThreadID:O,showJetBrainsInstaller:g,showIdePickerHint:i,openThreadSwitcher:Q.openThreadSwitcher,jetbrainsMode:Q.jetbrains,clientId:J25,logFile:{path:B},sessionState:W0,freeTierStatusPromise:f,workspace:N??null,features:q,isInternalUser:W,initialAgentMode:$.getOptionValueSourceWithGlobals("mode")==="cli"?Q.mode:void 0,splashOrbVisualStyle:Q.neoOrb?"neo":"classic",buildTimestamp:"2026-05-21T09:06:08.537Z"},($0)=>new Z21({...$0,threadPool:$0.threadPool},(j0)=>new u91({...j0,threadState:j0.threadState}))),F("runMainThread:mountApp-returned",U),y)await y}finally{await v.dispose().catch(($0)=>{P.error("Failed to dispose thread pool during shutdown",$0)})}await X.asyncDispose(),F("runMainThread:dependencies.asyncDispose",J),process.exit(0)}async function d3(A){if(P.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)H$.write(`Warning: --interactive flag is deprecated. Interactive mode is now the default unless --execute is used or output is redirected.
7305
+ `);let Q=!!A.execute||!process.stdout.isTTY&&!A.streamJson,$=process.stdout.isTTY&&process.stderr.isTTY;P.info("Execution mode resolved",{executeMode:Q,stdoutTTY:process.stdout.isTTY,stderrTTY:process.stderr.isTTY,streamJson:A.streamJson,executeFlag:A.execute});let B=await b$4({get:async(Y)=>{if(Y!==Kc)return;try{let E=await G76(DQ1,"utf-8");return JSON.parse(E).installationID}catch{return}},set:async(Y,E)=>{if(Y!==Kc)return;await Q25(qe.dirname(DQ1),{recursive:!0}),await $25(DQ1,JSON.stringify({installationID:E},null,2),{mode:384})}},{clientType:"cli",platform:A70()});p14(B);let D=await p06({...A,workspaceTrust:{current:!0,changes:Ed},getHook:process.env.AMP_URL?(Y,E)=>{if(Y==="url")return Promise.resolve(process.env.AMP_URL);return E()}:void 0});if(A.mcpConfig){let Y=await cg4(A.mcpConfig);D=lg4(D,Y)}let J=qe.dirname(D.getSettingsFilePath());fu4(id,J),D=We1(D);let F=await D.get("url","admin")??await D.get("url","global");if(!F)F=a7;if(P.info("Resolved Amp URL",{ampURL:F,settingsFile:D.getSettingsFilePath(),workspaceRoot:D.getWorkspaceRootPath()}),!BH(F))P.info("Targeting custom Amp server",{ampURL:F});return{executeMode:Q,isTTY:$,ampURL:F,settings:D,secrets:x06(await n51(A,D))}}function _25(A){let Q={};for(let $=0;$<A.length;$++){let B=A[$];if(B?.startsWith("--")){let J=B.slice(2).replace(/-([a-z])/g,(Y,E)=>E.toUpperCase()),F=A[$+1];if(F&&!F.startsWith("--"))Q[J]=F,$++}}return Q}function T25(A,Q){let $=A.includes("--headless")||A.some((D)=>D.startsWith("--headless=")),B=qe.resolve(Q.logFile??process.env.AMP_LOG_FILE??($?D25:Ao));return{logLevel:Q.logLevel??process.env.AMP_LOG_LEVEL??"info",logFile:B}}async function v25(){uv4();let A=_25(process.argv),Q=T25(process.argv,A),$=yv4(Q);CY0("silent");let B=process.argv.includes("--no-color"),D=process.argv.includes("--color"),J=process.stdout.isTTY&&process.stderr.isTTY;if(B||!D&&!J)t0.level=0;if(Y25(P),P.info("Starting Amp CLI.",{version:"0.0.1779354043-g150a4f",buildTimestamp:"2026-05-21T09:06:08.537Z"}),process.platform==="win32"&&xj())mb4();if(parseInt(process.version.slice(1).split(".")[0]??"")<20)throw new n1(d9.nodeVersion(process.version),1,"Please upgrade your Node.js installation from https://nodejs.org");await L25($).parseAsync(process.argv)}ku4().startActiveSpan("main",async(A)=>{process.on("exit",()=>A.end()),await v25().catch(Sz)});async function k25(A,Q){let $=A.ampURL.includes("localhost")||A.ampURL.includes("127.0.0.1");if(process.env.AMP_URL&&!$)await A.settings.set("url",process.env.AMP_URL,"global"),$3.write(`Saving custom server URL to settings: ${process.env.AMP_URL}
7306
7306
  `);else if(!BH(A.ampURL))$3.write(`Logging in to ${new URL(A.ampURL).hostname}
7307
7307
  `);let B=process.env.AMP_API_KEY;if(B)$3.write(`API key found in environment variable, storing...
7308
7308
  `),await Q.set("apiKey",B,A.ampURL),$3.write(`API key successfully stored.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sourcegraph/amp",
3
- "version": "0.0.1779345702-g49e69d",
3
+ "version": "0.0.1779354043-g150a4f",
4
4
  "description": "Renamed to @ampcode/cli - see https://ampcode.com/news/npm-package-changes",
5
5
  "homepage": "https://ampcode.com/",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -8,7 +8,7 @@
8
8
  "amp": "node_modules/@ampcode/cli/bin/amp.exe"
9
9
  },
10
10
  "dependencies": {
11
- "@ampcode/cli": "0.0.1779345702-g49e69d"
11
+ "@ampcode/cli": "0.0.1779354043-g150a4f"
12
12
  },
13
13
  "files": [
14
14
  "dist/main.js",