@qfeius/everyline-cli 0.1.11 → 0.1.12

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.
package/README.md CHANGED
@@ -6,7 +6,7 @@ EveryLine 命令行工具,支持合同审查工作流、审查清单和审查
6
6
 
7
7
  ## 安装
8
8
 
9
- npm 包名为 `@qfeius/everyline-cli`,终端命令仍为 `everyline-cli`。本分支通过 `@blue` 安装和更新,版本使用不带环境后缀的正式版本号(例如 `0.1.11`)。本地交付统一使用 `make package`,每次自动递增 patch 号,并同步 CLI 与两项 Skill 后生成安装包。发布到 npm 前使用 `.tgz` 安装;发布配置与操作见 [npm 发布指南](docs/npm-release.md)。
9
+ npm 包名为 `@qfeius/everyline-cli`,终端命令仍为 `everyline-cli`。blue 与 release 统一通过 `@latest` 安装和更新,共用不带环境后缀的正式版本号(例如 `0.1.11`)。npm 渠道和版本号不表示业务环境,本分支仍按实际连接地址核对 blue Profile。本地交付统一使用 `make package`,每次查询 npm 全部已发布版本,取其与本地版本的最高基础版本后递增 patch 号,并同步 CLI 与两项 Skill 后生成安装包。发布到 npm 前使用 `.tgz` 安装;发布配置与操作见 [npm 发布指南](docs/npm-release.md)。
10
10
 
11
11
  npm 全局安装会同步登记 Codex 和 WorkBuddy 的两项 Skill。切换 Node/npm 安装目录时,安装器会校验旧链接所属的 EveryLine 包并更新链接,保留已有授权状态;迁移中途失败会尝试恢复原链接。用户自建目录或其他来源的同名 Skill 会保留并提示冲突。需要手动备份时,请放在 Skill 扫描目录之外,避免仅添加 `.bak` 后缀后仍被作为同名 Skill 加载。
12
12
 
@@ -127,7 +127,7 @@ app-id 的来源优先级为:--app-id > Profile 专用环境变量 > EVERYLINE
127
127
 
128
128
  全局安装 npm 包时,`postinstall` 会把两项 Skill 同步登记到 Codex 的 `$HOME/.agents/skills`、WorkBuddy 的 `$HOME/.workbuddy/skills`,并同步已发现或显式指定的豆包本地技能目录。首次安装建立授权门禁:旧 token 保留,但必须完成一次新的 user/app 授权后才能调用审查、清单或规则业务命令。项目局部安装和 `npx` 临时执行不登记用户级 Skill;豆包云端导入路径仍使用 `make skill-assets` 生成的两个独立 ZIP。Skill 不修改或替代 CLI 接口。
129
129
 
130
- 首次安装使用 `npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@blue`,让安装器提示可见。Codex、WorkBuddy 和豆包均需在确认 CLI 与 Skill 就绪后,由 Agent 在回复正文展示统一安装完成文案;豆包静态 ZIP 导入在导入后首次运行时完成这一检查和提示。
130
+ 首次安装使用 `npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@latest`,让安装器提示可见。Codex、WorkBuddy 和豆包均需在确认 CLI 与 Skill 就绪后,由 Agent 在回复正文展示统一安装完成文案;豆包静态 ZIP 导入在导入后首次运行时完成这一检查和提示。
131
131
 
132
132
  在 Codex、WorkBuddy 或豆包电脑版安装并验证完整交互流程,请参阅 [EveryLine CLI 交互 Skill 安装与验证](docs/everyline-cli-skill-guide.md);评审全部对话分支,请参阅 [EveryLine CLI Skill 全量交互场景](docs/everyline-cli-skill-interaction-scenarios.md)。
133
133
 
@@ -265,20 +265,20 @@ CLI 已移除 --app-type 参数;文件上传也不再接受 --business-id。
265
265
 
266
266
  ## 自更新
267
267
 
268
- CLI 与两项本地 Skill 支持两种更新来源:经核验属于 blue 的 `.tgz`,或官方 npm 的 blue 渠道最新版。两者都由 npm 安装器完成同步,保留原安装 prefix 和账号配置。blue 渠道缺失或版本不属于 blue 时保留现有安装,不回退其他环境。
268
+ CLI 与两项本地 Skill 支持两种更新来源:经核验包名、版本和内容的 `.tgz`,或官方 npm 的 `latest` 渠道最新版。两者都由 npm 安装器完成同步,保留原安装 prefix 和账号配置。`latest` 渠道缺失或查询失败时保留现有安装;安装后仍核对实际连接地址为 blue,不从 npm 渠道或版本号推断业务环境。
269
269
 
270
270
  ```bash
271
271
  # 使用指定包,无需先发布到 npm;将路径替换为实际文件。
272
272
  npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli ./everyline-cli-<版本>.tgz
273
273
 
274
- # 使用已经发布到 npm blue 渠道的最新版。
275
- npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@blue --registry https://registry.npmjs.org
274
+ # 使用已经发布到 npm latest 渠道的最新版。
275
+ npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@latest --registry https://registry.npmjs.org
276
276
  ```
277
277
 
278
278
  指定 tgz 时不因版本相同或 npm 查询失败跳过安装。更新后核对 CLI 与两项 Skill,重新读取或新建任务加载;豆包云端手动导入的 Skill 仍需在平台重新导入。详见 [更新与卸载](docs/everyline-cli-skill-guide.md#10-更新与卸载)。`everyline-cli update` 本身仍用于下述独立二进制 manifest 更新。
279
279
 
280
280
 
281
- `everyline-cli version` 输出 `latestVersion/isLatest/updateRequired/updateCommand`;检查失败时 `isLatest=null`,且不会把未知状态当成需要更新。普通 review/checklist/rule 命令确认存在新版本时,在 stderr 输出 `UPDATE_PENDING` 单行 JSON,但继续完成当前业务 API。Agent 在当前完整业务流程结束后执行其中的 `updateCommand`,下一条新业务再使用新版 CLI 与 Skill。
281
+ `everyline-cli version` 输出 `latestVersion/isLatest/updateRequired/updateCommand`;检查失败时 `isLatest=null`,且不会把未知状态当成需要更新。普通 review/checklist/rule 命令确认存在新版本时,在 stderr 输出 `UPDATE_PENDING` 单行 JSON,但继续完成当前业务 API。Agent 在当前完整业务流程结束后执行其中的 `updateCommand`;旧 CLI 若仍返回 `@blue` 更新目标,改用上面的 `@latest` 安装命令并保留原 prefix。下一条新业务再使用新版 CLI 与 Skill。
282
282
 
283
283
  独立二进制可以通过 HTTPS manifest 检查和更新当前平台制品。地址按 `--manifest-url`、`EVERYLINE_CLI_UPDATE_MANIFEST_URL`、发布构建内置值的顺序选择:
284
284
 
@@ -340,7 +340,7 @@ everyline-cli completion zsh
340
340
  - 使用 fake HTTP、临时 Profile 和测试 token 验证功能,不依赖真实环境凭证。
341
341
  - 运行 go test ./...、go vet ./... 和 make build。
342
342
 
343
- npm 安装版通过 `everyline-cli version --output json` 查询 npm 官方源的 `blue` 渠道版本,无需配置 manifest。发现新版后,在当前业务流程结束时执行返回的 `updateCommand`,由 npm 安装器同步 CLI 和本地 Skills;检查失败时最新版本状态保持未知。独立二进制安装仍使用 HTTPS manifest。
343
+ npm 安装版通过 `everyline-cli version --output json` 查询 npm 官方源的 `latest` 渠道版本,无需配置 manifest。发现新版后,在当前业务流程结束时执行返回的 `updateCommand`(旧 `@blue` 更新目标按前文迁移至 `@latest`),由 npm 安装器同步 CLI 和本地 Skills;检查失败时最新版本状态保持未知。独立二进制安装仍使用 HTTPS manifest。
344
344
 
345
345
  两项 Skill 使用 `metadata.version` 标记实际加载版本。`npm pack` / `npm publish` 的 prepack 和 `scripts/build-skill-bundles.sh` 会自动从 `package.json` 同步该版本;发布前仍需以相同版本构建 CLI。每个会话首次使用时展示 Skill、CLI 和 npm 最新安装包版本,发现新版后在当前业务结束时更新;宿主文件已更新而会话仍旧时提示新建任务。
346
346
 
package/bin/checksums.txt CHANGED
@@ -1,6 +1,6 @@
1
- f174caab730a2e60e79b61e71213bee037f4533ed59a94a7a542f445956cc63a bin/darwin-amd64/everyline-cli
2
- 2b32ff34a1e24eece6d0a3de9b7eb0fc83254669eb1f9f19e2fcdc829394fbfe bin/darwin-arm64/everyline-cli
3
- e345a11e2e80ff0cb25ebe5c386e991ddd7b780d5af773a788250aee44cce027 bin/linux-amd64/everyline-cli
4
- 352ed2049f0cbceb44e2aaf077b850a4b1d27837f14959430075874826d81c28 bin/linux-arm64/everyline-cli
5
- b8d91de3991cafe847ad9094602e962724760bf5c29e905e3ad118247bc2f335 bin/windows-amd64/everyline-cli.exe
6
- 2dd0b9136d7478eea10823a433b8f20356aa12e7036dbe90b017d719240c7392 bin/windows-arm64/everyline-cli.exe
1
+ 7a76b67acf3edc1d1967d709b5d89aeea558cd953a41d47d07ce49007831f078 bin/darwin-amd64/everyline-cli
2
+ 206f296e60333fcd012fb8fcfbbdc87b8d843cd39e8d8ab3ee9fec94fc042ada bin/darwin-arm64/everyline-cli
3
+ 16f1ab4e19b32e952710df5a9cb33322caeee4cbff242de9644d225d95312819 bin/linux-amd64/everyline-cli
4
+ 638ec0732a46c9d93f6c948dc1a0a6d38207dfc42d1ad92fa5bd347d7e7c32ee bin/linux-arm64/everyline-cli
5
+ d17f4403aee0757776908d92627b467b518f5aa6af2edeb6a12bdbbc1a362c56 bin/windows-amd64/everyline-cli.exe
6
+ 28084beb3a49e23c5c332f683d734deb262b0e797bdfc436f44f15f0bcc75264 bin/windows-arm64/everyline-cli.exe
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -26,7 +26,7 @@ OpenAI 官方文档将 Skill 定义为包含 `SKILL.md` 及可选 references、s
26
26
 
27
27
  Codex 本地任务直接使用宿主文件路径和 loopback OAuth。WorkBuddy 使用本机 CLI、系统凭证库和 Device Grant。豆包普通工作任务在本地电脑和远端沙箱中都使用 Device Grant,并固定 `SESSION_ID` 与初始工作目录;远端沙箱使用 Linux CLI,以及宿主提供的原始附件字节流或完整下载 URL,用户 macOS 路径不作为沙箱文件路径。
28
28
 
29
- CLI 和 Skill 应来自同一个 blue 发布版本(格式为 `<版本>-blue.<序号>`)。每次发布提升 `package.json` 统一版本,并将同版本 npm 包发布到 `blue` 渠道;`version.updateRequired` 触发业务结束后的延迟更新。安装前确认指定包、版本和环境属于 blue;blue 渠道缺失时保留原安装,不回退其他环境。
29
+ CLI 和 Skill 应来自同一个发布版本,格式为 `主版本.次版本.补丁版本`。blue release 共用全局递增版本号,并统一发布到 npm `latest` 渠道;`version.updateRequired` 触发业务结束后的延迟更新。安装前核验指定包的包名、版本和实际内容,`latest` 查询失败时保留原安装。npm 渠道和版本号不表示业务环境,本分支两项 Skill 仍按实际连接地址校验 blue Profile。
30
30
 
31
31
  ## 2. 全局安装包同步 CLI、Codex、WorkBuddy 和豆包本地 Skills
32
32
 
@@ -515,7 +515,7 @@ $everyline-review 使用 prod-user Profile 和 user 身份审查 /absolute/path/
515
515
 
516
516
  ### Skill 在上传前提示 CLI 版本不满足要求
517
517
 
518
- 解析 `version --output json`。`updateRequired=true` 时先记住 `updateCommand`,继续完成当前完整业务流程;CLI 同时会在 stderr 输出 `code=UPDATE_PENDING`、当前版本、最新版本、更新命令和 `updateAfter=current_business_workflow`。全部业务 API 结束并保留结果后原样执行一次更新命令,再次检查版本;下一条新业务重新加载新版 Skill。
518
+ 解析 `version --output json`。`updateRequired=true` 时先记住 `updateCommand`,继续完成当前完整业务流程;CLI 同时会在 stderr 输出 `code=UPDATE_PENDING`、当前版本、最新版本、更新命令和 `updateAfter=current_business_workflow`。全部业务 API 结束并保留结果后执行一次更新命令;旧 CLI 若返回 `@blue` 更新目标,使用下文 `@latest` 安装命令并保留原 npm prefix。再次检查版本,下一条新业务重新加载新版 Skill,并按实际连接地址校验 blue Profile
519
519
 
520
520
  CLI 与两项 Skill 更新并校验成功后展示“EveryLine CLI 已更新完成。目前支持合同审查,以及审查清单、规则和规则分组配置。”,复用同次授权中用户已选的身份;尚未选择时先单选 user/app,再对匹配的 Profile 和身份执行一次 `auth status`。只有 `authenticated=true` 时追加“当前已存在生效授权,可直接调用cli能力;”;`authenticated=false` 时追加“使用前需要先完成账号授权,我现在可以为你打开授权页面或生成授权链接。”,已有继续授权请求时直接按已选身份继续,否则等待用户确认。状态查询报错时保留未知状态并报告原始错误,不从 token 文件或安装成功推断授权有效。
521
521
 
@@ -557,10 +557,10 @@ everyline-cli version --output json
557
557
 
558
558
  也可以将 tgz 作为工作任务附件提供,然后告诉 Agent:“使用 everyline-review 技能,按附件 tgz 更新 CLI 和两项 Skill,不从 npm 查询最新版。”即使包版本相同,也按指定包安装并同步可管理的 Skill 内容;无需该包先发布到 npm。
559
559
 
560
- **从 npm blue 渠道更新到最新版**:
560
+ **从 npm latest 渠道更新到最新版**:
561
561
 
562
562
  ```bash
563
- npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@blue --registry https://registry.npmjs.org
563
+ npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@latest --registry https://registry.npmjs.org
564
564
  everyline-cli version --output json
565
565
  ```
566
566
 
@@ -74,7 +74,7 @@ flowchart TD
74
74
  | ENTRY-03 | 已支持 | `帮我操作普通智书 contract-cli` | 根据 Skill 边界不接管 | 交由其他能力处理 |
75
75
  | READY-01 | 已支持 | 新会话首次调用 | 执行 `command -v`、`version --output json` 和根帮助;解析首次安装授权字段 | 命令和版本可读取 |
76
76
  | READY-02 | 已支持 | CLI 已安装 | 使用现有版本,不主动升级 | 继续读取目标命令帮助 |
77
- | READY-03 | 已支持 | 已要求安装 CLI/Skill,CLI 未安装 | 优先安装用户指定版本或 `.tgz`,否则执行 `npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@blue` | 安装校验后在回复正文展示统一文案 |
77
+ | READY-03 | 已支持 | 已要求安装 CLI/Skill,CLI 未安装 | 优先安装用户指定版本或 `.tgz`,否则执行 `npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@latest` | 安装校验后在回复正文展示统一文案 |
78
78
  | READY-04 | 受限 | 宿主只完成静态 Skill 导入 | 首次运行时验证 CLI;用户已要求安装时补做 CLI 安装,安装失败报告真实原因 | CLI 和 Skill 就绪后在回复正文展示统一文案 |
79
79
  | READY-05 | 受限 | 目标命令或参数在实时帮助中缺失 | 列出缺口,不模拟或猜测接口 | 停止该业务操作 |
80
80
  | READY-06 | 受限 | 旧版 `reviewStrength` 只接受 `0/1/2` | 不维护数字映射,不上传合同 | 停止合同审查;只读能力仍可继续 |
@@ -2,7 +2,7 @@
2
2
 
3
3
  npm 包名为 `@qfeius/everyline-cli`,终端命令和两项 Skill 名称保持不变。公共源固定为 `https://registry.npmjs.org/`。生成 `.tgz`、推送源码与发布 npm 是三个独立步骤,只有发布成功后才能通过包名安装。
4
4
 
5
- 本分支固定使用 blue 环境。安装、检查更新和发布统一使用 `blue` dist-tag;版本使用 `主版本.次版本.补丁版本`,例如 `0.1.11`,不再添加环境后缀。npm 版本在整个包名下唯一,发布前须确认版本未被其他分支使用。blue 渠道尚未发布时,检查结果为未知,保留现有安装;不回退其他渠道。
5
+ 本分支固定使用 blue 业务环境。blue 与 release 的安装、检查更新和发布统一使用 `latest` dist-tag,共用同一套递增编号;版本使用 `主版本.次版本.补丁版本`,例如 `0.1.11`,不再添加环境后缀。npm 渠道和版本号不表示业务环境,实际业务仍按 Profile 连接地址校验。npm 版本在整个包名下唯一,发布流程应依次执行,避免两次并行打包选中同一个尚未发布的版本。`latest` 渠道尚未发布或查询失败时,检查结果为未知,保留现有安装。
6
6
 
7
7
  ## 一次性配置
8
8
 
@@ -14,7 +14,7 @@ npm 包名为 `@qfeius/everyline-cli`,终端命令和两项 Skill 名称保持
14
14
 
15
15
  ## 发布步骤
16
16
 
17
- 1. 在 blue 分支更新 `package.json.version`,例如 `0.1.11`;保留 `publishConfig.tag=blue`。已发布版本不能覆盖。
17
+ 1. 在 blue 分支执行 `node scripts/package-version.js --bump`,或使用包含升版步骤的 `make package`。脚本查询 npm 全部已发布版本,与本地版本比较后递增补丁号;保留 `publishConfig.tag=latest`。已发布版本不能覆盖。
18
18
  2. 执行 `make release-check`。构建脚本会同步两项 Skill 的版本;提交版本及相关改动。
19
19
  3. 创建并推送与包版本完全一致的标签,例如:
20
20
 
@@ -26,20 +26,20 @@ git push github v0.1.11
26
26
 
27
27
  上例中的版本须替换为本次版本。`github` 为本仓库指向 GitHub 的远端名称。
28
28
 
29
- 同一标签触发两条工作流;两者都校验已提交版本、blue 渠道、Windows 打包和完整发布检查。`release.yml` 发布 GitHub Release 制品、npm 安装包和两项 Skill ZIP;`npm-publish.yml` 通过 OIDC 发布 npm 包并回查 blue 渠道。npm 发布始终使用 `--tag blue`,不覆盖 npm 的 `latest` 或 `beta`。
29
+ 同一标签触发两条工作流;两者都校验已提交版本、`latest` 渠道、Windows 打包和完整发布检查。`release.yml` 发布 GitHub Release 制品、npm 安装包和两项 Skill ZIP;`npm-publish.yml` 通过 OIDC 发布 npm 包并回查 `latest` 渠道。blue 与 release 的 npm 发布始终使用 `--tag latest`,发布成功后 `latest` 指向本次版本。
30
30
 
31
31
  GitLab 流水线继续负责测试、构建和保存 `.tgz`,不重复发布 npm。
32
32
 
33
33
  ## 安装与验证
34
34
 
35
- 发布完成后安装 blue 渠道最新版:
35
+ 发布完成后安装 `latest` 渠道最新版:
36
36
 
37
37
  ```bash
38
- npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@blue --registry https://registry.npmjs.org
38
+ npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@latest --registry https://registry.npmjs.org
39
39
  everyline-cli version --output json
40
40
  ```
41
41
 
42
- 安装包内含六个平台的二进制,不需要再次从 GitHub 下载。新版本检查更新只查询 blue 渠道,接受正式版本并兼容历史 `-blue.<序号>` 版本,仍拒绝其他预发布后缀。历史客户端若因旧校验规则将正式版本显示为未知,可使用上述安装命令升级。
42
+ 安装包内含六个平台的二进制,不需要再次从 GitHub 下载。新版本检查更新查询 `latest` 渠道,发布目标使用不带后缀的正式版本。历史客户端若仍查询 `blue`、返回 `@blue` 更新目标或因旧版本校验显示未知,使用上述 `@latest` 安装命令升级,并保留原 npm prefix。安装完成后仍按实际连接地址核对 blue Profile。
43
43
 
44
44
  尚未发布到 npm 时,使用构建后的本地包:
45
45
 
@@ -48,14 +48,14 @@ make package
48
48
  npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli "./dist/everyline-cli-<版本>.tgz"
49
49
  ```
50
50
 
51
- `make package` 每次递增正式版本的 patch 号(例如 `0.1.11 0.1.12`),再同步两项 Skill、重新构建六个平台的二进制并生成 `.tgz`;不会提交代码、创建 Git 标签或发布到 npm。文件名中的版本以实际产物为准。日常交付使用 `make package`;`npm pack` 仅用于 CI 已固定版本的发布和内部校验,不自动升版。两个 `*-skill.zip` 是 Skill 导入包,不替代 CLI 安装包。
51
+ `make package` 取本地及 npm 全部已发布版本中最高的基础版本,再将 patch 加一;历史预发布版本参与比较时去掉后缀。例如 blue 已发布 `0.1.11`,即使 release 本地仍为 `0.1.8`,下次也会生成 `0.1.12`。查询失败时停止,保留本地版本。升版后同步两项 Skill、重新构建六个平台的二进制并生成 `.tgz`;不会提交代码、创建 Git 标签或发布到 npm。文件名中的版本以实际产物为准。日常交付使用 `make package`;`npm pack` 仅用于 CI 已固定版本的发布和内部校验,不自动升版。两个 `*-skill.zip` 是 Skill 导入包,不替代 CLI 安装包。
52
52
 
53
53
  ## 从旧包名迁移
54
54
 
55
55
  仅当 `npm ls -g --depth=0` 确认已安装旧 npm 包 `everyline-cli` 时使用以下步骤。新用户直接安装 scoped 包,无需 `--force`。所有命令使用同一个 npm 全局目录;旧包使用自定义 prefix 时,每条命令均追加相同的 `--prefix`。
56
56
 
57
57
  ```bash
58
- npm install -g --force --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@blue --registry https://registry.npmjs.org
58
+ npm install -g --force --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@latest --registry https://registry.npmjs.org
59
59
  everyline-cli --help
60
60
  npm uninstall -g everyline-cli
61
61
  npm rebuild -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qfeius/everyline-cli",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "EveryLine CLI 工具的 npm/npx 薄包装",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -42,6 +42,6 @@
42
42
  "publishConfig": {
43
43
  "registry": "https://registry.npmjs.org/",
44
44
  "access": "public",
45
- "tag": "blue"
45
+ "tag": "latest"
46
46
  }
47
47
  }
@@ -1,5 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ const { execFileSync } = require("node:child_process");
4
+ const { existsSync, readFileSync } = require("node:fs");
5
+ const { basename, dirname, join } = require("node:path");
6
+
3
7
  /**
4
8
  * normalizePackageVersion 将 Git tag 或提交描述转换为 npm 可接受且可追溯的 SemVer。
5
9
  * 入参:value string,为发布 tag、CI 版本或 git describe 结果。
@@ -19,19 +23,70 @@ function normalizePackageVersion(value) {
19
23
  return `0.0.0-build-${normalized}`;
20
24
  }
21
25
 
22
- if (require.main === module) {
23
- process.stdout.write(normalizePackageVersion(process.argv[2]));
26
+ /**
27
+ * validateRelease 校验环境对应的 npm 渠道和共享的正式版本格式。
28
+ * 入参:version string 为标签版本;channel string 为包声明渠道;expectedChannel string 为分支指定渠道。
29
+ * 返回值:void;渠道不符或版本包含后缀、构建元数据、非法格式时抛出错误。
30
+ */
31
+ function validateRelease(version, channel, expectedChannel) {
32
+ if (channel !== expectedChannel || normalizePackageVersion(version) !== version || !/^\d+\.\d+\.\d+$/.test(version)) {
33
+ throw new Error(`${expectedChannel} 发布必须使用 x.y.z 正式版本和 ${expectedChannel} 渠道,不含预发布后缀或构建元数据`);
34
+ }
24
35
  }
25
36
 
26
37
  /**
27
- * validateBlueRelease 校验 blue 渠道发布使用纯正式 SemVer,版本号不携带环境后缀。
28
- * 入参:version string 为标签中的版本;channel string 为包声明的发布渠道。
29
- * 返回值:void;预发布版本、构建元数据、非法版本或其他渠道时抛出错误。
38
+ * nextPackageVersion 从本地和 npm 全部已发布版本中选择最高正式基础版本,再递增 patch。
39
+ * 入参:localVersion string 为本地包版本;publishedVersions string[] 或 string 为 npm versions JSON。
40
+ * 返回值:string,纯 x.y.z 下一版本;任一版本或响应格式非法时抛出错误。
30
41
  */
31
- function validateBlueRelease(version, channel) {
32
- if (channel !== "blue" || normalizePackageVersion(version) !== version || !/^\d+\.\d+\.\d+$/.test(version)) {
33
- throw new Error("blue 发布必须使用 x.y.z 正式版本和 blue 渠道,不含预发布后缀或构建元数据");
42
+ function nextPackageVersion(localVersion, publishedVersions) {
43
+ if (typeof publishedVersions === "string") publishedVersions = [publishedVersions];
44
+ if (!Array.isArray(publishedVersions)) throw new Error("npm versions 响应必须为版本列表");
45
+ let highest;
46
+ for (const value of [localVersion, ...publishedVersions]) {
47
+ if (typeof value !== "string" || normalizePackageVersion(value) !== value) {
48
+ throw new Error(`无效包版本: ${value}`);
49
+ }
50
+ // 历史环境预发布也计入基础版本,避免新分支重新使用更低的版本序列。
51
+ const base = value.split(/[+-]/)[0].split(".").map(BigInt);
52
+ const difference = highest ? base.findIndex((number, index) => number !== highest[index]) : 0;
53
+ if (!highest || (difference >= 0 && base[difference] > highest[difference])) highest = base;
34
54
  }
55
+ highest[2] += 1n;
56
+ return highest.join(".");
57
+ }
58
+
59
+ /**
60
+ * bumpPackageVersion 查询官方 npm 全量版本并通过 npm version 更新本地包及锁文件,不创建 Git 标签。
61
+ * 入参:root string 为包根目录,默认使用本脚本所属仓库。
62
+ * 返回值:string,为写入的下一正式版本;查询或校验失败时在修改包文件前抛出错误。
63
+ */
64
+ function bumpPackageVersion(root = join(__dirname, "..")) {
65
+ const pkg = JSON.parse(readFileSync(join(root, "package.json"), "utf8"));
66
+ let command = "npm";
67
+ let prefix = [];
68
+ if (process.platform === "win32") {
69
+ // 与打包入口保持一致,通过 Node 执行 npm,避免 .cmd 和特殊字符路径被 shell 解释。
70
+ let npmCLI = process.env.npm_execpath;
71
+ if (!npmCLI || basename(npmCLI) !== "npm-cli.js" || !existsSync(npmCLI)) {
72
+ const commands = execFileSync("where.exe", ["npm.cmd"], { encoding: "utf8" }).trim().split(/\r?\n/);
73
+ npmCLI = commands.map(file => join(dirname(file), "node_modules", "npm", "bin", "npm-cli.js"))
74
+ .find(file => existsSync(file));
75
+ }
76
+ if (!npmCLI) throw new Error("未找到 npm-cli.js,请确认 PATH 中的 npm 安装完整");
77
+ command = process.execPath;
78
+ prefix = [npmCLI];
79
+ }
80
+ const options = { cwd: root, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] };
81
+ // 只查同一包的全量版本,不读取 dist-tag;网络或 JSON 失败直接停止,不回退本地选号。
82
+ const published = JSON.parse(execFileSync(command, [...prefix, "view", pkg.name, "versions", "--json", "--registry", "https://registry.npmjs.org", "--prefer-online"], options));
83
+ const next = nextPackageVersion(pkg.version, published);
84
+ execFileSync(command, [...prefix, "version", next, "--no-git-tag-version"], options);
85
+ return next;
86
+ }
87
+
88
+ if (require.main === module) {
89
+ process.stdout.write(process.argv[2] === "--bump" ? bumpPackageVersion() + "\n" : normalizePackageVersion(process.argv[2]));
35
90
  }
36
91
 
37
- module.exports = { normalizePackageVersion, validateBlueRelease };
92
+ module.exports = { normalizePackageVersion, validateRelease, nextPackageVersion, bumpPackageVersion };
@@ -2,12 +2,12 @@
2
2
 
3
3
  const { readFileSync } = require("node:fs");
4
4
  const { join } = require("node:path");
5
- const { normalizePackageVersion, validateBlueRelease } = require("./package-version");
5
+ const { normalizePackageVersion, validateRelease } = require("./package-version");
6
6
 
7
7
  const packagePath = join(__dirname, "..", "package.json");
8
8
  const packageData = JSON.parse(readFileSync(packagePath, "utf8"));
9
9
  if (packageData.version === "0.0.0-development" || normalizePackageVersion(packageData.version) !== packageData.version) {
10
10
  throw new Error(`拒绝打包未同步的 npm 版本: ${packageData.version}`);
11
11
  }
12
- // 本地构建包保留 CI 版本;真正发布时必须使用 x.y.z 正式版本与 blue 渠道。
13
- if (process.argv.includes("--publish")) validateBlueRelease(packageData.version, packageData.publishConfig?.tag);
12
+ // 本地构建包保留 CI 版本;真正发布时必须使用 x.y.z 正式版本与 latest 渠道。
13
+ if (process.argv.includes("--publish")) validateRelease(packageData.version, packageData.publishConfig?.tag, "latest");
@@ -2,7 +2,7 @@
2
2
  name: everyline-review
3
3
  description: "everyline-review 是面向 Codex / 豆包 / WorkBuddy 用户的合同审查 Skill,适合在 Codex / 豆包 / WorkBuddy 中审查各类合同。用户上传合同,或询问“帮我审查合同”“这份合同有没有风险”“这份合同能不能签”“这份合同有没有问题”“合同审查”时,必须使用且优先使用本 Skill。本 Skill 基于 EveryLine CLI 发起并推进单份合同智能审查,按审查清单与规则输出结构化审查结果,支持审查主体、清单与审查强度的配置,并返回任务状态与完整签名结果链接。适用于买卖、采购、服务、委托、租赁、保密等各类合同场景。安装、导入、复制或更新 EveryLine Skill 时,也使用本 Skill,并在安装流程结束前检测 CLI、补齐缺失工具。用户需要 EveryLine CLI 安装配置、身份授权与恢复时,也使用本 Skill;查询、管理审查清单、规则和分组时转交 everyline-review-config。"
4
4
  metadata:
5
- version: "0.1.11"
5
+ version: "0.1.12"
6
6
  requires:
7
7
  bins: ["everyline-cli"]
8
8
  cliHelp: "everyline-cli --help;everyline-cli auth --help;everyline-cli review file upload --help;everyline-cli review task start --help;everyline-cli review task result --help;everyline-cli checklist --help;everyline-cli rule --help;everyline-cli rule group --help"
@@ -52,13 +52,13 @@ everyline-cli --help
52
52
  everyline-cli auth --help
53
53
  ```
54
54
 
55
- - CLI 缺失时必须进入安装流程;已获用户安装或使用目标时自动补齐blue 渠道最新版,宿主确实要求额外确认时明确说明缺失并请求安装确认。不得只提示“使用前请确保已安装 CLI”后结束。命令存在但执行失败时报告真实错误,不直接判定为未安装或反复重装。
55
+ - CLI 缺失时必须进入安装流程;已获用户安装或使用目标时自动补齐 npm latest 渠道最新版,宿主确实要求额外确认时明确说明缺失并请求安装确认。不得只提示“使用前请确保已安装 CLI”后结束。命令存在但执行失败时报告真实错误,不直接判定为未安装或反复重装。
56
56
  - 没有命令执行能力时,明确说明“Skill 文件已安装,当前无法验证 CLI 是否可用”,提示提供检查所需的执行能力;不得把未检查描述为 CLI 已安装或确定缺失。
57
57
  - 每次具体操作前读取对应命令的实时 --help;帮助、结构化输出与本文不一致时以当前 CLI 为准,并说明能力缺口。
58
58
  - 默认使用 --output json,以 stdout 为结构化结果;stderr 进度、退出码或事件不单独证明业务成功。
59
59
  - 每个会话首次检查后,在回复正文展示一次实际加载的 metadata.version 与 CLI version,缺失值写“未知”,不以 CLI 版本代替 Skill 版本。版本相同也不能证明文件内容或宿主加载状态一致。
60
60
  - 按 SemVer 比较版本:数字段按数值比较,预发布版本低于同号正式版,忽略构建元数据。仅当 isLatest 非 null 且 checkError 为空时使用 CLI 的最新版本结论;来源包明确包含本 Skill 时才能据其发布版本判断 Skill 是否落后,否则 Skill 的最新状态保持未知。
61
- - 已确认 Skill 或 CLI 落后时提示:“当前 Skill 版本 vX,CLI 版本 vC,最新安装包版本 vY。本次任务完成后更新。”已核实两者都为最新版时提示:“当前 Skill 版本 vX,CLI 版本 vC,已是最新版。”检查失败提示:“当前 Skill 版本 vX,CLI 版本 vC,暂未获取到最新版本。”本地版本高于 blue 渠道发布版本时如实说明,不建议降级。以上占位版本均用真实值替换,每会话只提示一次。
61
+ - 已确认 Skill 或 CLI 落后时提示:“当前 Skill 版本 vX,CLI 版本 vC,最新安装包版本 vY。本次任务完成后更新。”已核实两者都为最新版时提示:“当前 Skill 版本 vX,CLI 版本 vC,已是最新版。”检查失败提示:“当前 Skill 版本 vX,CLI 版本 vC,暂未获取到最新版本。”本地版本高于 npm latest 渠道发布版本时如实说明,不建议降级。以上占位版本均用真实值替换,每会话只提示一次。
62
62
  - isLatest=null 表示检查未知,不声称已是最新版;不把检查失败当作业务失败。即使 updateRequired=false,也检查实际加载的 Skill 是否需要更新。
63
63
  - updateRequired=true 时记录唯一 updateCommand,先完成当前整条业务流程;不得在合同上传、任务创建、轮询、结果获取或同一次配置写入之间更新。业务终态或明确失败、结果已保留且后续 API 调用结束后,按[安装与更新](#setup)核对来源并执行一次记住的更新命令。成功后验证版本并结束本轮,以便下一轮加载新版;失败时保留业务结果,报告真实错误,在下一条新业务前处理更新缺口。
64
64
  - firstInstall=true 且 authorizationRequired=true,或事件明确要求首次授权时,按[首次安装强制新授权](#first-install-auth)执行。授权成功前不调用 review、checklist 或 rule;nextAction=authorize 及同一首次安装事件重放均不能被旧 dev token、历史有效期或缓存绕过。
@@ -72,7 +72,7 @@ everyline-cli auth --help
72
72
 
73
73
  仅安装、导入、复制或更新 EveryLine Skill,未同时安装 CLI 时,安装 Agent 必须在技能文件就位后、当前任务结束前主动执行[执行前检查](#preflight),检测当前任务执行环境中的 CLI。此流程由 Skill 安装完成触发,不等待用户另行提出 CLI 安装请求。
74
74
 
75
- CLI 已存在且验证可用时,复用检查结果继续原请求,无需重复安装。CLI 缺失时,按下方“安装来源与执行”第 7 条读取安装文档并自动安装blue 渠道最新版;只有宿主权限策略或用户设置要求额外确认时,才明确提示“当前缺少 EveryLine CLI,是否安装blue 渠道最新版?”并等待确认。
75
+ CLI 已存在且验证可用时,复用检查结果继续原请求,无需重复安装。CLI 缺失时,按下方“安装来源与执行”第 7 条读取安装文档并自动安装 npm latest 渠道最新版;只有宿主权限策略或用户设置要求额外确认时,才明确提示“当前缺少 EveryLine CLI,是否安装 npm latest 渠道最新版?”并等待确认。
76
76
 
77
77
  不得仅报告 Skill 文件安装成功后结束。无法完成检查或安装时,说明实际状态、具体原因及待完成步骤;只有验证通过后才报告 CLI 已就绪。
78
78
 
@@ -80,7 +80,7 @@ CLI 已存在且验证可用时,复用检查结果继续原请求,无需重
80
80
 
81
81
  执行 npm 安装、迁移、重建或延迟更新时,默认使用下列正常全局安装命令,不设置 EVERYLINE_SKIP_SKILL_INSTALL=1,以便安装器同步两个 Skill 并保留首次安装授权门禁。只有用户明确要求单独安装 CLI 时才为该次进程设置 EVERYLINE_SKIP_SKILL_INSTALL=1;不永久修改环境。CLI 返回的 updateCommand 同样遵守此规则。安装后核对两个 Skill 的实际文件、依赖及宿主加载状态,不依据版本号猜测同步成功。
82
82
 
83
- 安装和更新来源固定为 `@qfeius/everyline-cli@blue`,发布版本使用 `<版本>-blue.<序号>`。安装前核验 npm blue 渠道元数据;指定版本、`.tgz` 或独立二进制 manifest 时,也先核验其版本与环境属于 blue。缺少环境证据、渠道尚未发布或返回非 blue 版本时保留现有安装并报告缺口,不回退 `latest`、`beta` 或其他环境。旧 CLI 返回的 `updateCommand` 若指向 `@latest` 或其他渠道,不直接执行,按本节核验并使用 `@blue` 安装命令。两个 Skill 都遵守此来源约束。
83
+ 默认安装和更新来源为 `@qfeius/everyline-cli@latest`。blue release 共用全局递增的 `主版本.次版本.补丁版本` 正式版本号,统一使用 npm `latest` 渠道。安装前核验 npm `latest` 元数据;指定版本、`.tgz` 或独立二进制 manifest 时,核验包名、版本和实际内容。渠道尚未发布或查询失败时保留现有安装并报告缺口。npm 渠道和版本号不表示业务环境;两个 Skill 仍按[Profile 与身份](#identity)核对实际连接地址为 blue。旧 CLI 返回的 `updateCommand` 若指向 `@blue` 或其他旧渠道,按本节使用 `@latest` 安装命令并保留原 npm prefix;用户明确指定安装包、版本或源时遵守第 1 条。
84
84
 
85
85
  1. 正式 npm 包名为 @qfeius/everyline-cli,可执行命令为 everyline-cli,本 Skill 名为 everyline-review。按用户本次指定的安装包、版本、发布下载地址或私有源选择目标,不把本文 metadata.version 当作固定安装版本。
86
86
  2. 已有宿主可读取的 .tgz 时,直接使用该文件执行下列命令;用户本机路径不等于云端沙箱路径。仅有文件名、不可读取引用或缺少来源时,先取得可用附件、下载地址或正确源,不猜测个人目录。
@@ -89,7 +89,7 @@ CLI 已存在且验证可用时,复用检查结果继续原请求,无需重
89
89
  ```
90
90
  3. 用户未指定包、版本或源时,使用官方 npm:
91
91
  ```bash
92
- npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@blue --registry https://registry.npmjs.org
92
+ npm install -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli@latest --registry https://registry.npmjs.org
93
93
  ```
94
94
  不因指定包与本地同版本、isLatest=true 或公共源 E404 跳过用户指定的安装。公开源返回 E404 或版本不存在时,报告该源未找到目标,不反复换源、重试或猜下载地址。
95
95
  4. 保留 npm prefix、用户指定安装目录、Profile、身份和凭据;使用 --foreground-scripts 展示安装器输出,不添加 --silent,不单独替换二进制。
@@ -98,17 +98,17 @@ CLI 已存在且验证可用时,复用检查结果继续原请求,无需重
98
98
  npm rebuild -g --foreground-scripts --allow-scripts=@qfeius/everyline-cli @qfeius/everyline-cli
99
99
  ```
100
100
  6. 按目标包的实际内容分别核对 CLI 和两个 Skill。只有目标包包含 everyline-review/SKILL.md 和 everyline-review-config/SKILL.md,且安装器实际同步到宿主时,才报告两个 Skill 同步成功。来源包结构不匹配、缺少任一 Skill 或安装器报告同名目录冲突时,保留当前技能,报告技能更新缺口;不删改用户目录或自动覆盖现有技能文件。
101
- 7. 本条先复用当前轮的 CLI 检查结果;尚未检查时,仅安装 Skill 的场景执行[仅安装 Skill 后的 CLI 依赖检查](#skill-only-setup),其他场景执行[执行前检查](#preflight)。检查确认当前执行环境缺少 `everyline-cli` 时,立即说明“检测到当前缺少 EveryLine CLI,将安装blue 渠道最新版。”并读取[CLI 安装文档](https://ysi13ckdb9.feishu.cn/wiki/Pyy3wLSOziN5c1ka12scOejhnag),获取安装方式并下载安装blue 渠道最新版 CLI。用户已要求安装 Skill、CLI 或使用依赖 CLI 的功能时,将补齐 CLI 作为当前任务的必要步骤直接执行;只有宿主权限策略或用户设置要求额外确认时,才明确询问“检测到当前缺少 EveryLine CLI,是否安装blue 渠道最新版以完成配置?”,等待确认后继续,已有安装确认直接复用。安装版本以官方 npm 的 `@qfeius/everyline-cli@blue` 为准,不固定文档中的示例版本。文档无法读取时,直接使用本节的官方 npm 安装命令。安装完成后按现有规则验证,通过后继续原请求;失败时说明具体原因及未完成步骤,不把安装检查留给用户自行发起,也不声称 CLI 已就绪。
101
+ 7. 本条先复用当前轮的 CLI 检查结果;尚未检查时,仅安装 Skill 的场景执行[仅安装 Skill 后的 CLI 依赖检查](#skill-only-setup),其他场景执行[执行前检查](#preflight)。检查确认当前执行环境缺少 `everyline-cli` 时,立即说明“检测到当前缺少 EveryLine CLI,将安装 npm latest 渠道最新版。”并读取[CLI 安装文档](https://ysi13ckdb9.feishu.cn/wiki/Pyy3wLSOziN5c1ka12scOejhnag),获取安装方式并下载安装 npm latest 渠道最新版 CLI。用户已要求安装 Skill、CLI 或使用依赖 CLI 的功能时,将补齐 CLI 作为当前任务的必要步骤直接执行;只有宿主权限策略或用户设置要求额外确认时,才明确询问“检测到当前缺少 EveryLine CLI,是否安装 npm latest 渠道最新版以完成配置?”,等待确认后继续,已有安装确认直接复用。安装版本以官方 npm 的 `@qfeius/everyline-cli@latest` 为准,不固定文档中的示例版本。文档无法读取时,直接使用本节的官方 npm 安装命令。安装完成后按现有规则验证,通过后继续原请求;失败时说明具体原因及未完成步骤,不把安装检查留给用户自行发起,也不声称 CLI 已就绪。
102
102
 
103
103
  ### 验证安装与宿主加载
104
104
 
105
105
  - 安装或更新成功需有 npm 成功退出、目标 CLI 可执行、版本核对结果,以及两个 Skill 的 SKILL.md 可读取的证据。仅核实 CLI 时只报告 CLI 的实际状态,技能状态单独说明,不笼统报告全部完成。
106
- - 指定 .tgz 时以包内版本和实际内容为验收目标;blue 渠道查询失败不否定已验证的安装,不触发第二次安装。同版本内容差异只能说明构建不同,不据此判断新旧或损坏;可报告“已按指定包重新安装”,不称为发现新版。缺少打包时的版本同步脚本本身不代表运行故障。
106
+ - 指定 .tgz 时以包内版本和实际内容为验收目标;latest 渠道查询失败不否定已验证的安装,不触发第二次安装。同版本内容差异只能说明构建不同,不据此判断新旧或损坏;可报告“已按指定包重新安装”,不称为发现新版。缺少打包时的版本同步脚本本身不代表运行故障。
107
107
  - Codex、WorkBuddy 的 npm 目录链接,需核对实际指向与两个 Skill 的文件;界面导入副本单独核验。CLI 更新不证明手动导入的技能副本已更新。
108
108
  - 对支持豆包同步的安装器,macOS 可识别已存在的 ~/Library/Application Support/DoubaoWork/Default/.doubaowork/agent_mode/workspace/.user_skills;其他平台或自定义工作区按宿主实际提供的 EVERYLINE_DOUBAO_SKILLS_DIR 指定绝对目录。未发现时不创建猜测路径。EVERYLINE_SKIP_DOUBAO_SKILL_INSTALL=1 仅跳过豆包,EVERYLINE_SKIP_SKILL_INSTALL=1 跳过全部宿主。
109
109
  - 同版本也核对内容;需保留的旧副本应放在技能扫描目录外。安装器返回 event=skills_updated、host=doubao、nextAction=reload_skills 时,核对事件目标并重新读取两个 Skill 的 SKILL.md。实际文件同步不证明当前会话已加载;没有即时加载入口时提示新建任务。
110
110
  - 豆包云端 ZIP 副本通过技能管理重新导入两个独立 Skill ZIP(每个 ZIP 包含对应技能的完整目录)。CLI .tgz 和含额外发布材料的外层包不作为技能导入包;尚待导入或重载的步骤明确列为未完成。
111
- - npm 包装版通过 version --output json 查询官方 npm blue 渠道,无需额外 manifest;独立二进制安装使用 HTTPS manifest。只采用真实返回的更新信息。
111
+ - npm 包装版通过 version --output json 查询官方 npm latest 渠道,无需额外 manifest;独立二进制安装使用 HTTPS manifest。只采用真实返回的更新信息。
112
112
 
113
113
  ### 安装故障处理
114
114
 
@@ -2,7 +2,7 @@
2
2
  name: everyline-review-config
3
3
  description: "使用 EveryLine CLI 查询或管理审查清单、审查规则和规则分组,包括新增、修改、调整归属和删除;仅在审查中选择已有清单时不使用本 Skill。"
4
4
  metadata:
5
- version: "0.1.11"
5
+ version: "0.1.12"
6
6
  requires:
7
7
  bins: ["everyline-cli"]
8
8
  skills: ["everyline-review"]
@@ -48,7 +48,7 @@ everyline-cli rule group --help
48
48
 
49
49
  先复用 `everyline-review` 的首次使用提示、Profile、身份与授权门禁检查;将本 Skill 实际加载的 `metadata.version` 用于版本提示,同一会话不重复提示。固定 `<profile>` 与 `<identity>`,授权与业务命令显式携带 `--profile <profile> --as <identity>`。每条 user 命令复用同一 Device 会话:豆包普通工作任务(含本地电脑)注入同一 `SESSION_ID` 并使用同一初始工作目录,WorkBuddy 注入同一 `CODEBUDDY_SESSION_ID`,AgentKit 保留平台工作区与注入密钥。
50
50
 
51
- 记录 `version` 返回的 `updateRequired`,独立配置任务在查询或单次已确认写入及回读完成后更新;组合任务还需等后续审查取得终态、结果已获取且整条业务流程结束,避免两个阶段之间替换 CLI。
51
+ 记录 `version` 返回的 `updateRequired`,独立配置任务在查询或单次已确认写入及回读完成后更新;组合任务还需等后续审查取得终态、结果已获取且整条业务流程结束,避免两个阶段之间替换 CLI。安装与更新遵守 `everyline-review` 的规则,默认使用 `@qfeius/everyline-cli@latest`;旧 CLI 的 `@blue` 更新目标也按该规则迁移至 `@latest`。npm 渠道和版本号不表示业务环境,更新后仍按实际连接地址校验 blue Profile
52
52
 
53
53
  在每次写入前,再读取将要执行的具体子命令 `--help` 和 CLI 提供的请求结构说明。只使用实时帮助中已注册的命令、参数和请求字段,不凭本文猜测请求体。
54
54