diff --git a/packages/paperclip-runner/package.json b/packages/paperclip-runner/package.json index 910453c3273..66218496966 100644 --- a/packages/paperclip-runner/package.json +++ b/packages/paperclip-runner/package.json @@ -181,7 +181,7 @@ "opencode-ai": "1.18.34", "react-markdown": "^10.1.0", "remark-gfm": "^4.0.1", - "smol-toml": "^1.4.2" + "smol-toml": "^1.9.1" }, "peerDependencies": { "react": ">=18", diff --git a/packages/paperclip-runner/src/drivers/codex/codex-startup-trust.test.ts b/packages/paperclip-runner/src/drivers/codex/codex-startup-trust.test.ts index e8ef76d4d72..1544e1a269d 100644 --- a/packages/paperclip-runner/src/drivers/codex/codex-startup-trust.test.ts +++ b/packages/paperclip-runner/src/drivers/codex/codex-startup-trust.test.ts @@ -1,3 +1,4 @@ +import { deepStrictEqual } from "node:assert"; import { mkdtempSync, mkdirSync, @@ -99,6 +100,61 @@ describe.each([ }, ); + it.each(["missing", "untrusted", "trusted"])( + "preserves nested TOML values and sibling trust with target trust %s", + (trust) => { + const temp = realpathSync(mkdtempSync(join(tmpdir(), "codex-trust-values-"))); + try { + const cwd = join(temp, "project"); + const home = join(temp, "home"); + mkdirSync(cwd); + mkdirSync(home); + const unrelated = [ + 'special = [nan, inf, -inf, -0.0]', + 'created = 2026-10-12T19:04:14Z', + 'local_date = 2026-10-12', + 'local_time = 19:04:14', + '[projects."/unrelated"]', + 'trust_level = "untrusted"', + 'settings = { __proto__ = { keep = true }, constructor = { name = "unchanged" } }', + '[[mcp_servers.fixture.entries]]', + 'name = "unchanged"', + '', + ].join("\n"); + const target = trust === "missing" ? "" : [ + `[projects.${JSON.stringify(cwd)}]`, + `trust_level = "${trust}" # retain target comment`, + `[projects.${JSON.stringify(cwd)}.settings]`, + 'nested = { __proto__ = { keep = true }, values = [nan, -0.0] }', + '', + ].join("\n"); + const original = unrelated + target; + writeFileSync(join(home, "config.toml"), original); + + trustCodexStartupRoot(home, cwd); + + const updated = readFileSync(join(home, "config.toml"), "utf8"); + expect(updated.startsWith(unrelated)).toBe(true); + if (trust !== "missing") { + expect(updated).toBe(unrelated + target.replace( + 'trust_level = "untrusted"', 'trust_level = "trusted"', + )); + } + const expected = parse(original); + const actual = parse(updated); + const projects = actual.projects as Record>; + expect(projects[cwd].trust_level).toBe("trusted"); + if (trust === "missing") delete projects[cwd]; + else projects[cwd].trust_level = trust; + deepStrictEqual(actual, expected); + trustCodexStartupRoot(home, cwd); + expect(readFileSync(join(home, "config.toml"), "utf8")).toBe(updated); + } finally { + rmSync(temp, { recursive: true, force: true }); + } + }, + ); + it("trusts the exact non-Git root and preserves unrelated config", () => { const temp = realpathSync(mkdtempSync(join(tmpdir(), "codex-trust-"))); try { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d162c049ec4..114e61bc775 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -525,8 +525,8 @@ importers: specifier: ^4.0.1 version: 4.0.1 smol-toml: - specifier: ^1.4.2 - version: 1.8.0 + specifier: ^1.9.1 + version: 1.9.1 optionalDependencies: '@github/copilot-darwin-arm64': specifier: 1.0.88 @@ -1074,8 +1074,8 @@ importers: specifier: ^0.35.4 version: 0.35.4(@types/node@24.13.3) smol-toml: - specifier: ^1.4.2 - version: 1.8.0 + specifier: ^1.9.1 + version: 1.9.1 ssh2: specifier: ^1.17.0 version: 1.17.0 @@ -8482,8 +8482,8 @@ packages: engines: {node: '>=18'} hasBin: true - smol-toml@1.8.0: - resolution: {integrity: sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==} + smol-toml@1.9.1: + resolution: {integrity: sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==} engines: {node: '>= 18'} sonic-boom@4.2.1: @@ -16892,7 +16892,7 @@ snapshots: - bare-buffer - react-native-b4a - smol-toml@1.8.0: {} + smol-toml@1.9.1: {} sonic-boom@4.2.1: dependencies: diff --git a/server/package.json b/server/package.json index 0ce4ac72f0f..ab0bf9e23a2 100644 --- a/server/package.json +++ b/server/package.json @@ -107,7 +107,7 @@ "pino-http": "^11.0.0", "pino-pretty": "^13.1.3", "sharp": "^0.35.4", - "smol-toml": "^1.4.2", + "smol-toml": "^1.9.1", "ssh2": "^1.17.0", "svix": "1.76.1", "ws": "^8.22.0",