Skip to content

v3.34.1 — Skill Python 运行时与环境修复

Latest

Choose a tag to compare

@huiliyi37 huiliyi37 released this 20 Oct 14:57
· 5 commits to main since this release

安装指南 · Installation

本段落随每个版本发布,嵌在 Release 正文顶部。完整安装与平台说明见 docs/guides/installation.md(含 Android Termux、源码构建、Shell 补全、自动更新)。

This section is published with every release. For the full installation & platform guide (Android Termux, building from source, shell completions, auto-update), see docs/guides/installation.md.

下载哪个文件 · Which file to download

按平台与 CPU 架构选(不确定架构?mac 点左上角苹果菜单「关于本机」;Windows 设置 → 系统 → 系统信息;Linux 终端 uname -m):

平台 文件 说明
macOS Apple Silicon(M1/M2/M3/M4) Tianshu_3.34.1_aarch64.dmg 多数现代 Mac
macOS Intel Tianshu_3.34.1_x64.dmg 2020 前的 Intel Mac
Windows 10(1809+)/ 11 x64 Tianshu_3.34.1_x64-setup.exe 安装向导,自带 WebView2 离线安装包
Linux x86_64 Tianshu_3.34.1_amd64.AppImage 免安装
Linux ARM64(树莓派 64 位等) Tianshu_3.34.1_aarch64.AppImage 免安装

CLI 用户也可 npm install -g tianshu-harness(需 Node.js ≥ 24),或用一键安装脚本。

macOS 安装步骤

  1. 下载 .dmg 并双击打开,把 Tianshu 拖入「应用程序」文件夹

  2. 首次打开:本包为 ad-hoc 签名、未经 Apple 公证,浏览器下载后首次双击会报「已损坏,无法打开」或「无法验证开发者」。拖入应用程序后,在终端执行一次(移除下载隔离属性):

    xattr -cr /Applications/Tianshu.app
  3. 之后正常双击启动。若仍被拦:右键 App → 「打开」→ 再点「打开」,或系统设置 → 隐私与安全性 → 底部点「仍要打开」

  4. 应用内自动更新不受 Gatekeeper 影响——只需首次手动放行

Windows 安装步骤

  1. 下载 Tianshu_3.34.1_x64-setup.exe,双击运行,按向导完成安装
  2. 界面依赖 WebView2 Runtime——3.5.3 起安装器已内嵌离线安装包,通常无需额外操作
  3. 窗口完全打不开时:开始菜单「修复 WebView2」,或从本 Release 底部 windows-repair 目录双击 repair-webview2.cmd,或手动安装 WebView2 离线安装包 后重启

Linux 安装步骤

  1. 按架构下载 AppImage,加执行权限后直接运行:

    chmod +x Tianshu_*_amd64.AppImage   # ARM 设备换成 _aarch64
    ./Tianshu_*_amd64.AppImage
  2. 依赖:glibc ≥ 2.35(Ubuntu 22.04+ / Debian 12+ 等主流发行版)与系统图形栈 libwebkit2gtk-4.1.so.0 + libgtk-3.so.0——多数桌面发行版已自带;精简/服务器版需按发行版安装 webkit2gtk 4.1,缺库时 ldd Tianshu_*.AppImage 自查

  3. 推荐 X11 会话(Wayland 尚未验证)

常见问题

  • mac 提示「已损坏」:见上方 macOS 步骤 2 的 xattr 命令——这是 Gatekeeper 对未公证下载包的标准行为,不是包真坏了
  • Windows 装完提示 rivet 无法识别:新开一个终端(旧终端的 PATH 是装 Node 之前快照的)
  • Linux AppImage 双击无反应:先确认执行权限(chmod +x),再 ldd 查缺库
  • 自动更新:桌面端应用内自动更新(mac Gatekeeper 仅影响首次手动安装);已安装用户无需每版重下

v3.34.1 — Skill Python 运行时与环境修复

日期:2026-10-20
上一版本:v3.34.0(稳定通道)

本版说明

本版主轴是 Skill Python 运行时(issue #523):目录型技能可用 runtime.yaml 声明 Python 解释器要求、pip 依赖与命名脚本入口,经审批后在隔离 venv 环境中安装与运行——CLI/TUI 与桌面端共用同一套内核能力。另修复桌面自定义存储路径下 CLI 数据根漂移(#525)、GitHub 镜像改写三重故障(#524),并落地对话式技能创建与工具命令区降噪。

bump 后追加合入一批稳定性与数据安全修复:Windows 桌面后台恢复与进程终止有界化、会话库单写者保护(防双写/防误接管)、token 账本上报放大修复与客户端设备专用凭证(PR #31)、桌面「需处理」提醒可操作化(PR #35),以及看图片设置保存、计划审批卡重交(#526)等缺陷修复;外部 PR #31–#35 全部处置完毕。

内容清单

  • 技能 Python 运行时(#523,本版主打):
    • 完整闭环:技能包根声明 runtime.yaml(解释器版本区间 / requirements / 命名入口)→ doctor 环境诊断 → prepare 预览并审批安装 → run 参数化执行 → 输出与日志回看。声明变更即版本变更;resume 与 /cd 后旧会话执行版本不变。
    • 环境隔离与安装策略:环境按工作区 + 技能身份 + 包版本 + 解释器 + 平台隔离存放,原子发布就绪状态(中断不留假就绪),解释器漂移报「需重建」不自动替换。wheel 默认安装;缺 wheel 时报出具体依赖,源码构建须单独批准且不沿用到新版本。
    • requirements 白名单审核:允许版本约束 / extras / 环境标记 / 哈希与包内 -r/-c 引用;拒绝 editable、本地路径、VCS、直接 URL 与包内 index 源选项(带行号与替代写法)。包源只来自 mirrors.pypi 配置。
    • 执行与权限:无 shell 参数化执行($(...) 等载荷按字面传递),支持标准输入、超时与取消(进程树终止);剥离宿主 PYTHONPATH/VIRTUAL_ENV 等变量;prepare/run 恒审批,plan-mode 仅放行 doctor,deny 规则恒赢。
    • 入口矩阵:skill_runtime 工具(模型调用)、rivet skills doctor/prepare/run(真实退出码透传)、桌面技能详情「运行环境」面板(检查/准备/源码构建准备/删除环境,断线可恢复查询);设置 → 环境新增「Python 解释器路径」。
  • 桌面端:
    • 对话式技能创建与草稿审阅发布:专属创建窗口与空闲创建窗口、持久化一次性输入、带版本编辑的审阅卡与发布、窗口失败恢复与权威刷新。
    • 工具命令区降噪:进行中的工作组默认折叠为一行(正在 X · 目标 · 时长),展开后在固定高度内滚动浏览并吸底——长任务不再把正文顶出屏幕。
    • 源码查看器顶部乱码带修复:WKWebView 合成层重影兜底。
  • 环境修复:
    • CLI 数据根与桌面端同源(#525):rivetHome 读取桌面端「设置 → 存储」写入的 launcher.json(优先级:RIVET_HOME > launcher.json > 平台默认)。此前手动跑 CLI 落到平台默认空目录,/logs 输出全部 exists=false。
    • GitHub 镜像改写三重故障(#524):删除对 bash 命令的无差别 URL 文本替换(曾改写 echo 回显、把死镜像持久化进 .git/config、劫持 push),改用 git 原生 insteadOf 机制——clone/fetch 走镜像、push 走原站、仓库配置永存原始地址、开关与仓库持久状态解耦。镜像表剔除实测不可用项(kkgithub 证书失效、fastgit 关站),检出存量污染时输出精确的 git remote set-url 还原命令。
    • /repair-prefix 纳入命令守卫(#519):补齐帮助文案与两阶段说明(预览 → --confirm 执行);错误恢复指引按入口分流——桌面端不再收到无法执行的斜杠命令,改指「设置 → 检查运行环境」。
    • 续跑链路:wire 归一化与显式前缀恢复稳定化(#500);收编 PR #518(同模型恢复与无损转录:前缀 400/422 拒绝允许同模型压缩重试一次、历史无损落盘),PR #522 回归测试收编(#521)。
  • 工具输出反馈:
    • grep 截断标记结构化([truncated: showing N matches],ripgrep 与 native fallback 统一);run_tests 截断处标注完整日志路径——模型知道去哪取回被省略的内容。
  • 技能生态:收编 PR #517——技能草稿契约统一与受限创建会话。
  • 发布工程:AtomGit 并入正常发版顺序,删除资格验证机制(源资格认定已全自动化:匿名全量下载字节级校验 + Range 可寻址)。

10-20 增补(版本号 bump 后合入)

  • Windows 桌面后台恢复与数据安全(重点批次):
    • 恢复入口:补登 runtime_restart/runtime_storage_status 的 Tauri ACL(此前打包版「重启本地服务」必然被 ACL 拒绝);「立即重试」按 supervisor 状态分流(failed/circuit_open 走 runtime_retry,ready/degraded 仅重连,starting/restarting/stopping 拒重复提交),重试幂等单周期;终态失败暂停审批连接重试,新实例 ready 后恢复,查询失败不再被误作审批拒绝;新错误码 process-stop-failed/data-dir-lock-lost 配具体指引,横幅区分存活占用者/身份无法核验/存储权限失败/托管后台终止失败四类场景。
    • 进程终止有界化:统一 10 秒预算终止流程(优雅 ≤3s → Job Object/句柄强杀 ≤3s → taskkill 降级吃剩余预算且到期终止辅助命令),消除终止路径无界等待;终止等待不再持有共享 child 锁并以实例代次防互相覆盖;taskkill 降级前复查进程创建时间,PID 复用不杀无关进程;旧进程退出未确认则停止自动替换并发布 process-stop-failed;Windows 启动改挂起创建→绑 Job→恢复,消除绑定前窗口。
    • 会话库单写者:取消「活进程心跳超时即可接管」——接管仅限同主机确认进程不存在或 PID 创建时间与锁记录不匹配;reclaim 前重读完整身份(PID/主机/启动时间/owner),身份变化放弃回收;Windows 进程创建时间探测异步化(2 秒上限计入 5 秒 acquire 窗口);丢锁即撤销写入资格(写请求 503、健康翻 data-dir-lock-lost、停调度与活动会话、全部持久化写路径提交前查闸门)、CLI 立即非零退出且不执行会重刷会话库的收尾。
    • 诊断:RuntimeStatus 增加占用者摘要/失败阶段/存储保护详情/最近终止结果/Job 降级字段(旧字段兼容);诊断包升级 schema 2(锁判定依据、存储保护阶段、Job 降级、进程终止时间线),脱敏与白名单不变;新增 runtime-recovery-gates 发版门禁 workflow 与 Windows 实机验收清单(desktop/docs/windows-runtime-recovery-acceptance.md)。
  • token 账本与上传凭证(PR #31):修复上报放大——完整 2000 日桶 + 3000 小时桶合并为每页 ≤4 条批量写,派生累计在原子事务内维护;登录自动取得账户/设备/会话限定的上传凭证(加密持久化、最长 1 小时、按会话续期、退出尽力撤销),管理/Pro 权限不进客户端、论坛登录不能换取此凭证、自定义上传地址收不到账号 JWT;服务端账号级 120 秒冷却与凭证准入限额(已上线);429/Retry-After 与指数退避保留全部本地数据与未确认分页,自动上传仍显式 opt-in。fulfillment-server 自动支付在源头暂停(fail-closed,仅显式恢复)。
  • 桌面「需处理」提醒可操作化(PR #35):侧栏「需处理」行新增「… → 标记已处理」,行徽标/分组计数/筛选同步更新,真正待审批只能查看并实际处理;提醒按 run 身份绑定(重命名/普通刷新不复活,新失败重新提醒),历史无运行编号标记幂等迁移;自动已见要求前台会话页且无设置/新会话/连接遮挡;冻结列表随操作即时刷新并修复焦点残留锁。
  • 缺陷修复:
    • 看图片/生图设置保存:多 key provider 的模型存在性校验改查契约并集(keys 池是事实源)——后加进 key 池的模型(如 minimax-m3.1-flash)不再被误判「没有模型」;保存失败不再静默(具体错误提示 + 保留未保存标记)。
    • 计划审批卡(#526):驳回 → 修订重交后卡片自动回到待审批态——按提交代次隔离卡片/草稿/共享动作态,同 slug 重交强制重挂载,不再有驳回残留态或已决卡死。
    • 技能运行时授权与生命周期缺口收尾(#523):requirements 审核、运行契约与进程执行的权限边界补齐。
    • 锁恢复与重启回归缺口:持久化异步撤销、store-lock 竞态回归用例、恢复动作收口。
    • 诊断来源报告:/logs 的 launcher 数据根来源(默认/自定义/便携)报告准确化(#525 后续)。
  • 外部 PR 收编:
    • PR #32:worker 身份与首次历史滚动——provider 注册表唯一身份贯穿 bootstrap/headless/worker 重建与凭证域,拒绝歧义凭证来源,绑定不可用归类终态绑定失败;手势冷却期测量静态历史行并先捕阅读锚点。
    • PR #33:预检封印与旧转录恢复——修复后的 source seal 只在真实执行快照上发布,全部规范预检修复(含仅重排)写回;旧封印仅经确定性源重放且 wire/执行绑定完整匹配才恢复;转录投影修复前后校验。
    • PR #34:Windows Job 启动器宽字符化与打包链——job-launch 改 UTF-16(修非 ASCII 路径参数引用,溢出 fail-closed),git 子进程经 Job 启动器「生于 Job」、清理按归属分档诚实上报;桌面打包从受控 C 源构建 launcher、架构校验、缺失拒绝出 Windows 包。
    • PR #31 / #35 见上两条;PR #34 的交付异步化主体因与本仓 61ad99a89 重复未采纳(说明已在 PR 内留言)。

升级注意

  • 从 3.34.0 直接自动更新即可,无需迁移。
  • 技能 Python 运行时首版仅支持 Python(不打包解释器、不支持 Conda、不自动安装操作系统依赖);无 runtime.yaml 声明的旧技能行为完全不变。
  • 曾配置 kkgithub / fastgit 镜像的用户:配置项保留兼容但解析为直连,建议改用 ghproxy 或 gitcode。
  • 服务端配套:token 上传凭证与账号级限额要求 token-server 侧已上线版本(2026-10-17 起已生效);旧客户端不受影响,仅不享受新凭证链路与冷却保护。自动支付当前在履约源头暂停,恢复时间以公告为准。
  • Windows 用户:本版包含后台恢复与进程终止的重点修复;原生终止场景按 desktop/docs/windows-runtime-recovery-acceptance.md 验收。

发布节奏

  • 候选 catalog 只纳入通过真机验收的平台(沿用 3.32.1 以来的纪律);darwin-x86_64 与 linux-aarch64 安装包随 Release 页手动下载,不参与自动更新灰度。