summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--packages/opencode/src/cli/cmd/debug/snapshot.ts17
-rw-r--r--packages/opencode/src/session/index.ts2
-rw-r--r--packages/opencode/src/snapshot/index.ts7
3 files changed, 25 insertions, 1 deletions
diff --git a/packages/opencode/src/cli/cmd/debug/snapshot.ts b/packages/opencode/src/cli/cmd/debug/snapshot.ts
index 72bbd61d7..edd5fbe2a 100644
--- a/packages/opencode/src/cli/cmd/debug/snapshot.ts
+++ b/packages/opencode/src/cli/cmd/debug/snapshot.ts
@@ -4,7 +4,7 @@ import { cmd } from "../cmd"
export const SnapshotCommand = cmd({
command: "snapshot",
- builder: (yargs) => yargs.command(TrackCommand).command(PatchCommand).demandCommand(),
+ builder: (yargs) => yargs.command(TrackCommand).command(PatchCommand).command(DiffCommand).demandCommand(),
async handler() {},
})
@@ -31,3 +31,18 @@ const PatchCommand = cmd({
})
},
})
+
+const DiffCommand = cmd({
+ command: "diff <hash>",
+ builder: (yargs) =>
+ yargs.positional("hash", {
+ type: "string",
+ description: "hash",
+ demandOption: true,
+ }),
+ async handler(args) {
+ await bootstrap({ cwd: process.cwd() }, async () => {
+ console.log(await Snapshot.diff(args.hash))
+ })
+ },
+})
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 799097e85..e85073424 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -67,6 +67,7 @@ export namespace Session {
messageID: z.string(),
partID: z.string().optional(),
snapshot: z.string().optional(),
+ diff: z.string().optional(),
})
.optional(),
})
@@ -1160,6 +1161,7 @@ export namespace Session {
const session = await get(input.sessionID)
revert.snapshot = session.revert?.snapshot ?? (await Snapshot.track())
await Snapshot.revert(patches)
+ if (revert.snapshot) revert.diff = await Snapshot.diff(revert.snapshot)
return update(input.sessionID, (draft) => {
draft.revert = revert
})
diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts
index a2203ecbc..d249830b0 100644
--- a/packages/opencode/src/snapshot/index.ts
+++ b/packages/opencode/src/snapshot/index.ts
@@ -94,6 +94,13 @@ export namespace Snapshot {
}
}
+ export async function diff(hash: string) {
+ const app = App.info()
+ const git = gitdir()
+ const result = await $`git --git-dir=${git} diff ${hash} -- .`.quiet().cwd(app.path.root).text()
+ return result.trim()
+ }
+
function gitdir() {
const app = App.info()
return path.join(app.path.data, "snapshots")