aps-agent/Pi-Agent接入计划.md

84 lines
5.9 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.

# Pi Agent 接入集成计划(结合现有架构与产品规范)
> 2026-09-02 · 依据:`plan.md` §2.1/§2.2(Gateway 层"Pi Agent 接入"职责)、`PROJECT_OPERATING_RULES.md`、`docs/architecture/harness.md`、`skills.md`、`overview.md`、现状代码(`server/agent_core/`:tool_runtime / mcp_bus / skills / harness / audit)
>
> **对象界定**:Pi Agent = badlogic 开源 Pi(`pi-coding-agent` CLI + `pi-agent-core` runtime + npm 技能包扩展生态)。若实际指内部自研 Agent 或其它产品,P0-P2 阶段不变,仅 P1 的接插件形态替换。
---
## 1. 接入方向决策(先定方向,再谈工期)
| | 方向 A:**外向接入**(推荐) | 方向 B:内向嵌入 |
|---|---|---|
| 含义 | APS 暴露稳定 API/MCP 面,Pi 作为**外部客户端智能体**通过技能包调用 APS 能力 | 把 `pi-agent-core` 嵌入 APS,作为通用执行 runtime |
| 与宪法兼容性 | ✅ 完全符合:Gateway 是接入层本职;写操作仍过 Harness,「LLM 只有提议权」不破 | 🔴 高风险:引入第二个工具执行通道,与 `tool_runtime`(唯一执行入口)、`_POWER_MAP`(未登记默认 P3 拒绝)直接冲突 |
| 技术栈 | 现有 FastAPI 面 + 一个 npm 技能包(TypeScript) | 需内嵌 Node runtime 或 IPC 桥,桌面 sidecar 复杂度大增 |
| 工期量级 | **5-7 周全量,2-3 天见 PoC** | 8 周以上且要重审门禁体系 |
**结论:选方向 A。** plan.md 把 Pi Agent 接入放在 Gateway 而非 Agent Core,本身就说明意图是"接入通道"而非"换引擎"。
## 2. 架构落位(与现有层一一对应)
```
Pi CLI(用户终端)
└─ pi-aps 技能包(npm,新开发) ← 唯一新增的外部组件
└─ HTTPS → Gateway (BFF) ← 既有面,加 /api/agent/* 适配
├─ 认证:Agent Token(新,基于既有 JMS/租户体系签发)
├─ 只读意图 → tool_runtime 只读白名单(已存在)✅ 零改动
├─ 写意图 → _POWER_MAP 登记 → P2/P3 确认卡 ✅ 既有机制
│ └─ Pi 侧权限钩子 ← 确认卡状态轮询/SSE
└─ 审计:actor="pi-agent:<device>",全链路证据链 ✅ 既有机制
治理面:Pi 接入在 mcp_bus 登记为插件(tool 级 allow/deny、健康探测、启停)✅ 总线已有
```
**核心原则:不为 Pi 开任何后门。** 所有写路径复用 `/api/actions/confirm` 唯一执行通道;Pi 只是"另一个 UI 入口",和 Web 前端同权同级。
## 3. 分阶段计划与工期估算
### P0 · 验证性 PoC(2-3 天)
- 跑通 Pi 扩展机制:开发最小技能包 `pi-aps`,调通 `GET /api/health`(校验 `interfaceVersion`)+ `GET /api/world/summary`
- 验证三件事:① Pi 技能包的工具注册/权限钩子 API 形态;② 认证链路(先用开发态 token);③ SSE 会话流在终端的呈现方式
- **产出**:PoC demo(终端里问"当前 KPI"→ 真实数据)+ go/no-go 报告
- 人力:1 人 × 2-3 天
### P1 · 只读接入(1 周)
- Gateway 新增 `/api/agent/` 适配层:把只读意图白名单(`order.pool`/`plan.buckets`/`conflict.list`/`knowledge.query` 等 19 个)封装为 agent 友好的 JSON-RPC 风格端点
- Agent Token 签发与吊销(P2 确认卡管理,落 `~/.aps` 或租户库;scope 到只读)
- `pi-aps` v0.1:查询类命令全集 + 错误透传(遵守规范:失败显式报告,不泛化确认)
- 黄金测试:agent 端点契约 + token 越权 fail-closed
- 人力:1 人 × 1 周
### P2 · 写操作过门禁(1-2 周)
- P1/P2 意图(如 `flex.schedule` 试排草稿、`skill.enable`)接入:确认卡在终端呈现为 Pi 权限确认钩子,批准后走 `/api/actions/confirm`
- 证据链贯穿:Pi 发起的 P2/P3 写同样冻结 `evidenceRefs`/`beforeSnapshot`,审计 `actor=pi-agent` 可独立过滤
- **关键约束**(来自 PROJECT_OPERATING_RULES):不得引入隐式副作用;DRAFT/未批准状态不得当事实返回给 Pi
- 人力:1 人 × 1-2 周(确认卡异步交互在 CLI 的 UX 是主要变数)
### P3 · MCP 总线治理化(1-2 周)
- Pi 接入面在 `mcp_bus` 登记为正式插件:manifest + 工具契约(input/output JSON Schema + P0-P3 权力标注)+ tool 级 allow/deny + 健康探测 + 启停
- 三方契约同步:`shared/schemas/` ↔ `contracts.py` ↔ 技能包类型定义,纳入 `test_contract_sync.py` 门禁
- 管理台:SkillConsole 同款 UI 呈现 Pi 插件(概览/健康/审计/日志)
- 人力:1 人 × 1-2 周
### P4 · 验收与发布门禁(1 周)
- 全量黄金测试(当前基线 1071 项)+ agent 专项;文档同轮(harness.md 端点备案、skills.md、CHANGELOG)
- 安全评审:token 泄漏面、桌面态 nonce 与 agent token 的并存策略
- 桌面端打包冒烟(sidecar 不变,风险低)
- 人力:1 人 × 1 周
**合计:1 人约 5-7 周;P0+P1(只读可用版)2 周内可演示。**
## 4. 风险与规范映射
| 风险 | 等级 | 规范依据与对策 |
|------|------|---------------|
| 第二个执行通道绕过 Harness | 🔴 | 铁律:所有写走 `tool_runtime`/`/api/actions/confirm`;加黄金测试断言"agent 端点无直写 store" |
| 确认卡在 CLI 的异步 UX | 🟡 | P2 阶段先做同步轮询版;超时自动拒绝(fail closed) |
| Agent token 权限蔓延 | 🟡 | scope 最小化(先只读);签发/吊销走 P2 确认卡;审计独立 actor |
| Pi 上游版本漂移 | 🟡 | 技能包锁定 Pi 版本范围;`min_bus_version` 同款兼容声明 |
| 与 Tauri 迁移抢人力 | 🟡 | 两者都动 Gateway/sidecar 周边——**建议串行**:先 Pi 接入 P0-P1(不动壳),Tauri 决策等 WebView2 调查 |
## 5. 建议的下一步
先跑 **P0(2-3 天)**:成本最低,直接验证"Pi 技能包 ↔ 现有 Gateway"的匹配度,产出 go/no-go。P0 不过,后面全部不用谈;P0 过了,P1 的估算就有实测依据了。