@tansr/cli Changelog
按版本列出 @tansr/cli 的用户可见变更;每版分「新增 / 变更 / 修复」三段,涉及迁移的条目写明迁移方式。工程视角的完整变更记录见页末折叠段。
0.10.3(2026-10-10)
Section titled “0.10.3(2026-10-10)”- 内嵌的
@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 为唯一安装渠道。
0.10.2(2026-10-06)
Section titled “0.10.2(2026-10-06)”- 内嵌的
@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 该切换尚未发生,届时以对应版本的发布说明为准。
0.10.1(2026-10-04)
Section titled “0.10.1(2026-10-04)”- 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/serve0.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 为唯一安装渠道。
0.10.0(2026-10-02)
Section titled “0.10.0(2026-10-02)”tansr serve --v2部署自带/api统一调用面(正式可用):统一响应头、统一错误信封、显式协商的事件包络、能力发现与会话级围栏,详见@tansr/serve0.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/serve0.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 为唯一安装渠道。
0.9.0(2026-09-16)
Section titled “0.9.0(2026-09-16)”- 移动托管应用可显式开启网页抓取(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 同批发布,发布物由已合并的修复重新构建;单文件可执行版另行登记,本批未发布。
0.8.0(2026-09-15)
Section titled “0.8.0(2026-09-15)”- 会话里图像 / 视频 / 语音工具产出的媒体产物随会话存储(热 / 冷)与检查点一并保留,
--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 保持同源,本版没有把任何需要确认的操作放宽为自动放行。
0.7.0(2026-09-14)
Section titled “0.7.0(2026-09-14)”- 项目层 hooks 信任门:仓库
.tansr/settings.json/settings.local.json声明的command/httphooks 跟随工作区信任记录(~/.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 有界写、/v2seq 单调与真值lastSeq、存储告警出线、会话级预算跨重启、音频面上游错误归一 503)见@tansr/serve0.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 侧对应选项见「安全与隐私」页。
0.6.0(2026-09-10)
Section titled “0.6.0(2026-09-10)”- 任务执行中可追加文本要求: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,请参阅该版说明。
0.4.0(2026-09-06)
Section titled “0.4.0(2026-09-06)”- 会话持久化:会话可保存、恢复与分叉。
- 权限裁决姿态:令牌档默认装配平台裁决人,由是否接入确认通道决定「人在环」或「无人值守」姿态。
- 音频模态与媒体能力内核化:语音、转写等媒体工具可用。
- 套餐(plan)信息在端上可见。
- MCP 重连契约升级(v0.21–v0.24)。
- 示例项目 electron-chat / token-server 补齐 MIT 许可声明。
0.3.0(2026-09-01)
Section titled “0.3.0(2026-09-01)”- 思考过程分上下半场在端侧呈现。
- 呈现档位与运行中动态切换。
- 媒体任务异步执行。
- 上下文提醒(reminder)机制。
- 随
@tansr/serve0.2.0 发版:serve 出流不再包含 reminder 帧。
0.2.x(2026-08-23)
Section titled “0.2.x(2026-08-23)”- 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)。
0.10.3 — 2026-10-10
Section titled “0.10.3 — 2026-10-10”- 内置 Serve 更新至本次主线修复集合:首次设备绑定、业务工具受控输出及原超时、统一错误语义、材料结算后的检查点恢复。通过 tansr serve 消费同一修复;无新增 CLI 命令、旗标或 ACP 协议。
- 随本次冻结主线重新构建 npm CLI 与 SEA;平台资产及正式发布状态以 REL-FULL-20261010 回执为准。当前 persistence 开发分支的未合入工作不在本版。
0.10.2 — 2026-10-06
Section titled “0.10.2 — 2026-10-06”「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.md0.15.0 段);非--v2启动时这两键按既有律出现在「legacy 组未生效」提示里。本版缺省行为与 0.10.1 相同;门面在场时旧前缀响应多出Deprecation/Link(可选Sunset)头。对你意味着:升级无需动作;打算在 0.16.0(缺省readonly)前演练的宿主可先设readonly并看api.legacy_prefix_rejected。迁移:无。
0.10.1 — 2026-10-04
Section titled “0.10.1 — 2026-10-04”「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.mjsesm 档入口改指entry.ts):npm 包形态的tansr在加载任何业务模块之前先调用 Nodemodule.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——esbuildsplitting下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;两组,基线main376 / 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=0348 ms 为披露项;cold--version120–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/serve0.14.0 manifest r7 落地——操作approval.credential.submit(POST /api/approvals/:id/credential,会话域,多租鉴权,拒绝经统一信封not_found404 /gone410 /conflict409,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.md0.14.0 段迁移。tansr bg kill --force在 Windows 上的进程身份探针(CLI-WIN-02;源packages/cli/src/bg/process-identity.ts):探针子进程(Windows PowerShell 5.1Get-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-clientSDK2 工作区 helper(CI-WIN-01,0.3.0 段)同一修法。对你意味着:bg kill --force的身份核对在模块多的 Windows 机上不再因探针超时被拒;后台运行端启动时的身份登记(spawn.ts)同样受益。wire / 旗标 / 退出码零变化。迁移:无。
0.10.0 — 2026-10-02
Section titled “0.10.0 — 2026-10-02”已发布(“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-onlytansr serve保留/v1);/v2/v3/*退役预告(最早 0.14.0 只读窗口,1.0.0 移除)——全部见packages/server/CHANGELOG.md0.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 → 分类器(内部 hintssignal贯穿 dispatch、CLI / SDK 门与引擎):物理咨询请求随 Ctrl+C 取消,迟到结果不放行、不缓存、不改熔断,执行器恢复后复验 signal;ACP 门面丢 hints 一并修正。对你意味着:记忆检索场景少两次询问,中断后不再有游离的裁决请求与 hedge;已发送调用预算不伪退回。迁移:无。 - 启动与请求前开销(USDK-08
fe1454fca9c1d9f19788f79a09803c1bc943d1fb2b4d2251;SDK2-0996e2119b;源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 导入改指 kernelruntime等同源叶入口(集中计划 §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-063d3ceba6;源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.md0.13.0./extensions条)在tansr serve命令行只经此径可达,tansr serve --v2本身不自动开启任何一项。迁移:无;自建宿主可从examples/serve-demo/agent-real.ts起步。tansr serve日志与资源旋钮(USDK-06f2123174/ USDK-08eceeff0d;SERVE_RUNTIME_ENV31 → 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-0142224634/ SRV-03bc51b507把记忆提取 / 固化 / pending-anchors 本体迁入共享 kernel,CLI 保留原默认宿主与入口(原两叶 84/84 回归);USDK-08901c8916附件准入冷恢复在 CLI 侧只有tansr serve --v2会话工厂一行透传(packages/cli/src/serve/session-factory.ts的extras.attachmentPersistence→ 驱动,packages/server/CHANGELOG.md0.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):基线36f793ccTUI 组中位 375 ms(P50 377 / P95 412)、本版候选226cddf2345 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),本车发布不改写该红。
0.9.0 — 2026-09-16
Section titled “0.9.0 — 2026-09-16”- 移动托管应用可显式启用 WebFetch 与 Http,使用同一核心工具及权限链;工具在开发者 serve 主机执行,缺省关闭。升级后须配置能力并新建或重新装配会话,现存会话不会自动增删工具(MOB-WEB-01 / REL-12)。
- 托管 Http 禁止使用宿主环境凭据和模型自行开启私网访问;默认文本日志补齐受限审批诊断,超时询问和用户审批规则保持不变。
- 本轮发布物由已合并修复重新构建,实际 npm 状态以 REL-12 发布回执为准;SEA 独立分发另行记录。
0.8.0 — 2026-09-15
Section titled “0.8.0 — 2026-09-15”REL-07 汇集已验 MEDIA-03 与 AUDIO-01 主线改动;本次 npm 发布状态以 doc/release/cli-0.8.0.md 回执为准,SEA 分发另行登记。
- 历史工具媒体产物随会话热/冷存储和 checkpoint 保留,恢复后可重建预览;呈现字段不送入模型。首次写入产物会启用存储版本 2,升级前备份并统一升级同一会话的 writer,回滚旧程序须用原备份或独立目录。
- TTS 使用厂商原子输入限制与原加权字数双帽,支持显式分段预检和纯空白分段拒绝;新旧客户端按特性声明取得兼容投影,不扩大授权模型上限。
- CLI / SDK / serve 继续使用同源权限裁决;本轮权限审查与回归没有将正常 ask 放宽为自动许可。
0.7.0 — 2026-09-14
Section titled “0.7.0 — 2026-09-14”核心组件设计审查整改 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)整树结束,killTracked1 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'internalusage_snapshotv2 记录(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.errorwarn 级出线、会话级预算跨重启、音频面上游错误归一 503upstream_unavailable——全部见packages/server/CHANGELOG.md0.9.0 段。 -
束体积 −10.65%(RF-11,DEC-RF-19;RF-Z ⑪–⑬ 守卫加固):dev 束
dist/tansr.mjs8,386,752 → 7,493,801 B(守卫 99.98% → 89.33%),release 3,950,192 → 3,778,260,tansrd.mjs3,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/sdk0.14.0 /@tansr/serve0.9.0 /@tansr/api-client0.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 Narratorturn.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;servedrainTimeoutMs + 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(inkexitOnCtrlC关闭,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_timeoutwarn 后继续)。详见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.6.0 — 2026-09-10
Section titled “0.6.0 — 2026-09-10”- 汇总此前未发布的 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 令牌档);要保留放行请给档授格或接通道。acprequestPermission加第四参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经 kernelprecheckEscalation/postcheckEscalation,canAsk=false→ 沙箱旁路 / 直接携带 / hookupdatedArgs注入三形一律[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-1errorCode:'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),只是更精准。
配置与 doctor
Section titled “配置与 doctor”- 段策略表
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显示生效来源。
更新与分发(tansr update / SEA)
Section titled “更新与分发(tansr update / SEA)”- 未签名产物缺省拒装(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 生成;SEAdist/release/NOTICE+manifest.notice。recipes/ci两份配方钉@tansr/cli@0.4.0与 action sha(FX-C-30 · W4,sync-recipes写入,勿手改)。
serve / acp / mcp-serve 宿主入口
Section titled “serve / acp / mcp-serve 宿主入口”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.md0.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 面 410session_archived终态。 - serve 临界区 / 进程守卫 / 保留期 / 落卷失败帧 / TANSR_READY / webhook 双签等
@tansr/serve0.7.0 变更对tansr serve运维方同样生效,见packages/server/CHANGELOG.md;SERVE_RUNTIME_ENV28 键由packages/server/README.md区段与.env.example生成(pnpm env:example)。
事件流与呈现
Section titled “事件流与呈现”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-fullsupply-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.ymlPR / 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/sdk0.7.0 不重发。
0.2.x (2026-08-23 … 2026-08-28)
Section titled “0.2.x (2026-08-23 … 2026-08-28)”- 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 发布记录。
本文是否有帮助?
感谢反馈,我们会持续改进这篇文章。