@freelog-cli/cli2 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,81 @@
1
+ # 快速开始:发行一个普通文件
2
+
3
+ 本例把 `video.mp4` 作为普通单资源发成首版 `1.0.0`。以下示例以 dev 环境为例;不要把真实密码写进命令行参数或脚本文件。
4
+
5
+ ## 1. 安装、确认与登录
6
+
7
+ CLI 要求 Node.js 20 或更高版本。尚未安装时,先执行:
8
+
9
+ ```powershell
10
+ node --version
11
+ npm install --global @freelog-cli/cli2
12
+ freelog-cli --cli-version
13
+ ```
14
+
15
+ 如果 `freelog-cli` 找不到,重新打开终端;仍无法使用时,检查 npm 全局可执行目录是否已加入 `PATH`。以下统一写作 `freelog-cli`。
16
+
17
+ 首次使用推荐在交互终端直接登录;CLI 会安全地隐藏密码输入:
18
+
19
+ ```powershell
20
+ freelog-cli login --env dev
21
+ ```
22
+
23
+ ```powershell
24
+ # 登录成功后,可查看安装包内自带的完整手册路径
25
+ freelog-cli --help
26
+ ```
27
+
28
+ 自动化或非交互终端需要同时传 `--login-name`、`--password-stdin`、`--yes`;由 CI 的保密输入把密码写入标准输入,绝不把密码写进命令行、脚本或环境变量。登录成功后,工程只保存账号选择器;token、Cookie 等秘密由系统凭据库保存。
29
+
30
+ ## 2. 建立工程身份
31
+
32
+ 普通资源要先登录,因为资源类型来自平台的当前类型树。已知最终叶子 code 时可直接初始化:
33
+
34
+ ```powershell
35
+ freelog-cli init . --type RT006003 --yes --env dev
36
+ ```
37
+
38
+ 不知道 code 时先查询,或不传 `--type` 进入交互式层级选择:
39
+
40
+ ```powershell
41
+ freelog-cli type search 视频 --env dev
42
+ freelog-cli type info RT006003 --env dev
43
+ freelog-cli init . --env dev
44
+ ```
45
+
46
+ `init` 只写 `.freelog/1.json`,不会创建线上资源、上传文件或创建版本。
47
+
48
+ 上一步已在当前目录写入 `.freelog/auth` 也可以再执行 `init .`:CLI 会保留这一个账号选择器,并拒绝覆盖任何其它已有工程内容或资源身份。
49
+
50
+ ## 3. 创建线上资源壳
51
+
52
+ ```powershell
53
+ freelog-cli create `
54
+ --title "我的视频" `
55
+ --name my-video `
56
+ --artifact video.mp4 `
57
+ --yes --env dev
58
+ ```
59
+
60
+ 因为工程已经通过 `init` 记录了类型,这里不必重复传 `--type`;CLI 会在提交前重新验证该类型。没有先 `init` 时也可以直接创建,但必须额外传入 `--type <最终叶子 code>`。
61
+
62
+ 此步只创建资源壳并回写 `resourceId`、`name`、环境和文件路径,**不会上传视频**。
63
+
64
+ ## 4. 上传、检查并提交首版
65
+
66
+ 最稳妥的做法是先准备工作稿:
67
+
68
+ ```powershell
69
+ freelog-cli create-version --prepare --artifact video.mp4 --env dev
70
+ freelog-cli version show --local --env dev
71
+ freelog-cli create-version --yes --artifact video.mp4 --env dev
72
+ ```
73
+
74
+ 第一条会校验文件、计算 SHA1、上传并等待平台解析,但不提交版本。确认本地工作稿后,最后一条会再次从当前文件校验、上传和解析,再提交固定首版号 `1.0.0`。提交成功会删除工作稿;失败或中断会保留工作稿以便继续处理。
75
+
76
+ ## 5. 下一步
77
+
78
+ - 要增加属性、可选配置或依赖:看 [版本工作稿](./04-版本工作稿.md)。
79
+ - 要发布后续版本:看 [日常操作](./02-日常路径.md#发布新版本)。
80
+ - 要给资源配置策略并上架:看 [资源管理](./05-资源管理.md)。
81
+ - 要发行主题或插件:不要照本页的 `init`,改看 [主题与插件](./03-主题与插件.md)。
@@ -0,0 +1,90 @@
1
+ # 日常操作
2
+
3
+ ## 创建新资源
4
+
5
+ ```text
6
+ login → init(可选)→ create → create-version → 配策略 / 上架(可选)
7
+ ```
8
+
9
+ | 阶段 | 命令 | 结果 |
10
+ |---|---|---|
11
+ | 选类型并立项 | `init [dir] --type <leaf-code>` | 写未绑定本地身份,不创建线上资源。 |
12
+ | 建壳 | `create --title <title> --name <name> [--type <leaf-code>] [--artifact <path>]` | 创建线上资源,写入 `resourceId`。 |
13
+ | 仅准备首版 | `create-version --prepare` | 上传并解析文件,留下首版工作稿。 |
14
+ | 提交首版 | `create-version --yes` | 提交 `1.0.0` 并清理成功的工作稿。 |
15
+
16
+ `create-version` 只适用于尚无线上版本的资源。`--prepare` 与 `--yes` 都会以当前产物上传并等待解析;前者只保存可编辑的工作稿,后者才提交固定的 `1.0.0`。已经有版本时它会停止并提示使用 `update-version`。
17
+
18
+ ## 发布新版本
19
+
20
+ ```text
21
+ version draft pull → 改工作稿 → update-version
22
+ ```
23
+
24
+ 先把已发版本作为新版本的底:
25
+
26
+ ```powershell
27
+ freelog-cli version draft pull --version 1.0.0 --env dev
28
+ freelog-cli version show --local --env dev
29
+ freelog-cli update-version --version 1.1.0 --yes --env dev
30
+ ```
31
+
32
+ 也可以让 CLI 按规则递增版本号:
33
+
34
+ ```powershell
35
+ freelog-cli update-version --bump patch --yes --env dev
36
+ freelog-cli update-version --bump minor --yes --env dev
37
+ freelog-cli update-version --bump major --yes --env dev
38
+ ```
39
+
40
+ 规则如下:
41
+
42
+ - `--version` 必须是合法 semver,且严格大于提交瞬间的线上 latest。
43
+ - `--version` 与 `--bump` 不能同时使用。
44
+ - `--yes` 必须提供其中之一,CLI 不会擅自猜测版本号。
45
+ - `update-version` 不支持 `--prepare`;需要分阶段编辑时用 `version draft pull` 建稿。
46
+ - 发版前改文件可附 `--artifact <文件或构建目录>`;成功确认后该路径会回写身份记录。多资源工程同时传 `--file <已记录路径>` 选择身份。
47
+
48
+ ## 接入已有资源
49
+
50
+ 当资源已在网页、另一台机器或别的工程中创建时,不要再运行 `create`:
51
+
52
+ ```powershell
53
+ freelog-cli bind <resourceId 或 username/name> --artifact video.mp4 --env dev
54
+ ```
55
+
56
+ `bind` 会读取平台详情,且只接入当前账号拥有的单资源。它不会下载文件、拉取版本工作稿或修改线上资源。
57
+
58
+ 接入后按线上是否已有版本分流:
59
+
60
+ | 线上状态 | 下一步 |
61
+ |---|---|
62
+ | 没有 `latestVersion` | `create-version --prepare` 后编辑并 `create-version --yes`,发行首版。 |
63
+ | 已有 `latestVersion` | `version draft pull`,编辑工作稿后以 `update-version --version` 或 `--bump` 发新号。 |
64
+
65
+ 主题/插件的 `<path>` 必须是构建目录(`dist` / `build`);在尚无目录记录的既有项目中,`bind --artifact` 必填。
66
+
67
+ - 已有相同资源 id 时,重复 `bind` 是幂等的。
68
+ - 要将一份本地身份换绑到另一个资源,使用 `bind <id> --force --yes`;旧工作稿会被清理。
69
+
70
+ ## 查看与只读操作
71
+
72
+ ```powershell
73
+ freelog-cli status --env dev
74
+ freelog-cli version show --env dev
75
+ freelog-cli version show --version 1.0.0 --env dev
76
+ freelog-cli version show --local --env dev
77
+ ```
78
+
79
+ 前三条读取线上事实;`version show --local` 只读取未提交工作稿。它们不会覆盖、提交或删除工作稿。
80
+
81
+ ## `--artifact` 的含义
82
+
83
+ 一个工程只有一份资源身份,`--artifact` 是唯一的本地产物路径。`create` / `bind` 用它记录将来默认使用的路径,路径可以暂时不存在;`create-version` / `update-version` 用它指定本次文件或目录,发版产物必须真实存在:
84
+
85
+ | 场景 | 传入的路径 |
86
+ |---|---|
87
+ | 普通资源 `--artifact` | 一个实际文件。目录会被拒绝。 |
88
+ | 主题 / 插件 `--artifact` | 一个构建产物目录,例如 `dist` 或 `build`。zip 文件会被拒绝。 |
89
+
90
+ 发版未传 `--artifact` 时,CLI 只会在已记录路径确实存在时采用它;`--yes` 遇到缺失路径会失败,要求显式给出 `--artifact`。不再支持 `--file` 或一个工程多资源身份。
@@ -0,0 +1,124 @@
1
+ # 主题与插件
2
+
3
+ 主题和插件仍是**单资源**。它们与普通文件资源共用登录、建壳、版本工作稿、属性、依赖、策略、管理和上下架流程;可选配置是否可编辑始终由当前类型详情决定。区别集中在工程初始化、路径形态和发版前的压缩。
4
+
5
+ | 项目 | 主题 | 插件 | 普通文件资源 |
6
+ |---|---|---|---|
7
+ | 初始化 | `init theme` | `init widget` | `init --type <最终叶子>` |
8
+ | 固定类型 | `RT001` | `RT002` | 由类型树选择并在线复验 |
9
+ | 初始 `filePath` | `dist` 目录 | `dist` 目录 | 可无;建壳或发版时记录一个文件 |
10
+ | 模板元数据 | 本期不保存;模板只决定初始化时复制什么工程 | 本期不保存;模板只决定初始化时复制什么工程 | 没有 |
11
+ | 发版输入 | 构建产物目录 | 构建产物目录 | 一个普通文件 |
12
+ | 上传前处理 | CLI 临时打 zip | CLI 临时打 zip | 直接上传原文件 |
13
+
14
+ ## 1. 从线上模板创建工程
15
+
16
+ 先查看 CLI 固定的线上模板清单:
17
+
18
+ ```powershell
19
+ freelog-cli template list
20
+ ```
21
+
22
+ 推荐先登录,再创建主题或插件工程:
23
+
24
+ ```powershell
25
+ freelog-cli login --env dev
26
+ freelog-cli init theme my-theme --template vite-react-ts --yes
27
+ freelog-cli init widget my-widget --template vite-vue-ts --yes
28
+ ```
29
+
30
+ `init theme` / `init widget` 本身不需要登录,因为类型固定;但先登录能使随后 `create --cwd <工程>` 直接复用同一账号。它们从固定版本的线上 npm 模板包下载并只复制包内 `template/` 内容。CLI 不从 `packages/templates/` 复制,也不会执行模板脚本、渲染项目名/版本、安装依赖或执行构建。
31
+
32
+ 成功后会生成:
33
+
34
+ ```text
35
+ my-theme/
36
+ .freelog/1.json # typeCode=RT001,filePath=dist
37
+ ...模板文件
38
+ ```
39
+
40
+ 本期不保存模板元数据,也不渲染占位符。构建目录始终记录在 `N.json.filePath`。
41
+
42
+ ## 1.1 接入已有本地主题或插件项目
43
+
44
+ 非空的既有项目不能再运行 `init`。若它还没有线上资源壳,在项目根直接建壳,并显式记录构建目录:
45
+
46
+ ```powershell
47
+ freelog-cli login --env dev
48
+ freelog-cli create --title "已有主题" --name existing-theme --type RT001 --file dist --yes --env dev
49
+ freelog-cli create-version --file dist --prepare --env dev
50
+ freelog-cli create-version --file dist --yes --env dev
51
+ ```
52
+
53
+ 若线上资源已经存在,先 `bind`。它是否已有发行版本决定后续路径:
54
+
55
+ ```powershell
56
+ # 线上还没有 latestVersion:接入后发行首版
57
+ freelog-cli login --env dev
58
+ freelog-cli bind <resourceId或username/name> --file dist --env dev
59
+ freelog-cli create-version --file dist --prepare --env dev
60
+ freelog-cli create-version --file dist --yes --env dev
61
+ ```
62
+
63
+ ```powershell
64
+ # 线上已有 latestVersion:接入、拉稿并提交新版本
65
+ freelog-cli login --env dev
66
+ freelog-cli bind <resourceId或username/name> --file dist --env dev
67
+ freelog-cli version draft pull --env dev
68
+ freelog-cli update-version --file dist --bump patch --yes --env dev
69
+ ```
70
+
71
+ 不要在已发行资源上再运行 `create-version`,也不要在没有发行版本的资源上运行 `draft pull` / `update-version`。
72
+
73
+ 主题/插件既有项目路径都会把 `dist` / `build` 记录为目录,并在发版时临时压缩;不会补造元数据,也不会覆盖你的源码。
74
+
75
+ ## 2. 创建主题或插件资源壳
76
+
77
+ 初始化只建立本地工程,仍要登录并创建线上资源:
78
+
79
+ ```powershell
80
+ freelog-cli login --env dev
81
+ freelog-cli create --cwd my-theme --title "我的主题" --name my-theme --yes --env dev
82
+ ```
83
+
84
+ 不要再传 `--type RT001` / `RT002`:CLI 会使用工程已记录的固定类型并在线复验。若显式传入不同的 `--type`,命令会失败,不能把模板工程改造成普通资源。
85
+
86
+ ## 3. 先自行得到构建产物
87
+
88
+ CLI 不运行包管理器或构建命令。你需要在工程自己的开发流程中产生 `dist/`(或其他构建目录)。如果产物目录不是 `dist`,只更新记录:
89
+
90
+ ```powershell
91
+ freelog-cli version set --cwd my-theme --artifact build
92
+ ```
93
+
94
+ 这条命令不上传、不压缩、不创建版本。目录可以暂时还不存在;真正发版时必须存在且非空。
95
+
96
+ ## 4. 发布版本:传目录,不传 zip
97
+
98
+ ```powershell
99
+ freelog-cli create-version --cwd my-theme --file dist --prepare --env dev
100
+ freelog-cli version show --cwd my-theme --local --env dev
101
+ freelog-cli create-version --cwd my-theme --file dist --yes --env dev
102
+ ```
103
+
104
+ 对于 `RT001` / `RT002`,CLI 会把 `dist` 的**内容**打入临时 zip(不会再包一层 `dist/`),然后计算 SHA1、上传、等待解析并提交。临时 zip 无论成功或失败都会删除,不写入工程,也不写入 `N.json` 或工作稿。
105
+
106
+ 以下输入会停止:
107
+
108
+ | 输入 | 结果 |
109
+ |---|---|
110
+ | `dist` 不存在 | 要求先生成构建产物。 |
111
+ | 空目录 | 要求先生成实际文件。 |
112
+ | 工程根目录(其中含 `.freelog/`) | 拒绝将工程根作为产物目录。 |
113
+ | 一个 `.zip` 或普通文件 | 拒绝;主题和插件只能交构建目录。 |
114
+
115
+ 后续版本与普通资源完全相同:`version draft pull` → 编辑工作稿 → `update-version --version ...` 或 `--bump ...`;只要传入的仍是构建目录,CLI 会重新生成临时 zip。当前 dev 的主题类型 `RT001` 不支持可选配置;不要把 `version option` 当作主题的固定能力。
116
+
117
+ ## 5. 这不是两套版本系统
118
+
119
+ 主题/插件和普通资源都使用同一份 `N.version.json` 工作稿,版本号规则、依赖签约规则、属性校验、成功清稿和失败保留规则完全一致;可选配置仅在类型详情允许时可用。唯一的文件层差异是:
120
+
121
+ - 普通资源的 `filePath` 指向文件,文件 SHA1 即上传文件的 SHA1;
122
+ - 主题/插件的 `filePath` 指向目录,文件 SHA1 与 `filename` 指向 CLI 临时 zip 的结果。
123
+
124
+ 因此不要手工把 zip 记进 `filePath`,也不要因为主题是目录而另建一套版本缓存。
@@ -0,0 +1,78 @@
1
+ # 版本工作稿
2
+
3
+ 工作稿是 `.freelog/N.version.json`:一份已绑定资源的、尚未提交的下一版本内容。它保存文件摘要、属性、可选配置、依赖和更新版描述。
4
+
5
+ 工作稿只能属于已 `create` 或 `bind` 的资源。未绑定工程不能先手工攒版本稿;请先创建或接入资源。
6
+
7
+ | 要做什么 | 命令 | 是否提交线上版本 |
8
+ |---|---|---|
9
+ | 看线上版本 | `version show [--version <ver>]` | 否 |
10
+ | 看本地工作稿 | `version show --local` | 否 |
11
+ | 从已发版本建立更新稿 | `version draft pull [--version <ver>]` | 否 |
12
+ | 准备首版稿 | `create-version --prepare` | 否 |
13
+ | 编辑稿 | `version attr` / `option` / `dep` / `version draft description` | 否;依赖签约是独立平台动作 |
14
+ | 丢弃稿 | `version draft discard` | 否 |
15
+ | 提交 | `create-version --yes` / `update-version --version <ver> --yes` | 是 |
16
+
17
+ ## 首版工作稿
18
+
19
+ 资源还没有任何已发版本时:
20
+
21
+ ```powershell
22
+ freelog-cli create-version --prepare --file video.mp4 --env dev
23
+ freelog-cli version show --local --env dev
24
+ freelog-cli create-version --yes --file video.mp4 --env dev
25
+ ```
26
+
27
+ 首版号固定为 `1.0.0`,首版描述为空。`create-version` 成功后删除工作稿;网络、解析或提交失败时保留它。
28
+
29
+ ## 更新工作稿
30
+
31
+ 已有版本时,以线上版本为底建立稿:
32
+
33
+ ```powershell
34
+ freelog-cli version draft pull --version 1.0.0 --env dev
35
+ freelog-cli version draft description --description "本次更新说明" --env dev
36
+ freelog-cli update-version --version 1.1.0 --yes --env dev
37
+ ```
38
+
39
+ 已有本地稿时,`version draft pull` 默认不会覆盖。明确要重来时使用 `--yes`;命令会打印将被覆盖的来源、文件和条目摘要。不要通过修改 JSON 中的 `fromVersion` 换底,应该重新执行 `draft pull`。
40
+
41
+ ## 编辑属性和可选配置
42
+
43
+ ```powershell
44
+ freelog-cli version attr add "名称=作者 键=author 值=张三"
45
+ freelog-cli version attr set "键=author 值=李四"
46
+ freelog-cli version attr rm author
47
+ freelog-cli version attr list
48
+
49
+ freelog-cli version option add "名称=主题 键=theme 方式=文本 默认=dark"
50
+ freelog-cli version option set "键=theme 默认=light"
51
+ freelog-cli version option rm theme
52
+ freelog-cli version option list
53
+ ```
54
+
55
+ 可选配置是否可用由资源类型详情的 `supportOptionalConfig` 决定;当前类型不支持时,所有 `version option` 写操作都会停止。属性和配置的键创建后不可改;需要改键时删掉后重新添加。命令会在写入前显示预览,`--yes` 只跳过确认,不跳过字段校验。
56
+
57
+ ## 编辑依赖
58
+
59
+ ```powershell
60
+ freelog-cli version dep add <resourceId> --range ^1.0.0
61
+ freelog-cli version dep range <resourceId> --range ^1.1.0
62
+ freelog-cli version dep rm <resourceId>
63
+ freelog-cli version dep list
64
+ ```
65
+
66
+ 对方资源尚未授权时,交互模式会列出所有可签约且启用的策略供选择。脚本模式必须明确指定策略:
67
+
68
+ ```powershell
69
+ freelog-cli version dep add <resourceId> --range ^1.0.0 --policy-id <policyId> --yes
70
+ ```
71
+
72
+ CLI 列出的是对方资源的全部启用策略,不按免费/付费筛选。它以平台 `batchAuth` 返回的 `isAuth` 判断是否已授权;签约成功后才把依赖写入工作稿。支付、合约查询和上抛不属于本期 CLI,不能用它们推断授权状态。
73
+
74
+ ## 文件变化与恢复
75
+
76
+ 发版总是以当前存在的本地文件或构建目录为准;不能用旧工作稿 SHA1 代替丢失文件。换文件时在 `create-version` / `update-version` 上给新的 `--artifact`。一个工程有多份资源时,先用 `--file <已记录路径>` 选中身份,再用 `--artifact <新路径>`;普通资源给文件,主题/插件给构建目录。新脚本不要把 `--file` 当作换产物参数。
77
+
78
+ 不要手工改 `N.version.json`。该文件有严格 schema,损坏、旧格式或身份不一致时 CLI 会保留原文件并停止;可明确丢弃工作稿,或从线上版本重新 `draft pull`。
@@ -0,0 +1,55 @@
1
+ # 资源管理
2
+
3
+ 这些命令管理已绑定资源的线上事实。它们不替代版本发行,也不会修改未提交版本工作稿。
4
+
5
+ ## 查看现状
6
+
7
+ ```powershell
8
+ freelog-cli status --env dev
9
+ freelog-cli version show --env dev
10
+ freelog-cli version show --version 1.0.0 --env dev
11
+ freelog-cli policy list --env dev
12
+ ```
13
+
14
+ `status` 汇总本地身份、是否存在工作稿和线上 latest;`version show` 与 `policy list` 读取平台当前结果。若只想看本地未交内容,用 `version show --local`。
15
+
16
+ ## 修改展示信息
17
+
18
+ ```powershell
19
+ freelog-cli update --title "新标题" --yes --env dev
20
+ freelog-cli update --intro "一句话简介" --tags "教程,视频" --yes --env dev
21
+ freelog-cli update --cover "<封面值>" --yes --env dev
22
+ ```
23
+
24
+ `update` 只会发送明确给出的字段:标题、简介、封面和标签。它不会提交新版本、修改资源标识或上下架状态。
25
+
26
+ - 标题最多 100 个字符,简介最多 200 个字符。
27
+ - 标签最多 20 个,每个最多 20 个字符;不能重复或包含 `#`。
28
+ - `--yes` 且没有任一修改字段会失败,不发送空更新。
29
+
30
+ ## 管理授权策略
31
+
32
+ ```powershell
33
+ freelog-cli policy list --env dev
34
+ freelog-cli policy template list --page 1 --page-size 20 --env dev
35
+ freelog-cli policy template apply <templateId> --yes --env dev
36
+ freelog-cli policy apply --from-file .\free-policy.json --yes --env dev
37
+ freelog-cli policy set --id <policyId> --on --env dev
38
+ freelog-cli policy set --id <policyId> --off --env dev
39
+ ```
40
+
41
+ `policy template list` 按当前资源类型列出**全部**平台模板(默认每页 20 条),包含带交易事件的模板,不按免费/付费过滤。交互执行 `policy template apply` 时可在每页选择、翻页或取消;脚本执行必须提供 `<templateId> --yes`。应用模板或 `policy apply` 都会新增一条**启用**的授权策略,但不会触发支付,也不会自动上架。
42
+
43
+ `policy apply --from-file` 接受策略文本文件,或包含 `policyName` 与 `policyText` 的 JSON 文件;若文本文件或 JSON 未提供名称,非交互模式还必须传 `--name <策略名>`。策略语义最终由平台校验。
44
+
45
+ ## 上架与下架
46
+
47
+ ```powershell
48
+ freelog-cli validate --for online --env dev
49
+ freelog-cli online --env dev
50
+ freelog-cli offline --env dev
51
+ ```
52
+
53
+ 上架前必须已有至少一个已发版本和一条启用策略。`validate --for online` 只检查并说明缺失项;`online` 会再次检查后才写线上状态。`offline` 只改变可用状态,不删除资源、版本、策略、身份或工作稿。
54
+
55
+ 如果账号不是资源 owner、资源被冻结或环境不匹配,平台写操作会失败。CLI 不会因此删除本地工程或未提交工作稿;修正登录账号或环境后可继续。
@@ -0,0 +1,34 @@
1
+ # 常见情况与报错
2
+
3
+ CLI 的错误不会自动丢弃工作稿或覆盖工程。脚本调用可加 `--json` 获得稳定的 `{code,message}` 结构。
4
+
5
+ | 看到的情况 | 原因 | 应对方式 |
6
+ |---|---|---|
7
+ | `prod 暂未开放` | 未显式选择联调环境。 | 为本次命令加 `--env dev` 或 `--env test`。 |
8
+ | `请先 login` | 当前目录向上没有可用账号选择器。 | 在工程运行 `login --env ...`,或使用全局账号选择器。 |
9
+ | 凭据环境不一致 / 凭据库中不存在凭据 | 工作区选择器不能用于本次环境,或系统凭据被清除。 | `logout` 后在同一环境重新 `login`;不要手改 selector。 |
10
+ | `目标目录不是空目录,拒绝覆盖` | `init` 不会合并或覆盖已有工程。 | 选新目录,或先人工整理目录内容。已先 `login` 的当前目录例外:只存在 `.freelog/auth` 时可执行 `init .`,该选择器会被保留。 |
11
+ | `请选择资源类型` | 普通资源没有已验证类型,且未传 `--type`。 | 用 `type search` / 交互式 `init` 选择最终叶子,或传精确 code。 |
12
+ | 主题/插件类型固定 | 在模板工程创建壳时试图以不同 `--type` 覆盖 `RT001` / `RT002`。 | 移除 `--type`;模板工程会使用记录的固定类型。 |
13
+ | `一夹多条必须指定 --file` | 一个工程存在多份资源身份,CLI 无法猜测目标。 | 传该资源已记录的 `--file`。 |
14
+ | `本地文件不在` / `请 --artifact 指定本地文件或目录` | 记录的文件或构建目录不存在。 | 生成或找到实际产物,再传 `--artifact`;多资源时另传已记录的 `--file` 选身份,不能复用旧 SHA1。 |
15
+ | `不支持文件夹` | 普通资源给了目录。 | 传一个实际文件。 |
16
+ | `主题/插件请指定构建产物目录,不要自己打 zip` | 主题/插件给了 zip 或普通文件。 | 传 `dist` / `build` 这类非空构建目录。 |
17
+ | `构建产物是空的` | 目录内没有可压缩文件。 | 先完成工程自己的构建流程。 |
18
+ | 已经有发行版本,请用 `update-version` | 对已有版本的资源调用了 `create-version`。 | 用 `version draft pull` 后运行 `update-version`。 |
19
+ | 还没有发行版本,请先 `create-version` | 对首版资源调用了 `update-version` 或 `draft pull`。 | 使用 `create-version --prepare` 或 `create-version --yes`。 |
20
+ | 工作稿与身份不一致 / 不支持 schemaVersion=1 | 本地工作稿损坏、过期或属于另一资源。 | 保留原文件以便检查;明确 `version draft discard`,或从线上 `draft pull` 重建。 |
21
+ | `当前类型不支持可选配置` | 类型详情不允许可选配置;主题并不天然支持它。 | 不执行 `version option`;只编辑当前类型允许的字段。 |
22
+ | `--yes` 缺少 title / name / type | 脚本模式没有提供必要输入。 | 无工程类型时给 `--type`;已有 init 身份时给 `--title`、`--name` 即可。 |
23
+ | 依赖要求 `--policy-id` | 非交互依赖签约不能替你选择对方策略。 | 先列策略或在交互中选择,再传精确 `--policy-id`。 |
24
+ | `上架须已有版本` / `上架须至少一条启用策略` | 上架条件不完整。 | 先发行版本、添加并启用策略,随后重试 `online`。 |
25
+
26
+ ## 不要用这些“修复”方式
27
+
28
+ - 不要删除 `N.json` 来取消绑定;身份与工作稿可能因此失去关联。
29
+ - 不要复制或编辑 `.freelog/auth`;该文件不含可移植秘密,真正的凭据在当前操作系统的凭据库中。
30
+ - 不要手工打 zip 后交给主题/插件发版;CLI 只接收构建目录。
31
+ - 不要在失败后重新运行 `create` 试图补救已有线上壳;先用 `bind` 接入已有资源。
32
+ - 不要用旧命令参数 `--scaffold` 或把 `--resource-type` 当作常规接口;前者不存在,后者仅为弃用兼容。
33
+
34
+ 仍无法判断时,先运行 `status`、`version show --local` 和 `version show`,分别确认本地身份/工作稿、未提交内容与线上 latest。不要在未确认目标资源时使用 `--force`。
@@ -0,0 +1,58 @@
1
+ # 环境与账号
2
+
3
+ ## 环境
4
+
5
+ | 参数 | 用途 | 当前状态 |
6
+ |---|---|---|
7
+ | `--env dev` | 开发联调环境 | 可用 |
8
+ | `--env test` | 测试环境 | 可用 |
9
+ | `--env prod` | 正式环境 | 当前 CLI 明确拦截 |
10
+
11
+ 环境优先级为:命令行 `--env` → `FREELOG_ENV` → `prod`。因此联调时建议每条平台命令都显式带 `--env dev` 或 `--env test`。
12
+
13
+ ## 登录
14
+
15
+ 交互终端:
16
+
17
+ ```powershell
18
+ freelog-cli login --env dev
19
+ ```
20
+
21
+ 自动化或非交互终端:
22
+
23
+ 自动化命令必须同时带 `--login-name <账号名>`、`--password-stdin` 和 `--yes`;由 CI 的保密输入将密码写入标准输入。不要用 PowerShell 变量、命令行文本、脚本文件或环境变量保存或传递密码。
24
+
25
+ 登录请求默认 15 秒超时;超时、网络错误、认证失败或系统凭据库不可用时,都不会写入账号选择器。
26
+
27
+ 切换账号或环境必须先退出再登录:
28
+
29
+ ```powershell
30
+ freelog-cli logout --cwd <工程目录>
31
+ freelog-cli login --cwd <工程目录> --env test
32
+ ```
33
+
34
+ 默认登录写工作区选择器;`--global` 写机器默认选择器:
35
+
36
+ ```powershell
37
+ freelog-cli login --global --env dev
38
+ freelog-cli logout --global
39
+ ```
40
+
41
+ ## 凭据保存位置
42
+
43
+ | 内容 | 位置 | 是否可提交到 Git |
44
+ |---|---|---|
45
+ | 工作区账号选择器 | 最近的 `.freelog/auth` | 否 |
46
+ | 全局账号选择器 | `~/.freelog/auth-default.json` | 否 |
47
+ | token、Cookie 等秘密 | 操作系统凭据库 | 不适用 |
48
+
49
+ `.freelog/auth` 和全局文件只保存 schema、环境、用户 id、用户名与凭据库 key;不保存密码、token 或 Cookie。运行命令时,CLI 从 `--cwd` 向上寻找最近的工作区选择器;一旦找到,即使它损坏或环境不符也不会回退到全局账号。
50
+
51
+ 旧式、含 `token` / `cookie` / `iv` 等字段的账号文件不会被解密或迁移。显式 `logout` 清除目标选择器后再 `login`。
52
+
53
+ ## 安全边界
54
+
55
+ - 不要把密码写成 `--password`、命令行文本、环境变量、JSON 或 Git 文件。
56
+ - 不要复制 `.freelog/auth` 到另一台机器;它不带秘密,另一台机器仍需重新登录。
57
+ - `logout` 只删除账号选择器,不会删除 `.freelog/N.json` 或版本工作稿。
58
+ - 平台返回认证失败时,CLI 停止当前操作;未提交版本稿仍然保留。
@@ -0,0 +1,79 @@
1
+ # 本地文件参考
2
+
3
+ CLI 的工程状态都在 `.freelog/`。身份和工作稿使用严格的 `schemaVersion: 1`;不要用旧文件、临时 JSON 或自定义字段替代它们。
4
+
5
+ ```text
6
+ my-project/
7
+ .freelog/
8
+ auth # 非秘密账号选择器;不提交
9
+ 1.json # 第 1 份资源身份
10
+ 1.version.json # 第 1 份未提交工作稿(存在时)
11
+ index.json # filePath → 身份编号索引
12
+ .lock # 瞬时写锁
13
+ .txn.json # 瞬时跨文件事务;异常中断后供 CLI 前滚恢复
14
+ ```
15
+
16
+ ## `N.json`:资源身份
17
+
18
+ 初始化后的普通资源身份只有类型;创建或 bind 成功后才会同时拥有资源 id 和名称。
19
+
20
+ ```json
21
+ {
22
+ "schemaVersion": 1,
23
+ "subject": "resource",
24
+ "resourceId": "6a9f...",
25
+ "name": "my-video",
26
+ "typeCode": "RT006003",
27
+ "filePath": "video.mp4",
28
+ "env": "dev"
29
+ }
30
+ ```
31
+
32
+ | 字段 | 说明 |
33
+ |---|---|
34
+ | `subject` | 本期恒为 `resource`。 |
35
+ | `typeCode` | 普通资源是已验证的最终叶子;主题/插件固定为 `RT001` / `RT002`。 |
36
+ | `resourceId` 与 `name` | 绑定后成对出现;未绑定 `init` 身份不应预写。 |
37
+ | `filePath` | 相对工程根目录、以 `/` 分隔。普通资源是文件路径;主题/插件是构建目录,例如 `dist`;绝对路径与 `..` 越界路径不合法。 |
38
+ | `env` | 非 prod 的已绑定资源会记录 `dev` 或 `test`。 |
39
+
40
+ 这里不保存标题、标签、策略、已发版本、SHA1、`artifactMode` 或秘密凭据;这些信息分别属于平台、工作稿或系统凭据库。
41
+
42
+ ## `N.version.json`:未提交工作稿
43
+
44
+ 工作稿始终包含资源 id、资源类型、稿类型(`initial` / `update`)、文件 SHA、分析 SHA、属性、可选配置、依赖及恒为空的兼容字段。它只在资源已创建或 bind 后出现。
45
+
46
+ ```json
47
+ {
48
+ "schemaVersion": 1,
49
+ "draftKind": "update",
50
+ "resourceId": "6a9f...",
51
+ "resourceTypeCode": "RT006003",
52
+ "fromVersion": "1.0.0",
53
+ "fileSha1": "...",
54
+ "filename": "video.mp4",
55
+ "analyzedSha1": "...",
56
+ "description": "下一版说明",
57
+ "inputAttrs": [],
58
+ "orphanedInputAttrs": [],
59
+ "customPropertyDescriptors": [],
60
+ "dependencies": [],
61
+ "baseUpcastResources": [],
62
+ "authExcludedItems": []
63
+ }
64
+ ```
65
+
66
+ 主题/插件在这里记录的是 CLI 临时 zip 的 `filename` / SHA1;身份里的 `filePath` 仍是构建目录。普通资源则记录原文件的 `filename` / SHA1。
67
+
68
+ ## `index.json`、`.lock` 与 `.txn.json`
69
+
70
+ `index.json` 是 `filePath → N` 的查询索引,不是主数据;它与身份不一致时,CLI 以 `N.json` 为准修复。`.lock` 只在本地写入期间存在,用于阻止两个 CLI 同时修改同一工程。不要在另一个 CLI 仍在运行时删除它。
71
+
72
+ 需要同时改身份、索引和工作稿的操作会短暂写入 `.txn.json`。进程异常中断后,不要手动删改它;下一次对该工程的持锁写操作会先完成事务的前滚恢复。若文件持续存在且每次都恢复失败,保留 `.freelog/` 现场后再排查。
73
+
74
+ ## Git 建议
75
+
76
+ - 永远忽略 `.freelog/auth`。
77
+ - `N.json` 和版本工作稿不含秘密,适合随工程协作。
78
+ - `N.version.json` 是未提交的工作内容;是否提交由团队协作流程决定,不能把它当成已发版本事实。
79
+ - 不要提交 `.lock`、`.txn.json` 或临时 zip。