From b6ba0e382e8f120c2b32f6033b7951ee394fdd1a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:24:23 +0000 Subject: [PATCH 1/3] Initial plan From 4b17fa27559e4a7c798826ad7d0ed36c36bfaf7b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:35:47 +0000 Subject: [PATCH 2/3] Add VSCode extension configuration to disable CLI colors Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- packages/core/src/constants.ts | 1 + packages/vscode/package.json | 5 +++++ packages/vscode/src/config.ts | 4 +++- packages/vscode/src/fragmentcommands.ts | 5 ++++- packages/vscode/src/servermanager.ts | 29 +++++++++++++++---------- packages/vscode/src/taskprovider.ts | 5 ++++- 6 files changed, 34 insertions(+), 15 deletions(-) diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 80fc1a9058..549b81f1b8 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -326,6 +326,7 @@ export const PLACEHOLDER_API_KEY = "" export const VSCODE_CONFIG_CLI_VERSION = "cli.version" export const VSCODE_CONFIG_CLI_PATH = "cli.path" export const VSCODE_CONFIG_CLI_PACKAGE_MANAGER = "cli.packageManager" +export const VSCODE_CONFIG_CLI_NO_COLORS = "cli.noColors" export const CONSOLE_COLOR_INFO = 32 export const CONSOLE_COLOR_DEBUG = 90 diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 55e3a79c0f..4ccdd56a45 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -373,6 +373,11 @@ "genaiscript.cli.path": { "type": "string", "description": "Path to GenAIScript CLI. Default uses npx." + }, + "genaiscript.cli.noColors": { + "type": "boolean", + "default": false, + "description": "Disable color output in the CLI. Default is false (colors enabled)." } } } diff --git a/packages/vscode/src/config.ts b/packages/vscode/src/config.ts index 5c549e65c5..0e9ed0814c 100644 --- a/packages/vscode/src/config.ts +++ b/packages/vscode/src/config.ts @@ -4,6 +4,7 @@ import { VSCODE_CONFIG_CLI_PACKAGE_MANAGER, VSCODE_CONFIG_CLI_PATH, VSCODE_CONFIG_CLI_VERSION, + VSCODE_CONFIG_CLI_NO_COLORS, } from "../../core/src/constants" import { CORE_VERSION, VSCODE_CLI_VERSION } from "../../core/src/version" import { semverParse, semverSatisfies } from "../../core/src/semver" @@ -21,11 +22,12 @@ export async function resolveCli(state: ExtensionState) { | "npm" | "yarn" | "pnpm" // TODO: add support for bun + const noColors = config.get(VSCODE_CONFIG_CLI_NO_COLORS) as boolean const gv = semverParse(CORE_VERSION) if (!semverSatisfies(cliVersion, ">=" + gv.major + "." + gv.minor)) vscode.window.showWarningMessage( TOOL_ID + ` - genaiscript cli version (${cliVersion}) outdated, please update to ${CORE_VERSION}` ) - return { cliPath, cliVersion, packageManager } + return { cliPath, cliVersion, packageManager, noColors } } diff --git a/packages/vscode/src/fragmentcommands.ts b/packages/vscode/src/fragmentcommands.ts index aa273862f1..e2abd81588 100644 --- a/packages/vscode/src/fragmentcommands.ts +++ b/packages/vscode/src/fragmentcommands.ts @@ -136,7 +136,7 @@ export function activateFragmentCommands(state: ExtensionState) { ) if (parameters === undefined) return - const { cliPath, cliVersion } = await resolveCli(state) + const { cliPath, cliVersion, noColors } = await resolveCli(state) const args = [ "run", vscode.workspace.asRelativePath(script.filename), @@ -144,6 +144,9 @@ export function activateFragmentCommands(state: ExtensionState) { vscode.workspace.asRelativePath(file.fsPath) ), ] + if (noColors) { + args.push("--no-colors") + } for (const [name, value] of Object.entries(parameters)) { args.push(`--vars`, `${name}=${value}`) } diff --git a/packages/vscode/src/servermanager.ts b/packages/vscode/src/servermanager.ts index ee2daf88f0..c74eb2d612 100644 --- a/packages/vscode/src/servermanager.ts +++ b/packages/vscode/src/servermanager.ts @@ -187,12 +187,13 @@ export class TerminalServerManager logVerbose( `starting server on port ${this._port} at ${cwd} (DEBUG=${debug || ""})` ) - const { cliPath, cliVersion, packageManager } = await resolveCli( + const { cliPath, cliVersion, packageManager, noColors } = await resolveCli( this.state ) const githubCopilotChatClient = isLanguageModelsAvailable() ? "--github-copilot-chat-client" : "" + const noColorsArg = noColors ? "--no-colors" : "" if (this._client) this._client.reconnectAttempts = 0 this._terminalStartAttempts++ @@ -210,21 +211,25 @@ export class TerminalServerManager }) if (cliPath) this._terminal.sendText( - `node "${cliPath}" serve --port ${this._port} --dispatch-progress --cors "*" ${githubCopilotChatClient}` + `node "${cliPath}" serve --port ${this._port} --dispatch-progress --cors "*" ${githubCopilotChatClient} ${noColorsArg}`.trim() ) else { + const args = [ + `${TOOL_ID}@${cliVersion}`, + `serve`, + `--port`, + `${this._port}`, + `--dispatch-progress`, + `--cors`, + `"*"`, + githubCopilotChatClient, + ] + if (noColors) { + args.push("--no-colors") + } const pkg = await packageResolveExecute( cwd, - [ - `${TOOL_ID}@${cliVersion}`, - `serve`, - `--port`, - `${this._port}`, - `--dispatch-progress`, - `--cors`, - `"*"`, - githubCopilotChatClient, - ], + args.filter(arg => arg !== ""), { agent: packageManager } ) const cmd = [shellQuote([pkg.command]), ...pkg.args].join(" ") diff --git a/packages/vscode/src/taskprovider.ts b/packages/vscode/src/taskprovider.ts index 7eb9967832..04ba84c742 100644 --- a/packages/vscode/src/taskprovider.ts +++ b/packages/vscode/src/taskprovider.ts @@ -13,7 +13,7 @@ export async function activeTaskProvider(state: ExtensionState) { try { if (!state.project) return [] - const { cliPath, cliVersion } = await resolveCli(state) + const { cliPath, cliVersion, noColors } = await resolveCli(state) const exec = shellQuote([cliPath || `npx`]) const exeArgs = cliPath ? [] @@ -27,6 +27,9 @@ export async function activeTaskProvider(state: ExtensionState) { script.filename ) const args = [...exeArgs, "run", scriptName] + if (noColors) { + args.push("--no-colors") + } if (vscode.window.activeTextEditor) args.push("${relativeFile}") const task = new vscode.Task( From b03fa01b2e7a78c810a3f40d808cce4e0111b942 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Sep 2025 16:39:11 +0000 Subject: [PATCH 3/3] Improve code quality in servermanager.ts CLI argument handling Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- packages/vscode/src/servermanager.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/vscode/src/servermanager.ts b/packages/vscode/src/servermanager.ts index c74eb2d612..ef258c326c 100644 --- a/packages/vscode/src/servermanager.ts +++ b/packages/vscode/src/servermanager.ts @@ -193,7 +193,6 @@ export class TerminalServerManager const githubCopilotChatClient = isLanguageModelsAvailable() ? "--github-copilot-chat-client" : "" - const noColorsArg = noColors ? "--no-colors" : "" if (this._client) this._client.reconnectAttempts = 0 this._terminalStartAttempts++ @@ -209,10 +208,10 @@ export class TerminalServerManager }), hideFromUser, }) - if (cliPath) - this._terminal.sendText( - `node "${cliPath}" serve --port ${this._port} --dispatch-progress --cors "*" ${githubCopilotChatClient} ${noColorsArg}`.trim() - ) + if (cliPath) { + const cmd = `node "${cliPath}" serve --port ${this._port} --dispatch-progress --cors "*" ${githubCopilotChatClient}${noColors ? " --no-colors" : ""}`.trim() + this._terminal.sendText(cmd) + } else { const args = [ `${TOOL_ID}@${cliVersion}`, @@ -221,15 +220,17 @@ export class TerminalServerManager `${this._port}`, `--dispatch-progress`, `--cors`, - `"*"`, - githubCopilotChatClient, + `"*"` ] + if (githubCopilotChatClient) { + args.push(githubCopilotChatClient) + } if (noColors) { args.push("--no-colors") } const pkg = await packageResolveExecute( cwd, - args.filter(arg => arg !== ""), + args, { agent: packageManager } ) const cmd = [shellQuote([pkg.command]), ...pkg.args].join(" ")