# MEMORY.md
这个是你的记忆文件，将关于这个项目的重点内容，记录在这里，我也会要求你记录一些内容。
你可以随意访问，编辑这个文件的内容。
保持这个文件的内容，能正确反映项目的当前状态，历史记录可以删除。

# cloudcc-cli 开发约定

## 命令行结构

```text
cloudcc <action> <resource> [args...]
```

- `argvs[0]` = action（`get`、`create`、`doc`、`assign` …）
- `argvs[1]` = resource，须与 `bin/index.js` 的 `modules` key 一致
- `argvs[2]+` = 子命令参数

`bin/index.js`：`modules` + `Proxy`，按 `argvs[1]` 分发到 `modules[type](argvs)`。未知 type 时 throw，由 `bin/cc.js` 的 catch 统一输出提示。  
**禁止**仅挂 `cc.object`、`cc.plugin`——`cc['get']` 会不存在。

`src/<resource>/index.js`：局部 `cc` 对象挂实现（`cc.get = require('./get')`），仅做 `cc[argvs[0]](argvs)` 分发，**不**在 index 里拆参数。子文件各自从 `argvs[2]+` 解析。

## 测试约定（强制）

- 本项目功能测试优先使用 **CLI 黑盒测试**（通过 `npx --prefix "<repoRoot>" cloudcc ...` 或等价命令执行）。
- **禁止**在测试中直接引用源码模块（如 `require("../src/...")`）做白盒单测，除非用户明确要求。
- 测试用例应以 CLI 行为与输出为验收标准（命令是否成功、stdout/stderr 是否符合预期）。

---

## 发版流程

### Release 日志规则（强制）

- `# ReleaseV…` 节内**全部英文**（Date / Scope / Content 下的列表）。
- `src/version/get.js` 从 `package.json` 读版本，无需单独改。

### 口令 → 动作映射

**「推送代码」/「保存代码」**：

1. `git diff` 归纳改动，写入 `#### Release Content`（英文）。
2. 定位 `README.md` 中 `# ReleaseV<package.version>` 小节：
   - `Release Date:` **空** → 只增补当前节，**不**升版本号。
   - `Release Date:` **已有日期** → 递增版本号（patch），在 README 最前插入新 `# ReleaseV<新版本>` 节，`Release Date:` **留空**。
3. `git add -A && git commit -m "<英文摘要>" && git push`。

### 用户协作约定

- 当用户说“保存代码”或“提交代码”时，默认提交当前工作区的**全部改动**，不要只提交单个文件，除非用户明确要求拆分提交。
- 当用户说“推送技能仓库”时，默认按 `cloudcc-dev-skill` 目录下的**独立 git 仓库**处理，而不是主仓库：
  1. 进入 `cloudcc-dev-skill` 目录检查其 `git status`、`git remote -v`、`git branch -vv`。
  2. 若有改动，则在该仓库内提交并推送到它自己的远程分支（当前默认是 `origin/master`）。
  3. 不要误把这条指令当成推送主仓库 `cloudcc-cli`，除非用户明确说明。

**「发布版本」**：

1. README 对应节的 `#### Release Date:` 填当天日期（`YYYY-M-D`）。
2. 运行 `npm run npm-publish`（含 publish、commit、push、npmmirror sync）。

**仅说「更新日志/补 readme」**：先询问是否升版，未确认只改当前版本节。

### 升版时同步

- `package.json` → `version`
- `package-lock.json` → 根包 `""` 的 `version`（及顶部字段）
