diff --git a/packages/app/src/context/global-sync/event-reducer.ts b/packages/app/src/context/global-sync/event-reducer.ts index 4af636553526..06b767b7d5b9 100644 --- a/packages/app/src/context/global-sync/event-reducer.ts +++ b/packages/app/src/context/global-sync/event-reducer.ts @@ -162,7 +162,8 @@ export function applyDirectoryEvent(input: { } case "session.diff": { const props = event.properties as { sessionID: string; diff: FileDiff[] } - input.setStore("session_diff", props.sessionID, reconcile(props.diff, { key: "file" })) + const diff = Array.isArray(props.diff) ? props.diff : [] + input.setStore("session_diff", props.sessionID, reconcile(diff, { key: "file" })) break } case "todo.updated": { diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 8c32a7237f58..d191560c1524 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -426,7 +426,11 @@ export default function Page() { } const info = createMemo(() => (params.id ? sync.session.get(params.id) : undefined)) - const diffs = createMemo(() => (params.id ? (sync.data.session_diff[params.id] ?? []) : [])) + const diffs = createMemo(() => { + if (!params.id) return [] + const d = sync.data.session_diff[params.id] + return Array.isArray(d) ? d : [] + }) const sessionCount = createMemo(() => Math.max(info()?.summary?.files ?? 0, diffs().length)) const hasSessionReview = createMemo(() => sessionCount() > 0) const canReview = createMemo(() => !!params.id) @@ -636,7 +640,10 @@ export default function Page() { return open }, desktopReviewOpen()) - const turnDiffs = createMemo(() => lastUserMessage()?.summary?.diffs ?? []) + const turnDiffs = createMemo(() => { + const d = lastUserMessage()?.summary?.diffs + return Array.isArray(d) ? d : [] + }) const changesOptions = createMemo(() => { const list: ChangeMode[] = [] if (sync.project?.vcs === "git") list.push("git") diff --git a/packages/ui/src/components/session-review.tsx b/packages/ui/src/components/session-review.tsx index 2274e93a34b5..662abe5e3a6b 100644 --- a/packages/ui/src/components/session-review.tsx +++ b/packages/ui/src/components/session-review.tsx @@ -150,7 +150,8 @@ export const SessionReview = (props: SessionReviewProps) => { const opened = () => store.opened const open = () => props.open ?? store.open - const files = createMemo(() => props.diffs.map((diff) => diff.file)) + const safe = () => (Array.isArray(props.diffs) ? props.diffs : []) + const files = createMemo(() => safe().map((diff) => diff.file)) const diffStyle = () => props.diffStyle ?? (props.split ? "split" : "unified") const hasDiffs = () => files().length > 0 @@ -281,7 +282,7 @@ export const SessionReview = (props: SessionReviewProps) => {
- + {(diff) => { let wrapper: HTMLDivElement | undefined const file = diff.file