コンテンツにスキップ

@tansr/serve Changelog

このコンテンツはまだ日本語訳がありません。

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

  • /v2 新增输入能力发现、严格同轮文本投递与状态查询接口,绑定会话、历史代际和目标轮;旧 messages 接口保持兼容。
  • ServerHandle.settleResources() 可等待真实资源收尾,与原有关闭及业务排水分开。
  • 应用系统提示词按平台 fallback / prepend 策略与 platform.system 组合;platform.systemAppend 追加宿主说明。Android / iOS 仍通过 /v2 发送普通用户消息,不新增客户端 system 入口;后续新一轮前刷新平台提示词与策略,当前执行轮固定,历史保留。需要配套 API 与 serve 版本。
  • 就绪帧 TANSR_READY {json}/readyz 探针(/healthz / /readyz 在 CLI 入口始终开启);建会返回 429 / 503 时携 Retry-After。部署件探针建议由 /healthz 改为 /readyz
  • 会话保留期:sessions.retention{ maxAgeDays, maxPerEndUser, maxBytes }store.sweepRetention;环境变量 TANSR_SERVE_SESSION_MAX_AGE_DAYS / TANSR_SERVE_SESSION_MAX_PER_END_USER;保留天数可按组织在平台配置的值生效,缺省 30 天。
  • 轮末 webhook 出站:环境变量 TANSR_SERVE_NOTIFY_URL / TANSR_SERVE_NOTIFY_SECRET,tansr serve --v2 进程可直接发送;签名双版本 x-tansr-signature: v2=…, v1=…,可配 webhook.signatureVersions;导出 signWebhookDelivery
  • 指标暴露独立开关 TANSR_SERVE_EXPOSE_METRICS;就绪帧输出流选择 TANSR_SERVE_READY_STREAM;运维环境变量以当前公开表为准,.env.example 与 README 由表生成。
  • 新导出:installProcessGuards 一族、V2_ROUTE_TABLE / V2_SESSION_ACTIONS、就绪帧解析与格式化函数、ReplayGapNotice.reasonPermissionReceiptSchema.reasonAgentSessionFactory.sweepRetentionAppTokenMinter.invalidateSECRET_WARNING_VALUE 等(均为可选,缺席即现状)。
  • 新指标 tansr_serve_pump_errors_total / tansr_serve_token_invalidations_total{reason};新日志事件 process.unhandled_rejection / process.uncaught_exception / process.drain_failed / store.error / session.retention_swept / bridge.permission_receipt
  • tarball 随附 NOTICE(内联第三方依赖的名称、版本与许可文本)。
  • 丢失输入响应后先查询原输入状态,不通过隐式开启新轮重试;当前只支持文本与内存 ACK。
  • 手机重连原会话后,下一显式新轮自动刷新平台提示词;轮中追加不刷新 system,也不改变权限、预算和会话归属。
  • 同一 sessionId 并发建会,后到者返回 200 并附着到已有会话(此前触发 500 并可能留下未处理拒绝)。
  • /v2 错误信封的 message 改为固定文案,原始错误(含服务器本机路径)只进结构化日志;依赖 message 原文判因的客户端请改读 error.code / detail
  • /v2 事件泵抛错即关闭驱动(driver.status()'ended'),不再静默挂起。
  • 恢复会话时的工作目录默认取存储值('stored')并重过策略闸,被拒返回 409 cwd_unavailable(detail.reason 四值);TANSR_SERVE_CWD_ON_RESUME=current 可显式回到旧行为。
  • 会话落盘失败不再只进日志,改以可恢复的 turn.error{ recoverable: true, scope: 'server.persistence' } 出线;端侧按 recoverable 位区分咨询与失败。
  • 客户端超前订阅(afterSeq 大于日志末序)也会收到 gap 帧,reason'ahead_of_log'
  • 控制帧一律携 ts;server.tool.request / permission.request / question.requestttlMs;权限请求的应答(PermissionReceipt)可带 reason(目前仅 expired_on_arrival)。
  • 指标与日志的 route 标签值集按当前公开路由表变动,仪表板与告警请随动。
  • 缓存的应用令牌收到 401 且属失效码时自动逐出、重铸并重试一次;失效码集与 SDK 同源。
  • bundle 缓存键改为四维(基址 / 应用 / 径别 / 能力位);自实现 bundle 缓存的宿主请按四维键对齐。
  • 裁决装配与 SDK 同源:未接确认通道且裁决人未授予资格档的会话不再切换到 auto 模式,工作区内写 / 删改为征求确认(无通道即拒绝);机器放行帧 tool.permission.decided 经既有通道出线。
  • 会话文件存储切到统一内核实现;应急开关 TANSR_SESSION_STORE_CORE=legacy(一版后删除)。
  • 库内不再自行挂载进程级兜底;自托管 @tansr/serve 的宿主须在入口调用 installProcessGuards(tansr serve 已内置),否则未处理拒绝按 Node 缺省行为崩溃(与 0.6.x 相同,无回归)。
  • 服务关闭时保持原有 readiness 语义并拒绝新建会话;真实资源等待保留旧句柄的兼容边界。
  • 分叉会话读历史分页时 total 偏 1 导致翻页漏项。
  • 运行时外部依赖声明与实际打包一致(zod),包内说明文字同步订正。

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

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

  • 存储出口补齐:createFsBlobStore / createChaosBlobStore / runStorageConformance 及相关类型经 @tansr/serve 再导出,第三方适配器不再需要直装内核包。

无其他行为变化。

  • /v2 会话持久化:会话存储、分叉与恢复。
  • 权限裁决姿态与裁决协议 v4 / 应用协议。
  • 音频模态与媒体能力内核化。
  • 套餐(plan)信息在端上可见。
  • MCP 重连契约升级(v0.21–v0.24)。
工程变更原文(CHANGELOG)

以下为工程变更原文,逐字取自包内 CHANGELOG(面向贡献者,含内部编号);仅标题层级整体下调两级。

发版门(scripts/release/gate.mjs,十王修案 FX-C-25)③ 步要求:每个发布版本在此有 ## <version> 段且段体非空; ④ 步以 packages/server/exports.snapshot.json 与上一 tag 比判 semver——0.x 期任何导出集变化(增 / 删 / 签名变)至少 minor,patch 不得携新导出 (doc/89 §3.3「0.x minor = breaking」)。发版回执落 doc/release/serve-<version>.md;无回执无 tag(tag 形 @tansr/serve@<version>)。 0.6.x 及更早版本为追溯登记(当时无本文件;本文件由十王修案第五波 C-γ「CHANGELOG 三包就位」建立,不发版)。

面向 serve 宿主(自托管 @tansr/serve 库 / tansr serve 运维方 / tansrd 池)的公共面变更登记:公共导出(packages/server/src/index.ts)、 /v1 · /v2 HTTP 面、进程协议帧、运维旋钮(SERVE_RUNTIME_ENV 表)、指标 / 结构化日志事件、webhook 出线形。kernel / sdk 内部改动不入此表 (sdk 面见 packages/sdk/CHANGELOG.md)。版本号 = packages/server/package.json(包目录 server,发布名 @tansr/serve); 每条写「变了什么 · 对你意味着什么 · 迁移方式」。0.6.0 之前的历史见 git(git log -- packages/server)。

  • 汇总此前未发布的 0.7.0 候选能力,并通过 v2 capabilities/inputs/status 接口提供严格同轮文本追加(INJ);旧 v1/v2 messages 接口兼容。
  • SDK 与 serve 共用输入接纳与回执机制,绑定 session/historyEpoch/turnId;丢失响应先查询原票,不通过隐式新轮重试。
  • 手机重连原会话后,下一新轮继续自动加载平台提示词;轮中追加不刷新 system,不变更原权限、预算和会话归属。
  • 资源排水与真实 settlement 分开;新增公共出口按 minor 推进至 0.8.0。旧 0.7.0 标签保留,正式发布状态以回执为准。
  • AP-SP:平台工厂按 systemPromptPolicy=fallback|prepend 选择或拼接应用 systemPrompt 与 platform.system;prepend 下 [] 仍保留平台。platform.systemAppend 追加指南而不覆盖业务段。存活会话及移动端 attach 后的下一新轮自动条件核验平台正文和策略,轮中不变;失败不带旧配置请求模型,保留历史并可重试,取消/超时与令牌续期沿统一预检。移动端只发用户消息,不新增 system wire 字段。

历史候选归档:0.7.0 没有单独发布,以下内容并入 0.8.0;本地旧标签保留在原候选源码。十王修案 W1–W4 原收编于 cli main 9f09c1b7,实际发布以回执和 registry 为准。 导出集:exports.snapshot.json 由发版门首版基线 364(0.6.1 dist,W2 FX-C-25)→ W2 收编 375 → W3 收编 395(W3 回执 §一)→ W4 收编 395 (导出数不变,AssembledSessionModel / AgentSessionRetentionSweepInput 两签名变;W4 回执 §一)。以下逐条按波次的收编回执与 C-α / C-β 终报为事实源; 每条括注卡号(FX-C-nn)与所属波次。

核心机制整改(CM;历史候选内容)
Section titled “核心机制整改(CM;历史候选内容)”
  • 平台下发的上下文方案与宿主配置合流后,由查询和压缩共同消费,恢复会话沿用同一有效配置;嵌套阈值只覆盖明确提供的值。owner/app_user 均按各自身份投影生效(CM-03)。
  • 空闲或自动摘要即使被质量校验拒绝,已报告用量仍计入公共成本;小窗输出回退遵守测得正剩余,零/负估算余量保留原有恢复规则并明确提示(CM-02/06)。
  • CLI serve 工厂按新会话的组织开关和规范化 cwd 绑定项目记忆,恢复到不匹配项目明确拒绝;独立平台工厂保持原有能力面,未隐式增加 CLI 自动记忆或 Read 工具(CM-01)。
  • CLI serve 的 TTS 产物在成功和落盘失败两种情形均保持隐路径;失败仍返回已有音频,原始错误由工厂宿主的可选诊断回调消费。远端 SSE 不携该诊断,CLI 默认只记录安全事件与 errno(CM-10)。
  • /v2 平台 ASR 代打在向上游发送前检查原始音频和实际 JSON 体积,越限不会发请求或触发无用刷新;入站 HTTP 体帽与出站平台预检分别生效(CM-11)。
  • prepublishOnly 恒过 scripts/release/gate.mjs --package server 六步;exports.snapshot.json 基线入仓,自本版起导出集变化由门判 semver; tag 形 @tansr/serve@<version>(非目录名 server);发版回执 doc/release/serve-<version>.md。本文件即门 ③ 所指。
行为变化(收紧 / 修正;宿主须知)
Section titled “行为变化(收紧 / 修正;宿主须知)”
  • 建会临界区改票据形 beginCreate(FX-C-01 · W1):/v2 注册仓「合并 / 预留 / 登记」收为单一同步调用,AdoptFailure 经票据双向传, 同 sessionId 并发建会后到者 200 attach(此前 routes.ts:529 裸拒绝 → 500 / unhandledRejection)。宿主若自实现注册仓,按 BeginCreateResult / CreateTicket 形(registry 内部型,非公共导出)对齐;HTTP 消费方无需改动。
  • /v2 注册仓事件泵抛错即关闭句柄(FX-C-03 · W1):泵死驱动死(driver.status()'ended'),不再静默挂起;新增计数 pumpErrors(治理统计)+ 指标 tansr_serve_pump_errors_total
  • /v2 四处兜底信封 message 改固定 i18n 词条(FX-C-04 · W1):错误原文(含本机路径)只进结构化日志 store.error / session.rejected, 不再出线到客户端;此前信封曾回显 open '/home/…/.tansr/sessions/x'。依赖 message 原文判因的客户端改读 error.code / detail
  • 裁决装配与 sdk 同源(FX-C-50 · W1 → W2 切换;M-01):PlatformAdjudicationOptions = Omit<AdjudicationOptions,'endUser'>;裁决段缺席通报 adjudicator_unavailable(ADJUDICATOR_UNAVAILABLE_CODE / _MESSAGE 与 sdk ADJUDICATOR_UNAVAILABLE_WARNING 同值);开发者向通报码 (DEVELOPER_ONLY_ADJUDICATOR_WARNINGS,六码)只走宿主 onAdjudicationWarning 通道不下发端上;姿态 / 模式经 kernel derivePosture / modeUnderAdjudicator({ posture, tier }) 单点推导——B 姿态 × 资格档 none 的会话不再切 auto(cwd 内写删从零咨询放行变为 ask → 无通道 deny),与 sdk 0.12.0 同律;机器放行帧 tool.permission.decided{allow, decisionSource} 经既有 driver 出线。
  • /v2 纪元 gap 单点(FX-C-05 · W2):subscribeafterSeq > lastSeq(客户端超前)亦发 gap 帧,ReplayGapNotice.reason? 加法键 (取值含 'ahead_of_log');MemorySessionEventLog.readAfter 同律双保险。此前超前订阅静默无 gap。
  • 会话 store 切 kernel 单核(FX-C-06 · W2;R-11):serve 文件店改经 kernel createSessionStoreCore(pendingRewrite 持久闩 + 前缀校验 + rotate / append 单实现),与 sdk file-store 过同一份 runSessionStoreConformance;快照三法经 #checkpointQueue 串行。应急开关 TANSR_SESSION_STORE_CORE=legacy(常量 SESSION_STORE_CORE_ENV,与 sdk 同名同值;一版后删)。
  • 落卷失败可见帧(FX-C-07 · W2;R-03 B 形):会话落盘失败不再只进日志——经 driver.pushBodyturn.error{ scope:'server.persistence', recoverable:true, errorKind:'store_commit_failed' | 'store_create_failed' };sdk 0.12.0 reducer 把 recoverable:trueSessionView.notices 不落 lastError新增 server.platform.warning 控制帧。端侧按 recoverable 位区分咨询 / 失败。
  • 恢复会话的 cwd 缺省翻为 'stored'(FX-C-08 · W2 → W3 切换;R-04):配置了 cwdPolicy 的宿主 cwdOnResume 缺省由 'current''stored', 且 'stored' 重过策略闸——拒绝 → 409 cwd_unavailable{ detail.reason: 'not_allowed' | 'not_allowed_on_resume' | 'missing' | 'not_absolute' } (四值来自 kernel resolveSessionCwdSync / toSessionCwdGateResult,serve 不自写词表)。旋钮 TANSR_SERVE_CWD_ON_RESUME 可显式回 current
  • 会话保留期(FX-C-09 · W2 → W4 收尾;M-05):sessions.retention{ maxAgeDays, maxPerEndUser, maxBytes }(缺席 = 零删除)+ store.sweepRetention(serve 侧唯一物理删除点,日志事件 session.retention_swept)+ 注册仓第 ⑤ 段 onSweep 缝 + checkpoints.retention 透传; 旋钮 TANSR_SERVE_SESSION_MAX_AGE_DAYS / TANSR_SERVE_SESSION_MAX_PER_END_USERW4 起 maxAgeDays 按 endUser 域真读 bundle governance.sessionRetentionDays(sdk AssembledPlatformModel.governance 透传;api R4 表行 tiers [owner, app_user]):装配产物 AssembledSessionModel.sessionRetentionDays?;store.sweepRetention({ policy, policyFor })AgentSessionRetentionSweepInput.policyFor?: (endUserKey) => AgentSessionRetentionPolicy | undefined(自实现 store 缺席该缝 = 现状);键缺席 / 坏形 → 30 d 兜底不变。进程重启后 retentionDaysByEndUser 热缓存为空 → 该域首扫按 30 d 直至再建会(W5 C-α「保留期落盘 meta.retentionDays」闭合)。
  • 令牌失效反馈缝(FX-C-15 · W2 → W3 切换;R-02 / M-13):refreshingFetch 对携 x-tansr-app-token 的请求收到 401 且 error.code ∈ TOKEN_INVALIDATING_CODES(今日 ['unauthorized'])且 detail.reason ≠ 'check_unavailable'AppTokenMinter.invalidate? 逐出 + 重铸 + 同请求重试恰一次;指标 tansr_serve_token_invalidations_total{reason},AppTokenMinterStats.invalidations?。W3 起常量与谓词 (isTokenInvalidatingCode / isTransientAppTokenReason)由 sdk platform/error-codes.generated.ts 生成件同源(api openapi x-tansr-error-codes[].x-invalidates-token),serve 不再手写码集(TOKEN_INVALIDATING_CODES / TOKEN_CHECK_UNAVAILABLE_REASON 仍从 serve 出口)。
  • bundle 缓存键四维(FX-C-16 · W2;S-08):bundleKey(base, appId, scope, featuresFingerprint),不同径别 / 能力位组合不再串档; resolve / invalidate 入参 scope / clientFeatures,fetchAppBundle / fetchTwpHeartbeat 尾参。自实现 bundle 缓存的宿主按四维键改。
  • R-18 α serve 半边真消费(FX-C-11 / FX-C-12 · W2):contextScheme → 压缩方案选项的唯一消费点落 createPlatformSessionAssembler (经 kernel contextSchemeToSchemeOptions,坏形 CONTEXT_SCHEME_UNPARSED 只走宿主通道);assembleAdjudicator({ postureExplicit? }) 随行 pricing(金额 budgets.maxUsd / maxCny 折算 callBudget 上界;不可折算通报);serve 声明集 CONSUMED_BUNDLE_KEYScontextScheme / adjudicator.budgets / adjudicator.escalation / adjudicator.callBudget / governance.sessionRetentionDays, 与 api 消费方表(bundle-consumers.json revision 4)逐键对表(parity 卷 serve 侧零台账)。
  • 历史分页对 fork 会话禁用尾装载快径(FX-B-24 serve 同形 · W2;C-09):getHistoryPageforkedFrom 会话恒全量读,修正 total 偏 1 → 翻页洞; 新增 readForkedFrom 单点。API 形不变。
  • 控制帧 wire 恒携 ts;三请求帧携 ttlMs(FX-C-22 serve 半边 · W3;contract-v0.26 / E2-12):registry.ts encodeAgentStreamFrame 控制帧 data = { ...payload, ts }(CONTROL_FRAME_TS_KEY,不属任一载荷键集);server.tool.request / permission.request / question.requestttlMs(与 expiresAt 同在场性);权限回执 PermissionReceiptSchema.reason?(词表 PERMISSION_DENY_REASON = { expiredOnArrival: 'expired_on_arrival' },词表外 400,allow 携 reason 被忽略);AgentSessionBridgeOptions.onPermissionReceipt 缝 → 工厂结构化日志 bridge.permission_receipt。sdk contract/MANIFEST.json revision 2 → 3;端侧按 ttlMs 优先、expiresAt − skew 回落判期。
  • /v2 观测路由单源(FX-C-45 · W3;S-04):V2_ROUTE_TABLE(21 端点)+ V2_SESSION_ACTIONS(11 动作)导出;request-context.tsroute 模板与分发正则皆从表生成——指标 / 日志 route 标签值集变 9 条(此前手写 7 动作模板与实际路径不一),仪表板 / 告警按新表随动。
  • webhook 轮末通知双签一版(FX-C-43 · W3):x-tansr-signature: v2=…, v1=…(v2 = protocol WEBHOOK_SIGNATURE_V2 canonical + x-tansr-timestamp / x-tansr-nonce 两头;v1 保留一版供旧接收方)+ webhook.signatureVersions 配置(TurnEndNotifierOptions.signatureVersions?,缺省 DEFAULT_WEBHOOK_SIGNATURE_VERSIONS = ['v2','v1'];词表 WEBHOOK_SIGNATURE_VERSIONS);导出 signWebhookDelivery。接收方(tansrd / orchestrator parseSignatureHeader)任一版本接受、v2 在场只校 v2(防降级)、300 s 窗。v1 弃用时间表归发版令。
  • 进程协议:就绪帧 TANSR_READY {json} + /readyz 探针 + 建会退避(FX-C-42 · W3;撤 FX-C-47 止血正则):ready-frame.ts 为唯一形态源 (TANSR_READY_PREFIX / TANSR_READY_FRAME_VERSION / formatReadyFrame / parseReadyFrame / emitReadyFrame + 型 ReadyFrame / ReadyFrameSink;StartServerOptions.readyFrame?);tansrd 池 readyFrom(line) 三形逐行消费(① 帧 → ② JSON 行 → ③ 文案行,③ 为旧 serve 兼容一版); /readyz 探针与 /healthz 在 CLI 入口恒开;建会 429 / 503 携 Retry-After → 池侧实例冷却(PoolLease.release({ retryAfterMs }))。 部署件探针建议由 /healthz/readyz
  • 指标暴露拆旋钮(FX-C-42 · W3):TANSR_SERVE_EXPOSE_METRICS(独立于 TANSR_SERVE_EXPOSE_OBSERVABILITY)+ TANSR_SERVE_READY_STREAM (就绪帧写 stdout / stderr);SERVE_RUNTIME_ENV 表 23(W2 建表)→ 26(W2 C-α 三旋钮)→ 28 键,packages/server/README.md 区段与 .env.example 由表生成 (pnpm env:example / env:check / docs:check 锁住)。
  • 轮末 webhook 出站两 env 旋钮(FX-C-09/续 · W5 续):SERVE_RUNTIME_ENV 28 → 30 键,新组 notify——TANSR_SERVE_NOTIFY_URL(新 kind string, 绝对 http(s) URL;非法忽略并告警)/ TANSR_SERVE_NOTIFY_SECRET(新 kind secret,取值恒不入告警 / 日志 / 生成物;只在 URL 生效时生效)→ resolveServeRuntimeOptions().v2.onTurnEndNotify?: { url, secret? };tansr serve --v2 透传进 startServer({ v2 }) 既有缝(serve 进程自此可自发 双签 webhook;此前只有库缝 / demo 宿主);无 URL = 不出站。新导出 SECRET_WARNING_VALUE + 型 ServeRuntimeEnvStringFormat; ServeRuntimeEnvKind'string' | 'secret',ServeRuntimeEnvSpecformat? / requires?,ServeRuntimeV2OptionsonTurnEndNotify?
  • 进程级兜底须由宿主入口安装(FX-C-02 · W1;S1):库内不自挂 unhandledRejection / uncaughtException;新导出 installProcessGuards + PROCESS_GUARD_POLICIES / DEFAULT_PROCESS_GUARD_DRAIN_TIMEOUT_MS / PROCESS_GUARD_STACK_MAX_CHARS / processGuardRecordOf + 型 ProcessGuard*;tansr serve / tansrd 入口安装 drain-exit 策略,acp / mcp-serve / headless / demo 安装 log 策略;旋钮 TANSR_SERVE_ON_UNHANDLED;日志事件 process.unhandled_rejection / process.uncaught_exception / process.drain_failed。自托管 @tansr/serve 的宿主须在入口调 installProcessGuards,否则未处理拒绝按 Node 缺省崩溃(0.6.x 同,无回归)。
加法(公共导出;皆可选,缺席 = 现状)
Section titled “加法(公共导出;皆可选,缺席 = 现状)”
  • AgentSessionFactory.sweepRetention? / AgentSessionFactoryBuild.sweepSessionRetention / sessions.retention 选项 + 5 型 + 2 常量(FX-C-09)。
  • AppTokenMinter.invalidate? / AppTokenMinterStats.invalidations? / CreatePlatformSessionAssemblerOptions.metrics?(FX-C-15)。
  • AssembledSessionModel.onAdjudicationWarning? / PlatformServeSessionFactoryOptions.onDecision?(FX-C-50 审计缝)。
  • AssembledSessionModel.sessionRetentionDays? / AgentSessionRetentionSweepInput.policyFor?(FX-C-09 收尾 M-05;W4 两签名变)。
  • ReplayGapNotice.reason?(FX-C-05)· PermissionReceiptSchema.reason? / PermissionDenyReason / PERMISSION_DENY_REASON(FX-C-22)。
  • ready-frame.ts 7 项 + StartServerOptions.readyFrame?(FX-C-42)· WEBHOOK_SIGNATURE_VERSIONS / DEFAULT_WEBHOOK_SIGNATURE_VERSIONS / signWebhookDelivery / TurnEndNotifierOptions.signatureVersions?(FX-C-43)· V2_ROUTE_TABLE / V2_SESSION_ACTIONS + 型 V2RouteEntry / V2RouteMethod / V2SessionAction(FX-C-45)。
  • installProcessGuards 一族(FX-C-02)· SESSION_STORE_CORE_ENV(FX-C-06)· TOKEN_INVALIDATING_CODES / TOKEN_CHECK_UNAVAILABLE_REASON (FX-C-15;W3 起转出口 sdk 生成件)· ADJUDICATOR_UNAVAILABLE_CODE / ADJUDICATOR_UNAVAILABLE_MESSAGE / DEVELOPER_ONLY_ADJUDICATOR_WARNINGS (FX-C-50)。
  • 指标:tansr_serve_pump_errors_total(FX-C-03)· tansr_serve_token_invalidations_total{reason}(FX-C-15)。日志事件:process.* 三名(FX-C-02)· store.error(FX-C-04)· session.retention_swept(FX-C-09)· bridge.permission_receipt(FX-C-22)。
  • tarball 随附 NOTICE(files +NOTICE;内联第三方 undici / zod-to-json-schema 版本 · 许可 · 许可文本,由 pnpm release:verify-notice 按真构建 metafile 生成,--check 逐字节幂等);运行时外部依赖恒 = package.json dependencies(今日 zod),build.mjs external 由此生成, banner 改口指向 NOTICE(此前误称「唯一第三方依赖 zod」)。pack-serve 守卫 ⓪ verify-notice / ② external 同源 / ④ 白名单 +NOTICE。
配套(CLI 宿主面;详见仓根 CHANGELOG.md)
Section titled “配套(CLI 宿主面;详见仓根 CHANGELOG.md)”
  • tansr serve --v2 / TANSR_SERVE_V2=1 显式挂 /v2 面(缺省关零变;鉴权 = 同一 Bearer + x-tansr-end-user 自报分域)+ 工厂 cwdRebinder 缺省接线(FX-C-46 · W3);acp session/new | load cwd 经同一 kernel 闸(FX-C-44 · W3);tansr serve 入口安装进程守卫(FX-C-02)。
  • 追溯登记(FX-C-25;当时未发回执、无 tag):IO-14 存储出口补齐——createFsBlobStore / createChaosBlobStore / runStorageConformance 及类型经 @tansr/serve 再出口(与 @tansr/sdk@0.11.1 同笔;此前 demo 与第三方适配器被迫直装私有 kernel)。patch 却携新公共导出,按 doc/89 §3.3 0.x 口径应为 minor;误发已成事实,不回收,自 0.7.0 起由发版门 ④ 步机器禁止。发版门首版基线 364 导出即以本版 dist 为准。
  • 无其他行为变化。

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

Section titled “0.6.0 (2026-09-06;随 @tansr/cli 0.4.0 / @tansr/sdk 0.11.0 发版)”
  • 追溯登记:自 0.5.0(2026-09-02,/v2 控制帧四族七名 server.platform.warning 下发端上)以来——会话持久化一期二期(/v2 会话 store / fork / resume)、权限裁决姿态与裁决协议 v4 / 应用协议、音频模态与媒体能力内核化、套餐 plan 端上、MCP 重连契约 v0.21–v0.24;详见 doc/98(/v2 契约)与 doc/49 回执。本文件自 0.7.0 起逐版机器化。