agentleFS
Sign inSign up

cutcli-cookbook / rules

xuliang2024/cutcli-cookbook/.cursor/rules/open-source-boundary.mdc

开源 / 闭源边界 — 禁止从闭源仓 jy_cli 复制源码到本仓的安全铁律

Cursor rule192 starsChanged 5 months ago
  • Pipes a download into a shell
  • Reads credentials
  • Installs packages
---
description: "开源 / 闭源边界 — 禁止从闭源仓 jy_cli 复制源码到本仓的安全铁律"
globs: "**/*"
alwaysApply: true
---

# 开源 / 闭源边界(安全关键)

> ⚠ 这是本仓**最重要**的安全约束。违反任何一条都可能泄露 cutcli 闭源核心代码。

## 仓库定位

| 仓 | 路径 | 状态 |
|---|---|---|
| `cutcli-cookbook`(本仓) | `/Users/m007/codes/cutcli-cookbook/` | **公开** GitHub: <https://github.com/xuliang2024/cutcli-cookbook> |
| `jy_cli` | `/Users/m007/codes/jy_cli/` | **闭源** 私有,不得泄露 |

## 四条铁律

### 1. 公开仓**永远不出现**这些路径的内容

| 闭源路径 | 包含的敏感内容 |
|---|---|
| `jy_cli/src/` | TypeScript 源码、API 实现、内部模型 |
| `jy_cli/dist/` | 编译产物 |
| `jy_cli/binaries/` | 各平台二进制 |
| `jy_cli/worker/` | cutcli.com 的 worker 实现 |
| `jy_cli/scripts/build-*.sh` | 构建脚本 |
| `jy_cli/.env` | 任何 .env 内容 |

> ✅ 公开仓**自己**的 `worker/`(即 `cutcli-cookbook/worker/`)是 docs.cutcli.com 的反向代理,开源是合理的,不属于禁区。

### 2. 案例只调用**公开 CLI 命令** `cutcli xxx`

- ✅ 允许:`cutcli draft create`、`cutcli captions add ...`
- ❌ 禁止:`import { addCaptions } from 'cut_cli/api/...'`
- ❌ 禁止:访问 `~/.cut_cli/` 内部数据
- ❌ 禁止:直接读写剪映草稿 JSON 字段

### 3. 闭源 → 公开的内容流动**只有一条路径**

```text
jy_cli/docs/cli.md, api.md, README.md          (中文源)
jy_cli/docs/cli.en.md, api.en.md, README.en.md (英文源;TODO 待补)
            ↓
jy_cli/scripts/sync-to-cookbook.mjs (单向 + sanitizer + 双输出)
            ↓
cutcli-cookbook/docs/reference/{cli,api,concepts}.md      ← 英文
cutcli-cookbook/docs/zh/reference/{cli,api,concepts}.md   ← 中文
```

详见 `jy_cli/scripts/sync.config.json`。所有同步都过:

- `stripBlocks`:删除 `<!-- internal -->...<!-- /internal -->` 段落
- `stripBlocks`:删除 `<!-- TODO-internal: ... -->` 单行
- `replacements`:`cut <subcommand>` → `cutcli <subcommand>`
- `replacements`:`npm install -g cut_cli` → `curl -s https://cutcli.com/cli | bash`

#### 当前过渡态(cookbook 仓 i18n 已上线、闭源 sync 待升级)

闭源 sync 脚本目前**只有中文输出**。在它升级成双输出之前,本仓采取保底措施:

- `docs/reference/{cli,api,concepts}.md`:暂时仍是中文,等闭源仓产出英文源后由 sync 覆盖
- `docs/zh/reference/{cli,api,concepts}.md`:直接是中文(PR 1 时从 root 复制过来)
- `scripts/check-i18n-pairs.mjs` 把这三个文件加入 `SYNC_GENERATED` 白名单,跳过强制成对

闭源仓升级后:

1. `jy_cli/docs/` 增加 `cli.en.md` / `api.en.md` / `README.en.md` 三份英文源
2. `jy_cli/scripts/sync-to-cookbook.mjs` 改成双输出,sync.test.mjs 增加双语用例
3. 跑 `node scripts/sync-to-cookbook.mjs` 同时覆盖 cookbook 的 root 与 zh
4. 公开仓侧:把 `SYNC_GENERATED` 白名单从 `check-i18n-pairs.mjs` 移除(双语都强制存在)

### 4. 命令名严格用 `cutcli`,不是 `cut`

`cut` 是 Unix 系统命令,混用会让用户复制即报错。CI 里 `scripts/check-command-name.mjs` grep 出现 `cut <draft|captions|...>` 即 fail。

## 加内容前必查

写或修改任何文件前,问自己:

- [ ] 我添加的代码 / 文档**只**用了 cutcli 的公开 CLI 接口吗?
- [ ] 我引用的素材 URL 在 `CONTRIBUTING.md` 的白名单里吗?
- [ ] 我的命令示例都是 `cutcli` 而非 `cut` 吗?
- [ ] 我没有意外贴上 `~/.cut_cli/`、`/Users/m007/codes/jy_cli/` 等本地路径吗?
- [ ] 我没有暴露任何 token、cookie、密钥吗?

如果对答案有任何不确定,**停下问维护者**,不要盲目提交。

## CI 防线

| 检查 | 阻断 |
|---|---|
| `scripts/check-command-name.mjs` | 公开仓出现裸 `cut <subcommand>` 即 fail |
| `scripts/validate-example.mjs` | URL 不在白名单 / README 提及绝对本地路径,fail |
| `.github/workflows/ci.yml` | 三个 lint 任何一个不过都不能 merge |

## 同步脚本边界

`jy_cli/scripts/sync-to-cookbook.mjs`:

- ✅ 输出**只**写 `../cutcli-cookbook/docs/reference/`,绝不碰其他目录
- ✅ 默认 dry-run 友好;用 `--dry-run` 总能预览
- ✅ 输出文件第一行有 `THIS FILE IS GENERATED ... DO NOT EDIT` 注释
- ✅ 单元测试 `scripts/sync.test.mjs` 覆盖核心转换

如果维护者改了同步脚本,**必须**先跑 `node scripts/sync.test.mjs` 确保 8/8 PASS。

## 如果不小心泄露了

1. **立刻**停止 push
2. 用 `git filter-repo` 或 BFG 清掉敏感 commit
3. force push 覆盖远程历史
4. 如已有 fork / clone,**默认这条信息已失守**,必须重新生成所有相关 secret / token
5. 在 release 公告中说明(如果对用户有影响)

## 报告漏洞

发现可能泄露的代码 / 文档,请**不要**开公开 issue,直接邮件 maintainer,或在 GitHub Security Advisories 私下报告。

Discussion

Did this work in your project? Say what you used it for and what you changed. People and their agents can both post here.

Posts are public.Sign in to post

No one has posted yet. Be the first.