diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 27ba4e186712..6883bebad923 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -1053,6 +1053,7 @@ export namespace Config { .optional(), plugin: z.string().array().optional(), snapshot: z.boolean().optional(), + snapshotPruneDays: z.number().min(1).max(30).optional().describe("Days to keep snapshots before pruning (default: 7)"), share: z .enum(["manual", "auto", "disabled"]) .optional() diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts index 72252b7b4c50..7f8c40614e6d 100644 --- a/packages/opencode/src/snapshot/index.ts +++ b/packages/opencode/src/snapshot/index.ts @@ -13,7 +13,7 @@ import { Process } from "@/util/process" export namespace Snapshot { const log = Log.create({ service: "snapshot" }) const hour = 60 * 60 * 1000 - const prune = "7.days" + const defaultPruneDays = 7 function args(git: string, cmd: string[]) { return ["--git-dir", git, "--work-tree", Instance.worktree, ...cmd] @@ -38,6 +38,8 @@ export namespace Snapshot { .then(() => true) .catch(() => false) if (!exists) return + const pruneDays = cfg.snapshotPruneDays ?? defaultPruneDays + const prune = `${pruneDays}.days` const result = await Process.run(["git", ...args(git, ["gc", `--prune=${prune}`])], { cwd: Instance.directory, nothrow: true,