Skip to content

feat(agent): 支持安全批量删除委派子会话【已审核 PR】 - #2031

Open
Andreaseszhang wants to merge 9 commits into
proma-ai:mainfrom
Andreaseszhang:feat-bulk-delete-delegated-sessions
Open

Andreaseszhang wants to merge 9 commits into
proma-ai:mainfrom
Andreaseszhang:feat-bulk-delete-delegated-sessions

Conversation

@Andreaseszhang

Copy link
Copy Markdown
Contributor

概述

为 Proma 的直接委派子会话增加父会话作用域内的安全批量删除能力。用户可从父会话或直接子会话的菜单进入显式多选模式,在当前 active/archived 视图中选择可删除的直接子会话;主进程在提交前复核归属、委派关系、后代与 busy 状态,避免误删运行中或非目标会话。

改动

  • packages/shared/src/types/agent.tsapps/electron/src/preload/index.tsapps/electron/src/main/ipc.ts — 新增并贯通 deleteDelegatedSessions IPC 契约与逐项结果类型。
  • apps/electron/src/main/lib/agent-session-delete-service.ts — 提供批量删除协调器:参数去重/上限、父子关系与委派身份验证、teardown 后 TOCTOU 重检、单次 metadata 提交和逐项错误反馈。
  • apps/electron/src/main/lib/agent-session-manager.tsapps/electron/src/main/lib/fs-retry.ts — 支持批量 metadata 原子删除;将 JSONL 与会话工作目录清理改为异步且最多四路并发,并保留 Windows 文件占用重试策略。
  • apps/electron/src/renderer/components/app-shell/LeftSidebar.tsxapps/electron/src/renderer/lib/delegated-session-bulk-delete.ts — 增加父会话范围的多选、全选、Busy 禁用、确认删除、部分失败重试和 Esc 退出;操作浮层锚定父会话右侧,按钮等宽并收紧尺寸;选择行采用单一 role="checkbox" 语义。
  • apps/electron/src/main/lib/*test.tsapps/electron/src/renderer/lib/delegated-session-bulk-delete.test.ts — 覆盖父子归属、Busy、后代、teardown 后状态变化、部分失败、原子 metadata 删除和选择状态协同。

测试方法

  1. 运行 bun test apps/electron/src/main/lib/agent-session-manager.test.ts apps/electron/src/main/lib/agent-session-delete-service.test.ts apps/electron/src/renderer/lib/delegated-session-bulk-delete.test.ts,38 项通过。
  2. 运行 bun run --filter='@proma/electron' typecheck
  3. 运行 bun run --filter='@proma/electron' build:renderer
  4. 运行 git diff --check

备注

  • 已进行两轮独立只读审查;第二轮指出的工作区删除、父删子留和 Windows 持久重试问题属于既有路径,不是本功能引入的改动,按产品决定不纳入本 PR。
  • 当前分支已 rebase 到最新 main

Made with Proma · GitHub

@Andreaseszhang
Andreaseszhang marked this pull request as draft September 9, 2026 04:15
@Andreaseszhang
Andreaseszhang marked this pull request as ready for review September 9, 2026 07:58
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