Skip to content

增强可观测性与归因:session_recreated、双轨看门狗、路径归因 (PR-3) - #31

Merged
Fei2411 merged 7 commits into
fix/mcp-lifecycle-acp-diagnosticsfrom
devin/fix-pr3-observability
Oct 6, 2026
Merged

Fei2411 merged 7 commits into
fix/mcp-lifecycle-acp-diagnosticsfrom
devin/fix-pr3-observability

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

看门狗语义与工作区归因的修复。

  • H-05:session/load 失败的静默 session/new 回退现在产生 pending_warnings → task.warnings,并落 session_recreated 转录事件(旧 session id + 消毒原因)。AcpUnavailableError(auth/断连/进程退出)仍响亮传播。
  • H-16 双轨看门狗:WORKER_ACTIVITY_TYPES = {message_chunk, thought_chunk, tool_call, tool_call_update, plan, raw},只有 worker 真实输出重置活跃钟——此前 bridge 自写事件(prompt_sent/turn_end/error/permission)也续命,心跳型 worker 永不 stall;新增 AgentConfig.turn_timeout_sec(默认 0=禁用)硬上限,stop_reason 分 stalled/timed_out。
  • H-06/E2/E3:SKIP_DIR_NAMES += .agent-bridge/.codex/.claude;快照 DFS 跳过 Windows junction;_classify_path 返回 (inside_rel, outside_abs),逃逸路径进新字段 files_outside_cwd(绝对 posix)——..\x 不再折叠成内部 x。files_changed 语义收窄为 cwd 内。
  • H-02:transcript.forget_session 挂到 _prune_sessions,会话淘汰时清缓存并删转录文件;end_session 保留转录作调试证据。
  • H-10:stdout readline() 超 16 MiB 转译为带数值的 RuntimeError;stderr 排空警告明示上限。

注意:与 PR-2 都在 AgentConfig 相邻区加字段——先合者无碍,后合者在 config.py 有一处两行文本冲突,语义兼容。

测试:+9 用例(session_recreated 端到端、活跃钟白名单、turn_timeout 硬 cap、inside/outside 拆分、junction 等),全套 630 passed / 1 skipped。

Link to Devin session: https://app.devin.ai/sessions/b270264aa3634bc5934cad9bcec9f9ae
Open in Devin Desktop: https://app.devin.ai/desktop/session/b270264aa3634bc5934cad9bcec9f9ae?variant=devin
Requested by: @FeiZhuLulu


Devin Review

- session/load 失败静默回退改走 pending_warnings + session_recreated 转录事件(H-05)
- WORKER_ACTIVITY_TYPES 白名单:仅 worker 输出事件重置活跃钟;新增 turn_timeout_sec 硬上限(H-16)
- SKIP_DIR_NAMES 补 .agent-bridge/.codex/.claude;快照跳过 junction;逃逸路径进 files_outside_cwd(H-06/E2/E3)
- transcript.forget_session 挂到会话淘汰,清缓存+删转录(H-02)
- stdout readline 超限转译为带数值的 RuntimeError(H-10)
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

devin-ai-integration[bot]

This comment was marked as resolved.

- _classify_path 未解析回退:先判 ../ 再 lstrip——原顺序 lstrip 会先吃掉 ../,逃逸路径被折回 cwd 内
- session_recreated 事件与 pending_warning 移到 session/new 成功之后;fallback 失败即任务失败,不再虚报已重建
- _ignored_rel 拆分 reported/snapshot 两级:磁盘快照仍跳过 .codex/.claude(churn 控制),worker 显式报告的该目录路径作为有意项目配置修改予以保留
devin-ai-integration[bot]

This comment was marked as resolved.

- _classify_path ../回退:返回 normpath(root/path) 的词法绝对路径——files_outside_cwd 契约是绝对路径,原样返回 '../x' 违约
- ensure_session:session/new 成功后立即落地 native_session_id,再做 append_event 等可失败簿记——转录写失败不再把已拒绝的旧 id 留在会话上
项目 cwd 内的 .codex/.claude 是合法项目配置(如 .codex/config.toml),快照跳过会让 worker 的真实配置修改从 files_changed 消失;worker 自身状态目录位于其 home、不在 cwd 内,不受影响。SKIP_DIR_NAMES 只保留 .agent-bridge(bridge 簿记目录),随之回收 _REPORTED_SKIP 拆分
DirEntry.is_junction 是 3.12 新增;3.11 上回落恒 False 导致 junction 被遍历(CI windows-3.11 挂)。改用 st_file_attributes & FILE_ATTRIBUTE_REPARSE_POINT——跨版本可用的重解析点检测
devin-ai-integration[bot]

This comment was marked as resolved.

REPARSE_POINT 属性会连 OneDrive 云目录等非 junction 一起跳过,丢失其下真实改动。改用 os.path.ismount——仅匹配 IO_REPARSE_TAG_MOUNT_POINT(junction/卷挂载),云重解析目录照常遍历;全版本可用
devin-ai-integration[bot]

This comment was marked as resolved.

os.path.ismount 对目录 junction 返回 False(只认卷挂载),且 POSIX 上误伤真实挂载目录。改用 DirEntry.is_junction(3.12+)或 realpath(entry) vs realpath(dirname)/name 比对:junction 解析到别处,普通目录/云重解析目录/POSIX 挂载解析为自身、照常遍历
@Fei2411
Fei2411 merged commit 3e26fba into fix/mcp-lifecycle-acp-diagnostics Oct 6, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant