@sourcegraph/amp 0.0.1755875746-gf5d074 → 0.0.1755878482-g246f9c

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 +3 -3
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -5063,7 +5063,7 @@ allow ${z}${G?` ${G}`:""}`}let J={stdin:process.stdin,stdout:process.stdout,stde
5063
5063
  ${U}`;if(B==="pnpm"&&U.includes("Unable to find the global bin directory"))F+=`
5064
5064
 
5065
5065
  Hint: Try running "pnpm setup" to configure pnpm global directory, or use npm instead:
5066
- npm install -g @sourcegraph/amp`;G(new Error(F))}},error:(Z)=>{if(!Y)Y=!0,G(new Error(`Failed to spawn ${B}: ${Z.message}`))},complete:()=>{if(!Y)Y=!0,z()}})})}var Mi1=Fi1.join(J00||Fi1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function tr8(A,Q){let B={};if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")B.dangerouslyAllowAll=Q.dangerouslyAllowAll;if(A.getOptionValueSourceWithGlobals("tryGpt5")==="cli")B.gpt5=Q.tryGpt5;if(A.getOptionValueSourceWithGlobals("blend")==="cli")B["internal.blend"]=Q.blend;return B}function Qj(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")pY("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("tryGpt5")==="cli")pY("gpt5",Q.tryGpt5);if(A.getOptionValueSourceWithGlobals("blend")==="cli")pY("internal.blend",Q.blend)}var xO2=j6.union([j6.object({command:j6.string(),args:j6.array(j6.string()).optional(),env:j6.record(j6.string(),j6.string()).optional()}).strict(),j6.object({url:j6.string()}).strict()]),hO2=j6.record(j6.string(),xO2);async function Wi1(A){try{await yO2(Fi1.dirname(Mi1),{recursive:!0}),await bO2(Mi1,A,"utf-8")}catch(Q){E1.debug("Failed to save last thread ID",Q)}}async function mO2(){try{return(await GNA(Mi1,"utf-8")).trim()}catch(A){return null}}async function uO2(A){let Q;try{Q=JSON.parse(A)}catch(B){throw new Error(`Failed to parse --mcp-config as JSON: ${B instanceof Error?B.message:String(B)}`)}try{return hO2.parse(Q)}catch(B){if(B instanceof j6.ZodError){let J=B.issues.map((D)=>`${D.path.join(".")}: ${D.message}`).join(", ");throw new Error(`Invalid MCP server configuration: ${J}`)}throw new Error(`Failed to validate MCP server configuration: ${String(B)}`)}}function pO2(A,Q){return{...A,async get(B){if(B==="mcpServers"){let J=await A.get(B)||{},D={};if(typeof J==="object")for(let[z,G]of Object.entries(J))D[z]={...G,_target:"global"};for(let[z,G]of Object.entries(Q))D[z]={...G,_target:"workspace"};return D}return A.get(B)},async keys(){let B=await A.keys();if(!B.includes("mcpServers"))B.push("mcpServers");return B},[Symbol.dispose](){A[Symbol.dispose]()}}}async function cO2(A){let Q=await cz(`/api/threads/${A}`);if(!Q.ok){let B=await Q.text();if(Q.status===404||B.includes("not found"))throw new FB(gX.threadNotFound(A));throw new FB(`Failed to load thread ${A}`,1,`Use 'amp threads share ${A} --support' to share this with the Amp team if this persists.`)}return await Q.json()}var BNA=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} sound notifications (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)`,deprecated:!0},{name:"settingsFile",long:"settings-file",type:"option",default:process.env.AMP_SETTINGS_FILE??hX,description:`Custom settings file path (overrides the default location ${hX})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(E1).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:"Set log file location"},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","jsonl","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:yR(),description:(A)=>A?"Enable JetBrains integration. You must start Amp in the same directory as your JetBrains project. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration.",hidden:!0},{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:"tryGpt5",long:"try-gpt5",type:"switch",default:!1,description:"Try GPT-5 as the primary agent model (limited time; see https://ampcode.com/news/gpt-5)"},{name:"blend",long:"blend",type:"option",description:"Internal blend mode configuration",choices:["alloy-random"],hidden:!0}],JNA=(A)=>("deprecated"in A)&&A.deprecated===!0,dO2=(A)=>("hidden"in A)&&A.hidden===!0,lO2=(A)=>("default"in A),iO2=(A)=>("default"in A)?A.default:void 0;function aO2(A,Q){let B=Q.args[0],J=Q.commands.map((z)=>z.name());if(B&&!B.includes(" ")&&B.length<30&&!/[./\\]/.test(B)){let z=J.filter((X)=>B.includes(X)||X.includes(B)),G="Run amp --help for a list of available commands.";if(z.length>0)G=`Did you mean: ${z.join(", ")}? Or run amp --help for all commands.`;throw new FB(gX.unknownCommand(B),1,G)}}function vX1(A){return{...A,getThreadEnvironment:$BA,createFileSystem:()=>ex,createFileChangeTrackerForThread:(Q)=>{let B=new Ah(ex);return P40(B,ex,Q)},generateThreadTitle:s01,internalAPIClient:UK}}var wi1=V6.file(gO2.homedir()),XNA=process.env.XDG_CONFIG_HOME?V6.file(process.env.XDG_CONFIG_HOME):O6.joinPath(wi1,".config");async function Bj(A,Q,B=!1){So1("0.0.1755875746-gf5d074"),vo1(Q.jetbrains);let J=TZ1({storage:A.settings,secretStorage:A.secrets,workspaceRoots:KA.of([V6.file(process.cwd())]),defaultAmpURL:A.ampURL,defaultCacheDirectory:Hp1,homeDir:wi1,userConfigDir:XNA}),D=await t8();E1.debug("Global configuration initialized",{hasCacheDirectory:!!D.settings.cacheDirectory,settingsKeys:Object.keys(D.settings)});let z=G11(bs()),G=f90({configService:J,toolService:z});if(process.env.AMP_TOOLBOX)p30(z,ex,U81);try{await G.initialized}catch(I){E1.warn("Failed to wait for MCP servers, continuing anyway:",I)}if(Q.jetbrains)try{E1.debug("ide-client",{terminalEmulator:process.env.TERMINAL_EMULATOR}),await XK.start()}catch(I){let N=I instanceof Error?I.message:String(I);OD(`Failed to connect to JetBrains IDE: ${N}`)}let X=D.settings["experimental.reviewTool"]??!1,K=D.settings["experimental.tools"]??[];C2A(z,!1,X,K,Q.jetbrains);let Y;if(!A.executeMode)Y=new dz1(process.cwd(),{},!0);else Y=new class extends dz1{async start(){}async query(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};if(!await A.secrets.get("apiKey",A.ampURL)){if(f4.write(`No API key found. Starting login flow...
5066
+ npm install -g @sourcegraph/amp`;G(new Error(F))}},error:(Z)=>{if(!Y)Y=!0,G(new Error(`Failed to spawn ${B}: ${Z.message}`))},complete:()=>{if(!Y)Y=!0,z()}})})}var Mi1=Fi1.join(J00||Fi1.join(process.env.HOME||process.cwd(),".local","state"),"amp","last-thread-id");function tr8(A,Q){let B={};if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")B.dangerouslyAllowAll=Q.dangerouslyAllowAll;if(A.getOptionValueSourceWithGlobals("tryGpt5")==="cli")B.gpt5=Q.tryGpt5;if(A.getOptionValueSourceWithGlobals("blend")==="cli")B["internal.blend"]=Q.blend;return B}function Qj(A,Q){if(A.getOptionValueSourceWithGlobals("dangerouslyAllowAll")==="cli")pY("dangerouslyAllowAll",Q.dangerouslyAllowAll);if(A.getOptionValueSourceWithGlobals("tryGpt5")==="cli")pY("gpt5",Q.tryGpt5);if(A.getOptionValueSourceWithGlobals("blend")==="cli")pY("internal.blend",Q.blend)}var xO2=j6.union([j6.object({command:j6.string(),args:j6.array(j6.string()).optional(),env:j6.record(j6.string(),j6.string()).optional()}).strict(),j6.object({url:j6.string()}).strict()]),hO2=j6.record(j6.string(),xO2);async function Wi1(A){try{await yO2(Fi1.dirname(Mi1),{recursive:!0}),await bO2(Mi1,A,"utf-8")}catch(Q){E1.debug("Failed to save last thread ID",Q)}}async function mO2(){try{return(await GNA(Mi1,"utf-8")).trim()}catch(A){return null}}async function uO2(A){let Q;try{Q=JSON.parse(A)}catch(B){throw new Error(`Failed to parse --mcp-config as JSON: ${B instanceof Error?B.message:String(B)}`)}try{return hO2.parse(Q)}catch(B){if(B instanceof j6.ZodError){let J=B.issues.map((D)=>`${D.path.join(".")}: ${D.message}`).join(", ");throw new Error(`Invalid MCP server configuration: ${J}`)}throw new Error(`Failed to validate MCP server configuration: ${String(B)}`)}}function pO2(A,Q){return{...A,async get(B){if(B==="mcpServers"){let J=await A.get(B)||{},D={};if(typeof J==="object")for(let[z,G]of Object.entries(J))D[z]={...G,_target:"global"};for(let[z,G]of Object.entries(Q))D[z]={...G,_target:"workspace"};return D}return A.get(B)},async keys(){let B=await A.keys();if(!B.includes("mcpServers"))B.push("mcpServers");return B},[Symbol.dispose](){A[Symbol.dispose]()}}}async function cO2(A){let Q=await cz(`/api/threads/${A}`);if(!Q.ok){let B=await Q.text();if(Q.status===404||B.includes("not found"))throw new FB(gX.threadNotFound(A));throw new FB(`Failed to load thread ${A}`,1,`Use 'amp threads share ${A} --support' to share this with the Amp team if this persists.`)}return await Q.json()}var BNA=[{name:"notifications",long:"notifications",type:"flag",description:(A)=>`${A?"Enable":"Disable"} sound notifications (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)`,deprecated:!0},{name:"settingsFile",long:"settings-file",type:"option",default:process.env.AMP_SETTINGS_FILE??hX,description:`Custom settings file path (overrides the default location ${hX})`},{name:"logLevel",long:"log-level",type:"option",description:`Set log level (${Object.keys(E1).join(", ")})`},{name:"logFile",long:"log-file",type:"option",description:"Set log file location"},{name:"format",long:"format",type:"option",description:"output using the standard or new-ui. Options: `ui`, `new-ui`",choices:["ui","jsonl","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:yR(),description:(A)=>A?"Enable JetBrains integration. You must start Amp in the same directory as your JetBrains project. When enabled, Amp automatically includes your open JetBrains file and text selection with every message.":"Disable JetBrains integration.",hidden:!0},{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:"tryGpt5",long:"try-gpt5",type:"switch",default:!1,description:"Try GPT-5 as the primary agent model (limited time; see https://ampcode.com/news/gpt-5)"},{name:"blend",long:"blend",type:"option",description:"Internal blend mode configuration",choices:["alloy-random"],hidden:!0}],JNA=(A)=>("deprecated"in A)&&A.deprecated===!0,dO2=(A)=>("hidden"in A)&&A.hidden===!0,lO2=(A)=>("default"in A),iO2=(A)=>("default"in A)?A.default:void 0;function aO2(A,Q){let B=Q.args[0],J=Q.commands.map((z)=>z.name());if(B&&!B.includes(" ")&&B.length<30&&!/[./\\]/.test(B)){let z=J.filter((X)=>B.includes(X)||X.includes(B)),G="Run amp --help for a list of available commands.";if(z.length>0)G=`Did you mean: ${z.join(", ")}? Or run amp --help for all commands.`;throw new FB(gX.unknownCommand(B),1,G)}}function vX1(A){return{...A,getThreadEnvironment:$BA,createFileSystem:()=>ex,createFileChangeTrackerForThread:(Q)=>{let B=new Ah(ex);return P40(B,ex,Q)},generateThreadTitle:s01,internalAPIClient:UK}}var wi1=V6.file(gO2.homedir()),XNA=process.env.XDG_CONFIG_HOME?V6.file(process.env.XDG_CONFIG_HOME):O6.joinPath(wi1,".config");async function Bj(A,Q,B=!1){So1("0.0.1755878482-g246f9c"),vo1(Q.jetbrains);let J=TZ1({storage:A.settings,secretStorage:A.secrets,workspaceRoots:KA.of([V6.file(process.cwd())]),defaultAmpURL:A.ampURL,defaultCacheDirectory:Hp1,homeDir:wi1,userConfigDir:XNA}),D=await t8();E1.debug("Global configuration initialized",{hasCacheDirectory:!!D.settings.cacheDirectory,settingsKeys:Object.keys(D.settings)});let z=G11(bs()),G=f90({configService:J,toolService:z});if(process.env.AMP_TOOLBOX)p30(z,ex,U81);try{await G.initialized}catch(I){E1.warn("Failed to wait for MCP servers, continuing anyway:",I)}if(Q.jetbrains)try{E1.debug("ide-client",{terminalEmulator:process.env.TERMINAL_EMULATOR}),await XK.start()}catch(I){let N=I instanceof Error?I.message:String(I);OD(`Failed to connect to JetBrains IDE: ${N}`)}let X=D.settings["experimental.reviewTool"]??!1,K=D.settings["experimental.tools"]??[];C2A(z,!1,X,K,Q.jetbrains);let Y;if(!A.executeMode)Y=new dz1(process.cwd(),{},!0);else Y=new class extends dz1{async start(){}async query(){return[]}getStats(){return{state:"unstarted",stats:[]}}dispose(){}};if(!await A.secrets.get("apiKey",A.ampURL)){if(f4.write(`No API key found. Starting login flow...
5067
5067
  `),!await rO2(A))process.exit(1)}let q=Z40(),Z=new aw1(q),U=new dw1(q),F=new G31(Z),E=Q.notifications!==void 0?Q.notifications:!A.executeMode,M=R2A({playNotificationSound:async(I)=>{if(E){if(L2A(I),!(B?Ld1():fWA())&&D.settings["notifications.system.enabled"]!==!1){if(I==="idle")process.stdout.write("\x1B]777;notify;Amp;Agent is ready\x1B\\");else if(I==="requires-user-input")process.stdout.write("\x1B]777;notify;Amp;Waiting for approval\x1B\\")}}},windowFocused:()=>Promise.resolve(!1),threadService:Z});E1.info("Starting Amp background services");let W=fK0({threadService:Z,threadHistoryService:U,isExtensionDevelopment:!1}),w={configService:J,toolService:z,mcpService:G,threadService:Z,threadHistoryService:U,threadSummaryService:F,threadSyncService:W,threadStorage:q,secretStorage:A.secrets,settingsStorage:A.settings,fuzzyServer:Y,notificationService:M};return{...w,async dispose(){await w.mcpService.dispose(),w.configService.unsubscribe(),w.toolService.dispose(),w.fuzzyServer.dispose(),w.threadSyncService.dispose(),w.settingsStorage[Symbol.dispose]()}}}async function rO2(A){if(!A.executeMode){if(await tz1("Would you like to log in to Amp?",["(y)es","(n)o"])!="y")return f4.write(`Login cancelled. Run the command again to retry.
5068
5068
  `),!1}return await KNA(A)}async function KNA(A){let Q=fO2(32).toString("hex"),B=await HEA(A.ampURL,Q);f4.write(`If your browser doesn't open automatically, visit:
5069
5069
 
@@ -5077,7 +5077,7 @@ ${J0.blue.bold(B)}
5077
5077
  Login successful! You can now use the Amp CLI.
5078
5078
  `),!0}catch(J){return J7.write(`
5079
5079
  Login failed: ${J instanceof Error?J.message:String(J)}
5080
- `),!1}}function nO2(A){let Q=A.outputHelp.bind(A);A.outputHelp=function(B){let J="",D=this.configureOutput();if(this.configureOutput({writeOut:(z)=>{J+=z},writeErr:(z)=>{J+=z}}),typeof B==="function")B(J);else Q(B);this.configureOutput(D),WEA(J)}}function YNA(A){nO2(A);for(let Q of A.commands)YNA(Q)}function sO2(){let A=new $J1().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, team)").configureOutput({writeErr:()=>{}});A.exitOverride((K)=>{if(K.code==="commander.help"||K.code==="commander.version"||K.exitCode===0)qf(),process.exit(0);let Y=K.originalError??K;Ra(Y)}),A.option("-V, --version","output the version number",()=>{f4.write(`0.0.1755875746-gf5d074 (released 2025-08-22T15:20:07.572Z)
5080
+ `),!1}}function nO2(A){let Q=A.outputHelp.bind(A);A.outputHelp=function(B){let J="",D=this.configureOutput();if(this.configureOutput({writeOut:(z)=>{J+=z},writeErr:(z)=>{J+=z}}),typeof B==="function")B(J);else Q(B);this.configureOutput(D),WEA(J)}}function YNA(A){nO2(A);for(let Q of A.commands)YNA(Q)}function sO2(){let A=new $J1().name("amp").description("AI-powered coding assistant").option("--visibility <visibility>","Set thread visibility (private, public, team)").configureOutput({writeErr:()=>{}});A.exitOverride((K)=>{if(K.code==="commander.help"||K.code==="commander.version"||K.exitCode===0)qf(),process.exit(0);let Y=K.originalError??K;Ra(Y)}),A.option("-V, --version","output the version number",()=>{f4.write(`0.0.1755878482-g246f9c (released 2025-08-22T16:06:06.302Z)
5081
5081
  `),process.exit(0)}),A.addHelpText("after",YEA()),A.configureHelp({formatHelp:qEA}),A.command("logout").description("Log out by removing stored API key").action(async(K,Y)=>{let q=Y.optsWithGlobals(),Z=await _Z(q);await AC2(Z)}),A.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(K,Y)=>{let q=Y.optsWithGlobals(),Z=await _Z(q);await eO2(Z)});let Q=A.command("threads").alias("t").summary("Manage threads").description("Thread management commands. When no subcommand is provided, defaults to listing threads.").action(async(K,Y)=>{let q=Y.optsWithGlobals(),Z=await _Z(q);await zNA(q,Z,Y)});Q.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, team)").action(async(K,Y)=>{let q=Y.optsWithGlobals(),Z=await _Z(q);await GC2(q,Z,Y)}),Q.command("continue [threadId]").alias("c").summary("Continue an existing thread").description("Continue an existing thread by resuming the conversation. If no thread ID is provided, the most recently used thread will be continued.").option("--pick","Pick a thread interactively from a list").action(async(K,Y,q)=>{let Z=q.optsWithGlobals(),U=await _Z(Z);if(Y.pick){TZ1({storage:U.settings,secretStorage:U.secrets,workspaceRoots:KA.of([V6.file(process.cwd())]),defaultAmpURL:U.ampURL,homeDir:wi1,userConfigDir:XNA});let F=await XC2();if(F)await DNA(Z,U,F,q);else process.exit(0)}else await DNA(Z,U,K,q)}),Q.command("fork [threadId]").alias("f").summary("Fork an existing thread").description("Create a new thread by forking an existing one. This copies the conversation history up to the current point and creates a new thread where you can explore different directions. If no thread ID is provided, the most recently used thread will be forked.").action(async(K,Y,q)=>{let Z=q.optsWithGlobals(),U=await _Z(Z);await zC2(Z,U,K,q)}),Q.command("list").alias("l").summary("List all threads").description("List all your threads with their IDs, names, and last modified times.").action(async(K,Y)=>{let q=Y.optsWithGlobals(),Z=await _Z(q);await zNA(q,Z,Y)}),Q.command("share <threadId>").summary("Share a thread").description("Change thread visibility (private, public, team) or share with Amp support for debugging. Use --visibility to change who can access the thread, or --support to share with the Amp team for troubleshooting.").alias("s").option("--visibility <visibility>","Set thread visibility (private, public, team)").option("--support","Share thread with Amp support for debugging").action(async(K,Y,q)=>{let Z=q.optsWithGlobals(),U=await _Z(Z);await DC2(Z,U,K,q,Y.support)}),Q.command("compact <threadId>").alias("co").summary("Compact a thread").description("Compact a thread by creating a summary of the conversation history. This reduces the thread size while preserving the key information and context, making it more token efficient for future use.").action(async(K,Y,q)=>{let Z=q.optsWithGlobals(),U=await _Z(Z);await JC2(Z,U,K,q)}),SEA(A,async(K,Y)=>{let q=await _Z(Y);Qj(K,Y);let Z=await Bj(q,Y,!1);return{context:q,mcpService:Z.mcpService,toolService:Z.toolService,cleanupTerminal:qf,dispose:Z.dispose.bind(Z)}}),LEA(A);function B(K,Y,q){let U=typeof K.description==="string"?K.description:q===void 0?K.description(!0):K.description(q),F=new xi(Y,U),E=iO2(K);if(E)F.default(E);return F.hidden=dO2(K)||JNA(K),F}for(let K of BNA)switch(K.type){case"flag":{A.addOption(B(K,`--${K.long}`)),A.addOption(B(K,`--no-${K.long}`,!1));break}case"switch":{A.addOption(B(K,`--${K.long}`,!0));break}default:{A.addOption(B(K,`--${K.long} <value>`));break}}let J=new xi("-x, --execute [message]","Use execute mode, optionally with user message. In execute mode, agent will execute provided prompt (either as argument, or via stdin). Only last assistant message is printed. Enabled automatically when redirecting stdout.").default(!1);A.addOption(J);let D=new xi("--stream-json","When used with --execute, output in Claude Code compatible stream JSON format instead of plain text.").default(!1).hideHelp(!0);A.addOption(D);let z=new xi("--tui","Launch experimental TUI interface").hideHelp();A.addOption(z),A.action(async(K,Y)=>{let q=K,Z=await _Z(q);if(Object.keys(q).forEach((U)=>{if(U==="format"&&K.format==="jsonl"){J7.write(J0.yellow(`jsonl format is deprecated. Version "0.0.1753194394-g45962a" is required to use jsonl format.
5082
5082
  `));return}let F=BNA.find((E)=>E.name===U);if(F&&JNA(F)&&!lO2(F))J7.write(J0.yellow(`Warning: '--${U}' flag is deprecated
5083
5083
  `))}),Y.args.length>0)aO2(Z,Y);await qNA(Z,q,Y)});let G=new $J1("doctor").summary("Generate support bundle").description("Generate a support bundle for troubleshooting issues. This collects logs, configuration, and system information into a file that can be shared with Amp support for debugging.").option("--output-dir <path>","Directory to save the support bundle",process.cwd()).option("--include-full-logs","Include full log history",!1).allowUnknownOption(!1).action(async(K)=>{await BC2(K.outputDir,K.includeFullLogs)});A.addCommand(G);let X=new $J1("update").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("--version <version>","Update to a specific version").allowUnknownOption(!1).action(async(K)=>{await QC2(K.version)});return A.addCommand(X),YNA(A),A}async function SX1(A,Q,B){let{thread:J,visibility:D}=B,z=J?.id??jF(),G=vX1(Q);if(J)await Q.threadStorage.set(z,J);let X=await lD.getOrCreateForThread(G,z);if(D)await Q.threadSyncService.updateThreadMeta(z,nz1(D));let K=Q.threadService.observe(z).subscribe(async(Y)=>{if(q7(Y,"assistant"))await Wi1(z),K.unsubscribe()});return await X.resume(),X}async function qNA(A,Q,B){let J=process.stdin,D=rz1(Q);if(D instanceof Error)OD(D.message);let z,G=null;if(typeof Q.execute==="string"){z=Q.execute;let M=(await Jd1()).trimEnd();if(M)G=M}else z=(await Jd1()).trimEnd();if(Q.streamJson&&!A.executeMode)throw new FB("The --stream-json flag requires --execute mode",1,'Use: amp --execute "your message" --stream-json');if(A.executeMode&&z==="")throw new FB("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"
@@ -5097,7 +5097,7 @@ Or pipe via stdin: echo "your message" | amp --execute`);if(z!==""&&!A.executeMo
5097
5097
  `);process.exit(0)}async function QC2(A){try{if(A)J7.write(J0.blue(`Updating to version ${A}...
5098
5098
  `)),await Hi1(A),J7.write(J0.green(`✓ Successfully updated to version ${A}
5099
5099
  `));else{J7.write(J0.blue(`Checking for updates...
5100
- `));let Q=await U11("0.0.1755875746-gf5d074");if(!Q.hasUpdate)J7.write(J0.green(`✓ Amp CLI is already up to date.
5100
+ `));let Q=await U11("0.0.1755878482-g246f9c");if(!Q.hasUpdate)J7.write(J0.green(`✓ Amp CLI is already up to date.
5101
5101
  `)),process.exit(0);J7.write(J0.blue(`Updating to version ${Q.latestVersion}...
5102
5102
  `)),await Hi1(Q.latestVersion),J7.write(J0.green(`✓ Successfully updated to version ${Q.latestVersion}
5103
5103
  `))}process.exit(0)}catch(Q){OD(Q instanceof Error?Q.message:String(Q))}}async function BC2(A,Q){try{J7.write(J0.green("Generating Amp support bundle...")+`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sourcegraph/amp",
3
- "version": "0.0.1755875746-gf5d074",
3
+ "version": "0.0.1755878482-g246f9c",
4
4
  "description": "CLI for Amp, an agentic coding tool in research preview from Sourcegraph.",
5
5
  "homepage": "https://ampcode.com/",
6
6
  "author": {