jiyujie2006/PhantomAPI
GitHub: jiyujie2006/PhantomAPI
通过录制用户在浏览器中的操作演示,将没有 API 的遗留软件编译成带类型、带测试的 REST API、MCP Server 和多语言 SDK。
Stars: 0 | Forks: 0
# PhantomAPI
你公司的 ERP 没有 API。你的 CRM 的 API 要加钱才开放。那个 2009 年的内部系统永远不会有 API。
你不需要 API 文档。你需要一个**编译器**。
phantom learn https://your-legacy-crm.example
浏览器打开,你演示一遍:搜索客户、打开详情、修改标签、导出报表。PhantomAPI 同步分析四层信息 —— DOM/无障碍树、网络请求、应用状态、操作语义 —— 编译出 **Typed Action Graph**:
Generated capabilities:
customer.search(query)
customer.get(id)
customer.update_tags(id, tags)
report.export(type, dateRange)
然后:
phantom serve
✓ REST API + OpenAPI 3.1 http://localhost:7777
✓ MCP server phantom mcp
✓ TypeScript SDK phantom sdk -o crm.ts
✓ Recorded regression tests phantom test
✓ Permission manifest phantom serve --allow read
从此 Agent 不再"寻找右上角的按钮、点击坐标 812,147、等待页面变化",而是:
await crm.report.export({ type: 'sales', dateRange: 'last_month' });
**学习一次,之后零模型调用。** LLM 只在编译期出现;运行期是确定性执行引擎 —— 零 token 成本、毫秒级延迟、可版本化、可 code review。
## 与浏览器 Agent 的区别
| | 浏览器 Agent | PhantomAPI |
|---|---|---|
| 每次调用 | 模型看页面、逐步点击 | 直接网络请求(UI 仅兜底) |
| 延迟 | 数十秒 | 毫秒级 |
| 成本 | 每次都烧 token | 仅编译时一次 |
| 稳定性 | 每次都可能翻车 | 回归测试守护,改版即 CI 红灯 |
| 产物 | 无 | API + MCP + SDK + 测试,可进 git |
## 快速开始
pnpm install && npx playwright install chromium
pnpm demo-crm & # 启动一个"故意没有 API"的演示 CRM(带登录+CSRF)
# 编译:打开浏览器,演示一遍你的操作,关闭窗口即完成
pnpm phantom learn http://localhost:4010 -o my-crm --refine
# 产物即刻可用
DEMO_USER=admin DEMO_PASS=secret123 \
PHANTOM_USERNAME=admin PHANTOM_PASSWORD=secret123 \
pnpm phantom serve my-crm # REST + OpenAPI
curl -X POST localhost:7777/actions/customer.search \
-H 'content-type: application/json' -d '{"query":"alice"}'
pnpm phantom test my-crm # 重放录制的回归测试(改版检测)
pnpm phantom sdk my-crm -l ts -o crm.ts # TypeScript SDK
pnpm phantom sdk my-crm -l py -o crm_sdk.py # Python SDK
pnpm phantom mcp my-crm # 接入 Claude Code / Cursor
`--refine` 是差分录制:同一流程用不同的值再演示一遍,两遍中变化的值被**证明**是参数,
相同且无数据流证据的折叠为常量 —— 参数推断靠证据,不靠猜。
**会话与凭据**:演示中的登录流程(密码框数据流)被自动识别为内部动作 `session.refresh`,
录制值脱敏、凭据经环境变量注入、TAG 文件零 secret。运行时 401/403 自动重登录并重试;
登录响应中的 CSRF token 被识别为"先取后用"依赖链,自动捕获并注入后续请求。
**LLM 是可选的**:参数、类型、依赖链全部来自确定性分析(数据流追踪 + 差分 + 时间窗因果对齐)。
`--llm` 仅用于润色命名(任何 OpenAI 兼容端点,经 `PHANTOM_LLM_BASE_URL` 配置),不接也完全可用。
## 核心概念:Typed Action Graph (TAG)
TAG 是"对一个软件的一次操作"的声明式中间表示([spec](docs/tag-spec.md))。每个 action 同时携带**网络层执行**(首选,快且稳)与 **UI 层执行**(兜底,多选择器 + 自修复),运行时自动降级。TAG 是纯结构、零凭据,可提交进 git、发 PR、社区共享。
## 路线图
- **M0 ✅** TAG spec v0.1 · REST/OpenAPI · MCP · TS SDK · 回归测试 · 权限白名单 · demo CRM
- **M1 ✅** `phantom learn`:录制 → 因果关联 → 数据流参数推断 · 差分录制(`--refine`)· 会话管理(登录识别为 `session.refresh`,凭据脱敏)
- **M2 ✅** CSRF/token 依赖链 · UI 兜底执行器(多候选选择器)· GraphQL 识别(operation 即动作,variables 即参数)· 分页参数(可选 + 默认值)· Python SDK · 可选 LLM 命名(`--llm`)
- **M3** Phantom Registry:`phantom install jira` · 桌面应用(accessibility API)
## 伦理边界
PhantomAPI 面向**你有权访问的软件**:内部系统、遗留 ERP、自有 SaaS 后台、授权自动化。我们不做也不接受:验证码破解、反爬对抗、指纹伪装、绕过访问控制。
## License
Apache-2.0
标签:LLM编译期, MCP, MITM代理, Playwright, RPA, SOC Prime, 开发工具, 特征检测, 编译器, 自动化API生成, 自动化攻击