Files

45 lines
4.3 KiB
Markdown
Raw Permalink 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.
# Agent Studio Mini
可运行的内部培训 Harnessassistant-ui 负责交互呈现,Fastify 负责 HTTP/SSEHarness 管理 Session、事件、审批、图片和安全边界,Pi Coding Agent SDK 执行真实 Agent Loop。截图可在首次启动后补入 `docs/screenshot.png`
```mermaid
flowchart LR
UI[assistant-ui Composer/Thread/Tool UI] -->|HTTP + SSE| API[Fastify API]
API --> R[SessionRegistry]
R --> P[Pi AgentSession]
R --> E[EventStore / ApprovalBroker]
P --> L[DefaultResourceLoader / Tools]
E --> UI
L --> S[Skills / Workspace / ModelRuntime]
```
## 快速开始
要求 Node.js 20+ 与 pnpm。运行 `pnpm install`,复制 `.env.example``.env` 并按需填写,然后 `pnpm dev`Web 为 <http://localhost:5173>API 为 <http://localhost:3001>。也可不写环境密钥,在顶部“模型设置”中提交 Provider、API、Base URL、Model ID、Vision 能力与 API Key。密钥只在当前服务进程的 Session 内存中保存,不回传、不写 Web Storage 或 Pi 全局文件。
课堂 Demo:配置模型,发送“请使用 ads-analysis Skill,分析账户 demo-account 最近 7 天数据,找出异常 Campaign,并输出账户总结、关键指标和 3 条优化建议。最后使用 report-writer Skill 生成一份报告草稿。”可再附图并说明图片仅为辅助信号。`save_report_draft` 会暂停并等待批准;Approve 写入 Session 固定 `report.md`Deny/Timeout 不写文件。
## 职责与行为
- Pi `AgentSession` 与 Harness Event Store 是事实来源;`useExternalStoreRuntime` 只是投影层,不请求模型。
- Skills 由 `DefaultResourceLoader.reload()` 发现,Catalog 仅显示元数据;正文保留 progressive disclosure。
- `.agents/skills``.pi/skills` 和按操作系统 `path.delimiter` 解析的 `AGENT_SKILLS_DIRS` 会 canonicalize、去重和诊断。
- `skill.requested`/`skill.loaded` 是 Harness 根据 canonical `SKILL.md` read 请求/成功结果推导的事件,不是 Pi 原生事件。(当前教学实现保留索引边界,完整 read preflight 映射见路线图。)
- Tool 白名单为 `read/grep/find/ls/mock_ads_metrics/save_report_draft`;未知 Tool denyshell/edit/write 不注册。
- 上传只接受 magic bytes 与 MIME 一致的 JPEG/PNG/WebPSharp 自动旋转、限制像素并重编码去元数据;结构化图片传入 `session.prompt(text,{images})`
- SSE 支持 sequence、Last-Event-ID、补发、15 秒 heartbeat、去重所需 ID 与断开清理。
## 版本与 API 核对
2026-08-26 核对 Pi 官方 SDK/Skills/Extensions/Security/Models/Providers 文档及 assistant-ui Custom Runtime/External Store/Tools/Tool UI/Attachments 文档,并检查安装包类型。实际锁定:`@earendil-works/pi-coding-agent` 0.84.3、`@assistant-ui/react` 0.15.16、`@assistant-ui/react-markdown` 0.14.12、Fastify 5.12.1、TypeBox 0.34.x。Pi 当前公开 `createAgentSession``DefaultResourceLoader``ModelRuntime.registerProvider/setRuntimeApiKey``SessionManager.inMemory``defineTool`/TypeBoxassistant-ui 当前公开 `useExternalStoreRuntime`、Toolkit 与 Attachment 类型。独立 markdown 包没有 0.15.x,故按注册表实际稳定版 0.14.12。未使用 `unstable_*``makeAssistantTool``useAssistantToolUI`
## 安全边界与限制
Pi **没有内置 Sandbox**Project Trust 只是项目资源加载防线,不是执行隔离;Pi 与 Extension 继承 Node 进程权限。本课堂版用显式工具 allowlist、随机 Session cwd、路径守卫、固定报告路径、审批、SSRF/DNS 检查、图片重编码与事件脱敏降低风险,但不等于 OS Sandbox。不可信 Skill、脚本、仓库或无人值守任务必须运行在 Docker、VM、micro-VM 或远程 Sandbox。
状态是单进程内存,重启丢失;没有用户鉴权、CSRF、速率限制、分布式协调或对象存储。生产化应加入 Redis/Postgres、对象存储、KMS、身份与租户鉴权、CSRF/限流、容器隔离、不可变审计日志和分布式 SSE。
## 验证
`pnpm lint``pnpm typecheck``pnpm test``pnpm build`。默认测试使用 fake/内存边界,不需要真实 API Key 或真实模型。更多内容见 [架构](docs/architecture.md)、[事件映射](docs/event-mapping.md)、[安全边界](docs/security-boundaries.md)、[课堂演示](docs/classroom-demo.md)和[生产路线](docs/production-roadmap.md)。