Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com> Co-authored-by: BB84 <110078428+BB-84C@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Jay V <air@live.ca> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Sebastian <hasta84@gmail.com> Co-authored-by: Jérôme Benoit <jerome.benoit@sap.com> Co-authored-by: Test User <test@test.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: Rahul A Mistry <149420892+ProdigyRahul@users.noreply.github.com> Co-authored-by: Qiping Li <liqiping1991@gmail.com> Co-authored-by: liqiping <liqiping@msh.team> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Matthias Reso <13337103+mreso@users.noreply.github.com> Co-authored-by: tobwen <1864057+tobwen@users.noreply.github.com> Co-authored-by: Daniel Polito <danielbpolito@gmail.com> Co-authored-by: opencode <noreply@opencode.ai> Co-authored-by: Devin R Leopold <devin.leopold@gmail.com> Co-authored-by: Zach Bruggeman <mail@bruggie.com> Co-authored-by: Zach Bruggeman <zbruggeman@ramp.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: David Siewert <david1gruppenplan@gmail.com> Co-authored-by: Andrei Dziahel <develop7@develop7.info> Co-authored-by: adityachaudhary99 <adityaachaudhary2003@gmail.com> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Matt Carey <mcarey@cloudflare.com>
50 lines
1.9 KiB
TypeScript
50 lines
1.9 KiB
TypeScript
import type { SnapshotFileDiff, VcsFileDiff } from "@opencode-ai/sdk/v2"
|
|
import type { FileDiffInfo } from "@opencode-ai/client/promise"
|
|
import type { Message } from "@opencode-ai/sdk/v2/client"
|
|
|
|
type Diff = FileDiffInfo | SnapshotFileDiff | VcsFileDiff
|
|
|
|
function diff(value: unknown): value is Diff {
|
|
if (!value || typeof value !== "object" || Array.isArray(value)) return false
|
|
if (!("file" in value) || typeof value.file !== "string") return false
|
|
if (!("patch" in value) || typeof value.patch !== "string") return false
|
|
if (!("additions" in value) || typeof value.additions !== "number") return false
|
|
if (!("deletions" in value) || typeof value.deletions !== "number") return false
|
|
if (!("status" in value) || value.status === undefined) return true
|
|
return value.status === "added" || value.status === "deleted" || value.status === "modified"
|
|
}
|
|
|
|
function object(value: unknown): value is Record<string, unknown> {
|
|
return !!value && typeof value === "object" && !Array.isArray(value)
|
|
}
|
|
|
|
export function diffs(value: unknown): Diff[] {
|
|
if (Array.isArray(value) && value.every(diff)) return value
|
|
if (Array.isArray(value)) return value.filter(diff)
|
|
if (diff(value)) return [value]
|
|
if (!object(value)) return []
|
|
return Object.values(value).filter(diff)
|
|
}
|
|
|
|
export function message(value: Message): Message {
|
|
if (value.role !== "user") return value
|
|
|
|
const raw = value.summary as unknown
|
|
if (raw === undefined) return value
|
|
if (!object(raw)) return { ...value, summary: undefined }
|
|
|
|
const title = typeof raw.title === "string" ? raw.title : undefined
|
|
const body = typeof raw.body === "string" ? raw.body : undefined
|
|
const next = diffs(raw.diffs)
|
|
|
|
if (title === raw.title && body === raw.body && next === raw.diffs) return value
|
|
|
|
return {
|
|
...value,
|
|
summary: {
|
|
...(title === undefined ? {} : { title }),
|
|
...(body === undefined ? {} : { body }),
|
|
diffs: next,
|
|
},
|
|
}
|
|
}
|