diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml
index f95fe72224..a550ecc6d1 100644
--- a/.github/workflows/python-tests.yml
+++ b/.github/workflows/python-tests.yml
@@ -484,6 +484,15 @@ jobs:
if-no-files-found: error
retention-days: 3
+ - name: Upload text document visual evidence
+ if: always() && hashFiles('output/playwright/personal-workspace/document-*.png') != ''
+ uses: actions/upload-artifact@v7
+ with:
+ name: text-document-evidence-${{ matrix.shard }}
+ path: output/playwright/personal-workspace/document-*.png
+ if-no-files-found: error
+ retention-days: 14
+
dashboard-acceptance:
needs: [changes, dashboard-browser]
if: needs.changes.outputs.core_tests == 'true' && !cancelled() && needs.dashboard-browser.result == 'success'
diff --git a/apps/presentation/dashboard/src/data/chat.ts b/apps/presentation/dashboard/src/data/chat.ts
index df720acba4..d89c9285e7 100644
--- a/apps/presentation/dashboard/src/data/chat.ts
+++ b/apps/presentation/dashboard/src/data/chat.ts
@@ -931,6 +931,7 @@ export type ChatReplyContext = {
};
};
+// Existing attachment wire shape; MIME distinguishes images and UTF-8 documents.
export type ChatImageAttachment = {
data_url: string;
id: string;
diff --git a/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx b/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx
index 8225682463..1c35855822 100644
--- a/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx
+++ b/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx
@@ -1,3 +1,4 @@
+import {DocumentAttachment, isTextDocument} from "./document-attachment";
import { MessageActivity } from "./message-activity";
import { GoalDraftCard } from "./goal-draft-card";
import type { GoalDraft } from "../../../../../../loopx/control_plane/collaboration/goal_draft.js";
@@ -196,7 +197,7 @@ export function ChannelTimeline({
{item.message.role !== "user" ?
{item.message.text}
: item.message.text ?{zh ? "图片无法显示:" : "Image unavailable: "}{attachment.name}
:{zh ? "文件无法读取:" : "Document unavailable: "}{name}
; + } + return{text} : null}
+