Files
dsh_shenxian/dsh-server-docs/04-调整方案/45-存量会话新开会话提示.md
T
admin 5ad755116e chore(docs): 文档库并入代码仓(R4 选 a)+ 索引/台账跟进
1) dsh-server-docs/ 从工作区(原 E:\...\aliyun-dsh-server\dsh-server-docs)**整体并入本仓**,
   保留目录名 ⇒ 仓库内 dsh-server-docs/... 的相对引用天然继续有效;旧目录(含其 .git)已归档到
   工作区 _中间产物_待清理/,未随本提交带入。
2) .gitattributes:新增 `dsh-server-docs/** -text` —— 原文档库是 `* -text` + autocrlf=false,
   必须保持纯 LF,否则会被本仓的 CRLF 规则翻掉。
3) 活引用里的绝对路径已全部改到新位置(docs 的 INDEX / README / scripts / skills + 用户级 skills
   + ~/.workbuddy/settings.json 的 hooks);历史档案(04-调整方案/、archive/)按「只增不改」未动。
   ⚠️ hooks 路径改动需「完全重启会话」才生效(配置是会话启动快照)。
4) 交接单/T08:新增 §16「生产整体切换执行记录」(形态 / 落地动作 / **4 个只有真上线才暴露的真 bug** /
   验收证据 / 回滚命令 / 残留项);台账 T08 行 → 已完成并归档;03-路线图 §二 登记 T08 收尾项。
5) 统一称谓:**「本机」只指跑 WorkBuddy 的开发机**,47 / 106 一律写「远程服务器」。
2026-09-15 18:47:13 +08:00

53 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 45-存量会话「新开会话」提示(P0-1 的最小代价处置)(2026-09-11 落地)
## 背景
档案 37a 的 **P0-1**:权限档位是**会话级播种**(建会话时写 `permission/preset` + `sandbox/mode` +
`approval/policy`,**resume 不重播**),所以档案 33 的 `DSH_PERMISSION_MODE=danger-full-access`
**只惠及新会话**;存量会话仍是 `workspace-write` + `ask` → 会话里每次 `bash` 都撞
`no sandbox backend is usable on this host` → 只能逐条审批升级(一次性,不持久)。
guest 最新会话(`session-b83ae69b`)把它暴露到极致:**5 次逐条审批**、子代理因
`approval:"never"` 无法提权而**永久无 shell**、用户最后直接问「没办法执行 bash命令了吗」。
**全会话扫描(10 个主会话,含 admin)**:`workspace-write` 10 / `danger-full-access` 0 —— 全部受害。
## 决策:做提示(B),不做会话迁移(A)
| 方案 | 内容 | 判定 |
|---|---|---|
| **A 存量会话迁移** | 改写各会话 `session.jsonl.zstd` 里的三条种子事件为 `danger-full-access` + `never` | **属 R5「扩大」**(放松沙箱 + 取消审批,且影响全部现有租户);且种子在多帧 zstd、append-only 的会话日志里,改写=重写日志+重压缩,风险与收益不成比例 → **不做** |
| **B 提示(采用)** | 告知用户「**新开一个会话**即可使用完全权限」 | 只是文案,**不属扩大** → 可直接做 |
依据:新会话(env = `danger-full-access`)**及其子代理**天然是 `danger-full-access` + `never`
(`mode = env ?? 'workspace-write'`;子代理 `mode` 继承会话、`policy` 被强制 `never`,
种子带 `"source":"delegation"`)→ **bash 直接可用、无需审批**。所以存量会话只是"残留",
**提示一次即可解决**,无需动任何权限。
## 实现
`web/login.html` 登录按钮下方插入一行常驻提示:
> 提示:若会话中 shell 频繁要求审批,**新开一个会话**即可使用完全权限(无需逐条确认)。
**为什么选 login.html**:登录直达链路是 `/` →(未登录)→ `login.html` → enter → 实例子域,
所以它是**用户必经且会停留**的页面;且属平台自有页面,零风险、不打断直达体验。
(其他候选:实例 UI 注入需改官方前端,触 R2;门户 `portal.html` 仅 admin 可见。)
## 验证记录
| 检查 | 结果 |
|---|---|
| 文件落位 | `/opt/dshs/web/login.html` 第 29 行含提示 ✅ |
| 生效副本唯一性 | 全盘 `find` 只有这一份是生效副本(另两份在 `/opt/dsh/backups/repo-bak-*` 备份里,不参与服务) |
| 静态服务 | **直连 `127.0.0.1:3080/login.html` 命中 1** ✅(重启门户后) |
| 域访问 | ⚠️ 测试时先用了 `dsh.alotbuy.com`,该域是**旧域名、301 跳转**到 `alotbuy.com`(故首次 grep 得 0);正确域为 **`alotbuy.com`** |
## 注意 / 后续
- 本提示是**常驻文案**(不区分会话新旧),因为客户端无法判定"当前会话是老会话";
文案本身对任何会话都成立(新会话本来就不弹审批,看到也无害)。
- **根治仍是新开会话**;若将来要做 A(存量迁移),需先按 R5 出「权限影响评估」并取得确认。
- 用户的**下一个真实痛点**已不是本条:技能、插件、Python 都已就绪,缺的是**把 MCN 技能投放进去**
(`bundled-skills` 目录至今为空)。