@lark-project/cli
Version:
飞书项目插件开发工具
154 lines (117 loc) • 12.6 kB
Markdown
# Meegle Plugin Skills — 插件开发 Skill 集合
本目录包含 Meegle(飞书项目)插件开发的 Skill,由**三个** skill 组成。下面先把**每份 skill 到底要干嘛**(定位 / 目标 / 边界)讲清楚——这是后续所有改动的北极星,避免每次迭代各做各的、定位漂移。
> **实现对齐状态(2026-05)**:本 README 描述的是梳理定下的**目标定位**。已落地:代码 craft 知识独立成 `meegle-plugin-backend` skill;`meegle-plugin` 不再 Read backend skill(互不 Read)、不写后端代码(只产交接包甩出);独立的 `backend` phase 已折叠进 feature 的 `stage=backend`(路由层 5 phase)。
> **仍待定**:`feature-overview.md` 的 `Stage Config / Stage Code` 命名(暂保留,`Stage` 是为避开 workflow 的 `Phase` checkpoint 命名空间而有意取的);`external-backend` context 与 `config-only` 维持现状不动 —— 曾设想用"插件身份全局化 + 工作态 cache 的 local→global 解析"统一收口,但评估后认为复杂度过高、**已搁置**(设计存档见 [`PROPOSAL-global-identity-and-cache.md`](PROPOSAL-global-identity-and-cache.md))。
> 读 SKILL.md 时以本文的定位为准、以 SKILL.md 的实际机制为执行依据,两者打架以本文为目标态。
---
## 一、三份 skill 各干嘛(定位章程)
### `meegle-plugin` —— 插件全 / 半流程编排器
**一句话**:站在**插件工程目录**里,把「新建 / 迭代一个飞书项目插件」从想法推到「可调试 / 可发布」的 workflow 编排器。它编排 `lpm` 工具链 + **前端**代码生成。
**它做**:
- 新建场景:初步澄清需求 + 定位 `app_type`(normal / ai_node / ai_field,不可逆)
- 迭代场景:在已有工程上做一个 feature
- 点位配置推送、权限申请(`lpm perm apply`)这些**前置工作**
- 完善信息、发布上线
**它不做(边界)**:
- **从不写后端代码**——任何点位的服务端那一半(webhook 收+验签 / 调 OpenAPI / 写回 / 代理)**一律产交接包甩给另一个会话**完成。后端上下文主要在业务侧,本 skill 不背。
- **不 Read `meegle-plugin-backend`**——plan 阶段评估「后端可行性」只用 `lpm perm list`(按 `app_type` 拉出有哪些 scope/OpenAPI 接口、读接口描述文案判够不够用),不查签名、不碰「怎么写」。
- 不碰 Meegle 业务数据(工作项 / 视图 / 需求 / 缺陷 → 走 `meegle` / `lark-project`)。
**5 个 phase**(路由层按 cwd 上下文 + 用户意图选;phase 间靠 `Read references/<file>.md` 推进、不重新加载 skill):
| phase | 核心职责 | 触发场景 |
|------|---------|---------|
| `workflow` | 新插件端到端编排(Phase 0 澄清+钉站点+定 app_type → 1 搭建 → 2 feature → 3 发布) | "从零做一个 xxx 插件" |
| `create` | 只搭空壳工程骨架(`plugin.config.json` + 目录) | "只初始化插件项目骨架" |
| `feature` | 在已有工程上做一个 feature(主线见下) | "加个功能 / 点位"、"改功能"、"重新生成代码" |
| `polish` | AI 总结生成插件名称 / 描述 / 分类 | "完善插件信息"、"改名称 / 描述" |
| `publish` | 发布三步串行:update → release → publish(不可逆) | "发布"、"上线"、"release" |
> **没有独立的 `backend` phase**。后端不是平级 phase,只是 feature / workflow 末尾「需要后端时产交接包」的一步。
**feature 主线(plan → 前置 → code → 交接)**:
```
① plan config.plan 出【前端点位配置方案】+【后端 perm 可行性早检(P5.1)】→ 初判 FE / BE / both
↳ 但「前端要 SDK 给不了的平台数据」型代理路由写前端时才暴露 → code.plan P3.5 / code.verify V4 允许补充识别后端那一半,识别即并进交接包(不是 plan 漏判,是 code 阶段才暴露的需求)
② 前置工作 点位配置推送 + 权限申请(lpm local-config set / lpm perm apply)
③ code 只写前端 React(纯后端形态整段跳过)
④ 交接 若需要后端 → 产交接包,甩给另一个会话(不自己写、不读 backend 知识)
```
### `meegle-plugin-backend` —— 后端开发知识(被召回)
**一句话**:纯后端「怎么写」的知识参考——webhook 接收+验签 / token 获取 / OpenAPI 出入参签名 / 写回工作项·AI 节点·AI 字段 / `/api/proxy/*` 代理 / `lpm perm list` token-only 查能调清单。
**性质**:**facts-free 代码 craft + 带源事实**。平台事实(要调哪些 OpenAPI / 签名 / scope / 验签 / 写回)逐条带源、可验证;据此写出的代码跑在沙盒外、`lpm` 不校验、无 `tsc`/`build` 反馈环,由接手者在自己环境联调自验。**不编排流程、不规定顺序**。
**谁召回它**:
- **接手会话(主路径)**:坐在自己后端仓里,拿着 `meegle-plugin` 产的交接包,召回它查「怎么写」、写代码、联调。
- 用户在后端仓直接问「webhook 怎么验签 / 这接口出入参啥样 / 这 app 能调哪些 OpenAPI」也直接命中它。
- **`meegle-plugin` 自己不召回它**——职责切干净:编排在 `meegle-plugin`,代码 craft 在这里,互不 Read。
### `meegle-plugin-cli` —— 原子化 CLI 命令 + 诊断
**一句话**:单条 `lpm` 命令参考 + 状态诊断(启动调试 / 构建 / 同步配置 / 查看配置 / 申请权限 / 报错排查)。**只服务插件工程自身的脚手架 / 配置 / 构建 / 调试 / 发布,不操作 Meegle 业务数据**。多步编排(发布 / 点位配置 / 代码生成)由 `meegle-plugin` 的 phase 直接处理,不经过本 skill。
---
## 二、路由分工
```
用户指令
│
├─ 插件开发全生命周期(创建 / 加点位 / 写前端 / 完善信息 / 发布)—— 站在插件工程目录
│ └─→ meegle-plugin ── SKILL.md §1 入口 SOP 按 cwd + 意图路由到 phase:
│ ├─ 从零做一个完整插件("我需要一个 xxx 插件") → phase=workflow(端到端 create→feature→polish→publish)
│ ├─ 只创建空壳工程骨架 → phase=create
│ ├─ 在已有工程加 / 改点位 + 前端代码 → phase=feature(需后端时末尾产交接包甩出)
│ ├─ 完善名称 / 描述 / 分类 → phase=polish
│ └─ 发布 / 上线 → phase=publish
│
├─ 后端那一半「怎么写」(webhook 验签 / OpenAPI 出入参 / 写回 / 代理)—— 坐在自己的后端仓里
│ └─→ meegle-plugin-backend ── 被交接包召回,或用户直接问后端写法时命中(不依赖插件工程目录)
│
└─ 原子 CLI 操作 / 单命令诊断("启动调试" / "构建" / "同步配置" / "当前状态" / "报错排查")
└─→ meegle-plugin-cli ── 单条 lpm 命令 + 状态诊断
```
### 分水岭
- **插件开发编排 + 前端那一半(配点位 / 写前端 / 完善信息 / 发布……)** → `meegle-plugin`
- **后端那一半「怎么写」(webhook / OpenAPI / 写回 / 代理)** → `meegle-plugin-backend`(在你自己的后端仓里召回;`meegle-plugin` 产的交接包是入口)
- **只跑一条原子 `lpm` 命令 / 诊断一个报错** → `meegle-plugin-cli`
- **Meegle 业务数据查询(工作项 / 视图 / 仪表盘 / 需求 / 缺陷)** → `meegle` / `lark-project`(不归本目录)
`meegle-plugin` 的每个 phase 各有**前置守卫**(见 `SKILL.md` §1 / §2 与各 `*-overview.md`):
- 在已有工程目录里说"从零做新插件" → 拦截(避免破坏既有工程)
- cwd 不是插件工程却要"加功能" → 引导走 workflow(新插件全流程)
- 创建插件 / 推送配置 / 开通 scope / 发布等**不可逆 / 真实数据动作** → 执行前 MUST 显式确认
> **认证由 CLI 统一负责**:用户自行执行 `lpm login`(见接入文档)。skill 调 CLI 遇 auth 报错时,AI 逐字转呈 stderr 指引,由用户完成授权后重试。
---
## 三、目录结构
```
skills/
├── meegle-plugin/ ← 编排 + 前端那一半:插件全生命周期(SKILL.md 内部 SOP 路由到 phase)
│ ├── SKILL.md (唯一路由层:§1 入口 SOP 按 cwd context + 意图选 phase)
│ └── references/
│ ├── shared.md ★ 共享规则(认证 / 安全 / 工具职责 / 插件工程识别 / 三条根原则 / 全量提交约束 / 删除点位 gate / MCP 检索协议)
│ ├── checkpoint.md (.lpm-cache/state.json 断点续跑协议)
│ ├── errors.md (权限不足等错误处理)
│ ├── source-attribution.md (前端不写 source 注释的说明 / reviewer 审计用)
│ ├── create-{overview,setup,plan,apply,verify}.md (phase=create 创建工程骨架)
│ ├── feature-overview.md (phase=feature 入口 + app_type 锚定)
│ ├── feature-config-{plan,apply}.md (feature 点位声明)
│ ├── feature-code-{setup,plan,apply,verify}.md (feature 前端 React)
│ ├── feature-point-types/ (点位标准能力 doc)
│ │ ├── context-only.md (configuration / page / view 合并扁平速查)
│ │ ├── shared-scenes.md ★ 跨点位共享场景(详情页表单共享上下文)
│ │ └── liteAppComponent/ · dashboard/ · button/ · componentSchedule/ · control/ · customField/(各有 index.md + 维度子文件)· ai_node/(仅 card.md,前端面只在开节点卡片时存在,无 index.md)
│ ├── polish-{overview,analyze,generate,confirm,apply}.md (phase=polish 名称/描述/分类)
│ ├── publish-{overview,pre-check,apply,verify}.md (phase=publish 同步+构建+发布)
│ └── workflow-{overview,phase-0-context,phase-1-scaffold,phase-2-feature,phase-3-release}.md (phase=workflow 端到端编排)
├── meegle-plugin-backend/ ← 后端那一半「怎么写」的知识参考(被交接包召回;不依赖插件工程目录)
│ ├── SKILL.md (知识索引:每类后端知识从哪取、哪些带源可验)
│ └── references/
│ └── backend-handoff.md (交接包格式:把带源事实落成一份 md 交给接手会话)
└── meegle-plugin-cli/ ← 原子命令 + 诊断(单条 lpm 命令;不碰业务数据)
├── SKILL.md (路由表 + A/B 速查表;前置 Read meegle-plugin/references/shared.md)
└── references/
├── commands.md (原子命令参考)
└── diagnose.md (状态诊断 + 报错排查)
```
---
## 四、公共依赖
共享规则集中在 [`meegle-plugin/references/shared.md`](meegle-plugin/references/shared.md),含:
- 插件工程识别规则(`plugin.config.json` + `MII_` 前缀)+ 执行约定(`lpm --cwd <绝对路径>` 锚定插件根)
- 统一认证(由 CLI 按 siteDomain 分域管理)
- 安全规则(禁止输出密钥、全量提交约束、删除点位确认协议、不可逆动作前确认)
- 无源即停通则(AI 输出每一项有业务语义的内容必须可溯源到合法信息源)
- Checkpoint 协议见 [`meegle-plugin/references/checkpoint.md`](meegle-plugin/references/checkpoint.md)(workflow 进度追踪 + 断点续跑)
`meegle-plugin` 在 §0「Always Read First」读 `shared.md` + `checkpoint.md`;`meegle-plugin-cli` 执行前同样先 Read `meegle-plugin/references/shared.md`。`meegle-plugin-backend` **不依赖** `shared.md`——它自足,「查不到即停、绝不编造」「凭据走 env」等规则写在它自己的 SKILL.md 里(它跑在你自己的后端仓、读不到本目录)。
---
## 写 / 改 skill 前先看
- [`AUTHORING.md`](AUTHORING.md) — 编写原则(正确性第一 / 校验归 CLI / 跨 OS / 多 agent / 弱 AI 友好 / 正向表达 / 引用 AI 可达 / 不写 changelog)+ `lpm ai peek` / `lpm ai checkpoint` 等工具公式