Commit Graph

314 Commits

Author SHA1 Message Date
肖应宇 e800d80152 feat(localStorage): 隐藏模型选择器并调整输入框样式
- 注释掉 InputBox 中的 ModelSelector 组件
- 临时将 localStorage 设置置空
2026-03-25 17:43:55 +08:00
肖应宇 5d80195c64 feat: 删除ppt快捷Skill 2026-03-24 12:33:50 +08:00
肖应宇 5b3157f83e feat(ui): 单文件时文件标题居中 2026-03-24 10:41:16 +08:00
肖应宇 ff0c25db54 feat(ui): 新增文件名截断工具及下拉菜单文本溢出优化
- 新增 truncateMiddle 工具函数,支持中英文混合字符串按视觉宽度截断
- artifact-file-list 和 dropdown-selector 应用截断处理,避免长文本溢出
- dropdown-menu 和 ArtifactTitle 添加文本溢出省略样式
2026-03-24 10:28:50 +08:00
肖应宇 fd43a7ae68 fix: 删除正在初始化skill的文字;注释侧边栏 2026-03-23 17:25:17 +08:00
肖应宇 d2d3b73f53 feat(i18n): 附件删除按钮国际化
- 调整 prompt-input 附件删除按钮样式,默认隐藏,hover 时显示
2026-03-23 17:17:18 +08:00
肖应宇 da2023b42b feat(artifacts): 新增 Markdown 导出 DOCX/PDF 功能
- 新增 document-converter.ts 工具模块,支持 Markdown 转换为 DOCX(docx 库)和 PDF(html2pdf.js)
- 在 artifact-file-detail 添加下载菜单选项(downloadAsDocx、downloadAsPdf)
- .gitignore 添加 docs 目录忽略
2026-03-23 17:09:39 +08:00
肖应宇 04df7e25b1 fix: svg属性名写成小驼峰形式,复制按钮紧贴所属信息。 2026-03-23 15:40:29 +08:00
肖应宇 3a86f5f791 fix: 更换快速skill按钮的id 2026-03-23 15:02:45 +08:00
肖应宇 269d65ff98 fix: 将等待复制的内容data重命名为text 2026-03-23 14:05:38 +08:00
肖应宇 8dac856258 fix: 修复复制功能,向主页面发送信息;修复user的信息离复制按钮太远的问题; 2026-03-23 13:34:49 +08:00
肖应宇 fc1f38a545 feat: 发送消息后,对话框自动收起 2026-03-23 11:31:31 +08:00
肖应宇 b97e96d29e fix: 修复点击退出按钮没有中断的问题;兼容了工具调用中断后过滤一遍message; 2026-03-23 10:23:09 +08:00
肖应宇 e4c31b3b1e fix: 修复容器宽度错误的问题 2026-03-20 16:53:19 +08:00
肖应宇 03e95aee91 feat(ui): 调整聊天页布局比例及 artifacts 滚动条遮挡处理
- 修改 artifactsOpen 时容器宽度从 70% 改为 50%
- 文件阅读区添加圆角样式
- 文件阅读区添加滚动条顶部遮挡层,优化视觉体验
- 代码编辑器增加 py-[20px] 内边距
- InputBox 已提交状态强制显示阴影效果
2026-03-20 16:31:28 +08:00
肖应宇 0e3da716ed style: 格式化代码
Prettier 格式化 CSS 类名顺序

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 10:19:06 +08:00
肖应宇 fb226f85a8 feat(ui): 重构聊天页布局并规范化 iframe 通信
- 移除 ResizablePanel 组件,改用自定义 flex 布局实现聊天区与 artifacts 面板
- 调整 artifacts 面板样式,支持全屏模式下的布局切换
- 新增 iframe-messages.ts 统一 postMessage 通信协议,定义 FULLSCREEN、SELECT_SKILL 等消息类型
- 优化 artifacts 工具栏图标为 SVG 内联实现,调整 zoom 默认值为 80%
- 重构 dropdown-selector 组件,支持展开/收起状态指示器
- 修改 layout.tsx 中 geist variable 的 className 拼接方式
- 新增 package.json prettier 格式化命令
2026-03-20 10:09:42 +08:00
肖应宇 6335424aca Merge remote-tracking branch 'origin/feat/originui' into feat/originui 2026-03-20 09:22:19 +08:00
Titan f67aa27434 fix: 等待 thread 状态可读以避免过早展示chat页面 2026-03-19 19:15:51 +08:00
肖应宇 4df604d491 style: prettier 2026-03-19 17:33:47 +08:00
肖应宇 cb0ebf41bb feat(ui): 重构聊天页布局并规范化iframe 通信 2026-03-19 17:32:19 +08:00
肖应宇 3a7940654c debug: 修复时序问题导致 的获取历史记录为[] 2026-03-19 11:39:50 +08:00
肖应宇 0ad91e1bab build:lint 2026-03-18 23:52:40 +08:00
肖应宇 1c4a4525b3 feat: 旧版系统第一版 2026-03-18 23:29:50 +08:00
肖应宇 aee59b978b prettier 2026-03-18 16:44:03 +08:00
Titan 590001c130 build: 去除frotend docker的多阶段构建 2026-03-16 18:46:22 +08:00
Titan cb758af645 build/ci: prod发布重写 2026-03-16 17:22:18 +08:00
Titan ef9a071aa1 对接skill平台接口,获取skill.yaml并创建文件、目录结构 2026-03-13 11:11:02 +08:00
Titan e2fdfa75d7 保持new路由下的空白引导页 2026-03-12 11:54:43 +08:00
Titan 4119fdcba7 已实现由外部创建会话 2026-03-12 10:43:56 +08:00
CHANGXUBO 9f74589d09
fix: HTML artifact preview renders blank in preview mode (#876)
The condition guarding ArtifactFilePreview only allowed markdown files
through, which prevented HTML files from reaching the preview component.
Added `language === "html"` to the condition so HTML artifacts render
correctly in preview mode.

Fixes #873

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-18 10:06:21 +08:00
Henry Li 8f44ca595b docs: update README.md 2026-02-13 09:38:35 +08:00
Henry Li ebf4ec2786 chore: add pnpm-workspace.yaml 2026-02-10 22:07:33 +08:00
Henry Li eb287f095a chore: add .npmrc back 2026-02-10 22:07:25 +08:00
Henry Li 595dba6c35 chore: upgrade langchain and langgraph 2026-02-10 22:07:17 +08:00
LofiSu b3a1f018ab fix: 修复新建技能后输入框无法编辑的问题
问题:点击新建技能按钮后,对话框中预设的文字无法删除或修改
原因:useEffect 依赖项包含 promptInputController.textInput,该对象在每次输入时都会重新创建,导致 useEffect 重复执行并覆盖用户输入
解决:使用 useRef 保存 setInput 方法,并跟踪已设置的初始值,确保 useEffect 只在初始值变化时执行一次

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-10 12:39:44 +08:00
LofiSu cc88823a64 fix:memory 为空时i18n字体显示 2026-02-10 12:29:14 +08:00
LofiSu f87d5678f3 feat: 改进设置页面UI和国际化支持 / Improve settings pages UI and i18n support
- 添加 rehype-raw 依赖以支持在 markdown 中渲染 HTML
  Add rehype-raw dependency to support HTML rendering in markdown

- 重构 memory-settings-page,提取 formatMemorySection 函数减少重复代码
  Refactor memory-settings-page by extracting formatMemorySection function to reduce code duplication

- 改进空状态显示,使用 HTML span 标签替代 markdown 斜体,提供更好的样式控制
  Improve empty state display by using HTML span tags instead of markdown italics for better style control

- 为 skill-settings-page 添加完整的国际化支持,替换硬编码的英文文本
  Add complete i18n support for skill-settings-page, replacing hardcoded English text

- 更新国际化文件,添加技能设置页面的空状态文本(中英文)
  Update i18n files with empty state text for skill settings page (both Chinese and English)

- 在 streamdown 插件配置中添加 rehypeRaw 以支持 HTML 渲染
  Add rehypeRaw to streamdown plugins configuration to support HTML rendering

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-10 12:15:37 +08:00
Henry Li df3668ecd5 fix: eslint 2026-02-09 23:28:36 +08:00
LofiSu f8e4fe05b2 Strip citation prefix in citation badges 2026-02-09 22:57:54 +08:00
LofiSu 1af14bf7e4 Merge branch 'experimental' of github.com:hetaoBackend/deer-flow into feat/citations 2026-02-09 22:05:44 +08:00
JeffJiang b6da3a219e Add Kubernetes-based sandbox provider for multi-instance support (#19)
* feat: adds docker-based dev environment

* docs: updates Docker command help

* fix local dev

* feat(sandbox): add Kubernetes-based sandbox provider for multi-instance support

* fix: skills path in k8s

* feat: add example config for k8s sandbox

* fix: docker config

* fix: load skills on docker dev

* feat: support sandbox execution to Kubernetes Deployment model

* chore: rename web service name
2026-02-09 21:59:13 +08:00
LofiSu 8a2cac7b5a Merge upstream/experimental: resolve conflicts (keep feat/citations)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 21:56:02 +08:00
LofiSu 2f50e5d969 feat(citations): inline citation links with [citation:Title](URL)
- Backend: add citation format to lead_agent and general_purpose prompts
- Add CitationLink component (Badge + HoverCard) for citation cards
- MarkdownContent: detect citation: prefix in link text, render CitationLink
- Message/artifact/subtask: use MarkdownContent or Streamdown with CitationLink
- message-list-item: pass img via components prop (remove isHuman/img)
- message-group, subtask-card: drop unused imports; fix import order (lint)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 21:40:20 +08:00
Henry Li 554ec7a91e feat: basic implmenetation 2026-02-09 19:02:21 +08:00
LofiSu 6a540d8408 Merge upstream/experimental: resolve conflict in lead_agent/prompt.py
- Keep upstream subagent HARD LIMIT (max 3 task calls, batching) in subagent_reminder
- Keep our removal of Citations: do not add back 'Citations when synthesizing'

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 16:27:36 +08:00
LofiSu 46048c76ce chore: 移除所有 Citations 相关逻辑,为后续重构做准备
- Backend: 删除 lead_agent / general_purpose 中的 citations_format 与引用相关 reminder;artifacts 下载不再对 markdown 做 citation 清洗,统一走 FileResponse,保留 Response 用于二进制 inline
- Frontend: 删除 core/citations 模块、inline-citation、safe-citation-content;新增 MarkdownContent 仅做 Markdown 渲染;消息/artifact 预览与复制均使用原始 content
- i18n: 移除 citations 命名空间(loadingCitations、loadingCitationsWithCount)
- 技能与 demo: 措辞改为 references,demo 数据去掉 <citations> 块
- 文档: 更新 CLAUDE/AGENTS/README 描述,新增按文件 diff 的代码变更总结

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 16:24:01 +08:00
LofiSu 0f0346f73e Merge pull request #27 from LofiSu/experimental
Experimental
2026-02-09 15:59:41 +08:00
LofiSu cef8d389fd refactor(frontend): consolidate citation logic, slim exports and impl
- SafeCitationContent: add loadingOnly and renderBody props.
  - loadingOnly: show only loading indicator or null (e.g. write_file step).
  - renderBody(parsed): custom body renderer (e.g. artifact preview).

- message-group write_file: use SafeCitationContent(content, isLoading,
  rehypePlugins, loadingOnly) instead of local useParsedCitations +
  shouldShowCitationLoading + CitationsLoadingIndicator. Pass rehypePlugins
  into ToolCall.

- artifact-file-detail markdown preview: use SafeCitationContent with
  renderBody((p) => <ArtifactFilePreview ... cleanContent={p.cleanContent}
  citationMap={p.citationMap} />). Remove local shouldShowCitationLoading
  and CitationsLoadingIndicator branch.

- core/citations: inline buildCitationMap into use-parsed-citations, remove
  from utils; stop exporting hasCitationsBlock (internal to shouldShowCitationLoading).

- inline-citation: make InlineCitationCard, InlineCitationCardBody,
  InlineCitationSource file-private (no longer exported).

Co-authored-by: Cursor <cursoragent@cursor.com>

---
refactor(前端): 收拢引用逻辑、精简导出与实现

- SafeCitationContent 新增 loadingOnly、renderBody。
  - loadingOnly:仅显示加载或 null(如 write_file 步骤)。
  - renderBody(parsed):自定义正文渲染(如 artifact 预览)。

- message-group write_file:改用 SafeCitationContent(loadingOnly),去掉
  本地 useParsedCitations + shouldShowCitationLoading + CitationsLoadingIndicator,
  并向 ToolCall 传入 rehypePlugins。

- artifact-file-detail 的 markdown 预览:改用 SafeCitationContent +
  renderBody 渲染 ArtifactFilePreview,去掉本地加载判断与
  CitationsLoadingIndicator 分支。

- core/citations:buildCitationMap 内联到 use-parsed-citations 并从 utils
  删除;hasCitationsBlock 不再导出(仅 shouldShowCitationLoading 内部使用)。

- inline-citation:InlineCitationCard/Body/Source 改为文件内私有,不再导出。
2026-02-09 15:58:59 +08:00
LofiSu d9a86c10e8 fix(frontend): no half-finished citations, correct state when SSE ends
Citations:
- In shouldShowCitationLoading, treat any unreplaced [cite-N] in cleanContent
  as show-loading (no body). Fixes Ultra and other modes when refs arrive
  before the <citations> block in the stream.
- Single rule: hasUnreplacedCitationRefs(cleanContent) => true forces loading;
  then isLoading && hasCitationsBlock(rawContent) for streaming indicator.

SSE end state:
- When stream finishes, SDK may set isLoading=false before client state has
  the final message content, so UI stayed wrong until refresh.
- Store onFinish(state) as finalState in chat page; clear when stream starts.
- Pass messagesOverride={finalState.messages} to MessageList when not loading
  so the list uses server-complete messages right after SSE ends (no refresh).

Chore:
- Stop tracking .githooks/pre-commit; add .githooks/ to .gitignore (local only).

Co-authored-by: Cursor <cursoragent@cursor.com>

---
fix(前端): 杜绝半成品引用,SSE 结束时展示正确状态

引用:
- shouldShowCitationLoading 中只要 cleanContent 仍含未替换的 [cite-N] 就
  只显示加载、不渲染正文,解决流式时引用块未到就出现 [cite-1] 的问题。
- 规则:hasUnreplacedCitationRefs(cleanContent) 为真则一律显示加载;
  此外 isLoading && hasCitationsBlock 用于流式时显示「正在整理引用」。

SSE 结束状态:
- 流结束时 SDK 可能先置 isLoading=false,客户端 messages 尚未包含
  最终内容,导致需刷新才显示正确。
- 在对话页保存 onFinish(state) 为 finalState,流开始时清空。
- 非加载时向 MessageList 传入 messagesOverride={finalState.messages},
  列表在 SSE 结束后立即用服务端完整消息渲染,无需刷新。

杂项:
- 取消跟踪 .githooks/pre-commit,.gitignore 增加 .githooks/(仅本地)。
2026-02-09 15:15:20 +08:00