Skip to content

Releases: ShadowSmallBaby/ClawProxyHub

ClawProxyHub v2.0.1

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 10 Oct 09:51
44e3688

ClawProxyHub v2.0.1

分页体验与插件 Turnstile 服务字段修复版。

主要更新

  • 插件支持 Turnstile 服务表单字段,可为需要额外验证参数的上游服务提供完整配置。
  • 修复 Web 列表页分页顶部间距,筛选区与分页控件布局更稳定。

ClawProxyHub v2.0.0

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 10 Oct 05:27
0bc754e

ClawProxyHub v2.0.0

Android、签名扩展与统一发行版本。新增原生 Android 客户端、独立 Lua 编辑器、CLI 和托管 MCP,让桌面与手机共用核心能力及组件安装流程。

主要更新

Android 与组件管理

  • Android 提供本地核心、原生业务插件管理与 App 工作台;客户端、核心和前端版本独立显示。
  • Go 业务插件与 Go 功能扩展通过私有 Service 加载,Lua 插件通过已安装的 Lua Host 运行。
  • 原生设置管理 Lua Host 和使用 APP 证书签名的 .cphui 界面包;界面加载失败时支持回退。
  • 插件初始化和关闭增加执行期限,超时终止私有进程并回收 worker,支持故障后重新加载。

签名扩展与 Lua 编辑器

  • 扩展中心支持签名包、挂载目录、在线目录、离线缓存和持久化信任源,校验资源摘要、权限、平台及签名。
  • Lua Host 安装前通过协议握手和实际 Lua 执行校验,候选运行时失败时保留现用版本。
  • Lua 编辑器作为独立扩展安装,桌面和 Android 共用 Go 后端、源码检查、声明式存储、持久化草稿及修订冲突保护。
  • 扩展构建器统一生成平台和原生入口信息,缓存自动覆盖静态资产、SDK 桥及生成资源的生产依赖。

CLI 与 MCP

  • 桌面发行包新增 cli,连接已有核心执行管理动作。
  • MCP 在核心进程内运行,采用独立管理员密钥和显式工具授权;可接入外部 MCP 客户端。
  • 每次初始化获得独立会话,共享密钥的客户端可以复用请求 ID,取消操作不会影响另一客户端。CLI 自动转发并关闭会话。

发行与界面

  • 桌面统一发布 full ZIP,一级目录为 ClawProxyHub/,包含内嵌 Web 的核心、CLI、发行锁及 data/packages/ 中的 Lua Host 和 Lua 编辑器签名包。
  • 组件版本与更新源统一维护于 project.toml,桌面与 Android 使用 Release 更新清单,各组件保持独立版本。
  • 首次启动安装可信挂载包,保留已有安装、停用与卸载状态;更新已有组件需显式安装。App 工作台不预配 Lua 编辑器。
  • Web 按页面依赖导入 TDesign,缩减包体;删除影响预览隔离旧目标的迟到响应,失败时明确提示。
  • 清理冗余代码和模块校验记录,修正文档与本地文件忽略规则。

组件版本

组件 版本
核心 / 桌面发行 2.0.0
Android 客户端 1.0.0,versionCode 1
Web / App 工作台 0.6.0
Lua Host 0.3.0
Lua 编辑器 0.2.0

升级说明

  • 升级前备份完整运行数据,尤其是数据库及配套加密密钥。核心自动迁移至 000020_managed_mcp;回退时使用升级前的完整备份,不直接让旧核心读取升级后的数据库。
  • 桌面改用 full ZIP,保留原有数据目录。组件停用或卸载状态不会因为替换核心而自动重置。
  • 运行时、功能扩展和业务插件分别管理;Lua 编辑器执行脚本需要启用 Lua Host。Android 需从扩展中心单独安装编辑器。
  • MCP 客户端必须先 initialize,并在后续请求中携带 Mcp-Session-Id。核心重启、权限/密钥变更或会话过期后需重新初始化;不会自动重放工具调用。
  • Compose 部署需在 .env 或进程环境中设置 CPH_ADMIN_PASSWORD。已有管理员密码仍以数据库为准。

ClawProxyHub v1.5.2

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 04 Oct 20:09
24174c3

ClawProxyHub v1.5.2

协议兼容、调度与稳定性修复版。新增可配置的任务时区,统一管理后台布局与分页,并修复流式转发、凭据授权、插件安装及备份恢复问题。

主要更新

任务时区与保存体验

  • 系统设置新增调度时区,默认 Asia/Shanghai(北京时间),支持自定义 IANA 时区。
  • 每日任务和 Cron 按设置的时区执行,修复服务器使用 UTC 时出现的 8 小时偏差。数据库继续使用 UTC,页面仍按浏览器本地时间显示。
  • 时区与每日随机偏移通过同一个底部保存按钮生效,手机端也可保存;提示信息同步精简。
  • 切换时区后重新计算日历任务的下次执行时间,固定间隔和一次性任务保留原时间点。
  • 限制任务执行并发,修复前面的到期规则没有可用账号时,后续任务长期无法执行的问题。

布局、分页与表单

  • 页面统一为固定页头、内部滚动的内容区、固定底部分页区,筛选与功能按钮在滚动时保持可用。
  • 补齐账号、实例、分组、代理、路由、密钥、OAuth 凭证和已安装插件列表分页。
  • 修复筛选、切换页大小、删除末页记录后的页码与滚动行为,完善任务和日志页分页。
  • 修复登录表单项间距与设置抽屉组件引用。

网关、SDK 与 LuaHost

  • 修复流式响应缺少结束事件时被误判成功,以及上游错误分类不准确的问题。
  • 完善交错工具调用、工具参数增量、停止序列和推理签名处理。
  • 请求取消贯通网关、插件 RPC、SDK HTTP 与 LuaHost,及时结束取消后的上游处理。
  • 网关继续兼容旧插件的无 ID 工具调用增量,无需同时升级全部插件即可升级核心。
  • 收紧 Lua 文件加载与响应读取边界,关闭 Lua 总开关时停止已运行的 Lua 插件。

三协议兼容与输出保留

  • Chat、Responses、Anthropic 入口加强内容、工具选择及调用历史校验,明确拒绝不支持的附件、托管工具和多候选请求。
  • 保留工具 strict 的显式 true/false、并行工具控制和新版 token 上限,补齐 Chat ↔ Responses 结构化输出及图片 detail 转换。
  • SSE 统一按事件分帧,支持多行 data、CRLF/BOM、正常 EOF 和大小限制;断流不补残帧,避免丢失最终 usage。
  • Responses 从最终快照补齐正文、推理与工具参数;正文与摘要分别合并,防止重复或冲突。工具调用支持名称晚到,拒绝身份冲突、重复 ID 和结束时缺少名称。
  • 统一推理强度与 thinking budget 映射;thinking.disabled 优先于同源 output_config.effort。
  • 同协议保留 metadata、service_tier、缓存策略等关键白名单参数。引用和注解保留所属内容块,拒绝正文在 Chat/Responses 出口恢复专用结构,覆盖流式、非流式与历史回放。
  • protobuf 仅新增可选字段,保持 protocol v2 和既有字段编号;LuaHost 同步传递新增结构。跨协议暂不转换不同格式的注解。

凭据、授权与恢复

  • 加密密钥成功持久化后才投入使用,显式处理加解密失败;代理密码改为加密存储。
  • 串行处理同一账号的凭据刷新与任务更新,避免覆盖较新的凭据。
  • 修复 API 密钥初始化重复创建,授权关系事务保存;受限但未绑定路由的密钥不再获得全部路由权限。
  • 增加登录限流,修改密码后撤销旧会话。
  • 插件安装增加包内容校验和失败回滚,同时允许 ZIP 内正常的目录条目。
  • 备份恢复增加数据库、密钥与包内容校验,并处理恢复过程被中断的情况。
  • SDK 调试日志移除请求/响应正文等敏感内容;运行日志与任务执行记录按保留期分批清理。

发布构建

  • 前端只构建一次,所有平台复用同一份产物。
  • 核心改用各目标平台原生构建并启用 CGO,保证 SQLite 可用;LuaHost 保持 CGO 关闭。
  • 继续提供完整版、轻量版和独立 LuaHost,发布 CI 不新增重复测试。

升级说明

  • 数据库迁移:启动时自动执行 000015_security_state 和 000016_schedule_timezone,补齐授权状态、会话版本、代理密码密文及调度时区。
  • 备份与回退:升级前备份数据库和配套加密密钥。首次启动会将现有代理密码转为密文;需要回退时使用升级前备份,不直接让旧版本读取升级后的数据库。
  • 任务时区:默认按北京时间调度。原先使用其他时区的部署,请在“系统设置 → 任务”中调整后保存;每日随机偏移仍按原配置生效。
  • 历史日志:本版没有历史日志脱敏或清空迁移。正常保留期清理仍会执行:调用日志沿用原设置,运行日志与已完成任务记录默认保留 30 天。
  • 旧插件兼容:核心保留兼容处理。SDK 内的修复需要插件更新 SDK 并重新构建后生效;插件维护者可在核心 tag 发布后,将依赖更新至 v1.5.2,再递增已发布插件的补丁版本。
  • Compose 部署:使用本版 docker-compose.yml 时,需在环境变量或 .env 中显式设置 CPH_ADMIN_PASSWORD。已有管理员仍以数据库中的密码为准。

ClawProxyHub v1.5.0

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 29 Sep 09:35
d4e8e8e

ClawProxyHub v1.5.0

移动端与布局版。管理后台全面移动端适配(三端断点、PWA),桌面端布局固定 + 筛选条容器化,代码编辑器暗色观感对齐 One Dark。纯前端版本,无后端 / DB 变更。

概览

  • 移动端适配:手机端侧栏收抽屉、筛选收底部抽屉 + 悬浮按钮、表格转卡片、弹窗/抽屉自适应,可安装为 PWA
  • 桌面布局固定:侧栏/Header/内容区尺寸锁死,内容区仅纵向滚动,横向溢出由筛选折行消化
  • 编辑器暗色修复:选中/光标/搜索命中/补全浮层按 One Dark 对比度补齐,搜索面板居右,恢复 Ctrl+Z

明细

三端断点体系

  • useIsMobile / useIsTablet(767 / 1024px 断点):全部布局与业务页接入
  • 手机端:侧栏收抽屉、筛选收底部抽屉(CDrawer)+ MobileFab 悬浮按钮、CTable 转 mobile-cards 卡片视图(phone-cols 指定保留列)、弹窗/抽屉改全屏自适应尺寸
  • PWA:web/public/manifest.webmanifest,可安装到主屏

桌面布局固定

  • 外层 html/body/#app 锁死 overflow,侧栏/内层 min-width: 0 压制 flex 内容撑开,内容区仅纵向滚动(overflow-x: hidden)
  • PageHeader 右侧改 flex: 1; flex-wrap: wrap:筛选条放不下自动折行,不撑破内容区
  • 筛选输入宽度收敛为全局工具类 w-2xs~w-2xl(110~480px),业务页面行内 style="width: …px" 全部替换

表单与组件收口

  • 抽取 FormItem / SysInfoCard 组件,业务页面散落的 label 布局统一走 FormItem
  • CDialog 重写为居中弹窗;CDraw 更名 CDrawer,内置手机/桌面两态尺寸(手机 85% / 桌面 width 默认 480px,复杂抽屉显式传 px),调用方免传 placement
  • CPagination 迷你折叠(页码只放前后几页中间省略);新增 COptions / MobileFab 基础组件

代码编辑器暗色修复

  • 选中双路径覆盖(::selection + .cm-selectionBackground),修复暗色下选中色与背景同色不可见
  • 光标改亮蓝 2px,非聚焦半透明;搜索命中琥珀色、选中词匹配淡绿色,三者语义分离
  • 补全浮层深底卡片 + 圆角描边阴影;搜索面板浮层居右上角(width: fit-content)不挤占编辑区
  • 补挂 history() + historyKeymap,恢复 Ctrl+Z;统一字体度量(font-variant-ligatures: none)修复长按选择错位

升级说明

  • 无 migration(本版无 DB 变更)
  • 纯前端版本:后端无变更,现有插件二进制无需重编
  • 部署:重新构建 web(pnpm build)或拉取新二进制即可;PWA manifest 随静态资源分发

ClawProxyHub v1.3.0

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 28 Sep 13:41
62aa86f

ClawProxyHub v1.3.0

插件创作版。新增在线 Lua 插件编辑器(自建插件零编译),luahost 补齐任务契约,作者来源统一为 manifest.json;全站时间按本地时区显示,离线市场快照全量同步至 26 条。

概览

  • 在线 Lua 插件编辑器:自建插件落 data/plugins/local/<name>/,全屏编辑页 + CodeMirror 6(Lua 高亮/补全/搜索),保存即热更重启进程
  • luahost 任务契约补齐:RunTask / ListTaskCapabilities,Lua 插件可声明并执行任务(此前必落 Unimplemented)
  • 作者来源单一:author 统一以落盘 manifest.json 为准,Go 插件 main.go / lua 脚本声明均不作数
  • 全站时区修复:落库统一 UTC,展示按浏览器本地时区,修复服务器 UTC 导致的 8 小时偏差
  • 离线市场全量同步:10 → 26 条,新增 16 个插件,10 个插件版本 bump

明细

在线 Lua 插件编辑器

  • 新接口:GET /admin/plugins/scaffold(内置脚手架)、POST /admin/plugins/local(multipart:name/label/lua/icon)、GET/PUT /admin/plugins/{name}/source(读/存源码)
  • 身份托管:name 建档后固定、version 恒 latest、双语 label(zh/en) 随 main.lua 顶部常量同步回 manifest.json;luahost 握手以 manifest.json 为准
  • 仅 data/plugins/local/ 下的自建插件可编辑(插件列表 editable 标记);Lua 在系统设置禁用时拒建/拒存(403)
  • 卸载时 Windows 文件锁退避重试;新增 authoring/identity 单元测试

luahost 任务契约

  • ListTaskCapabilities → 脚本 tasks(),RunTask → 脚本 task(req),与 Go 插件契约同构;脚本未声明回空/501
  • ClawPlugin 8 个 RPC 全覆盖;examples/luatask 提供最小骨架(生产插件 autoclaw 不动)

lua 插件市场识别修复

  • luahost 握手从 manifest.json 补全 author(原只补 name/version),修复市场按 author+name 判同插件失配、已装插件误显示「安装」
  • 已装判定改用磁盘 Installed() 取代运行时 Names()/Get(),未运行/崩溃的插件也能识别
  • syncRecord 首次入库补 InstalledAt=time.Now(),修复零值覆盖 DB CURRENT_TIMESTAMP 默认导致 installed_at=0001-01-01

全站时区

  • GORM NowFunc 统一 created_at/updated_at 落库 UTC,消除运行机系统时区差异
  • admin keys/accounts 时间序列化改 RFC3339 带时区标识,logs CSV 用本地墙钟
  • 前端 fmtTime 改为 new Date 解析后按浏览器本地时区格式化;Keys/Accounts/NotifBell/Profile/OAuth 统一收口到 utils/format.ts

其他

  • 账号管理支持按「插件 · 实例」筛选(instance_id=0 记为默认实例)
  • VersionChip 更新日志弹窗 attach 到 body,修复组件化后被困 header 区域
  • 密钥列表操作列加宽至 200px、路由列表超时列加宽至 108px,避免内容换行

离线市场快照

  • 新增 16 个插件:autoclaw 0.1.1、chatjimmy 0.1.1、codearts 0.1.0、codebuff 0.1.1、doubao 0.1.1、gorkcli 0.1.1、improvado 0.1.1、joycode 0.1.1、loomy 0.1.1、mimo 0.1.1、notion 0.1.1、postman 0.1.1、puter 0.1.1、qoder 0.1.1、raccoon 0.1.0、trae 0.1.0
  • 版本 bump:cline 0.1.5、commandcode 0.1.2、ima 0.1.3、lobsterai 0.1.7、mirasim 0.1.1、newapi 0.1.4、opencode 0.1.4、todofor 0.1.1、workbuddy 0.1.7、zcode 0.1.1(sha256 取自 CI 发布资产)
  • plugins submodule → 0f52234

升级说明

  • 无 migration(本版无 DB 变更)
  • 时区:升级后新写入的时间列统一 UTC;历史存量数据的时区语义不变,前端按带时区偏移的时间串解析,旧数据如无偏移标识会按浏览器本地时区直显
  • 插件:本版无 SDK 层变更,现有插件二进制无需重编;plugins submodule 指针已更新,插件 go.mod 依赖如需引用本版核心,可 bump 至 v1.3.0
  • 自建插件:在线编辑器创建的插件落 data/plugins/local/,随数据目录备份即可,不进 git

ClawProxyHub v1.2.2

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 28 Sep 02:55
35f70b9

ClawProxyHub v1.2.2

稳定性修复版。修复长会话/大请求撞 core↔插件 gRPC 默认 4MB 上限导致的 502,改为经环境变量抬高上限。

概览

  • 修复长会话 502:核心与插件间 gRPC 通信沿用默认 4MB 上限,长会话/大请求(含超大 tool_call、图片)会触发 ResourceExhausted: received message larger than max → 502
  • 新增 CPH_GRPC_MAX_MSG_SIZE:默认 64MB,支持 64mb / 64m / 4096kb / 纯字节等写法(大小写、是否带 b、是否带空格均不敏感,1024 进制)
  • 两端一致:SDK 服务端与核心客户端读同一变量,非法或低于 4MB 回退默认

明细

gRPC 消息上限可配(CPH_GRPC_MAX_MSG_SIZE)

  • sdk.GRPCMaxMsgSize():解析 env(parseByteSize 支持单位与纯字节),空/非法/过小回退默认 64MB,下限保护 4MB
  • 插件服务端:sdk.Serve 的 grpc.NewServer 追加 MaxRecvMsgSize + MaxSendMsgSize(Go 插件与 Lua 插件 luahost 同走 sdk.Serve,一处覆盖)
  • 核心客户端:goplugin.ClientConfig.GRPCDialOptions 设 MaxCallRecvMsgSize + MaxCallSendMsgSize
  • 环境变量经父子进程继承(exec.Command 不改 cmd.Env),核心注入即传递给全部插件子进程
  • 新增 sdk/bytesize_test.go 覆盖各单位/大小写/空格/纯数字/非法值与回退逻辑

升级说明

  • 无 migration(本版无 DB 变更)
  • 配置:如需调整上限,在 .env / docker-compose 设 CPH_GRPC_MAX_MSG_SIZE=64mb(不设走默认 64MB),改后重启核心
  • ⚠️ 插件须重编:读取逻辑在 SDK 层,现有插件二进制不会读该 env,须用本版 SDK 重编后才享受新的服务端上限;重编前插件服务端仍是 4MB
  • 插件 go.mod 依赖如需引用本版核心,可 bump 至 v1.2.2

ClawProxyHub v1.2.1

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 24 Sep 20:29
b9b3b60

ClawProxyHub v1.2.1

插件生态版。插件全量重构至 SDK 统一传输层,新增 14 个插件与首个 Lua 插件(autoclaw),离线市场快照同步。

概览

  • 插件全量重构:出站传输统一走 sdk.* 与 host.StreamSSE/StreamRaw,shared 退为薄封装(标 Deprecated)
  • 已发布 7 个插件版本 bump:cline 0.1.3 / ima 0.1.2 / lobsterai 0.1.5 / newapi 0.1.3 / opencode 0.1.3 / workbuddy 0.1.6 / commandcode 0.1.1
  • 新增 14 个插件(均 v0.1.0):chatjimmy / codebuff / doubao / gorkcli / improvado / joycode / mimo / notion / postman / puter / qoder / todofor / mirasim / zcode
  • 首个 Lua 插件:autoclaw(plugins-lua/,runtime=lua 示范)
  • 构建流程:CI 双目录扫描(plugins/ + plugins-lua/)
  • 离线市场快照:10 条(mirasim / todofor / zcode 0.1.0 上架,CI 发布 sha256)

明细

插件全量重构(sdk 统一传输)

  • shared.ScanSSE / shared.UpstreamClient / shared.ProxyURL → sdk.*(~80 处 / 28 个插件),全部享受 sdk 统一打码日志(debug 级请求/响应入库,敏感头保留前后 4 字符)
  • ima:旧 Host.HTTPStream(Deprecated)→ host.StreamSSE(blockParser 行级→块级适配,保留回调透传语义);至此全插件零 HTTPStream 调用
  • 七文件分层拆分(auth / model / account / chat / upstream / envelope 等),workbuddy 任务按 task_*.go 细拆(activities.go → task_checkin / task_growth / task_travel / task_blindbox)
  • shared.go:传输层薄封装转调 sdk 并标 // Deprecated:(契约已迁至 sdk.SSEParser 等);纯工具(RandHex/RandUUID/OrDefault/Failed/ReadLimited)保留
  • todofor 编译遗留修复(重复 credential 声明、clientFrom → credFrom)
  • 插件模块 go.mod 依赖升级至核心 v1.2.0

新增插件(14 个,均 v0.1.0)

  • chatjimmy / codebuff / doubao / gorkcli / improvado / joycode / mimo / notion / postman / puter / qoder / zcode:Go 插件,七文件分层,出站统一 sdk.*
  • todofor:WebSocket 订阅运行事件(gorilla/websocket)
  • mirasim:mrs-sig-v2 / mrs-seal-v1 加密契约(x/crypto chacha20poly1305 + curve25519)
  • devin / warp(含新依赖):本版未入库,待定(devin 用 protobuf + 本地 devinproto;warp 依赖外部 warp-proto-apis module)

Lua 插件(autoclaw)

  • plugins-lua/autoclaw:首个 runtime=lua 示范(main.lua + manifest),pack 识别 plugins-lua/ 目录并盖 runtime="lua",产平台无关 zip
  • CI:build.yml 双目录扫描(plugins/*/manifest.json + plugins-lua/*/manifest.json,shopt nullglob)

文档

  • AGENTS.md:Go 插件(§1–10)/ Lua 插件(§11)双路径规范;目录布局更新(plugins/plugins/ + plugins/plugins-lua/)
  • 核心侧架构图与前端目录说明补运行时/新插件

升级说明

  • 无 migration(本版无 DB 变更),直接替换二进制即可
  • 离线市场快照已同步 10 条;市场在线索引由插件仓 CI 维护(5a44d00)
  • 插件仓(submodule):指针 → 5a44d00(14 新插件 + 7 bump + autoclaw + 快照);devin / warp 留在本地待定
  • 如需引用本版本核心,插件 go.mod 依赖保持 github.com/ShadowSmallBaby/ClawProxyHub v1.2.0(本版核心 API 无变化)

ClawProxyHub v1.2.0

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 24 Sep 19:29
b9bbb9d

ClawProxyHub v1.2.0

Lua 插件运行时版。新增脚本插件宿主 LuaHost(社区零 Go、零编译写 Lua 插件),并强化网关鉴权/恢复/超时体系、统一 SDK 传输层、插件 KV store 隔离持久化。

概览

  • LuaHost 运行时:Lua 插件宿主(hosts/luahost,独立 module),沙箱化 gopher-lua VM;社区作者只写 main.lua
  • 分发与加载:pack 识别 runtime=lua;核心 -tags luahost_embed 内置注入;P1 共享单份 + P0 启动刷新 + 手动上传替换
  • 系统设置「插件」板块:Lua 启用 / 隔离 / 更新三配置;插件卡片 Go/Lua 运行时徽章
  • 插件 KV store:按插件名隔离 + 持久化到 DB(迁移 000014)
  • 网关强化:O(1) 鉴权、凭据恢复链、首帧/首字双超时、超窗自动截断
  • SDK 统一传输层:HTTP/SSE 出站统一 + 日志铺底

明细

LuaHost 运行时(hosts/luahost)

  • 通用 go-plugin 宿主:把 ClawPlugin 契约翻成 Lua 调用——proto ↔ table 双向映射(snake_case 对齐)、stream 对象 typed 方法(message_start/content_delta/reasoning_delta/tool_call_delta/message_finish/failed)
  • 宿主能力 cph.*:http(request 回 {body,status,headers},请求未完成 raise;stream 支持 format="openai" 宿主解析 SSE 驱动 stream 对象)、json / hash(md5/sha256/hmac_sha256/base64url)/ time(now/sleep)/ random(uuid/hex)/ log(落核心 runlog)/ openai.chat_body(信封→OpenAI body)
  • 约定函数(return M,函数挂为字段):handshake(声明 capabilities/auth_methods,与 Go 插件 Handshake 同构;缺失回退 manifest.json)/ chat(req, stream) / models / login / refresh / profile
  • 沙箱:白名单标准库(base/table/string/math)+ 剔除 dofile/load/print/collectgarbage;沙箱化 require("lib.*")(仅插件目录、禁路径逃逸、模块缓存);一切出站只经 cph.*
  • VM 复用池;所有 RPC 顶层 recover()(Go 侧 panic 转错误不崩进程,stderr 打 [luahost] panic in X())
  • 独立 module:依赖 sdk + 纯 Go gopher-lua(交叉编译零痛)

分发与加载(P1 + P0)

  • pack:双目录扫描(plugins/ + plugins-lua/);plugins-lua/ 即盖 runtime="lua" + entry,protocol_version 由 SDK 盖——作者 manifest 只写 name/version/author/label/icon;lua 产平台无关 zip(跳过 go build);市场 index.json 带 runtime
  • 加载(方案 A):核心按 manifest.runtime=="lua" 分流,启动共享 LuaHost(data/hosts/luahost-<os>-<arch> + --dir <插件目录>),manager 全程零改动(照标准 go-plugin 处理)
  • P1 共享单份:一份 LuaHost 服务所有 lua 插件(磁盘一份、每插件一进程=隔离不丢);pack -install 旧式逐插件拷贝仍兼容(回退)
  • P0 升级刷新:ensureLuahost 按 sha256 比对,核心升级带来新内置 LuaHost 时开机自动刷新共享文件;.manual 标记(手动上传)跳过自动刷新
  • go:embed:-tags luahost_embed 把 internal/plugin/luahost.bin 编进核心(默认 stub,装 lua 插件被拒并提示);Dockerfile 已带两步构建
  • Start 取名:由插件目录取插件名(共享后 binPath 落 data/hosts,不能从二进制路径推名)——与 store 隔离命名空间对齐

系统设置「插件」板块(web + internal/admin)

  • Lua 启用 plugin.lua_enabled(默认开):关闭则安装网关拒装 lua 插件(installZip 单点读包内 manifest.runtime,市场/上传两路径覆盖)
  • Lua 隔离 plugin.lua_isolation:本版锁定为开(UI disabled + 服务端强制 true;共享运行态后续版本)
  • Lua 更新:手动更新(上传 LuaHost 二进制 → 停 lua 插件 → 覆盖共享运行时 → 打 .manual → 拉起)/ 检查更新(占位禁用)
  • Go/Lua 运行时徽章:市场卡 + 已装卡(MarketEntry/pluginView 加 runtime,取自落盘 manifest——决策 A:不动 proto、protocol_version 保持 2)

插件 KV store(internal/plugin)

  • 按插件名隔离:HostService 加 plugin 字段 + forPlugin(name) 派生(manager 从插件目录取名注入)
  • 持久化:迁移 000014 plugin_stores(PK plugin+key);StoreGet(Find 避免命中不到日志噪声)/ StorePut(UPSERT);卸载级联清理;重启不丢

网关强化(internal/gateway)

  • O(1) 鉴权:keys.key_lookup 确定性查找列(sha256(raw)),命中免全表解密
  • 凭据恢复链:401 → 刷新同账号后重试;线性重试(gateway.max_retries 上限)
  • 首帧/首字双超时:first_event_timeout(等首事件,探测上游/代理挂死)+ first_token_timeout(首事件→首个内容 token,容纳推理),路由级可覆盖全局(迁移 000013 拆分旧 timeout_seconds)
  • 输入超窗自动截断:gateway.context_truncate_*(开关/阈值/估算系数)

SDK 统一传输层(sdk)

  • sdk/http.go 出站 request/stream 统一:敏感头打码(api-key/authorization/cookie…,保留前后 4 字符)、debug 级全量入库、Host.LogFields 结构化字段

其他

  • 内部计划文档移出仓库(docs/ 入 .gitignore,不入库)

升级说明

  • 新增 migration 000014(plugin_stores):启动自动执行,无手工步骤
  • 带 Lua 支持的核心需两步构建:先 go build -C hosts/luahost -o internal/plugin/luahost.bin .,再 go build -tags luahost_embed ./cmd/cph(Dockerfile 已含);不带 tag 的核心为 stub——lua 插件仍能跑(共享文件在 data/hosts/ 时),但从市场装新 lua 插件会被拒
  • 插件仓(submodule):autoclaw(lua)与 pack 改动在插件仓,需单独提交/发布后回核心 bump 指针
  • 如需引用本版本核心,把插件 go.mod 依赖升到 github.com/ShadowSmallBaby/ClawProxyHub v1.2.0

ClawProxyHub v1.1.6

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 24 Sep 00:56
c509d5a

ClawProxyHub v1.1.6

插件生态版。新增 commandcode 插件,ima 重构为七文件分层,修复前端重构遗留问题,离线市场快照同步。

概览

  • commandcode 插件 v0.1.0:Command Code(api.commandcode.ai)反代
  • ima 插件 v0.1.1:内部重构为七文件分层,修复 function_call 过滤器重复输出
  • 前端修复:实例弹窗 API 调用、头部版本牌、复制文本
  • 离线市场:新增 commandcode,ima 更新到 0.1.1

明细

commandcode 插件(plugins/plugins/commandcode)

  • Command Code(api.commandcode.ai)反代:信封 ↔ CC 私有协议双向转换(/alpha/generate NDJSON 流)
  • 七文件分层(main/auth/model/upstream/envelope/chat/fingerprint),与 ima 同构
  • 反检测机制:apiKey 派生确定性设备指纹(登录时生成、随凭据 blob 持久化,该账号永远同一台设备)、fingerprint/lifecycle 预请求(8h+2h 抖动)、per-key session(12h+1h 抖动)
  • 协议细节:空 system 占位(阻止上游注入 ~7.5K token 默认提示词)、noCacheTokens 用量语义(信封 Anthropic 语义 input 只计非缓存)、零输出报 429 让下游退避重试、idle 看门狗(默认 90s,可经 stream_idle_seconds 调大)
  • 设备指纹随凭据持久化:credential.Fingerprint 进 blob,重启/换机/多实例不变;旧账号(blob 无指纹)按当前设置即时生成

ima 重构(plugins/plugins/ima)

  • 七文件分层(main/auth/model/upstream/envelope/chat),与 commandcode 完全同构:auth 收编凭据、model 独立(get_models 同步)、envelope 收编 question 拼装、chat 只留编排
  • function_call 过滤器修复:malformed 块在后续 chunk 反复输出(原以 parsed 作解析起点,坏块不进 parsed),改为独立 seen 计数器,坏块同样推进
  • const 谁用谁定义:maxQuestion/cjkRe 归 envelope(唯一使用者)

前端修复(web)

  • InstanceFormDialog 迁移 entities API(上轮 views 分域归一的漏网)
  • 头部挂上版本牌(VersionChip,组件 v1.1.5 已存在但未挂载)
  • Accounts 复用 utils/common.copyText(原组件内私有实现无错误处理)

离线市场(internal/admin)

  • 快照同步 7 条(含 ima 0.1.1、commandcode 0.1.0,CI 发布 sha256);plugins submodule → 5c81488

升级说明

  • 无破坏性变更;无新 migration
  • commandcode / ima 插件包已发布到插件仓库(离线市场可装);如需引用本版本核心,把插件 go.mod 依赖升到 github.com/ShadowSmallBaby/ClawProxyHub v1.1.6

ClawProxyHub v1.1.5

Choose a tag to compare

@ShadowSmallBaby ShadowSmallBaby released this 23 Sep 09:49
894a087

ClawProxyHub v1.1.5

可观测性版本。新增运行日志体系(系统级事件统一落库、级别可配、明细可导出),任务偏移从硬编码改为可配置,账号测试补齐信封请求与事件明细诊断,并修复默认实例编辑、i18n 键缺失等问题。

概览

  • 运行日志:账号刷新/登录失败、插件日志、插件崩溃重启、任务扫描异常、日志清理统一落 run_logs,日志页新增「运行日志」标签,点击行展开明细抽屉并可导出 JSON
  • 级别可配:error / warn / debug / info 递增包含(默认 error),管理端改动实时生效;debug 级记录上游请求与响应明细
  • 任务偏移可配:daily 触发抖动窗口由固定 30 分钟改为 0–45 分钟可配,0 = 关闭偏移
  • 调用日志区分同步/流式:新增 stream 列与类型展示
  • 账号测试诊断:回传信封请求与事件明细,可一键导出 JSON;扫码登录二维码内联渲染
  • 默认实例保护:系统生成的默认实例不再暴露名称/站点地址输入

明细

运行日志(internal/runlog + internal/admin)

  • 新增 run_logs 表(migration 000010):level / module / action / message / detail / account_id,按 created_at、(module, id) 建索引
  • runlog.Logger 按配置级别过滤后落库,写库失败静默(日志不应影响主流程);级别读取走闭包实时取设置,改动无需重启
  • 埋点:account 登录/刷新失败(带 account_id)、plugin 崩溃自动重启与重启失败、task tick panic、janitor 清理过期调用日志
  • 插件侧经宿主 Log 落库:LogEntry.Fields 约定 action(固定词表 chat/login/refresh/profile/models/http/task/store,未命中按 other)+ detail(排查明细)
  • 新增 GET /admin/run-logs(分页 + 级别/模块/关键字/时间区间筛选)与 DELETE /admin/run-logs

SDK(sdk)

  • Host.LogFields(level, message, fields):支持结构化字段,原 Log 签名保持兼容
  • 新增 sdk/http.go 出站助手 HTTPPost / HTTPStream(SSE 逐块回调),debug 级统一记录请求与响应:敏感头打码(api-key / authorization / cookie / x-api-key / set-cookie,保留前后各 4 字符)
  • 注意:请求体与响应体在 debug 级为全量明文入库,该级别仅建议本机排查时开启

任务偏移(internal/task + internal/setting)

  • 删除硬编码 dailyJitter = 30 * time.Minute,改读 task.daily_jitter_minutes(默认 30,上限 45)
  • jitter = 0 时跳过抖动(避免 rand.Int63n(0) panic),语义为关闭偏移

调用日志(internal/gateway + web)

  • request_logs 新增 stream 列(migration 000011),日志列表新增类型列展示同步/流式

账号测试诊断(internal/admin + web)

  • 测试接口回传 request(清除凭据后 protojson 序列化的信封请求)与 events(事件明细,上限 200 条防爆)
  • 前端折叠面板展示,一键导出 请求/事件/回答/日志 为 JSON
  • 登录步骤 url 为 data:image/ 时内联渲染二维码,不再误调浏览器打开
  • 客户端选择卡片改 grid 布局(每行三个、可滚动)

修复(web)

  • 运行日志表格点击无响应:TDesign row-click 为单参数回调,原两参数签名解构失败
  • 单实例插件的默认实例:弹窗内隐藏名称/站点地址、跳过校验并沿用原值;无附加设置字段时隐藏编辑入口
  • 插件与实例设置弹窗统一「打开即预填 schema 默认值」(原先仅下拉类字段预填)
  • 补回误删的 logs.tokenDetail 中文键(LogCells 仍在引用,中文界面会显示原始键名)
  • 任务页/日志页表格由固定像素高度改为 flex 高度链,随窗口自适应并保留表格内部滚动

代码清理

  • sdk/http.go 移除重复实现:零调用的 map 版 redactHeaders、空实现 maskBody、itoa→fmtInt 无效包装,以及手写的 lower/indexOf/splitLines/hasPrefix/trimSuffix/trimSpace/bytesIndex/jsonQuote,统一改用 strings / strconv / encoding/json(后者对 map 键自动升序,日志字段顺序稳定可对照)
  • plugin.Manager.Get 修复变量遮蔽:重启失败日志原先取到的是外层 err(必为 nil),真实错误被丢弃
  • setting.RunLevel 去掉重复读取;runlog.Logger 字段更名并对非法级别配置回退处理

升级说明

  • 无破坏性变更;新增 migration 000010(建 run_logs 表)与 000011(request_logs 加 stream 列),启动自动执行
  • 运行日志默认 error 级,仅记录失败事件,正常运行不产生写入压力;切到 debug 前请留意上节关于明文入库的说明
  • 插件仓库无需改动;如需引用本版本核心,把 go.mod 依赖升到 github.com/ShadowSmallBaby/ClawProxyHub v1.1.5