makecindy / makecindy/cindy

bug: 生成的本地图片只输出裸文件名,聊天中无法点击预览

Open
#1,629 2 comments 0 reactions 1 assignee Claimed by @DavidShenXD View on GitHub
bug done
Dominant language
TypeScript
Stars
2.7k
Forks
401
Avg merge
21h 48m
Merged PRs (30d)
776

Description

**提交人**: fujiachao
**客户端版本**: 0.1.27

---

## 现象

在 Cindy 聊天中发送:

```
生成100个随机坐标数组,范围是(0,1000),使用matplotlib绘制成图片给我看看
```

Cindy 确实生成了 `random_coordinates.png`,但最终回复类似:

```
已生成并绘制 100 个范围在 (0, 1000) 的随机二维坐标点。图片文件:random_coordinates.png。
```

其中 `random_coordinates.png` 只是普通文本,无法点击,也没有图片预览。在其它场景中还会出现:

```
生成图片:
查看 PNG 图片
```

同样只是纯文本,用户既看不到图片,也没有可操作的文件入口。

## 复现步骤

1. 在 Cindy 桌面端开启一个新对话。
2. 发送上述随机坐标 + Matplotlib 请求。
3. 让 Agent 通过 Python/Matplotlib 或 shell 在工作目录中生成 PNG 文件。
4. 等待回复完成。
5. 观察回复中的文件名或“查看 PNG 图片”文字:它们没有超链接、文件卡片或图片预览。
6. 对其它会生成本地 PNG/JPG 的任务重复验证。

## 期望行为

当用户明确要求“绘制成图片给我看看”时,完成回复应携带可渲染的结构化图片附件,或输出能够解析到实际文件的 Markdown 图片/本地文件链接,例如 `![预览](...)` 或可点击的文件 chip。至少应提供一个可点击的本地文件入口,而不是只口播文件名或“查看 PNG 图片”。

## 实际行为

生成文件成功与用户可查看之间没有连通:

- `apps/desktop/src/renderer/components/chat/remarkLocalPathLinks.ts` 的正文裸路径自动识别只匹配“带路径分隔符 + 扩展名”的形态,裸文件名 `random_coordinates.png` 按设计不会自动变成链接,以避免把 `array.map`、`Date.now` 等普通文本误识别为文件。
- `MarkdownRenderer` 只有在显式 Markdown 链接、行内代码或已识别的路径候选成功解析到真实文件时,才会进入文件/图片预览链路;未解析的 candidate 会降级为普通 `span`。
- `packages/cindy-tools/src/ghost/mcpServer.ts` 的媒体呈现契约只处理结构化的 `xdt_image_urls` / `xdt_video_urls` 或主机记录的媒体字段。普通 shell/Python 输出的磁盘路径不会自动注册为图片附件;内联媒体还要求模型在最终回复中使用 `![](地址)`。模型只返回裸文件名时,宿主没有二次补偿,因此最终就是纯文本。

因此,“图片已经生成”被误报成“用户已经可以查看图片”,而“查看 PNG 图片”也可能只是模型生成的说明性文字,并不代表存在实际可操作控件。

建议补充回归测试,覆盖:本地 PNG 生成后最终回复只含裸文件名、仅含“查看 PNG 图片”、显式 `![...](path)`、以及结构化媒体字段四种情况;验证桌面端和移动端行为一致。
---
**版本区域**: CN
**OS**: win32 x64 (10.0.19045)
**界面语言**: zh-CN

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.