feat: 需要用户决策时主动通知(桌面 toast / 决策日志 / IM 机器人) #95

Merged
gjm merged 2 commits from company-desktop/company-desktop-computer/feat-notify-on-decision AGit into main 2026-10-28 15:52:28 +08:00
Collaborator

背景:用户可能不在终端前面(远程连过来、或者走开了),agent 把问题打在终端里就停住,
人根本不知道,等于空等。

新增:

  • tools/notify_decision.ps1
    • Windows toast(WinRT),失败则回退到模态弹窗(120 秒自动关),并带提示音
    • 追加写入 %USERPROFILE%.pi\agent\decisions\pending.md,漏看 toast 也不丢问题
    • 可选 webhook:-Url 或环境变量 PI_NOTIFY_WEBHOOK;
      企业微信/钉钉用 {"msgtype":"text",...},URL 含 feishu/lark 时自动换飞书格式
    • 中文必须走 -MessageFile(UTF-8 读取),避免命令行参数被控制台代码页弄乱
    • 任何失败都 exit 0,通知出问题不能反过来中断 agent
  • .pi/skills/notify-decision/SKILL.md:什么时候该通知、消息里必须写清"要决定什么 /
    选项与代价 / 我的建议与默认动作"三件事、通道配置方式
  • AGENTS.md:加一小节指向该 skill,并在仓库内 skill 表格里登记

验证:本机跑通三种调用(ASCII -Message、中文 -MessageFile、加 -NoBeep),
中文在决策日志里显示正常;toast 通过 PowerShell appId 注册,WinRT 接口检测为可用。
仅新增工具与文档,未触碰任何编译产物与源码。

背景:用户可能不在终端前面(远程连过来、或者走开了),agent 把问题打在终端里就停住, 人根本不知道,等于空等。 新增: - tools/notify_decision.ps1 - Windows toast(WinRT),失败则回退到模态弹窗(120 秒自动关),并带提示音 - 追加写入 %USERPROFILE%\.pi\agent\decisions\pending.md,漏看 toast 也不丢问题 - 可选 webhook:-Url 或环境变量 PI_NOTIFY_WEBHOOK; 企业微信/钉钉用 {"msgtype":"text",...},URL 含 feishu/lark 时自动换飞书格式 - 中文必须走 -MessageFile(UTF-8 读取),避免命令行参数被控制台代码页弄乱 - 任何失败都 exit 0,通知出问题不能反过来中断 agent - .pi/skills/notify-decision/SKILL.md:什么时候该通知、消息里必须写清"要决定什么 / 选项与代价 / 我的建议与默认动作"三件事、通道配置方式 - AGENTS.md:加一小节指向该 skill,并在仓库内 skill 表格里登记 验证:本机跑通三种调用(ASCII -Message、中文 -MessageFile、加 -NoBeep), 中文在决策日志里显示正常;toast 通过 PowerShell appId 注册,WinRT 接口检测为可用。 仅新增工具与文档,未触碰任何编译产物与源码。
company-desktop added 1 commit 2026-10-28 15:48:26 +08:00
背景:用户可能不在终端前面(远程连过来、或者走开了),agent 把问题打在终端里就停住,
人根本不知道,等于空等。

新增:
- tools/notify_decision.ps1
  - Windows toast(WinRT),失败则回退到模态弹窗(120 秒自动关),并带提示音
  - 追加写入 %USERPROFILE%\.pi\agent\decisions\pending.md,漏看 toast 也不丢问题
  - 可选 webhook:-Url 或环境变量 PI_NOTIFY_WEBHOOK;
    企业微信/钉钉用 {"msgtype":"text",...},URL 含 feishu/lark 时自动换飞书格式
  - 中文必须走 -MessageFile(UTF-8 读取),避免命令行参数被控制台代码页弄乱
  - 任何失败都 exit 0,通知出问题不能反过来中断 agent
- .pi/skills/notify-decision/SKILL.md:什么时候该通知、消息里必须写清"要决定什么 /
  选项与代价 / 我的建议与默认动作"三件事、通道配置方式
- AGENTS.md:加一小节指向该 skill,并在仓库内 skill 表格里登记

验证:本机跑通三种调用(ASCII -Message、中文 -MessageFile、加 -NoBeep),
中文在决策日志里显示正常;toast 通过 PowerShell appId 注册,WinRT 接口检测为可用。
仅新增工具与文档,未触碰任何编译产物与源码。
company-desktop added 1 commit 2026-10-28 15:51:01 +08:00
接微信/钉钉时 URL 是密钥,不能进仓库,也不适合每次都写在命令行里。

- webhook 取值顺序:-Url 参数 > 环境变量 PI_NOTIFY_WEBHOOK >
  %USERPROFILE%\.pi\agent\notify.json 的 webhook 字段 > notify_webhook.txt 纯文本
  (两个备用文件都在仓库之外,不会被提交)
- 新增 -Probe:只做一次连通性自检并打印结果(URL 打码,只显示前 32 位与后 8 位)
- 修正一个误判:企业微信/钉钉出错时仍返回 HTTP 200 + errcode,
  原来只判断 HTTP 成功会把"密钥无效"当成发送成功。
  现在解析响应体,errcode/code 非 0 一律视为失败并把原因带出来
  (实测假 key 返回 errcode=93000 invalid webhook url)

验证:-Probe 在"未配置"和"配置了假 key"两种情况下都给出正确结论,
未做真实推送(还缺用户的企业微信机器人地址)。
gjm approved these changes 2026-10-28 15:52:24 +08:00
gjm merged commit 254387f187 into main 2026-10-28 15:52:28 +08:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gjm/envi-code#95