feat: parliament seat collaboration loop (0.9.19)

Seats publish via parliament_note, sync pushes on write, member join without
stealing the chair, and worker tools are hard-gated when parliament is active.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
WHC
2026-10-29 11:29:38 +08:00
co-authored by Cursor
parent 1605d74f17
commit 812e3ee265
15 changed files with 532 additions and 83 deletions
+21 -15
View File
@@ -1,6 +1,7 @@
# Parliament(议会)快速上手
密码串派生 Realm → 登录夺主席 → 常驻服务同步上下文。同一时刻只有一个主席;换项目清空全部议会上下文。
密码串派生 Realm → 登录夺主席 / 加入席位 → 常驻服务密封同步共享上下文。
主席是用户入口;成员席位在本机干活并用 `parliament_note` 通报进度。
## 一次性初始化
@@ -11,39 +12,44 @@ cst-agent --realm-password-init
磁盘只存 salt + 公钥,**不存私钥**。
## 日常:登录即夺主席
## 日常:登录夺主席,或加入席位
```bash
export CST_INSTANCE_ID=laptop-a # 可选;默认 chair-local
export CST_INSTANCE_ID=laptop-a # 可选;默认用本机 hostname
cst-agent --login --realm-label "thinkpad"
# 也可:CST_REALM_PASSWORD=… cst-agent --login
# TUI: /realm login(夺主席)或 /realm join(不抢主席)
```
效果:
1. 用密码解锁 Realm,本机成为**唯一主席**(上一主席被交接)
2. 写入本地登录票(24h)
3. 拉起后台议会服务(发现 + 按 revision 同步 `parliament.context`)
1. 用密码解锁 Realm;`--login` / `/realm login` 使本机成为**唯一主席**
2. `/realm join` 只登记席位票:主席空缺时才夺椅,否则以 **member** 身份加入
3. 写入本地登录票(24h;成员票在主席易主后仍有效,除非本席被剥夺主席)
4. 拉起后台议会服务(发现 + 密封通道按 revision 同步 `parliament.context`)
查看状态:
```bash
cst-agent # TUI: /status 或 /realm
# /realm login # TUI 内登录并启服务
# /realm stop # 停服务
# /realm login|join|stop
cst-agent --service-stop
```
密码 Realm 开启后,直接打开 agent 会要求登录(TTY 下可当场输入密码)。
## 协作模式
## 议员协作协议
`settings.json` 里 `"collaboration": "parliament"`(或环境变量 `CST_COLLABORATION=parliament`)时:
席位通过共享 `parliament.context` 协作(不是进程内 `task`/`worker_*`):
- 提示词不再鼓动 `task` / `worker_start`
- 本机用工具直接干活;跨设备靠 Realm peer 席位,而不是进程内子 agent
1. 开工前阅读 Environment 里的 Shared parliament context
2. 用本机工具完成分配切片
3. 跨席相关的进度/议程/结果用工具 **`parliament_note`** 发布(`kind=status|agenda|result|handover`)
4. 服务在写入后尽快 dial peers;回合内若 revision 变化,会注入 `[cst] Parliament shared context updated`
密码 Realm 存在时也会按议会模式注入 Environment(chair / 共享 context / 设备席位)。
`settings.json` 的 `"collaboration": "parliament"`(或 `CST_COLLABORATION=parliament`),以及密码 Realm 存在时:
- **硬禁用** `task` / `worker_*` / runtime 委托工具
- 提供 `parliament_note`;提示词说明 chair / member 角色合同
## 换项目(清场)
@@ -76,4 +82,4 @@ Alpine 内构建,chair↔member 握手 + 密封通道同步(`sealed=1` / `pe
| `--service-stop` | 停服务 |
| `--new-project ID` | 清场换项目 |
| `--peer-port N` | 登录/服务用的 TCP 端口(默认 9100) |
| `--instance ID` | 实例 id(也可用 `CST_INSTANCE_ID`) |
| `--instance ID` | 实例 id(也可用 `CST_INSTANCE_ID`;默认 hostname) |