@lark-project/cli
Version:
飞书项目插件开发工具
64 lines (48 loc) • 3.24 kB
Markdown
# mode=apply:最小化创建插件工程
## A1:执行 lpm create
```bash
lpm create \
--site-domain <siteDomain> \
--name "<工作名称>" \
--app-type <appType> \
--force
```
> 参数来源:
> - `<siteDomain>` 来自 Phase 0 采集(含协议,如 `https://meego.feishu-boe.cn`)
> - `<工作名称>` 来自 plan P2 派生
> - `<appType>` 来自 plan P1.5 判定,**必填**,取值 `normal` / `ai_node` / `ai_field` 之一。**写错就要重建工程**——若上下文 `appType` 变量没值,回到 plan P1.5 重判,不得猜默认值。
> - `--force` 跳过当前目录已是插件仓库时的确认提示,确保 AI 可非交互执行
> - 不传 `--description` / `--detail-description`,这些在 polish phase 阶段填充
该命令会:
1. 调用 API 创建插件,获取 pluginId + pluginSecret
2. 自动执行 init 初始化工程(拉模板 + 写入 plugin.config.json + npm install)
### 成功
```
🍻🍻🍻 Create successfully! Plugin ID: MII_xxx. Local project directory: my-plugin.
```
从日志逐字抓 `Plugin ID:` 与 `Local project directory:` 两值(目录名由 CLI 内部派生,**不可凭工作名拼**),分别记到对话上下文的 `pluginId` / `projectDir` 变量上。**不**写 `.lpm-cache/state.json`——create skill 与 workflow 状态解耦,state.json 由 workflow Phase 1.2 统一首次落盘。
### 失败处理
| 错误类型 | 处理方式 |
|---------|---------|
| API 超时 | 等待 5s 后重试一次 |
| 权限不足 | 逐字转呈 CLI stderr 登录指引,由用户执行 `lpm login` 重新授权后重试 |
| 名称已存在 | 提示用户���改��称,重新执行 A1 |
| npm install 超时 | 等待 30s 后重试一次(最多 2 次) |
| 未知错误 | 展示原始错误,终止并告知用户 |
## A2:输出
```
✅ 插件工程创建成功
pluginId: MII_xxxxxxxxx
工程目录:my-plugin/ ← 从 A1 日志原样抓
下一步:切 cwd 到工程目录(A3)
```
## A3:切 cwd 到新工程(HARD GATE)
`lpm create` 在父目录生成子目录、跑完后 cwd 仍在父目录;后续 `lpm` 命令必须在子目录内才不会报"非插件目录"。create 完成前必须把 cwd 切进去并验证,编排方(workflow)和独立调用都依赖这一步落定。**单条 bash call 跑下面组合命令**(拆开多 call 笨 AI 易丢 cd):
```bash
cd "<projectDir>" && pwd && test -f plugin.config.json && echo "CWD_OK" || echo "CWD_FAIL"
```
- `CWD_OK`:把 `pwd` 输出(绝对路径)记到对话上下文的 `projectRoot` 变量上,create 完成
- 编排方/用户继续后续 `lpm` 命令时统一带 `--cwd "<projectRoot>"` 前缀(不依赖 cwd 持久;详见 [workflow-overview.md「cwd 锚定规则」](workflow-overview.md) 与 [`shared.md` 执行约定](shared.md))
- **不**写 state.json——同 A1,create skill 不碰 workflow checkpoint
- `cd: No such file or directory`:A1 抓的目录名不对,回 A1 重读日志,不得继续
- `CWD_FAIL`:create 未落盘(A1 没真正生成子目录),统一回 A1 失败处理表排错,不得继续;**不要**在父目录跑 mode=verify——verify 假设已在 plugin-dir,跨目录跑会全 fail