Files
inkreach-teable-cli/docs/cli-skill-design.md
T
yeuimu 8dacbf7f2d fix(cli): 轨迹分析驱动的 8 处命令修复 + 技能文档同步 (0.1.5)
- table get/update: 改用真实路由 /api/base/:baseId/table/:tableId(/name)
- view get/update/delete: table 域路由;view update 实现文档承诺的
  --filter/--sort/--group/--column-meta(sort 自动包装 sortObjs)
- record create --fields 自动包装 {records:[{fields}]}
- record delete 单条走单删端点(修复单值 query 解析成 string 的 400),
  支持位置参数;record list 加为 record get 别名
- record get-one / record get --record-id 走 table 域路由
- 移除 sql 命令:后端无 SQL 查询 API(404),技能文档 5 处同步改写
- plugin 技能 dev-workflow 内联 known-good webpack.config
  (禁止 output.library.type=iife,评估轨迹中 with_skill 组也反复踩坑)
2026-09-29 06:45:37 +00:00

196 lines
11 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.
# 设计:inkreach-cli + inkreach-teable skill
> 日期:2026-08-07
> 分支:develop
> 关联调研:自动化 API 契约调研报告(本会话产出)
## 1. 背景与动机
inkreach-teable(本项目)自研了一套自动化(workflow)引擎,与官方 teable 的自动化**完全不兼容**:
| 维度 | 官方 teable | 本项目(inkreach-teable) |
|---|---|---|
| 过滤条件键名 | `filter` | `conditions` |
| 监听字段键名 | `watchFieldIds` | `fieldIds` |
| recordCondition category | `recordMatchesConditions` | `recordCondition` |
| Webhook 路由 | `/api/webhook/base/{baseId}/workflow/{wfId}` | `/api/webhook/{baseId}/{wfId}` |
| scheduledTime | 完整 timing | 后端只读 `timing.type`+`interval`,其余忽略 |
| 节点 config 结构 | 自有契约 | 本项目自研 |
官方 `teable` CLI(v0.6.22)按官方契约调用,**无法操作本项目自动化**(已实测:列自动化时 404/契约不匹配)。表格/字段/记录/视图的 REST API 则与官方完全兼容。
**结论**:必须自研一个 `inkreach-teable` CLI 包装本项目真实契约,并配套一个 skill 教 Agent 如何使用。
## 2. 目标
1. **`inkreach-teable` CLI**(`packages/inkreach-cli/`):Node.js 命令行工具,封装本项目全部 REST API,重点是自研自动化契约。
2. **`inkreach-teable` skill**(`.agents/skills/inkreach-teable/`):教 Agent 何时用哪个 CLI 命令、配置表格与自动化的正确姿势、本项目的部署/开发约定。
3. **端到端验证**:在本地实例真实跑通"建表 → 建自动化 → 配 buttonClick 触发器 → 激活 → 查执行历史"全链路。
## 3. CLI 设计(`packages/inkreach-cli/`)
### 3.1 技术选型
- **运行时**:Node.js(无额外运行时依赖,项目已是 Node 栈)。
- **框架**:`commander`(成熟、零学习成本、官方 teable CLI 也用 commander)。
- **HTTP**:`node:https`/`node:http`(**不用** `fetch`——Node v24 全局 fetch 会吞 Authorization 头,这是本会话已确认的坑)。封装一个 `request()`。
- **配置存储**:`~/.inkreach-teable/config.json`(endpoint + token),支持环境变量覆盖 `INKREACH_TEABLE_ENDPOINT` / `INKREACH_TEABLE_TOKEN`。
- **输出**:默认人类可读(表格/着色),`--json` 输出原始 JSON 供 Agent 解析。
- **零运行时依赖**优先(commander 是唯一依赖),便于 `node bin.js` 直接跑、便于打包。
### 3.2 命令树
```
inkreach-teable [全局选项] <命令>
全局选项:
--endpoint <url> 覆盖配置的 endpoint(默认 http://localhost:3000)
--token <token> 覆盖配置的 PAT
--base-id <id> 默认 base(多数命令可省略)
--json 输出原始 JSON(供 Agent 解析)
--debug 打印请求/响应到 stderr
认证:
auth login 交互式配置 endpoint + 创建/输入 PAT
auth status 验证 token 有效性(GET /api/user/me)
auth token create 创建 PAT(POST /api/access-token,返回完整 token 仅一次)
auth token list 列出 PAT
auth token delete <id>
表格/字段/记录/视图(兼容官方端点):
base list / get
table list / get / create / update / delete
field list / get / create / update / delete
record get / create / update / delete
view list / get / create / update / delete
自动化(自研契约,核心):
workflow list 列出 base 下所有自动化
workflow get <id> 详情(含 nodes + edges)
workflow create --name <n> 创建(自动带 recordCreated 触发器)
workflow update <id> [--name] [--desc] 改名/描述
workflow delete <id> 软删除
workflow activate <id> 激活(建快照 + 注册触发器)
workflow deactivate <id> 停用
workflow test <id> 测试运行(mock 输入跑 action)
workflow node set <id> 整体替换 nodes+edges(PUT /node)
触发器配置(便捷封装,生成正确的 config JSON):
trigger set <wfId> --type <T> [选项] 设置触发器类型与配置
--type: recordCreated|recordUpdated|recordCondition|recordCreatedOrUpdated|
formSubmitted|scheduledTime|buttonClick|webhook
--table-id, --field-ids, --form-id, --conditions <json>,
--schedule <json>, --batch <json>
Action 配置:
action add <wfId> --type <T> [选项] 添加 action 节点
--type: script|sendEmail|httpRequest|createRecord|updateRecord|getRecords
各类型选项见 api-reference
action update <wfId> <nodeId> [选项]
action delete <wfId> <nodeId>
Secrets:
secret list <wfId>
secret set <wfId> --name <n> --value <v>
secret update <wfId> <id> [--name] [--value]
secret delete <wfId> <id>
执行历史:
runs list <wfId> [--status failed|succeeded|running]
runs get <wfId> <executionId>
runs rerun <wfId> <executionId>
触发(手动激发,用于测试):
fire button-click <tableId> <recordId> <fieldId> 模拟按钮点击
fire webhook <baseId> <workflowId> [--body <json>] 模拟 webhook
SQL(只读):
~~sql <sql>~~ (removed in 0.1.5 — backend has no SQL query API)
```
### 3.3 关键设计决策
1. **键名严格用代码真实值**:`conditions`(非 filter)、`fieldIds`(非 watchFieldIds)、`recordCondition`(非 recordMatchesConditions)。CLI 内部硬编码正确键名,Agent 无需记忆。
2. **`trigger set` / `action add` 是"智能封装"**:Agent 传简单参数,CLI 生成正确的节点 JSON,调 `PUT /node` 整体替换。避免 Agent 手搓节点 JSON 出错。
3. **`PUT /node` 是整体替换**:CLI 的 `action add/update/delete` 内部都先 `GET` 完整图、修改、再 `PUT` 全图,保证不丢节点。
4. **scheduledTime 如实反映后端行为**:skill 文档明确标注"后端只认 `timing.type`+`interval`",CLI 的 `--schedule` 参数只接受这两个字段,多余的会在文档里说明无效。
5. **webhook 路由用真实的**:`fire webhook` 打 `/api/webhook/{baseId}/{wfId}`(非前端展示的 /base//workflow/ 路径)。
6. **认证:PAT 格式 `teable_{id}_{加密sign}`**:CLI 不自行加密,通过 `auth token create`(调 POST /api/access-token)拿到完整 token 字符串,存入配置。
7. **`--json` 模式**:所有命令支持,输出原始 JSON,Agent 可解析。默认是人类可读表格。
8. **错误处理**:非 2xx 响应解析 `{error:{code,message}}`,人类模式打印友好错误,`--json` 模式打印原始错误体。
## 4. Skill 设计(`.agents/skills/inkreach-teable/`)
### 4.1 SKILL.md(入口)
YAML frontmatter(name + 极详细的 description 触发条件)+ 以下章节:
1. **先决条件与约束**:CLI 安装、endpoint/token、`--base-id` 默认值、`--json` 模式
2. **模块地图表**:用户意图 → 模块 → 入口命令 → 该读哪篇 guide
3. **路由规则表**:正确做法 vs 错误做法(带原因)
4. **快速语法**:最常用命令的示例
5. **关键约束**:键名差异、scheduledTime 简化、webhook 路由、PUT 整体替换、快照语义
6. **执行规则**:标准顺序(确认上下文 → 读后写 → 执行 → 验证)+ 关键规则(带原因)
7. **常见错误与恢复**
8. **API 参考索引**
### 4.2 目录结构
```
.agents/skills/inkreach-teable/
├── SKILL.md 入口
├── metadata.json 版本元数据
├── scripts/
│ └── install.sh 安装/升级 inkreach-teable CLI(pnpm build + link)
└── guides/ 与 api-reference/ 按需加载
├── guides/
│ ├── instance-access.md 本实例访问信息(endpoint、服务状态、凭据获取)
│ ├── cli-reference.md CLI 全命令参考(含 --json 用法)
│ ├── tables-fields.md 建表/字段类型/记录/视图
│ ├── automation-guide.md 自动化配置全流程(核心)
│ └── development.md 本项目开发(构建/重启/systemd/已知坑)
└── api-reference/
├── trigger-types.md 8 触发器配置细节(真实键名)
├── action-types.md 6 执行器配置细节
└── field-types.md 字段类型别名与选项
```
### 4.3 与官方 agent-skills 的差异
- **键名**:全部用本项目真实键名(`conditions`/`fieldIds`/`recordCondition`),不沿用官方的 filter/watchFieldIds。
- **scheduledTime**:如实标注后端简化实现,不教 Agent 配后端不认的字段。
- **webhook**:用真实路由,明确说明 authorization 后端不校验。
- **新增 buttonClick 完整链路**:按钮字段创建 → buttonClick 触发器 → 激活 → `fire button-click` 测试。
- **development.md**:官方无此内容,本项目独有(systemd 双进程、构建重启、沙箱无 process 等坑)。
## 5. 实施顺序(TDD/SDD)
1. **CLI 骨架**:`packages/inkreach-cli/` 初始化(package.json、bin、commander 框架、`request()` 封装、config 存储、auth login/status)。
2. **基础资源命令**:base/table/field/record/view(官方兼容端点,最简单)。
3. **workflow 命令**:list/get/create/update/delete/activate/deactivate/test。
4. **触发器/Action 便捷封装**:`trigger set` / `action add/update/delete`(内部 GET-modify-PUT 全图)。
5. **secrets / runs / fire**(sql 已在 0.1.5 移除:后端无 SQL 查询 API)。
6. **skill 文档**:SKILL.md + guides + api-reference + metadata + install.sh。
7. **端到端验证**:真实实例跑通全链路。
8. **注册**:在 AGENTS.md 添加 skill 说明。
## 6. 验证标准
- `inkreach-teable auth status` 返回当前用户。
- `inkreach-teable workflow list --base-id bseeZR7yiDNeMPCa4CN` 列出自动化。
- `inkreach-teable workflow create --name "CLI测试" --base-id bseeZR7yiDNeMPCa4CN` 创建成功。
- `inkreach-teable trigger set <wfId> --type buttonClick --table-id tblXXX --field-ids '["fldXXX"]'` 正确配置。
- `inkreach-teable action add <wfId> --type script --code '...'` 正确添加节点。
- `inkreach-teable workflow activate <wfId>` 激活成功(返回 snapshotId)。
- `inkreach-teable fire button-click ...` 触发执行。
- `inkreach-teable runs list <wfId>` 能看到刚才的执行。
- skill 被 Agent 正确加载(出现在 available_skills)。
## 7. 非目标
- 不做 App 构建/网页抓取(本项目无此功能)。
- 不修复 scheduledTime 后端缺陷(如实记录,CLI 只暴露有效字段)。
- 不发布到 npm(本地 `pnpm link` 即可)。
- 不保持与官方 teable CLI 的命令兼容(独立命令树)。