@sema-agent/settings-schema 14.7.0 → 14.8.0
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/CHANGELOG.md +209 -0
- package/README.md +58 -2
- package/conformance/VERSION +1 -1
- package/dist/atomic-write.d.ts +15 -0
- package/dist/atomic-write.js +109 -5
- package/dist/catalog-manages.d.ts +15 -0
- package/dist/catalog-manages.js +60 -0
- package/dist/center-refs.d.ts +68 -0
- package/dist/center-refs.js +70 -0
- package/dist/config-dir-migration.js +1 -0
- package/dist/config-fns.js +5 -3
- package/dist/config-root-documents.d.ts +106 -0
- package/dist/config-root-documents.js +93 -0
- package/dist/config-root-node.d.ts +117 -0
- package/dist/config-root-node.js +260 -0
- package/dist/conformance/run.d.ts +3 -0
- package/dist/conformance/run.js +10 -6
- package/dist/conformance/temp-roots.d.ts +31 -0
- package/dist/conformance/temp-roots.js +184 -0
- package/dist/default-model.d.ts +1 -1
- package/dist/default-model.js +5 -4
- package/dist/env-model-table.d.ts +163 -0
- package/dist/env-model-table.js +257 -0
- package/dist/fleet.d.ts +25 -7
- package/dist/fleet.js +24 -6
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/mcp-request-entry.d.ts +58 -6
- package/dist/mcp-request-entry.js +45 -13
- package/dist/mcp-server-name.d.ts +17 -0
- package/dist/mcp-server-name.js +19 -0
- package/dist/migration-receipt.d.ts +10 -6
- package/dist/migration-receipt.js +5 -3
- package/dist/node.d.ts +1 -0
- package/dist/node.js +2 -0
- package/dist/one-time-migrations.d.ts +4 -2
- package/dist/one-time-migrations.js +29 -1
- package/dist/own-key-read.d.ts +1 -1
- package/dist/retired-form.d.ts +19 -0
- package/dist/retired-form.js +24 -1
- package/dist/safety-merge-spec.d.ts +6 -6
- package/dist/tier-words.d.ts +33 -0
- package/dist/tier-words.js +43 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.js +24 -0
- package/dist/worker-row-verdict.js +7 -1
- package/docs/API-SURFACE.md +68 -4
- package/docs/CONSUMER-INTEGRATION.md +72 -2
- package/llms-full.txt +4 -1
- package/llms.txt +9 -3
- package/package.json +2 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 档位词(纯、零 I/O、浏览器安全;**包内叶子模块,不出包**):引擎的档序与 CC 档位别名、从某档起向低档的梯,与「一个目录词在档位展开之后落到哪条条目」。
|
|
3
|
+
* 本包里档位词的唯一一处:default 角色的档梯(`./default-model`)与写者计划助手的落点(`./env-model-table`)都从这里取。
|
|
4
|
+
* 镜像 core(`DEFAULT_TIER_ORDER` / `CC_MODEL_TIER_ALIASES` / `expandTiers`):`test/tier-words-parity-14.8.0` 对 devDependency 里精确钉住的那一版 core 对拍。
|
|
5
|
+
*/
|
|
6
|
+
/** 引擎的档序(高 → 低)。 */
|
|
7
|
+
export const TIER_ORDER = ["ultra", "max", "pro", "flash", "lite"];
|
|
8
|
+
/** CC 档位词 → 引擎档位。 */
|
|
9
|
+
export const CC_TIER_ALIASES = { fable: "max", mythos: "max", opus: "pro", sonnet: "flash", haiku: "lite" };
|
|
10
|
+
/** 一档的梯:档序里从它起(含)向低档的那一段(没绑的档沿它往下落)。 */
|
|
11
|
+
export function tierLadderFrom(tier) {
|
|
12
|
+
return TIER_ORDER.slice(TIER_ORDER.indexOf(tier));
|
|
13
|
+
}
|
|
14
|
+
const isTierWord = (word) => TIER_ORDER.includes(word);
|
|
15
|
+
/**
|
|
16
|
+
* 一个目录词(条目名 / 档位词 / CC 档位别名 / `best`)在**档位展开之后**落到哪条目录条目名 —— 与引擎装配档位表的两步同答:
|
|
17
|
+
* 先摘掉活跃组里绑定目标不可服务的档(引擎的生效装配在交给 core 之前做这一步,并 warn 点名),再按 core `expandTiers` 展开
|
|
18
|
+
* (对拍 devDependency 那一版 core 的「摘后表」)。所以这里只有一条绑定规则:**一档的绑定只在它点名一条可服务条目时算数**,否则当作没绑。展开规则:
|
|
19
|
+
* · 目录自己的键先赢(`has(word)`;一条就叫 `flash` 的条目遮住档位词);
|
|
20
|
+
* · 档位词 ⇒ 它的梯({@link tierLadderFrom})上第一个有绑定的档;摘完没有任何绑定 ⇒ 只认目录键;
|
|
21
|
+
* · CC 档位别名 ⇒ 经它对应的档位;`best` ⇒ 档序里第一个有绑定的档;别的词 ⇒ 落不到。
|
|
22
|
+
* `has` = 调用方的「这个名是目录里一条可服务(启用)的条目」;`tiers` = `resolveActiveTiers` 的读数(原表,未摘)—— 它的键只有五个档位词
|
|
23
|
+
* (档位组的绑定表在 schema 里只收这五个键,别的键被剥掉),所以只按档位词读表。
|
|
24
|
+
*/
|
|
25
|
+
export function landCatalogWord(word, has, tiers) {
|
|
26
|
+
if (has(word))
|
|
27
|
+
return word;
|
|
28
|
+
if (tiers === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
/** 一档的绑定:只在它点名一条可服务条目时算数(否则引擎已摘掉它)。 */
|
|
31
|
+
const bound = (tier) => {
|
|
32
|
+
const target = Object.hasOwn(tiers, tier) ? tiers[tier] : undefined;
|
|
33
|
+
return target !== undefined && has(target) ? target : undefined;
|
|
34
|
+
};
|
|
35
|
+
const firstBound = (ladder) => ladder.map(bound).find((landed) => landed !== undefined);
|
|
36
|
+
if (isTierWord(word))
|
|
37
|
+
return firstBound(tierLadderFrom(word));
|
|
38
|
+
if (Object.hasOwn(CC_TIER_ALIASES, word))
|
|
39
|
+
return firstBound(tierLadderFrom(CC_TIER_ALIASES[word]));
|
|
40
|
+
if (word === "best")
|
|
41
|
+
return firstBound(TIER_ORDER);
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1885,6 +1885,8 @@ export declare const McpServerSpec: z.ZodObject<{
|
|
|
1885
1885
|
local: "local";
|
|
1886
1886
|
execution: "execution";
|
|
1887
1887
|
}>>;
|
|
1888
|
+
sessionMetaKey: z.ZodOptional<z.ZodUnknown>;
|
|
1889
|
+
startupTimeoutMs: z.ZodOptional<z.ZodUnknown>;
|
|
1888
1890
|
source: z.ZodOptional<z.ZodUnknown>;
|
|
1889
1891
|
toolFaces: z.ZodOptional<z.ZodUnknown>;
|
|
1890
1892
|
toolAxes: z.ZodOptional<z.ZodUnknown>;
|
|
@@ -1918,6 +1920,8 @@ export declare const McpConfig: z.ZodObject<{
|
|
|
1918
1920
|
local: "local";
|
|
1919
1921
|
execution: "execution";
|
|
1920
1922
|
}>>;
|
|
1923
|
+
sessionMetaKey: z.ZodOptional<z.ZodUnknown>;
|
|
1924
|
+
startupTimeoutMs: z.ZodOptional<z.ZodUnknown>;
|
|
1921
1925
|
source: z.ZodOptional<z.ZodUnknown>;
|
|
1922
1926
|
toolFaces: z.ZodOptional<z.ZodUnknown>;
|
|
1923
1927
|
toolAxes: z.ZodOptional<z.ZodUnknown>;
|
|
@@ -2520,6 +2524,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
2520
2524
|
local: "local";
|
|
2521
2525
|
execution: "execution";
|
|
2522
2526
|
}>>;
|
|
2527
|
+
sessionMetaKey: z.ZodOptional<z.ZodUnknown>;
|
|
2528
|
+
startupTimeoutMs: z.ZodOptional<z.ZodUnknown>;
|
|
2523
2529
|
source: z.ZodOptional<z.ZodUnknown>;
|
|
2524
2530
|
toolFaces: z.ZodOptional<z.ZodUnknown>;
|
|
2525
2531
|
toolAxes: z.ZodOptional<z.ZodUnknown>;
|
package/dist/types.js
CHANGED
|
@@ -456,6 +456,20 @@ export const PARSE_TRANSPARENT_KEYS = [
|
|
|
456
456
|
validatedBy: "consumer",
|
|
457
457
|
why: "它的形由同一条 override 的 `key` 决定(一个 key 一种形),执法点在读那个 key 的消费方;在这里写死形等于把所有可覆盖键的形表搬进本包。",
|
|
458
458
|
},
|
|
459
|
+
{
|
|
460
|
+
domain: "mcp",
|
|
461
|
+
path: "servers[].sessionMetaKey",
|
|
462
|
+
since: "14.8.0",
|
|
463
|
+
validatedBy: "engine-ingest",
|
|
464
|
+
why: "引擎在发给这台服务器的请求 `_meta` 里放发送腿会话 id 的那把键;它只有一只判官 = 引擎根导出 `judgeSessionMetaKey`(类型、非空、上界、MCP `_meta` 键名文法、MCP 保留前缀、`progressToken`、引擎的 `sema/` 命名空间一并判;坏键在引擎的准备门整条拒、点名这把键),投影它的消费方在交给引擎之前可调同一只;本包只承载 —— 这里哪怕只判类型与长度,也是第二只判官的一部分,与引擎那只各答各的。",
|
|
465
|
+
},
|
|
466
|
+
{
|
|
467
|
+
domain: "mcp",
|
|
468
|
+
path: "servers[].startupTimeoutMs",
|
|
469
|
+
since: "14.8.0",
|
|
470
|
+
validatedBy: "engine-ingest",
|
|
471
|
+
why: "引擎的逐服务器启动界(握手与首次工具列举各带它);它只有一只判官 = 引擎根导出的 `mcpStartupTimeoutMs`(是不是数、整数性、范围一并判;坏值在引擎的拨号门拒这一台服务器、点名 `config.mcp_startup_timeout_invalid`,其余服务器照挂),投影它的消费方在交给引擎之前可调同一只;本包只承载 —— 这里哪怕只判「是不是数」,也是第二只判官的一部分,与引擎那只各答各的。",
|
|
472
|
+
},
|
|
459
473
|
];
|
|
460
474
|
/** A catalog model's price / capability tier — fuels core 1.25 `selectModel({ tier })` role resolution. ONE closed set for both
|
|
461
475
|
* places that name it (`ModelEntry.tier`, `RoleTarget.select.tier`). Not the tier-group ladder of {@link TierBindings}
|
|
@@ -2486,6 +2500,16 @@ export const McpServerSpec = z.object({
|
|
|
2486
2500
|
* declared `"local"`, the engine read ABSENT. A value outside the table is REJECTED at parse — a mistyped trust
|
|
2487
2501
|
* word must never be read as a legal one (the consumer's gate is equally severe: no case-folding). */
|
|
2488
2502
|
contentOrigin: z.enum(MCP_CONTENT_ORIGINS).optional(),
|
|
2503
|
+
/** 引擎在发给这台服务器的每个 `tools/call` / `resources/read` 的 `params._meta[key]` 里放发送腿自己的会话 id 的那把键 —— 一一对应引擎的
|
|
2504
|
+
* `McpServerSpec.sessionMetaKey`。缺席 = 什么都不送(`.optional()`,不铸默认:会话 id 出进程是部署自己选的关联)。
|
|
2505
|
+
*
|
|
2506
|
+
* **解析透明** —— 形归谁校验、为什么不放这里:{@link PARSE_TRANSPARENT_KEYS}(`mcp.servers[].sessionMetaKey`)。 */
|
|
2507
|
+
sessionMetaKey: z.unknown().optional(),
|
|
2508
|
+
/** 这一台服务器自己的启动界(整数毫秒):握手(连接 + initialize)与首次工具列举各带它 —— 一一对应引擎的 `McpServerSpec.startupTimeoutMs`。
|
|
2509
|
+
* 缺席 = 引擎读进程级的缺省界(`.optional()`,不铸默认:没声明就是没声明);它只界启动阶段,不动单次调用的超时。
|
|
2510
|
+
*
|
|
2511
|
+
* **解析透明** —— 形归谁校验、为什么不放这里:{@link PARSE_TRANSPARENT_KEYS}(`mcp.servers[].startupTimeoutMs`)。 */
|
|
2512
|
+
startupTimeoutMs: z.unknown().optional(),
|
|
2489
2513
|
/** Declaration-plane GROUPING LABEL for this server — maps 1:1 onto the engine's `McpServerSpec.source`
|
|
2490
2514
|
* (core ≥7.5.0 echoes it verbatim on `wiring_manifest.mcp[].source`, single-line + 80-char cap, so a
|
|
2491
2515
|
* consumer can group servers by where they were declared). An OPEN set: CC's `plugin` / `user` /
|
|
@@ -10,6 +10,7 @@ import { formatConfigPath, outgoingPath } from "./config-fns.js";
|
|
|
10
10
|
import { issuePath } from "./issue-path.js";
|
|
11
11
|
import { guardedSafeParse } from "./own-key-read.js";
|
|
12
12
|
import { jsonShapeOf } from "./plain-json-object.js";
|
|
13
|
+
import { retiredKeyHeldSentence, retiredKeyOfSentence } from "./retired-form.js";
|
|
13
14
|
import { WorkersConfig } from "./types.js";
|
|
14
15
|
/** 每一形的拒句主语 —— 穷举映射型:加一形不补这里即编译红。 */
|
|
15
16
|
const SUBJECT = {
|
|
@@ -63,6 +64,11 @@ export function safeIssueMessage(issue) {
|
|
|
63
64
|
function rowRelative(path) {
|
|
64
65
|
return path[0] === "workers" && path[1] === 0 ? path.slice(2) : path;
|
|
65
66
|
}
|
|
67
|
+
/** 一条 issue 在拒句里的样子:`<坐标>: <句子>`;墓碑 issue(旧形字段还在盘上)换成读面的说法 —— 坐标就是退役键名,拒句的文字里不点名它(结构化的 `field` 已经指到它),指现行位与出路。 */
|
|
68
|
+
function issueText(i) {
|
|
69
|
+
const tombstone = retiredKeyOfSentence(i.message);
|
|
70
|
+
return tombstone !== undefined ? retiredKeyHeldSentence(tombstone.form) : `${formatConfigPath(outgoingPath(rowRelative(issuePath(i))))}: ${i.message}`;
|
|
71
|
+
}
|
|
66
72
|
/** 一行的终判:读得进 ⇒ `undefined`;读不进 ⇒ 第一条 issue 的路径(相对该行)+ 拒句(见文件头)。 */
|
|
67
73
|
export function workerRowVerdict(row, form) {
|
|
68
74
|
// 校验过程抛(会抛的 getter / 陷阱:读侧交进来的是调用方的活对象;zod 4.6 首读 `error` 时拼句子抛 —— 被污染的运行时、另一 realm 的怪形值)⇒ 这一行判「读不出」
|
|
@@ -74,7 +80,7 @@ export function workerRowVerdict(row, form) {
|
|
|
74
80
|
if (verdict.success)
|
|
75
81
|
return undefined;
|
|
76
82
|
const issues = verdict.error.issues;
|
|
77
|
-
const shown = issues.slice(0, 3).map(
|
|
83
|
+
const shown = issues.slice(0, 3).map(issueText);
|
|
78
84
|
const more = issues.length > shown.length ? ` (+${issues.length - shown.length} more)` : "";
|
|
79
85
|
const first = issues[0];
|
|
80
86
|
return { field: first === undefined ? [] : rowRelative(issuePath(first)), reason: `${SUBJECT[form]} is not a valid WorkerSpec — ${shown.join("; ")}${more}` };
|
package/docs/API-SURFACE.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
> 每次全量重算并逐名比对 —— 加 / 删 / 改形一个导出而不重生成本档 ⇒ 红。导出面的每次变动因此以本档的 diff 出现在评审里。
|
|
5
5
|
> 形:`value` = 运行期拿得到的值;`type` = 只在类型层;`value+type` = 同名的值与类型(zod schema 与它推出的类型)。
|
|
6
6
|
|
|
7
|
-
子路径 24 条(资产出口 `./package.json` / `./fleet-paths.json` 不是模块,不列),导出名合计
|
|
7
|
+
子路径 24 条(资产出口 `./package.json` / `./fleet-paths.json` 不是模块,不列),导出名合计 1460 个(同名在多条子路径上各计一次)。
|
|
8
8
|
|
|
9
|
-
## `.`(
|
|
9
|
+
## `.`(761)
|
|
10
10
|
|
|
11
11
|
- `ABSOLUTE_HOST_PATH_MAX` — value
|
|
12
12
|
- `ACCESS_TOKEN_TTL_SECONDS` — value
|
|
@@ -33,8 +33,12 @@
|
|
|
33
33
|
- `BaseHookInput` — value+type
|
|
34
34
|
- `BudgetGroup` — value+type
|
|
35
35
|
- `BudgetGroupMember` — value
|
|
36
|
+
- `CATALOG_REPLACES_ENV_MODELS_CODE` — value
|
|
37
|
+
- `CENTER_REFS_VERDICTS` — value
|
|
38
|
+
- `CENTER_REF_FAULTS` — value
|
|
36
39
|
- `COMMAND_DECISIONS` — value
|
|
37
40
|
- `CONFIG_CHANGE_SOURCES` — value
|
|
41
|
+
- `CONFIG_ROOT_DOCUMENTS` — value
|
|
38
42
|
- `CONTROL_AND_BIDI_CHARS` — value
|
|
39
43
|
- `CREDENTIAL_PARAM_NAMES` — value
|
|
40
44
|
- `CROSS_SESSION_INBOUND_UNSET` — value
|
|
@@ -44,6 +48,12 @@
|
|
|
44
48
|
- `CasWriteResult` — type
|
|
45
49
|
- `CatalogDefaultModel` — type
|
|
46
50
|
- `CatalogDefaultSource` — type
|
|
51
|
+
- `CenterRefFault` — type
|
|
52
|
+
- `CenterRefLookup` — type
|
|
53
|
+
- `CenterRefMember` — type
|
|
54
|
+
- `CenterRefMemberVerdict` — type
|
|
55
|
+
- `CenterRefsResolution` — type
|
|
56
|
+
- `CenterRefsVerdict` — type
|
|
47
57
|
- `CollabConfig` — value+type
|
|
48
58
|
- `CollabEarlyStop` — value+type
|
|
49
59
|
- `CollabFinalizerType` — value+type
|
|
@@ -56,6 +66,7 @@
|
|
|
56
66
|
- `ConfigChangeHookInput` — value
|
|
57
67
|
- `ConfigPath` — type
|
|
58
68
|
- `ConfigReader` — type
|
|
69
|
+
- `ConfigRootDocument` — type
|
|
59
70
|
- `CredentialHandleAnswer` — value+type
|
|
60
71
|
- `CredentialParamName` — type
|
|
61
72
|
- `CredentialResolveRequest` — value+type
|
|
@@ -71,6 +82,7 @@
|
|
|
71
82
|
- `DEFAULT_HEARTBEAT_MS` — value
|
|
72
83
|
- `DEFAULT_HOOK_TIMEOUT_SECONDS` — value
|
|
73
84
|
- `DEFAULT_JWKS_REFRESH_MIN_INTERVAL_SEC` — value
|
|
85
|
+
- `DEFAULT_MODEL_KEY` — value
|
|
74
86
|
- `DEFAULT_OFFLINE_GRACE_SEC` — value
|
|
75
87
|
- `DEFAULT_ROLE_TIER_LADDER` — value
|
|
76
88
|
- `DELIVER_DENYLIST` — value
|
|
@@ -121,6 +133,9 @@
|
|
|
121
133
|
- `DroppedEntryReasonCode` — type
|
|
122
134
|
- `ENGINE_OWNED_HOOK_EVENTS` — value
|
|
123
135
|
- `ENGINE_SIGNAL_KEY` — value
|
|
136
|
+
- `ENV_MODELS_DECISIONS` — value
|
|
137
|
+
- `ENV_MODELS_DOCUMENT` — value
|
|
138
|
+
- `ENV_MODEL_TABLE_KEYS` — value
|
|
124
139
|
- `ENV_NAME` — value
|
|
125
140
|
- `EXECUTION_LANES` — value
|
|
126
141
|
- `EXECUTION_LANE_WORDS` — value
|
|
@@ -143,8 +158,23 @@
|
|
|
143
158
|
- `EntitlementTier` — value+type
|
|
144
159
|
- `EntryKeptIndex` — type
|
|
145
160
|
- `EntrySalvageResult` — type
|
|
161
|
+
- `EnvCheapSlot` — type
|
|
162
|
+
- `EnvModelBaseline` — type
|
|
163
|
+
- `EnvModelTableEntry` — type
|
|
164
|
+
- `EnvModelTableKey` — type
|
|
165
|
+
- `EnvModelTableLanding` — type
|
|
166
|
+
- `EnvModelTableReceipt` — type
|
|
167
|
+
- `EnvModelTableRoleRow` — type
|
|
168
|
+
- `EnvModelTableTarget` — type
|
|
169
|
+
- `EnvModelTableWriteInput` — type
|
|
170
|
+
- `EnvModelTableWriteIntent` — type
|
|
171
|
+
- `EnvModelTableWritePlan` — type
|
|
172
|
+
- `EnvModelsDecision` — type
|
|
173
|
+
- `EnvModelsDecisionWord` — type
|
|
146
174
|
- `EnvRef` — type
|
|
147
175
|
- `EnvRefUse` — type
|
|
176
|
+
- `EnvRoleBinding` — type
|
|
177
|
+
- `EnvSnapshot` — type
|
|
148
178
|
- `ExecutionLane` — type
|
|
149
179
|
- `ExecutionLaneRow` — type
|
|
150
180
|
- `ExecutionPolicy` — value+type
|
|
@@ -245,6 +275,7 @@
|
|
|
245
275
|
- `MODEL_ENTRY_REFUSAL_CODES` — value
|
|
246
276
|
- `MODEL_PLANE_REFUSAL_CODES` — value
|
|
247
277
|
- `MODEL_SWITCH_SOURCES` — value
|
|
278
|
+
- `MarkedMigrationId` — type
|
|
248
279
|
- `McpConfig` — value+type
|
|
249
280
|
- `McpContentOrigin` — type
|
|
250
281
|
- `McpEntryKeyIssue` — type
|
|
@@ -264,6 +295,7 @@
|
|
|
264
295
|
- `MergeCategorySpec` — value+type
|
|
265
296
|
- `MergeShape` — value+type
|
|
266
297
|
- `MessageDisplayHookInput` — value
|
|
298
|
+
- `MigrationMarker` — type
|
|
267
299
|
- `MinTrust` — value+type
|
|
268
300
|
- `ModelCost` — value
|
|
269
301
|
- `ModelEntry` — value+type
|
|
@@ -284,6 +316,8 @@
|
|
|
284
316
|
- `OAuthErrorResponse` — value+type
|
|
285
317
|
- `PARSE_TRANSPARENT_KEYS` — value
|
|
286
318
|
- `PATH_BASE_URL_FORBIDDEN_PARTS` — value
|
|
319
|
+
- `PLAIN_STRING_RECORD_FAULTS` — value
|
|
320
|
+
- `PLAIN_STRING_RECORD_RESERVED_MEMBER` — value
|
|
287
321
|
- `PLUGIN_ORIGIN` — value
|
|
288
322
|
- `PRINCIPAL_INC_CLAIM` — value
|
|
289
323
|
- `PRINCIPAL_MAX_LENGTH` — value
|
|
@@ -308,6 +342,8 @@
|
|
|
308
342
|
- `PermissionRuleValue` — value+type
|
|
309
343
|
- `PermissionUpdate` — value+type
|
|
310
344
|
- `PermissionUpdateDestination` — value+type
|
|
345
|
+
- `PlainStringRecordFault` — type
|
|
346
|
+
- `PlainStringRecordRead` — type
|
|
311
347
|
- `PluginSource` — value+type
|
|
312
348
|
- `PluginSpec` — value+type
|
|
313
349
|
- `PluginsConfig` — value+type
|
|
@@ -349,6 +385,7 @@
|
|
|
349
385
|
- `REF_ISSUE_TARGET_DOMAIN` — value
|
|
350
386
|
- `REF_REFERRER_DOMAINS` — value
|
|
351
387
|
- `REMOTE_EXEC_DOCUMENT` — value
|
|
388
|
+
- `REMOTE_MCP_SERVER_NAME_PREFIX` — value
|
|
352
389
|
- `RESERVED_SCOPE_IDS` — value
|
|
353
390
|
- `RESERVED_WORKER_ENV` — value
|
|
354
391
|
- `RETIRED_DOMAINS` — value
|
|
@@ -356,6 +393,7 @@
|
|
|
356
393
|
- `RETIRED_ENV_REFUSAL_CODE` — value
|
|
357
394
|
- `RETIRED_LANE_WORDS` — value
|
|
358
395
|
- `ROLE_RANK` — value
|
|
396
|
+
- `ROOT_DOCUMENT_UNREADABLE_REASONS` — value
|
|
359
397
|
- `ROSTER_CHEAP_ROLES` — value
|
|
360
398
|
- `ROSTER_PRIMARY_ROLES` — value
|
|
361
399
|
- `RUNTIME_CAP_STRICT` — value
|
|
@@ -379,6 +417,7 @@
|
|
|
379
417
|
- `RetiredEnvWire` — type
|
|
380
418
|
- `RetiredLaneWord` — type
|
|
381
419
|
- `RoleTarget` — value+type
|
|
420
|
+
- `RootDocumentUnreadableReason` — type
|
|
382
421
|
- `RosterEntry` — value+type
|
|
383
422
|
- `RostersConfig` — value+type
|
|
384
423
|
- `RoutingVerdict` — type
|
|
@@ -414,6 +453,7 @@
|
|
|
414
453
|
- `STALE_SESSION_RECORD_MS` — value
|
|
415
454
|
- `STORE_BACKENDS` — value
|
|
416
455
|
- `SUBMIT_IDEMPOTENCY_KEY` — value
|
|
456
|
+
- `SUMMARIZE_MODEL_MISSING_CODE` — value
|
|
417
457
|
- `SafetyMergeCategory` — type
|
|
418
458
|
- `SafetyMergeMember` — type
|
|
419
459
|
- `SandboxGitConfig` — value+type
|
|
@@ -561,9 +601,11 @@
|
|
|
561
601
|
- `aggregateUsage` — value
|
|
562
602
|
- `applyProjectPatch` — value
|
|
563
603
|
- `buildEffective` — value
|
|
604
|
+
- `buildEnvModelBaseline` — value
|
|
564
605
|
- `buildLayerPartsUnreadNotice` — value
|
|
565
606
|
- `buildRetiredEnvWire` — value
|
|
566
607
|
- `canSwitchScope` — value
|
|
608
|
+
- `catalogManagesModelPlane` — value
|
|
567
609
|
- `clampServingLeaseTtlMs` — value
|
|
568
610
|
- `classifyHooksConfig` — value
|
|
569
611
|
- `classifyTimeClaims` — value
|
|
@@ -573,6 +615,7 @@
|
|
|
573
615
|
- `createSiblingResolver` — value
|
|
574
616
|
- `danglingRefs` — value
|
|
575
617
|
- `describeBadContentOrigin` — value
|
|
618
|
+
- `describeBadMcpServerName` — value
|
|
576
619
|
- `describeBadWireName` — value
|
|
577
620
|
- `describeNotStringArray` — value
|
|
578
621
|
- `describeNotStringRecord` — value
|
|
@@ -581,6 +624,10 @@
|
|
|
581
624
|
- `drainVerdict` — value
|
|
582
625
|
- `effectiveScopeRole` — value
|
|
583
626
|
- `emptyEffective` — value
|
|
627
|
+
- `enabledEntryCount` — value
|
|
628
|
+
- `envModelTableDeclared` — value
|
|
629
|
+
- `envModelTableWriteRefusal` — value
|
|
630
|
+
- `envModelsDecisionTag` — value
|
|
584
631
|
- `extraBodyUnsafe` — value
|
|
585
632
|
- `findSkillContent` — value
|
|
586
633
|
- `findUrlCredential` — value
|
|
@@ -619,6 +666,7 @@
|
|
|
619
666
|
- `isSchedulerRecord` — value
|
|
620
667
|
- `isStringArray` — value
|
|
621
668
|
- `isStringRecord` — value
|
|
669
|
+
- `isUsableMcpServerName` — value
|
|
622
670
|
- `isUsableWireName` — value
|
|
623
671
|
- `judgeReadiness` — value
|
|
624
672
|
- `judgeRoutability` — value
|
|
@@ -635,6 +683,7 @@
|
|
|
635
683
|
- `memberTighten` — value
|
|
636
684
|
- `membersOf` — value
|
|
637
685
|
- `mintScopedToken` — value
|
|
686
|
+
- `mintedCheapId` — value
|
|
638
687
|
- `narrowAtMention` — value
|
|
639
688
|
- `nextPollInterval` — value
|
|
640
689
|
- `normalizeContentHash` — value
|
|
@@ -648,6 +697,7 @@
|
|
|
648
697
|
- `parseWebAdminSessionUrl` — value
|
|
649
698
|
- `pathBaseUrlFlaws` — value
|
|
650
699
|
- `pickInstance` — value
|
|
700
|
+
- `planEnvModelTableWrite` — value
|
|
651
701
|
- `projectWarning` — value
|
|
652
702
|
- `promptArtifactFor` — value
|
|
653
703
|
- `readCapabilityReading` — value
|
|
@@ -657,9 +707,11 @@
|
|
|
657
707
|
- `readDrainRequest` — value
|
|
658
708
|
- `readEffectiveWire` — value
|
|
659
709
|
- `readEngineSignal` — value
|
|
710
|
+
- `readEnvModelSlots` — value
|
|
660
711
|
- `readHttpHookAllowlistLayer` — value
|
|
661
712
|
- `readMcpIdentityHeaders` — value
|
|
662
713
|
- `readModelRefusals` — value
|
|
714
|
+
- `readPlainStringRecord` — value
|
|
663
715
|
- `readRequestMcpTransport` — value
|
|
664
716
|
- `readScopedTokenBinding` — value
|
|
665
717
|
- `readServingLeaseRequest` — value
|
|
@@ -677,6 +729,7 @@
|
|
|
677
729
|
- `renderRefIssue` — value
|
|
678
730
|
- `resolveActiveTiers` — value
|
|
679
731
|
- `resolveCatalogDefaultModel` — value
|
|
732
|
+
- `resolveCenterRefs` — value
|
|
680
733
|
- `resolveEffectiveForWorker` — value
|
|
681
734
|
- `resolveMemberAdmission` — value
|
|
682
735
|
- `resolveMemberTighten` — value
|
|
@@ -1111,7 +1164,7 @@
|
|
|
1111
1164
|
- `tightenVerdict` — value
|
|
1112
1165
|
- `trustRank` — value
|
|
1113
1166
|
|
|
1114
|
-
## `./node`(
|
|
1167
|
+
## `./node`(48)
|
|
1115
1168
|
|
|
1116
1169
|
- `ConfigBundle` — type
|
|
1117
1170
|
- `ConfigDirectoryDocument` — type
|
|
@@ -1119,7 +1172,11 @@
|
|
|
1119
1172
|
- `ConfigDirectoryMigration` — type
|
|
1120
1173
|
- `ConfigDirectoryRefusal` — type
|
|
1121
1174
|
- `ConfigDocumentsMigration` — type
|
|
1175
|
+
- `ConfigRootIo` — type
|
|
1122
1176
|
- `DomainReadError` — type
|
|
1177
|
+
- `EnvModelsDecisionWrite` — type
|
|
1178
|
+
- `EnvModelsMigration` — type
|
|
1179
|
+
- `EnvModelsMint` — type
|
|
1123
1180
|
- `FileConfigStore` — value+type
|
|
1124
1181
|
- `LocalConfig` — type
|
|
1125
1182
|
- `MigrateConfigDirectoryOptions` — type
|
|
@@ -1142,15 +1199,20 @@
|
|
|
1142
1199
|
- `loadSchedulerStore` — value
|
|
1143
1200
|
- `migrateConfigDirectory` — value
|
|
1144
1201
|
- `migrateConfigDocuments` — value
|
|
1202
|
+
- `migrateEnvModelsDecision` — value
|
|
1145
1203
|
- `mutateSchedulerStore` — value
|
|
1146
1204
|
- `nodeConfigDirectoryIo` — value
|
|
1205
|
+
- `nodeConfigRootIo` — value
|
|
1147
1206
|
- `readBundle` — value
|
|
1207
|
+
- `readEnvModelsDecision` — value
|
|
1208
|
+
- `readMigrationMarker` — value
|
|
1148
1209
|
- `remoteExecPath` — value
|
|
1149
1210
|
- `saveSchedulerStore` — value
|
|
1150
1211
|
- `validateDomain` — value
|
|
1151
1212
|
- `validateRemoteExec` — value
|
|
1152
1213
|
- `writeBundle` — value
|
|
1153
1214
|
- `writeDomainFile` — value
|
|
1215
|
+
- `writeEnvModelsDecision` — value
|
|
1154
1216
|
- `writeRemoteExec` — value
|
|
1155
1217
|
|
|
1156
1218
|
## `./one-time-migrations`(18)
|
|
@@ -1284,9 +1346,10 @@
|
|
|
1284
1346
|
- `interpolateHookEnvVars` — value
|
|
1285
1347
|
- `stopAttributionText` — value
|
|
1286
1348
|
|
|
1287
|
-
## `./fleet`(
|
|
1349
|
+
## `./fleet`(86)
|
|
1288
1350
|
|
|
1289
1351
|
- `AggregatedPrincipalUsage` — type
|
|
1352
|
+
- `CATALOG_REPLACES_ENV_MODELS_CODE` — value
|
|
1290
1353
|
- `CapabilityReading` — type
|
|
1291
1354
|
- `DEFAULT_DRAIN_GRACE_MS` — value
|
|
1292
1355
|
- `DEFAULT_HEARTBEAT_MS` — value
|
|
@@ -1340,6 +1403,7 @@
|
|
|
1340
1403
|
- `SERVING_LEASE_VERDICTS` — value
|
|
1341
1404
|
- `STALE_HEARTBEAT_MULTIPLIER` — value
|
|
1342
1405
|
- `SUBMIT_IDEMPOTENCY_KEY` — value
|
|
1406
|
+
- `SUMMARIZE_MODEL_MISSING_CODE` — value
|
|
1343
1407
|
- `ServingLeaseDeniedReason` — value+type
|
|
1344
1408
|
- `ServingLeaseReading` — type
|
|
1345
1409
|
- `ServingLeaseRequest` — value+type
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
> **11.0.0** 的持久面(`runtime` 域退役、读侧兼容臂退役、一次性迁移族 `./one-time-migrations`)在 §0.4。
|
|
10
10
|
> **14.7.0** 的沙箱 git 凭据平面(取值口 wire 型、有效配置块 `sandboxGit`、`VerifiedIdentity.principalInc`)在 §12。
|
|
11
11
|
> **14.7.0** 的路径基址判官(`PATH_BASE_URL_FORBIDDEN_PARTS` / `pathBaseUrlFlaws`)与公告地址 env 名(`FLEET_ADVERTISE_ADDRESS_ENV`)在 §13。
|
|
12
|
+
> 中心引用解析口 `resolveCenterRefs` 与记录读器 `readPlainStringRecord`(原因词表 `PLAIN_STRING_RECORD_FAULTS`)在 §14。
|
|
12
13
|
|
|
13
14
|
---
|
|
14
15
|
|
|
@@ -118,7 +119,7 @@
|
|
|
118
119
|
- **读侧的新形**:`ModelEntry` 钥匙二选一(`sealedApiKey` 与 `apiKeyEnv` 同设 ⇒ 拒);`atMention`(`{mode:"all"}` 缺省 /
|
|
119
120
|
`{mode:"none"}` / `{mode:"only",models}`,roster 位缺席 = 继承,收窄读法一只 `narrowAtMention` —— 收窄到一个都不剩就是 `none`);
|
|
120
121
|
workers 6.x 字段与 `atModelAllowlist` 是 schema 里原位的**墓碑字段**(在场即拒,句子点名迁移);`readWorkersRows(raw) → { doc, held }`
|
|
121
|
-
(workers 域的逐行终判,取代 `migrateWorkersDomain`
|
|
122
|
+
(workers 域的逐行终判,取代 `migrateWorkersDomain` 的终判半;被扣下的行若还带着旧字段,`held[].field` 指到那个旧字段,`reason` 的文字**不点名它**,说现行位与出路:跑迁移,迁移已拒过这一行的就手写现行形、删旧字段)。
|
|
122
123
|
- **调度店**:`parseSchedulerStore(text, { nowMs })` / `loadSchedulerStore(path, { nowMs })` 恒返回 `{ records, warnings }`(没有静默模式);
|
|
123
124
|
整份文件不是 JSON 数组 ⇒ `unreadable-file`,`mutateSchedulerStore(path, fn, { nowMs })` 遇它不调 `fn`、不写(`reason: "unreadable_file"`);
|
|
124
125
|
会话链上的记录(显式 `lifetime: "session"`)过期 ≥ 7 天 ⇒ 读时丢 + `stale-session-record`(`lifetime` 缺席读作 durable,不丢);所有写者走 `mutateSchedulerStore` 这一只原语(裸 load→save 是丢更新的竞争)。
|
|
@@ -216,7 +217,7 @@ server 直接拒启,不是静默降级。上一代 `SEMA_REGISTRY_*` 八名(`URL
|
|
|
216
217
|
|---|---|---|
|
|
217
218
|
| models / roles | `RunnerDeps.models`/`roles` | role 解析不变 |
|
|
218
219
|
| skills | 本地=全文内联;远程=manifest + `fetchSkillContent(hash)` | 本地无 wire 跳,无需按 hash 回取 |
|
|
219
|
-
| mcp | `TaskSpec.mcp`(allowTools + principalHeader) | env/header NAME
|
|
220
|
+
| mcp | `TaskSpec.mcp`(allowTools + principalHeader + sessionMetaKey) | env/header NAME→值解析;`sessionMetaKey` 本包原样承运,交给引擎之前可调引擎的 `judgeSessionMetaKey` 早判 |
|
|
220
221
|
| limits(0.19.0,cost/限流族 14 键;11.0.0 起五个限额键的唯一位) | 消费方的限额面(server:`stage-limits`) | `.optional()` 无默认;本包只判结构,业务域值(下限/0 哨兵/跨键不变量)由消费方响亮拒 |
|
|
221
222
|
| governance.autonomy / commandPolicy | 见 §6(小心区) | 经 tightenTaskSpec / combinePolicies |
|
|
222
223
|
| rosters | control-plane only | `/effective` wire 经 `resolveEffectiveForWorker` 清空/剥离 |
|
|
@@ -461,3 +462,72 @@ fleet 成员对中心公告的可达地址(`FLEET_ADVERTISE_ADDRESS`,中心往
|
|
|
461
462
|
- **缺席 / 空串的处置**:见 §13.3 —— 读的一方自己答。
|
|
462
463
|
- **座位名册**:一个值算不算「后面要拼路径的基址」是读它的一方的事;本包给的是判这种座位的那一只判官,不维护座位清单(§13 开头列的是今天已知的读者)。
|
|
463
464
|
- **不进保留 env 名表**:`FLEET_ADVERTISE_ADDRESS` 与 generation / scope 两只不同 —— 那两只只有渲染器能写,所以进 `RESERVED_WORKER_ENV`;公告地址是运维可以声明的值(渲染器也可以写),`worker.env` 设它照旧不被拒。
|
|
465
|
+
|
|
466
|
+
## 14. 中心引用解析口 `resolveCenterRefs` 与记录读器 `readPlainStringRecord` —— 服务端中心腿与客户端核心两方的读法
|
|
467
|
+
|
|
468
|
+
中心名册里 MCP server 的传输带两张**引用表**:stdio 的 `envRefs`(目标 env 键 → 变量名)、http 的 `headerRefs`(目标头名 → 变量名)。名册只存变量名、从不存值;值要在消费方自己的宿主环境里读。
|
|
469
|
+
「变量没设」「设了但读到的不是串」「读它的时候抛了」「引用表本身不成样子」四种情形,本包此前只发引用表的形、不发读法,留给每个宿主自己写。本节说**本包发什么、两方各自怎么读**:本包只有**读引用表的那一个读法**(纯、浏览器安全、零 IO、不读环境);
|
|
470
|
+
读哪一层环境、要不要缓存、解不开时挂不挂(§14.4),都是两方自己的事。
|
|
471
|
+
|
|
472
|
+
### 14.1 本包发什么
|
|
473
|
+
|
|
474
|
+
| 件 | 是什么 |
|
|
475
|
+
|---|---|
|
|
476
|
+
| `resolveCenterRefs(refs, lookup)` | 解析口。`refs` = 名册里 `envRefs` / `headerRefs` 的值(`undefined` = 没声明);`lookup(name) => string \| undefined` = **调用方给的**查找函数(必给)。返回 `CenterRefsResolution`,按 `verdict` 分三臂;包根 |
|
|
477
|
+
| `CENTER_REF_FAULTS` / `CenterRefFault` | 一个成员没解到的原因词,闭集:`missing_name` · `not_a_string` · `read_threw`;包根 |
|
|
478
|
+
| `CENTER_REFS_VERDICTS` / `CenterRefsVerdict` | 整台结论的词,闭集:`resolved` · `unresolved` · `refs_unreadable`;包根 |
|
|
479
|
+
| `CenterRefMember` / `CenterRefMemberVerdict` / `CenterRefLookup` / `CenterRefsResolution` | 型:成员行 `{ key, ref, verdict }`(`verdict` = `resolved` 或上面三词之一)· 判定词 · 查找函数型 · 读数;包根 |
|
|
480
|
+
| `readPlainStringRecord(v)` | 「名 → 串」记录的读器(传输读器读 `env` / `headers` 用的就是它,同一个函数);包根 |
|
|
481
|
+
| `PLAIN_STRING_RECORD_FAULTS` / `PlainStringRecordFault` / `PlainStringRecordRead` / `PLAIN_STRING_RECORD_RESERVED_MEMBER` | 读器的原因词表(三词)· 词的型 · 读数型 · 保留成员名 `"__proto__"`;包根 |
|
|
482
|
+
|
|
483
|
+
### 14.2 解析口的读法(一条律:每成员一句判定,整台一个结论)
|
|
484
|
+
|
|
485
|
+
1. 引用表经 `readPlainStringRecord` 读。读不出(整张不是纯数据、有成员的变量名不是串、读成员就抛、叫 `__proto__` 的成员)⇒ **整台 `refs_unreadable`**,`fault` 是读器的词、坏在某个成员时 `member` 点名它的回显形;**一个变量都没问**。
|
|
486
|
+
读器会把叫 `__proto__` 的串值成员剔出副本;解析口不许这样悄悄丢一条引用再挂,所以同样答 `refs_unreadable` / `member_name_reserved`。
|
|
487
|
+
2. 每个成员恰问一次 `lookup(变量名)`(按引用表副本的自有键序:整数形的键在前、其余按记录列出的次序;实参只有变量名),判成**一个词**。一个成员坏了不早停 —— 每个成员都有自己的判定,调用方一次点名所有缺的变量:
|
|
488
|
+
|
|
489
|
+
| `lookup` 的答案 | 成员词 |
|
|
490
|
+
|---|---|
|
|
491
|
+
| 一个串(空串也是串) | `resolved` |
|
|
492
|
+
| `undefined`(变量没设) | `missing_name` |
|
|
493
|
+
| 别的种类(数、`null`、对象、函数……) | `not_a_string` |
|
|
494
|
+
| 抛了(任何抛出值,含撤销的 Proxy) | `read_threw`(不传出) |
|
|
495
|
+
|
|
496
|
+
3. 整台结论:每个成员都 `resolved`(零成员也是)⇒ `resolved`,带 `values`(目标键 → 串,新铸的朴素对象);有成员不是 ⇒ `unresolved`,带 `members`(**行里没有变量的值**,失败读数可以进日志);引用表读不出 ⇒ `refs_unreadable`。
|
|
497
|
+
4. `refs` 是 `undefined` ⇒ `resolved`、零成员、零次查找,与空表同答;别的非记录值(`null`、数组、串)是 `refs_unreadable`,不当缺席。
|
|
498
|
+
5. `lookup` 没给 / 不是函数 ⇒ **`TypeError`**(调用方的编程错;不折成 `read_threw`,更不回落任何环境 —— 本包不读 `process.env`)。
|
|
499
|
+
|
|
500
|
+
`lookup` 的写法是调用方的事,有一条提醒:对普通对象做 `obj[name]` 会读到继承位(`toString` / `constructor`),解析口把它判成 `not_a_string`(响亮,不当作已设);想让这类名字落成「没设」就按自有键读
|
|
501
|
+
(`Object.hasOwn(table, name) ? table[name] : undefined`)。同一个变量被两个目标键引用会被问两次 —— 缓存(每名读一次、跨轮不缓存)是查找函数的事。
|
|
502
|
+
|
|
503
|
+
### 14.3 读器的原因词(`PLAIN_STRING_RECORD_FAULTS`,三词)
|
|
504
|
+
|
|
505
|
+
| 词 | 说的是 | 记录交不交 |
|
|
506
|
+
|---|---|---|
|
|
507
|
+
| `not_plain_record` | 整张不是纯数据(`null` / 数组 / 原始值 / `Map` / 类实例 / 函数,或读形状就抛的对象) | 不交 |
|
|
508
|
+
| `member_not_string` | 某个成员的值不是串(读成了别的种类),或它读不出(它的访问器抛了,或读它的描述符时代理陷阱抛了)—— 两种情形 `detail` 句子分说 | 不交,`member` 点名它 |
|
|
509
|
+
| `member_name_reserved` | 某个成员叫 `__proto__`(引擎的声明收据拒这个名);名坏优先 —— 值也坏或读不出时句子并列说全,词仍是这一个 | 值是串:交其余、`reservedMember: true`;否则不交 |
|
|
510
|
+
|
|
511
|
+
按词分派;读器从不抛。传输读器的 `lost[].fault` 就是这张表(读成员就抛的那一形,词是 `member_not_string`,句子 `could not be read (its getter threw)`)。
|
|
512
|
+
|
|
513
|
+
### 14.4 两方做什么
|
|
514
|
+
|
|
515
|
+
- **客户端核心 / 服务端中心腿**:
|
|
516
|
+
```ts
|
|
517
|
+
const r = resolveCenterRefs(transport.envRefs, (name) => hostEnv.read(name)); // hostEnv = 你的宿主环境座位;headerRefs 同
|
|
518
|
+
switch (r.verdict) {
|
|
519
|
+
case "resolved": return mount(r.values);
|
|
520
|
+
case "unresolved": for (const m of r.members) if (m.verdict !== "resolved") warn(m.verdict, m.key, m.ref); return skipWholeServer();
|
|
521
|
+
case "refs_unreadable": warn(r.fault, r.member); return skipWholeServer();
|
|
522
|
+
default: { const unhandled: never = r; throw new Error(`unhandled ${String(unhandled)}`); }
|
|
523
|
+
}
|
|
524
|
+
```
|
|
525
|
+
解析不了时挂不挂是你这条腿的规则(「整台不挂 + 点名」是一台少了鉴权头或凭据 env 的 server 不拨号的那条);本口只判。
|
|
526
|
+
- **不手抄**:不要在自己这边再写一遍「变量没设 / 读到的不是串 / 读抛」的判法或这三个词的字面量;词表与读数型从本包 import,穷尽 `switch` 加 `never` 兜底(加词时编译红)。
|
|
527
|
+
|
|
528
|
+
### 14.5 本包不做的(如实)
|
|
529
|
+
|
|
530
|
+
- **读哪一层环境**:`lookup` 读什么(进程环境、合并后的环境、远端环境)是调用方的事;本包不读 `process.env`,也不缓存。
|
|
531
|
+
- **挂不挂**:读数是判决,不是处置。
|
|
532
|
+
- **变量名的形**:名册的 schema 已把变量名限在 env 名的字符集内;本口把变量名当不透明串交给 `lookup`,不再判一遍形。
|
|
533
|
+
- **值的好坏**:解到串就是 `resolved`,空串、很长的串都不另判;值是不是凭据、扣不扣留,是读数之后的另一道判官的事。
|
package/llms-full.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
llms-full.txt — 自包含全文 · 消费方(使用者)视角 · @sema-agent/settings-schema
|
|
3
|
-
重写日期: 2026-10-
|
|
3
|
+
重写日期: 2026-10-27 | 包版本: 14.8.0
|
|
4
4
|
生成方式: 无生成脚本——按当前树 src/*.ts 导出面 + package.json + README/CHANGELOG 手写事实版。
|
|
5
5
|
证据约定: 每条"它怎么工作"的断言附 (文件: 符号) 坐标,刻意不用行号(行号逐版腐烂;符号名由
|
|
6
6
|
typecheck 与 test/package-surface.test.ts、test/docs-hygiene.test.ts 等常驻门钉住)。无证据推断显式标【推断】。
|
|
@@ -109,6 +109,9 @@ registry:公网 npmjs,无需私有 registry 配置。
|
|
|
109
109
|
· mcp:`McpServerSpec[]` —— `transport` 判别 stdio(command/args/envRefs)| http(url/headerRefs/
|
|
110
110
|
principalHeader/assertionHeader;后两者互斥);`allowTools?`、`scenarios`/`rosters` 过滤、`elicitation`(默认 false,inbound elicitation
|
|
111
111
|
的 per-server opt-in)、`contentOrigin?`(信任出处声明,闭词表 `MCP_CONTENT_ORIGINS =
|
|
112
|
+
--- 14.8.0:`McpServerSpec.sessionMetaKey?`(`z.unknown().optional()` 解析透明,登记在 `PARSE_TRANSPARENT_KEYS`,`validatedBy: "engine-ingest"` —— 唯一判官 = 引擎根导出 `judgeSessionMetaKey`(类型 / 非空 / 上界 / MCP `_meta` 键名文法 / 保留前缀 / `progressToken` / `sema/` 命名空间一并判);引擎往这台服务器的 `tools/call` / `resources/read` 的 `params._meta[key]` 里放发送腿会话 id;缺席不铸键)---
|
|
113
|
+
--- 14.8.0:`McpServerSpec.startupTimeoutMs?`(`z.unknown().optional()` 解析透明,登记在 `PARSE_TRANSPARENT_KEYS`,`validatedBy: "engine-ingest"` —— 格式与界由引擎判:唯一判官 = 引擎根导出 `mcpStartupTimeoutMs`(是不是数 / 整数性 / 范围一并判,在拨号时判:不合 ⇒ 拒这一台服务器的拨号,其余服务器照挂);这一台服务器自己的启动界,握手与首次工具列举各带它,缺席读进程级缺省界;本包不判、任何 JSON 值原样过,缺席不铸键)---
|
|
114
|
+
--- 14.8.0:`remote-` 前缀保留给设备执行端提供的远程 MCP 服务器(`REMOTE_MCP_SERVER_NAME_PREFIX`,挂载名 `remote-<名>`;字面比较、区分大小写):请求面在 `isUsableMcpServerName` / `describeBadMcpServerName`(线上名判官 `isUsableWireName` 不变,A2A 对端名用它);配置面 `McpServerSpec.name` 不拒它(拒是校验收紧,归 major)---
|
|
112
115
|
--- 12.2.0:`McpServerSpec.toolAxes?` / `authForm?` / `entryKind?`(三键均 `z.unknown().optional()` 解析透明,登记在 `PARSE_TRANSPARENT_KEYS`(`authForm` / `entryKind` `validatedBy: "consumer"`;`toolAxes` 自 13.0.0 起 `"engine-ingest"` —— 形判官只有引擎根导出 `readMcpToolAxes` 一只,消费方两腿都调它);连接器条目的声明键,词表与语义归读它的消费方,本包只承载、原样过任意 JSON 形;缺席不铸键)---
|
|
113
116
|
--- 12.2.0:`McpTransport`(http 形)`assertionHeader?`(HTTP 头名,过 `principalHeader` / `headerRefs` 键同一只头名判官;承载连接器断言;与 `principalHeader` **互斥** —— 同设 ⇒ 解析期拒,条目层 `superRefine` 判一处,拒句点名条目名与两键;stdio 形上与 `principalHeader` 同判:键被剥并报 `unknown-keys-dropped`;缺席不铸键;断言怎么铸 / 验归消费方)---
|
|
114
117
|
--- 1.9.0:`McpServerSpec.toolFaces?`(`z.unknown().optional()` 解析透明,登记在 `PARSE_TRANSPARENT_KEYS`;引擎的工具名册 face 覆盖层,按远端工具名 key `{family?, pathTarget?, renderHints?, ruleFace?}`;形校验归引擎摄入侧,不合 schema 的工具不挂并通告一次 `config.tool_face_invalid`;缺席不铸键)
|
package/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
llms.txt — 消费方(使用者)视角索引 · @sema-agent/settings-schema
|
|
3
|
-
重写日期: 2026-10-
|
|
3
|
+
重写日期: 2026-10-27 | 包版本: 14.8.0
|
|
4
4
|
生成方式: 无生成脚本——按当前树的 src/*.ts 导出面 + package.json + README/CHANGELOG 手写事实版;
|
|
5
5
|
每条断言附证据坐标(文件:符号),刻意不用行号(行号随每版腐烂,符号名由 typecheck/test 钉住)。
|
|
6
6
|
刷新触发: package.json 版号变更(test/docs-hygiene.test.ts D 组钉「包版本:」与 package.json 相等、
|
|
@@ -52,7 +52,7 @@ llms.txt — 消费方(使用者)视角索引 · @sema-agent/settings-schema
|
|
|
52
52
|
(src/config-fns.ts: `rebaseWarningPaths` / `EntrySalvageResult.keptIndex` / `GrandfatherHostsReadResult.keptIndex`)
|
|
53
53
|
- **解析透明键登记表** `PARSE_TRANSPARENT_KEYS`(2.0.0):本包收下但**不校验其形**的键一处列全,每行写清
|
|
54
54
|
谁校验(引擎摄入侧 / 消费方)。「解析透明」按**行为**定义(喂一组代表性值全收),所以 `extraBody` 不在表里
|
|
55
|
-
——它有自己的形门(必须是纯 JSON 对象),开放的只是对象里的键名词表。今日
|
|
55
|
+
——它有自己的形门(必须是纯 JSON 对象),开放的只是对象里的键名词表。今日 10 员:
|
|
56
56
|
`models.models[].compat`(1.10.0,镜像引擎 `OpenAICompletionsCompat` 五键 `thinkingFormat`/
|
|
57
57
|
`reasoningEffortLevels`/`maxTokensField`/`requiresReasoningContentOnAssistantMessages`/
|
|
58
58
|
`supportsReasoningEffort`;真需求 = vLLM/Qwen 类缺省开思考的网关要 `chat_template_kwargs.enable_thinking=false`,
|
|
@@ -60,7 +60,7 @@ llms.txt — 消费方(使用者)视角索引 · @sema-agent/settings-schema
|
|
|
60
60
|
例 `{"anthropic-beta":"context-1m-2025-08-07"}`;头名闭集白名单 × 读它的线路 × 值形的判据唯一属主是 server,
|
|
61
61
|
坏声明 ⇒ 该条目整条不可用;本包不复述那张表)、`mcp.servers[].source`(1.7.0,声明方自述的分组标签,开集,只做显示
|
|
62
62
|
分组不进信任轴)、`mcp.servers[].toolFaces`(1.9.0,按远端工具名 key 的 face 覆盖层,形归引擎摄入侧)、
|
|
63
|
-
`mcp.servers[].toolAxes` / `authForm` / `entryKind`(12.2.0,连接器条目的三只声明键,本包只承载;`toolAxes` 的形判官 = 引擎 `readMcpToolAxes` 一只,另两键的语义归读它的消费方)、
|
|
63
|
+
`mcp.servers[].toolAxes` / `authForm` / `entryKind`(12.2.0,连接器条目的三只声明键,本包只承载;`toolAxes` 的形判官 = 引擎 `readMcpToolAxes` 一只,另两键的语义归读它的消费方)、`mcp.servers[].sessionMetaKey`(14.8.0,引擎往这台服务器请求 `_meta` 里放会话 id 的那把键;唯一判官 = 引擎根导出 `judgeSessionMetaKey`,本包只承载)、`mcp.servers[].startupTimeoutMs`(14.8.0,这一台服务器自己的启动界;唯一判官 = 引擎根导出 `mcpStartupTimeoutMs`,本包只承载)、
|
|
64
64
|
`entitlement.subjects[].overrides[].value`。`compat`/`headers`/`extraBody` 仍走同一只自由形安全判据(secret 形/
|
|
65
65
|
访问器/循环/非 JSON/过深 ⇒ 拒 —— 那是安全边界,不是形校验)。(src/types.ts: `PARSE_TRANSPARENT_KEYS`)
|
|
66
66
|
- **`mcp.servers[].transport.assertionHeader`**(12.2.0 新增,http 形可选):承载连接器断言的 HTTP 头名,头名过 `principalHeader` /
|
|
@@ -69,6 +69,8 @@ llms.txt — 消费方(使用者)视角索引 · @sema-agent/settings-schema
|
|
|
69
69
|
- **`mcp.servers[].contentOrigin`**(1.4.0 新增):MCP 工具产出的信任出处声明,闭词表
|
|
70
70
|
`MCP_CONTENT_ORIGINS = ["local","execution","external"]`(表外值 parse 拒,不做大小写折叠);缺席 = 引擎
|
|
71
71
|
预声明行为。与 `source` 分轴:信任走它,显示分组走 `source`。(src/types.ts: `MCP_CONTENT_ORIGINS`)
|
|
72
|
+
- **`mcp.servers[].startupTimeoutMs`**(14.8.0 新增,可选):这一台服务器自己的启动界(整数毫秒,握手与首次工具列举各带它;缺席读进程级缺省界)。解析透明、原样承运:
|
|
73
|
+
格式与界由引擎判 —— 唯一判官 = 引擎根导出 `mcpStartupTimeoutMs`,在拨号时判,不合 ⇒ 拒这一台服务器的拨号,本包不判。(src/types.ts: `McpServerSpec` / `PARSE_TRANSPARENT_KEYS`)
|
|
72
74
|
- 把零散域**合并成一个 `EffectiveConfig`**(`buildEffective`,确定性:`updatedAt` 必传;`onWarning` 收
|
|
73
75
|
降级/剥键/承运/未读文件五类告警),或在**消费端边界容错读 wire 载荷**(`readEffectiveWire`)。
|
|
74
76
|
(src/config-fns.ts: `buildEffective` / `readEffectiveWire` / `EffectiveReadWarning`)
|
|
@@ -116,9 +118,13 @@ llms.txt — 消费方(使用者)视角索引 · @sema-agent/settings-schema
|
|
|
116
118
|
- **MCP 名单判决**(13.0.0):`mcpServerPolicyVerdict(server, layers)` → `McpPolicyBlock{name, list, rule, target, written, sources}` 或 `undefined`;
|
|
117
119
|
判按展开后目标、回显只按展开前写法(stdio 只给可执行名 + 参数个数);托管层 = 源表档 `managed` 的源(层只带源名);只收紧的源只贡献拒绝名单(允许名单是拼接 = 放宽,不读)。(src/mcp-server-policy.ts)
|
|
118
120
|
- **请求面 MCP 条目判官**(14.0.0,`src/mcp-request-entry.ts`):`isUsableWireName` / `describeBadWireName`(引擎线上名长界 `TOOL_WIRE_NAME_MAX_CHARS` 的镜像;首尾空白 = 坏名,不 trim 不规范化,内部空白合法)·
|
|
121
|
+
`isUsableMcpServerName` / `describeBadMcpServerName`(MCP 服务器名 = 线上名判官再加一臂:`remote-` 前缀 `REMOTE_MCP_SERVER_NAME_PREFIX` 保留给设备执行端提供的远程 MCP 服务器,配置面 `McpServerSpec.name` 不拒(拒是校验收紧,归 major);A2A 对端名仍用 `isUsableWireName`)·
|
|
119
122
|
`isContentOriginWord` / `describeBadContentOrigin`(回显剥控制与双向字符、截 64 字、引号形)· `readMcpIdentityHeaders` · `readRequestMcpTransport`(硬坏形 `ok:false` 点名键路径;软坏形读器丢键并记进 `lost`;
|
|
120
123
|
`env` / `headers` 只收纯数据的「名 → 串」记录,`Map` / 类实例 / 自有 `__proto__` 成员不收、交副本,`lost` 条目带 `member` / `fault` 机读位)
|
|
121
124
|
+ 值种类描述件 —— 服务端请求腿与壳的发送前预检同读一份(判据与原因句逐字同)。`toolFaces` 声明在本包解析透明,形归引擎摄入侧判,本包不镜像工具面词表。
|
|
125
|
+
- **中心引用解析口**(`src/center-refs.ts`):`resolveCenterRefs(refs, lookup)` —— `refs` = 名册里 `envRefs` / `headerRefs`(目标键 → 变量名;`undefined` = 没声明),`lookup(name) => string | undefined` 由调用方给(必给;没给 ⇒ `TypeError`,本包不读 `process.env`)。
|
|
126
|
+
每成员一句判定 `resolved` / `missing_name` / `not_a_string` / `read_threw`(`CENTER_REF_FAULTS`),整台 `resolved` / `unresolved` / `refs_unreadable`(`CENTER_REFS_VERDICTS`);值只在 `resolved` 臂的 `values`,`unresolved` 臂的行只有词;只判不决定挂不挂。
|
|
127
|
+
引用表经公开记录读器 `readPlainStringRecord`(`PLAIN_STRING_RECORD_FAULTS` 三词:`not_plain_record` / `member_not_string` / `member_name_reserved`)读,读不出整张不交、一个变量都不问。读法见 `docs/CONSUMER-INTEGRATION.md` §14。
|
|
122
128
|
- **一行回显的剥除集**(`src/control-and-bidi.ts`,主 barrel):`CONTROL_AND_BIDI_CHARS`(C0 + DEL + 12 个 `Bidi_Control` 码点,正则字符类体的源码文本)·
|
|
123
129
|
`stripControlAndBidi(text)` · `hasControlOrBidi(text)`;外来串落成一行(拒句 / 告警 / 日志 / 屏上)前剥的唯一一份,C1 与 U+2028 / U+2029 不在集里;
|
|
124
130
|
是本包的回显策略(不是引擎双向码点表的镜像),请求面描述器与消费方都读它,禁自存字符类。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/settings-schema",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.8.0",
|
|
4
4
|
"description": "Sema settings schema — pure config contract (zod domains + effective-config + roster resolution + ref-integrity + remoteExec) shared by sema-web-admin, sema-server, and the TOC desktop/CLI. One source of truth. (Renamed at 1.0.0 from @sema-agent/registry-core — name and docs only, no behavior change; note the range moves 0.19.0 -> 1.0.0, so a dependency must become ^1.0.0. The old names @sema-agent/registry-core <=0.19.0 and @sema-ai/registry-core remain published, frozen, for migration.)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "BUSL-1.1",
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
"prepublishOnly": "npm run build && npm run test"
|
|
149
149
|
},
|
|
150
150
|
"devDependencies": {
|
|
151
|
-
"@sema-agent/core": "7.
|
|
151
|
+
"@sema-agent/core": "7.58.0",
|
|
152
152
|
"@types/node": "^22.10.0",
|
|
153
153
|
"esbuild": "^0.21.5",
|
|
154
154
|
"typescript": "^5.7.0",
|