콘텐츠로 이동

@tansr/cli Changelog

이 콘텐츠는 아직 번역되지 않았습니다.

按版本列出 @tansr/cli 的用户可见变更;每版分「新增 / 变更 / 修复」三段,涉及迁移的条目写明迁移方式。工程视角的完整变更记录见页末折叠段。

  • 内嵌的 @tansr/serve 升级到 0.15.1(见其发布说明):首次设备绑定不再被「尚未建立的执行能力」循环卡住;业务工具沿设备执行链受控地实时回传输出、保留原默认执行超时且不回落到 tansr serve 主机执行;统一错误信封的状态与重试动作映射修正;检查点恢复先结算已消费的材料。tansr serve 的使用者升级即获得同一组修复,无需改动启动参数。
  • tansr 命令行本身无新命令、子命令或旗标,ACP 协议面亦无变化;npm 包与单文件可执行版按同一主线重新构建。迁移:无。

本版 npm 包(@tansr/cli 0.10.3)已于 2026-10-10 与 @tansr/sdk 0.19.0、@tansr/serve 0.15.1 同批发布;@tansr/api-client 0.4.0 与 @tansr/protocol 0.2.0 源码零差量、本批不重发。单文件可执行版(Linux x64 / arm64)同日上架官方分发点,内置更新器可直接升级到本版;Windows 与 macOS 单文件版仍未发布,这两个平台以 npm 为唯一安装渠道。

  • 内嵌的 @tansr/serve 升级到 0.15.0(见其发布说明):tansr serve --v2 新认两个环境变量 TANSR_SERVE_LEGACY_PREFIX=readwrite|readonly|off(缺省 readwrite)与 TANSR_SERVE_LEGACY_SUNSET=<HTTP-date 或 ISO-8601>,分别控制旧 /v2、/v3/* 前缀的退役窗口与 Sunset 头;两键经既有的环境变量表流入服务端,非 --v2 启动时按既有规则出现在「legacy 组未生效」提示里。缺省行为与 0.10.1 相同;门面在场时旧前缀的每个响应多出 Deprecation / Link(设置了 TANSR_SERVE_LEGACY_SUNSET 时再加 Sunset)三个标准头,响应体与状态码不变。对你意味着:升级无需动作;想提前演练只读窗口的部署设 TANSR_SERVE_LEGACY_PREFIX=readonly,并观察结构化日志事件 api.legacy_prefix_rejected,回滚只需改回 readwrite。迁移:无。
  • tansr 命令行源码零改动:无新命令、子命令、旗标或输出面,本版只是版本号与内嵌服务端的升级。

本版 npm 包(@tansr/cli 0.10.2)已于 2026-10-06 与 @tansr/serve 0.15.0、@tansr/api-client 0.4.0 同批发布;@tansr/sdk 本批无新版本(仍为 0.18.1)。单文件可执行版本版未上架(分发点停留在 0.10.1,下一版 0.10.3 恢复同步)。@tansr/serve 0.15.0 的发布说明曾预告后续版本会把旧前缀窗口缺省改为 readonly;截至 0.15.1 该切换尚未发生,届时以对应版本的发布说明为准。

  • npm 包形态的 tansr 在加载业务模块之前先启用 Node 编译缓存(缓存目录:Windows %LOCALAPPDATA%\tansr\compile-cache、macOS ~/Library/Caches/tansr/compile-cache、Linux $XDG_CACHE_HOME 或 ~/.cache 下的 tansr/compile-cache;设置了 TANSR_USER_HOME 时落在其 .cache/tansr/compile-cache)。TANSR_COMPILE_CACHE=<目录> 可改位置,=0 关闭;缓存失效由 Node 按版本与源哈希管理,不自管清理;写入失败或旧版 Node 时静默跳过,不改退出码与输出;单文件可执行版入口不变、不启用。对你意味着:每个新安装版本首次启动会向用户缓存目录多写约 2 MB、数十个文件,之后同版本启动更快;旧版本缓存不会自动删除,可整目录清理。迁移:无;要恢复旧行为设 TANSR_COMPILE_CACHE=0。
  • TUI 的 Markdown 渲染器改在首帧之后再加载:--resume 带 Markdown 历史时,首帧可能晚一轮事件循环(约 10 ms)才写出 Markdown 条目,其余不可见;渲染器加载失败时条目按纯文本放行、正文不会消失。npm 包内多出一个与入口同层的惰性分块 tansr-marked.esm-<hash>.mjs。迁移:无。
  • tansr serve --legacy-v1 / TANSR_SERVE_LEGACY_V1=1 标记为已废弃(1.0.0 移除):本版旋钮保留并仍生效(行为零变),帮助文案与启动通告标明废弃,显式开启时另输出一条结构化 warn 日志 server.deprecated_option(携 option / env / source / deprecatedSince / removal / replacement / replacementPath)。审批凭据投递的 /api 对应操作 POST /api/approvals/:id/credential 已随 @tansr/serve 0.14.0 落地,接审批投递的 --v2 部署不再需要 --legacy-v1;tansrd 池实例不再追加该旗标,升级即自动切换。迁移:在 1.0.0 前把审批投递方改到 /api/approvals/:id/credential(Bearer + x-tansr-end-user),其余 /v1 消费改走 /api。
  • 内嵌的 @tansr/serve 升级到 0.14.0(见其发布说明);其 leaseMs 下限收紧只影响库面装配,tansr serve --v2 生产路径零变化。
  • tansr bg kill --force 在 Windows 上的进程身份探针不再依赖 PowerShell 模块自动发现(显式导入所需模块,并把探针子进程的模块路径钉到系统目录):在装有大量第三方模块的机器上,探针不再因超时而把 --force 判为「不可核验」拒杀;后台任务启动时的身份登记同样受益。旗标、输出与退出码零变化。

本版 npm 包(@tansr/cli 0.10.1)已于 2026-10-04 与 @tansr/sdk 0.18.1、@tansr/serve 0.14.0、@tansr/api-client 0.3.0 同批发布;无新命令、子命令或输出面。如实披露:启用编译缓存后,TUI 启动至可输入的热态中位用时为 287 ms(目标 300 ms,已达标);首次启动(建缓存)361 ms、关闭缓存 348 ms。单文件可执行版(Linux x64 / arm64)已于 2026-10-05 另行上架官方分发点;Windows 与 macOS 单文件版未发布,这两个平台以 npm 为唯一安装渠道。

  • tansr serve --v2 部署自带 /api 统一调用面(正式可用):统一响应头、统一错误信封、显式协商的事件包络、能力发现与会话级围栏,详见 @tansr/serve 0.13.0 发布说明。对你意味着:以 /v1/status 做健康检查的脚本改用 /healthz / /readyz;直接拼 /v2、/v3 路径的运维脚本在 1.0.0 前改走 /api。迁移:随包的 nginx / k8s 部署模板已为 /api 加分片,自管部署件请对表更新。
  • TUI 启动时在线核验当前凭据所属账号并显示(应用密钥登录只显示公开标识并提示无法凭此核验个人账号;无法核验时提示「若凭据已不属于你的账号,请重新登录」)。默认模型不可用或平台模型目录为空时不再直接退出,而是进入启动模型选择面:可从可用模型中选择、打开平台模型管理页后返回刷新、绕过装配缓存重拉配置并继续,或退出;同屏可重新初始化/重新登录(原有会话按原账号保留)或退出登录(登出期间若凭据已被换号则拒绝删除并提示重启核验)。本次选择只对本次启动生效;非 TTY 环境不等待交互。
  • tansr serve --v2 --host-module <绝对路径.cjs> --host-module-sha256 <sha256>:运维者可显式指定本机的受信宿主模块及其原始字节摘要(两旗标必须成对,缺一按用法错误退出),入口按已核验的字节编译执行,用于装配公开平台宿主与可选的终端服务、归档、缓存、记忆等库面能力;它与部署者本机代码同级受信,不是沙箱,路径不能由模型或 HTTP 提供。不传两旗标即为 0.9.0 行为,tansr serve --v2 本身不会自动开启任何一项。
  • tansr serve 新增运维旋钮 TANSR_SERVE_LOG_LEVEL(见下)、TANSR_SERVE_SSE_MAX_FRAME_BYTES(单帧字节硬帽,超界只断开该订阅)、TANSR_SERVE_AUTH_MAX_PENDING / TANSR_SERVE_AUTH_TIMEOUT_MS(认证源限界)与 TANSR_SERVE_LEGACY_V1;环境变量表由 31 键增至 36 键。
  • /v1 单租户面在装配了 /api 门面的 --v2 部署上缺省关闭(返回 404);仍需保留的部署加 tansr serve --legacy-v1 或设 TANSR_SERVE_LEGACY_V1=1。本版 POST /v1/approvals/:id/credential(审批凭据投递)尚无 /api 对应物,接审批投递的 --v2 部署须显式开启 --legacy-v1(对应操作随 @tansr/serve 0.14.0 / 本包 0.10.1 补齐)。不开启 --v2 的 tansr serve 仍保留 /v1。/v2、/v3/* 自本版起定义为内部适配入口,本版不移除、不改响应字节,1.0.0 移除。
  • tansr serve 引擎日志缺省级别改为 warn:TANSR_SERVE_LOG_FORMAT=json 部署此前每请求一行的 request.completed、session.created / ended 等 info 事件缺省不再输出,需显式 TANSR_SERVE_LOG_LEVEL=info(或 debug);全部级别同样脱敏、有界,同一事件在 10 s 窗口内超量时以 log.repeated 汇总、分组过多记 log.overflow。迁移:靠 json 日志 info 事件做请求审计或仪表板的部署升级时显式设级别,并按 log.repeated 折算计数;其余不设即为 0.9.0 行为。
  • npm 包由单文件改为分块出包,tansrd.mjs 随包;安装入口 tansr 不变。迁移:以文件路径解析 CLI 包内容的消费方(如 Dockerfile 直接拷贝 dist/tansr.mjs)须按新的文件表核对。
  • TUI 受控情景记忆检索(SearchMemory)在同一轮内不再重复询问权限;Ctrl+C 中断后挂起的权限咨询请求随之取消,迟到的结果不放行、不缓存。仅 TUI 持此装配,SDK / serve 的自定义或宿主工具不受影响。
  • 启动与请求前开销优化:按入口加载装配、并行加载渲染层、启动期去除重复的网络与目录装配、已取消的请求不再发出;行为、旗标与输出形零变化,只是更快。

本版 npm 包(@tansr/cli 0.10.0)已于 2026-10-02 与 @tansr/sdk 0.18.0、@tansr/serve 0.13.0、@tansr/protocol 0.2.0 同批发布。如实披露:TUI 启动至可输入的中位用时在发布时为 345 ms,未达 300 ms 目标(0.10.1 启用编译缓存后热态已达标);单文件可执行版本版未发布,npm 为唯一安装渠道。

  • 移动托管应用可显式开启网页抓取(WebFetch)与 HTTP 请求(Http)两个工具:两者在开发者的 tansr serve 主机上执行,沿用同一套核心工具与权限链,缺省关闭。迁移:升级后先在平台为应用配置该能力,再新建会话或从存储重新装配会话;现存的活动会话不会自动增删工具。
  • 托管的 Http 工具不能引用宿主环境变量里的凭据,模型也不能自行开启私网访问;默认文本日志补齐有限的审批诊断,裁决超时回落询问与用户审批规则保持不变。

本版 npm 包(@tansr/cli 0.9.0)已于 2026-09-16 与 @tansr/sdk 0.17.0、@tansr/serve 0.12.0 同批发布,发布物由已合并的修复重新构建;单文件可执行版另行登记,本批未发布。

  • 会话里图像 / 视频 / 语音工具产出的媒体产物随会话存储(热 / 冷)与检查点一并保留,--resume / --restore 之后可重建对应的工具卡预览;预览字段只给端上呈现,不送入模型。
  • 朗读(TTS)按厂商的原子输入限制与原有加权字数双帽预检:可显式分段预检,纯空白分段直接拒绝而不发起收费请求;新旧客户端按各自声明的特性取得兼容的限制投影,不会放宽授权模型的上限。平台侧的原子上限下发已于 2026-09-15 上线;某个语音模型的约束里没有原子上限时,仍按原有加权字数单帽预检,行为与此前相同。
  • 会话存储版本 2:首次写入媒体产物的会话卷升为版本 2。迁移:升级前备份会话目录,并把写同一会话的所有程序(命令行 / serve / SDK 宿主)一起升级;回退到旧版本须用原备份或改用独立存储目录,旧程序不能继续写已升级的卷。

本版 npm 包(@tansr/cli 0.8.0)已于 2026-09-15 与 @tansr/sdk 0.16.0、@tansr/serve 0.11.0 同批发布;单文件可执行版另行登记。权限裁决与 SDK / serve 保持同源,本版没有把任何需要确认的操作放宽为自动放行。

  • 项目层 hooks 信任门:仓库 .tansr/settings.json / settings.local.json 声明的 command / http hooks 跟随工作区信任记录(~/.tansr/trust.json)——已信任照常执行;无记录或记为不信任 → 零执行并在 stderr 留一行说明(用户层 / 托管层 hooks 不受影响)。TUI 首开未信任目录时,项目层 SessionStart 等你选「信任」后再补发恰一次。headless / serve / acp / mcp serve 四入口只认 TUI 落盘的记录;无记录而确需本次执行,加 --trust-project-hooks 或设 TANSR_TRUST_PROJECT_HOOKS=1(只在无记录时生效、不写入 trust.json、压不过已记录的不信任)。判据锚定启动目录上溯最近含 .tansr 的祖先并按真实路径归一;项目层 http hook 请求头里的 ${VAR} 不展开。
  • 会话预算闸:配置 budget { maxUsd?, maxTotalTokens?, onExceeded?: 'block' | 'warn' } 段在 TUI / headless / serve / acp 走同一闸门——累计消耗触顶时 'block'(缺省)在下一次模型调用前终止本轮(turn.aborted { reason: 'budget_exceeded' },会话保持打开),'warn' 每轮至多一条 turn.error { scope: 'budget', recoverable: true } 后继续。maxTotalTokens = 输入 + 输出 + 缓存读 + 缓存写,思考 token 按各模型能力位并入输出、不重复计;maxUsd 只对以 USD 计价的模型出数。
  • 无预算的会话也记录用量轨迹:-p / TUI / serve / acp 会话每轮末在会话卷落一条内部用量快照(按模型分桶:输入 / 输出 / 思考 / 金额;有新入账才写),--resume 后自快照续算;旧会话卷原样可读。
  • serve 与 acp 补齐与 TUI / headless 同款的会话工装:工具结果超帽时全文落会话目录 spill/、历史里以存根替身;压缩前在 checkpoints/ 落检查点(--checkpoints-dir / TANSR_CHECKPOINTS_DIR 同效)并发出 session.checkpointed。serve 新旋钮 TANSR_SERVE_HOST_SHELL=posix|powershell(缺省随平台)。
  • 更新签名指针新增单调序号 sequence(每通道单调)与信息性 issuedAt:收到更小序号的封套(合法签名的旧封套被重放 / 回滚)拒绝并报 pointer_sequence_rollback;无序号的旧形封套视为 0 并警告,本机已核验过序号 > 0 时报 pointer_sequence_missing。不引入过期时间,issuedAt 陈旧只由 tansr doctor 呈现封套年龄(超 90 天提示行;JSON 新增可选 updateSource 段)。迁移:无需动作;分发点合法重建序号时删除 update-state.json 即重置本机水位。
  • tansr bg kill 先核对运行器身份再动作:后台任务记录新增运行器身份(本机端点 + 随机令牌,令牌恒不出现在 bg list / show / --json);相符 → 停止请求 → 宽限 5 s → 复核后才强杀,--json 多 stopped: graceful | exited | forced;pid 被复用的陌生进程 / 端点不可达 → 显示 stale、拒杀、退出码 1 并携 runner_identity_mismatch | runner_unreachable | runner_identity_unverifiable。--force 只对无身份块的旧记录与端点不可达两态生效,身份不符恒拒杀。迁移:升级前发起、无身份块的旧记录一律拒杀(bg list 仍按 pid 展示),需要时用操作系统手段结束。
  • 权限引擎对 Shell 命令的判定收紧:bash -c / eval / iex / powershell -Command 等嵌套载荷先还原为内层命令再判定(此前几例会询问的高危样本改为直接拒绝);工作区外的目录列举(ls .. / ls /etc / tree ~ / du ../x)不再自动放行、改为询问;WebFetch 跨主机跳转落在需询问的域时不再静默跟随,而是提示模型改走正常询问。命令词法随平台(Windows 按 PowerShell,其余按 POSIX)。迁移:依赖工作区外 ls 零询问的脚本请补 allow 规则。
  • 工作区信任按真实路径判定:trust.json 记录按真实路径归一,别名 / junction 路径与真实路径各查一次,任一命中「不信任」即不信任;启动目录上溯最近含 .tansr/ 的祖先作为配置锚,锚或其祖先不信任时项目层 hooks 恒不执行(旗标压不过)。已知边界:网络盘(UNC)路径的旧记录需重新授信;junction 落在未授信目录下时 TUI 每次再问。
  • 无人值守入口(headless / serve / acp)的项目层 MCP 服务器与插件改为认 TUI 落盘的授信记录,顺序为:落盘拒绝(按定义指纹匹配)> 落盘允许 > TANSR_TRUST_PROJECT_MCP=1 / TANSR_TRUST_PROJECT_PLUGINS=1 仅在无记录或指纹失配时放行 > 待授信;MCP 定义变化视为失配。迁移:此前只靠环境变量越过落盘拒绝的部署自此被拒,请在 TUI 重新授信或删除该拒绝记录。tansr acp 的插件发现 / 授信 / 验签 / hooks 合并与其他入口共用一套,未授信插件零加载、提示走 stderr(stdout 只写协议帧)。
  • 工具入参在执行前由调度器按工具的 inputSchema 统一校验:坏参以 tool.failed { errorType: 'invalid_args' } 回喂模型,不进执行、不触发权限裁决、不计费;校验只作门,权限裁决与工具看到的仍是模型原参。tansr mcp-serve 面同样处理。迁移:按 tool.completed.isError 识别坏参的日志 / 渲染改看 tool.failed。
  • 五个入口(TUI / headless / acp / mcp-serve / serve)统一处理 SIGINT / SIGTERM / SIGHUP / SIGBREAK:首枚信号触发一次幂等有界收口(TUI 10 s;serve 为 drain 预算 + 15 s),预算到点在 stderr 留一行 process.hard_exit 后以退出码 2 退出;第二枚信号立即退出码 2;SIGHUP 独立紧急预算 ≤ 3 s。迁移:依赖「第二枚 Ctrl+C 无效、必等 drain」的脚本改为只发一枚或等待退出码 2。
  • TUI Ctrl+C 双击语义:运行中一枚 = 中断本轮并提示,空闲一枚 = 提示,1.5 s 内两枚 = 同 /quit;SIGTERM / SIGHUP 到来时在飞轮紧急封口(已流出文本作 partialText 留档、不伪造轮末、resume 自动跳过);bracketed paste 在任何退出路径(含未捕获异常)先复位再退出。无需迁移。
  • hooks 子进程超时 / 中止时整棵进程树一起结束(POSIX 按进程组,Windows taskkill /T),1 s 宽限后复核;插件 / 策略束归档解压上限 64 MiB / 10,000 条,越界以 archive_too_large 拒解;设备码登录的轮询间隔钳到 ≤ 60 s、有效期 ≤ 1800 s。
  • tansr serve 每轮墙钟缺省 30 分钟:TANSR_SERVE_TURN_WALL_CLOCK_MS 缺席 = 1 800 000 ms,显式 0 = 停用;停机 closeAll 有界 5 s。单轮预期超过 30 分钟的部署需显式设更大值或 0。serve 面其余变更(SSE 有界写、/v2 seq 单调与真值 lastSeq、存储告警出线、会话级预算跨重启、音频面上游错误归一 503)见 @tansr/serve 0.9.0 发布说明。
  • 会话卷里模型不可见的未知内部记录不再让整卷报 JOURNAL_CORRUPTED:--resume / tansr sessions / serve 读到时记录留档原位、不进消息,以 unknownKinds 与一条警告上报;模型可见的未知记录仍拒读(detail.reason = 'unknown_kind_model_visible')。
  • tansr logout 不分凭据版本一律清除配置根 bundle-cache/*.json(含其他应用键档的缓存)与活动身份仓 bundle-cache.json;缓存恒可重建,重登首拉即复原,会话 / 记忆等身份仓数据不删。
  • 单文件可执行版自更新换装先 fsync 再 rename;换装成功后同名可执行的历史备份 <exe>.old-<版本> 只保留本次这一份,更早的自动修剪。
  • tansr doctor 恒只读:会话存储可写性探针不再创建 sessions/ 目录,改在最近已存在的祖先目录写后即删;存储根被文件占位仍如实报 session_store_unwritable。
  • 命令行主束更小(发布束 3.95 MB → 3.78 MB),用户可见行为零变化。
  • credentials.json、bundle 缓存、init-state 指针改为原子写(同目录临时文件 + fsync + rename):登录 / 派生键轮换 / 缓存刷新途中断电或进程被杀,文件要么是旧的完整档要么是新的完整档,不再出现读取报 parse_failed 的半截档。bundle 缓存按 0600 落盘(Windows 上权限位无效,保护依赖用户目录 ACL)。
  • 凭据解密单点:远程装配与裁决人池共享同一进程内凭据读取器,一次启动只解密一次;Windows DPAPI 档(PAT + 派生键)合并为单次 powershell.exe 冷启。凭据文件被另一进程 login / logout 改写后自动重读。

本版 npm 包(@tansr/cli 0.7.0)已于 2026-09-14 与 @tansr/sdk 0.14.0、@tansr/serve 0.9.0、@tansr/api-client 0.2.0 同批发布;四包均可从官方 registry 独立安装。行为收紧项(权限判定、工作区信任、无人值守入口的授信记录)以 minor 版本标明。项目层 hooks 信任门的判据、边界与 SDK 侧对应选项见「安全与隐私」页。

  • 任务执行中可追加文本要求:TUI 补充入口、ACP 扩展与 headless 控制帧共用同一目标轮;不隐式中断或另开一轮。
  • 退出观察覆盖查询、MCP、子任务与记忆工作的真实收尾;业务终态不再被当作资源完成。
  • tansr serve --v2(或环境变量 TANSR_SERVE_V2=1)可显式开启 /v2 接口面;默认关闭,行为不变。/healthz 与 /readyz 探针始终可用。
  • doctor 输出新增「被忽略的配置段」逐条提示、沙箱 env 归因行,并显示 http.allowedAuthEnvVars 的生效来源(用户层 / 托管层 / 组织远程下发)。
  • npm 包与单文件可执行版随附 NOTICE(内联第三方依赖的名称、版本与许可全文)。
  • acp 的 session/new / session/load 工作目录改经统一策略闸,被拒时返回 JSON-RPC -32602,data.code 为 cwd_unavailable 并附原因。
  • 每个子命令都有自己的帮助:tansr <命令> --help 打印该命令的用途、旗标表与示例(如 tansr serve --help);tansr --help 的命令列表补齐全部 16 个子命令。旧用法不变。
  • 平台系统提示词在下一显式新轮前刷新;轮内追加保持当前提示词快照、权限与预算。
  • 出网请求(WebFetch / Http / hooks / 音频下载)统一经一处出口,并在 DNS 解析后拦截私网、环回与链路本地地址:指向内网或云元数据地址的抓取会被拒绝并给出原因。
  • Http 工具与 hooks 的 auth 只能引用 ~/.tansr/settings 中 http.allowedAuthEnvVars 名单内的环境变量;名单外不再发请求(错误码 auth_env_not_allowed)。迁移:把原先在 auth 里引用的变量名加进该名单;该段只在用户层生效,项目层写入会被忽略。
  • 携带凭据的 Http 调用在所有权限模式下都会征求确认,不再被 auto / acceptEdits / bypass 放行;确认卡新增「安全层」理由行。
  • 未接入确认通道、且令牌档裁决人未授予资格档的宿主(acp / mcp-serve 令牌档),工作区内的写 / 删不再自动放行,改为征求确认(无通道即拒绝)。要保留放行,请为应用授予资格档或接入确认通道。
  • tansr update 只接受 https 绝对地址的 update.manifestUrl,且产物地址须与 manifest 同源;项目层的 update.manifestUrl 不再生效。未签名产物默认拒绝安装,--allow-unsigned 需二次确认。
  • 更新分发改读带签名的版本指针 sea/latest.json,每个版本独立目录、保留最近 6 版;旧的扁平布局仍兼容一版。
  • sandbox / update 两个配置段只在用户层生效,项目层写入会被忽略并在 doctor 中提示;沙箱 env 只能收紧,不能放宽。
  • /cd 之后,hooks、权限门、执行器、沙箱写边界与快照全部跟随新目录(此前有部分仍沿用启动时的目录)。
  • tansr bg show / tansr bg kill 的 id 须为完整形 bg-<n>-<nnnn>,旧短形 bg-1 不再接受。
  • 图像 / 语音 / 视频 / 转写四类媒体工具超时或供应商失败时统一按「工具失败」呈现,超时提示改为「可能仍会完成并计费」;错误提示按使用者受众给出,未知错误码回落通用指引。
  • mcp-serve 的工具调用在执行前后各做一次提权检查,沙箱旁路、直接携带或 hook 注入三种越权形一律拒绝(escalation_denied)。
  • 会话锁在持锁进程存活期间不再被抢占;只读操作不再清理他人的锁。
  • 异步收束边界收到的新输入不会被漏掉;注入上限不会把未进入历史的文本误记为已消费。
  • 读取图片改按当前模型的能力判定:支持图片输入的模型可正常读取,此前在 serve / acp / SDK 面一律拒绝且提示文案有误(误称「模型不支持」)。
  • 单个损坏的快照不再让整个会话的快照列表报错;快照清理不再误删其他快照。
  • 超过整读上限的大文件改为分页流式读取,不再整读进内存。
  • 四个宿主入口(serve / acp / mcp-serve / headless)对未处理的 Promise 拒绝有了统一兜底,不再静默吞掉或直接崩溃。
  • 套餐配额被拒时,错误会明确标注为套餐范围(detail.scope = 'plan'),便于端上区分处理。
  • 机器放行的工具调用也会记录到审计事件流(此前只记录拒绝)。

本版 npm 包已发布,包含此前未单独发布的 0.5.0 候选能力。单文件可执行版与移动端安装包的发布、签名和真机验收另行确认。

历史候选,未单独发布;相关能力与兼容变化并入 0.6.0,请参阅该版说明。

  • 会话持久化:会话可保存、恢复与分叉。
  • 权限裁决姿态:令牌档默认装配平台裁决人,由是否接入确认通道决定「人在环」或「无人值守」姿态。
  • 音频模态与媒体能力内核化:语音、转写等媒体工具可用。
  • 套餐(plan)信息在端上可见。
  • MCP 重连契约升级(v0.21–v0.24)。
  • 示例项目 electron-chat / token-server 补齐 MIT 许可声明。
  • 思考过程分上下半场在端侧呈现。
  • 呈现档位与运行中动态切换。
  • 媒体任务异步执行。
  • 上下文提醒(reminder)机制。
  • 随 @tansr/serve 0.2.0 发版:serve 出流不再包含 reminder 帧。
  • 0.2.3(2026-08-28):fast 系模型动态供给,切换模型后自动跟随。
  • 0.2.3(2026-08-28):记忆治理与缓存优化;重试过程可见,失败影响范围收敛;上游计数虚报哨兵;幂等冲突(409)自愈。
  • 0.2.2(2026-08-25):降档守卫口径校准(记忆 / 压缩辅助面成本修正)。
  • 0.2.1(2026-08-23):版本号更新;0.2.0 未实际分发即被本版接替。
  • 0.2.3(2026-08-28):Windows PowerShell 5.1 下 TUI 三处显示修复。
工程变更原文(CHANGELOG)

以下为工程变更原文,逐字取自包内 CHANGELOG(面向贡献者,含内部编号);仅标题层级整体下调两级,指向源码仓内文件的相对链接改为纯文本路径。

发版门(scripts/release/gate.mjs --package cli,十王修案 FX-C-25)③ 步要求:每个发布版本在此有 ## <version> 段且段体非空; cli 为 bin 包,④ 步导出集判 n/a;⑤ 步 tag 形 v<version>(沿用既有 v0.1.0 … v0.4.0);发版回执落 doc/release/cli-<version>.md;无回执无 tag。 版本号 = 仓根 package.json(packages/cli/package.json 为 private 占位;pack-npm / pack-sea / sync-recipes 同源)。 0.4.0 及更早版本为追溯登记(当时无本文件;本文件由十王修案第五波 C-γ「CHANGELOG 三包就位」建立,不发版)。

面向 tansr 命令行使用者与宿主运维方(TUI / serve / acp / mcp-serve / bg / update / doctor)的可见变更登记;@tansr/sdk / @tansr/serve 库面见 packages/sdk/CHANGELOG.md / packages/server/CHANGELOG.md,kernel 内部改动不入此表。每条写「变了什么 · 对你意味着什么 · 迁移方式」并括注卡号(FX-X-nn)与波次(W1–W4);事实源 = 各波收编回执 doc/report/十王修案-W{1,2,3,4}-收编回执-*.md §一与泳道终报。 0.2.0 之前的历史见 git(git log -- packages/cli)。

  • 内置 Serve 更新至本次主线修复集合:首次设备绑定、业务工具受控输出及原超时、统一错误语义、材料结算后的检查点恢复。通过 tansr serve 消费同一修复;无新增 CLI 命令、旗标或 ACP 协议。
  • 随本次冻结主线重新构建 npm CLI 与 SEA;平台资产及正式发布状态以 REL-FULL-20261010 回执为准。当前 persistence 开发分支的未合入工作不在本版。

「0.15.0 车」(REL-0.15.0;UAPI 方案 §0 D51,用户 2026-10-06 18:33「发车」;发布状态以 doc/release/cli-0.10.2.md 回执为准;git tag v0.10.2 本地留档不推,D24)。版本序列 v0.10.1 +1 patch:packages/cli/src 零改动——tansr serve 内嵌 @tansr/serve 0.15.0,其两个新环境旋钮经 SERVE_RUNTIME_ENV 表整表展开流入 startServer(run-serve-entry.ts 既有路径),无新命令 / 子命令 / 输出面(D32 口径 patch)。仓根 package.json bump 同笔 pnpm release:sync-recipes --write。

  • tansr serve --v2 可用 TANSR_SERVE_LEGACY_PREFIX=readwrite|readonly|off(缺省 readwrite)与 TANSR_SERVE_LEGACY_SUNSET=<HTTP-date | ISO-8601> 控制旧 /v2 /v3/* 前缀的退役窗口(语义见 packages/server/CHANGELOG.md 0.15.0 段);非 --v2 启动时这两键按既有律出现在「legacy 组未生效」提示里。本版缺省行为与 0.10.1 相同;门面在场时旧前缀响应多出 Deprecation / Link(可选 Sunset)头。对你意味着:升级无需动作;打算在 0.16.0(缺省 readonly)前演练的宿主可先设 readonly 并看 api.legacy_prefix_rejected。迁移:无。

「0.14.0 批」(USDK-11;UAPI 方案 §0 D23 / D32,冻结 2026-10-04;发布状态以 doc/release/cli-0.10.1.md 回执为准;git tag v0.10.1 本地留档不推,D24)。版本序列:v0.10.0(2026-10-02)+1 patch——29a21769.. 的 packages/cli/src 差量为六个文件(本段四条),均为修复 / 启动性能 / 启动路径拆函数 / 废弃告警,无新命令、子命令或输出面(D32 一键前复核);tansr serve 内嵌 @tansr/serve 0.14.0(packages/server/CHANGELOG.md 0.14.0 段),其 leaseMs 下限收紧只影响库面装配,tansr serve --v2 生产路径零变化。仓根 package.json bump 同笔 pnpm release:sync-recipes --write(recipes/ci 钉 @tansr/cli@0.10.1)。

  • 启动编译缓存(PERF-01 (a);源 packages/cli/src/entry.ts · startup/compile-cache.ts,构建 build/config.mjs esm 档入口改指 entry.ts):npm 包形态的 tansr 在加载任何业务模块之前先调用 Node module.enableCompileCache(<用户缓存目录>/tansr/compile-cache)(win32 %LOCALAPPDATA%、macOS ~/Library/Caches、Linux $XDG_CACHE_HOME / ~/.cache;设 TANSR_USER_HOME 时落 <TANSR_USER_HOME>/.cache/tansr/compile-cache),再 await import 原 main——esbuild splitting 下 main 成为动态分块,整张静态导入图的 V8 编译产物都能命中缓存。TANSR_COMPILE_CACHE=<dir> 改目录、=0 关闭;失效交给 Node(按 Node 版本分子目录、按源哈希),不自管清理;SEA 单文件档入口不变、不启用;任何失败(不可写 / 磁盘满 / 旧 Node)静默跳过、不改退出码与输出。对你意味着:每个新安装版本首次启动多写约 2 MB、数十个文件到用户缓存目录(用户手册 §2.4 披露),之后同版本启动更快;旧版本缓存不自动删,可整目录清。tansr doctor 状态行本卡未加(可选项,未动)。pnpm bench:startup 新增 TANSR_BENCH_COMPILE_CACHE_RESET=1(逐样本清缓存,测「首跑」态)。迁移:无;要恢复旧行为设 TANSR_COMPILE_CACHE=0。读数与 300 ms 门结论见 doc/report/PERF-01-AB-代码缓存与32KiB常数项-2026-10-03.md(本条不改写 0.10.0 段的红数)。正式读数(2026-10-03 空闲窗口同窗 A/B):热缓存 TUI 组中位三轮 304 ms(P50 304 / P95 362;三组,基线 360 / 360 / 368)、313 ms(P50 308 / P95 328;两组,基线 main 376 / 372 / 386)、322 ms(P50 323 / P95 369;三组,窗内负载最高),相对同窗基线 −56 ~ −63 ms,仍未过 300 ms 门(差 4–22 ms);首跑(建缓存)态比基线慢 30–60 ms,cold --version 两态 129–168 ms(< 800 绿)。正式测量(2026-10-04 09:11–09:45,D30 空闲窗口,主线独立检出基线 64df76b2 与候选 b53c02e5 同窗交替三组取中位;doc/report/PERF-01-正式测量-2026-10-04.md §3):候选热缓存缺省态 TUI 287 ms(296 / 287 / 286;同窗基线 293)< 300 ms 过门;首跑(建缓存)361 ms、TANSR_COMPILE_CACHE=0 348 ms 为披露项;cold --version 120–133 ms。USDK-08 据此关闭(验收单 v0.70);阈值未改、ready 未前移、Electron 完整 SDK 未裁剪。
  • TUI 首帧之后再加载 marked(PERF-01 (a2);源 packages/tui/src/render/markdown.ts · render/components/transcript-static.tsx · render/components/live-region.tsx,packages/cli/src/tui/run-tui-entry.ts 拆出 resolveEntryTheme / scheduleDeferredRenderWarmups):marked 规则正则编译(≈ 7 ms,USDK-08 读数)从 @tansr/tui 模块装载期挪到 ink 首帧之后的下一轮事件循环(setImmediate 预热);词法器未就绪时 markdown 按纯文本行回退、不写渲染缓存,就绪瞬间重渲一次,<Static> 历史区只放行首个需要词法器的条目之前的前缀、就绪后补写其余且不重复;词法器加载失败(惰性块缺失 / 损坏)同样视作落定——<Static> 条目按纯文本放行、正文不静默消失,渲染路径此后不逐帧重试 import(主线收编补,泳道版会永久扣住含 markdown 的定稿条目);ready 探针位置不动(仍在核心装配与完整渲染模块双屏障之后),yoga 不延后、Electron 完整 SDK 不裁。产物形态:CLI ESM 档(splitting: true)多出与入口同层的惰性块 tansr-marked.esm-<hash>.mjs(≈ 42 KB,随 tansr-artifacts.json 登记);SEA 单文件档与 tansrd.mjs 为同文件延迟求值,仍单文件。对你意味着:--resume 带 markdown 历史的首帧可能晚一轮事件循环才写出 markdown 条目(≈ 10 ms 级),其余不可见;读数见 doc/report/PERF-01-CD-耐久点合并与冷恢复加法-2026-10-03.md(正式测量待空闲窗口,300 ms 门结论不在本条改口)。迁移:无。
  • tansr serve --legacy-v1 / TANSR_SERVE_LEGACY_V1=1 标废弃(UAPI-01 D34,用户授权代拍 2026-10-03;源 packages/cli/src/serve/parse-args.ts · run-serve-entry.ts,文案 cli.help.serve.flags.legacy_v1 / cli.serve.v1.legacy_kept):0.13.0 为「接审批凭据投递 POST /v1/approvals/:id/credential 的 --v2 部署」保留的过渡旋钮,其 /api 对应物已随 @tansr/serve 0.14.0 manifest r7 落地——操作 approval.credential.submit(POST /api/approvals/:id/credential,会话域,多租鉴权,拒绝经统一信封 not_found 404 / gone 410 / conflict 409,detail.submitCode 留原 SubmitCode)。本版旋钮保留并仍生效(行为零变),帮助文案与启动通告标「已废弃,1.0.0 移除」,且显式开启时另出一条结构化 warn 日志 server.deprecated_option { option, env, source, deprecatedSince: "0.14.0", removal: "1.0.0", replacement: "approval.credential.submit", replacementPath }(json 日志形态每事件一行;text 形态同形 JSON 行落 stderr);移除与 /v2 /v3/* 同在 1.0.0。tansrd 池实例不再追加 --legacy-v1(POOL_SERVE_FACE_ARGS = ['--v2']),池实例的审批回执上行改走 /api 操作;固定 clientBaseUrl 目标(SDK1-only serve / 无人值守单路由监听器)仍按 RFC-K11 §3.2 原文 /v1 形上行(登记待办)。对你意味着:仍在用 --legacy-v1 的部署本版照常工作但会看到废弃告警;请在 1.0.0 前把审批投递方改到 /api/approvals/:id/credential(Bearer + x-tansr-end-user),其余 /v1 消费改 /api。迁移:tansrd 池部署升级即自动切换;自建投递方按 packages/server/CHANGELOG.md 0.14.0 段迁移。
  • tansr bg kill --force 在 Windows 上的进程身份探针(CLI-WIN-02;源 packages/cli/src/bg/process-identity.ts):探针子进程(Windows PowerShell 5.1 Get-CimInstance Win32_Process)此前让首个 cmdlet 走模块自动发现——自动发现要分析 PSModulePath 上全部模块,GitHub Windows runner 实测 30–60 s、装有大量第三方模块的用户机同病,远超 10 s 探针预算 → 探针恒 null → --force 判「不可核」拒杀(CI Full 37019506279 windows-subset 2/3 RF-10b 用例实证)。现脚本首句显式 Import-Module -Name CimCmdlets,Microsoft.PowerShell.Utility,且探针子进程的 PSModulePath 钉到 %SystemRoot%\System32\WindowsPowerShell\v1.0\Modules(按名导入不可能解析到用户 / 第三方同名模块;其余环境变量原样继承)。与 @tansr/api-client SDK2 工作区 helper(CI-WIN-01,0.3.0 段)同一修法。对你意味着:bg kill --force 的身份核对在模块多的 Windows 机上不再因探针超时被拒;后台运行端启动时的身份登记(spawn.ts)同样受益。wire / 旗标 / 退出码零变化。迁移:无。

已发布(“2026.10 统一 API 发行车”,源码 29a21769,npm @tansr/cli@0.10.0 dist-tag latest;回执 doc/release/cli-0.10.0.md);SEA / OSS 渠道本车不发(D16 P6,另车登记),git tag v0.10.0 留本地未推。版本序列由 S10 执行单核实(既有 v0.1.0 … v0.9.0,+1 minor,0.10.x 未占用);仓根 package.json 版本 bump 同笔须 pnpm release:sync-recipes --write(recipes/ci 钉 CLI 版本)。本段由 REL-PREP-2(2026-10-01)自发行说明草案附录 A.2 落实;原标「随车」的 /v1 下线条目已由主线按 U6-CODE 收编事实(94116d54)回填。

  • tansr serve 面(UAPI-01):--v2 部署自带 /api 统一调用面(GA)与统一头 / 统一错误信封 / 事件包络显式协商 / 发现与会话级围栏;/v1 单租户面在门面在场的部署缺省下线(D14 = B;过渡旋钮 tansr serve --legacy-v1 / TANSR_SERVE_LEGACY_V1=1;接审批凭据投递 POST /v1/approvals/:id/credential 的 --v2 部署在 0.13.0 须显式 --legacy-v1,该操作的 /api 对应物为 0.14.0 前置项;SDK1-only tansr serve 保留 /v1);/v2 /v3/* 退役预告(最早 0.14.0 只读窗口,1.0.0 移除)——全部见 packages/server/CHANGELOG.md 0.13.0 段。对你意味着:以 /v1/status 做健检的脚本改 /healthz /readyz;直接拼 /v2 /v3 的运维脚本在 1.0.0 前改 /api。迁移:deploy/serve*/README.md 与 nginx / k8s 模板同版更新(分片 map 与 location 加 /api;D14 阶段六写区)。
  • 发布物形态:npm 包由单文件改为分块出包,tansrd.mjs 随包(S10 演练 §1:本机重建候选 86 文件,此前 0.9.0 为 5 文件);安装入口 tansr 不变。对你意味着:以 files / 子路径解析 CLI 包内容的消费方(如 Dockerfile 直拷 dist/tansr.mjs)须按新文件表核对;S10 §5.7 独立安装验收重点项。
  • TUI 启动:账号核验与启动模型选择恢复(SDK2-06 f04a5032 / bb157f96;源 packages/cli/src/tui/startup-model.ts · startup-account.ts、文案 cli.tui.startup_model.* / cli.tui.startup_account.*):启动期在线核验当前凭据所属账号并显示(个人 / 组织账号与 id;应用密钥登录只显示公开标识并提示无法凭此核验个人账号;无法核验时提示「若凭据已不属于你的账号,请重新登录」)。默认模型不可用或平台权威目录为空时不再直接退出,进入启动模型选择面:列出可用模型 / 「打开平台模型管理」(给出 URL,须与当前 CLI 同账号,选完返回刷新)/ 「刷新配置并继续」(绕过装配缓存重拉平台配置;失败提示检查网络或平台状态,可重试)/ 「退出」;同一启动内完成,不创建第二平台会话,网络不可达与权威空目录分开处理。同屏可「重新初始化/重新登录」(确认后关闭本次启动进入 init,原有会话按原账号保留)或「退出登录」(logout 在停用原键的网络往返期间复核凭据未变,已换号则拒删并提示重启核验——PerformLogoutOptions.expectedKeyId?)。非 TTY 不等待交互。背景:生产用户旧 model_selection=[] 覆盖默认池致模型数 0(集中交付计划 §24);api 侧个人注册「空播种」缺陷另行修正,CLI 不擅自扩大模型选择。对你意味着:此前「有凭据却零模型 → 启动即退」的死局有了界面内出口;模型选择仅限本次启动(cli.tui.model_selection_session_only 既有语义)。迁移:无。
  • SearchMemory 不再重复咨询 · 取消贯穿裁决(SDK2-09 059f8033;源 packages/cli/src/assembly/memory-archive.ts · permission-gate.ts):TUI 受控情景记忆装配为 SearchMemory 签发原工具对象 / execute / schema / 只读属性 / cwd 资格,仅软化无显式规则时的 mode 兜底 ask(此前同一轮两次 SearchMemory 各落一次 ask,现场 23.1 s 串行裁决,集中计划 §27);显式 deny / ask、硬层、hooks 改参后同源重判、组织禁用不变;仅 TUI 持此装配,SDK / serve 自定义或宿主工具不获此资格。turn 取消自此贯穿 PermissionGate → 分类器(内部 hints signal 贯穿 dispatch、CLI / SDK 门与引擎):物理咨询请求随 Ctrl+C 取消,迟到结果不放行、不缓存、不改熔断,执行器恢复后复验 signal;ACP 门面丢 hints 一并修正。对你意味着:记忆检索场景少两次询问,中断后不再有游离的裁决请求与 hedge;已发送调用预算不伪退回。迁移:无。
  • 启动与请求前开销(USDK-08 fe1454fc a9c1d9f1 9788f79a 09803c1b c943d1fb 2b4d2251;SDK2-09 96e2119b;源 packages/cli/src/main.ts · tui/run-tui-entry.ts · headless/run-headless-entry.ts):按入口加载装配(headless 入口独立文件,main.ts 瘦身;TUI 并行加载核心与 Ink / Yoga 渲染、配置读取期间并行确认仓库身份、读侧装配并行;TUI / headless / acp / mcp-serve 四入口的进程守卫改经 @tansr/serve/process 窄出口;启动期去重复网络与目录装配);76 个 CLI / 10 个 SDK 导入改指 kernel runtime 等同源叶入口(集中计划 §26,原根出口不变);记忆预选 prefetch 改异步;配置 beforeExchange 等待响应调用方取消、已取消请求不发 exchange 不重试;出站层接受可选 signal,Http / WebFetch / hook 在首次 DNS 前建立原 deadline、redirect 沿用(§28;SSRF / socket pin / 权限未放宽)。对你意味着:行为、旗标、输出形零变化,只是更快(数字与仍红的门见本段末「性能与延期披露」)。
  • tansr serve --v2 --host-module <absolute.cjs> --host-module-sha256 <sha256>(SRV-05 / SRV-06 3d3ceba6;源 packages/cli/src/serve/host-module.ts · parse-args.ts;帮助 cli.help.serve.flags.host_module*):运维者显式指定本机绝对路径的 .cjs 受信宿主模块与其原始字节 SHA256(两旗标必须成对,缺一按 missingValue 用法错误退出);入口经同一文件描述符有界读取(≤ 16 MiB)、timingSafeEqual 核摘要后编译已验字节执行(不按文件名 require,避免校验后替换窗口),模块导出 (context) => { agent, authenticate, terminal?, v2?, resources? },context 携 cwd / env / logger / serve / extensions / own()。此径只装配公开平台宿主(createAgentSessionFactory + 可选 terminal / 归档 / 缓存 / 记忆 / 可信扩展),不加载旧 CLI 登录 / provider / 本机工具装配;与原入口共用进程守卫、四信号 / 二次信号与硬退预算;与部署者本机代码同级受信,入口摘要不签署依赖图、不是代码沙箱、不由模型或 HTTP 提供路径(doc/rfc/RFC-SERVE-NET-1-终端增量工具与记忆协议.md「CLI/SEA 显式 serve --v2 --host-module」段)。示例 examples/serve-demo/TRUSTED-HOST.md / TERMINAL-SERVICES.md。对你意味着:不传两旗标 = 0.9.0 行为;SDK2 档案 / 缓存 / 终端服务 / 共享事务 Store 等库面能力(packages/server/CHANGELOG.md 0.13.0 ./extensions 条)在 tansr serve 命令行只经此径可达,tansr serve --v2 本身不自动开启任何一项。迁移:无;自建宿主可从 examples/serve-demo/agent-real.ts 起步。
  • tansr serve 日志与资源旋钮(USDK-06 f2123174 / USDK-08 eceeff0d;SERVE_RUNTIME_ENV 31 → 36 键,packages/server/README.md 旋钮区与 .env.example 由表再生):① 行为变化:引擎日志经 createServeLogger 包装,缺省级别 warn——TANSR_SERVE_LOG_FORMAT=json 部署此前每请求一行的 request.completed、session.created / ended 等 info 事件缺省不再输出,需显式 TANSR_SERVE_LOG_LEVEL=info(或 debug);全部级别同样脱敏 / 有界,每 10 s 窗口每 (level, event, 归因) 组最多 4 条首报、总 64 条,其余以 log.repeated { originalEvent, suppressed } 汇总,组数 > 128 记 log.overflow(deploy/serve-v2/README.md 旋钮表;新事件名 execution.rejected / execution.result 同入 LOG_EVENT);text 形态文案行同受级别与限量约束。② 新旋钮 TANSR_SERVE_SSE_MAX_FRAME_BYTES(单帧 UTF-8 硬帽;SDK2 装配缺省 2 MiB,超界只断该订阅)、TANSR_SERVE_AUTH_MAX_PENDING / TANSR_SERVE_AUTH_TIMEOUT_MS(基础认证源限界;SDK2 装配缺省 128 / 10 s,SDK1-only 缺席零变化)、TANSR_SERVE_LEGACY_V1(见上 UAPI 条)。对你意味着:靠 json 日志 info 事件做请求审计 / 仪表板的部署升级即显式设 TANSR_SERVE_LOG_LEVEL=info 并按 log.repeated 折算计数;其余不设 = 0.9.0 行为。迁移:deploy/serve-v2/.env.example / k8s/serve-v2.yaml 已写入缺省 warn,自管部署件对表补键。
  • 四形态内部接线(无用户可见变化;登记备查):SDK2-02 1d14a7af / 6109abb0 把跨运行捕获 / 材料读取缝(sessionCapture / contextMaterials)接到 TUI / headless / acp / serve 会话工厂——缺省缺席,不新增 CLI 参数或旧协议字段;SRV-01 42224634 / SRV-03 bc51b507 把记忆提取 / 固化 / pending-anchors 本体迁入共享 kernel,CLI 保留原默认宿主与入口(原两叶 84/84 回归);USDK-08 901c8916 附件准入冷恢复在 CLI 侧只有 tansr serve --v2 会话工厂一行透传(packages/cli/src/serve/session-factory.ts 的 extras.attachmentPersistence → 驱动,packages/server/CHANGELOG.md 0.13.0 持久所有权条),TUI / headless --resume 走原 kernel 卷读径、本泳道未见接线;-p --json / acp / mcp-serve 的 wire、旗标与退出码零变化。
  • 性能与延期披露(USDK-08 TUI 300 ms 启动门;用户授权代拍 D12「A 时间盒一轮」→ 到期仍红,转 B):同源 pnpm bench:startup(Windows 原默认构建,1 预热 + 5 进程取中位)最近具名实测 cold 179 ms(门 < 800 ms,过)/ 完整 TUI 544 ms(样本 544 / 556 / 495 / 642 / 512;门 ≤ 300 ms,红)(集中交付计划 §26);更早同源 cold 144 / TUI 524 ms(§25),USDK-10 执行单口径 421~544 ms;并行构建候选 cold 127 / TUI 395 ms 有独立产物哈希、不能冒称最终源(§28)。ready 不前移、Electron 完整 SDK 不裁剪、单文件 npm / SEA 约束保持、阈值不改。S08 时间盒结算(2026-10-01,空闲主机、逐组开测前复核 CPU 五采样 <15%、同窗交替 A/B 三组取组中位,同源 scripts/bench-startup.mjs;报告 doc/report/USDK-08-TUI启动时间盒-2026-10-01.md):基线 36f793cc TUI 组中位 375 ms(P50 377 / P95 412)、本版候选 226cddf2 345 ms(P50 345 / P95 349),cold 两臂 116 ms(过);唯一入提交的优化为构建期惰性化宽度族依赖的 Intl.Segmenter / RGI_Emoji 正则(build/unicode-init-lazy-plugin.mjs,三档同挂;≈35 ms 的 ICU / 正则初始化由模块求值期移至 ink 首帧首次宽度计算,ready 打点未动),TUI −30 ms,距门 45 ms,仍红 → 按 B「功能条件交付 + 明确延期披露」关闭、红数原样入账、另开 PERF-01 承接(阈值不改)——USDK-10 10a 因此在发行后仍不可勾(执行单 §6 / R1),本车发布不改写该红。
  • 移动托管应用可显式启用 WebFetch 与 Http,使用同一核心工具及权限链;工具在开发者 serve 主机执行,缺省关闭。升级后须配置能力并新建或重新装配会话,现存会话不会自动增删工具(MOB-WEB-01 / REL-12)。
  • 托管 Http 禁止使用宿主环境凭据和模型自行开启私网访问;默认文本日志补齐受限审批诊断,超时询问和用户审批规则保持不变。
  • 本轮发布物由已合并修复重新构建,实际 npm 状态以 REL-12 发布回执为准;SEA 独立分发另行记录。

REL-07 汇集已验 MEDIA-03 与 AUDIO-01 主线改动;本次 npm 发布状态以 doc/release/cli-0.8.0.md 回执为准,SEA 分发另行登记。

  • 历史工具媒体产物随会话热/冷存储和 checkpoint 保留,恢复后可重建预览;呈现字段不送入模型。首次写入产物会启用存储版本 2,升级前备份并统一升级同一会话的 writer,回滚旧程序须用原备份或独立目录。
  • TTS 使用厂商原子输入限制与原加权字数双帽,支持显式分段预检和纯空白分段拒绝;新旧客户端按特性声明取得兼容投影,不扩大授权模型上限。
  • CLI / SDK / serve 继续使用同源权限裁决;本轮权限审查与回归没有将正常 ask 放宽为自动许可。

核心组件设计审查整改 RF 波(2026-09-11 … 13)。REL-06 随本次 npm 重新编译发布:权限和授信行为收紧、上下文与会话恢复修正,使用 minor 版本标明行为变化。实际发布状态以 doc/release/cli-0.7.0.md 操作回执为准。

  • 权限引擎 Shell 词法与越界收紧(RF-01 / RF-02a,RV-1;红线语料 v6):Shell 命令词法方言随平台(win32 → powershell,其余 posix;detectHostShell() 与实际派生的 shell 同源),bash -c / eval / iex / powershell -Command 等嵌套载荷再词法化后按内层命令裁决(4 例此前 ask 的红线样本改 deny);工作区外 listing(ls .. / ls /etc / tree ~ / du ../x)不再 R0 放行、回落 ask(与 List / Glob 的工作区包含纪律对齐,有意收紧:default 模式下多一次询问);WebFetch 跨主机跳转落 ask 域时不静默跟随,以 isError 提示模型改走正常询问面。迁移:依赖工作区外 ls 零询问的脚本请加 allow 规则。

  • 项目层 hooks 信任门(RF-02b,DEC-RF-13 / 14;RV-2-01):工作区 .tansr/settings.json / settings.local.json 声明的 command / http hooks 在工作区信任为 unknown / untrusted 时不执行(零 hook.* 事件;user / managed 层照常;prompt 型 hook 抽取期丢弃)。新旗标 --trust-project-hooks 与 TANSR_TRUST_PROJECT_HOOKS=1 仅对 unknown 生效、不写 trust.json、不可越 untrusted;TUI 只认 env(旗标不解析),对话框授信后 SessionStart 项目层补发一次;插件 hooks 按 per-plugin 授信豁免本门。${VAR} 字面量原样不拒发。迁移:CI / headless 跑项目层 hooks 的作业显式加旗标或 env。

  • 工作区信任裁决按真实路径 + 配置锚(RF-02d,DEC-RF-53 同律):trust.json 键按 realpath 归一,别名 / junction 路径与真实路径链各扫一次,别名链命中 untrusted 恒胜;配置锚(最近含 .tansr/ 的祖先,家目录不作锚)或其祖先 untrusted → 项目层 hooks 恒关(旗标不可越);仅经归一得来的 trusted 还须锚覆盖,堵「junction 落在未授信目录下借真实路径记录放行」。-w <dir> 在 chdir 重绑后裁决(结构锁)。已知边界:网络盘 UNC 键需重授信;junction 落未授信目录下 TUI 每次再问。

  • 非交互面 MCP / 插件认落盘授信记录(RF-02e,DEC-RF-53):serve / acp / headless 的项目层 MCP 服务器与插件改为与 hooks 门同一套裁决——键 canonical(projectPath)|name,序 落盘 deny(指纹匹配)> 落盘 allow > env=1 仅在无记录 / 失配时放行 > pending;旧字面路径键只认 deny(旧拒绝不失效、旧放行不借用);MCP 定义面漂移视为失配。mcp serve 零消费。迁移:此前只靠 TANSR_TRUST_PROJECT_MCP=1 越过落盘 deny 的部署自此被拒,需在 TUI 重新授信或删除该 deny 记录。

  • 工具入参由调度器中央校验(RF-08b / RF-08b1,DEC-RF-12 / 18;RF-10b SC-15):每次工具调用在 unknown_tool 之后、权限门之前按 inputSchema 校验,坏参以 tool.failed { errorType: 'invalid_args' } 回喂模型,不进执行、不触发裁决、不计费;校验只作门,裁决 / journal / 执行见到的仍是模型原参对象;诊断有界(20 条 issue / ~2 KB)。MCP 桥与 /v2 客户端申报工具 argsValidation: 'remote' 原参透传。tansr mcp-serve 面坏参同门,指标标签 invalid_args / unknown_tool。迁移:按 tool.completed.isError 识别坏参的日志 / 渲染改看 tool.failed。

  • 四入口装配管线统一(RF-08c,DEC-RF-33;§2.8 装配矩阵):TUI / headless / serve / acp 全部经 assembly/assemble-session.ts 同一管线产出审计 / hooks / 预算闸 / spill / checkpoints / context-events / decisions;serve 与 acp 自此补齐工具结果超帽 spill/ 外置、压缩前 pre_compaction 检查点(--checkpoints-dir / TANSR_CHECKPOINTS_DIR 同效)与 session.checkpointed;serve 新旋钮 TANSR_SERVE_HOST_SHELL=posix|powershell(缺省随平台)。无需迁移。

  • ACP 插件接入过授信门(RF-08d,#6 代拍 A;DEC-RF-48):tansr acp 的插件发现 / 授信 / 验签 / hooks 合并经 assembleHostPlugins 一处(不为 ACP 写第二份装配),project 层非交互面只认 TANSR_TRUST_PROJECT_PLUGINS=1(不读 plugin-trust.json),未授信插件零加载并以既有 cli.plugins.*_untrusted 提示走 stderr(stdout 只写协议帧)。ACP 协议面「插件未授信」结构化呈现需 _meta 扩展,登记候选。

  • TUI 会话驱动显式状态机(RF-08e,DEC-RF-27):SessionDriver 的运行 / 空闲 / 收口迁移改为表驱动纯函数(session-driver-state.ts),以录制的迁移表夹具锁形态——行为零变化;idle_op 在直压期的拒绝理由沿用 turn_running 字面(RFC 候选登记)。

  • hooks 子进程整树击杀 · 归档解压上限 · 设备码节流(RF-10,DEC-RF-11;RF-10b):hook 超时 / 中止时按进程组(POSIX detached)/ taskkill /T(Windows)整树结束,killTracked 1 s 宽限后复核;插件 / 策略束归档解压上限 64 MiB / 10,000 条,越界 archive_too_large 拒解;设备码轮询 interval 钳 ≤ 60 s、expires_in ≤ 1800 s(四语提示)。tansr bg kill --force 只对 legacy(无身份块旧记录)/ unreachable 两态生效,身份 mismatch 恒拒杀;运行器身份由启动时自探自写(后台任务启动 +0.5–0.7 s)。

  • 会话预算闸五形态同形 + 思考 token 逐行归账(RF-P3a,DEC-RF-23 / 29;RFC-RF-3 阶段 2):配置 budget { maxUsd?, maxTotalTokens?, onExceeded?: 'block' | 'warn' } 段自此在 TUI / headless / serve / acp / SDK 走同一 kernel 闸门——触顶 'block'(缺省)在下一次模型调用前终止本轮(turn.aborted { reason: 'budget_exceeded' },会话保持打开),'warn' 每轮至多一条 turn.error { scope: 'budget', recoverable: true };maxTotalTokens = 输入 + 输出 + 缓存读 + 缓存写,思考 token 按每一行 (provider, model) 的 providers 内置能力位 quirks.reasoningTokens 处置('separate' 行并入输出计量与计价;缺席 / 'subset_of_output' 不叠加),当前内置表零 'separate' 行 → 已部署会话数值零变化。maxUsd 只对 USD 计价模型出数。

  • 无预算会话也落用量轨迹(v2 快照)(RF-P3b,DEC-RF-46 / 28):-p / TUI / serve / acp 会话每轮末在会话卷落一条 kind:'event' internal usage_snapshot v2 记录(reasoningAccounting: 'per_row' + byModel{ input, output, reasoning?, usdNano } 分桶;有新入账才写),--resume 回读续算;v1 卷原样读回、旧读者可读;tansr sessions / doctor 呈现 byModel 登记候选。serve 带预算卷 history 分页快路随之闭合(见 packages/server/CHANGELOG.md)。

  • 会话卷读者对未知 internal 记录容忍(RF-J1,RFC-RF-2 版本门 C;DEC-RF-21 / 22):--resume / sessions / serve 四读径遇 visibility.model=false 的未知 kind 记录不再整卷 JOURNAL_CORRUPTED——记录留档原位、参与哈希链、游标可落、不进 messages,以 unknownKinds + warning 上报;model 可见的未知 kind 仍拒读(JOURNAL_CORRUPTED + detail { reason: 'unknown_kind_model_visible', kind, line },不新增错误码)。预算恢复对未知快照 fail-open 从 0 起算(非合规面)。为未来任何 kind 加法(不限 usage)铺地板;一等 JournalKind 'usage' 维持缓议。

  • tansr serve 面(RF-05a / RF-05b / RF-S1 / RF-06b / RF-08c):SSE 每次写有界分片、/v2 seq 会话内单调 + 封印水位、非活跃会话 lastSeq 真值、店告警 store.error warn 级出线、会话级预算跨重启、音频面上游错误归一 503 upstream_unavailable——全部见 packages/server/CHANGELOG.md 0.9.0 段。

  • 束体积 −10.65%(RF-11,DEC-RF-19;RF-Z ⑪–⑬ 守卫加固):dev 束 dist/tansr.mjs 8,386,752 → 7,493,801 B(守卫 99.98% → 89.33%),release 3,950,192 → 3,778,260,tansrd.mjs 3,919,462 → 3,419,308——手段:React 族 production define、JSON 资产 JSON.parse 形态(构建期对 -0 / 非有限数往返例外显式抛错)、undici 门面(版本钉 8.10.0 + 成员级锚 + 只认静态 ESM 导入且拒第三方 importer)、i18n 目录形态;体积帽 8,388,608 B 与守卫脚本未动。用户可见行为零变化;React 开发版告警链接不再出现在束内(egress 豁免表随改口)。

  • RF-Z 发版准备(历史阶段)(DEC-RF-24):@tansr/sdk 0.14.0 / @tansr/serve 0.9.0 / @tansr/api-client 0.2.0 版本号落 package.json、CHANGELOG 候选段转正标「未发布」,api-client 纳入 release-packages.mjs 登记表 + 首份 exports.snapshot.json(35 项);当时仅准备候选,发布动作等待主线同 SHA 远端 CI 绿(RF-CI)。工程卫生:Windows 发布链 / 夹具 tar 钉 System32 bsdtar(Git Bash GNU tar 抢 PATH 不再假红);packages/providers 补包级 test;根脚本 i18n:catalogs:check;SDK Narrator turn.error{recoverable:true} 文案不再承诺 you can retry;bg 运行器 .sock 后缀单源。cli 版本号不在原 DEC-RF-24 范围;本轮 REL-06 已按用户 npm 发版授权采用 0.7.0。

  • REL-06 npm 已发布:同一源码 f6b9680b 的普通 CI 34781507522(3/3)与 Full 34781507521(13/13)成功后,原发布器完成 SDK 0.14.0、serve 0.9.0、CLI 0.7.0、api-client 0.2.0 的 dry-run 与正式发布。2026-09-13 21:08:39 UTC 四版本和 latest 均公开可见,远端归档与正式 attempt 封存包逐字节一致。serve/CLI 的首次 PUT 返回 202,npm 提示仍在处理;约四分钟后元数据自然可见,未重复发布。实际操作见 CLI 回执(doc/release/cli-0.7.0.md)及 四包发布登记(doc/release/README.md)。随后四包从官方 registry 独立安装消费通过(三库严格 NodeNext 声明、原 npm 六组与 ACP 九组、api-client ESM/models 请求),见公开消费验收(doc/release/REL-06-npm公开发布验收-2026-09-14.md)。demo 同步与 Android 发布按各自验收登记,不由 npm 成功代替。

  • 五入口进程生命周期统一(RF-03,RV-5-02 / RV-4-03):TUI / headless / acp / mcp-serve / serve 全部经共享组件 assembly/process-lifecycle.ts 处理 SIGINT / SIGTERM / SIGHUP / SIGBREAK——首枚信号触发一次幂等有界收口(headless / acp / mcp-serve 沿各自既有预算;TUI 10 s;serve drainTimeoutMs + 15 s),预算到点在 stderr 留一行结构化 process.hard_exit 后 exit 2;第二枚信号立即 exit 2(此前 acp / mcp-serve 第二枚被吞、headless 只认 SIGINT、TUI 对 TERM / HUP 零处理);SIGHUP 独立紧急预算 ≤ 3 s。退出码统一取 exit-code.ts 表(2 = 中断 / 外部信号 / 停机;TUI 未捕获异常仍为 1)。迁移:依赖「第二枚 Ctrl+C 无效、必等 drain」的脚本请改为只发一枚或等待退出码 2。

  • TUI Ctrl+C 与终端复位(RF-03,RV-5-07):Ctrl+C 自管双击语义——运行中一枚 = 中断本轮并提示,空闲一枚 = 提示,1.5 s 窗内二枚 = 同 /quit(ink exitOnCtrlC 关闭,signal-exit 退为兜底);SIGTERM / SIGHUP 到来时在飞轮以 emergency_seal 内部记录幂等紧急封口(已流出文本作 partialText 留档、不伪造轮末、resume 自动跳过),随既有收口链释放 MCP 子进程与会话锁;bracketed paste 在任何退出路径(含未捕获异常)先复位再退出。无需迁移。

  • tansr bg kill 身份核对(RF-03,RV-5-01):后台任务记录新增运行器身份(本机 IPC 端点 + 发车端随机令牌,令牌恒不出现在 bg list / show / --json 输出);bg kill 先核身份再动作——相符 → 停止请求(POSIX SIGTERM / Windows 端点 stop)→ 宽限 5 s → 复核后才 KILL,--json 多 stopped: graceful | exited | forced;pid 被复用的陌生进程 / 端点不可达 → 显示 stale、拒杀、退出码 1 携 runner_identity_mismatch | runner_unreachable | runner_identity_unverifiable。迁移:升级前发起、无身份块的旧记录 bg kill 一律拒杀(bg list 仍按 pid 展示),需要时用 OS 手段结束;bg 热路径不再派生 PowerShell。

  • tansr serve 每轮墙钟缺省 30 min(RF-03,§3 代拍 #9 = A):TANSR_SERVE_TURN_WALL_CLOCK_MS 缺席 = 1 800 000 ms,显式 0 = 停用;停机 closeAll 有界 5 s(server.close_timeout warn 后继续)。详见 packages/server/CHANGELOG.md。

  • 关键状态文件原子写(RF-07,RV-5-05):credentials.json(v2 / v3)、bundle 缓存、init-state 指针改为「同目录临时文件 + fsync + rename」——登录 / 派生键轮换 / 缓存刷新途中断电或进程被杀,文件要么是旧的完整档要么是新的完整档,不再出现读取报 parse_failed 的半截档。bundle 缓存文件按 0600 落盘(Windows 上权限位无效,文件保护依赖用户目录 ACL,与凭据档同口径)。无迁移动作。

  • 凭据解密单点(RF-07,RV-5-09):远程装配与裁决人池共享同一进程内凭据读取器,一次启动只解密一次;Windows DPAPI 档(PAT + 派生键)合并为单次 powershell.exe 冷启(此前每处消费方各起一到两次)。行为不变,启动更快;凭据文件被改写(另一进程 login / logout)后自动重读。

  • tansr logout 连清 bundle 缓存(RF-07,RV-5-10;行为变化):此前只有 v2 应用键档登出会清该键缓存,v3(PAT + 派生键)档登出后远端组织配置缓存留在磁盘;现在不分版本一律清除配置根 bundle-cache/*.json(含其他 v2 档案簿键的缓存)与活动身份仓 bundle-cache.json。缓存恒可重建,重登首拉即复原;会话 / 记忆等身份仓数据仍不删。

  • SEA 自更新换装耐久 + 备份只留 1 份(RF-07,RV-5-06 fsync / 备份部分):staging 写后先 fsync 再进入 rename 换装;换装成功后同名可执行的历史备份 <exe>.old-<版本> 只保留本次这一份(更早的自动修剪,不同名文件不触及)。此前每次升级多留一份旧档。

  • tansr doctor 只读(RF-07,RV-5-10):会话存储可写性探针不再 mkdir -p sessions/——改在最近已存在的祖先目录写后即删;doctor 不再创建任何目录,存储根被文件占位仍如实报 session_store_unwritable。

  • 更新签名指针单调序号(防回放)(RF-07b,RV-5-06 时效性;代拍 #7 结论 B⁺):官方 SEA 签名指针在被签的指针体内新增加法字段 sequence(每通道单调)与信息性 issuedAt;客户端在 ${TANSR_CONFIG_DIR || ~/.tansr}/update-state.json 按「分发点 origin + 通道」记住最近一次完整核验通过的序号——收到更小序号的封套(合法签名的旧封套被重放 / 回滚)拒绝并报 pointer_sequence_rollback(文案携两侧序号);无序号旧形封套按迁移律**「视为 0 并警告」**:视 sequence = 0 参与比对,本机已核验过序号 > 0 时报 pointer_sequence_missing,否则(从未见过带序号封套,或水位恰为 0)放行、不建立水位,成功通知末尾附一行「该源暂无防回放」提示(旧分发点 / 企业自托管平滑迁移)。签名 / 未签名钉死 / semver 降级守卫不变;不引入 expires(签名私钥不远端托管),issuedAt 陈旧不拒绝、只由 tansr doctor 呈现封套年龄(超 90 天出提示行,JSON 新增可选 updateSource 段)。发布侧:sign-release.mjs --latest 写入 sequence(TANSR_RELEASE_SEQUENCE 或墙钟毫秒),publish-oss.mjs --yes 真传前对远端现行封套核序号前进(回退 / 同号异版拒发)。迁移:无需动作;如分发点合法重建序号,删除 update-state.json 即重置本机水位。

  • 汇总此前未发布的 0.5.0 候选能力、AP-SP 应用提示词、ARC 核心治理,以及同轮文本追加(INJ);旧 v0.5.0 本地候发标签继续保留在原源码,不移动。
  • TUI、ACP 与 headless 共用同轮输入接纳;严格目标和有限内存回执不会截断当前任务、重置预算或代替权限审批。headless 新通道须显式 -p 与 stream-json。
  • 修正查询自然封口、回调重入、历史纪元和输出背压边界;原工具、压缩、用量、权限及资源收口合同保留。具体自动化范围见同轮追加输入架构验收报告。
  • 本批版本与候发源码按 REL-04 推进;真实发布状态以 doc/release 回执和 npm registry 为准。

历史候选归档:0.5.0 没有单独发布,以下内容并入 0.6.0;本地 v0.5.0 标签保留在原候选源码。 十王修案 W1–W4 原收编于 main 9f09c1b7;原 sdk 0.12.0 / serve 0.7.0 候选由本批 SDK 0.13.0 / serve 0.8.0 接替。实际发布以回执和 registry 为准。

核心机制整改(CM;历史候选内容)
Section titled “核心机制整改(CM;历史候选内容)”
  • ACP/CLI serve 的新建与恢复会话按当前组织记忆开关和规范化项目目录绑定记忆;恢复到另一项目明确报 memory_project_mismatch。同一项目的 worktree 仍共享记忆,历史 junction 别名分片保留,不自动迁移合并;既有会话 /cd 语义保持(CM-01)。
  • 常驻子代理的 Write/Edit 也执行真实目标记忆围栏,junction 不再绕过;父会话换根不会改写旧代理的围栏材料(CM-05)。
  • 召回正文被附件总帽拒载时,不再永久当作已经送达;新触达或新 prefetch 可重试。旧候选日志口径保留,新增准入统计区分正文、短引用与拒载;“准入”不代表远端已接收(CM-07)。
  • 摘要质量拒绝和取消之前已经报告的摘要用量计入费用,拒绝的摘要仍不替换历史。工具超时明确提示残余操作可能仍在运行,需确认停止后再重试有副作用操作(CM-02/15)。
  • 原子写的临时写入、权限设置或替换失败时保留原文件;大文件分页与整读保持编码语义,选中窗口和超长行驻留有上限,精确指纹仍扫描全文件(CM-04/08)。
  • 四媒体工具在执行入口按各自 schema 拒绝坏参数,合法默认值与既有权限/裁决流程保持(CM-09)。
  • CLI serve 的 TTS 落盘失败不再把宿主路径放进远端结果;已生成的 base64 音频仍返回,本地记录安全诊断。嵌入工厂可用 onArtifactSinkError 消费原始错误,回调异常不会吞掉音频(CM-10)。
  • 平台语音识别除原始 24 MiB 音频帽外,发送前还检查实际序列化 JSON 的 32 MiB 体帽;base64 与所有字段均计入。越限时可改用公开 URL 或压缩音频,BYO multipart 原始字节语义保持(CM-11)。
  • 新 SEA 默认更新入口改为 latest.signed.json 单对象签名封套,缺席或坏签不降级。自托管分发方须随首次升级发布该文件;显式旧 latest.json 与企业 manifest 地址仍兼容,旧双对象错配窗口仍可能暂时拒绝更新。版本目录同名不同字节拒绝覆盖,保留材料可用于幂等重试(CM-12;迁移详见 doc/report/核心机制整改-CM-12-终报.md)。
安全与权限(收紧;默认行为变化)
Section titled “安全与权限(收紧;默认行为变化)”
  • 出网单点 + SSRF 三层门(FX-B-12 / FX-B-13 · W1):WebFetch / Http / hooks 出网 / ASR 音频下载全部改经 kernel createEgressDispatcher (DNS 解析后再判私网 / 环回 / 链路本地 + 代理复合),cli 进程级单例 processEgressClient();字面量表 packages/kernel/contract/egress-literals.json 生成物 + 零 diff 门。此前五处各自 fetch,私网地址可被 302 / DNS 重绑绕过。用户可见:指向私网 / 元数据地址的抓取被拒并给出原因。
  • 凭据出线单一名单 http.allowedAuthEnvVars(FX-B-15 · W1):Http 工具 / hooks 的 auth 只能引用名单内的环境变量,名单外 → auth_env_not_allowed 不发请求;该段为 user-managed(项目层写入被忽略并诊断 http_section_layer_ignored),组织可远程下发收紧。迁移:把原本在 auth 里引用的变量名加进 ~/.tansr/settings 的 http.allowedAuthEnvVars。
  • 携凭据的 Http 调用全模式恒 ask(FX-B-16 · W1;hard-safety 第 0 段):Http 携 auth / WebFetch · Http 的污点态在 auto / acceptEdits / bypass 下仍咨询,任何 deny 不软化,分类器不豁免,dontAsk / 无通道地板 deny;TUI 弹卡加「安全层」理由行(携变量名 + 方法 + origin)。
  • 裁决姿态单点推导(FX-B-04 / FX-B-05 · W1 / W2):derivePosture 按 askUser 在场性判 A / B 姿态;裁决人在场时的权限模式由 modeUnderAdjudicator({ posture, tier }) 推导——B 姿态 × 资格档 none 不再切 auto(cwd 内写删从零咨询放行变为 ask → 无通道 deny)。 受影响:无 askUser 通道且 bundle 裁决人档无 tier 的宿主(acp / mcp-serve 令牌档);要保留放行请给档授格或接通道。acp requestPermission 加第四参 attribution。
  • 权限门重判律两门同源(FX-B-10 · W2):cli 门与 sdk 门 import 同一份 permissions/gate-recheck.ts——PreToolUse hook 替换入参后按替换后参数 真实归因重判、hook 明示 ask 恒不被裁决人代批、两重判位不重跑 hooks / 不二次咨询。
  • 机器放行也出 tool.permission.decided(FX-B-09 · W2):裁决人放行恒发 decided{allow, decisionSource:'classifier'},模式放行对非只读调用发 decisionSource:'mode';TUI narrator 加「allowed by adjudicator」句。审计面此前只见拒绝。
  • mcp-serve 提权门前门后各判一次(FX-B-18 · W3;红线 4):tools/call 经 kernel precheckEscalation / postcheckEscalation,canAsk=false → 沙箱旁路 / 直接携带 / hook updatedArgs 注入三形一律 [escalation_denied](H-2 止血形被替换,语义同)。
  • Shell escalated 位只在 capability ≠ none 时落键(FX-B-20 T-10 · W3);tansr bg show / kill 的 id 先校形再拼路径(T2-06;id 形 bg-<n>-<nnnn>,旧短形 bg-1 不再接受)。
工具与执行面(边界卫生;FX-B-20 · W3 除注明外)
Section titled “工具与执行面(边界卫生;FX-B-20 · W3 除注明外)”
  • /cd 一处重建全链(FX-B-17 · W3;R-04 cli 母卡):assembly/cwd-rebind.ts 收敛点——hooks 引擎 → 权限门 → withCwd 执行器 → Shell 沙箱写边界 同笔重建;Task 转发门不再传 cwd;checkpoint store 以 cwd 闭包;/restore / /fork 对账当前 cwd。此前 /cd 后五处仍持启动 cwd。
  • 常驻子代理帽 maxResident + 结构化 capacity 拒(T-07);硬超时后独占槽待工具 settle、宽限有界才释放(T-08);每调用信号分叉透传取消原因(T-09); 文件写入同目录 tmp + rename 原子化 + contentHash 第二道守卫,Write / Edit 对「读后被改」按内容哈希判(T-13);超整读帽的大文件 Read 按块流式分页, 不再整读进内存(T-14);Read 图片按会话当前模型放行(T-15;此前 serve / acp / sdk 面恒拒且文案误称「模型不支持」,现按 providers 内置能力表, 未收录模型如实说 unknown)。
  • 四媒体工具失败以 tool.completed.isError 出线(FX-B-25 · W2;R-17):超时 / 供应商失败不再伪装成 tool.failed,TUI 归约为 failed 卡;执行器硬帽 = 预算 + 宽限 + 1 s,超时文案「may still complete and bill」;止血 FX-B-25/H-1 errorCode:'provider_error'(W1)并入。
  • 媒体错误提示按受众(FX-B-26 · W3):cli 以 audience:'user' 取 hint,词表外码回落通用指引;模型可用性未核验行注记 [availability unverified]; 数据 URI 体积预检 bad_request;ASR 原始字节 > 24 MiB 在流中早拒(FX-B-14 · W2 32 MiB 流帽同笔)。BYO 供应商 404 / 错误回显脱敏基址 query 与实际 URL(FX-B-14)。
  • Task 派生序围栏就地替换 + MCP registerExpansion 同一对象归 alreadyLoaded + discover 文案去 TUI 命令(FX-B-19 · W1)。
  • 会话锁「pid 存活恒不抢占」(FX-B-22 · W1):24 h 只对载荷损坏兜底,lock.touch() 心跳,只读径 readAll({ repair:false }) 不抢不删;僵死活 pid 持锁需人工。会话 store 单核 createSessionStoreCore(FX-B-21 · W1):pendingRewrite 持久闩 + 前缀校验 + 段感知在场性(H-3 止血并入)。
  • 快照是附属能力(FX-B-23 · W2):listCheckpointsDetailed 单档隔离、GC 不误删、杂散 notes.json 不再整体 CHECKPOINT_INVALID;retention.maxAgeDays。
  • 套餐配额拒绝可判(M-03 · W3;contract-v0.26):平台套餐四码 turn.error.detail{ scope:'plan' };TUI 与端侧同键。
  • 分命令 --help(DS-25 · 资料站 P2):tansr <cmd> --help|-h(旗标在子命令后任意位置)打该子命令的 usage 段(一句话 / 旗标表 / 例子);无子命令、未知子命令或首参为旗标(tansr -p serve --help)仍打全局帮助。全局帮助 Modes 块列全部 16 个子命令(补 logout / whoami / init / profile / org 行)。旧调用形行为不变(仍得帮助文本、退出码 0),只是更精准。
  • 段策略表 SECTION_POLICIES 单一事实源(FX-B-01 · W2):sandbox / update 两段 user-managed(项目层写入被忽略并诊断 sandbox_section_layer_ignored / update_section_layer_ignored);sandbox managed 地板下 env 只能收紧(放宽被压 → 归因 env-suppressed); doctor 输出加 config.ignoredSections 逐条 + 沙箱行 env-suppressed 归因行;--dump-config 剥离面由表派生。
  • update.manifestUrl 只认 https 绝对 URL,产物地址须与 manifest 同 origin(FX-B-02 · W2;W-05):项目层 update.manifestUrl 不再生效(此前可被仓内 配置劫持到恶意分发点);tansr update 对同主机异端口 / http 地址 → untrusted_host。
  • 配置层四律与键目录(FX-B-03 · W4):doc/11 §14.4 补「managed = 地板 / 锁 = 钉值 / env 只收紧 / 组织锁定压 env」+「组织级暂不可配」清单(MCP 白名单 / permissions / hooks / skills 目录 / 网络工具整族开关);lockableSettingsCatalog()(21 键)/ orgUndeliverableSettingsSections() 供控制台键目录与 api 写面校值(cli 包内导出,非 npm 公共面)。
  • doctor 段归因与远程 org 半层叠加(FX-B-15 · W1):http.allowedAuthEnvVars 三源(user / managed / remote org)逐键叠加,doctor 显示生效来源。
  • 未签名产物缺省拒装(FX-C-26 · W1):unsignedPolicy:'reject' 为唯一缺省;--allow-unsigned 须二次确认(确认卡五行 i18n);assertTrustedUrl 三处(manifest / 产物 / 指针)。此前信任缺席时照装。
  • 分发点改签名指针 sea/latest.json(FX-C-27 · W1):update 缺省读 release/<channel>/sea/latest.json,先验 latest.json.sig(内置公钥表 release-trust.json 单源,与 publish-oss 同文件)再取 sea/<version>/<name>;版本目录恒不同名覆盖,保留最近 6 版;旧扁平布局兼容一版 (install.sh / install.ps1 仍读旧形,下一 minor 改读指针)。企业自托管仍可指 manifest.json。
  • npm tarball 与 SEA 随附 NOTICE(FX-C-29 · W4):内联第三方 43 包(name@version · license · 许可全文)由真构建 metafile 生成;SEA dist/release/NOTICE + manifest.notice。recipes/ci 两份配方钉 @tansr/cli@0.4.0 与 action sha(FX-C-30 · W4,sync-recipes 写入,勿手改)。
  • tansr serve --v2 / TANSR_SERVE_V2=1 显式挂 /v2 面(FX-C-46 · W3):缺省关 = 行为零变;开时鉴权 = 同一 Bearer token + x-tansr-end-user 自报分域(单运维方形),工厂 cwdRebinder 缺省接线,cwdPolicy 取启动 cwd 子树;/healthz 与 /readyz 恒开(FX-C-42 · W3)。/v2 面公共变更见 packages/server/CHANGELOG.md 0.7.0。
  • acp session/new | load 的 cwd 经 kernel 同一闸(FX-C-44 · W3;R-04):createAcpConnection({ cwdPolicy?, closeTimeoutMs? }),拒绝 → JSON-RPC -32602 data:{ code:'cwd_unavailable', reason }(四值与 serve /v2 409 逐字同);缺省 ACP_DEFAULT_CWD_POLICY 恒等(零回归);连接收口 allSettled(泵) → allSettled(会话收尾) 有界 5 s(ACP_CLOSE_TIMEOUT_MS,acp.close_timeout 诊断)。--allowed-roots 入口旋钮归 W5。
  • 四入口安装进程级兜底(FX-C-02 · W1):tansr serve / tansrd 以 drain-exit 策略(TANSR_SERVE_ON_UNHANDLED),acp / mcp-serve / headless 以 log 策略;未处理拒绝不再静默吞掉或裸崩。
  • cli bundle 拉取五处同锚携 x-tansr-client-features(FX-B-28 · W1):remoteBundleHeaders 单函数 + 静态守卫;sdk 面 410 session_archived 终态。
  • serve 临界区 / 进程守卫 / 保留期 / 落卷失败帧 / TANSR_READY / webhook 双签等 @tansr/serve 0.7.0 变更对 tansr serve 运维方同样生效,见 packages/server/CHANGELOG.md;SERVE_RUNTIME_ENV 28 键由 packages/server/README.md 区段与 .env.example 生成(pnpm env:example)。
  • ErrorView.recoverable 必填 + SessionView.notices(FX-B-29 · W2;R-05 / M-08):可恢复咨询帧(如 serve 落卷失败)归 notices(FIFO 20) 不污染 lastError;narrator 两句。三端金样 protocol/test/fixtures/golden/turn-error-{recoverable,fatal}.json(C-β · W1)。
  • 三端同名谓词 isRenderableArtifact + 四金样(FX-C-24 · W3):空串 / errorCode 在场 / errorCode null 三形三端同判。
  • 控制帧 ts + 桥请求帧 ttlMs(FX-C-22 · W3):端侧按 ttlMs 优先判期;expired_on_arrival 不静默。
发布链与仓内门(操作者 / 贡献者)
Section titled “发布链与仓内门(操作者 / 贡献者)”
  • 统一发版门 pnpm release:gate --package <cli|sdk|server> 六步 + 三包 prepublishOnly 结构钩 + doc/release/ 回执律(FX-C-25 · W2); release.yml 签名步去条件化(缺 TANSR_RELEASE_SIGN_CMD 即 fail)+ exports:check;sea.yml 签名步同律(FX-C-49 · W1)。
  • pnpm release:verify-notice --check(三包 NOTICE 幂等 + 许可白名单)/ release:depcheck(声明 × 真 import,豁免表带 expires 只减)/ release:sync-recipes --check 三门入 release.yml 与 ci-full supply-chain(FX-C-29 / FX-C-30 · W4);kernel 删 shell-quote(B-8)。
  • 三级门 pnpm gate(lint · typecheck · test · i18n:gate · contract:check · env:check · docs:check)+ ci.yml PR / push 必跑 + ci-full (e2e 真组合 / supply-chain / freshness)(FX-C-41 · W2);.gitattributes text=auto eol=lf + lint-text(BOM / 孤立 CR / 混合行尾 / 无末行 LF 即红, 基线只减)(FX-C-36 · W2);scripts/test.mjs 按 timings 装箱 + test/quarantine.json 只减门(FX-C-38 · W2);i18n 裸串白名单 JSON 化 scripts/i18n-allowlist.json + 只减 + 到期 + ja / ko 阈值(FX-C-37 · W4)。
  • sdk 契约 contract/MANIFEST.json(revision 3)+ pnpm contract:manifest [--bump] / contract:check;error-codes.generated.ts 由 vendored api openapi 生成;providers 错误码登记面改读 vendored 全集(85 码)(C-β W1 / B-1 W3 · W4)。
  • deploy/serve-v2 nginx / k8s client_max_body_size 20m → 32m 与 contract.ts 常量对表卷(FX-C-48 · W1)。

0.4.0 (2026-09-06;随 @tansr/sdk 0.11.0 / @tansr/serve 0.6.0 发版)

Section titled “0.4.0 (2026-09-06;随 @tansr/sdk 0.11.0 / @tansr/serve 0.6.0 发版)”
  • 追溯登记(FX-C-25;当时未发回执,tag v0.4.0 在场):自 0.3.0(2026-09-01)以来——会话持久化一期二期、权限裁决姿态、裁决协议 v4 / v5 与应用协议、 音频模态、媒体能力内核化、套餐 plan 端上、MCP 重连契约 v0.21–v0.24;examples electron-chat / token-server 补 license MIT(sbom:verify 断言 8 释放门禁)。 详见 doc/49 回执与 doc/90 技术手册;本文件自 0.5.0 起逐版机器化。

0.3.0 (2026-09-01;随 @tansr/serve 0.2.0 发版)

Section titled “0.3.0 (2026-09-01;随 @tansr/serve 0.2.0 发版)”
  • 追溯登记:S-TH1 思考双半场端侧 / S-V 呈现档与动态切换 / S-T2 媒体异步任务 / reminder A 案;serve 0.2.0 reminder 出流滤除;@tansr/sdk 0.7.0 不重发。
  • 0.2.3(08-28):fast 系动态供给(切模跟随)+ 记忆治理与缓存优化批量 + 重试可见性与爆炸半径遏制 + PS5.1 TUI 三修 + 上游计数虚报哨兵 + 幂等 409 自愈。
  • 0.2.2(08-25):降档守卫 W_run 口径校准(记忆 / 压缩辅助面成本修正)。
  • 0.2.1(08-23):版本 bump + doc/24 §10 发布记录(九关全绿 / 产物三件套哈希);0.2.0 未发布即被接替(tag 在案无消费者不补发)。
  • 0.2.0(08-23):SEA 冒烟换锚 + doc/24 §9 发布记录。