diff --git a/src/cli/config-manager/auth-plugins.ts b/src/cli/config-manager/auth-plugins.ts index 7bbc8b81..577d80a2 100644 --- a/src/cli/config-manager/auth-plugins.ts +++ b/src/cli/config-manager/auth-plugins.ts @@ -1,4 +1,4 @@ -import { writeFileSync } from "node:fs" +import { readFileSync, writeFileSync } from "node:fs" import type { ConfigMergeResult, InstallConfig } from "../types" import { getConfigDir } from "./config-context" import { ensureConfigDirectoryExists } from "./ensure-config-directory-exists" @@ -55,7 +55,27 @@ export async function addAuthPlugins(config: InstallConfig): Promise `"${p}"`).join(",\n ") + const newContent = content.replace( + pluginArrayRegex, + `"plugin": [\n ${formattedPlugins}\n ]` + ) + writeFileSync(path, newContent) + } else { + const inlinePlugins = plugins.map((p) => `"${p}"`).join(", ") + const newContent = content.replace(/(\{)/, `$1\n "plugin": [${inlinePlugins}],`) + writeFileSync(path, newContent) + } + } else { + writeFileSync(path, JSON.stringify(newConfig, null, 2) + "\n") + } return { success: true, configPath: path } } catch (err) { return { diff --git a/src/cli/config-manager/bun-install.ts b/src/cli/config-manager/bun-install.ts index daf56fc0..052617e4 100644 --- a/src/cli/config-manager/bun-install.ts +++ b/src/cli/config-manager/bun-install.ts @@ -18,8 +18,8 @@ export async function runBunInstallWithDetails(): Promise { try { const proc = Bun.spawn(["bun", "install"], { cwd: getConfigDir(), - stdout: "pipe", - stderr: "pipe", + stdout: "inherit", + stderr: "inherit", }) let timeoutId: ReturnType @@ -44,10 +44,9 @@ export async function runBunInstallWithDetails(): Promise { } if (proc.exitCode !== 0) { - const stderr = await new Response(proc.stderr).text() return { success: false, - error: stderr.trim() || `bun install failed with exit code ${proc.exitCode}`, + error: `bun install failed with exit code ${proc.exitCode}`, } } diff --git a/src/cli/run/event-formatting.ts b/src/cli/run/event-formatting.ts index f9056641..2e6e2e08 100644 --- a/src/cli/run/event-formatting.ts +++ b/src/cli/run/event-formatting.ts @@ -103,9 +103,19 @@ export function logEventVerbose(ctx: RunContext, payload: EventPayload): void { const toolProps = props as ToolExecuteProps | undefined const toolName = toolProps?.name ?? "unknown" const input = toolProps?.input ?? {} - const inputStr = JSON.stringify(input).slice(0, 150) + let inputStr: string + try { + inputStr = JSON.stringify(input) + } catch { + try { + inputStr = String(input) + } catch { + inputStr = "[unserializable]" + } + } + const inputPreview = inputStr.slice(0, 150) console.error(pc.cyan(`${sessionTag} TOOL.EXECUTE: ${pc.bold(toolName)}`)) - console.error(pc.dim(` input: ${inputStr}${inputStr.length >= 150 ? "..." : ""}`)) + console.error(pc.dim(` input: ${inputPreview}${inputStr.length >= 150 ? "..." : ""}`)) break } diff --git a/src/cli/tui-install-prompts.ts b/src/cli/tui-install-prompts.ts index e817427c..7b6d03b5 100644 --- a/src/cli/tui-install-prompts.ts +++ b/src/cli/tui-install-prompts.ts @@ -12,6 +12,8 @@ async function selectOrCancel options: Option[] initialValue: TValue }): Promise { + if (!process.stdin.isTTY) return null + const value = await p.select({ message: params.message, options: params.options,