diff --git a/apps/web/src/components/github/open-pr-button.tsx b/apps/web/src/components/github/open-pr-button.tsx
index aba83cf5..8577286e 100644
--- a/apps/web/src/components/github/open-pr-button.tsx
+++ b/apps/web/src/components/github/open-pr-button.tsx
@@ -23,10 +23,11 @@ export function OpenPRButton() {
useEffect(() => {
const baseBranch =
- stream.values.targetRepository?.branch ??
- stream.values.targetRepository?.baseCommit ??
+ stream.values?.targetRepository?.branch ??
+ stream.values?.targetRepository?.baseCommit ??
branch;
if (
+ !stream.values ||
!stream.values.branchName ||
!stream.values.targetRepository ||
!baseBranch
@@ -49,7 +50,7 @@ export function OpenPRButton() {
setPrState(pr.state);
}
});
- }, [stream.values?.branchName, stream.values.targetRepository, branch]);
+ }, [stream.values?.branchName, stream.values?.targetRepository, branch]);
if (!pullRequest) {
return null;
diff --git a/apps/web/src/components/thread-item.tsx b/apps/web/src/components/thread-item.tsx
index df362401..28550915 100644
--- a/apps/web/src/components/thread-item.tsx
+++ b/apps/web/src/components/thread-item.tsx
@@ -86,12 +86,12 @@ export const ThreadItem = memo(function ThreadItem({
className="flex-shrink-0"
/>
- {thread.values.targetRepository.repo}
+ {thread.values?.targetRepository?.repo || "x"}
/
- {thread.values.targetRepository.branch}
+ {thread.values?.targetRepository?.branch || "x"}
diff --git a/apps/web/src/components/thread/history/index.tsx b/apps/web/src/components/thread/history/index.tsx
index ef9d6950..e967dde2 100644
--- a/apps/web/src/components/thread/history/index.tsx
+++ b/apps/web/src/components/thread/history/index.tsx
@@ -32,10 +32,10 @@ function ThreadList({
typeof t.values === "object" &&
t.values &&
"messages" in t.values &&
- Array.isArray(t.values.messages) &&
- t.values.messages?.length > 0
+ Array.isArray(t.values?.messages) &&
+ t.values?.messages?.length > 0
) {
- const firstMessage = t.values.messages[0];
+ const firstMessage = t.values?.messages[0];
itemText = getContentString(firstMessage.content);
}
return (
diff --git a/apps/web/src/lib/thread.ts b/apps/web/src/lib/thread.ts
index 55d3ac4f..89cf4c21 100644
--- a/apps/web/src/lib/thread.ts
+++ b/apps/web/src/lib/thread.ts
@@ -4,7 +4,7 @@ import { GraphState } from "@open-swe/shared/open-swe/types";
import { getActivePlanItems } from "@open-swe/shared/open-swe/tasks";
export function getThreadTitle(thread: Thread): string {
- const messages = thread?.values.messages;
+ const messages = thread?.values?.messages;
if (!messages?.length || !messages[0]?.content) {
return `Thread ${thread.thread_id.substring(0, 8)}`;
}
@@ -16,7 +16,7 @@ export function getThreadTasks(thread: Thread): {
totalTasks: number;
completedTasks: number;
} {
- if (!thread.values.plan) {
+ if (!thread.values || !thread.values?.plan) {
return {
totalTasks: 0,
completedTasks: 0,