| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
chore(main): 回流 release/v2.0.x(v2.0.12)—— 内容对齐,main 无独有内容 按发布纪律回流。**注意这是内容对齐而非 merge**,理由与依据: 1. 纪律禁止 merge 回主干,因为 merge 会把发布分支的**版本号变更**带进 main。 本项目版本号**只由 git describe --tags 推导**(Makefile VERSION), 仓库里没有任何文件存放版本号 ⇒ 回流不存在版本污染风险。 2. 逐项核对确认 **main 是 release 的内容严格子集**: - main 独有的**文件**:0 个; - internal/lua/plugins.go / internal/core/kernel_actions.go 等内核文件 main 独有行数:0; - deploy.sh 那 14 行只是 emoji 清理(release 刻意去掉了 emoji); - channels.lua 那 333 行是**旧版内容**(旧 exports 表、旧模型名单)。 - main 独有的 9 个提交按 patch-id **全部已在 release 中等效存在** (git cherry 逐条列出均为 -,即已合入)。 3. 故回流 = 把 release 的内容带到 main,等价于"只捡拾修复、不带版本号", 且不会丢任何 main 独有的修复。 本次带回 v2.0.12 的全部内容(37 个提交): - 源串行 + 按模型节流(照 model-gate) - 已失效模型存储 + 远端目录闸门 - 余额分档选号 - 模型能力元数据(models.dev,isFree 权威判定) - **凭据续期修复**(此前恒报 ok:true 却一个请求都不发) - 通用件 TTL 缓存 + 串行锁;account_test/account_adopt/account_delete 修正 - 内核级:出站授权持久化重启后不生效、__llmsproxy_plugin_dir ground truth 校验:git diff release/v2.0.x = 0 行;go build -tags luajit ./... 通过。 | 23 天前 | |
chore(main): 回流 release/v2.0.x(v2.0.12)—— 内容对齐,main 无独有内容 按发布纪律回流。**注意这是内容对齐而非 merge**,理由与依据: 1. 纪律禁止 merge 回主干,因为 merge 会把发布分支的**版本号变更**带进 main。 本项目版本号**只由 git describe --tags 推导**(Makefile VERSION), 仓库里没有任何文件存放版本号 ⇒ 回流不存在版本污染风险。 2. 逐项核对确认 **main 是 release 的内容严格子集**: - main 独有的**文件**:0 个; - internal/lua/plugins.go / internal/core/kernel_actions.go 等内核文件 main 独有行数:0; - deploy.sh 那 14 行只是 emoji 清理(release 刻意去掉了 emoji); - channels.lua 那 333 行是**旧版内容**(旧 exports 表、旧模型名单)。 - main 独有的 9 个提交按 patch-id **全部已在 release 中等效存在** (git cherry 逐条列出均为 -,即已合入)。 3. 故回流 = 把 release 的内容带到 main,等价于"只捡拾修复、不带版本号", 且不会丢任何 main 独有的修复。 本次带回 v2.0.12 的全部内容(37 个提交): - 源串行 + 按模型节流(照 model-gate) - 已失效模型存储 + 远端目录闸门 - 余额分档选号 - 模型能力元数据(models.dev,isFree 权威判定) - **凭据续期修复**(此前恒报 ok:true 却一个请求都不发) - 通用件 TTL 缓存 + 串行锁;account_test/account_adopt/account_delete 修正 - 内核级:出站授权持久化重启后不生效、__llmsproxy_plugin_dir ground truth 校验:git diff release/v2.0.x = 0 行;go build -tags luajit ./... 通过。 | 23 天前 | |
chore(main): 回流 release/v2.0.x(v2.0.12)—— 内容对齐,main 无独有内容 按发布纪律回流。**注意这是内容对齐而非 merge**,理由与依据: 1. 纪律禁止 merge 回主干,因为 merge 会把发布分支的**版本号变更**带进 main。 本项目版本号**只由 git describe --tags 推导**(Makefile VERSION), 仓库里没有任何文件存放版本号 ⇒ 回流不存在版本污染风险。 2. 逐项核对确认 **main 是 release 的内容严格子集**: - main 独有的**文件**:0 个; - internal/lua/plugins.go / internal/core/kernel_actions.go 等内核文件 main 独有行数:0; - deploy.sh 那 14 行只是 emoji 清理(release 刻意去掉了 emoji); - channels.lua 那 333 行是**旧版内容**(旧 exports 表、旧模型名单)。 - main 独有的 9 个提交按 patch-id **全部已在 release 中等效存在** (git cherry 逐条列出均为 -,即已合入)。 3. 故回流 = 把 release 的内容带到 main,等价于"只捡拾修复、不带版本号", 且不会丢任何 main 独有的修复。 本次带回 v2.0.12 的全部内容(37 个提交): - 源串行 + 按模型节流(照 model-gate) - 已失效模型存储 + 远端目录闸门 - 余额分档选号 - 模型能力元数据(models.dev,isFree 权威判定) - **凭据续期修复**(此前恒报 ok:true 却一个请求都不发) - 通用件 TTL 缓存 + 串行锁;account_test/account_adopt/account_delete 修正 - 内核级:出站授权持久化重启后不生效、__llmsproxy_plugin_dir ground truth 校验:git diff release/v2.0.x = 0 行;go build -tags luajit ./... 通过。 | 23 天前 | |
chore(main): 回流 —— VNC 兜底登录真正可用(放开 browser-stack 不需要的加固 + 修 3 个插件缺陷) 按纪律先在 release/v2.0.x 提交,再内容对齐回 main。 校验:git diff release/v2.0.x = 0 行。 | 22 天前 | |
fix: 回退两处内核改动,channels 改为插件自持持久化(照参考实现) 用户指出「你又tm改内核?」—— 核对后确认两处本可避免: 1. internal/lua/vm.go +32 行 新增 base64_decode 全局函数 2. internal/lua/plugin_http_handler.go +16 行 InvokeHandler 补 markDirty 工作区已还原到 v2.0.2(git diff v2.0.2 = 0 行)。 参考实现(dsh-our-free-model/vendor/channel-pack)对同一问题的做法: - 解 JWT:用**语言自带**的 Buffer.from(..., 'base64url'),从不为此改宿主。 → 我改成了插件的纯 Lua b64url_decode(约 20 行),实测解出真 JWT 的 nickname/sub/exp 全对。 - 状态持久化:插件**自己 writeFileSync+renameSync** 写 channel-pack/state.json,从不依赖宿主 settings。 → 参考还记下了同构教训(Gitee IKI7WT):DSH 0.1.7 移除 settings.register() 后账号列表退化为纯内存;正解是**插件探测宿主能力、自持文档**,不是要求 宿主改。我的 markDirty 修法方向相反:把插件的数据安全外包给宿主某条 分发路径的实现细节。 - .channels-store.json(tmp + rename 原子替换),只放**索引与配置** (账号条目含 credentialRef 而非凭据本身、模型黑名单、设置、事件日志)。 凭据仍在 .secrets/(0600),两者分离:即便文档泄露也不含 token。 - 变更点同步落盘(不用「置标志+定时 flush」):本插件无 hooks、45 个端点 各自变更状态,还有大量内部互调;挂在某个边界就必须保证**每条**路径都 经过它,漏一条就是「操作成功但重启丢失」——正是本次要修的缺陷形态。 状态实测 ~1.7KB,写入只发生在运维动作上,不在请求热路径。 - 黑名单写入收口到 setModelDisabled(写点曾有 5+ 处,散着写必漏)。 - 存量迁移:读内核遗留 .channels.state.json(v2.0.4 内核写的)→ 写自有 文档 → **写成功才删**遗留(写失败还删=用一次迁移丢数据);自有存储已存在 时也删遗留,否则内核 restore() 会在启动时用它覆盖。 1. **测试污染生产目录**(严重):插件 storeDir() 读 /etc/llmsproxy/config.yaml 决定落盘位置,而既有测试都没隔离 → 一次全量测试把 26 个测试账号写进了 **生产** .channels-store.json(含 fixture-a/example 等夹具 id)。 prod 文件已删除(真实账号另有来源);kernelTestCore 现在隔离插件目录, 且尊重调用方已设的值(多次「重启」需共用同一目录)。 2. model_set_disabled 改了写入口后仍引用已删除的局部变量(nil 索引崩溃)。 - TestChannelsStoreIsPluginOwned:状态写进**插件自己的**文件、不含凭据字段、 新实例读回。变异(markDirty 空操作)→ FAIL。 - TestChannelsMigrationKeepsLegacyOnWriteFailure:**写失败必须保留遗留文件**。 变异(无条件删)→ FAIL。(这条单独测:迁移成功后的删除有两条路径互相掩盖, 只测「最终文件没了」区分不出「写失败也删了」。) - TestChannelsMigratesLegacyKernelState:遗留账号迁入内存 + 自有存储写出 + 遗留文件删除。 - 内核对照 v2.0.2:diff 为空。 go test ./internal/core/(78s)与 ./internal/lua/(63s)全绿; 全量测试后确认生产插件目录未被写入。 | 24 天前 | |
fix(packaging): 发行包不再内置可用的 admin key 打包时把本地 config.yaml(gitignored,含运维真实密钥)原样复制成 config.example.yaml,而 postinst 在首次安装且 /etc 无配置时又把它 cp 成生产配置 ⇒ 每次安装都得到一个同值的、公开已知的 admin key。 实测该 key(sk-gw-local-0001)在生产上真实有效(/v1/models 返回 200, 而网关监听 0.0.0.0)。 三处修正: - 新增 packaging/config.example.yaml(受 git 跟踪的净化模板), gateway_keys 留空、sources 留空,并写明不要填死值。 - core-dist.sh / nfpm.yaml 改为打包该模板,不再碰本地 config.yaml。 - postinst.sh 不再投递示例配置:留空文件会让网关启动但拒绝所有请求 (无门可入)。改为让二进制首启时自行生成随机 admin key 并打印 —— 每次安装都不同,且开箱可用。示例文件仅作为 /usr/share 下的参考保留。 实测首启:生成 sk-gw-838d66a1... 并打印,与旧的共享固定值不同。 | 1 个月前 | |
feat(packaging): core distribution packages (deb + rpm + tar.gz) via nfpm Previously only the Electron GUI had installers; server admins had to build the core by hand ( make build -> bare binary). This adds a first-class server distribution: - make core-dist -> packaging/core-dist.sh -> cmd/build/dist/ llmsproxy_<ver>_amd64.deb (systemd unit + adapters + example config) llmsproxy-<ver>.x86_64.rpm llmsproxy-<ver>-linux-amd64.tar.gz - nfpm config (packaging/nfpm.yaml): binary to /usr/bin, systemd unit with the measured memory tuning (GOGC=50, MALLOC_ARENA_MAX=2) baked in, Lua adapters to /usr/share/llmsproxy/adapters, repo's config.yaml as the example. - postinst seeds /etc/llmsproxy/config.yaml on first install and keeps existing runtime state across reinstalls; prerm stops the service on removal. Gotchas handled: nfpm v2 here does not render {{ .Env.VERSION }}, so the script stamps the version into a throwaway config copy; and under set -o pipefail the idiom strings | grep -q is broken (grep -q closes the pipe and strings dies on SIGPIPE -> spurious 141), so the symbol sanity-gate stages strings in a temp file. README (zh/en) updated: memory figures replaced with production-measured 32-35 MB settled (was 37-42), and the packaging docs now describe core-dist and the dockerized Windows build. | 2 个月前 | |
chore(main): 回流 release/v2.0.x(v2.0.12)—— 内容对齐,main 无独有内容 按发布纪律回流。**注意这是内容对齐而非 merge**,理由与依据: 1. 纪律禁止 merge 回主干,因为 merge 会把发布分支的**版本号变更**带进 main。 本项目版本号**只由 git describe --tags 推导**(Makefile VERSION), 仓库里没有任何文件存放版本号 ⇒ 回流不存在版本污染风险。 2. 逐项核对确认 **main 是 release 的内容严格子集**: - main 独有的**文件**:0 个; - internal/lua/plugins.go / internal/core/kernel_actions.go 等内核文件 main 独有行数:0; - deploy.sh 那 14 行只是 emoji 清理(release 刻意去掉了 emoji); - channels.lua 那 333 行是**旧版内容**(旧 exports 表、旧模型名单)。 - main 独有的 9 个提交按 patch-id **全部已在 release 中等效存在** (git cherry 逐条列出均为 -,即已合入)。 3. 故回流 = 把 release 的内容带到 main,等价于"只捡拾修复、不带版本号", 且不会丢任何 main 独有的修复。 本次带回 v2.0.12 的全部内容(37 个提交): - 源串行 + 按模型节流(照 model-gate) - 已失效模型存储 + 远端目录闸门 - 余额分档选号 - 模型能力元数据(models.dev,isFree 权威判定) - **凭据续期修复**(此前恒报 ok:true 却一个请求都不发) - 通用件 TTL 缓存 + 串行锁;account_test/account_adopt/account_delete 修正 - 内核级:出站授权持久化重启后不生效、__llmsproxy_plugin_dir ground truth 校验:git diff release/v2.0.x = 0 行;go build -tags luajit ./... 通过。 | 23 天前 | |
chore(main): 回流 release/v2.0.x(v2.0.12)—— 内容对齐,main 无独有内容 按发布纪律回流。**注意这是内容对齐而非 merge**,理由与依据: 1. 纪律禁止 merge 回主干,因为 merge 会把发布分支的**版本号变更**带进 main。 本项目版本号**只由 git describe --tags 推导**(Makefile VERSION), 仓库里没有任何文件存放版本号 ⇒ 回流不存在版本污染风险。 2. 逐项核对确认 **main 是 release 的内容严格子集**: - main 独有的**文件**:0 个; - internal/lua/plugins.go / internal/core/kernel_actions.go 等内核文件 main 独有行数:0; - deploy.sh 那 14 行只是 emoji 清理(release 刻意去掉了 emoji); - channels.lua 那 333 行是**旧版内容**(旧 exports 表、旧模型名单)。 - main 独有的 9 个提交按 patch-id **全部已在 release 中等效存在** (git cherry 逐条列出均为 -,即已合入)。 3. 故回流 = 把 release 的内容带到 main,等价于"只捡拾修复、不带版本号", 且不会丢任何 main 独有的修复。 本次带回 v2.0.12 的全部内容(37 个提交): - 源串行 + 按模型节流(照 model-gate) - 已失效模型存储 + 远端目录闸门 - 余额分档选号 - 模型能力元数据(models.dev,isFree 权威判定) - **凭据续期修复**(此前恒报 ok:true 却一个请求都不发) - 通用件 TTL 缓存 + 串行锁;account_test/account_adopt/account_delete 修正 - 内核级:出站授权持久化重启后不生效、__llmsproxy_plugin_dir ground truth 校验:git diff release/v2.0.x = 0 行;go build -tags luajit ./... 通过。 | 23 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 23 天前 | ||
| 23 天前 | ||
| 23 天前 | ||
| 22 天前 | ||
| 24 天前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 23 天前 | ||
| 23 天前 |