@lark-project/cli
Version:
飞书项目插件开发工具
67 lines (48 loc) • 4.11 kB
Markdown
# Phase 1:搭建工程
将用户原话转化为可运行的插件工程骨架。本阶段只做创建工程一步,**不涉及点位配置**(延后到 Phase 2)。
> **Checkpoint**:本阶段的 1.2 是 `.lpm-cache/state.json` 的**首次写入点**——之前的 Phase 0 / 1.1 都不落盘,全程仅在对话上下文持有数据。详见 SKILL.md「进度追踪」章节。
## 1.1 创建插件 → 进入 create 子阶段
**进入 create 子阶段**(**不要** Skill(),本 skill 内 Read 推进——router 顶部规则):按序 Read
1. [`create-setup.md`](create-setup.md)(取 siteDomain,已在 Phase 0 钉死 → 直接复用,不重新询问)
2. [`create-plan.md`](create-plan.md)(工作名称派生 + app_type 决策 + 用户确认)
3. [`create-apply.md`](create-apply.md)(`lpm create` 执行 + 日志解析 pluginId / projectDir + auth 兜底 + cwd 切换)
4. [`create-verify.md`](create-verify.md)(plugin.config.json 五字段完整性 + node_modules / src 就绪)
> **被 workflow 编排的语义**:workflow 已在入口守卫验过当前目录无 `plugin.config.json`,create 子阶段内的「EXIST 拦截」无需重复执行;若 create reference 文件里仍残留独立调用语境下的 EXIST 拦截 prose,按本编排路径**跳过**它。
workflow 层**不得**在此处直接 `lpm create`、**不得**自己拼目录名、**不得**自己 cd——任何一项都会绕过 create 子阶段的 HARD GATE(C19 P1.5 决策树 + C34 cd HARD GATE)。
create 子阶段完成时的契约:cwd 在插件子目录、对话上下文持有 `pluginId` / `projectDir` / `projectRoot`。**create 子阶段不写 state.json**(保持与 workflow 状态解耦),状态落盘统一在 1.2。
**后置 verify(防弱 AI 跳过 create skill 或中途短路)**:
```bash
pwd && test -f plugin.config.json && echo "PHASE1_CWD_OK" || echo "PHASE1_CWD_FAIL"
```
- `PHASE1_CWD_OK`:进入 1.2;记下当前 `pwd` 作为 `context.projectRoot`,后续每条 lpm 命令都带 `--cwd "<projectRoot>"`(详见 [workflow-overview.md「cwd 锚定规则」](workflow-overview.md) 与 [`shared.md` 执行约定](shared.md))
- `PHASE1_CWD_FAIL`:create 子阶段没真跑完 A3,**不得自己 cd 凑数**——回 1.1 重新走 create 子阶段的 Read 序列
## 1.2 首次 checkpoint 落盘(state.json 零号写入点)
PHASE1_CWD_OK 通过、cwd 已在 plugin-dir、create 内部 HARD GATE 全过——此时把对话上下文里的 5 个字段一次性写入 checkpoint。用 `lpm ai state set`(CLI 经 `workspacePaths()` 把路径锚定到插件根的 `.lpm-cache/state.json`、`assertPluginRoot` 守卫,不依赖裸相对路径):
```bash
lpm --cwd "<projectRoot>" ai state set '{
"phase": 1,
"step": "1.2",
"stepName": "首次 checkpoint 落盘",
"context": {
"siteDomain": "<Phase 0 采集>",
"pluginId": "<create A1 日志解析>",
"projectDir": "<create A1 日志解析>",
"projectRoot": "<create A3 PHASE1_CWD_OK 后的 pwd 输出>",
"originalRequirement": "<用户启动 workflow 时说的那句话,逐字保留>"
}
}'
```
**硬约束**:
- 这是 state.json **零号写入点**——先 `lpm --cwd "<projectRoot>" ai state get`,有输出(例如断点恢复进入 1.2)则跳过写入,按 SKILL.md 恢复规则继续
- `originalRequirement` 逐字记录,**不做任何后处理**(不提取 mentionedPointType、不判空指令、不追问)
- `.lpm-cache/` 目录由 `lpm ai state set` 自动创建,不用手动建
- 5 个字段缺一不写——缺了说明 Phase 0 / 1.1 没真正完成,回到对应步骤补齐
- **不写 `app_type`**——形态信息已经由 `lpm create --app-type` 落进 `plugin.config.json`,Phase 2/3 子 skill 与 CLI 都以那里为权威源;state.json 不复述,避免双源漂移
## 1.3 阶段输出
```
✅ 插件工程骨架搭建完成
pluginId: MII_xxxxxxxxx
工程目录:<context.projectRoot> ← 当前 cwd 已切到此处
下一步:正在分析可用点位...
```
**自动进入 Phase 2,无需用户确认。**