Wenjie Zhang
|
17cd376204
|
feat(debug): 支持 AgentRun 精确跳转 Langfuse
|
2026-08-24 20:51:18 +08:00 |
|
Wenjie Zhang
|
ad63ddec6d
|
feat(debug): 按 Run 分组消息调试数据
|
2026-08-24 19:35:55 +08:00 |
|
Wenjie Zhang
|
dc545dfbd0
|
feat(debug): 优化调试面板与消息时序检视
|
2026-08-24 18:50:03 +08:00 |
|
Wenjie Zhang
|
5b7d7a1b40
|
fix(storage): 统一数据库 Schema 迁移入口
|
2026-08-24 13:27:00 +08:00 |
|
Wenjie Zhang
|
6975a797d3
|
fix(user): 用户管理改用服务端分页
|
2026-08-24 10:26:33 +08:00 |
|
Wenjie Zhang
|
d03fbfd93b
|
feat(dashboard): 优化数据总览与会话分析
|
2026-08-24 10:26:23 +08:00 |
|
Wenjie Zhang
|
82e719ef2d
|
chore(release): 发布 0.7.2 beta1
|
2026-08-24 00:35:18 +08:00 |
|
Wenjie Zhang
|
ca8a3d837b
|
docs(decision): 记录沙盒原生异步读取决策
|
2026-08-23 22:19:34 +08:00 |
|
Wenjie Zhang
|
a3e337b510
|
feat(agent): 新增用户级 Memory MVP
- 主 Agent 在用户开启开关后注入 MEMORY.md 有界提示,并注册
remember_memory / search_thread_messages / read_thread_messages
三个受限工具,工具 schema 不含 uid/path 等身份参数
- 写入经 advisory lock + SELECT FOR UPDATE 串行化,执行处重查开关、
顶层 Run 归属与 lease owner,fail-closed;文件发布失败保留旧文件
- MEMORY.md 被用户删除或清空时读取侧视为无记忆,下一次写入按空
文件语义原子重建
- 历史查询遵守主线程可见性与字段 allowlist,默认不含 ToolCall 详情
- 前端新增 RememberMemoryTool 渲染与 CollapseTransition 组件
决策记录:docs/develop-guides/decisions/implemented/2026-08-23-user-memory-mvp.md
|
2026-08-23 19:37:00 +08:00 |
|
Wenjie Zhang
|
fca77cc514
|
fix(agent): 为 LangGraph checkpoint 连接池启用连接健康检查
PostgreSQL 重启后连接池中的失效连接不再导致 checkpoint 读写失败,
通过 AsyncConnectionPool.check_connection 在取用连接时剔除死连接。
决策记录:docs/develop-guides/decisions/implemented/2026-08-23-langgraph-checkpoint-pool-recovery.md
|
2026-08-23 19:37:00 +08:00 |
|
Wenjie Zhang
|
3d76a43d0f
|
feat(web): 完善前端展示与流式细节
|
2026-08-23 19:05:58 +08:00 |
|
Yuchuan
|
07034cc024
|
feat(agent): 完成 DeepAgents 0.7 迁移与全仓依赖安全升级 (#971)
* feat(agent): 完成 DeepAgents 0.7 迁移与全仓依赖安全升级
* fix(storage): 修复 Project created_at/updated_at 约束与 cutover 默认值
* style: 格式化 storage models 与 paths 以满足 ruff 检查
---------
Co-authored-by: Wenjie Zhang <xerrors@163.com>
|
2026-08-23 14:35:06 +08:00 |
|
Wenjie Zhang
|
99549d7d82
|
feat(project): 支持 Project 业务资源持久化与新建对话项目选择
|
2026-08-23 03:48:32 +08:00 |
|
Yuchuan Huang
|
05fd233c3a
|
fix(agent): 收敛 Skill 预加载运行资产
|
2026-08-22 16:21:07 +08:00 |
|
Yuchuan Huang
|
19ef486b14
|
Merge remote-tracking branch 'upstream/main' into integrate/pr-924-skill-preload
|
2026-08-22 15:48:29 +08:00 |
|
Yuchuan Huang
|
6deb9b4b34
|
fix(web): 修复文件面板预览与刷新生命周期
|
2026-08-22 15:35:13 +08:00 |
|
Yuchuan
|
fd639016a9
|
feat: 增加 Skill 预加载机制
|
2026-08-21 18:54:19 +08:00 |
|
Yuchuan
|
aef9a64c48
|
refactor: 收敛 UserWorkspace、Workdir 与 Sandbox 存储边界 (#969)
* refactor: 收紧 API 与 Worker 宿主机依赖
* refactor: 分离 API 与 Worker 运行目录
* feat: 从对象存储恢复沙盒附件
* feat: 持久化线程输出版本
* docs: 重定向实时项目工作目录方案
* feat: 建立 Project Workdir 与 Sandbox runtime 基础
* feat(storage): 切换到实时 Project Workdir
* refactor(storage): 删除旧文件 revision 主链路
* refactor(storage): 收敛 Skill 与部署存储边界
* refactor(storage): 收敛存储边界并复用持久化挂载判定
- skills/service: 拆分 legacy 路径分支,统一迁移来源校验,
让 dir_path 收敛与缺失拒绝逻辑在单一分支内闭合
- mention_search_service: 删除仅在单点使用的 _workspace_root
与 _scan_virtual_root 抽象,内联扫描与虚拟路径拼接
- sandbox_provisioner: 抽取 PERSISTENT_SANDBOX_MOUNT_ROOTS 常量与
_is_persistent_sandbox_mount_path 判定,Local 与 K8s 后端共用
以上都是本分支既有 storage decoupling 收尾;只缩小代码体量,
不改变外部行为。
* feat(langgraph): 移除对于 SQLite 的 checkpoint 支持
* docs: 修正文档契约表达
* refactor: 简化 Workdir 与 Sandbox 存储边界
* style: 修复 Ruff 格式检查
* refactor: 收敛 Workdir 目录与附件链路
* style: 对齐附件服务 Ruff 格式
* refactor: 统一宿主侧安全目录遍历
* refactor: 收敛 v0.7.1 迁移与测试清理
* style: 对齐 rebase 后 Ruff 格式
* style: 对齐迁移模块 import gate
* test: 对齐存储运行时迁移契约
* fix: 稳定 Sandbox 创建与运行上下文
* fix: 统一 UserWorkspace 跨运行时权限
* test: 清理 Skill 旧存储测试依赖
* fix: 收敛 Workdir 迁移和运行边界
* refactor: 统一 Skill 运行边界与 Workspace 身份
* fix(storage): 闭合工作目录派发与文件写入边界
* refactor: 简化运行时与工作区边界
* refactor: 收敛 Workspace 文件 Owner
* chore(docs): 移除架构图生成物
* refactor: 简化存储与运行时边界
* fix: 恢复 Agent 运行时上下文更新
---------
Co-authored-by: Yuchuan <28227133+Yuchuan925@users.noreply.github.com>
Co-authored-by: Wenjie Zhang <xerrors@163.com>
|
2026-08-21 17:49:16 +08:00 |
|
Yuchuan Huang
|
6185168f5e
|
feat(web): 完成 xhome #36 前端细节优化
- HTML 加载占位高度 360→180px
- 侧边栏 header-actions 按钮组与折叠态搜索入口
- AgentPanel 平级 Tab:file-tree / 文件预览 / 子智能体线程
- 子智能体会话进入面板 Tab,独立生命周期 + SSE 重连
- 已完成对话过程摘要改为耗时分隔行
- Markdown 渲染在 Shiki 不可用时优雅降级
- 知识库三步创建向导(类型/配置/权限)
- 快速访问文件夹图标统一为普通文件夹
决策记录:
- implemented/2026-08-19-frontend-detail-optimizations.md
- implemented/2026-08-20-agent-panel-sections.md
|
2026-08-20 01:33:48 +08:00 |
|
Yuchuan Huang
|
9e2679b9e7
|
fix(ci): 关闭常规依赖更新 PR
|
2026-08-19 23:11:18 +08:00 |
|
Yuchuan Huang
|
40783a6462
|
fix(ci): 缩小依赖聚合更新范围
|
2026-08-19 13:14:50 +08:00 |
|
Yuchuan Huang
|
0a5f1234fc
|
chore(ci): 优化依赖更新与审计流程
Taskr: 2026-08-19-dependabot-ci
|
2026-08-19 12:03:22 +08:00 |
|
Yuchuan
|
b6999953a8
|
chore(ci): 增加依赖漏洞审计与许可证报告 (#927)
* chore(ci): 增加依赖漏洞审计与许可证报告
Closes #870
Taskr: 2026-08-18-task-c5bbf857
* fix(ci): 修复依赖审计缓存清理失败
* fix(ci): 补充依赖审计负向控制
|
2026-08-19 11:17:21 +08:00 |
|
Yuchuan
|
f8aded2dab
|
docs: 完善文档信息架构与机制详解 (#925)
|
2026-08-18 15:09:49 +08:00 |
|
Wenjie Zhang
|
bc4c6b117a
|
fix: 修正镜像版本与许可证边界说明
|
2026-08-18 10:49:40 +08:00 |
|
Yuchuan
|
545b13a277
|
docs: PR 模板验证情况改为逐条分组格式并联动治理表述
|
2026-08-18 10:49:40 +08:00 |
|
Yuchuan
|
cd558fdd14
|
chore: 锁定 Redis 镜像版本并同步许可证文档与决策记录
|
2026-08-18 10:49:40 +08:00 |
|
Yuchuan
|
6d51aa49fd
|
chore: 锁定 Neo4j 镜像版本并补充第三方组件许可证边界说明
|
2026-08-18 10:49:40 +08:00 |
|
Wenjie Zhang
|
faeb6d4308
|
merge: 侧边栏文件树优化并新增文件搜索(PR #15 直接合并)
|
2026-08-16 23:44:36 +08:00 |
|
Yuchuan925
|
37165da364
|
feat(run): AgentRun 固化运行清单指纹并持久化 RunAttempt 执行事实
- AgentRun 新增 manifest/manifest_fingerprint/manifest_recorded_at:
worker 取得 lease 并完成输入校验后、构造执行上下文前,以当前 owner
身份 write-once 固化脱敏运行清单(agent/backend、已解析 model spec、
tools/mcps/skills 标识与版本、实际生效 limits、config SHA-256 摘要),
指纹为规范化 JSON 的 SHA-256;固化失败置 manifest_persist_failed,
执行不开始;历史 Run 保持 NULL 表示 unknown。
- 新增 agent_run_attempts 表:每次执行占有一行不可变事实(run_id 与
attempt_no 唯一、owner token、started/heartbeat/lease/finished、
outcome 与错误分类),claim 创建、renew 续租、retry 释放、
终态终结、lease 过期收敛分别写入;不改写已终结 attempt。
- 决策记录两份;集成/E2E 覆盖真实 PostgreSQL 与真实 worker 链路。
|
2026-08-16 22:57:51 +08:00 |
|
Wenjie Zhang
|
8c46da4b4f
|
merge: 合并 main 修复 PR #15 冲突
|
2026-08-16 21:27:52 +08:00 |
|
Wenjie Zhang
|
eaf561dde9
|
feat: 建立 Yuxi Spec Loop 工程闭环与确定性 Agent E2E 门禁
统一非平凡变更从提案到证据收敛的流程,固定任务类型,proposed 决策与
PR 共用逐主张验收证据矩阵,verifier 派生契约并配负向测试。
新增无密钥 OpenAI-compatible deterministic replay E2E(真实经 API、
worker、SSE 与 PostgreSQL 因果回读)和 workflow_dispatch 触发的真实
provider 探针;PR 模板按 Agent/非 Agent 分层,简化模板不豁免高风险变更。
补充 postmortem Owner 与模板、spec-loop 文档、决策记录及测试基础设施,
修复契约 verifier 空证据矩阵与 workflow 漂移等负向覆盖。
|
2026-08-16 20:59:44 +08:00 |
|
Wenjie Zhang
|
edcd532e78
|
fix(ci): 修复工程信任、单测、系统测试与 ruff 四项 CI 失败
- 补充 implemented 决策记录并恢复决策记录可追踪,满足 trust verifier
- 为 CLI auth 单测注入 API_KEY_DERIVATION_SECRET,恢复 CI 单测
- system-tests workflow 在 Prepare 步骤用 CI secret 填充 .env,
避免 load_dotenv(override=True) 用空值覆盖容器环境变量
- 修复 5 个 backend 文件的 I001 import 排序
|
2026-08-16 15:46:04 +08:00 |
|
Wenjie Zhang
|
acf1d0de88
|
refactor: Agent-first 工程信任体系与治理重构
|
2026-08-16 14:51:41 +08:00 |
|
Wenjie Zhang
|
da77733e09
|
docs: Agent-first 工程信任体系与治理重构
|
2026-08-16 14:50:07 +08:00 |
|
Yuchuan Huang
|
a9f02755df
|
feat(search): 统一对话与工作区文件全局搜索弹窗
- 新建 GlobalSearchModal 合并对话搜索与文件搜索,支持模式筛选
- 模式选项置于搜索框下方,segmented control 样式,含图标
- 侧边栏入口默认搜索对话,可切换到工作区文件搜索
- 工作区与 Agent 面板入口默认对应文件搜索(仅文件模式)
- 侧边栏搜索到工作区文件后跳转 /workspace?open= 并自动打开预览
- 删除旧的 ConversationSearchModal 与 FileSearchModal
- 模式按钮改用 Linear/VSCode 风格的极简 underline indicator(黑色 2px 短下划线),不再用突兀的背景色块
|
2026-08-15 22:33:36 +08:00 |
|
Yuchuan Huang
|
67b1e7fe8f
|
Merge main into feat/agent-panel-file-search
|
2026-08-15 15:54:45 +08:00 |
|
Yuchuan Huang
|
8becf5e242
|
Merge fix/login-ip-rate-limit: 登录新增 IP 级失败限速并修复锁定计数残留 (#14)
|
2026-08-15 14:36:35 +08:00 |
|
Yuchuan Huang
|
7b0b024ff8
|
feat(agent): 侧边栏文件树优化并新增文件搜索
- 侧边栏 outputs/uploads 预取子项,空目录不再展示;workspace 预取并默认展开
- 新增 FileSearchModal 文件搜索弹窗(样式与对话搜索一致,支持高亮与键盘操作)
- 后端新增 viewer 命名空间与个人工作区的按文件名递归搜索接口(含遍历上限保护),列表与搜索共用目录列举逻辑
- Agent 面板搜索命中直接打开预览;工作区页面搜索命中跳转所在目录并打开预览
- 补充两个搜索服务单元测试
|
2026-08-15 10:18:32 +08:00 |
|
Yuchuan Huang
|
6e7f0695d7
|
fix(auth): 登录新增 IP 级失败限速并修复锁定计数残留
- 新增 Redis 滑动窗口失败计数:IP+账号 10 次、IP 全局 30 次(10 分钟),跨 worker 与重启有效,超限返回 429 与 Retry-After
- 未知用户与密码错误均记录失败;登录成功清除 IP+账号维度计数
- 账号锁定到期后首次访问惰性清零失败计数,解锁后首次失败不再立即重新锁定
- 保留 main.py 内存中间件作为每 worker 快速防线,并在服务注释说明 XFF 信任前提
- 新增 7 个单元测试与 2 个集成测试(429 触发、锁定过期重置回归)
|
2026-08-15 09:32:03 +08:00 |
|
Wenjie Zhang
|
ce3ab2ff92
|
test: 清理测试套件冗余与低质量测试 (#919)
删除 5 个自证式/假绿/重复覆盖的测试文件,合并约 50 个文件的重复场景与参数转发断言,抽取 eval 与 e2e 共享 helper。净减约 2900 行测试代码,真实回归覆盖不变。
- 删除 test_hash_utils、test_skills_backend_error_handling、test_graph_router_list、test_agent_sync_e2e、test_viewer_filesystem_e2e
- 修复 test_agent_request_queue_service 两处假绿测试、test_attachment_and_agent_state 缺失核心断言
- 新增 test/unit/knowledge/eval/conftest.py 与 test/e2e/e2e_helpers.py 共享 helper
- 同步更新 changelog
|
2026-08-15 09:07:26 +08:00 |
|
Wenjie Zhang
|
f60765447c
|
fix(preview): 产物 Word 文件支持 PDF 预览并优化对话时间与 loading 展示
- 查看器文件预览路径(outputs/uploads/沙盒文件)与工作区一致:docx/pptx 先经 LibreOffice 转 PDF 再预览,转换失败返回 400 明确错误
- 消息时间紧挨复制按钮以纯文本展示,去掉背景色块与图标;按相对规则格式化(今天/昨天/周几/月-日/年-月-日)
- 流式 loading 去掉外层背景块,文字改为轻微呼吸动画,耗时改为纯文本
- 新增产物 office 预览与 formatChatTime 单元测试
|
2026-08-15 02:18:54 +08:00 |
|
Wenjie Zhang
|
07bd9bb05c
|
feat(chat): 对话输入草稿按线程保存与还原
- 新增 thread_draft 工具:草稿按线程 ID 写入 localStorage,空草稿即时清理,存储异常静默降级
- 切换对话时保存旧线程草稿并还原新线程草稿,新建对话使用独立草稿,刷新后仍可还原
- 发送创建线程后清理新建对话草稿;附件上传建线程保留并迁移已输入文本
- 删除对话时同步清理对应草稿;旧线程已删除时丢弃输入,避免孤儿缓存
- 补充 web/test/unit/thread_draft.test.js 覆盖切换、迁移、发送清理与异常回退
|
2026-08-15 01:57:43 +08:00 |
|
Yuchuan Huang
|
877a305bbd
|
chore(release): 升级版本到 0.7.2.dev0
|
2026-08-15 00:38:50 +08:00 |
|
Yuchuan
|
e44c79f1e9
|
feat(chat): 对话消息补充结束时间与执行耗时,流式 loading 实时计时 (#918)
* feat(chat): 对话消息补充结束时间与执行耗时,流式 loading 实时计时
历史接口为 assistant 消息附上关联 run 的 started_at/finished_at;
点赞栏最右侧显示消息完成时间(HH:mm),点击切换为执行耗时
再点切回。流式生成时 loading 旁实时显示已执行时长并优化
loading 指示器样式。naive UTC 时间补 Z 后缀序列化,避免前端
时区偏移。
* fix(chat): 保持流式计时连续并统一完成时间
---------
Co-authored-by: Yuchuan <Yuchuan925@users.noreply.github.com>
|
2026-08-14 23:00:01 +08:00 |
|
Yuchuan
|
00dd1743ac
|
feat(preview): HTML 预览支持缩放比例调节,默认 90% (#917)
* feat(preview): HTML 预览支持缩放比例调节,默认 90%
Agent 文件预览的 HTML 预览新增缩放调节控件:内联、顶部工具栏
与全屏预览均提供缩小/放大按钮与百分比显示,默认 90%,范围
60%-150% 步进 10%;切换文件时重置默认比例,编辑模式隐藏缩放
控件。原缩放为固定常量(内联 0.75 / 全屏 1),现改为可调节。
* fix(preview): 避免切换文件重复重建预览
---------
Co-authored-by: Yuchuan <Yuchuan925@users.noreply.github.com>
|
2026-08-14 22:56:23 +08:00 |
|
Yuchuan
|
514f7a77f8
|
fix(kb): 修复知识库图片公开访问风险 (#916)
* fix(kb): 修复知识库图片公开访问风险
知识库解析产生的图片原先写入 public bucket,nginx 无鉴权代理
/minio/public/,知道图片 URL 即可匿名访问。现将图片迁移到私有
kb-images bucket,新增带知识库读权限校验的后端代理接口按需读取,
Markdown 预览对代理图片携带鉴权头加载为 blob URL;头像/Agent
图标等公开资源不受影响。新增代理接口鉴权与非法路径集成测试。
* test(kb): 收紧图片代理路径契约
---------
Co-authored-by: Yuchuan <Yuchuan925@users.noreply.github.com>
|
2026-08-14 22:55:39 +08:00 |
|
Yuchuan
|
ffd21795cf
|
refactor: 迁移运行时配置与 LangGraph checkpoint (#915)
* refactor: 迁移运行时配置与 LangGraph checkpoint
* refactor: 收敛附件生命周期与模型解析
* style(web): 统一组件格式
* fix: 修正配置迁移与附件预处理边界
|
2026-08-14 22:26:03 +08:00 |
|
Wenjie Zhang
|
6bde1bb633
|
feat: 侧边栏对话列表显示 Thread 运行状态 (#911)
* feat: 侧边栏对话列表显示 Thread 运行状态
以 AgentRun 为事实来源,列表接口按线程批量聚合最新顶层 chat/resume Run
并映射 loading/ready/done 三态;Conversation 新增 last_viewed_run_id 持久化
查看边界并新增幂等标记已读接口,历史线程一次性回填为已读、新建线程写入
未读哨兵。前端打开线程或收到终态/中断事件时自动标记已读,发送或恢复 Run
时置为 loading,侧边栏可见时低频轮询刷新后台线程状态。
* fix: 避免 last_viewed_run_id 回填在每次启动时全表扫描 agent_runs
ensure_business_schema 在 api/worker 每次启动时都会执行,回填语句原先无条件
对 agent_runs 做 DISTINCT ON 聚合后再按 conversations.last_viewed_run_id IS NULL
过滤,首次回填完成后这个聚合仍会在每次重启时对全表重复执行。改为先用轻量
EXISTS 探测 conversations 是否还有待回填的行,仅在探测为真时才执行回填语句;
探测失败时保守地按需要回填处理,行为与探测前一致。
* fix: 修复 Thread 运行状态自动已读与回填收敛问题
按 PR review 修复两个正确性问题:
1. 前端终态/中断事件仅在事件线程等于当前打开线程时才自动标记已读,
后台线程完成保留 ready 点直至用户打开,不再误清未读状态。
2. 无 chat/resume Run 的历史会话(agent_call / agent_evaluation 调用、
从未对话过的线程)在回填时写入未读哨兵,使回填探测条件首次执行后
收敛为 false,避免每次启动都重复对 agent_runs 全表聚合。
UNVIEWED_RUN_MARKER 从 conversation_repository 上移到 models_business,
供 repository 与 manager 回填共享;补充 manager 回填探测语句单测。
* Delete web/test/unit/chatThreads.test.js
---------
Co-authored-by: Yuchuan <Yuchuan925@users.noreply.github.com>
|
2026-08-14 10:22:27 +08:00 |
|
Wenjie Zhang
|
d37809891c
|
Merge pull request #912 from Yuchuan925/feat/agent-token-usage
feat: 完善 Agent Token 用量统计
|
2026-08-13 23:04:09 +08:00 |
|