Skip to content

fix(agent): 防止异步准备阶段并发启动多个运行 - #153

Merged
helsome merged 1 commit into
helsome:mainfrom
5quan:fix/agent-concurrent-start
Sep 22, 2026
Merged

helsome merged 1 commit into
helsome:mainfrom
5quan:fix/agent-concurrent-start

Conversation

@5quan

@5quan 5quan commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

改动说明

RunManager.startRun() 原先在异步读取会话、写入 run 和用户消息之后才设置 activeRun。两个同时到达的请求可以一起通过空闲检查,覆盖单运行状态并并发进入 runtime。

现在在首次异步操作之前预留启动会话,在 finally 中释放启动标记;isRunning()hasActiveRun() 也涵盖准备阶段。并发请求沿用 RUN_IN_PROGRESS 拒绝,启动失败后仍可重试。

新增三个回归用例,覆盖同会话/跨会话并发启动,以及会话读取失败后的状态释放和重试。使用真实文件存储与可控 runtime,不需要模型或行情凭证。

关联 Issue

本次是独立发现的并发启动缺陷,不关闭其他 roadmap issue。PR #53 会修改同一文件,但其当前补丁未覆盖这段异步启动的互斥窗口;合并时需留意重叠。

测试报告

环境:Bun 1.4.2 (744846f84),Windows 11 (build 26200),上游基线 f0f4643410b70a02c199f28bd6ffb7dfe95041ad

实际使用独立安装的 Bun 可执行文件运行;类型检查时将其目录加入当前进程 PATH。等价命令及结果:

bun test packages/shared/src/kernel/run-manager.test.ts
修复前(仅加入回归测试):22 pass / 3 fail
修复后:25 pass / 0 fail

bun test packages/shared --isolate
1074 pass / 0 fail,97 个文件,4195 次断言

bun run typecheck
core / i18n / shared / ui / electron 全部 exit 0

git diff --check
通过

首次沙箱运行 shared 测试为 1073 pass / 1 fail:既有 PiRuntimeAdapter 测试写入 D:\tmp\pi 被沙箱拒绝(EPERM)。同一份代码在获准的沙箱外重跑后全部通过。未改动该测试。

改动生产文件按仓库 CI 的高信号 secret 模式扫描,无命中。

  • 已提供实际测试命令与 pass/fail 结果
  • 已说明测试环境和环境失败原因
  • 核心改动已有对应 focused test / integration 验证

UI 截图

  • 本 PR 无可见 UI 变化(无需截图)

Scope / 后续

仅修改运行管理器与对应测试。不引入任务排队、不改动会话分支功能。本地未运行真实 Pi/LLM 或 Electron E2E;本次验证针对启动互斥与持久化路径。

@helsome helsome left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查 head 331e27fd2e7aac60b259e608cef9b06b0233cfd5:这个修复把单 runtime 的互斥预留前移到首次 await 之前,并在启动失败时通过 finally 释放;成功路径进入 prepareRun 后会先建立 activeRun 再返回,因此不会在 reservation 释放时留下新的并发窗口。回归测试覆盖同 session、跨 session 并发启动,以及 lookup 失败后的 busy 状态释放与重试。作者报告 Bun 1.4.2 / Windows 11,focused 修复前 22 pass / 3 fail、修复后 25 / 0,shared 1074 / 0,全 workspace typecheck exit 0。当前 GitHub Actions 是首次 fork 的 action_required,没有实际 CI jobs,我不把它写成 CI 通过;按小型、内部正确性修复和现有可复现证据,APPROVE。合并后仍需以 merge SHA 的 main workflow 为准。

@helsome
helsome merged commit 7c9b550 into helsome:main Sep 22, 2026
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.

2 participants