@tansr/sdk 0.13.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -8
- package/dist/index.d.ts +923 -805
- package/dist/index.js +136 -140
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -12554,9 +12554,9 @@ var IRBlockSchema = z.discriminatedUnion("t", [
|
|
|
12554
12554
|
var IRRoleSchema = z.enum(["user", "assistant"]);
|
|
12555
12555
|
var IRMessageMetaSchema = z.object({
|
|
12556
12556
|
/**
|
|
12557
|
-
* 消息种类标记。首值 'compaction_summary' = 压缩摘要消息(
|
|
12558
|
-
*
|
|
12559
|
-
*
|
|
12557
|
+
* 消息种类标记。首值 'compaction_summary' = 压缩摘要消息(防碰撞
|
|
12558
|
+
* 文本哨兵的结构化替代);候选扩值 'pinned'/'synthetic' 随
|
|
12559
|
+
* 对应消费方另行契约评审(先冻结已验证形态)。
|
|
12560
12560
|
*/
|
|
12561
12561
|
kind: z.enum(["compaction_summary"]).optional(),
|
|
12562
12562
|
/** 产生本消息的压缩执行 id(RFC-CTX12-2 compactionId 同源;审计链互指) */
|
|
@@ -12570,11 +12570,11 @@ var IRMessageSchema = z.object({
|
|
|
12570
12570
|
});
|
|
12571
12571
|
var IRSystemSegmentSchema = z.object({
|
|
12572
12572
|
text: z.string(),
|
|
12573
|
-
/** 缓存断点提示——忽略方无害
|
|
12573
|
+
/** 缓存断点提示——忽略方无害 */
|
|
12574
12574
|
cacheable: z.boolean().optional(),
|
|
12575
12575
|
/**
|
|
12576
|
-
* 段语义标签(contract-v0.1
|
|
12577
|
-
*
|
|
12576
|
+
* 段语义标签(contract-v0.1):'base'/'tools'/'env'/'memory' 等,
|
|
12577
|
+
* 供上下文压缩按语义识别可替换段;消费方忽略无害。
|
|
12578
12578
|
*/
|
|
12579
12579
|
label: z.string().optional()
|
|
12580
12580
|
});
|
|
@@ -12597,8 +12597,8 @@ var IRRequestSchema = z.object({
|
|
|
12597
12597
|
maxTokens: z.number().int().positive(),
|
|
12598
12598
|
temperature: z.number().optional(),
|
|
12599
12599
|
/**
|
|
12600
|
-
* thinking 能力位控制;适配器按 provider capability
|
|
12601
|
-
*
|
|
12600
|
+
* thinking 能力位控制;适配器按 provider capability 改写。
|
|
12601
|
+
* `off` 位 = 显式思考关断(fast 形态载体)——
|
|
12602
12602
|
* 与「缺席」语义不同:缺席 = 上游缺省(openai 兼容面思考模型缺省仍开思考,
|
|
12603
12603
|
* UCloud 实证),off = 适配器按方言显式关(twp → params.reasoning='off';
|
|
12604
12604
|
* openai 直连 → enable_thinking:false;anthropic → 不发 thinking 参数)。
|
|
@@ -12610,14 +12610,14 @@ var IRRequestSchema = z.object({
|
|
|
12610
12610
|
}).optional(),
|
|
12611
12611
|
stopSequences: z.array(z.string()).optional(),
|
|
12612
12612
|
/**
|
|
12613
|
-
* 请求级缓存写抑制(contract-v0.8
|
|
12613
|
+
* 请求级缓存写抑制(contract-v0.8):true 时显式缓存适配器
|
|
12614
12614
|
* 不在消息尾落 cache_control 断点(system/工具面断点不受影响)。签发方为
|
|
12615
|
-
* 一次性辅助请求(
|
|
12615
|
+
* 一次性辅助请求(上下文压缩/标题生成)——其消息尾不会被复读,
|
|
12616
12616
|
* 写缓存纯付费无收益。implicit/ignored 缓存模式的适配器忽略本键。
|
|
12617
12617
|
*/
|
|
12618
12618
|
skipCacheWrite: z.boolean().optional(),
|
|
12619
12619
|
/**
|
|
12620
|
-
* 端侧预估的 prompt 侧 token 总量(
|
|
12620
|
+
* 端侧预估的 prompt 侧 token 总量(贴窗防御;加法可选)。
|
|
12621
12621
|
* 语义:请求面(system+messages+tools)装配定格后、发出前的估算值,
|
|
12622
12622
|
* 整数 ≥1(向上取整;api TwpParamsSchema.promptTokensEstimate 同下限)。
|
|
12623
12623
|
* 消费方 = twp 适配器(落 params.promptTokensEstimate,网关侧贴窗拦截,
|
|
@@ -12632,7 +12632,7 @@ var IRUsageSchema = z.object({
|
|
|
12632
12632
|
* 会签):不含 cacheReadInputTokens 与 cacheCreationInputTokens——三路
|
|
12633
12633
|
* 相加 = 请求输入总量。适配器出口恒为本口径:inclusive 端点(OpenAI 系
|
|
12634
12634
|
* prompt_tokens,cached ⊆ prompt)在适配器内减法归一,包含关系以 compat
|
|
12635
|
-
* 实录核证(
|
|
12635
|
+
* 实录核证(见 providers openai/wire.ts exclusiveInputTokens
|
|
12636
12636
|
* 注释)。消费方(上下文账本/CostTracker/状态栏)三路直加,不得再做
|
|
12637
12637
|
* inclusive 换算(防双重矫正)。限界注记:端点的缓存写入量不可见时
|
|
12638
12638
|
* (如 OpenAI Chat 协议无 cache_write 字段),写入量仍含在本键内
|
|
@@ -12644,7 +12644,7 @@ var IRUsageSchema = z.object({
|
|
|
12644
12644
|
cacheCreationInputTokens: z.number().int().nonnegative().optional(),
|
|
12645
12645
|
reasoningOutputTokens: z.number().int().nonnegative().optional(),
|
|
12646
12646
|
/**
|
|
12647
|
-
* 缓存删除量(contract-v0.4
|
|
12647
|
+
* 缓存删除量(contract-v0.4;cached microcompact):
|
|
12648
12648
|
* provider 报告的 cache_deleted_input_tokens——服务端缓存段被逐出/失效的
|
|
12649
12649
|
* 通知量,**非计费维度**(cost-tracker 不入账),上下文账本(context
|
|
12650
12650
|
* ledger)以此校正窗口水位。观测到该字段的适配器填入;缺省不落键。
|
|
@@ -12729,12 +12729,12 @@ var IRStreamEventSchema = z.discriminatedUnion("t", [
|
|
|
12729
12729
|
elapsedMs: z.number().nonnegative()
|
|
12730
12730
|
}).optional(),
|
|
12731
12731
|
/**
|
|
12732
|
-
* 结构化事实位(contract-v0.26
|
|
12732
|
+
* 结构化事实位(contract-v0.26;加法可选):适配器把服务端
|
|
12733
12733
|
* 信封 `error.detail` 中**机器可判、不含身份 / 内部 id** 的事实原样带到归一错误上,
|
|
12734
12734
|
* kernel 透传进 `turn.error.detail`。首个签发方 = providers twp 归一层对平台套餐码
|
|
12735
12735
|
* (`plan_concurrency_exceeded` / `plan_end_users_exceeded` / `plan_required` /
|
|
12736
12736
|
* `plan_tier_insufficient`)落 `{ scope: 'plan' }`——端侧据此把「开发者套餐配额」与
|
|
12737
|
-
* 「模型限流」区分(HTTP
|
|
12737
|
+
* 「模型限流」区分(HTTP 面同键同值;事件流面此前分叉)。缺席 = 无附加事实。
|
|
12738
12738
|
*/
|
|
12739
12739
|
detail: z.record(z.string(), z.unknown()).optional(),
|
|
12740
12740
|
/**
|
|
@@ -12824,7 +12824,7 @@ var EventBodySchema = z2.discriminatedUnion("type", [
|
|
|
12824
12824
|
/** 被移除消息的 index 闭区间 [first, last](原数组坐标) */
|
|
12825
12825
|
removedRange: z2.tuple([z2.number(), z2.number()]),
|
|
12826
12826
|
/**
|
|
12827
|
-
* 被移除消息的精确 index 清单(contract-v0.4
|
|
12827
|
+
* 被移除消息的精确 index 清单(contract-v0.4):pinned
|
|
12828
12828
|
* 挖洞时 removedRange 是外包络,重放/审计按本清单才能精确复原折叠面;
|
|
12829
12829
|
* 表面层折叠计数也应优先取本清单长度。升序;缺省时按 removedRange 连续。
|
|
12830
12830
|
*/
|
|
@@ -12985,9 +12985,9 @@ var EventBodySchema = z2.discriminatedUnion("type", [
|
|
|
12985
12985
|
*/
|
|
12986
12986
|
errorKind: z2.string().optional(),
|
|
12987
12987
|
/**
|
|
12988
|
-
* 结构化事实位(contract-v0.26
|
|
12988
|
+
* 结构化事实位(contract-v0.26;加法可选键):scope='model' 时
|
|
12989
12989
|
* = IR error 事件 `detail` 透传(providers 自服务端信封带出的机器可判事实;首个取值
|
|
12990
|
-
* `{ scope: 'plan' }` = 平台套餐配额拒绝,与 HTTP 面
|
|
12990
|
+
* `{ scope: 'plan' }` = 平台套餐配额拒绝,与 HTTP 面 `error.detail.scope`
|
|
12991
12991
|
* 同键同值)。三端 reducer 归约:`recoverable:true` → `SessionNotice.detail`,失败形 →
|
|
12992
12992
|
* `ErrorView.detail`;端侧 `ErrorEnvelope.scope` 取值器同一读法。缺席 = 无附加事实
|
|
12993
12993
|
* (既有事件体字节零变)。值恒不含 endUser 身份 / 令牌 / 内部 id。
|
|
@@ -12999,7 +12999,7 @@ var EventBodySchema = z2.discriminatedUnion("type", [
|
|
|
12999
12999
|
z2.object({ type: z2.literal("msg.text.delta"), index: z2.number().int(), text: z2.string() }),
|
|
13000
13000
|
z2.object({ type: z2.literal("msg.thinking.delta"), index: z2.number().int(), text: z2.string() }),
|
|
13001
13001
|
z2.object({ type: z2.literal("msg.block.end"), index: z2.number().int() }),
|
|
13002
|
-
/** 撤销已展示的 partial(
|
|
13002
|
+
/** 撤销已展示的 partial(tombstone) */
|
|
13003
13003
|
z2.object({ type: z2.literal("msg.retracted"), index: z2.number().int() }),
|
|
13004
13004
|
// tool.*
|
|
13005
13005
|
z2.object({ type: z2.literal("tool.proposed"), toolCallId: z2.string(), name: z2.string(), args: z2.unknown() }),
|
|
@@ -13010,7 +13010,7 @@ var EventBodySchema = z2.discriminatedUnion("type", [
|
|
|
13010
13010
|
decision: PermissionDecisionSchema,
|
|
13011
13011
|
decisionSource: DecisionSourceSchema,
|
|
13012
13012
|
/**
|
|
13013
|
-
* 命中的规则原文(如 `Shell(git *)`;contract-v0.2
|
|
13013
|
+
* 命中的规则原文(如 `Shell(git *)`;contract-v0.2)。
|
|
13014
13014
|
* 审计链由此可答"哪条规则拒的";模式短路/兜底 ask 等无规则命中时不落键。
|
|
13015
13015
|
*/
|
|
13016
13016
|
matchedRule: z2.string().optional()
|
|
@@ -13023,25 +13023,25 @@ var EventBodySchema = z2.discriminatedUnion("type", [
|
|
|
13023
13023
|
toolCallId: z2.string(),
|
|
13024
13024
|
durationMs: z2.number(),
|
|
13025
13025
|
/**
|
|
13026
|
-
* ToolResult.data 透传位(contract-v0.3
|
|
13026
|
+
* ToolResult.data 透传位(contract-v0.3):工具产出的结构化
|
|
13027
13027
|
* 渲染数据(AGENTS.md「工具只产出结构化数据」铁律的事件流出口)。
|
|
13028
13028
|
* 表面层按工具名注册渲染器消费;无 data 的工具不落键,消费方忽略无害。
|
|
13029
13029
|
*/
|
|
13030
13030
|
data: z2.unknown().optional(),
|
|
13031
13031
|
/**
|
|
13032
|
-
* 模型可见文本投影(contract-v0.8
|
|
13032
|
+
* 模型可见文本投影(contract-v0.8):喂回模型的 tool_result
|
|
13033
13033
|
* 文本(截断后形态)。cc-compat stream-json 包络与 SDK 消费方由此拿到
|
|
13034
13034
|
* 与模型一致的结果文本,不必反推 data;与 data 正交(结构化渲染 vs
|
|
13035
|
-
* 模型文本)
|
|
13035
|
+
* 模型文本)。大结果按工具结果预算截断后的文本为准,不另存全量。
|
|
13036
13036
|
*/
|
|
13037
13037
|
content: z2.string().optional(),
|
|
13038
13038
|
/**
|
|
13039
|
-
* 工具结构化失败位(contract-v0.25
|
|
13039
|
+
* 工具结构化失败位(contract-v0.25):`ToolResult.isError`
|
|
13040
13040
|
* 透传。工具以 **return isError** 表达的业务级失败(非零退出 / 用户中断 / SSRF 拒 /
|
|
13041
13041
|
* 媒体错误形)与 throw 径的 `tool.failed` 在表面层归约为同一 failed 态——此前 TUI /
|
|
13042
|
-
* sdk /
|
|
13042
|
+
* sdk / 端侧对这类结果一律 ✓。缺席 = 旧签发方或成功完成(completed 语义不变);
|
|
13043
13043
|
* 消费方(TUI / sdk / Android / iOS reducer)只判 `isError === true → failed`。
|
|
13044
|
-
* 纯可选加法,包络 `v` 不 bump;端侧 vendored
|
|
13044
|
+
* 纯可选加法,包络 `v` 不 bump;端侧 vendored 同步另行跟进。
|
|
13045
13045
|
*/
|
|
13046
13046
|
isError: z2.boolean().optional()
|
|
13047
13047
|
}),
|
|
@@ -13113,7 +13113,7 @@ var EventBodySchema = z2.discriminatedUnion("type", [
|
|
|
13113
13113
|
usage: IRUsageSchema,
|
|
13114
13114
|
costUsd: z2.number().optional(),
|
|
13115
13115
|
/**
|
|
13116
|
-
* 上下文窗口分母(contract-v0.3
|
|
13116
|
+
* 上下文窗口分母(contract-v0.3):签发方(查询环)从装配层
|
|
13117
13117
|
* 注入的 provider capability.maxContext 透传。状态栏水位 = 最近 prompt
|
|
13118
13118
|
* 规模 / 本值;缺省时表面层隐藏水位段(或回退装配注入的静态值)。
|
|
13119
13119
|
* 随 usage 更新携带——/model 热切换后分母随下一轮事件自动矫正。
|
|
@@ -13130,19 +13130,19 @@ var EventBodySchema = z2.discriminatedUnion("type", [
|
|
|
13130
13130
|
toolUseId: z2.string().optional(),
|
|
13131
13131
|
/**
|
|
13132
13132
|
* 用量目的:非对话主流的模型调用标注来源。词表:'compaction'(上下文
|
|
13133
|
-
*
|
|
13134
|
-
*
|
|
13135
|
-
*
|
|
13136
|
-
*
|
|
13133
|
+
* 压缩轮)/ 'title'(会话标题生成,contract-v0.8
|
|
13134
|
+
* 扩容;辅助任务降档的归因面)/ 'permission_classifier'(LLM 权限
|
|
13135
|
+
* 分类器调用)/ 'memory'(记忆四面 fork:提取/固化/晋升/召回
|
|
13136
|
+
* 选择;随本地记账闭环扩词)。新目的先扩词表再签发
|
|
13137
13137
|
* (自由文本仅兜底);缺省即对话主流。
|
|
13138
13138
|
*
|
|
13139
|
-
*
|
|
13139
|
+
* 词表分叉注记:同一分类器子系统在 request-
|
|
13140
13140
|
* measurement 观测面与 TWP 出线面用词 'classifier'(kernel context/
|
|
13141
13141
|
* request-measurement.ts RequestPurpose、providers twp/contract.ts
|
|
13142
|
-
* TWP_PURPOSE_VALUES
|
|
13142
|
+
* TWP_PURPOSE_VALUES——现为扁平单表,分版常量已退役),与本词表
|
|
13143
13143
|
* 'permission_classifier' 属两套近义词并存;且本词当前全仓零签发方
|
|
13144
13144
|
* (分类器 usage 走遥测与测量面,不落本地 cost 事件)。统一到单一词属
|
|
13145
|
-
*
|
|
13145
|
+
* 契约面决策,待定;届时 kernel cost/tracker.ts KNOWN_COST_PURPOSES
|
|
13146
13146
|
* 须同步,勿单侧改词。
|
|
13147
13147
|
*/
|
|
13148
13148
|
purpose: z2.string().optional()
|
|
@@ -13351,7 +13351,7 @@ var JournalRecordSchema = z3.object({
|
|
|
13351
13351
|
/**
|
|
13352
13352
|
* 尾行完整性(contract-v0.1 修订语义):写入端 v1 恒写 'complete',
|
|
13353
13353
|
* 半行截断检测依靠 Reader 的 JSON 解析失败判定;'partial' 保留给未来
|
|
13354
|
-
* 两阶段写入端,Reader 对尾条 'partial'
|
|
13354
|
+
* 两阶段写入端,Reader 对尾条 'partial' 同样按崩溃残留截断。
|
|
13355
13355
|
*/
|
|
13356
13356
|
completeness: z3.enum(["partial", "complete"])
|
|
13357
13357
|
});
|
|
@@ -13425,8 +13425,7 @@ var InputModalityModeSchema = z4.enum(["supported", "rejected", "silently_droppe
|
|
|
13425
13425
|
var CapabilitySchema = z4.object({
|
|
13426
13426
|
maxContext: z4.number().int().positive(),
|
|
13427
13427
|
/**
|
|
13428
|
-
* 实测质量拐点窗口(tokens
|
|
13429
|
-
* maxOutput/RFC-CTX12-3 同律形态)。可选且**无默认值**——undefined =
|
|
13428
|
+
* 实测质量拐点窗口(tokens;与 maxOutput 同律形态)。可选且**无默认值**——undefined =
|
|
13430
13429
|
* 未实证,消费方沿标称 maxContext(行为零变);声明时装配层窗口合成
|
|
13431
13430
|
* 取 min(maxContext, effectiveContext)(合成恒在装配层单点,kernel
|
|
13432
13431
|
* 冻结面不开位)。数据纪律与 maxOutput 同:手工回填须带公开评测出处,
|
|
@@ -13435,11 +13434,11 @@ var CapabilitySchema = z4.object({
|
|
|
13435
13434
|
effectiveContext: z4.number().int().positive().optional(),
|
|
13436
13435
|
/**
|
|
13437
13436
|
* 单次响应输出上限(tokens;厂商 max_tokens / max_completion_tokens
|
|
13438
|
-
* 限额)。contract-v0.15
|
|
13439
|
-
* undefined = 未知/未实证,消费方自选保守值(压缩输出预算径回退 20K,
|
|
13440
|
-
*
|
|
13441
|
-
*
|
|
13442
|
-
*
|
|
13437
|
+
* 限额)。contract-v0.15:可选且**无默认值**——
|
|
13438
|
+
* undefined = 未知/未实证,消费方自选保守值(压缩输出预算径回退 20K),
|
|
13439
|
+
* 与显式数值(官方文档实证)区分,杜绝编造(hostedTools / quirks
|
|
13440
|
+
* 新键同先例)。数据纪律:内置表回填
|
|
13441
|
+
* 必须带官方出处与查证日期,拿不准的模型宁可不录。
|
|
13443
13442
|
*/
|
|
13444
13443
|
maxOutput: z4.number().int().positive().optional(),
|
|
13445
13444
|
/**
|
|
@@ -13567,7 +13566,7 @@ var CapabilitySchema = z4.object({
|
|
|
13567
13566
|
/** 思考首 token 显著慢的建议超时下限(ms;适配器/重试 watchdog 消费) */
|
|
13568
13567
|
minTimeoutMs: z4.number().int().positive().optional(),
|
|
13569
13568
|
/** max_tokens 限额是否不含 reasoning 预算(doubao true 与 kimi/glm false
|
|
13570
|
-
*
|
|
13569
|
+
* 相反实证;成本预估与截断防御的消费点) */
|
|
13571
13570
|
maxTokensExcludesReasoning: z4.boolean().optional()
|
|
13572
13571
|
}).default({}),
|
|
13573
13572
|
/**
|
|
@@ -13578,7 +13577,7 @@ var CapabilitySchema = z4.object({
|
|
|
13578
13577
|
*/
|
|
13579
13578
|
hostedTools: z4.array(z4.string()).optional(),
|
|
13580
13579
|
/**
|
|
13581
|
-
* contract-v0.4
|
|
13580
|
+
* contract-v0.4:Responses `background:true` 异步任务能力位。
|
|
13582
13581
|
* 同上,可选且无默认值。
|
|
13583
13582
|
*/
|
|
13584
13583
|
background: z4.boolean().optional()
|
|
@@ -13598,7 +13597,7 @@ var PricingSchema = z4.object({
|
|
|
13598
13597
|
/** 峰谷时段倍率(DeepSeek 高峰翻倍) */
|
|
13599
13598
|
peakMultiplier: z4.number().positive().optional(),
|
|
13600
13599
|
/**
|
|
13601
|
-
* contract-v0.5
|
|
13600
|
+
* contract-v0.5:阶梯计价。缺省 undefined = 扁平计价(现状零
|
|
13602
13601
|
* 迁移);声明 tiers 时顶层三价约定为**首档镜像**(文档约定不强 refine)——
|
|
13603
13602
|
* 向前兼容降级语义:无 tiers 感知的旧消费端仍按顶层价近似计费,不炸不偏零。
|
|
13604
13603
|
*/
|
|
@@ -13645,11 +13644,11 @@ var HooksSectionSchema = z4.object({
|
|
|
13645
13644
|
Stop: z4.array(HookGroupSchema).optional(),
|
|
13646
13645
|
SessionEnd: z4.array(HookGroupSchema).optional(),
|
|
13647
13646
|
/**
|
|
13648
|
-
* 权限扩展点两事件(contract-v0.13
|
|
13649
|
-
* 运行期 kernel HOOK_EVENTS
|
|
13647
|
+
* 权限扩展点两事件(contract-v0.13;
|
|
13648
|
+
* 运行期 kernel HOOK_EVENTS 已为八事件,此处规范性描述
|
|
13650
13649
|
* 补齐;词表一致性由 schema × HOOK_EVENTS 锁测试把守):
|
|
13651
13650
|
* - PermissionRequest:ask 终局呈现前的最后收紧缝(只收紧,allow 忽略+告警);
|
|
13652
|
-
* - PermissionDenied:deny 终局后的纯通知缝(
|
|
13651
|
+
* - PermissionDenied:deny 终局后的纯通知缝(结构化响应不消费)。
|
|
13653
13652
|
*/
|
|
13654
13653
|
PermissionRequest: z4.array(HookGroupSchema).optional(),
|
|
13655
13654
|
PermissionDenied: z4.array(HookGroupSchema).optional(),
|
|
@@ -13731,32 +13730,31 @@ var PermissionsSectionSchema = z4.object({
|
|
|
13731
13730
|
*/
|
|
13732
13731
|
disableBaselineProtection: z4.boolean().optional(),
|
|
13733
13732
|
/**
|
|
13734
|
-
* LLM 权限分类器治理位(contract-v0.8 增 enabled
|
|
13735
|
-
* contract-v0.13 增 tightenOutsideAuto/callBudget 并放宽 enabled
|
|
13736
|
-
*
|
|
13733
|
+
* LLM 权限分类器治理位(contract-v0.8 增 enabled;
|
|
13734
|
+
* contract-v0.13 增 tightenOutsideAuto/callBudget 并放宽 enabled 为可选)。
|
|
13735
|
+
* 环境变量 TANSR_PERMISSION_CLASSIFIER /
|
|
13737
13736
|
* TANSR_CLASSIFIER_TIGHTEN_OUTSIDE_AUTO / TANSR_CLASSIFIER_BUDGET 保留为
|
|
13738
|
-
* 最高优先覆盖(逐键接管)。仅 user/managed 层被尊重(
|
|
13737
|
+
* 最高优先覆盖(逐键接管)。仅 user/managed 层被尊重(分类器属
|
|
13739
13738
|
* 用户/企业的信任与成本决策,项目层声明整段忽略+示警)。
|
|
13740
13739
|
* 史注:TANSR_CLASSIFIER_ALLOW_UNQUALIFIED(资格越过)曾刻意不进配置
|
|
13741
|
-
* (break-glass 性质恒 env-only)
|
|
13742
|
-
* 任命即授照后无「未达资格」可越)。
|
|
13740
|
+
* (break-glass 性质恒 env-only),已整体退役(任命即授照后无「未达资格」可越)。
|
|
13743
13741
|
*/
|
|
13744
13742
|
classifier: z4.object({
|
|
13745
13743
|
enabled: z4.boolean().optional(),
|
|
13746
|
-
/** 非 auto 模式也咨询分类器(只收紧:unsafe→deny,safe 恒维持 ask
|
|
13744
|
+
/** 非 auto 模式也咨询分类器(只收紧:unsafe→deny,safe 恒维持 ask) */
|
|
13747
13745
|
tightenOutsideAuto: z4.boolean().optional(),
|
|
13748
13746
|
/** 每会话咨询预算:≥1 改上限 / 'off' 不限;缺席用内核缺省 */
|
|
13749
13747
|
callBudget: z4.union([z4.number().int().min(1), z4.literal("off")]).optional()
|
|
13750
13748
|
}).optional(),
|
|
13751
13749
|
/**
|
|
13752
|
-
* 出厂规则包装载开关(contract-v0.13
|
|
13750
|
+
* 出厂规则包装载开关(contract-v0.13;出厂包的契约形态)。
|
|
13753
13751
|
* 缺省 true(装载);false = 卸载。env TANSR_RECOMMENDED_RULES 保留为最高
|
|
13754
13752
|
* 优先覆盖(精确 '0' 卸载)。仅 user/managed 层被尊重(卸出厂 ask 包属
|
|
13755
13753
|
* 扩权向,项目层声明忽略+示警)。
|
|
13756
13754
|
*/
|
|
13757
13755
|
recommendedRules: z4.boolean().optional(),
|
|
13758
13756
|
/**
|
|
13759
|
-
* 项目 ask 注意力预算(contract-v0.13
|
|
13757
|
+
* 项目 ask 注意力预算(contract-v0.13;kernel ask 预算的契约形态)。
|
|
13760
13758
|
* ≥1 = 每会话项目来源询问上限(缺省 10);'off' = 关闭(回到逐条询问)。
|
|
13761
13759
|
* env TANSR_PROJECT_ASK_BUDGET 保留为最高优先覆盖。仅 user/managed 层被
|
|
13762
13760
|
* 尊重(预算防的就是项目层提示风暴,项目自调即越界)。
|
|
@@ -13848,13 +13846,13 @@ var TansrConfigSchema = z4.object({
|
|
|
13848
13846
|
fallbacks: z4.record(z4.array(z4.string())).default({}),
|
|
13849
13847
|
locale: z4.string().optional(),
|
|
13850
13848
|
/**
|
|
13851
|
-
* 生命周期 hooks(contract-v0.3
|
|
13849
|
+
* 生命周期 hooks(contract-v0.3)。分层合并语义特殊:不走深合并,
|
|
13852
13850
|
* 由 kernel 逐层抽取(条目按层优先级稳定排序、跨层同构去重、managed 控制
|
|
13853
13851
|
* 位治理),详见 kernel hooks/config.ts。
|
|
13854
13852
|
*/
|
|
13855
13853
|
hooks: HooksSectionSchema.optional(),
|
|
13856
13854
|
/**
|
|
13857
|
-
* MCP 服务器清单(contract-v0.4
|
|
13855
|
+
* MCP 服务器清单(contract-v0.4)。分层合并语义特殊:不走深合并,
|
|
13858
13856
|
* 由 kernel 逐层抽取(跨层同名高层胜 + 信任门分层归因),详见 kernel
|
|
13859
13857
|
* tools/mcp/config.ts 与 cli assembly/mcp-trust.ts。
|
|
13860
13858
|
*/
|
|
@@ -13887,7 +13885,7 @@ var TansrConfigSchema = z4.object({
|
|
|
13887
13885
|
audit: AuditSectionSchema.optional(),
|
|
13888
13886
|
/** 策略包验签信任(contract-v0.8,RFC-OPT11-2);仅 managed 层被尊重 */
|
|
13889
13887
|
policy: PolicySectionSchema.optional(),
|
|
13890
|
-
/** Shell 沙箱(contract-v0.8
|
|
13888
|
+
/** Shell 沙箱(contract-v0.8);kernel 合并前抽取:user / managed 被尊重,项目层忽略,env 对 managed 只收紧 */
|
|
13891
13889
|
sandbox: SandboxSectionSchema.optional(),
|
|
13892
13890
|
/** 工作区信任治理(contract-v0.8,RFC-OPT12-2);仅 managed 层被尊重 */
|
|
13893
13891
|
workspaceTrust: WorkspaceTrustSectionSchema.optional(),
|
|
@@ -18044,27 +18042,27 @@ var ContextManager = class {
|
|
|
18044
18042
|
return this.#thresholds;
|
|
18045
18043
|
}
|
|
18046
18044
|
/**
|
|
18047
|
-
* 附件注册表观测快照(只读;/context
|
|
18048
|
-
*
|
|
18045
|
+
* 附件注册表观测快照(只读;/context 展示与压缩诊断,不属于七接口)。
|
|
18046
|
+
* 完整快照(在场附件数/逐条 TTL 剩余/估算 tokens/预算),
|
|
18049
18047
|
* 旧形态 {round, injectedBytes} 是其结构子集,消费方零迁移。
|
|
18050
18048
|
*/
|
|
18051
18049
|
get attachmentStats() {
|
|
18052
18050
|
return this.#attachments.snapshot();
|
|
18053
18051
|
}
|
|
18054
|
-
/**
|
|
18052
|
+
/** nothing_to_compact no-op 累计(只读观测;压缩生命周期埋点消费) */
|
|
18055
18053
|
get noopCompactCount() {
|
|
18056
18054
|
return this.#noopCompactCount;
|
|
18057
18055
|
}
|
|
18058
18056
|
/**
|
|
18059
|
-
*
|
|
18060
|
-
*
|
|
18057
|
+
* EWMA 校准因子(只读观测;1 = 未校准或刚重置)。
|
|
18058
|
+
* bucketedCalibration 门开时标量路径不更新(恒 1),分桶态看 calibrationState()。
|
|
18061
18059
|
*/
|
|
18062
18060
|
get calibrationFactor() {
|
|
18063
18061
|
return this.#calibrationFactor;
|
|
18064
18062
|
}
|
|
18065
18063
|
/**
|
|
18066
|
-
*
|
|
18067
|
-
* 门关:buckets 恒空数组 + factor = 标量因子(
|
|
18064
|
+
* 校准态快照(只读观测;/context 展示与锁测消费)。
|
|
18065
|
+
* 门关:buckets 恒空数组 + factor = 标量因子(单标量 EWMA 现状态)。
|
|
18068
18066
|
*/
|
|
18069
18067
|
calibrationState() {
|
|
18070
18068
|
return {
|
|
@@ -18077,13 +18075,13 @@ var ContextManager = class {
|
|
|
18077
18075
|
lastBucket: this.#lastBucket
|
|
18078
18076
|
};
|
|
18079
18077
|
}
|
|
18080
|
-
/**
|
|
18078
|
+
/** 跨 manager 重建搬运出口(driver 切方案携带;切模不携带) */
|
|
18081
18079
|
exportCalibration() {
|
|
18082
18080
|
return this.calibrationState();
|
|
18083
18081
|
}
|
|
18084
18082
|
/**
|
|
18085
|
-
*
|
|
18086
|
-
*
|
|
18083
|
+
* 搬运入口:**仅门开时生效**(门关 no-op——基线标量路径的
|
|
18084
|
+
* 重建归零语义是既定行为,导入会构成漂移)。因子按钳制域收
|
|
18087
18085
|
* 口、观测数取非负整数(防手工快照越界);配对基线不搬(旧测量对旧
|
|
18088
18086
|
* 历史,新实例首次 measure 自然重建)。
|
|
18089
18087
|
*/
|
|
@@ -18098,29 +18096,29 @@ var ContextManager = class {
|
|
|
18098
18096
|
this.#lastBucket = snapshot.lastBucket;
|
|
18099
18097
|
}
|
|
18100
18098
|
/**
|
|
18101
|
-
*
|
|
18099
|
+
* 登记压缩后必须失效/重置的外部派生态(装配层调用;如
|
|
18102
18100
|
* reminder 首屏差分基线)。压缩成功后按「内置清单 → 登记序」统一执行;
|
|
18103
18101
|
* run 抛错被吞(fail-open),不影响压缩收尾与其余清单项。
|
|
18104
18102
|
*/
|
|
18105
18103
|
registerPostCompactInvalidation(entry) {
|
|
18106
18104
|
this.#postCompactInvalidations.push(entry);
|
|
18107
18105
|
}
|
|
18108
|
-
/**
|
|
18106
|
+
/** 失效清单登记名快照(观测/锁测断言;含内置三件) */
|
|
18109
18107
|
get postCompactInvalidationIds() {
|
|
18110
18108
|
return this.#postCompactInvalidations.map((entry) => entry.id);
|
|
18111
18109
|
}
|
|
18112
18110
|
/**
|
|
18113
|
-
*
|
|
18111
|
+
* 派生态失效清单的公开执行入口(统一应用器消费:非 baseline
|
|
18114
18112
|
* 策略的历史折叠变换应用后,由应用器调用本方法统一失效锚点/附件签名/
|
|
18115
18113
|
* 校准态与外部登记项)。baseline 的 compact/microcompact 路径**不经**
|
|
18116
18114
|
* 本入口——manager 内建执行时序在 measurementAfter 之前(压缩后测量
|
|
18117
18115
|
* 必须基于失效后的干净状态),应用器侧重复执行会清空刚建立的校准配对
|
|
18118
|
-
* 基线(
|
|
18116
|
+
* 基线(校准链漂移),故 baseline 变换标记 invalidations='strategy'。
|
|
18119
18117
|
*/
|
|
18120
18118
|
runPostCompactInvalidations() {
|
|
18121
18119
|
this.#runPostCompactInvalidations();
|
|
18122
18120
|
}
|
|
18123
|
-
/**
|
|
18121
|
+
/** 清单统一执行(仅压缩成功路径调用;逐项 fail-open) */
|
|
18124
18122
|
#runPostCompactInvalidations() {
|
|
18125
18123
|
for (const entry of this.#postCompactInvalidations) {
|
|
18126
18124
|
try {
|
|
@@ -18130,7 +18128,7 @@ var ContextManager = class {
|
|
|
18130
18128
|
}
|
|
18131
18129
|
}
|
|
18132
18130
|
/**
|
|
18133
|
-
*
|
|
18131
|
+
* 屏障点计时(半开熔断的时基):查询环每个压缩屏障点调用一次。
|
|
18134
18132
|
* 熔断压制期间每计满 AUTO_COMPACT_HALF_OPEN_BARRIERS 个屏障,assess 放行
|
|
18135
18133
|
* 一次探测压缩(成功清零熔断计数恢复正常,失败继续压制);任何 auto 压缩
|
|
18136
18134
|
* 尝试(含探测与 no-op)都会清零本计时,压制期的失败信息因此有界
|
|
@@ -18141,7 +18139,7 @@ var ContextManager = class {
|
|
|
18141
18139
|
this.#barrierSeq += 1;
|
|
18142
18140
|
}
|
|
18143
18141
|
/**
|
|
18144
|
-
*
|
|
18142
|
+
* 观测缝只读出口:查询环/空闲直压据此把 observer 交给统一
|
|
18145
18143
|
* 应用器(成功结局签发)与工具结果收束缝(clamp 计数)。外部注入 manager
|
|
18146
18144
|
* 形态下构造方持有的观测缝经此对查询环可达。
|
|
18147
18145
|
*/
|
|
@@ -18162,11 +18160,11 @@ var ContextManager = class {
|
|
|
18162
18160
|
this.#updateCacheHitRatio(entry.usage);
|
|
18163
18161
|
this.#attachments.advanceRound();
|
|
18164
18162
|
}
|
|
18165
|
-
/**
|
|
18163
|
+
/** 请求观测与固定面使用同一基础估算器,尤其外部注入manager时。 */
|
|
18166
18164
|
get requestEstimator() {
|
|
18167
18165
|
return this.#estimator;
|
|
18168
18166
|
}
|
|
18169
|
-
/**
|
|
18167
|
+
/** 主模型/客户端绑定改变时旧tokenizer观测不能沿用。 */
|
|
18170
18168
|
bindRequestModel(model, client) {
|
|
18171
18169
|
const key2 = JSON.stringify(model);
|
|
18172
18170
|
if (this.#requestBinding !== void 0 && (this.#requestBinding.client !== client || this.#requestBinding.model !== key2)) {
|
|
@@ -18197,7 +18195,7 @@ var ContextManager = class {
|
|
|
18197
18195
|
this.#ledger.discardSentRequest(receipt);
|
|
18198
18196
|
}
|
|
18199
18197
|
/**
|
|
18200
|
-
*
|
|
18198
|
+
* 请求固定输入(如 system 段)变化后,旧权威 usage 不再代表当前前缀。
|
|
18201
18199
|
* 只失效测量锚点和待配对校准基线,使下一次 measure 全量计入新 system;
|
|
18202
18200
|
* 已学习密度因子、累计用量、附件/TTL、历史 pin、压缩熔断均保留。
|
|
18203
18201
|
* 不等同历史压缩,不能运行 postCompact 失效清单;调用方须先判断实际输入已变化,
|
|
@@ -18207,7 +18205,7 @@ var ContextManager = class {
|
|
|
18207
18205
|
this.#ledger.resetAnchor();
|
|
18208
18206
|
}
|
|
18209
18207
|
/**
|
|
18210
|
-
*
|
|
18208
|
+
* 缓存命中率 EWMA(观测口径见模块常量注释)。分母 =
|
|
18211
18209
|
* 权威输入合计(input+cacheRead+cacheCreation,与校准闭环同一口径);
|
|
18212
18210
|
* 非正分母(空轮防御)跳过观测。首个观测直接落座(无先验不掺水)。
|
|
18213
18211
|
*/
|
|
@@ -18219,7 +18217,7 @@ var ContextManager = class {
|
|
|
18219
18217
|
this.#cacheHitRatio = this.#cacheHitRatio === null ? observed2 : CACHE_HIT_EWMA_ALPHA * observed2 + (1 - CACHE_HIT_EWMA_ALPHA) * this.#cacheHitRatio;
|
|
18220
18218
|
}
|
|
18221
18219
|
/**
|
|
18222
|
-
*
|
|
18220
|
+
* 当前缓存命中率 EWMA 只读出口(null = 尚无观测)。消费方:
|
|
18223
18221
|
* baseline 策略缓存感知门 + microcompact 观测材料。
|
|
18224
18222
|
*/
|
|
18225
18223
|
cacheHitRatio() {
|
|
@@ -18227,10 +18225,10 @@ var ContextManager = class {
|
|
|
18227
18225
|
}
|
|
18228
18226
|
// ———— 接口 2:measure(§3.6① 出账) ————
|
|
18229
18227
|
/**
|
|
18230
|
-
* 测量当前上下文占用:锚点权威计量 +
|
|
18231
|
-
*
|
|
18228
|
+
* 测量当前上下文占用:锚点权威计量 + 本地估算尾部,六路分解。
|
|
18229
|
+
* 消息尾部经校准因子微调,system/tools 保持基础估算。
|
|
18232
18230
|
* 本次测量独立留基线,实际发送方 prepareSentRequest 后才可配对 usage。
|
|
18233
|
-
*
|
|
18231
|
+
* bucketedCalibration 门开:估算前按 ledger 同一锚点判定取尾部范围并归桶
|
|
18234
18232
|
* (classifyTailBucket),应用缝随之切到该桶因子;基线记录归桶与锚点
|
|
18235
18233
|
* 口径供观测入账。门关零触碰(#lastBucket 不更新,分桶 Map 恒空)。
|
|
18236
18234
|
*/
|
|
@@ -18256,7 +18254,7 @@ var ContextManager = class {
|
|
|
18256
18254
|
return measurement;
|
|
18257
18255
|
}
|
|
18258
18256
|
/**
|
|
18259
|
-
*
|
|
18257
|
+
* 请求装配后新增尾材料的只读计额。只比较受影响尾消息,
|
|
18260
18258
|
* 使用当前测量已选定的校准因子;不刷新桶/配对基线/锚点,也不全量 measure。
|
|
18261
18259
|
* before 缺席表示新增一条消息,按账本同口径包含消息定额。
|
|
18262
18260
|
*/
|
|
@@ -18371,7 +18369,7 @@ var ContextManager = class {
|
|
|
18371
18369
|
// ———— 接口 3:assess(§3.6②⑤ 阈值评估) ————
|
|
18372
18370
|
/**
|
|
18373
18371
|
* 水位评估:测量 → 阈值代数 → 区带/触发建议;熔断中压制自动压缩建议。
|
|
18374
|
-
*
|
|
18372
|
+
* 半开探测:压制期间每隔 AUTO_COMPACT_HALF_OPEN_BARRIERS 个屏障点
|
|
18375
18373
|
* (noteBarrier 计时)放行一次探测压缩——探测成功由 compact 清零计数
|
|
18376
18374
|
* 恢复正常,失败继续压制。本方法只读(计时推进在 noteBarrier/compact)。
|
|
18377
18375
|
*/
|
|
@@ -18379,13 +18377,13 @@ var ContextManager = class {
|
|
|
18379
18377
|
return this.assessMeasurement(this.measure(view));
|
|
18380
18378
|
}
|
|
18381
18379
|
/**
|
|
18382
|
-
*
|
|
18380
|
+
* 以既有测量做阈值评估(不重新 measure):同一
|
|
18383
18381
|
* 屏障内 microcompact 之后的 compact 判定复用其 measurementAfter,消除
|
|
18384
18382
|
* 「同屏障二次全量估算」——第二次估算与淘汰选量投影可能相互矛盾,
|
|
18385
18383
|
* 淘汰刚回收完又立刻整体压缩的同屏障双压由此根治。熔断/半开语义与
|
|
18386
18384
|
* assess 完全一致(同为只读;计时推进在 noteBarrier/compact)。
|
|
18387
|
-
*
|
|
18388
|
-
* 「低置信留更大边际」——桶内观测不足时尾部估算加临时边际,宁可早压
|
|
18385
|
+
* bucketedCalibration 门开:水位判定按 contextTokens + 置信度安全边际
|
|
18386
|
+
* (「低置信留更大边际」——桶内观测不足时尾部估算加临时边际,宁可早压
|
|
18389
18387
|
* 不越界;观测饱和边际归零)。边际只进决策,measurement 如实不动;
|
|
18390
18388
|
* 明细随 assessment.calibration 在场。门关零漂移(边际恒缺席)。
|
|
18391
18389
|
*/
|
|
@@ -18486,8 +18484,7 @@ var ContextManager = class {
|
|
|
18486
18484
|
* 预算语义,恒不提醒;autoCompactAt < 启用下限(20K)同样恒不提醒——
|
|
18487
18485
|
* 提醒自身 ~100 tokens,极小预算下注入本身即可观挤兑(玩具窗实测把
|
|
18488
18486
|
* 水位推回压缩线引发压缩连锁),成本占比论证见 entry-budgets 常量注释。
|
|
18489
|
-
* 占用入参由查询环钳制点透传(同屏障同一测量,不新增 measure
|
|
18490
|
-
* T-CTX13-② 口径纪律)。
|
|
18487
|
+
* 占用入参由查询环钳制点透传(同屏障同一测量,不新增 measure 调用)。
|
|
18491
18488
|
*/
|
|
18492
18489
|
takeContextBudgetReminder(contextTokens) {
|
|
18493
18490
|
const budget = this.#thresholds.autoCompactAt;
|
|
@@ -18504,7 +18501,7 @@ var ContextManager = class {
|
|
|
18504
18501
|
);
|
|
18505
18502
|
return { tier, remainingTokens };
|
|
18506
18503
|
}
|
|
18507
|
-
/**
|
|
18504
|
+
/** 预算提醒两档复位(压缩/硬截断成功 = 预算新纪元) */
|
|
18508
18505
|
#resetBudgetReminderTiers() {
|
|
18509
18506
|
this.#budgetReminderFired.low = false;
|
|
18510
18507
|
this.#budgetReminderFired.critical = false;
|
|
@@ -18513,9 +18510,9 @@ var ContextManager = class {
|
|
|
18513
18510
|
/**
|
|
18514
18511
|
* 标记消息为 pinned:压缩时其所在完整 round 整体保留(round 粒度,保配对)。
|
|
18515
18512
|
*
|
|
18516
|
-
*
|
|
18517
|
-
* 换新对象即丢标——microcompact 存根替换径已明文豁免 pinned(
|
|
18518
|
-
*
|
|
18513
|
+
* **对象身份契约**:pin 按消息对象引用标记(WeakSet),
|
|
18514
|
+
* 换新对象即丢标——microcompact 存根替换径已明文豁免 pinned(pin 承诺完整
|
|
18515
|
+
* 保留,见 #microcompact planOptions);但查询环 meta 合并径(run-query 末条
|
|
18519
18516
|
* user 消息整体换新对象)未防,**末条 user 消息的 pin 可能因 meta 合并
|
|
18520
18517
|
* 静默失效**。现状 pin()/unpin() 无生产调用方(全仓仅测试),按设计债
|
|
18521
18518
|
* 登记不改行为;若未来接线生产消费方,改法二选一:meta 合并改就地追加
|
|
@@ -18534,7 +18531,7 @@ var ContextManager = class {
|
|
|
18534
18531
|
/**
|
|
18535
18532
|
* 手动锚点登记(/pin <text>):过短/空文本返回 null;重复登记升级为
|
|
18536
18533
|
* 手动源(用户显式确认抽取锚点)并回报 duplicate=true。新鲜度取当前
|
|
18537
|
-
* 会话 round;估算用 base 估算器(
|
|
18534
|
+
* 会话 round;估算用 base 估算器(登记时一次性,与附件注册表同纪律)。
|
|
18538
18535
|
*/
|
|
18539
18536
|
pinAnchor(text) {
|
|
18540
18537
|
return this.#anchors.pin(
|
|
@@ -18656,15 +18653,15 @@ var ContextManager = class {
|
|
|
18656
18653
|
* 执行一次压缩:制定 round 粒度计划 → 注入的 ModelClient 打一轮完整
|
|
18657
18654
|
* API round → 产出摘要消息、压缩后消息数组与 session.compacted 所需数据。
|
|
18658
18655
|
* 成功后:测量锚点重置(旧 anchorIndex 失效)、附件签名清空(引用目标
|
|
18659
|
-
* 已被摘要替换)
|
|
18656
|
+
* 已被摘要替换)、自动熔断计数清零、校准态重置。失败(含无
|
|
18660
18657
|
* 可压缩)不改动任何输入。
|
|
18661
|
-
*
|
|
18658
|
+
* 观测缝:观测材料(CompactionObservation)恒随 outcome
|
|
18662
18659
|
* 返回;**成功结局的 started/finished 由统一应用器签发**(折叠效果的
|
|
18663
18660
|
* 必经之门),失败/no-op 结局不经应用器、保留本方法返回面签发(回调
|
|
18664
18661
|
* 异常吞掉,fail-open 不影响压缩主链)。直调本方法的消费方(不经应用器)
|
|
18665
18662
|
* 对成功结局自行消费 outcome.observation。
|
|
18666
18663
|
*
|
|
18667
|
-
*
|
|
18664
|
+
* **非重入契约**:compact/microcompact 的 await 窗口
|
|
18668
18665
|
* 无重入护栏——并发调用会交错破坏账本/校准基线/派生态失效清单的时序。
|
|
18669
18666
|
* 互斥责任在装配层:查询环屏障点单点调用、空闲直压与查询环互斥(driver
|
|
18670
18667
|
* 纪律),现状全部调用面守住。第三方直调本 API 须自行保证同一实例上
|
|
@@ -25658,35 +25655,35 @@ var PermissionEngine = class {
|
|
|
25658
25655
|
/** 规则编译结果按 cwd 缓存(路径模式的相对锚定依赖 cwd) */
|
|
25659
25656
|
compiledByCwd = /* @__PURE__ */ new Map();
|
|
25660
25657
|
sessionCache = [];
|
|
25661
|
-
/** 已装载 PolicyBundle 清单(
|
|
25658
|
+
/** 已装载 PolicyBundle 清单(装载可观测性的事实源) */
|
|
25662
25659
|
loadedBundles = [];
|
|
25663
25660
|
/** 内置安全基线(OPT-04;关闭时两组皆空,判定段整体短路) */
|
|
25664
25661
|
baselineDeny;
|
|
25665
25662
|
baselineExceptions;
|
|
25666
|
-
/**
|
|
25663
|
+
/** 灾难基线(与基线同开关):bypass 分支单独匹配,命中转 ask */
|
|
25667
25664
|
disasterBaselineDeny;
|
|
25668
|
-
/** protected paths(
|
|
25665
|
+
/** protected paths(与基线同开关;家目录不可规范解析时仅剩段保护) */
|
|
25669
25666
|
protectedPathsEnabled;
|
|
25670
25667
|
homeCanonical;
|
|
25671
25668
|
/** TMEM/1 carve-out(4.95 段):canonical + 大小写折叠后的记忆目录集;空集 = 缝不在场 */
|
|
25672
25669
|
memoryCarveOutDirs;
|
|
25673
25670
|
memoryCarveOutCaseInsensitive;
|
|
25674
|
-
/** hard-safety 追加面(
|
|
25671
|
+
/** hard-safety 追加面(内置子集恒启用,本配置只追加 egress/审计目录) */
|
|
25675
25672
|
hardSafetyConfig;
|
|
25676
|
-
/** 会话污点(
|
|
25673
|
+
/** 会话污点(跨调用窄实现):秘密面被读取后置真,egress/publish 恒 ask */
|
|
25677
25674
|
secretTainted = false;
|
|
25678
25675
|
/** LLM 权限分类器(OPT-18;缺省不注入 = 无分类器路径) */
|
|
25679
25676
|
classifierConfig;
|
|
25680
|
-
/** 分类器熔断状态(
|
|
25677
|
+
/** 分类器熔断状态(3 连拒 30min 冷却 / 会话累计 20 拒停用) */
|
|
25681
25678
|
classifierDenyTotal = 0;
|
|
25682
25679
|
classifierDenyStreak = 0;
|
|
25683
25680
|
classifierBreakerUntil = null;
|
|
25684
25681
|
/** 累计跳闸次数(K19f 指标口;人工复位不清零——历史是历史) */
|
|
25685
25682
|
classifierTripCount = 0;
|
|
25686
|
-
/** 分类器咨询预算记账(
|
|
25683
|
+
/** 分类器咨询预算记账(计实际模型咨询;耗尽后直通 ask) */
|
|
25687
25684
|
classifierConsultCount = 0;
|
|
25688
25685
|
classifierBudgetNotified = false;
|
|
25689
|
-
/** 分类器窄缓存(
|
|
25686
|
+
/** 分类器窄缓存(仅只读输入的 safe 裁定;键全字段) */
|
|
25690
25687
|
classifierCache = /* @__PURE__ */ new Map();
|
|
25691
25688
|
classifierCacheHits = 0;
|
|
25692
25689
|
classifierCacheMisses = 0;
|
|
@@ -25743,7 +25740,7 @@ var PermissionEngine = class {
|
|
|
25743
25740
|
return removed;
|
|
25744
25741
|
}
|
|
25745
25742
|
/**
|
|
25746
|
-
* 装载 PolicyBundle 规则集为 policy 层规则(
|
|
25743
|
+
* 装载 PolicyBundle 规则集为 policy 层规则(集中策略分发接缝)。
|
|
25747
25744
|
*
|
|
25748
25745
|
* - 验证不通过(rejected/unsupported)或 meta.id 已装载过的 bundle
|
|
25749
25746
|
* 整体跳过,返回值携带原因(装载可观测性);
|
|
@@ -25992,7 +25989,7 @@ var PermissionEngine = class {
|
|
|
25992
25989
|
return { decision: "ask", source: "mode" };
|
|
25993
25990
|
}
|
|
25994
25991
|
/**
|
|
25995
|
-
* R0 Shell 只读判定(
|
|
25992
|
+
* R0 Shell 只读判定(管线 7.5 段与 plan 豁免共用)。返回:
|
|
25996
25993
|
* - allow(source='builtin',matchedRule=`read-only(<段标签>)`):结构
|
|
25997
25994
|
* 入围且探针全过;
|
|
25998
25995
|
* - deny(source='builtin',matchedRule=`read-only-probe(<实参>)`):结构
|
|
@@ -26056,25 +26053,25 @@ var PermissionEngine = class {
|
|
|
26056
26053
|
return resolved.kind === "ok" ? resolved.path : null;
|
|
26057
26054
|
}
|
|
26058
26055
|
/**
|
|
26059
|
-
* LLM 分类器终裁口(
|
|
26056
|
+
* LLM 分类器终裁口(contract-v0.8 auto 模式起):
|
|
26060
26057
|
* - base 非 ask 或未注入分类器 → **同步**原样返回(零开销直通,调用方的
|
|
26061
26058
|
* 同步快路径不受影响;auto 未注入分类器时,快路径外的输入与 default
|
|
26062
26059
|
* 逐字节一致——工作区快路径本身在 decide 内,不依赖分类器);
|
|
26063
|
-
* - **auto-only
|
|
26060
|
+
* - **auto-only 缺省**:非 auto 模式同步直通 ask——询问面本就有
|
|
26064
26061
|
* 人裁,不花模型钱;`tightenOutsideAuto=true` 才咨询,且只收紧
|
|
26065
26062
|
* (softenToAllow 非 auto 恒 false,safe 维持 ask);
|
|
26066
|
-
* -
|
|
26063
|
+
* - **窄缓存**:只读输入的 safe 裁定按全字段键复用
|
|
26067
26064
|
* (免咨询;资格守卫仍每次现算);写改类输入不查不存;
|
|
26068
|
-
* -
|
|
26065
|
+
* - **调用预算**:实际模型咨询计数达 callBudget(缺省 200)后
|
|
26069
26066
|
* 同步直通 ask(超限改询问;onBudgetExhausted 单次上报);
|
|
26070
|
-
* -
|
|
26067
|
+
* - **熔断先行**:分类器 reject 连续 3 次 → 30min
|
|
26071
26068
|
* 冷却(期满自动复位,连拒计数清零);会话累计 20 次 → 本会话停用。
|
|
26072
26069
|
* 记账按裁决人 reject 计,与 rejectEffect 落地形无关(doc/113)。熔断
|
|
26073
26070
|
* 期间同步原样返回 ask(交回询问面;headless 按既有语义降 deny)。
|
|
26074
26071
|
* 跳闸时经 config.onBreakerTrip 单次上报(内核零 IO);任何非 reject 的
|
|
26075
26072
|
* 咨询终局(safe/unsure/超时/抛错)都会清零连拒计数——期间用户注意力
|
|
26076
|
-
* 已经或即将介入;人工恢复口见 resetClassifierBreaker
|
|
26077
|
-
* 「批准即恢复」:两档皆复位,仅交互面用户显式批准后可调);
|
|
26073
|
+
* 已经或即将介入;人工恢复口见 resetClassifierBreaker
|
|
26074
|
+
* (「批准即恢复」:两档皆复位,仅交互面用户显式批准后可调);
|
|
26078
26075
|
* - base 为 ask 且注入了分类器 → 异步咨询:
|
|
26079
26076
|
* · `unsafe` → 收紧,source 记 'classifier'(RFC-OPT18-3 专属审计归因),
|
|
26080
26077
|
* matchedRule 保留,**reason 携带分类器理由**;落地形按
|
|
@@ -26083,7 +26080,7 @@ var PermissionEngine = class {
|
|
|
26083
26080
|
* 终审(询问面缺席由调度器地板降 deny)——收紧在**一切模式**下生效
|
|
26084
26081
|
* (OPT-18 既有机制语义不变);
|
|
26085
26082
|
* · `safe` → 仅 auto 模式(RFC-OPT18-1)且**生效资格档半径覆盖该调用
|
|
26086
|
-
* 面**时(
|
|
26083
|
+
* 面**时(SOFTEN_RADIUS[resolveTier()][face],档位
|
|
26087
26084
|
* 解析闭包每次咨询现算)放行为 allow,source 记 'classifier',reason
|
|
26088
26085
|
* 同携带;且须通过与模式放行同级的资格守卫(目标可解析、路径非
|
|
26089
26086
|
* UNC、内置基线复查不命中——ask 规则命中时管线 4.5 段未评估,
|
|
@@ -26092,7 +26089,7 @@ var PermissionEngine = class {
|
|
|
26092
26089
|
* 松动,且 deny 规则/基线永不受软化——deny 路径根本不进本方法);
|
|
26093
26090
|
* · `unsure`/超时/抛错 → 维持 ask 原样(fail-degrade,不改变既有语义)。
|
|
26094
26091
|
* - Shell 工具附命令结构树(command-structure.ts);注入了 transcript
|
|
26095
|
-
* 提供器且切片非空时附当前轮用户请求(
|
|
26092
|
+
* 提供器且切片非空时附当前轮用户请求(注入防御语义见 classifier.ts)。
|
|
26096
26093
|
* - 模式在咨询发起时定格(异步窗口内 setMode 不追溯本次终裁)。
|
|
26097
26094
|
*/
|
|
26098
26095
|
consultClassifier(input, base) {
|
|
@@ -26125,7 +26122,7 @@ var PermissionEngine = class {
|
|
|
26125
26122
|
return this.adjudicateByClassifier(input, base, this.classifierConfig, softenToAllow, cacheKey);
|
|
26126
26123
|
}
|
|
26127
26124
|
/**
|
|
26128
|
-
*
|
|
26125
|
+
* 共享咨询预算消耗口:权限分类器与派生裁决查询
|
|
26129
26126
|
* **共用同一预算池**(callBudget 上限 + 同一计数器)——两类模型咨询
|
|
26130
26127
|
* 合计不超预算,避免两个口子各自失控。false = 预算耗尽(调用方按各自
|
|
26131
26128
|
* 方向安全语义降级:分类器直通 ask,裁决查询结构性 escalate);耗尽
|
|
@@ -26145,11 +26142,10 @@ var PermissionEngine = class {
|
|
|
26145
26142
|
return true;
|
|
26146
26143
|
}
|
|
26147
26144
|
/**
|
|
26148
|
-
*
|
|
26145
|
+
* 生效资格档解析:解析闭包在场即**现算**(装配层合成
|
|
26149
26146
|
* min(entry, ceiling, override);闭包抛错 → 'none',词表外脏值由
|
|
26150
|
-
* softenRadiusAllows
|
|
26151
|
-
* 恒 'none'(
|
|
26152
|
-
* 已随 P4-C3 拆除,2026-08-30)。
|
|
26147
|
+
* softenRadiusAllows 安全查表兜底——一切异常朝严);闭包缺席
|
|
26148
|
+
* 恒 'none'(无任命即无软化面;早先的布尔位 qualifiedForAllow 已拆除)。
|
|
26153
26149
|
*/
|
|
26154
26150
|
resolveClassifierTier(config) {
|
|
26155
26151
|
const resolve2 = config.resolveQualificationTier;
|
|
@@ -26163,8 +26159,8 @@ var PermissionEngine = class {
|
|
|
26163
26159
|
}
|
|
26164
26160
|
}
|
|
26165
26161
|
/**
|
|
26166
|
-
*
|
|
26167
|
-
* 半径与分类器软化共用**同一资格链事实源**(
|
|
26162
|
+
* 生效资格档公共查询口:派生裁决链的 auto 父终审
|
|
26163
|
+
* 半径与分类器软化共用**同一资格链事实源**(「换裁决人不换半径」)
|
|
26168
26164
|
* ——装配层经此口取生效档喂执行器的 endorseFinalizeTier。未注入分类器
|
|
26169
26165
|
* 配置 = 'none'(无在册资格即无自动化裁决面,半径 0);解析异常朝严
|
|
26170
26166
|
* (resolveClassifierTier 已兜 'none')。每次调用现算(validUntil 越期/
|
|
@@ -26174,7 +26170,7 @@ var PermissionEngine = class {
|
|
|
26174
26170
|
if (this.classifierConfig === void 0) return "none";
|
|
26175
26171
|
return this.resolveClassifierTier(this.classifierConfig);
|
|
26176
26172
|
}
|
|
26177
|
-
/** 窄缓存统计快照(
|
|
26173
|
+
/** 窄缓存统计快照(命中率数据;自检面消费) */
|
|
26178
26174
|
getClassifierCacheStats() {
|
|
26179
26175
|
return {
|
|
26180
26176
|
hits: this.classifierCacheHits,
|
|
@@ -26183,7 +26179,7 @@ var PermissionEngine = class {
|
|
|
26183
26179
|
};
|
|
26184
26180
|
}
|
|
26185
26181
|
/**
|
|
26186
|
-
* 咨询用量快照(
|
|
26182
|
+
* 咨询用量快照(/permissions 状态面板消费,零 IO):budget =
|
|
26187
26183
|
* 生效预算(与 consultClassifier 记账同一裁决:config.callBudget ??
|
|
26188
26184
|
* 缺省;非有限值 = 不限)。未注入分类器时如实返回零咨询 + 缺省预算。
|
|
26189
26185
|
*/
|
|
@@ -26196,7 +26192,7 @@ var PermissionEngine = class {
|
|
|
26196
26192
|
};
|
|
26197
26193
|
}
|
|
26198
26194
|
/**
|
|
26199
|
-
* 窄缓存键(
|
|
26195
|
+
* 窄缓存键(键全字段):**仅只读输入**入围(写入/删除/
|
|
26200
26196
|
* 发布/权限修改不得复用 safe 缓存——isReadOnly 非 true 一律返回 null,
|
|
26201
26197
|
* 即不查不存);键 = 工具 + 规范化参数 + cwd + 模式 + 版本标签(装配层
|
|
26202
26198
|
* 以协议指纹+stage 模型对构造)+ 策略束集(id+version)+ transcript
|
|
@@ -26413,7 +26409,7 @@ var PermissionEngine = class {
|
|
|
26413
26409
|
}
|
|
26414
26410
|
// -------------------------------------------------------------------------
|
|
26415
26411
|
/**
|
|
26416
|
-
* allow
|
|
26412
|
+
* allow 侧有效规则集:auto 模式丢弃授予任意代码执行的宽规则
|
|
26417
26413
|
* (broad-allow.ts 谓词),窄规则保留;其余模式原集直通。求值期过滤,
|
|
26418
26414
|
* 不改写配置——退出 auto 即恢复。管线第 6 段与基线 4.5 段的配置 allow
|
|
26419
26415
|
* 中和统一走本口(第 7 段会话缓存在 matchCache 内同口径过滤)。
|
|
@@ -26423,7 +26419,7 @@ var PermissionEngine = class {
|
|
|
26423
26419
|
return this.ruleSets.allow.filter((rule) => !isBroadExecutionAllowRule(rule.parsed));
|
|
26424
26420
|
}
|
|
26425
26421
|
/**
|
|
26426
|
-
* auto 模式下被丢弃的宽 allow 规则清单(层归因 +
|
|
26422
|
+
* auto 模式下被丢弃的宽 allow 规则清单(层归因 + 原文;可见性口)。
|
|
26427
26423
|
* 丢弃是求值期行为(effectiveAllowRules 过滤,配置不改写),此前对用户
|
|
26428
26424
|
* 完全静默——「规则写了却不生效」必须可见,否则用户会误判配置生效面。
|
|
26429
26425
|
* 非 auto 模式恒空:只报告实际发生的丢弃,不报告假设。
|
|
@@ -26445,7 +26441,7 @@ var PermissionEngine = class {
|
|
|
26445
26441
|
rules.splice(index, 0, { layer: "policy", parsed });
|
|
26446
26442
|
}
|
|
26447
26443
|
/**
|
|
26448
|
-
* ask 规则按信任层分位视图(
|
|
26444
|
+
* ask 规则按信任层分位视图(INV-4):受信层(policy/user)在 §2.5 先于
|
|
26449
26445
|
* bypass/基线求值(显式审批义务,INV-3);项目层(projectLocal/projectShared)
|
|
26450
26446
|
* 在 §4.9 后于基线/保护面/污点求值——只收紧不遮蔽 deny。按需过滤而非
|
|
26451
26447
|
* 构造期快照:loadPolicyBundles 运行期注入 policy ask(insertPolicyRule),
|
|
@@ -26517,7 +26513,7 @@ var PermissionEngine = class {
|
|
|
26517
26513
|
return hit.raw;
|
|
26518
26514
|
}
|
|
26519
26515
|
/**
|
|
26520
|
-
*
|
|
26516
|
+
* 灾难基线匹配(bypass 分支专用)。命中返回灾难规则 raw,否则
|
|
26521
26517
|
* null。与 matchBaseline 的区别:①只扫灾难子集(不含秘密面);②**不做
|
|
26522
26518
|
* 配置 allow 中和**——bypass 本身即宽放行意图,灾难地板不容 allow 抵消
|
|
26523
26519
|
* (否则 `allow:['Shell']` + bypass 又放走 rm -rf /);③无例外面。
|
|
@@ -26546,7 +26542,7 @@ var PermissionEngine = class {
|
|
|
26546
26542
|
}
|
|
26547
26543
|
/**
|
|
26548
26544
|
* deny/ask 侧扫描:按层优先级顺序,首个命中即返回(归因到最高层)。
|
|
26549
|
-
* 工具名判定统一走 ruleMatchesTool(
|
|
26545
|
+
* 工具名判定统一走 ruleMatchesTool(精确相等 + MCP 服务器级通配;
|
|
26550
26546
|
* 匹配语义全部落在 rules.ts,引擎只做接线)。
|
|
26551
26547
|
*/
|
|
26552
26548
|
matchRestrict(rules, input, target) {
|
|
@@ -26559,7 +26555,7 @@ var PermissionEngine = class {
|
|
|
26559
26555
|
/**
|
|
26560
26556
|
* allow 侧扫描:Shell 目标要求每一段至少被某条 allow 规则(保守匹配)覆盖,
|
|
26561
26557
|
* 归因取覆盖第一段的规则;其余目标任一规则命中即放行。
|
|
26562
|
-
* 工具名判定统一走 ruleMatchesTool
|
|
26558
|
+
* 工具名判定统一走 ruleMatchesTool:`mcp__srv__*` 在 allow 侧
|
|
26563
26559
|
* 命中该服务器全部工具——是工具级规则语义(命中全部调用),与 deny/ask
|
|
26564
26560
|
* 侧工具名判定相同;不对称公理只作用于 specifier 内容匹配(通配规则
|
|
26565
26561
|
* 恒无 specifier,不触及)。
|
|
@@ -27162,7 +27158,7 @@ var ToolRegistry = class {
|
|
|
27162
27158
|
this.#tools.set(tool.name, tool);
|
|
27163
27159
|
}
|
|
27164
27160
|
/**
|
|
27165
|
-
* 移除工具(
|
|
27161
|
+
* 移除工具(MCP 单服务器重连需先摘旧桥接工具)。不存在返回 false
|
|
27166
27162
|
* 不 throw——清理路径对「已不在」宽容幂等(与 register 的装配期严苛相对)。
|
|
27167
27163
|
*/
|
|
27168
27164
|
unregister(name) {
|
|
@@ -27863,7 +27859,7 @@ var DispatchingToolExecutor = class _DispatchingToolExecutor {
|
|
|
27863
27859
|
* searchAggregator(会话级 grep 轮次聚合)以及其余全部构造选项(askUser /
|
|
27864
27860
|
* onDecision / captureFileCheckpoints / memoryWrite / fs / metrics …);
|
|
27865
27861
|
* - 按新 cwd 重算:ToolContext.cwd、pre-image 采集前的真实目标守卫(checkRealTarget
|
|
27866
|
-
* 工作区双锚)
|
|
27862
|
+
* 工作区双锚)、软化半径判定 classifySoftenFace——三处皆按调用期以 `#cwd` 计算,
|
|
27867
27863
|
* 无跨调用缓存,新实例即新锚;
|
|
27868
27864
|
* - 权限门:**缺省沿用**同一 gate 对象。sdk / cli 网关皆以构造期 cwd 锚定规则路径与
|
|
27869
27865
|
* 工作区快路径(permission.ts「必须与 executor 的 cwd 一致」),装配层须以
|
|
@@ -44866,7 +44862,7 @@ var UpdateSectionSchema = z43.object({
|
|
|
44866
44862
|
/**
|
|
44867
44863
|
* manifest 数据源地址(企业内网/自托管;`{channel}` 占位替换)。在场即
|
|
44868
44864
|
* 优先于 npm registry;形态 = scripts/release/pack-sea.mjs 产物。
|
|
44869
|
-
*
|
|
44865
|
+
* 须为 `https://` 绝对 URL——`http:` / `file:` / 相对形
|
|
44870
44866
|
* 在 schema 层即拒(抽取器 `invalid_value` 剥离回退低层 / 缺席;远程 org 下发经同一
|
|
44871
44867
|
* schema 收口),与 cli 发布 URL 门(release-trust.ts `insecure_scheme`)双闸同向。
|
|
44872
44868
|
*/
|
|
@@ -51891,7 +51887,7 @@ var ProviderRegistry = class {
|
|
|
51891
51887
|
}
|
|
51892
51888
|
/**
|
|
51893
51889
|
* 别名的有序 fallback 链(链首为别名自身;循环引用抛 CyclicFallbackError)。
|
|
51894
|
-
*
|
|
51890
|
+
* 只解析不重试——实际切换由 FallbackModelClient 执行。
|
|
51895
51891
|
*/
|
|
51896
51892
|
fallbacksFor(alias) {
|
|
51897
51893
|
return expandFallbacks(this.#config, alias);
|
|
@@ -53941,7 +53937,7 @@ function buildSdkToolSet(options = {}) {
|
|
|
53941
53937
|
const entry = (selection.builtin ?? []).includes(name) ? "builtin" : "platform";
|
|
53942
53938
|
throw new TansrSdkError(
|
|
53943
53939
|
"invalid_options",
|
|
53944
|
-
`tools.${entry} ['${name}'] requires the platform token tier: create the session/query with { token, baseUrl } (
|
|
53940
|
+
`tools.${entry} ['${name}'] requires the platform token tier: create the session/query with { token, baseUrl } (system media tools use the tansr platform provider and bill the app); managed/injected tiers have no platform connection — remove '${name}' from tools.${entry}.`
|
|
53945
53941
|
);
|
|
53946
53942
|
}
|
|
53947
53943
|
return {
|