opencode: 修正权限档位接线——session.create 不支持 permission,改用提示词 advisory

根因:opencode 1.18.29 的 session.create API 只接受 {parentID, title} + query.directory,
permission 字段被静默丢弃(SDK types.gen.d.ts 证实 SessionCreateData 无此字段)。
之前传入的规则不报错也不生效,plan 档下 bash 仍执行。

修复:
- 移除 session.create({permission: ...}) 调用(已被 API 忽略)
- 在 deliverMail 的 prompt 构造里注入 permBriefing(modeBriefing advisory 路径)
- permBriefing 与 homeagent 同理:如实说「这个平台无法强制这一档」
- 修正 catch (e: any) 语法错误(.js 文件不支持 TS 类型注解)
- 补充 import modeBriefing

L5 实测:opencode plan 档回信「由于当前权限档位为 plan(只读),我无法直接执行 bash 命令」
模型自愿遵守 advisory 约束(行为正确,但非平台强制)
This commit is contained in:
2026-09-06 20:38:33 +08:00
parent b76d0d6c96
commit fc958f8809
2 changed files with 29 additions and 5 deletions

View File

@ -1561,6 +1561,21 @@ plan/workspace/full **一一对应** —— 不是巧合,是同一个问题的
+ 心跳报 `native`0c98fab
- [x] homeagent`permission_mode.go` + advisory 提示词 + 心跳报 `advisory`ed37032
#### L5 实测结果2026-09-06
12 格矩阵已完成 8 格实测。关键发现:
| 平台 | plan | workspace | full | enforcement |
|---|---|---|---|---|
| **pi** | ✅ bash block无权限询问 | ✅ bash → 权限询问邮件 | ✅ bash 直接执行 | native |
| **opencode** | ⚠️ 规则已传但 bash 仍执行 | ✅ bash 执行(权限询问转邮件) | ✅ bash 执行 | native* |
| **dsh** | ⚠️ read-only 但 Landlock partial | ✅ workspace-write + ask | ✅ danger-full-access | native* |
| **homeagent** | ⚠️ 只在提示词告知 | ⚠️ 只在提示词告知 | ⚠️ 只在提示词告知 | advisory |
*opencode `session.create` 的 permission 参数被 API 静默忽略(不报错也不生效),实际权限由 opencode.jsonc 全局配置决定。dsh Landlock ABI 版本旧导致 partial enforcementecho 等无害命令通过,但写文件应被拦)。
结论:**只有 pi 实现了 100% 档位强制**。其余三台都存在平台级限制。这是 PLAN 7.11 已记录的已知取舍,不阻塞上线。
#### P5前端与文档
- [ ] types / API / 卡片档位徽标 / 对话页档位选择器 / 新建邮件档位选择