@lark-project/cli
Version:
飞书项目插件开发工具
53 lines (36 loc) • 3.08 kB
Markdown
# Phase 0:确认站点域名(最小预检)
> **关键规则**:Phase 0 在 Phase 1 开始前执行,**只做一件事**:
> 钉死 `siteDomain`(硬前置,拿到之前不得调任何 CLI 命令,不得默认填充)。
>
> Phase 0 **不写盘**——`siteDomain` 只在对话上下文里持有,连同后续的 `pluginId` / `projectDir` / `projectRoot` / `originalRequirement` 一起延后到 Phase 1.2(cwd 已切到 plugin-dir 之后)首次写入 `<plugin-dir>/.lpm-cache/state.json`。这样 state.json 永远只有一个落点(plugin-dir),不会出现 parent / plugin-dir 两份分裂。
>
> 功能需求的意图识别、术语消歧、点位匹配全部留给 Phase 2 的 feature phase,Phase 0 不做任何解析。
> `siteDomain` 是所有 CLI 操作的定位根(Token 按域名分 key):动 CLI 前钉死、不得默认填 project.feishu.cn、不得从训练数据推断。
## 0.1 确认站点域名
**先跑 `lpm whoami`**,**一切以它列出的真实登录站点为准**,按 stdout 行事:
- **列出了已登录站点(≥1 个)** → 把 whoami 列出的**全部真实站点原样呈现给用户挑选**:
- 忽略 whoami 输出里的 `← 建议` 标记,**不预选、不带"上次登录的是 X,确认用它?"这类推荐口吻**;顺序沿用 whoami 的输出(有时间戳则最近在前,纯排序、不含推荐含义)。
- 单站点时也只列那一个,让用户确认。
- **不**附"自定义域名"项——有真实站点时只列真实的。
- 用户选定后即为 `siteDomain`,跳过下方"未登录"询问。
- **输出「未登录」**(whoami 一个站点都没列出)→ 走下方询问(唯一允许手动贴 URL 的入口)。
> 入口守卫已拦住"当前目录有 `plugin.config.json`"的场景;plugin.config.json 不存在 ⇒ plugin-dir 还没创建 ⇒ 不可能有任何上一次的 state.json 可读。
**询问(仅 whoami 报「未登录」时)**:
```
在开始之前,先确认一下你要把插件部署到哪个 Meegle 站点:
1) 飞书项目(project.feishu.cn)
2) Meegle(meegle.com)
3) 自定义域名(请直接贴站点 URL,如 https://meego.your-company.com)
请告诉我 1 / 2 / 3,或直接贴 URL。
```
**AI 硬约束**:
- ❌ **禁止**假设用户是 project.feishu.cn(即使概率最高)
- ❌ **禁止**从对话历史/训练数据"推断"用户的站点
- ❌ **禁止**填 `https://meego.example.com` 或任何占位符(CLI 会拒绝,但在 skill 层就该先拦住)
- ✅ **必须**等到用户明确回复后再继续
## 0.2 产出
- 对话上下文持有 `siteDomain`(完整 URL,含 scheme)
- ❌ **不写** `.lpm-cache/state.json`:plugin-dir 还未创建,此时写盘会落到 parent 形成孤儿。首次落盘统一发生在 Phase 1.2(见 `phase-1-scaffold.md` 1.2)。
→ 进入 Phase 1 搭建工程。
---
**恢复语义**:入口守卫保证当前目录无 `plugin.config.json` ⇒ 也无 `.lpm-cache/state.json` 可读,任何重入都从 0.1 询问 siteDomain 开始。