@sema-agent/settings-schema 14.6.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 +475 -0
- package/README.md +89 -5
- package/conformance/VERSION +1 -1
- package/conformance/cases/c84-sandbox-git-block-carried-verbatim/expected.json +153 -0
- package/conformance/cases/c84-sandbox-git-block-carried-verbatim/input.json +23 -0
- package/conformance/cases/c84-sandbox-git-block-carried-verbatim/meta.json +5 -0
- package/conformance/cases/c85-sandbox-git-refused-block-still-carried/expected.json +153 -0
- package/conformance/cases/c85-sandbox-git-refused-block-still-carried/input.json +23 -0
- package/conformance/cases/c85-sandbox-git-refused-block-still-carried/meta.json +5 -0
- package/dist/api/auth-bridge.d.ts +16 -2
- package/dist/api/auth-bridge.js +59 -24
- package/dist/api/credentials.d.ts +281 -0
- package/dist/api/credentials.js +149 -0
- package/dist/api/scopes.js +5 -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-d-file.js +33 -15
- package/dist/config-dir-migration.js +1 -0
- package/dist/config-fns.js +147 -81
- 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/canonical.js +4 -4
- package/dist/conformance/contract-adapter.js +26 -1
- package/dist/conformance/corpus.js +4 -4
- package/dist/conformance/derive.js +2 -2
- package/dist/conformance/run.d.ts +3 -0
- package/dist/conformance/run.js +53 -12
- package/dist/conformance/temp-roots.d.ts +31 -0
- package/dist/conformance/temp-roots.js +184 -0
- package/dist/cross-session.d.ts +4 -4
- package/dist/declared-capture.d.ts +41 -0
- package/dist/declared-capture.js +344 -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/file-edit.js +11 -15
- package/dist/fleet.d.ts +36 -7
- package/dist/fleet.js +83 -32
- package/dist/hash.d.ts +0 -9
- package/dist/hash.js +64 -7
- package/dist/hooks-config.js +18 -3
- package/dist/http-hook-allowlists.d.ts +22 -9
- package/dist/http-hook-allowlists.js +169 -91
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/mcp-request-entry.d.ts +67 -13
- package/dist/mcp-request-entry.js +132 -93
- 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 +236 -96
- package/dist/own-key-read.d.ts +247 -0
- package/dist/own-key-read.js +449 -0
- package/dist/plain-json-object.d.ts +11 -1
- package/dist/plain-json-object.js +37 -1
- package/dist/remote-exec.js +9 -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/safety-merge-spec.js +50 -37
- package/dist/sandbox-git.d.ts +64 -0
- package/dist/sandbox-git.js +89 -0
- package/dist/scheduler-store.js +19 -11
- package/dist/settings-units.js +14 -12
- package/dist/tier-words.d.ts +33 -0
- package/dist/tier-words.js +43 -0
- package/dist/types.d.ts +12 -2
- package/dist/types.js +35 -6
- package/dist/url-shape.d.ts +16 -0
- package/dist/url-shape.js +18 -0
- package/dist/web-admin-credential.js +5 -2
- package/dist/web-admin-session-url.js +2 -2
- package/dist/worker-row-verdict.d.ts +11 -0
- package/dist/worker-row-verdict.js +58 -2
- package/dist/workers-rows.js +38 -10
- package/dist/zod-unwrap.d.ts +6 -0
- package/dist/zod-unwrap.js +14 -7
- package/docs/API-SURFACE.md +100 -5
- package/docs/CONSUMER-INTEGRATION.md +250 -2
- package/llms-full.txt +26 -4
- package/llms.txt +11 -4
- package/package.json +2 -2
- package/dist/definition-copy.d.ts +0 -23
- package/dist/definition-copy.js +0 -52
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`;缺席不铸键)
|
|
@@ -297,8 +300,8 @@ entitlement/execution/limits = `none`;`projects` = `salvage`,整域档位仍 `"t
|
|
|
297
300
|
- `httpHookAllowlists`(src/http-hook-allowlists.ts):类目行 `SAFETY_MERGE_SPEC.httpHookAllowlists`(denyFirst / global / setNarrower / resolver / closed)。
|
|
298
301
|
`HTTP_HOOK_ALLOWLIST_KEYS`;片段 `HttpHookAllowlistSettings`;层 `HttpHookAllowlistLayer = { source: SettingsSource, 两张名单? }`(只带源名,不带档);
|
|
299
302
|
层读法 `readHttpHookAllowlistLayer(source, settings)` → `{ layer, malformed }`(坏形 ⇒ `[]` 并点名);
|
|
300
|
-
`httpHookUrlVerdict(url, layers, workspace)` → `undefined` | `HttpHookUrlBlock{ list:"allowedHttpHookUrls", rule:"empty"|"url", sources }`:每张**准入**名单
|
|
301
|
-
(准入 ⇔ `layerAdmission(源, 工作区读数, "httpHookAllowlists") === "admitted"` —— 源表定档、类目行定地板;闭集外的源 / 读数 RangeError)都须放行 =
|
|
303
|
+
`httpHookUrlVerdict(url, layers, workspace)`(`layers` 的每一层经读器同一只读法读 —— 读器交出的 `read.layer`、手造的寻常层、本 realm 的 `JSON.parse` 出来的层同答;读不出 `source`〔缺席 / 只靠继承 / 不一致 / 非串〕的层当坏形层全拦、判决词 `malformed` 不点名;源读得出而名单读不出 ⇒ `malformed` 点名那一层;`empty` 只给真空名单)→ `undefined` | `HttpHookUrlBlock{ list:"allowedHttpHookUrls", rule:"malformed"|"empty"|"url", sources }`:每张**准入**名单
|
|
304
|
+
(准入 ⇔ `layerAdmission(源, 工作区读数, "httpHookAllowlists") === "admitted"` —— 源表定档、类目行定地板;闭集外的源 / 读数 RangeError)都须放行 = 跨层取交;名单、`hookVars`、`layers` 都只认朴素数组(原型恒等于本 realm 的 `Array.prototype`〔另一个 realm 的数组按坏形,先 JSON 往返〕、`constructor` / `filter` / `flatMap` / `Symbol.iterator` 是本 realm 的内建、自有键只有下标与 `length`;子类等一律按坏形);
|
|
302
305
|
`httpHookEnvVarsAllowed(hookVars, layers, workspace)` = hook 自己的 allowedEnvVars ∩ 每张准入名单。与 CC 差:拼接 → 取交、任意层 → 准入层(SS-CCD-06 / 07)。
|
|
303
306
|
- `mcpServerPolicyVerdict(server, layers)`(src/mcp-server-policy.ts)→ `undefined` | `McpPolicyBlock{ name, list, rule, target, written, sources }`;闭集 `MCP_SERVER_LIST_KEYS` /
|
|
304
307
|
`MCP_POLICY_RULES`(name / command / url / empty)。层 `McpPolicyLayer = { source: SettingsSource, … }`(只带源名)。拒绝绝对优先、各层都算(名字 → 命令整数组 → URL 拒绝出口);
|
|
@@ -430,6 +433,7 @@ entitlement/execution/limits = `none`;`projects` = `salvage`,整域档位仍 `"t
|
|
|
430
433
|
`HEARTBEAT_REPLY_CAPABILITIES_KEY = "capabilities"`(`WebAdminCapabilities` 的唯一载体 = 心跳 2xx 答复体的这个键,键查找在 `readCapabilityReading` 里;位按调用方凭证答,共享令牌看不到 `servingLease`);
|
|
431
434
|
env 名常量 `FLEET_GENERATION_ENV` = `"FLEET_GENERATION"`(进 `RESERVED_WORKER_ENV`;渲染器与引擎共用,不各自拼;实例身份 `instanceId`(体的顶层)是引擎每进程自铸的,无 env 名)、
|
|
432
435
|
`FLEET_SCOPE_ENV` = `"FLEET_SCOPE"`(8.3.0,8.3.1 注改真;成员所属租户 scope,与该成员 per-worker 令牌绑定的 scope 同值,渲染器写、引擎读作自身身份的 scope、只用来比对 `DrainRequest.scope`(请求不带 scope ⇒ 读成默认 scope)、不从令牌格式反推;续租 / 心跳的 scope 由凭证定、不取这只 env,两者同值是渲染器的义务;缺席 = 默认 scope `GLOBAL_SCOPE`;同样进 `RESERVED_WORKER_ENV`);
|
|
436
|
+
14.7.0 additive(公告地址 env 名;`.` 与 `./fleet`):env 名常量 `FLEET_ADVERTISE_ADDRESS_ENV` = `"FLEET_ADVERTISE_ADDRESS"`(成员对中心公告的可达基址,中心往它后面拼路径;渲染的一方与读的一方都 import,不各自拼;**不**进 `RESERVED_WORKER_ENV`——运维可经 `worker.env` 声明;它的判官见 4.10d);
|
|
433
437
|
派发(`DISPATCH_STRATEGIES` round-robin|least-inflight|consistent-hash、`DispatchPolicy`、`pickInstance`、
|
|
434
438
|
`SUBMIT_IDEMPOTENCY_KEY`);配额租约(`QuotaLease`/`leaseRemaining`/`leaseExhausted`/`shouldRenewLease`/
|
|
435
439
|
`reconcileLease`);用量上报(`UsageEntry`/`UsageReport`/`aggregateUsage`/`QuotaResetEvent`)。
|
|
@@ -453,7 +457,8 @@ entitlement/execution/limits = `none`;`projects` = `salvage`,整域档位仍 `"t
|
|
|
453
457
|
四个消费仓对现包名自始至终零 import —— 仅 sdk 的同源锚测试经退役包名 `registry-core` 的冻结版仍取它)。`api/scopes` 同理持有 `SCOPES_V1_PATHS`/`SCOPE_CLAIM`。
|
|
454
458
|
- `api/auth-bridge`:worker 验 web-admin 签发用户 JWT 的契约——RS256-only、JWKS(`WEB_ADMIN_JWKS_PATH`,
|
|
455
459
|
kid-miss 强刷 + ≥60s 节流)、时钟偏移 60s(exp / nbf / iat 同一个容忍)、24h 离线宽限后 fail-closed;`VerifierConfig`/`VerifiedIdentity`
|
|
456
|
-
(携 `scope?` 与 `iat
|
|
460
|
+
(携 `scope?`、`iat?` 与 `principalInc?`:`iat` 签发时刻整数秒原样带出,缺席不铸键,在场而非非负整数 ⇒ 该令牌 malformed;`principalInc`(14.7.0)= 令牌声明 `PRINCIPAL_INC_CLAIM`(`"sub_inc"`)的化身号,
|
|
461
|
+
非空串原样,缺席不铸键(从不读成 0),在场而非非空串 ⇒ 该令牌 malformed;`PrincipalIncarnation` 是所有化身号字段共读的那一只 schema)/`AuthBridgeErrorCode` + 纯判定 `shouldForceJwksRefresh`/`jwksWithinOfflineGrace`/
|
|
457
462
|
`classifyTimeClaims`/`toVerifiedIdentity`/`looksLikeJwt`。
|
|
458
463
|
- `api/scopes`:多租户 scope 契约——`Scope`/`ScopeMember`(viewer<editor<publisher<admin)、保留
|
|
459
464
|
`GLOBAL_SCOPE="global"`、JWT `scope` claim(缺席=global);判定纯函数 `resolveTokenScope`/`canSwitchScope`/
|
|
@@ -489,6 +494,23 @@ entitlement/execution/limits = `none`;`projects` = `salvage`,整域档位仍 `"t
|
|
|
489
494
|
`retiredEnvRefusal(env)`(纯,读传入的 env;码 `RETIRED_ENV_REFUSAL_CODE` = `config.env_key_retired`;只点名键不回显值);
|
|
490
495
|
目录 wire 投影 `buildRetiredEnvWire()`。引擎起服 / 壳起本机引擎 / web-admin 渲染 worker env 判同一张表。
|
|
491
496
|
|
|
497
|
+
--- 4.10c 沙箱 git 凭据平面(src/sandbox-git.ts + src/api/credentials.ts,主 barrel,不开子路径;14.7.0) ---
|
|
498
|
+
- 沙箱里的 git 用成员本人的凭据:数据面向 web-admin 的凭据取值口按 run 身份申领句柄、凭句柄兑换。本包只有形与词表,零 IO。
|
|
499
|
+
- origin 规范形:`isSandboxGitOrigin(raw)` —— 串逐字等于 `new URL(raw).origin` 且 scheme ∈ {http, https}(小写 host、去缺省端口、无尾斜杠、无 userinfo / 路径 / 查询 / 片段都是这一个等式的推论;origin 不表达子路径部署,无「削成 origin」的规范化器);
|
|
500
|
+
zod 形 `SandboxGitOrigin` / `SandboxGitOriginList`(≤ `SANDBOX_GIT_MAX_ORIGINS` = 16、两两不同、空表合法)。
|
|
501
|
+
- 有效配置块 `sandboxGit`:`SandboxGitConfig` = `{ origins: [{ origin, connectUrl }] }`(`connectUrl` 过 `SandboxGitConnectUrl` = 非秘密 https URL)。`/effective` 载荷上的**非域顶层键**,可选、无默认;`readEffectiveWire` 逐字承运(`EffectiveWire.sandboxGit` 是 `unknown`),
|
|
502
|
+
消费方用 `SandboxGitConfig` 判。块里 http origin 可读(它的拒因是逐 origin 应答里的 `insecure_transport`,不是块的校验拒)。
|
|
503
|
+
- 取值口 wire(`kind: "sandbox_git"`):`SandboxGitCredentialRequest`(申领)/ `CredentialHandleAnswer` / `CredentialResolveRequest`(与种类无关)/ `SandboxGitCredentialAnswer`(每 origin 一行 `SandboxGitOriginAnswer`,按 `state` 判别;
|
|
504
|
+
`secret` 只在 `active` 臂,别的臂剥掉;`needs_reauth` 行必带 `credentialId`)/ `SandboxGitCredentialRefusal`(`{ error, permanence, message }`,`permanence` 必须等于拒答表里这一行的)。解析一律剥未知键。
|
|
505
|
+
- 三张词表,各一张、每个词只在 `src/api/credentials.ts` 里拼一次:`SANDBOX_GIT_ORIGIN_VERDICTS`(逐 origin 判定序表 11 行,序即判定序;`SANDBOX_GIT_ORIGIN_STATES` 六词、`SANDBOX_GIT_ORIGIN_REASONS` 十词与应答臂的原因值域由它派生)·
|
|
506
|
+
`SANDBOX_GIT_REFUSALS`(十个整次拒答词 → HTTP 状态集 + `permanence`;`SANDBOX_GIT_REFUSAL_ERRORS` 由它派生)· `SANDBOX_GIT_PERMANENCE`(`terminal` / `transient`)。两方各自怎么读:`docs/CONSUMER-INTEGRATION.md` §12。
|
|
507
|
+
|
|
508
|
+
--- 4.10d 「后面要拼路径的基址」座位判官(src/url-shape.ts,主 barrel;14.7.0) ---
|
|
509
|
+
- 一种座位的值是别人要往它后面拼路径的基址(中心基址三席、成员对中心公告的地址 `FLEET_ADVERTISE_ADDRESS_ENV`、会话链接的基址):不许带凭据 / query / fragment,路径前缀放行。
|
|
510
|
+
- `PATH_BASE_URL_FORBIDDEN_PARTS`:这种座位禁用的 URL 成分,闭集、冻结、判序 `userinfo` · `query` · `fragment`(策略集,独立于判官词表 `HTTP_URL_PARTS`:词表说 URL 有哪些成分,本集说这种座位禁哪些;今天碰巧同三词,不由词表派生,词表加词时要显式裁)。
|
|
511
|
+
- `pathBaseUrlFlaws(url)` = `httpUrlFlaws(url, PATH_BASE_URL_FORBIDDEN_PARTS)`:`[]` = 合格,否则按判序交回规则词(`not-http-url` / `userinfo` / `query` / `fragment`),不含值的片段;
|
|
512
|
+
判占位展开之后的值(`http://$(POD_IP):8090` 过,`http://[$(POD_IP)]:8090` 拒);`webAdminSessionUrl` 也读它。占位展开、可达性、缺席 / 空串的处置不在本包;两方读法见 `docs/CONSUMER-INTEGRATION.md` §13。
|
|
513
|
+
|
|
492
514
|
--- 4.11 Node-only(`./node`:file-store / file-edit / bundle / local-load / scheduler-store-node / 目录迁移) ---
|
|
493
515
|
- `loadLocalConfig(root, {onWarning}?)` → `LocalConfig { effective, remoteExec, env, requiredEnv, warnings }`。
|
|
494
516
|
- `loadRemoteExec(root)`(三态,§8 T3)、`writeRemoteExec`(校验+原子写)、`remoteExecPath`、`loadEnvFile`
|
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`)
|
|
@@ -110,15 +112,19 @@ llms.txt — 消费方(使用者)视角索引 · @sema-agent/settings-schema
|
|
|
110
112
|
http/https/ws/wss 且 `ws+unix:` 套接字段逐字、解析不出的模式不放、解码出的字面 `*` 不当通配)/ `urlDenyPatternMatches`(⊇ `g9` ∪ 整串 glob)。
|
|
111
113
|
偏离登 `docs/CC-DIVERGENCE.md`。(src/url-pattern.ts)
|
|
112
114
|
- **http hook 两张名单**(13.0.0):类目 `SAFETY_MERGE_SPEC.httpHookAllowlists`(地板 global);`readHttpHookAllowlistLayer(source, settings)`(坏形读成 `[]`)·
|
|
113
|
-
`httpHookUrlVerdict(url, layers, workspace)` → `HttpHookUrlBlock{list, rule, sources}` 或 `undefined`(每张准入名单都须放行 = 跨层取交)·
|
|
115
|
+
`httpHookUrlVerdict(url, layers, workspace)`(`layers` 的每一层经读器同一只读法读 —— 读器交出的 `read.layer`、手造的寻常层、本 realm 的 `JSON.parse` 出来的层同答;另一个 realm 的数组按坏形全拦)→ `HttpHookUrlBlock{list, rule, sources}` 或 `undefined`(每张准入名单都须放行 = 跨层取交)·
|
|
114
116
|
`httpHookEnvVarsAllowed(hookVars, layers, workspace)`(取交);准入 ⇔ `layerAdmission(源, 工作区读数, "httpHookAllowlists") === "admitted"`。
|
|
115
117
|
(src/http-hook-allowlists.ts)
|
|
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
|
是本包的回显策略(不是引擎双向码点表的镜像),请求面描述器与消费方都读它,禁自存字符类。
|
|
@@ -141,6 +147,7 @@ llms.txt — 消费方(使用者)视角索引 · @sema-agent/settings-schema
|
|
|
141
147
|
判官只读信号:`judgeReadiness(signal)` / `judgeRoutability(row, nowMs)` → `{ routable }` 或 `{ routable:false, code ∈ NOT_ROUTABLE_CODES, why }`,
|
|
142
148
|
`isReadyForTraffic` / `isRoutable` 是它们的布尔形;没有信号(旧引擎)= `no-engine-signal`,不可路由;布尔对 `draining` / `drainingSince` 标 `@deprecated`、本包零读点、退役已登记;
|
|
143
149
|
8.3.0 additive:env 名常量 `FLEET_SCOPE_ENV`(`"FLEET_SCOPE"`,成员所属租户 scope,渲染器写、引擎读;缺席 = 默认 scope `GLOBAL_SCOPE`;进保留 env 名表);
|
|
150
|
+
14.7.0 additive:公告地址 env 名常量 `FLEET_ADVERTISE_ADDRESS_ENV`(`"FLEET_ADVERTISE_ADDRESS"`)+「后面要拼路径的基址」座位的禁用成分集 `PATH_BASE_URL_FORBIDDEN_PARTS`(`userinfo` / `query` / `fragment`)+ 判官 `pathBaseUrlFlaws(url)`(= `httpUrlFlaws` 配这一集;判展开之后的值;`webAdminSessionUrl` 也读它);
|
|
144
151
|
9.0.0 BREAKING:`readCenterCapabilities` 删,换三态读器 `readCapabilityReading(reply): CapabilityReading`(`declared` | `undeclared` | `unreadable`;键在场而形坏 ≠ 没宣告)、`EngineSignal.configTargetVersion` / `configAppliedVersion` 由串改数)、**scheduler-store 契约**(自唤醒
|
|
145
152
|
存储形 + node 绑定)、**auth / auth-bridge / scopes / wire** 契约(RFC 8628 设备流、RS256 JWKS 鉴权桥、
|
|
146
153
|
多租户 scope)。(src/fleet.ts;src/scheduler-store*.ts;src/api/*.ts)
|
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",
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 包内私有(不进主桶、不进 exports 表):**定义语义的复制**。读不可信的串数组、写读出来的副本,都不许走 `[[Set]]` 与继承的成员 ——
|
|
3
|
-
* `Object.prototype` / `Array.prototype` 上被污染的数字键(getter / setter)、`get` / `set` 键、数组实例上被替换的 `Symbol.iterator`,
|
|
4
|
-
* 在下标赋值、`push`、展开、描述符对象字面量上各有一条路能把条目吞掉、替换或抛出去。本模块是这件事的唯一读法,读者只调它:
|
|
5
|
-
* · {@link captureStringArray}:一份串数组的捕获副本(按下标、`hasOwn`、一次读、非串即坏、`defineProperty` 写入);
|
|
6
|
-
* · {@link dataDescriptor}:写副本用的描述符,零原型(`{ value, writable, enumerable, configurable }` 字面量继承 `Object.prototype`,
|
|
7
|
-
* `Object.prototype.get` / `set` 被污染时它会被读成访问器描述符)。
|
|
8
|
-
* 零 import。
|
|
9
|
-
*/
|
|
10
|
-
/** 数据属性描述符(可写 / 可枚举 / 可配置),**零原型**:不继承 `Object.prototype` 上被污染的 `get` / `set` 等键,也不靠对象字面量。 */
|
|
11
|
-
export declare function dataDescriptor(value: unknown): PropertyDescriptor;
|
|
12
|
-
/**
|
|
13
|
-
* 一份**串数组的捕获副本**;不是串数组 ⇒ `undefined`(调用方据此读成坏形 —— 名单读成 `[]` 并点名,`args` 丢键并进 `lost`)。
|
|
14
|
-
* **取值 + 检视 + 复制整段在一个 try 里**,`length` 与每个元素都只读一次(检视与后续使用不会读到两个答案):
|
|
15
|
-
* · 不是数组,或 `length` 不是安全非负整数(读成字符串的 Proxy 等)⇒ 坏形,不按 `length` 物化;
|
|
16
|
-
* · 逐下标先问 `Object.hasOwn` 再读 —— 洞(不是自有下标)⇒ 坏形,不顺原型链读到 `Object.prototype` / `Array.prototype` 上的数字键(数据属性或访问器);
|
|
17
|
-
* · 条目不是串 ⇒ 坏形;遇到第一个坏处就退出(`length` 很大的稀疏数组立即判坏形);
|
|
18
|
-
* · 副本用 `Object.defineProperty` + {@link dataDescriptor} 写(`push` / 下标赋值是 `[[Set]]`,会命中继承的数字键 setter、吞掉条目);
|
|
19
|
-
* · 不走迭代协议(展开 / `for…of` 会让数组实例上被替换的 `Symbol.iterator` 供出别的条目);
|
|
20
|
-
* · 读 `length` / 元素时抛(getter、Proxy 陷阱)⇒ 坏形,不抛出去。
|
|
21
|
-
* 交出去的是**副本**(不是调用方数组的原引用):调用方之后改原数组,副本不变。
|
|
22
|
-
*/
|
|
23
|
-
export declare function captureStringArray(v: unknown): string[] | undefined;
|
package/dist/definition-copy.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 包内私有(不进主桶、不进 exports 表):**定义语义的复制**。读不可信的串数组、写读出来的副本,都不许走 `[[Set]]` 与继承的成员 ——
|
|
3
|
-
* `Object.prototype` / `Array.prototype` 上被污染的数字键(getter / setter)、`get` / `set` 键、数组实例上被替换的 `Symbol.iterator`,
|
|
4
|
-
* 在下标赋值、`push`、展开、描述符对象字面量上各有一条路能把条目吞掉、替换或抛出去。本模块是这件事的唯一读法,读者只调它:
|
|
5
|
-
* · {@link captureStringArray}:一份串数组的捕获副本(按下标、`hasOwn`、一次读、非串即坏、`defineProperty` 写入);
|
|
6
|
-
* · {@link dataDescriptor}:写副本用的描述符,零原型(`{ value, writable, enumerable, configurable }` 字面量继承 `Object.prototype`,
|
|
7
|
-
* `Object.prototype.get` / `set` 被污染时它会被读成访问器描述符)。
|
|
8
|
-
* 零 import。
|
|
9
|
-
*/
|
|
10
|
-
/** 数据属性描述符(可写 / 可枚举 / 可配置),**零原型**:不继承 `Object.prototype` 上被污染的 `get` / `set` 等键,也不靠对象字面量。 */
|
|
11
|
-
export function dataDescriptor(value) {
|
|
12
|
-
const descriptor = Object.create(null);
|
|
13
|
-
descriptor.value = value;
|
|
14
|
-
descriptor.writable = true;
|
|
15
|
-
descriptor.enumerable = true;
|
|
16
|
-
descriptor.configurable = true;
|
|
17
|
-
return descriptor;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* 一份**串数组的捕获副本**;不是串数组 ⇒ `undefined`(调用方据此读成坏形 —— 名单读成 `[]` 并点名,`args` 丢键并进 `lost`)。
|
|
21
|
-
* **取值 + 检视 + 复制整段在一个 try 里**,`length` 与每个元素都只读一次(检视与后续使用不会读到两个答案):
|
|
22
|
-
* · 不是数组,或 `length` 不是安全非负整数(读成字符串的 Proxy 等)⇒ 坏形,不按 `length` 物化;
|
|
23
|
-
* · 逐下标先问 `Object.hasOwn` 再读 —— 洞(不是自有下标)⇒ 坏形,不顺原型链读到 `Object.prototype` / `Array.prototype` 上的数字键(数据属性或访问器);
|
|
24
|
-
* · 条目不是串 ⇒ 坏形;遇到第一个坏处就退出(`length` 很大的稀疏数组立即判坏形);
|
|
25
|
-
* · 副本用 `Object.defineProperty` + {@link dataDescriptor} 写(`push` / 下标赋值是 `[[Set]]`,会命中继承的数字键 setter、吞掉条目);
|
|
26
|
-
* · 不走迭代协议(展开 / `for…of` 会让数组实例上被替换的 `Symbol.iterator` 供出别的条目);
|
|
27
|
-
* · 读 `length` / 元素时抛(getter、Proxy 陷阱)⇒ 坏形,不抛出去。
|
|
28
|
-
* 交出去的是**副本**(不是调用方数组的原引用):调用方之后改原数组,副本不变。
|
|
29
|
-
*/
|
|
30
|
-
export function captureStringArray(v) {
|
|
31
|
-
try {
|
|
32
|
-
if (!Array.isArray(v))
|
|
33
|
-
return undefined;
|
|
34
|
-
const source = v;
|
|
35
|
-
const n = source.length;
|
|
36
|
-
if (typeof n !== "number" || !Number.isSafeInteger(n) || n < 0)
|
|
37
|
-
return undefined;
|
|
38
|
-
const copy = [];
|
|
39
|
-
for (let i = 0; i < n; i++) {
|
|
40
|
-
if (!Object.hasOwn(source, i))
|
|
41
|
-
return undefined;
|
|
42
|
-
const entry = source[i];
|
|
43
|
-
if (typeof entry !== "string")
|
|
44
|
-
return undefined;
|
|
45
|
-
Object.defineProperty(copy, i, dataDescriptor(entry));
|
|
46
|
-
}
|
|
47
|
-
return copy;
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
}
|