@sema-agent/settings-schema 6.1.0 → 6.2.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 +116 -0
- package/README.md +26 -4
- package/conformance/VERSION +1 -1
- package/dist/config-fns.d.ts +17 -0
- package/dist/config-fns.js +27 -6
- package/dist/fleet.d.ts +162 -0
- package/dist/fleet.js +125 -5
- package/dist/types.d.ts +66 -66
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,122 @@
|
|
|
6
6
|
> `@sema-agent/registry-core`(更早还曾是 `@sema-ai/registry-core`)。本档 `0.19.0` 以下各节里的
|
|
7
7
|
> 包名是**历史记录**,如实保留不追改。
|
|
8
8
|
|
|
9
|
+
## 6.2.0 — 2026-09-26 — additive:`ModelRefusalsWire` / `ModelRefusalsSignal` 一处定义 + `readModelRefusals`(S-768;条目两码 / 组拒四码闭集是读方返回型,wire 开放串、读方收窄,心跳字段形坏降缺席 —— 诊断键不打路由)· `isDisclosableIdentity` / `isReportableRefusalName` 导出 · devDep core 2.1.0 → 7.33.1 精确(漂移门 ② 改读运行期 `MODEL_ROLES`,删陈旧豁免)· README / llms-full zod 两实例真话(server / CLI 已在 zod 4;归一 = 7.0.0,S-777)
|
|
10
|
+
|
|
11
|
+
> 本节全 additive(新导出 / 新可选键),零删零改名。判档口径见 README「发版纪律」:新键 / 新导出 = minor。心跳上的新键
|
|
12
|
+
> 形坏只降为缺席,6.1.0 收下的任何心跳体 6.2.0 照收(见「谁受伤」③)。
|
|
13
|
+
|
|
14
|
+
### S-768 · 模型拒因信号:闭集码真源 + wire 形 + 一只读口两出口(additive)
|
|
15
|
+
|
|
16
|
+
`src/fleet.ts`(与 `RestartSignal` 同节)新导出:
|
|
17
|
+
|
|
18
|
+
- **成因码闭集**(`as const` 元组 + `z.enum` + 型):`MODEL_ENTRY_REFUSAL_CODES = ["config.model_no_brain",
|
|
19
|
+
"config.model_entry_invalid"]` / `ModelEntryRefusalCode`;`MODEL_PLANE_REFUSAL_CODES = ["config.default_model_missing",
|
|
20
|
+
"config.model_refused_name_minted", "config.model_route_endpoint_missing", "config.gateway_fallback_without_primary"]` /
|
|
21
|
+
`ModelPlaneRefusalCode`。词**逐字**取自引擎(server @ 2aa56fe7:`src/model-entry-refusal.ts:45-56` —— 条目两码 = S-704 逐条判据
|
|
22
|
+
的两个成因,`config.default_model_missing` = S-705 模型面组拒,`config.model_refused_name_minted` = S-712 不变量组拒;
|
|
23
|
+
`src/model-route-endpoint.ts:40,42` —— 不变量 `model-route-endpoint` 的两码,模型面 stage 在 `src/config-center/apply-effective.ts:664-665`
|
|
24
|
+
判);红先文件里的期望字面是抄来的,不从实现派生。**组拒码镜像引擎组拒码表的整族**(发版方裁 1):不按「今天热路径上可达」
|
|
25
|
+
挑 —— 可达性会变,表不变(`config.gateway_fallback_without_primary` 今天在热路径上实际不可达,同一 env 下 boot 恒先拒,照收)。
|
|
26
|
+
**真源上移**:此前闭集只活在引擎一侧,中心要穷举就得手抄(C-R75);上移后两边 import 同一份。**谁在加码时编译红**(对抗腿
|
|
27
|
+
F8 订正首稿「双侧编译红」):按码穷举 `switch` 的读方(中心)必红;生产方只有持**以码为键**的表(对码穷举 `switch` /
|
|
28
|
+
`Record<码, …>`)才红 —— 只拿 `satisfies` 把自己的码值约束成本包闭集的子集,证明的是「子集」不是「相等」,加码照绿。引擎提货
|
|
29
|
+
时要留一张以码为键的表。
|
|
30
|
+
- **两个面,刻意分开**(发版方裁 3:失败方向 = 语义方向 —— 这是**诊断**键,集外词 / 形坏绝不能把一台健康实例打成不可路由):
|
|
31
|
+
· **`ModelRefusalsWire`**(zod)= wire 上走的、心跳存行里存的:`{ entries: record(非空名 → 非空串), plane?: 非空串 }` + 空信号
|
|
32
|
+
refine —— 只判**形律**,码是开放串;本包版本不认识的码照过(对这个读方是「没说」,存行照存,中心升级本包后同一行读出新码)。
|
|
33
|
+
· **`ModelRefusalsSignal`**(纯型)= `{ entries: Record<名, ModelEntryRefusalCode>, plane?: ModelPlaneRefusalCode }` =
|
|
34
|
+
`readModelRefusals` 的返回型;两只 `z.enum` 仍导出,仍是加码时读方的编译红源。
|
|
35
|
+
- **值只码**:引擎侧拒因事实里的上游 `id` / `provider` / 坏字段键 / 拒因句都不上 wire —— `entry_invalid` 行是没人验过的行,
|
|
36
|
+
`id` / `provider` 可能是坏行原样;句子是散文不是契约;中心要的就是「哪个名、什么码」。
|
|
37
|
+
- **`plane` 单码**(发版方裁 2):一个候选恰一个组拒判决 —— 引擎按固定序判模型面不变量、首个不成立即拒;Runner 换装步的拒
|
|
38
|
+
没有码,不在本信号射程。**`entries` 与 `plane` 描述同一份最新候选目录**(发版方裁 6):`plane` 在场时即那份被拒的候选
|
|
39
|
+
(逐条拒因通常就是它没有缺省的原因);组拒期间引擎自己的拒因表不换代、选择通道仍按上一代拒因执行,所以此时 `entries` 读作
|
|
40
|
+
「这份目录为什么落不了地」,不是「此刻点这些名会被拒」。
|
|
41
|
+
- **在场律同 `RestartSignal`**:在场 ⇔ 至少一条**可报**的拒(名能出门的条目拒,或一个组拒);空信号(`entries` 空且无 `plane`)
|
|
42
|
+
被形律拒 ——「没有」只有一种拼法(键缺席);键内「没有条目拒」拼作 `entries: {}`(键必在)—— 每层各一种拼法。
|
|
43
|
+
- **`readModelRefusals(body)`** = **一只读口两出口**:传 `/health` 体或已 parse 的公告都行(只读 `modelRefusals` 键)。先按
|
|
44
|
+
`ModelRefusalsWire` 判形(形不合 / 缺席 / 非对象 / 访问器抛 ⇒ `undefined`,不抛),再按两只闭集收窄:集外 entry 丢、集外
|
|
45
|
+
`plane` 丢,丢到空 ⇒ `undefined`(与「没说」同渲)。**只答键、不判版本**(发版方裁 4)。与 `readRestartSignal` 共用一只私有
|
|
46
|
+
读口 `readHealthSignal(health, key, schema)`(`readRestartSignal` 行为逐字不变,6.1.0 的 11 格照绿)。
|
|
47
|
+
- **`InstanceAnnouncement.modelRefusals = ModelRefusalsWire.optional().catch(undefined)`**(`InstanceRegistration` 随 extend 同带):
|
|
48
|
+
集外码照过;形坏(空信号 / 非串值 / `plane` 数组 …)**降为缺席**,不拒整条心跳(与 `restart` 不同 —— 那一键的形仍门住整行;
|
|
49
|
+
发版方采纳);键因此可能以 `undefined` 值在场。中心若要给形坏留痕,自己对请求原体的该字段 `ModelRefusalsWire.safeParse`
|
|
50
|
+
(parse 之前),读法口不替它记。每拍整行重报 ⇒ 不带键的一拍 = 不再有可报的拒,存行整替不合并。**缺席读法 = 读版本,不读
|
|
51
|
+
缺席**(发版方裁 4,不加能力位,与 server 读 core 新键的约定同形):更早的引擎从不发此键,缺席 = **不可知**;读方看公告上已有的
|
|
52
|
+
`version`,≥ 首发此键的引擎版本(server 7.103.0,以 server 发布帖为准)才把缺席读成「没有可报的拒」。
|
|
53
|
+
- `/health` 一侧 **`InstanceHealth` 形不动**(passthrough,`modelRefusals` 不入类型;类型化 = 宽读改严判 = major,与
|
|
54
|
+
`restart` 同一笔 7.0.0 欠账)—— `/health` 上的形律与收窄都由 `readModelRefusals` 执法。
|
|
55
|
+
|
|
56
|
+
### S-768 · 名筛两只谓词:`isDisclosableIdentity`(B3,原私有改名导出)+ `isReportableRefusalName`(entries 键)(additive)
|
|
57
|
+
|
|
58
|
+
`src/config-fns.ts` 私有 `isIdentityString(v): v is string` 改名导出为 `isDisclosableIdentity(v: string): boolean`(发版方裁 5:
|
|
59
|
+
留,server 阶段 ② import 它、不复制);判据不变(`redactSecrets(v) === v`;非字符串答 false、不抛 —— 验修轮 N5)。它是「用户写的
|
|
60
|
+
身份串(条目 `name` / `id`)能否原样出门」的**唯一**判据 —— S-712 被丢条目身份今天就由它执法(秘密形 ⇒ 按无名处置:不带,而不是
|
|
61
|
+
打码)。**此前引擎一侧没有这只谓词**(它读的是身份键的缺席;它自己的另一只脱敏器是另一套探测):不导出,引擎只能手抄一行判据或
|
|
62
|
+
改用另一只探测器 —— 同一条律两个判官。签名**刻意不是**类型谓词(对抗腿 F5:谓词形 `v is string` 对一些字符串答 false,调用方
|
|
63
|
+
否定分支里一个 `string` 被收窄成 `never`,tsc 实红);「是不是字符串」由调用点判(`readEntryIdentity` 两处 `typeof … === "string" &&`)。
|
|
64
|
+
|
|
65
|
+
- **`isReportableRefusalName(name: string): boolean`**(验修轮 N1)=「一个条目名能不能当 `entries` 的键」的**唯一**判据,
|
|
66
|
+
引擎铸键前只调这一只:① wire schema **自己载得住**这个键(就地拿 `ModelRefusalsWire` 判:空串不过键规则;`__proto__` 被 zod
|
|
67
|
+
的 record 静默丢掉 —— JSON 解析出的自有属性也丢 —— 载不住;不写名单)∧ ② `isDisclosableIdentity`。首稿把 `__proto__` 写成
|
|
68
|
+
文字里的第二条律、而 `isDisclosableIdentity("__proto__")` 答 true(验修轮实测)—— 收成一只。住在 `config-fns.ts`:`fleet.ts`
|
|
69
|
+
被 `types.ts` 引,它再引 `config-fns.ts` 会成环(三种加载序实测无环)。`__proto__` 的丢法另有 characterization 钉。
|
|
70
|
+
- **schema 刻意不复判秘密**:wire 的键只判非空,不跑本谓词 —— 秘密探测器是会变宽的启发式,执法在铸点(引擎);中心展示前可以
|
|
71
|
+
再过一次同一只谓词(丢,不拒)。
|
|
72
|
+
|
|
73
|
+
### 仓内两件(发版方追加,不影响发布物的契约面)
|
|
74
|
+
|
|
75
|
+
- **开发期引擎钉 `@sema-agent/core` ^2.1.0(实装 2.1.0)→ `7.33.1` 精确**(devDependencies,与 server 同钉):上游漂移门 ②③
|
|
76
|
+
(`test/upstream-drift.test.ts`)与安全合并表词表门(`test/safety-merge-spec.test.ts` 读 `SAFETY_AXIS_VOCABULARY`)此前在对 core 2.1.0
|
|
77
|
+
(npmjs 发布于 2026-07-29,其后 core 已走到 7.33.1)做「漂移」检查 —— 门是瞎的。**提货当时读数**:门 ③ `PROJECT_ID_REGEX` 三格与安全合并表两格在 7.33.1
|
|
78
|
+
上绿;**门 ② 两格红** —— 原文「ModelRole 声明里有不是字符串字面量的成分(`typeofMODEL_ROLES[number]`)」:core 7.33.1
|
|
79
|
+
`dist/core/model-seat.d.ts:42` 把 `ModelRole` 写成 `(typeof MODEL_ROLES)[number]`,门按设计 fail-loud(「上游改了导出形,修这条
|
|
80
|
+
查找,别删门」)。**发版方裁后落地(阶段 ①c)**:门 ② 的上游词表改读 core **运行期** `MODEL_ROLES`(dev-only import,与门 ③ /
|
|
81
|
+
安全合并表门同形),删 `.d.ts` 字面量解析腿及其专属变异格(读实现不读文本,C-R24);查找改后门按设计报陈旧豁免 ——
|
|
82
|
+
「引擎 ModelRole:登记表里有已经不存在的差 —— 陈旧豁免,删掉那几行: expected [ 'consolidate' ] to deeply equal []」(门 ② 两格
|
|
83
|
+
1 红 / 1 绿)—— 删 `consolidate: ours-only` 登记行(core 7.33.1 已含该词,原理由句自己写明「随开发期引擎升版复核本行」)后 2 / 2 绿;
|
|
84
|
+
`advisor: upstream-only` 留。core 7.33.1 `MODEL_ROLES` = default / summarize / subagent / team / synthesize / advisor / verifier /
|
|
85
|
+
classifier / consolidate。
|
|
86
|
+
- **README「zod 单实例」订正为两实例现状**:server / CLI 在 zod 4、config-center 产品仍在 zod 3,zod-4 宿主树里本包的 zod 3 是
|
|
87
|
+
嵌套的第二实例;跨缝传纯数据、不混两实例的 schema 对象。升 zod 4 归一是本包的一个 major(S-777);本版不动依赖与 peer 段。
|
|
88
|
+
|
|
89
|
+
### 三问 · 消费方 · 红先 · 复审
|
|
90
|
+
|
|
91
|
+
- **谁需要** = web-admin KL-35(实例页逐台列「这台拒了哪些条目、为什么」,[8445])+ server 7.103.0(S-768 阶段 ②:一只取值口
|
|
92
|
+
两出口 —— `/health.modelRefusals` 与心跳 `modelRefusals`;两张码表改 import 本包闭集(并留一张以码为键的表);铸键前调
|
|
93
|
+
`isReportableRefusalName`,日志 / 拒因句里要不要写出一个名字问 `isDisclosableIdentity`;组拒码当数据带出 —— 引擎的组拒记录
|
|
94
|
+
只存不变量 id,`model-route-endpoint` 一个 id 两个码,按判决那刻的码)。
|
|
95
|
+
- **谁受伤** = 无(新导出 + 新可选键;`InstanceHealth` 一字不动;`readRestartSignal` / 被丢条目身份行为不变;旧中心收到带
|
|
96
|
+
`modelRefusals` 的心跳:`InstanceAnnouncement` 是默认 strip 的 `z.object`,键被剥,行为同今)。**风险如实登记**:
|
|
97
|
+
① ~~心跳里 `modelRefusals` 形不合 ⇒ 整条心跳 400~~ —— 发版方裁 3 后**不再成立**:形坏降为缺席、集外码照过(对抗腿按 web-admin
|
|
98
|
+
心跳路由读法实测的「连拒两窗后实例掉出可路由集」这一形,本版已无从触发);② **版本错位**:引擎日后发一个新码(本包下一 minor
|
|
99
|
+
尾插),装着旧版本包的中心**照收心跳**,只是新码在它那里「没说」,直到中心升级本包;部署序仍建议中心先提货,但不再是补偿
|
|
100
|
+
手段;③ 判档:6.1.0 收下(剥掉)的任何带 `modelRefusals` 的心跳体,6.2.0 照收 —— 对抗腿 F4 的判档张力(strip 对象加类型化
|
|
101
|
+
可选键 = 宽读改严判)随之消解。
|
|
102
|
+
- **补偿** = 无旋钮(additive,无需补偿)。
|
|
103
|
+
- **消费方** = server(阶段 ②,如上);web-admin(收键、存 wire 形、经 `readModelRefusals` 渲;缺席按引擎 `version` 分「没有可报的
|
|
104
|
+
拒 / 不可知」;按码穷举 `switch`;能力显式表态制 @点名);cli n/a;core n/a。
|
|
105
|
+
- **红先**:`test/model-refusals-6.2.0.test.ts` 对 6.1.0 源 **18 红 / 4 绿**(绿 = additive 不带键控制格、restart / ready 负控、
|
|
106
|
+
`InstanceHealth` 形不动、类型面格(`expectTypeOf`,由 tsc 执法、运行期空跑)),tsc 36 错全在本文件;改源后 22 / 22、tsc 0。
|
|
107
|
+
B3 两格对 `0d4227d` **2 红** → 24 / 24。复审修复与阶段 ①b 裁定的红先见下(文件现 36 格)。
|
|
108
|
+
- **对抗复审**(独立 opus 腿一轮,只读、不喂结论、沙箱逐条复现;codex 当日额度墙未投):9 条。**真修**:F5(谓词签名,
|
|
109
|
+
tsc 红先 2 错 → 0)· F8(「双侧编译红」订正)· F2 的「秘密形名下的拒 ⇒ 整键缺席」(在场律改写为「可报的拒」)· F9(公开 d.ts
|
|
110
|
+
里指向私有函数的 JSDoc、B3 组标题里本仓验不了的断言)· F3 附带的 `__proto__` 键(登记边界 + characterization 钉)。**发版方裁
|
|
111
|
+
后落地**:F1(组拒码收整族,裁 1)· F3(wire 开放串 + 读方收窄 + 心跳上形坏降为缺席,裁 3)· F2 其余(读版本、不加能力位,
|
|
112
|
+
裁 4)· F4(随裁 3 消解)。**驳 / 不改**:F6(读口里按谓词丢秘密形键:执法留在铸点)· F7(两层「没有」各一种拼法;`ModelRefusalsWire`
|
|
113
|
+
是 `ZodEffects`、无 `.shape` / `.extend`,与 `RestartSignal` 的 `ZodObject` 形不同 —— 登记)· F9 命名(`readModelRefusals` 与
|
|
114
|
+
`readRestartSignal` 不对称:名按派车书;与引擎现有同名常量 / 型撞名:引擎提货时换成 import,阶段 ② 的事)。
|
|
115
|
+
- **验修轮**(同一 opus 腿,只核 `10f4d85..0450c94`,不开新检测面):F5 / F8 修复成立,相对 `10f4d85` 无运行期回归;新 6 条全处置:
|
|
116
|
+
**N1**(`__proto__` 成了文字里的第二条律 ⇒ 收成一只 `isReportableRefusalName`)· **N5**(`isDisclosableIdentity` 非字符串由答
|
|
117
|
+
false 变抛 TypeError ⇒ 回到答 false)· **N2 / N3**(组拒期间 `entries` 的读法;无码组拒 —— 裁 1 后已无此类)补进接入档 ·
|
|
118
|
+
**N4 / N6**(旧签名句、llms-full「= 无拒」、格数)订正。两格红先:对 `0450c94` **2 红 / 26 绿** → 28 / 28。
|
|
119
|
+
- **阶段 ①b · 发版方六裁落地**(每裁一格红先):裁 1 组拒码四码(`0d3a48d` 1 红 → 绿)· 裁 2 `plane` 单码 + 注(`4f924fb` 1 红 →
|
|
120
|
+
绿)· 裁 3 wire 开放串 + 读方收窄(`c36745c` 12 红 / tsc 3 错 → 绿;本体两格 = 集外码心跳 `success`、收窄读数,其余 10 格是
|
|
121
|
+
形律格改指 `ModelRefusalsWire`)· 裁 3 附 心跳上形坏降为缺席(`5289ad9` 3 红 → 绿)· 裁 4 读版本不读缺席(`1014997` 1 红 → 绿,
|
|
122
|
+
另一格「读口不判版本」是控制格,生来绿)· 裁 5 `isDisclosableIdentity` 留(无改动,既有格照绿)· 裁 6 同一份候选目录(`a53ab22`
|
|
123
|
+
1 红 → 绿)。阶段 ①b 的改动本身未再过复审(复审终止律:一轮 + 一次验修已用完)。
|
|
124
|
+
|
|
9
125
|
## 6.1.0 — 2026-09-25 — 四件 additive:`entry-dropped` 身份(S-712)· 中心凭证信封 + 三态判别器(S-698)· `RestartSignal` 一处定义(S-741)· 中心凭证两键名 + 二选一判官(S-742);`redactSecrets` 私钥 PEM 串内任意位置且判在替换前(6.0.0 起三面既有盲点顺带关)
|
|
10
126
|
|
|
11
127
|
> 本节四件全 additive(新可选键 / 新导出 / 新文件),零删零改名;版号与节标题由发版方写。判档口径见下方「发版纪律」:
|
package/README.md
CHANGED
|
@@ -35,9 +35,18 @@ server (the workers), and the client (desktop/CLI) seams. No two copies of the s
|
|
|
35
35
|
(≤`0.19.0` 发在旧名 `@sema-agent/registry-core` 下,冻结)。
|
|
36
36
|
|
|
37
37
|
The package is **pure**: zero `next`/`react`/server imports, zero DB drivers. Its only runtime dependency is
|
|
38
|
-
`zod` (a `dependency` pinned `^3.24.0
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
`zod` (a `dependency` pinned `^3.24.0`, also declared as a `peerDependency` with the same range). `npm ls --prod`
|
|
39
|
+
therefore shows only `zod`. Node built-ins only (`node:crypto`, `node:fs`).
|
|
40
|
+
|
|
41
|
+
> **zod instances today: two, not one** (corrected in 6.2.0 — this section used to promise a single shared instance).
|
|
42
|
+
> The range was chosen so every host would dedup to one zod, but the hosts have since moved apart: `sema-server` and the
|
|
43
|
+
> CLI depend on zod 4 (`^4.x`), the config-center product (`sema-web-admin`) is still on zod 3. In a zod-4 host the
|
|
44
|
+
> package manager installs this package's own zod 3 NESTED under it — the server tree today has zod 4 at the top level
|
|
45
|
+
> and zod 3 at `node_modules/@sema-agent/settings-schema/node_modules/zod`. There, this package's schemas and the host's
|
|
46
|
+
> are two zod instances: cross the seam with plain data (parse with the schemas / functions this package exports), and
|
|
47
|
+
> never mix schema objects of the two instances (`instanceof ZodError`, composing a host schema with one of ours). Only
|
|
48
|
+
> a zod-3 host (today the config-center product) still dedups to one instance. Moving this package to zod 4 is a major
|
|
49
|
+
> of its own (S-777); 6.2.0 does not touch the dependency or peer range.
|
|
41
50
|
|
|
42
51
|
## What's in it
|
|
43
52
|
|
|
@@ -176,7 +185,20 @@ sound). `npm ls --prod` therefore shows only `zod`. Node built-ins only (`node:c
|
|
|
176
185
|
read stays lenient) and `readRestartSignal(health)` reads `health.restart` against the one shape (`undefined` on
|
|
177
186
|
any mismatch, never throws). Presence is the signal (present ⇔ restart required; no `required` boolean inside).
|
|
178
187
|
A heartbeat re-announces the full row, so one without `restart` means "no longer required". Typing
|
|
179
|
-
`InstanceHealth.restart` strictly is left for the next major.
|
|
188
|
+
`InstanceHealth.restart` strictly is left for the next major. **S-768** adds the model-refusals signal the same
|
|
189
|
+
way (one mint point, two exits, ONE reader): the wire face `ModelRefusalsWire` (`{ entries: { <catalog entry name>:
|
|
190
|
+
<code> }, plane?: <code> }` with codes as open strings — name → code is the whole wire, no upstream id / provider /
|
|
191
|
+
field keys / prose) rides the heartbeat as `InstanceAnnouncement.modelRefusals?` and /health (`InstanceHealth` again
|
|
192
|
+
unchanged); `readModelRefusals(body)` reads either exit and narrows to `ModelRefusalsSignal` — the codes are CLOSED
|
|
193
|
+
sets owned here, `MODEL_ENTRY_REFUSAL_CODES` (`config.model_no_brain`, `config.model_entry_invalid`) and
|
|
194
|
+
`MODEL_PLANE_REFUSAL_CODES` (`config.default_model_missing`, `config.model_refused_name_minted`,
|
|
195
|
+
`config.model_route_endpoint_missing`, `config.gateway_fallback_without_primary`), and a code this package version
|
|
196
|
+
does not know is dropped ("not said"). It is a diagnostic key, so its failure direction is "not said": an unknown
|
|
197
|
+
code or a shape violation on the heartbeat never fails the announcement (the key drops to absent). Present ⇔ at
|
|
198
|
+
least one reportable refusal; absence is read by the announced `version` — an engine that predates the key never
|
|
199
|
+
sends it (UNKNOWN, not "none"). A name that cannot ride out is left out by the engine, judged by ONE predicate,
|
|
200
|
+
`isReportableRefusalName` (the wire can carry the key — `__proto__` it cannot — and `isDisclosableIdentity`, the
|
|
201
|
+
secret-shape rule the dropped-entry identity on read warnings already uses).
|
|
180
202
|
- **Declared-but-unvalidated keys** (`PARSE_TRANSPARENT_KEYS`, 2.0.0): the ONE registry of keys this package
|
|
181
203
|
carries verbatim WITHOUT checking their shape, each row naming who does check it (the engine's ingest side,
|
|
182
204
|
a consumer's projection, or the key's own guard). Today: `models[].extraBody`, `models[].compat` (1.10.0),
|
package/conformance/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
6.
|
|
1
|
+
6.2.0
|
package/dist/config-fns.d.ts
CHANGED
|
@@ -186,6 +186,23 @@ export interface DroppedEntry {
|
|
|
186
186
|
error: unknown;
|
|
187
187
|
identity?: DroppedEntryIdentity;
|
|
188
188
|
}
|
|
189
|
+
/** 身份串 —— 「一个用户写的身份串(条目的 `name` / `id`)能不能**原样**出门」的**唯一**判据:
|
|
190
|
+
* {@link redactSecrets} 原样放行。入参是 `string`、返回 `boolean`,**刻意不是**类型谓词(`v is string`):它对一些
|
|
191
|
+
* 字符串答 false,谓词形会让调用方的否定分支把一个 `string` 收窄成 `never`;「是不是字符串」由调用点自己判
|
|
192
|
+
* (运行期收到非字符串照答 false、不抛)。秘密形的串按**无名**处置(不带,而不是打码:打过码的串不再是身份)。
|
|
193
|
+
* 与坐标段脱敏、`error` 文案脱敏({@link sanitizeZodError})**同一只**判据:告警面上任何一处用户写的串,要么过这一只
|
|
194
|
+
* 脱敏器出门,要么(可缺的身份)不出门。两只判据会在同一条告警里给出两种答案(对抗轮 #2 真复现:`Bearer` 后接 NBSP
|
|
195
|
+
* 或短令牌时,旧判据放行、坐标却打码)。
|
|
196
|
+
* 执法面(同一条律):被丢条目的身份({@link DroppedEntryIdentity},本文件铸);`ModelRefusalsWire` 的 `entries` 键
|
|
197
|
+
* (经 {@link isReportableRefusalName},S-768);引擎自己的日志 / 拒因句里要不要写出一个名字,同样问这一只。 */
|
|
198
|
+
export declare function isDisclosableIdentity(v: string): boolean;
|
|
199
|
+
/** S-768 —— 「一个目录条目名能不能当 {@link ModelRefusalsWire} `entries` 的键」的**唯一**判据;引擎铸键前只调这一只,
|
|
200
|
+
* 不过 ⇒ 按无名处置(不进键、不计数)。两条律的合取,不手抄任何一条:
|
|
201
|
+
* ① 这只 schema **自己载得住**这个键 —— 就地拿 schema 判(空串不过键规则;`__proto__` 这类名被 zod 的 record 静默丢掉,
|
|
202
|
+
* 载不住),不写名单;
|
|
203
|
+
* ② {@link isDisclosableIdentity}(秘密形 ⇒ 不出门)。
|
|
204
|
+
* 非字符串 ⇒ false。住在本文件而不是 `./fleet`:`fleet.ts` 被 `types.ts` 引,它再引本文件会成环。 */
|
|
205
|
+
export declare function isReportableRefusalName(name: string): boolean;
|
|
189
206
|
/** 抢救造成的**下标位移表**:数组字段名 → 该字段压缩后每个位置的**原**下标(`kept[j]` = 压缩后第 j 条
|
|
190
207
|
* 在原文档里的下标)。纯数据,无行为。
|
|
191
208
|
*
|
package/dist/config-fns.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
// zod is a VALUE import here (not just a type): {@link salvageEntries} introspects a domain schema to find
|
|
17
17
|
// its entry collections. zod is this package's one runtime dependency, so this costs nothing new.
|
|
18
18
|
import { z } from "zod";
|
|
19
|
+
import { MODEL_ENTRY_REFUSAL_CODES, ModelRefusalsWire } from "./fleet.js";
|
|
19
20
|
import { DOMAIN_SCHEMAS, GOVERNANCE_MIRROR_KEYS, HOSTS_ARRAY_MAX, HOST_NAME_MAX, InfraCostRates, LimitsConfig, PRIVATE_KEY_PEM_HEADER, SkillsManifestSchema, containsSecretToken } from "./types.js";
|
|
20
21
|
/** Redact secret-shaped tokens from a validation MESSAGE — a zod error echoes the offending value (e.g.
|
|
21
22
|
* `received 'sk-live-…'`), so a secret pasted into the WRONG field would leak via the error string. Redacts
|
|
@@ -184,10 +185,30 @@ const PLAIN_PATH_SEGMENT = /^(?!(?:0|[1-9]\d*)$)[^."\u0000-\u001f]+$/;
|
|
|
184
185
|
export function formatConfigPath(p) {
|
|
185
186
|
return p.map((seg) => (typeof seg === "number" ? String(seg) : PLAIN_PATH_SEGMENT.test(seg) ? seg : JSON.stringify(seg))).join(".");
|
|
186
187
|
}
|
|
187
|
-
/**
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
|
|
188
|
+
/** 身份串 —— 「一个用户写的身份串(条目的 `name` / `id`)能不能**原样**出门」的**唯一**判据:
|
|
189
|
+
* {@link redactSecrets} 原样放行。入参是 `string`、返回 `boolean`,**刻意不是**类型谓词(`v is string`):它对一些
|
|
190
|
+
* 字符串答 false,谓词形会让调用方的否定分支把一个 `string` 收窄成 `never`;「是不是字符串」由调用点自己判
|
|
191
|
+
* (运行期收到非字符串照答 false、不抛)。秘密形的串按**无名**处置(不带,而不是打码:打过码的串不再是身份)。
|
|
192
|
+
* 与坐标段脱敏、`error` 文案脱敏({@link sanitizeZodError})**同一只**判据:告警面上任何一处用户写的串,要么过这一只
|
|
193
|
+
* 脱敏器出门,要么(可缺的身份)不出门。两只判据会在同一条告警里给出两种答案(对抗轮 #2 真复现:`Bearer` 后接 NBSP
|
|
194
|
+
* 或短令牌时,旧判据放行、坐标却打码)。
|
|
195
|
+
* 执法面(同一条律):被丢条目的身份({@link DroppedEntryIdentity},本文件铸);`ModelRefusalsWire` 的 `entries` 键
|
|
196
|
+
* (经 {@link isReportableRefusalName},S-768);引擎自己的日志 / 拒因句里要不要写出一个名字,同样问这一只。 */
|
|
197
|
+
export function isDisclosableIdentity(v) {
|
|
198
|
+
return typeof v === "string" && redactSecrets(v) === v; // 非字符串(JS / any 调用方)⇒ false,不抛(秘密轴 fail-closed)
|
|
199
|
+
}
|
|
200
|
+
/** S-768 —— 「一个目录条目名能不能当 {@link ModelRefusalsWire} `entries` 的键」的**唯一**判据;引擎铸键前只调这一只,
|
|
201
|
+
* 不过 ⇒ 按无名处置(不进键、不计数)。两条律的合取,不手抄任何一条:
|
|
202
|
+
* ① 这只 schema **自己载得住**这个键 —— 就地拿 schema 判(空串不过键规则;`__proto__` 这类名被 zod 的 record 静默丢掉,
|
|
203
|
+
* 载不住),不写名单;
|
|
204
|
+
* ② {@link isDisclosableIdentity}(秘密形 ⇒ 不出门)。
|
|
205
|
+
* 非字符串 ⇒ false。住在本文件而不是 `./fleet`:`fleet.ts` 被 `types.ts` 引,它再引本文件会成环。 */
|
|
206
|
+
export function isReportableRefusalName(name) {
|
|
207
|
+
if (!isDisclosableIdentity(name))
|
|
208
|
+
return false;
|
|
209
|
+
const probe = ModelRefusalsWire.safeParse({ entries: { [name]: MODEL_ENTRY_REFUSAL_CODES[0] } });
|
|
210
|
+
return probe.success && Object.hasOwn(probe.data.entries, name);
|
|
211
|
+
}
|
|
191
212
|
/** 一条被丢条目原文的身份({@link DroppedEntryIdentity} 的**唯一**读法)。只看纯 JSON 对象的**自有数据
|
|
192
213
|
* 属性**;任何反射/陷阱抛错 ⇒ 当作读不出(身份是诊断面的附件,绝不许把抢救拖下水)。 */
|
|
193
214
|
function readEntryIdentity(entry) {
|
|
@@ -202,8 +223,8 @@ function readEntryIdentity(entry) {
|
|
|
202
223
|
const id = own("id");
|
|
203
224
|
const enabled = own("enabled");
|
|
204
225
|
const identity = {
|
|
205
|
-
...(
|
|
206
|
-
...(
|
|
226
|
+
...(typeof name === "string" && isDisclosableIdentity(name) ? { name } : {}),
|
|
227
|
+
...(typeof id === "string" && isDisclosableIdentity(id) ? { id } : {}),
|
|
207
228
|
...(typeof enabled === "boolean" ? { enabled } : {}),
|
|
208
229
|
};
|
|
209
230
|
return Object.keys(identity).length > 0 ? identity : undefined;
|
package/dist/fleet.d.ts
CHANGED
|
@@ -81,6 +81,106 @@ export type RestartSignal = z.infer<typeof RestartSignal>;
|
|
|
81
81
|
* Presence law: only `restart` counts; the top-level `restartRequired` boolean the server also ships is not read.
|
|
82
82
|
*/
|
|
83
83
|
export declare function readRestartSignal(health: unknown): RestartSignal | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* The model-refusal cause codes (S-768) — CLOSED sets, owned HERE, never a hand-copied second list. Adding a code is
|
|
86
|
+
* one edit in this file; who goes red at compile time: a reader that switches on the code exhaustively (a center), and
|
|
87
|
+
* a producer only where it holds a table KEYED BY the code (an exhaustive `switch` over the code, or a
|
|
88
|
+
* `Record<ModelEntryRefusalCode, …>`) — a producer table that merely `satisfies` these codes as values proves a subset,
|
|
89
|
+
* not equality, and stays green.
|
|
90
|
+
*
|
|
91
|
+
* - {@link MODEL_ENTRY_REFUSAL_CODES} — why ONE catalog entry is not served on this host (the other entries keep serving):
|
|
92
|
+
* `config.model_no_brain` — the entry's provider rides a brain this host has not mounted;
|
|
93
|
+
* `config.model_entry_invalid` — the entry does not match the `ModelEntry` shape (dropped by the read, or re-judged at
|
|
94
|
+
* the engine's own second boundary).
|
|
95
|
+
* - {@link MODEL_PLANE_REFUSAL_CODES} — why the model plane of the catalog the engine was handed was refused AS A GROUP
|
|
96
|
+
* (the engine keeps serving the model plane it had). This set mirrors the engine's group-refusal code TABLE as a
|
|
97
|
+
* whole family — never picked by which invariant is reachable on the hot path today (reachability moves, the table
|
|
98
|
+
* does not):
|
|
99
|
+
* `config.default_model_missing` — the candidate has no default model;
|
|
100
|
+
* `config.model_refused_name_minted` — a refused entry's name would be re-minted onto another entry by the
|
|
101
|
+
* tier / alias expansion (or the dropped-entry carrier cannot prove it would not be);
|
|
102
|
+
* `config.model_route_endpoint_missing` — an openai-compatible route of the candidate resolves to no endpoint;
|
|
103
|
+
* `config.gateway_fallback_without_primary` — fallback gateways are declared without a primary.
|
|
104
|
+
* Source (engine): the first two in `src/model-entry-refusal.ts`, the last two in `src/model-route-endpoint.ts:40,42`
|
|
105
|
+
* (invariant `model-route-endpoint`, judged by the model-plane stage in `src/config-center/apply-effective.ts:664-665`).
|
|
106
|
+
*/
|
|
107
|
+
export declare const MODEL_ENTRY_REFUSAL_CODES: readonly ["config.model_no_brain", "config.model_entry_invalid"];
|
|
108
|
+
export declare const ModelEntryRefusalCode: z.ZodEnum<["config.model_no_brain", "config.model_entry_invalid"]>;
|
|
109
|
+
export type ModelEntryRefusalCode = z.infer<typeof ModelEntryRefusalCode>;
|
|
110
|
+
export declare const MODEL_PLANE_REFUSAL_CODES: readonly ["config.default_model_missing", "config.model_refused_name_minted", "config.model_route_endpoint_missing", "config.gateway_fallback_without_primary"];
|
|
111
|
+
export declare const ModelPlaneRefusalCode: z.ZodEnum<["config.default_model_missing", "config.model_refused_name_minted", "config.model_route_endpoint_missing", "config.gateway_fallback_without_primary"]>;
|
|
112
|
+
export type ModelPlaneRefusalCode = z.infer<typeof ModelPlaneRefusalCode>;
|
|
113
|
+
/**
|
|
114
|
+
* "This instance does not serve part (or all) of the model catalog it was handed" — the engine's OWN per-host verdict
|
|
115
|
+
* (S-768), defined ONCE for both exits that carry it: the fleet heartbeat ({@link InstanceAnnouncement}`.modelRefusals`)
|
|
116
|
+
* and GET /health (`modelRefusals`; {@link InstanceHealth} keeps carrying it untyped, as it does `restart`). One mint point,
|
|
117
|
+
* two exits, ONE reader for both: {@link readModelRefusals}.
|
|
118
|
+
*
|
|
119
|
+
* Two faces, split on purpose — the failure direction must match the meaning (this is a DIAGNOSTIC key; an unknown word
|
|
120
|
+
* in it must never make a healthy instance unroutable):
|
|
121
|
+
* - {@link ModelRefusalsWire} — what rides the wire and what a stored heartbeat row holds: the SHAPE law only, codes as
|
|
122
|
+
* open non-empty strings. A code this package version does not know passes (it is "not said" to this reader, and the
|
|
123
|
+
* stored row still carries it for a reader that is upgraded later).
|
|
124
|
+
* - {@link ModelRefusalsSignal} — what {@link readModelRefusals} returns: the wire narrowed to the closed sets above (an
|
|
125
|
+
* unknown entry code or plane code is dropped; narrowed to nothing ⇒ `undefined`, rendered like "not said"). The
|
|
126
|
+
* closed-set types stay the compile-time red source for readers when a code is added.
|
|
127
|
+
*
|
|
128
|
+
* The wire shape:
|
|
129
|
+
* - `entries` — catalog entry NAME → its code. The value is ONLY the code, on purpose: the engine's refusal fact also
|
|
130
|
+
* holds the upstream `id`, the `provider` word, the bad field keys and an operator sentence, and none of them rides
|
|
131
|
+
* here — an `entry_invalid` row is by definition one nothing validated, so its `id` / `provider` may be whatever the
|
|
132
|
+
* broken row held, and the sentence is prose, not contract. "Which name, which reason" is the whole wire. A name that
|
|
133
|
+
* cannot ride out is treated as NAMELESS — the engine leaves it out of this map entirely (not keyed, not counted). The
|
|
134
|
+
* ONE predicate is `isReportableRefusalName(name)` (main barrel): this schema can carry the key (non-empty; `__proto__`
|
|
135
|
+
* is silently dropped by the record, so it cannot) AND `isDisclosableIdentity(name)` (not secret-shaped — the rule the
|
|
136
|
+
* dropped-entry identity on read warnings already uses). A producer calls it before keying; this schema deliberately
|
|
137
|
+
* does not re-judge secrecy (see the 6.2.0 notes).
|
|
138
|
+
* - `plane` — present ⇔ the model plane of the latest catalog the engine was handed was refused as a group (the engine
|
|
139
|
+
* keeps serving the model plane it had); ONE code, never a list — one candidate has exactly one group verdict (the
|
|
140
|
+
* engine judges the group invariants in a fixed order and stops at the first that fails; a refusal from the Runner
|
|
141
|
+
* swap step carries no code and is outside this signal).
|
|
142
|
+
* - `entries` and `plane` describe the same latest candidate catalog — the one the engine was handed last; with `plane`
|
|
143
|
+
* present, that is the refused candidate (its per-entry verdicts are usually why it has no default). The engine does
|
|
144
|
+
* not swap its own refusal table while the group stays refused (its selection channels still refuse by the previous
|
|
145
|
+
* generation), so with `plane` present read `entries` as "why this catalog cannot land", not "what a pick is refused
|
|
146
|
+
* right now".
|
|
147
|
+
*
|
|
148
|
+
* PRESENCE is the signal (same law as {@link RestartSignal}): present ⇔ at least one reportable refusal (an entry refusal
|
|
149
|
+
* under a name that rides out, or a group refusal). An empty signal (no entries and no `plane`) is refused by the shape
|
|
150
|
+
* law — "none" has exactly one spelling, the absent key. Inside, "no entry refusals" is spelled `entries: {}` (the key is
|
|
151
|
+
* required) — one spelling at each level.
|
|
152
|
+
*/
|
|
153
|
+
export declare const ModelRefusalsWire: z.ZodEffects<z.ZodObject<{
|
|
154
|
+
entries: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
155
|
+
plane: z.ZodOptional<z.ZodString>;
|
|
156
|
+
}, "strip", z.ZodTypeAny, {
|
|
157
|
+
entries: Record<string, string>;
|
|
158
|
+
plane?: string | undefined;
|
|
159
|
+
}, {
|
|
160
|
+
entries: Record<string, string>;
|
|
161
|
+
plane?: string | undefined;
|
|
162
|
+
}>, {
|
|
163
|
+
entries: Record<string, string>;
|
|
164
|
+
plane?: string | undefined;
|
|
165
|
+
}, {
|
|
166
|
+
entries: Record<string, string>;
|
|
167
|
+
plane?: string | undefined;
|
|
168
|
+
}>;
|
|
169
|
+
export type ModelRefusalsWire = z.infer<typeof ModelRefusalsWire>;
|
|
170
|
+
/** {@link ModelRefusalsWire} narrowed to the closed code sets — the return type of {@link readModelRefusals}. */
|
|
171
|
+
export type ModelRefusalsSignal = {
|
|
172
|
+
entries: Record<string, ModelEntryRefusalCode>;
|
|
173
|
+
plane?: ModelPlaneRefusalCode;
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* The ONE reader of the model-refusals signal, for BOTH exits: pass a /health body or a parsed
|
|
177
|
+
* {@link InstanceAnnouncement} — it reads the `modelRefusals` key of whatever it is given. Shape mismatch, a missing key, a
|
|
178
|
+
* non-object body, even a throwing accessor ⇒ `undefined` — never throws. Then it narrows to the closed sets: an unknown
|
|
179
|
+
* entry code drops that entry, an unknown plane code drops `plane`; narrowed to nothing ⇒ `undefined`. So `undefined`
|
|
180
|
+
* means "nothing this reader can say"; whether that is "none" or "unknown" depends on whether the engine reports this key
|
|
181
|
+
* at all — it answers the key only and never judges the engine's version (see {@link InstanceAnnouncement}`.modelRefusals`).
|
|
182
|
+
*/
|
|
183
|
+
export declare function readModelRefusals(body: unknown): ModelRefusalsSignal | undefined;
|
|
84
184
|
/** The `/health` self-description every orchestrator reads (shipped shape, server 1.96.0). Liveness and
|
|
85
185
|
* readiness are deliberately SPLIT: `status` stays ok while draining (the process is alive); routability is
|
|
86
186
|
* `isReadyForTraffic`. Unknown fields pass through — health is a self-description, not a closed record. */
|
|
@@ -150,6 +250,32 @@ export declare const InstanceAnnouncement: z.ZodObject<{
|
|
|
150
250
|
version: number;
|
|
151
251
|
since: number;
|
|
152
252
|
}>>;
|
|
253
|
+
/** S-768: present ⇔ this instance has at least one reportable model refusal — the SAME {@link ModelRefusalsWire} /health
|
|
254
|
+
* carries, minted by the same getter; read it with {@link readModelRefusals}`(announcement)` (never off this field
|
|
255
|
+
* directly: the field is the open wire form, the reader narrows to the closed sets). Every heartbeat re-announces the
|
|
256
|
+
* full row, so a later heartbeat WITHOUT it means "no reportable refusals any more" (the stored row is replaced, never
|
|
257
|
+
* merged). Reading absence: from an engine that reports this key, absent = none reportable; an engine that predates
|
|
258
|
+
* the key never sends it, so there absence is UNKNOWN, not "none" — tell the two apart by the announced `version`.
|
|
259
|
+
* Failure direction = meaning direction (this is a diagnostic key): a code this package version does not know passes
|
|
260
|
+
* (it is "not said" to the reader), and a value that breaks the {@link ModelRefusalsWire} shape law is dropped to
|
|
261
|
+
* ABSENT (`.catch`) — it never fails the announcement, so it can never make a healthy instance unroutable (unlike
|
|
262
|
+
* `restart`, whose shape still gates the row). The key may then be present with the value `undefined`. */
|
|
263
|
+
modelRefusals: z.ZodCatch<z.ZodOptional<z.ZodEffects<z.ZodObject<{
|
|
264
|
+
entries: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
265
|
+
plane: z.ZodOptional<z.ZodString>;
|
|
266
|
+
}, "strip", z.ZodTypeAny, {
|
|
267
|
+
entries: Record<string, string>;
|
|
268
|
+
plane?: string | undefined;
|
|
269
|
+
}, {
|
|
270
|
+
entries: Record<string, string>;
|
|
271
|
+
plane?: string | undefined;
|
|
272
|
+
}>, {
|
|
273
|
+
entries: Record<string, string>;
|
|
274
|
+
plane?: string | undefined;
|
|
275
|
+
}, {
|
|
276
|
+
entries: Record<string, string>;
|
|
277
|
+
plane?: string | undefined;
|
|
278
|
+
}>>>;
|
|
153
279
|
}, "strip", z.ZodTypeAny, {
|
|
154
280
|
draining: boolean;
|
|
155
281
|
version: string;
|
|
@@ -163,6 +289,10 @@ export declare const InstanceAnnouncement: z.ZodObject<{
|
|
|
163
289
|
version: number;
|
|
164
290
|
since: number;
|
|
165
291
|
} | undefined;
|
|
292
|
+
modelRefusals?: {
|
|
293
|
+
entries: Record<string, string>;
|
|
294
|
+
plane?: string | undefined;
|
|
295
|
+
} | undefined;
|
|
166
296
|
}, {
|
|
167
297
|
version: string;
|
|
168
298
|
instanceId: string;
|
|
@@ -175,6 +305,7 @@ export declare const InstanceAnnouncement: z.ZodObject<{
|
|
|
175
305
|
version: number;
|
|
176
306
|
since: number;
|
|
177
307
|
} | undefined;
|
|
308
|
+
modelRefusals?: unknown;
|
|
178
309
|
heartbeatMs?: number | undefined;
|
|
179
310
|
}>;
|
|
180
311
|
export type InstanceAnnouncement = z.infer<typeof InstanceAnnouncement>;
|
|
@@ -223,6 +354,32 @@ export declare const InstanceRegistration: z.ZodObject<{
|
|
|
223
354
|
version: number;
|
|
224
355
|
since: number;
|
|
225
356
|
}>>;
|
|
357
|
+
/** S-768: present ⇔ this instance has at least one reportable model refusal — the SAME {@link ModelRefusalsWire} /health
|
|
358
|
+
* carries, minted by the same getter; read it with {@link readModelRefusals}`(announcement)` (never off this field
|
|
359
|
+
* directly: the field is the open wire form, the reader narrows to the closed sets). Every heartbeat re-announces the
|
|
360
|
+
* full row, so a later heartbeat WITHOUT it means "no reportable refusals any more" (the stored row is replaced, never
|
|
361
|
+
* merged). Reading absence: from an engine that reports this key, absent = none reportable; an engine that predates
|
|
362
|
+
* the key never sends it, so there absence is UNKNOWN, not "none" — tell the two apart by the announced `version`.
|
|
363
|
+
* Failure direction = meaning direction (this is a diagnostic key): a code this package version does not know passes
|
|
364
|
+
* (it is "not said" to the reader), and a value that breaks the {@link ModelRefusalsWire} shape law is dropped to
|
|
365
|
+
* ABSENT (`.catch`) — it never fails the announcement, so it can never make a healthy instance unroutable (unlike
|
|
366
|
+
* `restart`, whose shape still gates the row). The key may then be present with the value `undefined`. */
|
|
367
|
+
modelRefusals: z.ZodCatch<z.ZodOptional<z.ZodEffects<z.ZodObject<{
|
|
368
|
+
entries: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
369
|
+
plane: z.ZodOptional<z.ZodString>;
|
|
370
|
+
}, "strip", z.ZodTypeAny, {
|
|
371
|
+
entries: Record<string, string>;
|
|
372
|
+
plane?: string | undefined;
|
|
373
|
+
}, {
|
|
374
|
+
entries: Record<string, string>;
|
|
375
|
+
plane?: string | undefined;
|
|
376
|
+
}>, {
|
|
377
|
+
entries: Record<string, string>;
|
|
378
|
+
plane?: string | undefined;
|
|
379
|
+
}, {
|
|
380
|
+
entries: Record<string, string>;
|
|
381
|
+
plane?: string | undefined;
|
|
382
|
+
}>>>;
|
|
226
383
|
} & {
|
|
227
384
|
registeredMs: z.ZodNumber;
|
|
228
385
|
lastSeenMs: z.ZodNumber;
|
|
@@ -242,6 +399,10 @@ export declare const InstanceRegistration: z.ZodObject<{
|
|
|
242
399
|
version: number;
|
|
243
400
|
since: number;
|
|
244
401
|
} | undefined;
|
|
402
|
+
modelRefusals?: {
|
|
403
|
+
entries: Record<string, string>;
|
|
404
|
+
plane?: string | undefined;
|
|
405
|
+
} | undefined;
|
|
245
406
|
observedReady?: boolean | undefined;
|
|
246
407
|
}, {
|
|
247
408
|
version: string;
|
|
@@ -257,6 +418,7 @@ export declare const InstanceRegistration: z.ZodObject<{
|
|
|
257
418
|
version: number;
|
|
258
419
|
since: number;
|
|
259
420
|
} | undefined;
|
|
421
|
+
modelRefusals?: unknown;
|
|
260
422
|
heartbeatMs?: number | undefined;
|
|
261
423
|
observedReady?: boolean | undefined;
|
|
262
424
|
}>;
|
package/dist/fleet.js
CHANGED
|
@@ -62,21 +62,129 @@ export const RestartSignal = z.object({
|
|
|
62
62
|
since: z.number().int().nonnegative(),
|
|
63
63
|
});
|
|
64
64
|
/**
|
|
65
|
-
* The /health
|
|
66
|
-
* key, a non-object body, even a throwing accessor ⇒
|
|
67
|
-
*
|
|
65
|
+
* The ONE /health reader behind every engine-owned signal ({@link readRestartSignal}, {@link readModelRefusals}): `health[key]`
|
|
66
|
+
* judged against that signal's one shape. Shape mismatch, a missing key, a non-object body, even a throwing accessor ⇒
|
|
67
|
+
* `undefined` — never throws (a probe must not die on one odd body).
|
|
68
68
|
*/
|
|
69
|
-
|
|
69
|
+
function readHealthSignal(health, key, schema) {
|
|
70
70
|
try {
|
|
71
71
|
if (health === null || typeof health !== "object" || Array.isArray(health))
|
|
72
72
|
return undefined;
|
|
73
|
-
const parsed =
|
|
73
|
+
const parsed = schema.safeParse(health[key]);
|
|
74
74
|
return parsed.success ? parsed.data : undefined;
|
|
75
75
|
}
|
|
76
76
|
catch {
|
|
77
77
|
return undefined;
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* The /health exit of {@link RestartSignal}: `health.restart` judged against the one shape. Shape mismatch, a missing
|
|
82
|
+
* key, a non-object body, even a throwing accessor ⇒ `undefined` — never throws (a probe must not die on one odd body).
|
|
83
|
+
* Presence law: only `restart` counts; the top-level `restartRequired` boolean the server also ships is not read.
|
|
84
|
+
*/
|
|
85
|
+
export function readRestartSignal(health) {
|
|
86
|
+
return readHealthSignal(health, "restart", RestartSignal);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The model-refusal cause codes (S-768) — CLOSED sets, owned HERE, never a hand-copied second list. Adding a code is
|
|
90
|
+
* one edit in this file; who goes red at compile time: a reader that switches on the code exhaustively (a center), and
|
|
91
|
+
* a producer only where it holds a table KEYED BY the code (an exhaustive `switch` over the code, or a
|
|
92
|
+
* `Record<ModelEntryRefusalCode, …>`) — a producer table that merely `satisfies` these codes as values proves a subset,
|
|
93
|
+
* not equality, and stays green.
|
|
94
|
+
*
|
|
95
|
+
* - {@link MODEL_ENTRY_REFUSAL_CODES} — why ONE catalog entry is not served on this host (the other entries keep serving):
|
|
96
|
+
* `config.model_no_brain` — the entry's provider rides a brain this host has not mounted;
|
|
97
|
+
* `config.model_entry_invalid` — the entry does not match the `ModelEntry` shape (dropped by the read, or re-judged at
|
|
98
|
+
* the engine's own second boundary).
|
|
99
|
+
* - {@link MODEL_PLANE_REFUSAL_CODES} — why the model plane of the catalog the engine was handed was refused AS A GROUP
|
|
100
|
+
* (the engine keeps serving the model plane it had). This set mirrors the engine's group-refusal code TABLE as a
|
|
101
|
+
* whole family — never picked by which invariant is reachable on the hot path today (reachability moves, the table
|
|
102
|
+
* does not):
|
|
103
|
+
* `config.default_model_missing` — the candidate has no default model;
|
|
104
|
+
* `config.model_refused_name_minted` — a refused entry's name would be re-minted onto another entry by the
|
|
105
|
+
* tier / alias expansion (or the dropped-entry carrier cannot prove it would not be);
|
|
106
|
+
* `config.model_route_endpoint_missing` — an openai-compatible route of the candidate resolves to no endpoint;
|
|
107
|
+
* `config.gateway_fallback_without_primary` — fallback gateways are declared without a primary.
|
|
108
|
+
* Source (engine): the first two in `src/model-entry-refusal.ts`, the last two in `src/model-route-endpoint.ts:40,42`
|
|
109
|
+
* (invariant `model-route-endpoint`, judged by the model-plane stage in `src/config-center/apply-effective.ts:664-665`).
|
|
110
|
+
*/
|
|
111
|
+
export const MODEL_ENTRY_REFUSAL_CODES = ["config.model_no_brain", "config.model_entry_invalid"];
|
|
112
|
+
export const ModelEntryRefusalCode = z.enum(MODEL_ENTRY_REFUSAL_CODES);
|
|
113
|
+
export const MODEL_PLANE_REFUSAL_CODES = [
|
|
114
|
+
"config.default_model_missing",
|
|
115
|
+
"config.model_refused_name_minted",
|
|
116
|
+
"config.model_route_endpoint_missing",
|
|
117
|
+
"config.gateway_fallback_without_primary",
|
|
118
|
+
];
|
|
119
|
+
export const ModelPlaneRefusalCode = z.enum(MODEL_PLANE_REFUSAL_CODES);
|
|
120
|
+
/**
|
|
121
|
+
* "This instance does not serve part (or all) of the model catalog it was handed" — the engine's OWN per-host verdict
|
|
122
|
+
* (S-768), defined ONCE for both exits that carry it: the fleet heartbeat ({@link InstanceAnnouncement}`.modelRefusals`)
|
|
123
|
+
* and GET /health (`modelRefusals`; {@link InstanceHealth} keeps carrying it untyped, as it does `restart`). One mint point,
|
|
124
|
+
* two exits, ONE reader for both: {@link readModelRefusals}.
|
|
125
|
+
*
|
|
126
|
+
* Two faces, split on purpose — the failure direction must match the meaning (this is a DIAGNOSTIC key; an unknown word
|
|
127
|
+
* in it must never make a healthy instance unroutable):
|
|
128
|
+
* - {@link ModelRefusalsWire} — what rides the wire and what a stored heartbeat row holds: the SHAPE law only, codes as
|
|
129
|
+
* open non-empty strings. A code this package version does not know passes (it is "not said" to this reader, and the
|
|
130
|
+
* stored row still carries it for a reader that is upgraded later).
|
|
131
|
+
* - {@link ModelRefusalsSignal} — what {@link readModelRefusals} returns: the wire narrowed to the closed sets above (an
|
|
132
|
+
* unknown entry code or plane code is dropped; narrowed to nothing ⇒ `undefined`, rendered like "not said"). The
|
|
133
|
+
* closed-set types stay the compile-time red source for readers when a code is added.
|
|
134
|
+
*
|
|
135
|
+
* The wire shape:
|
|
136
|
+
* - `entries` — catalog entry NAME → its code. The value is ONLY the code, on purpose: the engine's refusal fact also
|
|
137
|
+
* holds the upstream `id`, the `provider` word, the bad field keys and an operator sentence, and none of them rides
|
|
138
|
+
* here — an `entry_invalid` row is by definition one nothing validated, so its `id` / `provider` may be whatever the
|
|
139
|
+
* broken row held, and the sentence is prose, not contract. "Which name, which reason" is the whole wire. A name that
|
|
140
|
+
* cannot ride out is treated as NAMELESS — the engine leaves it out of this map entirely (not keyed, not counted). The
|
|
141
|
+
* ONE predicate is `isReportableRefusalName(name)` (main barrel): this schema can carry the key (non-empty; `__proto__`
|
|
142
|
+
* is silently dropped by the record, so it cannot) AND `isDisclosableIdentity(name)` (not secret-shaped — the rule the
|
|
143
|
+
* dropped-entry identity on read warnings already uses). A producer calls it before keying; this schema deliberately
|
|
144
|
+
* does not re-judge secrecy (see the 6.2.0 notes).
|
|
145
|
+
* - `plane` — present ⇔ the model plane of the latest catalog the engine was handed was refused as a group (the engine
|
|
146
|
+
* keeps serving the model plane it had); ONE code, never a list — one candidate has exactly one group verdict (the
|
|
147
|
+
* engine judges the group invariants in a fixed order and stops at the first that fails; a refusal from the Runner
|
|
148
|
+
* swap step carries no code and is outside this signal).
|
|
149
|
+
* - `entries` and `plane` describe the same latest candidate catalog — the one the engine was handed last; with `plane`
|
|
150
|
+
* present, that is the refused candidate (its per-entry verdicts are usually why it has no default). The engine does
|
|
151
|
+
* not swap its own refusal table while the group stays refused (its selection channels still refuse by the previous
|
|
152
|
+
* generation), so with `plane` present read `entries` as "why this catalog cannot land", not "what a pick is refused
|
|
153
|
+
* right now".
|
|
154
|
+
*
|
|
155
|
+
* PRESENCE is the signal (same law as {@link RestartSignal}): present ⇔ at least one reportable refusal (an entry refusal
|
|
156
|
+
* under a name that rides out, or a group refusal). An empty signal (no entries and no `plane`) is refused by the shape
|
|
157
|
+
* law — "none" has exactly one spelling, the absent key. Inside, "no entry refusals" is spelled `entries: {}` (the key is
|
|
158
|
+
* required) — one spelling at each level.
|
|
159
|
+
*/
|
|
160
|
+
export const ModelRefusalsWire = z
|
|
161
|
+
.object({
|
|
162
|
+
entries: z.record(z.string().min(1), z.string().min(1)),
|
|
163
|
+
plane: z.string().min(1).optional(),
|
|
164
|
+
})
|
|
165
|
+
.refine((s) => Object.keys(s.entries).length > 0 || s.plane !== undefined, {
|
|
166
|
+
message: "an empty model-refusals signal is not a signal — omit the key instead (absent ⇔ no reportable refusals)",
|
|
167
|
+
});
|
|
168
|
+
const isModelEntryRefusalCode = (c) => MODEL_ENTRY_REFUSAL_CODES.includes(c);
|
|
169
|
+
const isModelPlaneRefusalCode = (c) => MODEL_PLANE_REFUSAL_CODES.includes(c);
|
|
170
|
+
/**
|
|
171
|
+
* The ONE reader of the model-refusals signal, for BOTH exits: pass a /health body or a parsed
|
|
172
|
+
* {@link InstanceAnnouncement} — it reads the `modelRefusals` key of whatever it is given. Shape mismatch, a missing key, a
|
|
173
|
+
* non-object body, even a throwing accessor ⇒ `undefined` — never throws. Then it narrows to the closed sets: an unknown
|
|
174
|
+
* entry code drops that entry, an unknown plane code drops `plane`; narrowed to nothing ⇒ `undefined`. So `undefined`
|
|
175
|
+
* means "nothing this reader can say"; whether that is "none" or "unknown" depends on whether the engine reports this key
|
|
176
|
+
* at all — it answers the key only and never judges the engine's version (see {@link InstanceAnnouncement}`.modelRefusals`).
|
|
177
|
+
*/
|
|
178
|
+
export function readModelRefusals(body) {
|
|
179
|
+
const wire = readHealthSignal(body, "modelRefusals", ModelRefusalsWire);
|
|
180
|
+
if (wire === undefined)
|
|
181
|
+
return undefined;
|
|
182
|
+
const entries = Object.fromEntries(Object.entries(wire.entries).filter((e) => isModelEntryRefusalCode(e[1])));
|
|
183
|
+
const plane = wire.plane !== undefined && isModelPlaneRefusalCode(wire.plane) ? wire.plane : undefined;
|
|
184
|
+
if (Object.keys(entries).length === 0 && plane === undefined)
|
|
185
|
+
return undefined;
|
|
186
|
+
return plane === undefined ? { entries } : { entries, plane };
|
|
187
|
+
}
|
|
80
188
|
/** The `/health` self-description every orchestrator reads (shipped shape, server 1.96.0). Liveness and
|
|
81
189
|
* readiness are deliberately SPLIT: `status` stays ok while draining (the process is alive); routability is
|
|
82
190
|
* `isReadyForTraffic`. Unknown fields pass through — health is a self-description, not a closed record. */
|
|
@@ -93,6 +201,7 @@ export const InstanceHealth = z
|
|
|
93
201
|
// UNTYPED on purpose — typing `restart` here would turn today's lenient read into a strict one (a /health body with
|
|
94
202
|
// an odd `restart` would stop parsing), which is a MAJOR by this package's release rules. Read it with
|
|
95
203
|
// {@link readRestartSignal}. Typing it on this schema is an item for the next major.
|
|
204
|
+
// S-768: `modelRefusals` rides the passthrough untyped for the same reason — read it with {@link readModelRefusals}.
|
|
96
205
|
})
|
|
97
206
|
.passthrough();
|
|
98
207
|
/** Readiness = the routability predicate (k8s readiness probe, gateway health filter, shell seam switch). */
|
|
@@ -126,6 +235,17 @@ export const InstanceAnnouncement = z.object({
|
|
|
126
235
|
* Every heartbeat re-announces the full row, so a later heartbeat WITHOUT it means "no longer required" — the
|
|
127
236
|
* stored row ({@link InstanceRegistration}) is replaced, never merged. */
|
|
128
237
|
restart: RestartSignal.optional(),
|
|
238
|
+
/** S-768: present ⇔ this instance has at least one reportable model refusal — the SAME {@link ModelRefusalsWire} /health
|
|
239
|
+
* carries, minted by the same getter; read it with {@link readModelRefusals}`(announcement)` (never off this field
|
|
240
|
+
* directly: the field is the open wire form, the reader narrows to the closed sets). Every heartbeat re-announces the
|
|
241
|
+
* full row, so a later heartbeat WITHOUT it means "no reportable refusals any more" (the stored row is replaced, never
|
|
242
|
+
* merged). Reading absence: from an engine that reports this key, absent = none reportable; an engine that predates
|
|
243
|
+
* the key never sends it, so there absence is UNKNOWN, not "none" — tell the two apart by the announced `version`.
|
|
244
|
+
* Failure direction = meaning direction (this is a diagnostic key): a code this package version does not know passes
|
|
245
|
+
* (it is "not said" to the reader), and a value that breaks the {@link ModelRefusalsWire} shape law is dropped to
|
|
246
|
+
* ABSENT (`.catch`) — it never fails the announcement, so it can never make a healthy instance unroutable (unlike
|
|
247
|
+
* `restart`, whose shape still gates the row). The key may then be present with the value `undefined`. */
|
|
248
|
+
modelRefusals: ModelRefusalsWire.optional().catch(undefined),
|
|
129
249
|
});
|
|
130
250
|
/** Explicit goodbye (stop signal handler) — removes the row immediately instead of waiting out staleness. */
|
|
131
251
|
export const InstanceDeregistration = z.object({
|
package/dist/types.d.ts
CHANGED
|
@@ -422,14 +422,14 @@ export declare const TierBindings: z.ZodObject<{
|
|
|
422
422
|
flash: z.ZodOptional<z.ZodString>;
|
|
423
423
|
lite: z.ZodOptional<z.ZodString>;
|
|
424
424
|
}, "strip", z.ZodTypeAny, {
|
|
425
|
-
ultra?: string | undefined;
|
|
426
425
|
max?: string | undefined;
|
|
426
|
+
ultra?: string | undefined;
|
|
427
427
|
pro?: string | undefined;
|
|
428
428
|
flash?: string | undefined;
|
|
429
429
|
lite?: string | undefined;
|
|
430
430
|
}, {
|
|
431
|
-
ultra?: string | undefined;
|
|
432
431
|
max?: string | undefined;
|
|
432
|
+
ultra?: string | undefined;
|
|
433
433
|
pro?: string | undefined;
|
|
434
434
|
flash?: string | undefined;
|
|
435
435
|
lite?: string | undefined;
|
|
@@ -446,14 +446,14 @@ export declare const TierGroup: z.ZodObject<{
|
|
|
446
446
|
flash: z.ZodOptional<z.ZodString>;
|
|
447
447
|
lite: z.ZodOptional<z.ZodString>;
|
|
448
448
|
}, "strip", z.ZodTypeAny, {
|
|
449
|
-
ultra?: string | undefined;
|
|
450
449
|
max?: string | undefined;
|
|
450
|
+
ultra?: string | undefined;
|
|
451
451
|
pro?: string | undefined;
|
|
452
452
|
flash?: string | undefined;
|
|
453
453
|
lite?: string | undefined;
|
|
454
454
|
}, {
|
|
455
|
-
ultra?: string | undefined;
|
|
456
455
|
max?: string | undefined;
|
|
456
|
+
ultra?: string | undefined;
|
|
457
457
|
pro?: string | undefined;
|
|
458
458
|
flash?: string | undefined;
|
|
459
459
|
lite?: string | undefined;
|
|
@@ -462,8 +462,8 @@ export declare const TierGroup: z.ZodObject<{
|
|
|
462
462
|
}, "strip", z.ZodTypeAny, {
|
|
463
463
|
name: string;
|
|
464
464
|
tiers: {
|
|
465
|
-
ultra?: string | undefined;
|
|
466
465
|
max?: string | undefined;
|
|
466
|
+
ultra?: string | undefined;
|
|
467
467
|
pro?: string | undefined;
|
|
468
468
|
flash?: string | undefined;
|
|
469
469
|
lite?: string | undefined;
|
|
@@ -473,8 +473,8 @@ export declare const TierGroup: z.ZodObject<{
|
|
|
473
473
|
name: string;
|
|
474
474
|
notes?: string | undefined;
|
|
475
475
|
tiers?: {
|
|
476
|
-
ultra?: string | undefined;
|
|
477
476
|
max?: string | undefined;
|
|
477
|
+
ultra?: string | undefined;
|
|
478
478
|
pro?: string | undefined;
|
|
479
479
|
flash?: string | undefined;
|
|
480
480
|
lite?: string | undefined;
|
|
@@ -764,14 +764,14 @@ export declare const ModelsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
764
764
|
flash: z.ZodOptional<z.ZodString>;
|
|
765
765
|
lite: z.ZodOptional<z.ZodString>;
|
|
766
766
|
}, "strip", z.ZodTypeAny, {
|
|
767
|
-
ultra?: string | undefined;
|
|
768
767
|
max?: string | undefined;
|
|
768
|
+
ultra?: string | undefined;
|
|
769
769
|
pro?: string | undefined;
|
|
770
770
|
flash?: string | undefined;
|
|
771
771
|
lite?: string | undefined;
|
|
772
772
|
}, {
|
|
773
|
-
ultra?: string | undefined;
|
|
774
773
|
max?: string | undefined;
|
|
774
|
+
ultra?: string | undefined;
|
|
775
775
|
pro?: string | undefined;
|
|
776
776
|
flash?: string | undefined;
|
|
777
777
|
lite?: string | undefined;
|
|
@@ -780,8 +780,8 @@ export declare const ModelsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
780
780
|
}, "strip", z.ZodTypeAny, {
|
|
781
781
|
name: string;
|
|
782
782
|
tiers: {
|
|
783
|
-
ultra?: string | undefined;
|
|
784
783
|
max?: string | undefined;
|
|
784
|
+
ultra?: string | undefined;
|
|
785
785
|
pro?: string | undefined;
|
|
786
786
|
flash?: string | undefined;
|
|
787
787
|
lite?: string | undefined;
|
|
@@ -791,8 +791,8 @@ export declare const ModelsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
791
791
|
name: string;
|
|
792
792
|
notes?: string | undefined;
|
|
793
793
|
tiers?: {
|
|
794
|
-
ultra?: string | undefined;
|
|
795
794
|
max?: string | undefined;
|
|
795
|
+
ultra?: string | undefined;
|
|
796
796
|
pro?: string | undefined;
|
|
797
797
|
flash?: string | undefined;
|
|
798
798
|
lite?: string | undefined;
|
|
@@ -846,8 +846,8 @@ export declare const ModelsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
846
846
|
tierGroups: {
|
|
847
847
|
name: string;
|
|
848
848
|
tiers: {
|
|
849
|
-
ultra?: string | undefined;
|
|
850
849
|
max?: string | undefined;
|
|
850
|
+
ultra?: string | undefined;
|
|
851
851
|
pro?: string | undefined;
|
|
852
852
|
flash?: string | undefined;
|
|
853
853
|
lite?: string | undefined;
|
|
@@ -906,8 +906,8 @@ export declare const ModelsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
906
906
|
name: string;
|
|
907
907
|
notes?: string | undefined;
|
|
908
908
|
tiers?: {
|
|
909
|
-
ultra?: string | undefined;
|
|
910
909
|
max?: string | undefined;
|
|
910
|
+
ultra?: string | undefined;
|
|
911
911
|
pro?: string | undefined;
|
|
912
912
|
flash?: string | undefined;
|
|
913
913
|
lite?: string | undefined;
|
|
@@ -960,8 +960,8 @@ export declare const ModelsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
960
960
|
tierGroups: {
|
|
961
961
|
name: string;
|
|
962
962
|
tiers: {
|
|
963
|
-
ultra?: string | undefined;
|
|
964
963
|
max?: string | undefined;
|
|
964
|
+
ultra?: string | undefined;
|
|
965
965
|
pro?: string | undefined;
|
|
966
966
|
flash?: string | undefined;
|
|
967
967
|
lite?: string | undefined;
|
|
@@ -1020,8 +1020,8 @@ export declare const ModelsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
1020
1020
|
name: string;
|
|
1021
1021
|
notes?: string | undefined;
|
|
1022
1022
|
tiers?: {
|
|
1023
|
-
ultra?: string | undefined;
|
|
1024
1023
|
max?: string | undefined;
|
|
1024
|
+
ultra?: string | undefined;
|
|
1025
1025
|
pro?: string | undefined;
|
|
1026
1026
|
flash?: string | undefined;
|
|
1027
1027
|
lite?: string | undefined;
|
|
@@ -7318,13 +7318,13 @@ export declare const McpTransport: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<
|
|
|
7318
7318
|
* env-NAME ref (no secret). Empty → the worker forwards no principal (server sees an anonymous call). */
|
|
7319
7319
|
principalHeader: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
7320
7320
|
}, "strip", z.ZodTypeAny, {
|
|
7321
|
-
kind: "http";
|
|
7322
7321
|
url: string;
|
|
7322
|
+
kind: "http";
|
|
7323
7323
|
headerRefs?: Record<string, string> | undefined;
|
|
7324
7324
|
principalHeader?: string | undefined;
|
|
7325
7325
|
}, {
|
|
7326
|
-
kind: "http";
|
|
7327
7326
|
url: string;
|
|
7327
|
+
kind: "http";
|
|
7328
7328
|
headerRefs?: Record<string, string> | undefined;
|
|
7329
7329
|
principalHeader?: string | undefined;
|
|
7330
7330
|
}>]>;
|
|
@@ -7367,13 +7367,13 @@ export declare const McpServerSpec: z.ZodObject<{
|
|
|
7367
7367
|
* env-NAME ref (no secret). Empty → the worker forwards no principal (server sees an anonymous call). */
|
|
7368
7368
|
principalHeader: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
7369
7369
|
}, "strip", z.ZodTypeAny, {
|
|
7370
|
-
kind: "http";
|
|
7371
7370
|
url: string;
|
|
7371
|
+
kind: "http";
|
|
7372
7372
|
headerRefs?: Record<string, string> | undefined;
|
|
7373
7373
|
principalHeader?: string | undefined;
|
|
7374
7374
|
}, {
|
|
7375
|
-
kind: "http";
|
|
7376
7375
|
url: string;
|
|
7376
|
+
kind: "http";
|
|
7377
7377
|
headerRefs?: Record<string, string> | undefined;
|
|
7378
7378
|
principalHeader?: string | undefined;
|
|
7379
7379
|
}>]>;
|
|
@@ -7437,8 +7437,8 @@ export declare const McpServerSpec: z.ZodObject<{
|
|
|
7437
7437
|
args?: string[] | undefined;
|
|
7438
7438
|
envRefs?: Record<string, string> | undefined;
|
|
7439
7439
|
} | {
|
|
7440
|
-
kind: "http";
|
|
7441
7440
|
url: string;
|
|
7441
|
+
kind: "http";
|
|
7442
7442
|
headerRefs?: Record<string, string> | undefined;
|
|
7443
7443
|
principalHeader?: string | undefined;
|
|
7444
7444
|
};
|
|
@@ -7456,8 +7456,8 @@ export declare const McpServerSpec: z.ZodObject<{
|
|
|
7456
7456
|
args?: string[] | undefined;
|
|
7457
7457
|
envRefs?: Record<string, string> | undefined;
|
|
7458
7458
|
} | {
|
|
7459
|
-
kind: "http";
|
|
7460
7459
|
url: string;
|
|
7460
|
+
kind: "http";
|
|
7461
7461
|
headerRefs?: Record<string, string> | undefined;
|
|
7462
7462
|
principalHeader?: string | undefined;
|
|
7463
7463
|
};
|
|
@@ -7502,13 +7502,13 @@ export declare const McpConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7502
7502
|
* env-NAME ref (no secret). Empty → the worker forwards no principal (server sees an anonymous call). */
|
|
7503
7503
|
principalHeader: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
7504
7504
|
}, "strip", z.ZodTypeAny, {
|
|
7505
|
-
kind: "http";
|
|
7506
7505
|
url: string;
|
|
7506
|
+
kind: "http";
|
|
7507
7507
|
headerRefs?: Record<string, string> | undefined;
|
|
7508
7508
|
principalHeader?: string | undefined;
|
|
7509
7509
|
}, {
|
|
7510
|
-
kind: "http";
|
|
7511
7510
|
url: string;
|
|
7511
|
+
kind: "http";
|
|
7512
7512
|
headerRefs?: Record<string, string> | undefined;
|
|
7513
7513
|
principalHeader?: string | undefined;
|
|
7514
7514
|
}>]>;
|
|
@@ -7572,8 +7572,8 @@ export declare const McpConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7572
7572
|
args?: string[] | undefined;
|
|
7573
7573
|
envRefs?: Record<string, string> | undefined;
|
|
7574
7574
|
} | {
|
|
7575
|
-
kind: "http";
|
|
7576
7575
|
url: string;
|
|
7576
|
+
kind: "http";
|
|
7577
7577
|
headerRefs?: Record<string, string> | undefined;
|
|
7578
7578
|
principalHeader?: string | undefined;
|
|
7579
7579
|
};
|
|
@@ -7591,8 +7591,8 @@ export declare const McpConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7591
7591
|
args?: string[] | undefined;
|
|
7592
7592
|
envRefs?: Record<string, string> | undefined;
|
|
7593
7593
|
} | {
|
|
7594
|
-
kind: "http";
|
|
7595
7594
|
url: string;
|
|
7595
|
+
kind: "http";
|
|
7596
7596
|
headerRefs?: Record<string, string> | undefined;
|
|
7597
7597
|
principalHeader?: string | undefined;
|
|
7598
7598
|
};
|
|
@@ -7618,8 +7618,8 @@ export declare const McpConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7618
7618
|
args?: string[] | undefined;
|
|
7619
7619
|
envRefs?: Record<string, string> | undefined;
|
|
7620
7620
|
} | {
|
|
7621
|
-
kind: "http";
|
|
7622
7621
|
url: string;
|
|
7622
|
+
kind: "http";
|
|
7623
7623
|
headerRefs?: Record<string, string> | undefined;
|
|
7624
7624
|
principalHeader?: string | undefined;
|
|
7625
7625
|
};
|
|
@@ -7639,8 +7639,8 @@ export declare const McpConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7639
7639
|
args?: string[] | undefined;
|
|
7640
7640
|
envRefs?: Record<string, string> | undefined;
|
|
7641
7641
|
} | {
|
|
7642
|
-
kind: "http";
|
|
7643
7642
|
url: string;
|
|
7643
|
+
kind: "http";
|
|
7644
7644
|
headerRefs?: Record<string, string> | undefined;
|
|
7645
7645
|
principalHeader?: string | undefined;
|
|
7646
7646
|
};
|
|
@@ -7666,8 +7666,8 @@ export declare const McpConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7666
7666
|
args?: string[] | undefined;
|
|
7667
7667
|
envRefs?: Record<string, string> | undefined;
|
|
7668
7668
|
} | {
|
|
7669
|
-
kind: "http";
|
|
7670
7669
|
url: string;
|
|
7670
|
+
kind: "http";
|
|
7671
7671
|
headerRefs?: Record<string, string> | undefined;
|
|
7672
7672
|
principalHeader?: string | undefined;
|
|
7673
7673
|
};
|
|
@@ -7687,8 +7687,8 @@ export declare const McpConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7687
7687
|
args?: string[] | undefined;
|
|
7688
7688
|
envRefs?: Record<string, string> | undefined;
|
|
7689
7689
|
} | {
|
|
7690
|
-
kind: "http";
|
|
7691
7690
|
url: string;
|
|
7691
|
+
kind: "http";
|
|
7692
7692
|
headerRefs?: Record<string, string> | undefined;
|
|
7693
7693
|
principalHeader?: string | undefined;
|
|
7694
7694
|
};
|
|
@@ -7726,11 +7726,11 @@ export declare const PluginSource: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<
|
|
|
7726
7726
|
kind: z.ZodLiteral<"git">;
|
|
7727
7727
|
url: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>;
|
|
7728
7728
|
}, "strip", z.ZodTypeAny, {
|
|
7729
|
-
kind: "git";
|
|
7730
7729
|
url: string;
|
|
7731
|
-
}, {
|
|
7732
7730
|
kind: "git";
|
|
7731
|
+
}, {
|
|
7733
7732
|
url: string;
|
|
7733
|
+
kind: "git";
|
|
7734
7734
|
}>, z.ZodObject<{
|
|
7735
7735
|
kind: z.ZodLiteral<"marketplace">;
|
|
7736
7736
|
marketplace: z.ZodString;
|
|
@@ -7752,11 +7752,11 @@ export declare const PluginSpec: z.ZodObject<{
|
|
|
7752
7752
|
kind: z.ZodLiteral<"git">;
|
|
7753
7753
|
url: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>;
|
|
7754
7754
|
}, "strip", z.ZodTypeAny, {
|
|
7755
|
-
kind: "git";
|
|
7756
7755
|
url: string;
|
|
7757
|
-
}, {
|
|
7758
7756
|
kind: "git";
|
|
7757
|
+
}, {
|
|
7759
7758
|
url: string;
|
|
7759
|
+
kind: "git";
|
|
7760
7760
|
}>, z.ZodObject<{
|
|
7761
7761
|
kind: z.ZodLiteral<"marketplace">;
|
|
7762
7762
|
marketplace: z.ZodString;
|
|
@@ -7781,8 +7781,8 @@ export declare const PluginSpec: z.ZodObject<{
|
|
|
7781
7781
|
name: string;
|
|
7782
7782
|
enabled: boolean;
|
|
7783
7783
|
source: {
|
|
7784
|
-
kind: "git";
|
|
7785
7784
|
url: string;
|
|
7785
|
+
kind: "git";
|
|
7786
7786
|
} | {
|
|
7787
7787
|
kind: "marketplace";
|
|
7788
7788
|
marketplace: string;
|
|
@@ -7794,8 +7794,8 @@ export declare const PluginSpec: z.ZodObject<{
|
|
|
7794
7794
|
}, {
|
|
7795
7795
|
name: string;
|
|
7796
7796
|
source: {
|
|
7797
|
-
kind: "git";
|
|
7798
7797
|
url: string;
|
|
7798
|
+
kind: "git";
|
|
7799
7799
|
} | {
|
|
7800
7800
|
kind: "marketplace";
|
|
7801
7801
|
marketplace: string;
|
|
@@ -7815,11 +7815,11 @@ export declare const PluginsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7815
7815
|
kind: z.ZodLiteral<"git">;
|
|
7816
7816
|
url: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>;
|
|
7817
7817
|
}, "strip", z.ZodTypeAny, {
|
|
7818
|
-
kind: "git";
|
|
7819
7818
|
url: string;
|
|
7820
|
-
}, {
|
|
7821
7819
|
kind: "git";
|
|
7820
|
+
}, {
|
|
7822
7821
|
url: string;
|
|
7822
|
+
kind: "git";
|
|
7823
7823
|
}>, z.ZodObject<{
|
|
7824
7824
|
kind: z.ZodLiteral<"marketplace">;
|
|
7825
7825
|
marketplace: z.ZodString;
|
|
@@ -7844,8 +7844,8 @@ export declare const PluginsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7844
7844
|
name: string;
|
|
7845
7845
|
enabled: boolean;
|
|
7846
7846
|
source: {
|
|
7847
|
-
kind: "git";
|
|
7848
7847
|
url: string;
|
|
7848
|
+
kind: "git";
|
|
7849
7849
|
} | {
|
|
7850
7850
|
kind: "marketplace";
|
|
7851
7851
|
marketplace: string;
|
|
@@ -7857,8 +7857,8 @@ export declare const PluginsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7857
7857
|
}, {
|
|
7858
7858
|
name: string;
|
|
7859
7859
|
source: {
|
|
7860
|
-
kind: "git";
|
|
7861
7860
|
url: string;
|
|
7861
|
+
kind: "git";
|
|
7862
7862
|
} | {
|
|
7863
7863
|
kind: "marketplace";
|
|
7864
7864
|
marketplace: string;
|
|
@@ -7874,8 +7874,8 @@ export declare const PluginsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7874
7874
|
name: string;
|
|
7875
7875
|
enabled: boolean;
|
|
7876
7876
|
source: {
|
|
7877
|
-
kind: "git";
|
|
7878
7877
|
url: string;
|
|
7878
|
+
kind: "git";
|
|
7879
7879
|
} | {
|
|
7880
7880
|
kind: "marketplace";
|
|
7881
7881
|
marketplace: string;
|
|
@@ -7889,8 +7889,8 @@ export declare const PluginsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7889
7889
|
plugins?: {
|
|
7890
7890
|
name: string;
|
|
7891
7891
|
source: {
|
|
7892
|
-
kind: "git";
|
|
7893
7892
|
url: string;
|
|
7893
|
+
kind: "git";
|
|
7894
7894
|
} | {
|
|
7895
7895
|
kind: "marketplace";
|
|
7896
7896
|
marketplace: string;
|
|
@@ -7906,8 +7906,8 @@ export declare const PluginsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7906
7906
|
name: string;
|
|
7907
7907
|
enabled: boolean;
|
|
7908
7908
|
source: {
|
|
7909
|
-
kind: "git";
|
|
7910
7909
|
url: string;
|
|
7910
|
+
kind: "git";
|
|
7911
7911
|
} | {
|
|
7912
7912
|
kind: "marketplace";
|
|
7913
7913
|
marketplace: string;
|
|
@@ -7921,8 +7921,8 @@ export declare const PluginsConfig: z.ZodEffects<z.ZodObject<{
|
|
|
7921
7921
|
plugins?: {
|
|
7922
7922
|
name: string;
|
|
7923
7923
|
source: {
|
|
7924
|
-
kind: "git";
|
|
7925
7924
|
url: string;
|
|
7925
|
+
kind: "git";
|
|
7926
7926
|
} | {
|
|
7927
7927
|
kind: "marketplace";
|
|
7928
7928
|
marketplace: string;
|
|
@@ -9680,14 +9680,14 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
9680
9680
|
flash: z.ZodOptional<z.ZodString>;
|
|
9681
9681
|
lite: z.ZodOptional<z.ZodString>;
|
|
9682
9682
|
}, "strip", z.ZodTypeAny, {
|
|
9683
|
-
ultra?: string | undefined;
|
|
9684
9683
|
max?: string | undefined;
|
|
9684
|
+
ultra?: string | undefined;
|
|
9685
9685
|
pro?: string | undefined;
|
|
9686
9686
|
flash?: string | undefined;
|
|
9687
9687
|
lite?: string | undefined;
|
|
9688
9688
|
}, {
|
|
9689
|
-
ultra?: string | undefined;
|
|
9690
9689
|
max?: string | undefined;
|
|
9690
|
+
ultra?: string | undefined;
|
|
9691
9691
|
pro?: string | undefined;
|
|
9692
9692
|
flash?: string | undefined;
|
|
9693
9693
|
lite?: string | undefined;
|
|
@@ -9696,8 +9696,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
9696
9696
|
}, "strip", z.ZodTypeAny, {
|
|
9697
9697
|
name: string;
|
|
9698
9698
|
tiers: {
|
|
9699
|
-
ultra?: string | undefined;
|
|
9700
9699
|
max?: string | undefined;
|
|
9700
|
+
ultra?: string | undefined;
|
|
9701
9701
|
pro?: string | undefined;
|
|
9702
9702
|
flash?: string | undefined;
|
|
9703
9703
|
lite?: string | undefined;
|
|
@@ -9707,8 +9707,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
9707
9707
|
name: string;
|
|
9708
9708
|
notes?: string | undefined;
|
|
9709
9709
|
tiers?: {
|
|
9710
|
-
ultra?: string | undefined;
|
|
9711
9710
|
max?: string | undefined;
|
|
9711
|
+
ultra?: string | undefined;
|
|
9712
9712
|
pro?: string | undefined;
|
|
9713
9713
|
flash?: string | undefined;
|
|
9714
9714
|
lite?: string | undefined;
|
|
@@ -9762,8 +9762,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
9762
9762
|
tierGroups: {
|
|
9763
9763
|
name: string;
|
|
9764
9764
|
tiers: {
|
|
9765
|
-
ultra?: string | undefined;
|
|
9766
9765
|
max?: string | undefined;
|
|
9766
|
+
ultra?: string | undefined;
|
|
9767
9767
|
pro?: string | undefined;
|
|
9768
9768
|
flash?: string | undefined;
|
|
9769
9769
|
lite?: string | undefined;
|
|
@@ -9822,8 +9822,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
9822
9822
|
name: string;
|
|
9823
9823
|
notes?: string | undefined;
|
|
9824
9824
|
tiers?: {
|
|
9825
|
-
ultra?: string | undefined;
|
|
9826
9825
|
max?: string | undefined;
|
|
9826
|
+
ultra?: string | undefined;
|
|
9827
9827
|
pro?: string | undefined;
|
|
9828
9828
|
flash?: string | undefined;
|
|
9829
9829
|
lite?: string | undefined;
|
|
@@ -9876,8 +9876,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
9876
9876
|
tierGroups: {
|
|
9877
9877
|
name: string;
|
|
9878
9878
|
tiers: {
|
|
9879
|
-
ultra?: string | undefined;
|
|
9880
9879
|
max?: string | undefined;
|
|
9880
|
+
ultra?: string | undefined;
|
|
9881
9881
|
pro?: string | undefined;
|
|
9882
9882
|
flash?: string | undefined;
|
|
9883
9883
|
lite?: string | undefined;
|
|
@@ -9936,8 +9936,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
9936
9936
|
name: string;
|
|
9937
9937
|
notes?: string | undefined;
|
|
9938
9938
|
tiers?: {
|
|
9939
|
-
ultra?: string | undefined;
|
|
9940
9939
|
max?: string | undefined;
|
|
9940
|
+
ultra?: string | undefined;
|
|
9941
9941
|
pro?: string | undefined;
|
|
9942
9942
|
flash?: string | undefined;
|
|
9943
9943
|
lite?: string | undefined;
|
|
@@ -10205,13 +10205,13 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10205
10205
|
* env-NAME ref (no secret). Empty → the worker forwards no principal (server sees an anonymous call). */
|
|
10206
10206
|
principalHeader: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
10207
10207
|
}, "strip", z.ZodTypeAny, {
|
|
10208
|
-
kind: "http";
|
|
10209
10208
|
url: string;
|
|
10209
|
+
kind: "http";
|
|
10210
10210
|
headerRefs?: Record<string, string> | undefined;
|
|
10211
10211
|
principalHeader?: string | undefined;
|
|
10212
10212
|
}, {
|
|
10213
|
-
kind: "http";
|
|
10214
10213
|
url: string;
|
|
10214
|
+
kind: "http";
|
|
10215
10215
|
headerRefs?: Record<string, string> | undefined;
|
|
10216
10216
|
principalHeader?: string | undefined;
|
|
10217
10217
|
}>]>;
|
|
@@ -10275,8 +10275,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10275
10275
|
args?: string[] | undefined;
|
|
10276
10276
|
envRefs?: Record<string, string> | undefined;
|
|
10277
10277
|
} | {
|
|
10278
|
-
kind: "http";
|
|
10279
10278
|
url: string;
|
|
10279
|
+
kind: "http";
|
|
10280
10280
|
headerRefs?: Record<string, string> | undefined;
|
|
10281
10281
|
principalHeader?: string | undefined;
|
|
10282
10282
|
};
|
|
@@ -10294,8 +10294,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10294
10294
|
args?: string[] | undefined;
|
|
10295
10295
|
envRefs?: Record<string, string> | undefined;
|
|
10296
10296
|
} | {
|
|
10297
|
-
kind: "http";
|
|
10298
10297
|
url: string;
|
|
10298
|
+
kind: "http";
|
|
10299
10299
|
headerRefs?: Record<string, string> | undefined;
|
|
10300
10300
|
principalHeader?: string | undefined;
|
|
10301
10301
|
};
|
|
@@ -10321,8 +10321,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10321
10321
|
args?: string[] | undefined;
|
|
10322
10322
|
envRefs?: Record<string, string> | undefined;
|
|
10323
10323
|
} | {
|
|
10324
|
-
kind: "http";
|
|
10325
10324
|
url: string;
|
|
10325
|
+
kind: "http";
|
|
10326
10326
|
headerRefs?: Record<string, string> | undefined;
|
|
10327
10327
|
principalHeader?: string | undefined;
|
|
10328
10328
|
};
|
|
@@ -10342,8 +10342,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10342
10342
|
args?: string[] | undefined;
|
|
10343
10343
|
envRefs?: Record<string, string> | undefined;
|
|
10344
10344
|
} | {
|
|
10345
|
-
kind: "http";
|
|
10346
10345
|
url: string;
|
|
10346
|
+
kind: "http";
|
|
10347
10347
|
headerRefs?: Record<string, string> | undefined;
|
|
10348
10348
|
principalHeader?: string | undefined;
|
|
10349
10349
|
};
|
|
@@ -10369,8 +10369,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10369
10369
|
args?: string[] | undefined;
|
|
10370
10370
|
envRefs?: Record<string, string> | undefined;
|
|
10371
10371
|
} | {
|
|
10372
|
-
kind: "http";
|
|
10373
10372
|
url: string;
|
|
10373
|
+
kind: "http";
|
|
10374
10374
|
headerRefs?: Record<string, string> | undefined;
|
|
10375
10375
|
principalHeader?: string | undefined;
|
|
10376
10376
|
};
|
|
@@ -10390,8 +10390,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10390
10390
|
args?: string[] | undefined;
|
|
10391
10391
|
envRefs?: Record<string, string> | undefined;
|
|
10392
10392
|
} | {
|
|
10393
|
-
kind: "http";
|
|
10394
10393
|
url: string;
|
|
10394
|
+
kind: "http";
|
|
10395
10395
|
headerRefs?: Record<string, string> | undefined;
|
|
10396
10396
|
principalHeader?: string | undefined;
|
|
10397
10397
|
};
|
|
@@ -10414,11 +10414,11 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10414
10414
|
kind: z.ZodLiteral<"git">;
|
|
10415
10415
|
url: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>;
|
|
10416
10416
|
}, "strip", z.ZodTypeAny, {
|
|
10417
|
-
kind: "git";
|
|
10418
10417
|
url: string;
|
|
10419
|
-
}, {
|
|
10420
10418
|
kind: "git";
|
|
10419
|
+
}, {
|
|
10421
10420
|
url: string;
|
|
10421
|
+
kind: "git";
|
|
10422
10422
|
}>, z.ZodObject<{
|
|
10423
10423
|
kind: z.ZodLiteral<"marketplace">;
|
|
10424
10424
|
marketplace: z.ZodString;
|
|
@@ -10443,8 +10443,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10443
10443
|
name: string;
|
|
10444
10444
|
enabled: boolean;
|
|
10445
10445
|
source: {
|
|
10446
|
-
kind: "git";
|
|
10447
10446
|
url: string;
|
|
10447
|
+
kind: "git";
|
|
10448
10448
|
} | {
|
|
10449
10449
|
kind: "marketplace";
|
|
10450
10450
|
marketplace: string;
|
|
@@ -10456,8 +10456,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10456
10456
|
}, {
|
|
10457
10457
|
name: string;
|
|
10458
10458
|
source: {
|
|
10459
|
-
kind: "git";
|
|
10460
10459
|
url: string;
|
|
10460
|
+
kind: "git";
|
|
10461
10461
|
} | {
|
|
10462
10462
|
kind: "marketplace";
|
|
10463
10463
|
marketplace: string;
|
|
@@ -10473,8 +10473,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10473
10473
|
name: string;
|
|
10474
10474
|
enabled: boolean;
|
|
10475
10475
|
source: {
|
|
10476
|
-
kind: "git";
|
|
10477
10476
|
url: string;
|
|
10477
|
+
kind: "git";
|
|
10478
10478
|
} | {
|
|
10479
10479
|
kind: "marketplace";
|
|
10480
10480
|
marketplace: string;
|
|
@@ -10488,8 +10488,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10488
10488
|
plugins?: {
|
|
10489
10489
|
name: string;
|
|
10490
10490
|
source: {
|
|
10491
|
-
kind: "git";
|
|
10492
10491
|
url: string;
|
|
10492
|
+
kind: "git";
|
|
10493
10493
|
} | {
|
|
10494
10494
|
kind: "marketplace";
|
|
10495
10495
|
marketplace: string;
|
|
@@ -10505,8 +10505,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10505
10505
|
name: string;
|
|
10506
10506
|
enabled: boolean;
|
|
10507
10507
|
source: {
|
|
10508
|
-
kind: "git";
|
|
10509
10508
|
url: string;
|
|
10509
|
+
kind: "git";
|
|
10510
10510
|
} | {
|
|
10511
10511
|
kind: "marketplace";
|
|
10512
10512
|
marketplace: string;
|
|
@@ -10520,8 +10520,8 @@ export declare const DOMAIN_SCHEMAS: {
|
|
|
10520
10520
|
plugins?: {
|
|
10521
10521
|
name: string;
|
|
10522
10522
|
source: {
|
|
10523
|
-
kind: "git";
|
|
10524
10523
|
url: string;
|
|
10524
|
+
kind: "git";
|
|
10525
10525
|
} | {
|
|
10526
10526
|
kind: "marketplace";
|
|
10527
10527
|
marketplace: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/settings-schema",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"description": "Sema settings schema — pure config contract (zod domains + effective-config + roster resolution + ref-integrity + remoteExec) shared by sema-registry, 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",
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"publish:npm": "npm publish --access public --@sema-agent:registry=https://registry.npmjs.org/ --\"//registry.npmjs.org/:_authToken=${NPM_TOKEN}\""
|
|
129
129
|
},
|
|
130
130
|
"devDependencies": {
|
|
131
|
-
"@sema-agent/core": "
|
|
131
|
+
"@sema-agent/core": "7.33.1",
|
|
132
132
|
"@types/node": "^22.10.0",
|
|
133
133
|
"esbuild": "^0.21.5",
|
|
134
134
|
"typescript": "^5.7.0",
|