cabletidy 0.3.0-rc.3 → 0.3.0

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
@@ -25,7 +25,7 @@ CableTidy 的核心不是“提供一个统一 OpenAI API”,而是把复杂
25
25
 
26
26
  检查使用本地规则和有界缓冲。未知工具、动态脚本、未覆盖的推理内容、图片、加密内容以及超限情况会显示覆盖不足。数据库不可用或队列满时代理继续运行,页面显示审计退化状态;正常退出会排空已接收的写入,强制退出可能丢失未提交记录。它是本地可追溯日志,不提供零丢失或防篡改保证。
27
27
 
28
- 分类调研、规则清单、固定预算和 HTTP 查询接口见 [代理安全 V1 设计与实现](docs/agent-security-v1.md)。此功能纳入 `0.3.0-rc.3` 候选版;候选版发布与验收状态见 [发布说明](docs/releases/0.3.0-rc.3.md)。
28
+ 分类调研、规则清单、固定预算和 HTTP 查询接口见 [代理安全 V1 设计与实现](docs/agent-security-v1.md)。此功能纳入 `0.3.0`;发布与验收状态见 [发布说明](docs/releases/0.3.0.md)。
29
29
 
30
30
  ## 模型透传与可选设置
31
31
 
@@ -48,7 +48,7 @@ Codex 的可选模型设置目前只支持与本机官方 GPT 目录明确对应
48
48
 
49
49
  npm 安装方式推荐 Node.js 24,也支持 Node.js 22.13 及以上的 22.x 版本;完整版本约束见 `package.json`。原生程序可独立运行。发行包支持 Linux x64 / arm64、macOS x64 / arm64、Windows x64;源码构建需要稳定版 Rust 和系统 C 编译器 / 链接器。CI 执行源码测试与安装冒烟测试,跨平台结果以对应提交的 CI 为准。Windows 使用原生进程 API 查询进程身份;Codex 目录查询仍需要系统 Windows PowerShell,并允许 `Add-Type` 调用 Windows Job Object API。
50
50
 
51
- 当前源码版本为 `0.3.0-rc.3`,正在准备候选发布;本页的原生程序、后台运行和安全审计说明对应此版本。npm 的 `latest` 仍为 Node 实现的 `0.2.0`,默认安装命令不会选择候选版。候选版发布后可按 [发布说明](docs/releases/0.3.0-rc.3.md) 指定版本安装;GitHub Pre-release 可用不代表 npm 已发布。历史版本见 [0.2.0 发布说明](docs/releases/0.2.0.md)。
51
+ 当前源码版本为 `0.3.0`,沿用 `0.3.0-rc.4` 的功能代码;本页的原生程序、后台运行和安全审计说明对应此版本。默认 npm 安装命令选择 `latest` 指向的已发布稳定版。`0.3.0` 的发布状态、验收范围与升级步骤见 [发布说明](docs/releases/0.3.0.md);GitHub Release 与 npm 分别发布。历史版本见 [0.2.0 发布说明](docs/releases/0.2.0.md)。
52
52
 
53
53
  ### 从 npm 官方源安装
54
54
 
@@ -84,9 +84,13 @@ npm 启动器需要本机 Node.js;发行包自带对应平台的原生二进
84
84
 
85
85
  ### 启动、升级与卸载
86
86
 
87
- 安装后的 `cabletidy start` 会在后台启动 daemon,确认管理接口就绪后返回管理台地址和日志路径;关闭终端后继续运行。日志写入数据目录中的 `daemon.log`,运行期间自动轮转:单文件上限 10 MiB,保留 `daemon.log.1` 至 `.3` 三份历史文件(`.1` 最新),总量不超过 40 MiB;超出保留范围的旧日志自动删除。升级时已有的超大日志仅保留末尾 10 MiB。使用 `cabletidy stop` 停止服务;daemon 会停止接受新连接,等待已开始的请求、子进程和配置写入完成,再清理 `runtime.json` 并释放实例锁;`stop` 等待排空完成,不设置强制退出倒计时。 Ctrl+C 在停止请求原子发布前取消操作,不发送请求;发布后仅取消客户端等待,保留停止请求让 daemon 继续关闭。取消时退出码为 130,并提示是否已提交;SIGTERM 同样取消操作或等待,退出码为 143。未运行时 `stop` 成功返回提示,身份无法确认时拒绝停止。此功能不包含开机自启或崩溃自动重启。源码调试时的 `npm start` 和 `cargo run --bin cabletidy -- start` 仍在前台运行,便于查看日志和使用 Ctrl+C。安装后的 CLI 也可使用 `cabletidy start --foreground` 临时前台运行。
87
+ 安装后的 `cabletidy start` 会在后台启动 daemon,确认管理接口就绪后返回管理台地址和日志路径;关闭终端后继续运行。日志写入数据目录中的 `daemon.log`,运行期间自动轮转:单文件上限 10 MiB,保留 `daemon.log.1` 至 `.3` 三份历史文件(`.1` 最新),总量不超过 40 MiB;超出保留范围的旧日志自动删除。升级时已有的超大日志仅保留末尾 10 MiB。
88
88
 
89
- 在另一个终端可以运行:
89
+ `cabletidy stop` 通过本地控制通道请求正常退出,等待已开始的请求、子进程和配置写入完成,再清理 `runtime.json` 并释放操作系统文件锁;不设置强制退出倒计时。主机改名不影响启停。Ctrl+C / SIGTERM 在发送前取消操作,发送过程中取消会提示请求可能已提交,收到接受确认后只取消客户端等待,daemon 继续退出;退出码分别为 130 / 143。`status` 区分运行中、退出排空中、持锁但控制通道无响应和未运行。未运行时 `stop` 成功返回提示,连接提前中断则报告未确认正常退出。
90
+
91
+ `daemon.lock` 现在是持久的普通文件,退出后保留;它存在不代表服务正在运行,请勿删除或替换。异常退出后锁由操作系统释放,无需等待旧版的 10 秒心跳过期。数据目录应位于本地文件系统,不支持跨机器共享目录的锁协调。此功能不包含开机自启或崩溃自动重启。
92
+
93
+ 源码调试时的 `npm start` 和 `cargo run --bin cabletidy -- start` 仍在前台运行,便于查看日志和使用 Ctrl+C。安装后的 CLI 也可使用 `cabletidy start --foreground` 临时前台运行。
90
94
 
91
95
  ```bash
92
96
  cabletidy --help
@@ -97,7 +101,7 @@ cabletidy stop
97
101
  `status` 同时显示 daemon 是否在线、管理台 URL、配置版本和当前配置套装列表;每套配置包含 ID、名称、目标 CLI、本地接入 URL 和启用状态,不再需要单独的 URL 或 Web 状态命令。
98
102
  `status` 和不带参数的命令只读取状态,不创建数据目录、配置、密钥或备份。尚未初始化时,只提示未启动以及运行 `cabletidy start`,不返回预设的管理台地址。
99
103
 
100
- 升级时先停止服务,再安装目标版本并重新启动。从 `0.2.0` 升级时,先在原运行终端按 Ctrl+C,或通过原进程管理器停止;该版本没有 `stop` 命令。以下命令适用于已经支持 `stop` 的版本,且 `latest` 只选择稳定版;候选版升级步骤见 [发布说明](docs/releases/0.3.0-rc.3.md):
104
+ 升级时先停止服务,再安装目标版本并重新启动。从 `0.2.0` 升级时,先在原运行终端按 Ctrl+C,或通过原进程管理器停止;该版本没有 `stop` 命令。以下命令适用于已经支持 `stop` 的版本,且 `latest` 只选择稳定版;完整升级步骤见 [发布说明](docs/releases/0.3.0.md):
101
105
 
102
106
  ```bash
103
107
  cabletidy stop
@@ -105,6 +109,8 @@ npm install -g cabletidy@latest --registry=https://registry.npmjs.org/
105
109
  cabletidy start
106
110
  ```
107
111
 
112
+ 如果新版提示 `ELOCKLEGACY`,说明数据目录中仍有旧版的 `daemon.lock` **目录**。请先从 `runtime.json` 查看 PID,并用系统进程工具核对;旧版 `stop` 不可用时,可手动执行 `kill <实际 PID>`(Windows 使用 `taskkill /PID <实际 PID>`),等待并确认旧进程退出后,再删除这个旧锁目录并启动新版。这里的 `<实际 PID>` 必须替换为核对后的数字;不要删除配置、密钥或新版的普通锁文件。新版不自动控制旧 daemon 或回收旧锁。
113
+
108
114
  从本地安装包升级时,将安装目标换成新版本 `.tgz`。卸载前先执行 `cabletidy stop`,再使用 `npm uninstall -g cabletidy`,不会删除 `~/.cabletidy` 或撤销已应用的客户端配置;彻底停用前应先把客户端切换到其他接入。
109
115
 
110
116
  ### 从源码运行与打包
@@ -123,7 +129,7 @@ npm run build
123
129
  npm pack
124
130
  ```
125
131
 
126
- 源码中的 `npm start` 与 `cargo run --bin cabletidy -- start` 使用前台 Rust CLI;安装包中的 `cabletidy start` 由启动器放到后台运行。源码启动器优先使用 `target/debug/cabletidy`;`npm run build` 生成 release 二进制并复制到 `native/<平台>/`。Web 文件在编译时嵌入,修改后需要重新编译。`Cargo.toml` 是 Rust 构建清单,不是 CableTidy 用户配置。
132
+ 源码构建需要 Rust 1.95 或更新版本。源码中的 `npm start` 与 `cargo run --bin cabletidy -- start` 使用前台 Rust CLI;安装包中的 `cabletidy start` 由启动器放到后台运行。源码启动器优先使用 `target/debug/cabletidy`;`npm run build` 生成 release 二进制并复制到 `native/<平台>/`。Web 文件在编译时嵌入,修改后需要重新编译。`Cargo.toml` 是 Rust 构建清单,不是 CableTidy 用户配置。
127
133
 
128
134
  本地先运行 `npm run build` 构建当前平台,再运行 `npm pack` 打包,适用于同平台试用。打包和发布钩子不会重新构建或覆盖 `native/` 中的产物。完整发行包由 `Build Native Package` 工作流在同一提交的完整测试通过后汇总五个平台的产物,Linux 使用 musl 构建;各平台验证实际发行二进制,汇总后直接安装最终 tarball 冒烟。工作流生成可下载的 npm tarball、提交信息和校验摘要,并在 tag 构建通过后自动创建 GitHub Release、附上这三个文件;候选版本标记为 Pre-release,不自动发布 npm。`npm run check:version` 核对四个版本文件及版本 tag,`npm run check:release` 进一步校验各平台二进制、编译目标、版本和摘要,缺少平台或 Linux 目标不是 musl 时阻止发布。发布前需要同步递增 `Cargo.toml`、`Cargo.lock` 和 npm 包版本。候选版验收、正式发布与回退步骤见 [维护者发布流程](docs/release-process.md)。
129
135
 
@@ -168,7 +174,7 @@ npm test
168
174
  npm run test:package
169
175
  ```
170
176
 
171
- `npm test` 先构建测试二进制、运行 Rust 单元测试,再运行直接调用 Rust 的 JavaScript 契约 / HTTP / 管理页测试;发行包不包含测试桥接程序。安装冒烟测试会在临时目录打包、安装、启动和卸载,验证安装后的原生 CLI、内嵌 Web 资源、重复启动、重启地址及用户数据保留。安装冒烟测试在各平台验证后台启动返回、`stop` 优雅退出及重启,Windows 直接执行 npm 的 `.cmd` 入口。生命周期测试另行验证 SIGINT / SIGTERM、长连接排空与过期 PID 防护。Windows 的退出处理逻辑通过测试 IPC 触发验证,真实终端 Ctrl+C 的事件投递仍需交互验收。分发方案的取舍、维护者发布流程与后续服务管理设计见 [安装与分发决策](https://github.com/ZY-WANG-0304/cabletidy/blob/main/docs/installation-research.md)。
177
+ `npm test` 先构建测试二进制、运行 Rust 单元测试,再运行直接调用 Rust 的 JavaScript 契约 / HTTP / 管理页测试;发行包不包含测试桥接程序。安装冒烟测试会在临时目录打包、安装、启动和卸载,验证安装后的原生 CLI、内嵌 Web 资源、重复启动、重启地址及用户数据保留。安装冒烟测试在各平台验证后台启动返回、`stop` 优雅退出及重启,Windows 直接执行 npm 的 `.cmd` 入口。生命周期测试另行验证 SIGINT / SIGTERM、长连接排空、主机名变化、实例 UUID 隔离、异常退出恢复和并发文件锁。Windows 的退出处理逻辑通过测试 IPC 触发验证,真实终端 Ctrl+C 的事件投递仍需交互验收。分发方案的取舍、维护者发布流程与后续服务管理设计见 [安装与分发决策](https://github.com/ZY-WANG-0304/cabletidy/blob/main/docs/installation-research.md)。
172
178
 
173
179
  使用 Codex 可选模型设置时,本机需要可执行支持 `debug models --bundled` 的 Codex CLI,daemon 的 `PATH` 必须包含它。目录读取失败不会阻止纯透传配置的创建、代理启动、预览或应用,但会阻止新增模型设置或应用包含模型设置的 Codex 接入;管理台可在更新 Codex 后刷新模型列表。Rust 版本的目录、配置生成与代理行为由本地契约和模拟上游测试覆盖,真实上游兼容性需按具体接入验证。
174
180
 
@@ -186,9 +192,7 @@ CABLETIDY_HOME="$PWD/.cabletidy-dev" cabletidy start
186
192
 
187
193
  已有配置中的端口(包括手动指定的端口)被占用时,启动会明确报错,不会自动更换。可以停止占用端口的服务,或修改 `web.port` 后重启,并重新应用客户端配置。实际地址以启动输出或 `cabletidy status` 为准。
188
194
 
189
- 同一份数据目录只允许运行一个实例,启动和退出清理期间均持有 `daemon.lock`。锁记录主机名、持有者 PID 和进程启动标识:Linux 使用系统启动 ID 与进程启动时钟,macOS 使用 `ps` 的启动时间,Windows 使用 `GetProcessTimes` 的创建时间,并转换为兼容既有锁记录的 UTC ticks。正常退出或启动失败后释放;只有能识别锁的代次、确认原进程已退出或 PID 已被复用,且锁至少 10 秒未更新时才自动回收。被暂停的实例仍然持有锁,恢复后不会因锁被误回收而崩溃。
190
-
191
- 旧版本的空锁目录、缺少启动标识的存活 PID、进程查询不可用或来自另一主机的锁,可能无法确认归属。此时启动返回 `ELOCKUNKNOWN` 并列出锁目录路径;继续等待不会补全缺失信息。请检查并停止使用该数据目录的 CableTidy,确认没有运行中或暂停中的实例后,手动删除提示的 `daemon.lock` 目录并重新启动,保留 `config.json` 和 `secrets.json`。不要仅凭 `status` 离线就删除锁,暂停中的实例也可能无法响应探测。
195
+ 同一份数据目录只允许运行一个实例,初始化和退出清理期间均持有操作系统独占文件锁。被暂停的实例仍持有锁;`status` 可报告控制通道无响应,但不会因此允许第二个实例启动。锁的生命周期不依赖主机名、PID 查询或心跳时间。旧版目录锁的手动迁移方法见“启动、升级与卸载”。
192
196
 
193
197
  Web 管理台与所有 Virtual Provider 共用最终分配的端口。以下示例假设端口为 `43100`;每份配置通过 `/<配置ID>/v1/...` 接入,例如 `http://127.0.0.1:43100/codex-main/v1/responses`;管理接口仍使用 `/api/v1/...`。
194
198
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.3.0-rc.3",
2
+ "version": "0.3.0",
3
3
  "platform": "darwin-arm64",
4
4
  "target": "aarch64-apple-darwin",
5
- "sha256": "f4c6f85a132702309b1ddeeb7ac82c16a6280ef578a8c692b973a63c3a541d74"
5
+ "sha256": "336781cf33c74979f70fed1e6f9080f41442d2c43bb9233709546417359a369b"
6
6
  }
Binary file
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.3.0-rc.3",
2
+ "version": "0.3.0",
3
3
  "platform": "darwin-x64",
4
4
  "target": "x86_64-apple-darwin",
5
- "sha256": "cd05696fdac9357508e7917ef94a892216a5900bc5f8aebae4a42030031b7098"
5
+ "sha256": "5cbfb33fd01071b20ef8edb0c008a75ab2846a93e78ee1c16b70063e69463305"
6
6
  }
Binary file
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.3.0-rc.3",
2
+ "version": "0.3.0",
3
3
  "platform": "linux-arm64",
4
4
  "target": "aarch64-unknown-linux-musl",
5
- "sha256": "dddc03fdfc4732024f70ffd8819c026c1f231a9f244aa555513998f174fdac0b"
5
+ "sha256": "f833921fd6b717fd5741d4babe51f77942786df2b05133fead3ecd733c426b04"
6
6
  }
Binary file
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.3.0-rc.3",
2
+ "version": "0.3.0",
3
3
  "platform": "linux-x64",
4
4
  "target": "x86_64-unknown-linux-musl",
5
- "sha256": "1699a59cbad98574822faed87d806ae9e59721b16a7f52675c38be2bcddeeca4"
5
+ "sha256": "369f13b62613ea8fc759953b3720eedd0a6a92dfce89d83c955f77d6debecd09"
6
6
  }
Binary file
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.3.0-rc.3",
2
+ "version": "0.3.0",
3
3
  "platform": "win32-x64",
4
4
  "target": "x86_64-pc-windows-msvc",
5
- "sha256": "b4b3b688a17a0f0500c74839b9c7173bb18c38413e6a19fe74f65e2f79b4de2d"
5
+ "sha256": "d78aeb86d2dc0b8b9a4ac6d59d7d3156e6a488f743277121318baf15fadc4edd"
6
6
  }
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cabletidy",
3
- "version": "0.3.0-rc.3",
3
+ "version": "0.3.0",
4
4
  "description": "A local multi-target coding CLI gateway and provider manager.",
5
5
  "license": "MIT",
6
6
  "repository": {