Skip to content

feat(agent-companion): 权限等待提醒改读客户端状态行,修会话生命周期与音效 - #121

Open
Demons12341 wants to merge 2 commits into
changexbc:mainfrom
Demons12341:feat/agent-companion-permission-wait
Open

Demons12341 wants to merge 2 commits into
changexbc:mainfrom
Demons12341:feat/agent-companion-permission-wait

Conversation

@Demons12341

Copy link
Copy Markdown
Contributor

范围是 vendor/agent-companion/(Agent Studio)。

如果这些改动更适合提到该项目的原仓库,我可以拆出去另开 PR。

权限等待提醒(核心)

客户端弹「需要你允许 / 是否仍要运行?」时不发 hook(Notification/permission_prompt 那条链路在客户端里是死代码),以前只能靠「工具开始后长时间没有反馈」去猜。

  • 新增 log_watch.rs:读插件宿主 agent 日志的状态行 running → waiting_user_input(弹窗那一刻写、带会话 id)精确进出「待确认」;waiting_user_input → running 解除
  • 停用旧的「[SafetyRule] Dangerous command detected + 匹配刚收到的 PreToolUse」通路:实测那行是点完确认之后才落盘,按它触发只会「确认后提示、随即一闪而过」
  • 解除事件必须带同一轮次(roundId),否则 hub 的 permission_resolve 定位不到那条 pending
  • 保留 45s 阈值推断作为兜底(permission-check.ts 90s → 45s,来源纳入 codebuddy-ide)

会话生命周期

  • SessionEnd 不再把会话置为 aborted:新建/切换会话、finalize 都会发它,且 payload 用的是全局唯一的 sessionId,不代表后台任务真结束(实测「新建对话」会让仍在后台跑的旧会话收到 SessionEnd)。改为由 Stop(回合结束 → done)收敛,hub 加 STALE_IDLE = 5min 兜底(Codex 仍用 45min)
  • 新增 WAIT_EXPIRY = 15min:未被解决的权限等待不会永远挂着
  • 新增 workspace_history.rs:按会话 id 从 genie-history 桶名反查真实工程目录(hook 的 cwd 在 IDE 未打开目录时给的是安装目录,会顶掉用户原有窗口)

音效与其它

  • 宿主新增 monitor-alert 事件;snd 模块按告警类型播系统 wav(Windows PlaySoundW(零新依赖)、macOS afplay),需要确认 / 完成用感叹音、失败用错误音(系统音色别名在多数主题里会指向同一个文件,用户反馈过两者听感一样)
  • Windows 的 quote_path 改为双引号 + 正斜杠:cmd.exe 不认 POSIX 单引号,而 MSYS bash 里反斜杠又是转义雷区;保留 hook_command_legacy 仅用于识别旧安装并在重装时清理
  • rail-controller.ts:待确认卡片点 ✕ 改为结束本轮监听(closePendingRound)而非只静音,否则卡片会一直挂着「待确认」再也消不掉
  • desktop/session.rs(Windows):vscode_history_roots / activate_app / open_vscode_folder,用 code <folder> 而非 -r,避免顶掉已打开该目录的窗口
  • .gitignore:忽略 vendor/agent-companion/dist-embed2/

新增 log_watch.rs 读插件宿主 agent 日志状态行 running -> waiting_user_input 精确进出待确认;新增 workspace_history.rs 按会话 id 反查工程目录;SessionEnd 不再误 abort 多会话;hub 增加 STALE_IDLE/WAIT_EXPIRY 兜底;宿主按类型播系统 wav;Windows hook 引号形态改为双引号+正斜杠。
Windows 上 open_session_target 用裸 Command::new 拉起 powershell.exe / code.cmd(批处理),未加 CREATE_NO_WINDOW,每次悬浮窗跳转都会闪一个 cmd 窗口。新增 spawn_command() 统一加 0x0800_0000,并替换该文件全部 Command::new 调用点(macOS/Linux 透传)。

This branch has not been deployed

No deployments
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