@sema-agent/sdk 13.0.0 → 14.0.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/README.md +52 -0
- package/dist/errors.d.ts +28 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +43 -10
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +25 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/runs.d.ts +2 -1
- package/dist/resources/runs.d.ts.map +1 -1
- package/dist/resources/runs.js +2 -1
- package/dist/resources/runs.js.map +1 -1
- package/dist/resources/tool-approvals.d.ts +5 -1
- package/dist/resources/tool-approvals.d.ts.map +1 -1
- package/dist/resources/tool-approvals.js +2 -1
- package/dist/resources/tool-approvals.js.map +1 -1
- package/dist/sse.d.ts.map +1 -1
- package/dist/sse.js +3 -0
- package/dist/sse.js.map +1 -1
- package/dist/transport.d.ts +4 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +5 -1
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +236 -44
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/LICENSE +0 -103
- package/openapi.yaml +0 -18945
package/dist/types.d.ts
CHANGED
|
@@ -555,7 +555,22 @@ export interface TaskRequest {
|
|
|
555
555
|
* 顶层键闭集)—— 两形都按 `fileHistoryCapture === "on-optional"` 判再发。
|
|
556
556
|
*/
|
|
557
557
|
fileHistory?: "disabled";
|
|
558
|
-
/** 🔴
|
|
558
|
+
/** 🔴 **K-32 扩项 —— server ≥7.106.0(S-877 / core 7.34.0 design/1111「一只权限模式」)先读这一段;下面的长段描述的是 ≤7.105.0。**
|
|
559
|
+
* · 生效模式**原样过境**给引擎(`TaskSpec.permissionMode`),本服务的「模式 → shellGate / writeFace 档」翻译表整表退役;引擎在**每一种**模式下
|
|
560
|
+
* 给全权 shell 装形状档、按模式 × 类仲裁表({@link AskClass})裁决每一只 ask。
|
|
561
|
+
* · **ABSENT(两个载体都不带模式)= `default`**(不再是「无门」):非只读 shell 命令与每一次写先问;有审批席 / durable park 的腿上是卡,无人应答的
|
|
562
|
+
* 腿上 headless 拒(拒句点名 `permissionMode:"acceptEdits"` / 接审批席)。要旧的「不问」就显式发 `acceptEdits`(工作区内写不问)或
|
|
563
|
+
* `bypassPermissions`(托管部署 422 `request.host_posture_refused`)。
|
|
564
|
+
* · `bypassPermissions` **放行并披露**可放的九类 ask(写保护、根外读探针、MCP / A2A 工具标记、transcript 写、规则店读不出〔安全轴 fail-open,单列〕、
|
|
565
|
+
* 他人共享 artifact 读、模式自己的问、普通 / 形状层的问)—— 逐调用记在 `tool_end.gate.disposition.released`({@link ModeRelease}),每 (模式, 类)
|
|
566
|
+
* 每 run 一帧 `engine_notice` `permission.ask_released_by_mode`;免疫类(部署出身 `operator_forced`、ask / org 规则、hook、祖先、问答 …)照问。
|
|
567
|
+
* 判不出保护目标的写仍拒(`deniedBy:"mode"`)。
|
|
568
|
+
* · `auto` 武装 ⟺ `permissionMode === "auto"` ∧ 部署挂了分类器席 ∧ `caps.autoMode !== false`(单极;`capabilities.permissionModeAuto.intentArming`
|
|
569
|
+
* 恒 `true`)。请求的模式没生效 ⇒ 流上一帧 `engine_notice` `config.permission_mode_unavailable`(`effective` 恒 `default`)。
|
|
570
|
+
* · 词表:请求面**五词**(本型 = {@link PermissionMode} 去掉 `dontAsk`);`dontAsk` fresh 提交 400 `request.field_invalid`(S-902,票 7.107.0)。
|
|
571
|
+
* ⚠️ 下文「omit ⇒ NO mode-derived gate」「`auto` 与请求词无关、按 principal 授权武装」「bypass adds NO mode-derived ask gate」三句只对 ≤7.105.0 成立。
|
|
572
|
+
*
|
|
573
|
+
* 🔴 PERMISSION MODE INTENT — the TOB-fleet server's five accepted wire values: `default` | `plan` |
|
|
559
574
|
* `acceptEdits` | `bypassPermissions` | `auto` (post-[816]/[820]/[822] current state; server task-settings.ts
|
|
560
575
|
* `SettingsPermissionMode` is the same closed set, same-batch aligned 2026-08-05 via server.ts submit-gate
|
|
561
576
|
* commits 0c39959/ff62de6). NOT a claim that these are CC's/sema-cli's complete mode vocabulary — that
|
|
@@ -587,7 +602,7 @@ export interface TaskRequest {
|
|
|
587
602
|
* gate at all" (the SAME posture as `bypassPermissions`) is true only when NEITHER carrier supplies a mode. A
|
|
588
603
|
* caller that wants the manual-ask posture must send `"default"` on at least one carrier — omitting both is
|
|
589
604
|
* NOT equivalent to sending an explicit `"default"` on either. */
|
|
590
|
-
permissionMode?:
|
|
605
|
+
permissionMode?: Exclude<PermissionMode, "dontAsk">;
|
|
591
606
|
/** 🔴 **READ 容纳面(`readFace` / READ deny 表)不在这条请求面上** —— 2026-08-16 亲读 server 7.25.0
|
|
592
607
|
* 实况定界(不是「SDK 还没跟上」,别照着 core 的 `TaskSpec.readFace` 在这里手拼一个键):
|
|
593
608
|
* · **接收面 = 部署席,单腿 env**:`READ_FACE`(`open`|`roots`,坏词启动期响亮拒)/ `READ_DENY_PATTERNS`
|
|
@@ -729,12 +744,28 @@ export interface TaskRequest {
|
|
|
729
744
|
* ⚠️ **辖域**:A2A 入站面(`message/send`)**不承载本键** —— 那条腿的提交体是服务端从协议消息重建的
|
|
730
745
|
* 闭四字段,消息里放这个键**无效且不报错**,名册照旧。A2A peer 要零工具面就走 skill 路由。 */
|
|
731
746
|
excludeAllTools?: true;
|
|
732
|
-
/** server ≥7.
|
|
733
|
-
*
|
|
734
|
-
*
|
|
735
|
-
*
|
|
736
|
-
*
|
|
737
|
-
|
|
747
|
+
/** **host 车道的 shell 继承多少用户环境**(K-32 扩项;server ≥7.106.0 / S-895,core design/1159 C-R179 ②;契约 §18;真源发布字节
|
|
748
|
+
* `dist/http/wire-types.d.ts` 提交体同名成员 + `dist/request-value-closure.js` 的 `INHERIT_ENV_WORDS` / `inheritEnvFieldIssue`)。
|
|
749
|
+
* 闭集两词(名单形 `string[]` **不上 wire** —— 那是嵌入方构造执行环境的选项):
|
|
750
|
+
* · `"all"` —— 这条请求的模型驱动 host shell 继承这台机器的**整份**环境(`{ ...process.env }` 逐字,CC 交互形);
|
|
751
|
+
* · `"scrub"` —— 缺省清洗(剥凭据形变量),**任何车道、任何部署都受理**(它就是缺省)。
|
|
752
|
+
* **缺席 = 缺省清洗,并清掉本会话上一条请求留下的声明**(不粘:这一位是「本条请求要什么」,与 `cwd` 的「缺席留旧值」刻意不同)。
|
|
753
|
+
* 🔴 判决(fresh 提交三口 `POST /v1/tasks` · `/v1/tasks/stream` · `/v1/runs` 同判):
|
|
754
|
+
* · 词表外 ⇒ 400 `request.field_invalid`(句点名两词);
|
|
755
|
+
* · 非 host 车道(e2b / k8s / local-docker / ssh / adb / device / in-process)带 `"all"` ⇒ 400 `request.field_invalid`
|
|
756
|
+
* 「applies to the host lane only」(`"scrub"` 照受理);`"all"` 而部署不接 authorizer(无会话)⇒ 400 `request.field_invalid`;
|
|
757
|
+
* · 托管部署(`REQUIRE_PRINCIPAL=true`)× `"all"` ⇒ **422 `request.host_posture_refused`**(与写容纳面那条腿同码同状态;
|
|
758
|
+
* 射程读同一只 `hostPostureDeclarationsHonored`,**不**读 `TASK_WRITE_FACE_ESCALATION`)⇒ {@link import("./errors.js").APIError}
|
|
759
|
+
* 按码分支,出路 = 删键或改发 `"scrub"`;
|
|
760
|
+
* · 续跑腿(revive / `/decide` / 抢占 / 唤醒)重放盘上的体照判,折 `409 resume_blocked_by_policy`
|
|
761
|
+
* ({@link import("./errors.js").ResumeBlockedByPolicyError},`blockedBy` 点名原码);
|
|
762
|
+
* · **老 server(≤7.105.0)⇒ 400 `request.body_shape`**(未知顶层键,`unknownKeys:["inheritEnv"]`)—— 按版本不发。
|
|
763
|
+
* 🔴 **事先读数 = {@link Capabilities.projectContext}**(host 车道 ∧ 非托管,与本键的车道门 + 射程门逐组合相等);**别拿
|
|
764
|
+
* {@link Capabilities.taskWriteFaceOpen} 当读数**(它另合了 `TASK_WRITE_FACE_ESCALATION` 与 `AUTONOMY` 两半,在「托管 + 旋钮 allow」
|
|
765
|
+
* 「单用户 + `AUTONOMY=read-only`」两形上与本键的兑现相反)。
|
|
766
|
+
* ⚠️ 残余(server 如实登记,S-908):绑定按**会话**键控、在 run 认领之后写(被拒的请求零写);无 run 店的部署上同会话并发受理的
|
|
767
|
+
* 两条 run 之间「最后写者赢」—— 同会话别并发提交不同的 `inheritEnv`。委派子代的 shell 照缺省清洗。 */
|
|
768
|
+
inheritEnv?: "all" | "scrub";
|
|
738
769
|
/** server ≥1.221 (core 1.314): DEFERRED DISCLOSURE list — the named MOUNTED tools (built-ins included)
|
|
739
770
|
* ride the wire as a placeholder (schema bytes out of the cache prefix) and materialize via ToolSearch
|
|
740
771
|
* on demand. The carrier for the shell's "Workflow on by default but not exposed" posture. Same
|
|
@@ -2133,7 +2164,12 @@ export interface TraceTurn {
|
|
|
2133
2164
|
* core 7.9.0 #625 持久规则三态起可达)。它是 `org` 的**个人店同胞**:与 `org` 同属「可以否掉一次人已经
|
|
2134
2165
|
* 给过的批准」的复查层(改过的命令会被重判),所以既不是 `policy` 也不是 `ask_resolution`;
|
|
2135
2166
|
* · `classifier` —— auto 模式分类器**直接**拒(它的 ASK 侧角色是 `origin: "denial_limit_fallback"`);
|
|
2136
|
-
* · `plan_mode` —— plan
|
|
2167
|
+
* · ⚰️ `plan_mode` —— **退役词**(server ≤7.105.0 / core ≤7.33.x):plan 模式对写工具的只读拦阻。core 7.34.0 design/1111 把模式裁决收成
|
|
2168
|
+
* 一只仲裁表,这一格并进 `mode`(server 7.106.0 起不再发出;`permission_denied_total{deniedBy}` 同换标签)。本包支持地板(3.0.0)之内的老
|
|
2169
|
+
* server 真会发它 ⇒ 留在闭集里(同 `fileHistoryCapture` 的 `on-always` 先例),登记 `test/_keyset-divergence.ts` `DENIED_BY_RETIRED_WORDS`,
|
|
2170
|
+
* 删除条件 = 支持地板抬过 7.106.0;
|
|
2171
|
+
* · `mode` —— **权限模式自己的拒**(server ≥7.106.0 / core 7.34.0):`dontAsk` 把一只无人在场可答的问变成拒、`bypassPermissions` 拒一次
|
|
2172
|
+
* 判不出保护目标的写(`write_protection_unresolved`)。同臂必带 `mode` / `askClass` / `classes`(core 不变量 I8,见 {@link GateDisposition});
|
|
2137
2173
|
* · `compliance` —— 合规的调用期锁;
|
|
2138
2174
|
* · `write_protection` —— 一次被批准的编辑被限制链改写到了**没有任何审批覆盖**的写保护路径上;
|
|
2139
2175
|
* · `ask_resolution` —— 这次 ask 的**结算本身**就是拒(有人说了不 / 窗到期 / 没人可问……),细节在
|
|
@@ -2168,10 +2204,50 @@ export interface TraceTurn {
|
|
|
2168
2204
|
* 在任何 JSON 体铸点上」,并带判别力自证(同一只扫描器必须扫得到真在 wire 上的词)。
|
|
2169
2205
|
* ⇒ 上游哪天把它抬上响应体,那一格当天变红,SDK 当批补声明。
|
|
2170
2206
|
*/
|
|
2171
|
-
export type DeniedBy = "policy" | "hook" | "org" | "persisted_rule" | "classifier"
|
|
2207
|
+
export type DeniedBy = "policy" | "hook" | "org" | "persisted_rule" | "classifier"
|
|
2208
|
+
/** ⚰️ 退役词(server ≤7.105.0):见上方注。 */
|
|
2209
|
+
| "plan_mode" | "compliance" | "write_protection" | "ask_resolution"
|
|
2172
2210
|
/** core 7.25.0(#945 读站)/ server ≥7.92.0:shell 读站拒的——拒表路径命中(D 路,审批之前)或已批改写重判到拒表行
|
|
2173
2211
|
* (V 路,与 `settlement.kind: "human_allowed"` 并排);可否决(`DENIED_BY_MAY_VETO`),不带 `cause`。 */
|
|
2174
|
-
| "read_boundary"
|
|
2212
|
+
| "read_boundary"
|
|
2213
|
+
/** server ≥7.106.0(core 7.34.0 design/1111):模式自己的拒 —— 同臂 `mode`(`dontAsk` / `bypassPermissions`)+ `askClass` + `classes`。 */
|
|
2214
|
+
| "mode";
|
|
2215
|
+
/**
|
|
2216
|
+
* 权限模式词(core 7.34.0 `PERMISSION_MODES`,六词;K-32 扩项 / server ≥7.106.0 起上 wire 的门记录位 {@link ModeRelease.mode} 用它)。
|
|
2217
|
+
* 🔴 **在门记录这一面是真闭集**:server `dist/trace/project.js` 的 `modeLedgerDefect` 按 core `isPermissionMode` 筛,出集 ⇒ 整条 `gate` 不上帧
|
|
2218
|
+
* (与 {@link DeniedBy} 同一条纪律)。⚠️ 请求面不是六词:{@link TaskRequest.permissionMode} 在 server 7.106.0 上只收**五词**(`dontAsk` fresh
|
|
2219
|
+
* 400 `request.field_invalid`,S-902 票 7.107.0)—— 它照样可能出现在门记录上(例:部署旋钮 `UNATTENDED_PERMISSION_MODE=dontAsk` 的无人值守腿)。
|
|
2220
|
+
*/
|
|
2221
|
+
export type PermissionMode = "default" | "acceptEdits" | "plan" | "auto" | "bypassPermissions" | "dontAsk";
|
|
2222
|
+
/**
|
|
2223
|
+
* 一只问**属于哪一类**(core 7.34.0 `ASK_CLASSES`,二十词;模式 × 类仲裁表的列)。K-32 扩项 / server ≥7.106.0 起出现在
|
|
2224
|
+
* {@link ModeRelease.askClass} / `.classes` 与 deny 臂的 `askClass` / `classes` 上,以及通告 `permission.ask_released_by_mode` 的 detail 里。
|
|
2225
|
+
* 🔴 **门记录这一面是真闭集**(server 按 core `isAskClass` 筛,出集整条不上帧)。`bypassPermissions` 只放行其中**可放**的九类
|
|
2226
|
+
* (core `RELEASABLE_ASK_CLASSES`:`transcript_write` / `rule_unreadable` / `probe` / `write_protection` / `tool_marks_mcp` / `tool_marks_a2a` /
|
|
2227
|
+
* `artifact_shared_read` / `mode` / `ordinary`);其余(`operator_forced` 部署出身、`ask_rule` / `org_rule`、`hook`、`ancestor`、`content_question`、
|
|
2228
|
+
* `unverifiable_delete`、`governance_unavailable`、`policy_rra` …)任何模式下都照问。
|
|
2229
|
+
*/
|
|
2230
|
+
export type AskClass = "content_question" | "hook" | "ancestor" | "unverifiable_delete" | "transcript_write" | "org_rule" | "governance_unavailable" | "rule_unreadable" | "ask_rule" | "denial_limit_fallback" | "operator_forced" | "write_protection_unresolved" | "probe" | "write_protection" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "mode" | "ordinary";
|
|
2231
|
+
/**
|
|
2232
|
+
* 一个权限**模式放行**了一只本该问人的 ask 的记录(K-32 扩项;server ≥7.106.0 / core 7.34.0 `ModeRelease`,键集逐键同 core
|
|
2233
|
+
* `dist/core/gate-outcome.d.ts`)—— 只挂在 `allowed` 臂上({@link GateDisposition}):这一次**没有问任何人**,是模式放的。
|
|
2234
|
+
* core 不变量 I7:`released` 在场 ⇒ `kind:"allowed"`、无 settlement、`mode` 是 `bypassPermissions`、`askClass` 是可放类。
|
|
2235
|
+
* 每 (模式, 类) 每 run 另有一帧 `engine_notice` `permission.ask_released_by_mode`(首次)。server 修前(≤7.105.0)这四位被逐键重建面静默剥掉。
|
|
2236
|
+
*/
|
|
2237
|
+
export interface ModeRelease {
|
|
2238
|
+
/** 放行它的模式(门记录面上今天恒 `bypassPermissions`)。 */
|
|
2239
|
+
mode: PermissionMode;
|
|
2240
|
+
/** 披露的类词 = 折叠集合按 core `ASK_CLASSES` 序的**第一位**(可放类之一)。 */
|
|
2241
|
+
askClass: AskClass;
|
|
2242
|
+
/** 这只 ask 折叠出的**整个**类集合。 */
|
|
2243
|
+
classes: AskClass[];
|
|
2244
|
+
/** 卡上本会显示的 origin(与 {@link GateOutcome.origin} 同一张表;本面 server 按 core 闭集筛)。 */
|
|
2245
|
+
origin?: AskOrigin;
|
|
2246
|
+
/** 卡上本会显示的强制词(六词闭集,见 {@link PersistedRuleMandate})。 */
|
|
2247
|
+
mandate?: PersistedRuleMandate;
|
|
2248
|
+
/** 🔴 `"rule_unreadable"` = 放行越过了一条**这次调用读不出**的规则(规则店读不出 —— 安全轴 fail-open 方向,server 单列披露)。单词闭集。 */
|
|
2249
|
+
reason?: "rule_unreadable";
|
|
2250
|
+
}
|
|
2175
2251
|
/**
|
|
2176
2252
|
* 这一次分类的**模型归属**(core 7.18.0 #742 `AutoModeClassifierRound`,server ≥7.78.0)——「这次 auto 模式
|
|
2177
2253
|
* 的门判是**问了谁**、**谁答的**,梯子有没有挪过」。
|
|
@@ -2217,6 +2293,9 @@ export type GateDisposition = {
|
|
|
2217
2293
|
/** server ≥7.78.0(core 7.18.0 #742):这次分类的模型归属。语义、缺席读法与不变量**全部**写在
|
|
2218
2294
|
* {@link GateClassifierAttribution} 顶注(单源,两臂不各写一份会漂的散文)。 */
|
|
2219
2295
|
classifier?: GateClassifierAttribution;
|
|
2296
|
+
/** K-32 扩项(server ≥7.106.0 / core 7.34.0 design/1111):`bypassPermissions` **放行**了一只没人答的 ask —— 见 {@link ModeRelease}。
|
|
2297
|
+
* 缺席 = 这次放行不是模式放的(普通 allow / 人批的 / 规则放的),或老 server(≤7.105.0 剥掉了它)。 */
|
|
2298
|
+
released?: ModeRelease;
|
|
2220
2299
|
} | {
|
|
2221
2300
|
kind: "denied";
|
|
2222
2301
|
deniedBy: DeniedBy;
|
|
@@ -2232,6 +2311,13 @@ export type GateDisposition = {
|
|
|
2232
2311
|
* ⚠️ 与同臂的 {@link cause} 是**两件事**:`cause` 说「这次 deny 是什么形」,本键说「是哪只模型判的」;
|
|
2233
2312
|
* 一条继承来的链带得出 `cause` 却**没有**归属座,所以两者可以一个在场一个缺席。 */
|
|
2234
2313
|
classifier?: GateClassifierAttribution;
|
|
2314
|
+
/** K-32 扩项(server ≥7.106.0 / core 7.34.0 `ModeRefusal`):**present-iff `deniedBy === "mode"`**(core 不变量 I8)—— 拒它的模式,两词:
|
|
2315
|
+
* `dontAsk`(把一只无人可答的问变成拒)/ `bypassPermissions`(拒一次判不出保护目标的写)。`plan` 在这里什么都不拒(它的问照问)。 */
|
|
2316
|
+
mode?: "bypassPermissions" | "dontAsk";
|
|
2317
|
+
/** 与 `mode` 同在:被拒那只 ask 的披露类词(见 {@link AskClass})。 */
|
|
2318
|
+
askClass?: AskClass;
|
|
2319
|
+
/** 与 `mode` 同在:折叠出的整个类集合。 */
|
|
2320
|
+
classes?: AskClass[];
|
|
2235
2321
|
};
|
|
2236
2322
|
/**
|
|
2237
2323
|
* 一只 ask 在等的那次等待**怎么结束的** —— 按 `kind` 判别的联合(core 7.6.0 `SETTLEMENT_KINDS`,闭十二词)。
|
|
@@ -3124,6 +3210,10 @@ export interface Capabilities {
|
|
|
3124
3210
|
resume?: "snapshot" | (string & {});
|
|
3125
3211
|
bgNotifyFailClosed?: boolean;
|
|
3126
3212
|
steerPriority?: "advisory" | (string & {});
|
|
3213
|
+
/** server ≥7.48.0(#281;K-32 扩项补声明 —— server 7.106.0 的复合位成员闭集 `COMPOSITE_CAPABILITY_MEMBERS` 登记了它,本包此前漏了):
|
|
3214
|
+
* 本二进制会在 `hook_notice` 帧上发**第二个** kind `hook_non_blocking_failure`(用户自配的 hook 自己坏了:exit ≠ 0 ∧ ≠ 2 / 超时 /
|
|
3215
|
+
* 起不来 / 坏 JSON)。缺席 = 老 worker 只发得出 `hook_decision_unavailable` 一个 kind ⇒ 渲染面按 `kind` 分派、未知 kind 别崩。 */
|
|
3216
|
+
hookFailureNotice?: boolean;
|
|
3127
3217
|
[k: string]: unknown;
|
|
3128
3218
|
};
|
|
3129
3219
|
/** #3([1894];server 1.299–7.51)workspace 浏览面能力族——对象=面在场(E19 快照店读面+durable 会话店
|
|
@@ -3256,7 +3346,12 @@ export interface Capabilities {
|
|
|
3256
3346
|
* 所以「says yes ⟺ 翻译真在」是结构性的,没有任何 deps 缺席能让它变假。
|
|
3257
3347
|
* 🔴 **判据必须是「所连 server 广告本位」,绝不是壳自身版本**:壳据它撤掉对 `MANUAL_MODE_SHELL_GATE`
|
|
3258
3348
|
* 的无条件 env 注入,而按壳版本判会在三种真部署下开天窗(新壳连老 server / 副本回滚到旧二进制 / 混版
|
|
3259
|
-
* fleet)—— 那正是「翻译还没到货但壳已经撤注」的放宽窗。缺席/false ⇒ 继续注。
|
|
3349
|
+
* fleet)—— 那正是「翻译还没到货但壳已经撤注」的放宽窗。缺席/false ⇒ 继续注。
|
|
3350
|
+
* 🔴 **K-32 扩项 —— server ≥7.106.0(S-877 / core 7.34.0 design/1111)起兑现者换成引擎**:上面那张「模式 → `spec.shellGate` / `writeFace` 档」
|
|
3351
|
+
* 翻译表**整表退役**(`classify` 这一档本身也没了,`MANUAL_MODE_SHELL_GATE=classify` 拒启、只收 `always` / `off`);生效 `permissionMode` 原样过境
|
|
3352
|
+
* 给引擎,形状档由引擎在**每一种**模式下自装并按模式裁决(`bypassPermissions` 放行并在 `tool_end.gate.disposition.released` 披露)。
|
|
3353
|
+
* 本位的**问题**不变 ——「这份二进制里模式管得住 shell 门」—— 值恒 `true`、键不改名(删它会让读「缺席 = 老 server」的壳重新注 env);
|
|
3354
|
+
* 键名里的 "Translation" 是历史词。server 已排 7.107.0 删这一位(S-899)。 */
|
|
3260
3355
|
modeShellGateTranslation?: boolean;
|
|
3261
3356
|
/** design/73 §7.2(server ≥7.12.0):`GET /v1/outcomes` 机械信号只读聚合面可用。server 谓词逐项对着该
|
|
3262
3357
|
* 路由的拒绝臂:①可查询的账面在场(`outcomeSink.summary` —— File sink 只写 JSONL、没有查询面 ⇒ 501);
|
|
@@ -3361,7 +3456,9 @@ export interface Capabilities {
|
|
|
3361
3456
|
retainBackgroundProcesses?: boolean;
|
|
3362
3457
|
/** TaskRequest.interactiveTools 认词(`routes/capabilities.ts` 的能力对象 硬编码 true;-p 无人值守语义探测位 —— 见 TaskRequest 注)。 */
|
|
3363
3458
|
interactiveTools?: boolean;
|
|
3364
|
-
/** TaskRequest.cwd honored(`routes/capabilities.ts` 的能力对象 `cwdHonored`:local 单用户 host-adapter 才 true;多租户 fail-closed)。
|
|
3459
|
+
/** TaskRequest.cwd honored(`routes/capabilities.ts` 的能力对象 `cwdHonored`:local 单用户 host-adapter 才 true;多租户 fail-closed)。
|
|
3460
|
+
* 🔴 K-32 扩项(server ≥7.106.0 / S-895):本位也是请求键 {@link TaskRequest.inheritEnv} `"all"` 的**精确兑现读数** —— 谓词(host 车道 ∧
|
|
3461
|
+
* 非托管)与那个键的车道门 + 射程门逐组合相等(契约附录 B.1 该行 / §18)。`false` ⇒ 发 `"all"` 会拿 400(非 host 车道)或 422(托管)。 */
|
|
3365
3462
|
projectContext?: boolean;
|
|
3366
3463
|
/** TaskRequest.mcpServers honored(`routes/capabilities.ts` 的能力对象 `mcpInjectionHonored`:单用户才 true,多租户 ignore)。 */
|
|
3367
3464
|
mcpInjection?: boolean;
|
|
@@ -3529,20 +3626,23 @@ export interface Capabilities {
|
|
|
3529
3626
|
vectorMode: "native" | "portable" | "lexical" | null;
|
|
3530
3627
|
[k: string]: unknown;
|
|
3531
3628
|
};
|
|
3532
|
-
/**
|
|
3533
|
-
* `
|
|
3534
|
-
*
|
|
3535
|
-
*
|
|
3536
|
-
*
|
|
3537
|
-
* 🔴 `
|
|
3538
|
-
*
|
|
3539
|
-
*
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3629
|
+
/** **「这台副本真的在持久化吗」**(K-32 扩项;server ≥7.106.0 / S-866 ①;铸点发布字节 `dist/http/routes/capabilities.js` 应答字面量
|
|
3630
|
+
* `store: projectStoreCapability(deps.storePosture ?? …, deps.sqlEngineFacts?.())`,段形属主 `dist/store-posture.d.ts` 的 `StoreCapability`)——
|
|
3631
|
+
* 运维**声明**的后端、**装配出**的后端、降级成因与 SQL 读语义收进一位。段形与读法见 {@link StoreCapability}。
|
|
3632
|
+
* 🔴 **恒在场**(≥7.106.0 每个应答都有它,不是 present-iff);**缺席 = 老 server(< 7.106.0)** —— 那一代只有顶层 `sql`
|
|
3633
|
+
* (`null` 四义不分:没配 SQL / local 文件店 / 降级到内存 / 连接初始化被拒)与 `/health.storeDegraded`,读不出「以为在持久化、其实在内存」。
|
|
3634
|
+
* 🔴 **顶层 `sql` 自 7.106.0 删除,不留旧键**(wire-changes R1,零别名):本包同批删了 `Capabilities.sql`(BREAKING 型面),
|
|
3635
|
+
* 读它的消费端改读 `caps.store?.sql`(对象逐字同形)。对着 ≤7.105.0 的 server,旧顶层 `sql` 仍会到达,经索引签名读到 `unknown`
|
|
3636
|
+
* —— 本包不为它留第二个具名读位(双读 = 两个写者一个语义面)。 */
|
|
3637
|
+
store?: StoreCapability;
|
|
3638
|
+
/** **「这台引擎此刻接没接着中心、你的额度执不执行」**(K-32 扩项;server ≥7.106.0 / S-866 ②;铸点发布字节
|
|
3639
|
+
* `dist/http/routes/capabilities.js` 应答字面量 `centerWiring: deps.centerWiring?.(gatedPrincipal(req, deps.config))`,段形属主
|
|
3640
|
+
* `dist/capabilities/center-wiring.d.ts` 的 `CenterWiring`,投影 `buildCenterWiring`)。段形与读法见 {@link CenterWiringCapability}。
|
|
3641
|
+
* 🔴 **present-iff 接了中心**(`SEMA_REGISTRY_URL` → `config.configCenter` 在场;与 {@link sealedKey} 同为契约附录 B.1 逐键登记的
|
|
3642
|
+
* present-iff 例外):缺席是**键不在**,不是 `null`,两种含义 —— 老 server(< 7.106.0)/ 这台引擎没接中心(纯 env / `CONFIG_PROVIDER=local`),
|
|
3643
|
+
* 同一体的 `version` 能分;两种下都读作「本面答不了中心接线与额度执行」,**不许**读作「额度在执行」。
|
|
3644
|
+
* 🔴 **按调用方**(`caller` 是本次请求已验 principal 的租约读数):**不许跨身份缓存**本位。读 caps **不** admit、不打中心。 */
|
|
3645
|
+
centerWiring?: CenterWiringCapability;
|
|
3546
3646
|
/** **远端车道可 detach**(server `routes/capabilities.ts:233` = `Boolean(deps.runStore)`)—— 零新机制,
|
|
3547
3647
|
* 说的就是既有的那条腿:`POST /v1/tasks/stream` 带请求头 `x-detach-on-disconnect: true` ⇒ 客户端断连
|
|
3548
3648
|
* **不杀** run,它在 server 跑完;回来按响应头 `X-Task-Id` 走 `GET /v1/runs/:id` 与 `/events`
|
|
@@ -3608,7 +3708,10 @@ export interface Capabilities {
|
|
|
3608
3708
|
* · `entitlementSource` —— **center 源在不在**,绝不冒充「你被授权了」(授权是 per-principal 的,
|
|
3609
3709
|
* 部署级布尔对它说不了话);自 S-80 起它是**三态里的一格**,`false` 不再意味着 auto 不武装;
|
|
3610
3710
|
* · `intentArming` —— 这对 server+core 走的是哪套极性:`true` = core #521 的**意图武装式**
|
|
3611
|
-
* (用户开 + org 拒),`false` = 旧式「org 授予」。壳据此渲「无 center 也能 auto
|
|
3711
|
+
* (用户开 + org 拒),`false` = 旧式「org 授予」。壳据此渲「无 center 也能 auto」与否。
|
|
3712
|
+
* K-32 扩项(wire-changes C1):**server ≥7.106.0 起恒 `true`**(core 7.34.0 design/1111 只剩一种极性:`permissionMode === "auto"` ∧ 席位 ∧
|
|
3713
|
+
* `caps.autoMode !== false`;答它的安装包探针随 7.106.0 退役)—— 键名与值形不动,读「`false` = 旧式」的壳零改动;`false` 只会来自 ≤7.105.0。
|
|
3714
|
+
* server 已排 7.107.0 删这一位(S-899,整键删 = 下一次 breaking);
|
|
3612
3715
|
* · `armed` —— **此刻会不会武装**(按当前运行时真值答;旧式 core 下按旧谓词答,不得假阴);
|
|
3613
3716
|
* · `reason` —— **仅** `armed:false` 时在场,server 闭六词集(`AUTO_MODE_UNARMED_REASONS`)。
|
|
3614
3717
|
* `local_denied` = 本机 `PERMISSIONS_DISABLE_AUTO_MODE`,`org_denied` = center deny ——
|
|
@@ -3723,26 +3826,38 @@ export interface Capabilities {
|
|
|
3723
3826
|
* 声明过 MCP(未声明 ⇒ **200** `outcome:"unsupported"`,不是错误)。
|
|
3724
3827
|
* ⚠️ 缺席 = 老 worker ⇒ 按 404/405 探,**别渲假入口**。消费面见 {@link import("./resources/sessions.js").SessionsResource.mcpReconnect}。 */
|
|
3725
3828
|
mcpReconnect?: boolean;
|
|
3726
|
-
/** 本部署的**执行车道自述**(server ≥7.86.0 / S-426
|
|
3727
|
-
* `
|
|
3829
|
+
/** 本部署的**执行车道自述**(server ≥7.86.0 / S-426;铸点 = `projectExecutionLaneCapability(deps.config)`,属主发布字节
|
|
3830
|
+
* `dist/capabilities/execution-lane.js`(7.106.0))——
|
|
3728
3831
|
* 「这台引擎的工具跑不跑在**本机**」第一次由引擎自己回答,消费端不必再用「本壳 spawn ∧ 无远端 URL ∧
|
|
3729
3832
|
* `REMOTE_EXEC`∈{空,host}」这条会漂的旁证三合取(连远端引擎时壳读的 `REMOTE_EXEC` 说的是自己那台的事)。
|
|
3730
|
-
* · `provider` ——
|
|
3731
|
-
*
|
|
3732
|
-
*
|
|
3733
|
-
* (
|
|
3734
|
-
*
|
|
3833
|
+
* · `provider` —— 车道词,**八词**闭集(server `ExecutionLane` = `"in-process"` ∪ `RemoteExecProvider`,词表属主
|
|
3834
|
+
* `dist/execution-lane-caps.js` 的 `EXECUTION_LANE_WORDS`;测试对它做发布字节对拍)。🔴 **缺省词(S-602,server ≥7.97.0,
|
|
3835
|
+
* BREAKING 值形)**:`REMOTE_EXEC` 未设 ⇒ **`"in-process"`** = 本部署**没有执行车道(无手)**—— core 落 `StubExecutionEnv`,手带整族不挂,
|
|
3836
|
+
* `toolsOnThisHost:false`(7.86.0–7.96.x 这一形折报 `"host"` / `true`,把无手部署说成「工具在本机」)。**例外形**:单机缺省
|
|
3837
|
+
* `CONFIG_PROVIDER=local`(`sema` turnkey)且 `REMOTE_EXEC` 未设 ⇒ config 的隐式尾臂铸 **`"host"`**(`dist/config.js` 的
|
|
3838
|
+
* `ctx.configProvider === "local" ? { provider: "host", singleMachineDefault: true } : undefined`)—— 手就在本机、**没有 OS 沙箱**。
|
|
3839
|
+
* `in-process ⇒ 无手` 恒成立,**反向不成立**(`excludeTools` / `excludeAllTools` 真卸载、场景 `hands:"none"` 都能在 `host` 上摘手 ——
|
|
3840
|
+
* 「这一 run 有没有手」读 `wiring_manifest` 的 `tools.entries[].mountedBy === "hands"` 条目数,不读本位)。
|
|
3841
|
+
* ⚠️ 按开集字符串读会让 `in-process` **静默**落进默认分支 —— 按八词穷举,词表外的词按未知处理。
|
|
3735
3842
|
* · `toolsOnThisHost` —— 工具跑的那台机器是不是本进程这台(= server 盘上的绝对路径对模型的工具有没有意义),
|
|
3736
3843
|
* 属主 = `task-cwd.ts` 的 `toolsRunOnThisHost`,与 `skills[].baseDir` 的铸点**同一只函数**。
|
|
3737
3844
|
* 🔴 **蕴含是单向的,别写成等价**(server 侧对抗复审逮到过的那句):`toolsOnThisHost === false` ⇒
|
|
3738
3845
|
* `skills[].baseDir` 恒不发(这一向是承诺);反向**不成立** —— `true` 只是必要条件(扁平形技能
|
|
3739
3846
|
* `skills/<name>.md` 结构上没有自己的目录;插件来源技能走的加载器根本不传那个开关)⇒ `true` 时
|
|
3740
3847
|
* `baseDir` 按 **present-iff** 读,缺席是合法态。
|
|
3848
|
+
* · `isolated` —— 见该成员注(server ≥7.106.0 / S-281)。
|
|
3741
3849
|
* 🔴 **只出词,不出内情**:k8s apiUrl / ssh host / adb serial / 镜像 / 凭据 / `mountPath` 一个字都不上这条 wire。
|
|
3742
3850
|
* ⚠️ 缺席(老 server)**不许读作任一侧** —— 那正是本位来之前消费端只能猜的那个状态。 */
|
|
3743
3851
|
executionLane?: {
|
|
3744
|
-
provider: "host" | "e2b" | "k8s" | "ssh" | "adb" | "local-docker" | "device" | (string & {});
|
|
3852
|
+
provider: "in-process" | "host" | "e2b" | "k8s" | "ssh" | "adb" | "local-docker" | "device" | (string & {});
|
|
3745
3853
|
toolsOnThisHost: boolean;
|
|
3854
|
+
/** **手在不在 OS 级隔离边界里**(K-32 扩项;server ≥7.106.0 / S-281;铸点 `dist/capabilities/execution-lane.js`
|
|
3855
|
+
* `...(handsWired ? { isolated: laneIsolated(lane) } : {})`,值 = 车道能力表的 `isolation` 位经**唯一**布尔口 `laneIsolated`;
|
|
3856
|
+
* `GET /v1/diagnostics/wiring` 的 `executionLane` 段同源同值)。`false` = 手跑在真机上、**没有沙箱**(壳据此说一句
|
|
3857
|
+
* 「no sandbox」,判据 `isolated === false ∧ toolsOnThisHost`);`true` = 隔离车道(e2b / k8s / local-docker …)。
|
|
3858
|
+
* 🔴 **present-iff 本车道有手**(车道能力表 `coreRemoteExecutionEnv === "supported"`):`provider:"in-process"`(无手)⇒ **键缺席**,
|
|
3859
|
+
* 不是 `false`。缺席另一义 = 老 server(< 7.106.0)。两种缺席都按 **unknown** 读,**别读成 `false`**(那会把沙箱部署说成裸机)。 */
|
|
3860
|
+
isolated?: boolean;
|
|
3746
3861
|
[k: string]: unknown;
|
|
3747
3862
|
};
|
|
3748
3863
|
/** 本部署的 **审批推送面带不带 live 事件族**(server ≥7.87.1 / S-455,S-454 的消费半场;
|
|
@@ -3766,15 +3881,11 @@ export interface Capabilities {
|
|
|
3766
3881
|
* ② 部署 `AUTONOMY=read-only|plan` ⇒ 请求照常受理,但写面被钳回 roots —— 声明落空。三态压成一位是刻意的
|
|
3767
3882
|
* (调用方要做的决定只有一个:还发不发那个键);档位与证据在拒因与 operator 的 `GET /v1/diagnostics/wiring`。
|
|
3768
3883
|
* ⚠️ 它**只**说写容纳面这一格 —— `bypassPermissions` 其余两列不受本位影响。
|
|
3884
|
+
* 🔴 K-32 扩项(server ≥7.106.0 / S-895):它**不是** {@link TaskRequest.inheritEnv} `"all"` 的读数 —— 两者共用托管门那一只射程谓词,但本位
|
|
3885
|
+
* 另合了 `TASK_WRITE_FACE_ESCALATION` 与 `AUTONOMY` 两半(「托管 + 旋钮 allow」本位 true 而 `"all"` 仍 422;「单用户 + `AUTONOMY=read-only`」
|
|
3886
|
+
* 本位 false 而 `"all"` 照兑现)。那个键读 {@link projectContext}。
|
|
3769
3887
|
* ⚠️ 缺席 = 老 worker(≤7.94)⇒ 按 `true` 兜底(契约附录 B.1:那时任何部署都不拦这条声明)。 */
|
|
3770
3888
|
taskWriteFaceOpen?: boolean;
|
|
3771
|
-
/** **`approverPosture` 的披露位**(server ≥7.95.0 / S-591 腿③;铸点 `routes/capabilities.ts:659` =
|
|
3772
|
-
* `taskApproverPostureHonored(deps.config)`,与真消费点同一只谓词)—— 这台部署兑现提交体那句宿主姿态声明
|
|
3773
|
-
* (「这个 run 的审批卡由宿主自己自动答」)吗?`false` ⇒ 该键被**忽略**(请求照常 202,服务端留一条
|
|
3774
|
-
* `task_approver_posture_ignored`)—— 刻意**不拒**(续跑腿逐字重放盘上的体,拒会把 parked 任务永久砖死)。
|
|
3775
|
-
* 射程与 {@link taskWriteFaceOpen} 的托管门那一半同一只谓词(托管形 ⇒ 两位同 `false`);`AUTONOMY` 只动那一位、不动本位。
|
|
3776
|
-
* ⚠️ 缺席 = 老 worker(≤7.94)⇒ 按 `true` 兜底(契约附录 B.1:那时它原样过境)。 */
|
|
3777
|
-
taskApproverPosture?: boolean;
|
|
3778
3889
|
/** **文件历史捕获开没开、能不能按 run 关掉**(server ≥7.97.0 / S-589 立位;**7.104.0 / S-724 换词**;铸点 int-7104
|
|
3779
3890
|
* `routes/capabilities.ts:846` = `fileHistoryCaptureOf(deps.fileHistoryStore, deps.config.fileHistoryCapture)`,闭集属主 server
|
|
3780
3891
|
* `src/file-history-capture.ts` 的 `FILE_HISTORY_CAPTURE_WORD_SET` —— 测试对它做源码腿 / dist 腿的词表对拍)。从**装配结果**派生
|
|
@@ -3821,6 +3932,85 @@ export interface Capabilities {
|
|
|
3821
3932
|
};
|
|
3822
3933
|
[k: string]: unknown;
|
|
3823
3934
|
}
|
|
3935
|
+
/**
|
|
3936
|
+
* caps `store` 的段形(K-32 扩项;server ≥7.106.0 / S-866 ①)—— 与 server 发布字节 `dist/store-posture.d.ts` 的 `StoreCapability`
|
|
3937
|
+
* **键集逐键相同**(测试对拍;源码 / dist 两腿)。三面同源:`degradedReason` 在场 ⇔ `/health.storeDegraded:true` + 本段 `durable:false`
|
|
3938
|
+
* ⇔ gauge `store_backend_degraded` = 1(server `boot/stores.ts` 铸一次的同一只装配值)。
|
|
3939
|
+
* ⚠️ 本段是**部署自述**,不改任何端点行为。
|
|
3940
|
+
*/
|
|
3941
|
+
export interface StoreCapability {
|
|
3942
|
+
/** 运维**声明**的后端 = `DB_BACKEND` 词(含缺省推导)。词表属主 = server `DB_BACKEND_WORDS`(config 枚举 / 目录 / caps 同读一只常量)。 */
|
|
3943
|
+
declared: StoreBackendWord;
|
|
3944
|
+
/** **装配出的**后端(同一词表;没装出后端 = `"memory"`)。`declared ≠ backend` 是合法形,由调用方自己读出落差:
|
|
3945
|
+
* `DB_BACKEND=pg` + `SESSION_BACKEND=memory`(声明 pg、刻意不持久,**无** `degradedReason`)/ `auto` 降级(`degradedReason:"db_unreachable"`)/
|
|
3946
|
+
* 缺省推导 local 起不来(`declared:"local"`、`backend:"memory"`、`"local_unwritable"`)。 */
|
|
3947
|
+
backend: StoreBackendWord;
|
|
3948
|
+
/** `backend !== "memory"`。壳据此渲「pg (durable)」/「pg declared, running in memory: db_unreachable」。 */
|
|
3949
|
+
durable: boolean;
|
|
3950
|
+
/** 🔴 **present-iff 降级臂走过**(按后端族定词,不按失败发生在哪一步):`"db_unreachable"` = SQL 族(`mysql` / `pg`)在
|
|
3951
|
+
* `SESSION_BACKEND=auto` 下打不开(连接或建表,不分);`"local_unwritable"` = **缺省推导**的 local 文件店建不出来(mkdir / 锁 /
|
|
3952
|
+
* 权限 / 只读挂载 / 磁盘满)。词表属主 = server `STORE_DEGRADED_REASONS`;词表外的词按未知读。缺席 = 没降级(不是「不知道」)。 */
|
|
3953
|
+
degradedReason?: StoreDegradedReason;
|
|
3954
|
+
/** 🔴 **7.105.0 及以前的顶层 `sql` 对象原样搬入**(对象逐字同形,见 {@link SqlEngineCapability})。**present-iff** `backend` 是
|
|
3955
|
+
* `mysql` / `pg` **且**驱动此刻给得出回读复核过的事实 —— 最近一次连接初始化被拒(S-137 ④)时缺席(此前的顶层 `sql:null` 那一义);
|
|
3956
|
+
* `local` / `memory` 后端上恒缺席。缺席**不许**推断「未装 SQL 后端」(读 `backend`)。 */
|
|
3957
|
+
sql?: SqlEngineCapability;
|
|
3958
|
+
}
|
|
3959
|
+
/** `DB_BACKEND` 词表(server `DB_BACKEND_WORDS`;`store.declared` / `store.backend` 同读)。开集尾:新词到货不形变,按未知读。 */
|
|
3960
|
+
export type StoreBackendWord = "mysql" | "pg" | "local" | "memory" | (string & {});
|
|
3961
|
+
/** `store.degradedReason` 词表(server `STORE_DEGRADED_REASONS`,闭集两词按后端族)。开集尾:词表外的词按未知读。 */
|
|
3962
|
+
export type StoreDegradedReason = "db_unreachable" | "local_unwritable" | (string & {});
|
|
3963
|
+
/**
|
|
3964
|
+
* 本部署的 **SQL 事务读语义**(S-131;7.105.0 及以前在 `Capabilities.sql`,**7.106.0 起在 {@link StoreCapability.sql}**)—— 与 server
|
|
3965
|
+
* 发布字节 `dist/sql-engine-posture.d.ts` 的 `SqlEngineCapability` 键集逐键相同。值取自驱动在**每条池连接**初始化时 `SET` 完之后的
|
|
3966
|
+
* **回读复核**(`plugins/sql-driver` 的 `SqlEngineFacts`),不是配置里写了什么;与 operator 面 `GET /v1/diagnostics/wiring` 的 `sqlEngine`
|
|
3967
|
+
* 段同源(那一段另有 `version`,刻意不进本段)。受众是运维与部署自述:多副本部署不登服务器就能答出「连接跑在什么读语义上」。
|
|
3968
|
+
*/
|
|
3969
|
+
export interface SqlEngineCapability {
|
|
3970
|
+
/** 引擎词(server `SqlEngine`:`tidb` / `innodb` / `pg`)。开集尾:词表外按未知读。 */
|
|
3971
|
+
engine: "tidb" | "innodb" | "pg" | (string & {});
|
|
3972
|
+
/** 会话事务隔离级(回读值,逐字;MySQL 协议腿恒 `REPEATABLE-READ`)。 */
|
|
3973
|
+
isolation: string;
|
|
3974
|
+
/** TiDB 的 `tidb_txn_mode`;🔴 `null` = 这个引擎**没有该指示面**(InnoDB / PG),**不是** `"optimistic"`。 */
|
|
3975
|
+
txnMode: "pessimistic" | null;
|
|
3976
|
+
}
|
|
3977
|
+
/**
|
|
3978
|
+
* caps `centerWiring` 的段形(K-32 扩项;server ≥7.106.0 / S-866 ②)—— 与 server 发布字节 `dist/capabilities/center-wiring.d.ts` 的
|
|
3979
|
+
* `CenterWiring` 键集逐键相同(测试对拍)。投影 = `buildCenterWiring`:`lease:"absent"` ⇒ `leaseHealth` / `failMode` / `caller` **三键缺席**;
|
|
3980
|
+
* `lease:"configured"` ⇒ 三键在场。
|
|
3981
|
+
*/
|
|
3982
|
+
export interface CenterWiringCapability {
|
|
3983
|
+
/** 本进程最近一次**实拉**中心成功(server 状态 `lastPull === "ok"`)。LKG 起服 / 从未成功 / 最近一拍刷新失败 = `false`。 */
|
|
3984
|
+
effectivePull: boolean;
|
|
3985
|
+
/** `{version, updatedAt} | null`:`version` 与 `/health.configAppliedVersion` 同一只 ledger 视图(同一事实的第三个面);`updatedAt` 取
|
|
3986
|
+
* 最近一份**整套落地**的候选 —— 两者不同代 ⇒ `null`。 */
|
|
3987
|
+
effectiveRevision: {
|
|
3988
|
+
version: number;
|
|
3989
|
+
updatedAt: string;
|
|
3990
|
+
} | null;
|
|
3991
|
+
/** `"configured"` = 中心三件(URL + 凭证 + `SEMA_REGISTRY_WORKER`)齐、装了租约管理器;`"absent"` = 没装(下面三键缺席)。 */
|
|
3992
|
+
lease: "configured" | "absent" | (string & {});
|
|
3993
|
+
/** **present-iff `lease:"configured"`** —— 最近一次租约谈判的收尾:`ok`(中心合法答复,含 409 not-lease / 耗尽)/ `auth-rejected`
|
|
3994
|
+
* (中心 401 / 403 / 400,或凭证读不出)/ `unreachable`(不可达 / 5xx / 超时 / 坏体 / 其余状态码,含中心 404 / 429 / 3xx)/
|
|
3995
|
+
* `unobserved`(本进程还没谈判过)。词表属主 server `LEASE_HEALTH_WORDS`。 */
|
|
3996
|
+
leaseHealth?: "ok" | "auth-rejected" | "unreachable" | "unobserved" | (string & {});
|
|
3997
|
+
/** **present-iff `lease:"configured"`** —— `FLEET_LEASE_FAIL_CLOSED` 生效值(缺席随 `REQUIRE_PRINCIPAL` 派生:多租 `closed`、单用户 `open`)。
|
|
3998
|
+
* `closed` ⇒ 连接级失败时计费入口答 503 `fleet.lease_unavailable`(可重试,见 {@link import("./errors.js").ServiceStateError});
|
|
3999
|
+
* `open` ⇒ 照旧放行(warn + 计数)。词表属主 server `LEASE_FAIL_MODES`。 */
|
|
4000
|
+
failMode?: "open" | "closed" | (string & {});
|
|
4001
|
+
/** 用量上报环装了(中心三件齐即装,**不看** `FLEET_ADVERTISE_ADDRESS`,S-866 ④)。 */
|
|
4002
|
+
usageReport: boolean;
|
|
4003
|
+
/** 鉴权桥 issuer:`explicit`(`AUTH_BRIDGE_ISSUER` 显式)/ `fallback`(回退 `SEMA_REGISTRY_URL`)。词表属主 server `CENTER_ISSUER_WORDS`。 */
|
|
4004
|
+
issuer: "explicit" | "fallback" | (string & {});
|
|
4005
|
+
/** **present-iff `lease:"configured"`** —— **本次请求的已验 principal**(与租约门同键)此刻的租约读数(🔴 不许跨身份缓存):
|
|
4006
|
+
* `enforced`(未到期且有余)· `not-enforced`(中心说「不走租约」且负缓存未过期 ⇒ 壳可渲 unlimited)· `exhausted`(中心判耗尽且窗未过,
|
|
4007
|
+
* 带 `retryAfterSec`,正整数,**只随这一词**)· `unobserved`(无条目 / 过期 / 耗尽而未续成 / 被逐出 / 无 principal —— server 裁 F-1:
|
|
4008
|
+
* 此刻额度没人在判,**不是**「上一态」)。词表属主 server `CALLER_LEASE_WORDS`。 */
|
|
4009
|
+
caller?: {
|
|
4010
|
+
lease: "enforced" | "not-enforced" | "exhausted" | "unobserved" | (string & {});
|
|
4011
|
+
retryAfterSec?: number;
|
|
4012
|
+
};
|
|
4013
|
+
}
|
|
3824
4014
|
/** 写保护名表的**租户面**窄投影(`GET /v1/capabilities.writeProtection`)。**不含行内容**。 */
|
|
3825
4015
|
export interface WriteProtectionCapability {
|
|
3826
4016
|
/** 生效表非空 ⇒ 引擎真会对表行弹卡。 */
|
|
@@ -4966,7 +5156,9 @@ export interface InboxRow {
|
|
|
4966
5156
|
classifierUnavailable?: ClassifierUnavailable;
|
|
4967
5157
|
/** server ≥7.72.0(core 7.14.0 #688 C3,additive)—— **规则车道读不通的是哪一半**:在场 ⇔ `origin ===
|
|
4968
5158
|
* "rule_store_unavailable"`;`store` = 规则店读不了(运维:店与网络),`call` = 店读到了但这条命令按人的
|
|
4969
|
-
* deny/ask 行读不出来(提示词:命令写法)。形与硬读法逐字见 {@link ToolApprovalFrame.ruleStoreUnreadable}。
|
|
5159
|
+
* deny/ask 行读不出来(提示词:命令写法)。形与硬读法逐字见 {@link ToolApprovalFrame.ruleStoreUnreadable}。
|
|
5160
|
+
* ⚰️ **退役(server 7.106.0 / core 7.34.0 C-R172)**:与帧上同名位同批退场 —— 继任 = 会话流 `engine_notice` `permission.rule_store_unavailable`;
|
|
5161
|
+
* 保留声明只为读 [7.72.0, 7.106.0) 的旧 server。 */
|
|
4970
5162
|
ruleStoreUnreadable?: "store" | "call";
|
|
4971
5163
|
/** 任务目标(从 task ctx 富化;契约明确 "`null` if unavailable" —— 真回 null 的字段,非 OMIT)。 */
|
|
4972
5164
|
objective: string | null;
|