@sema-agent/sdk 22.0.3 → 23.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 +76 -1
- package/dist/errors.d.ts +40 -23
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +38 -21
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +47 -5
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +16 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/resources/approvals.d.ts +5 -2
- package/dist/resources/approvals.d.ts.map +1 -1
- package/dist/resources/approvals.js.map +1 -1
- package/dist/resources/fleet.d.ts +4 -0
- package/dist/resources/fleet.d.ts.map +1 -1
- package/dist/resources/fleet.js.map +1 -1
- package/dist/resources/tasks.d.ts +2 -2
- package/dist/resources/tasks.js +2 -2
- package/dist/resources/tool-approvals.d.ts +77 -25
- package/dist/resources/tool-approvals.d.ts.map +1 -1
- package/dist/resources/tool-approvals.js +45 -14
- package/dist/resources/tool-approvals.js.map +1 -1
- package/dist/settings.d.ts +4 -4
- package/dist/types.d.ts +155 -57
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +36 -0
- package/dist/types.js.map +1 -1
- package/openapi.yaml +279 -115
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
*/
|
|
59
59
|
import type { SemaSettings } from "./settings.js";
|
|
60
60
|
import type { ApprovalDecidedBy } from "./resources/approvals.js";
|
|
61
|
-
import type { AllowRuleShadow, AskOrigin, AutoModeFallbackCause, BoundSkillGrants, ClassifierUnavailable, DenialLimitFallback, PersistedRuleMandate, RuleOffer, RuleOffersAbsence, ToolApprovalCardWord, ToolApprovalFrame } from "./resources/tool-approvals.js";
|
|
61
|
+
import type { ASK_ORIGINS, AllowRuleShadow, AskOrigin, AutoModeFallbackCause, BoundGrantAbsence, BoundSkillGrants, ClassifierUnavailable, DenialLimitFallback, PersistedRuleMandate, RuleOffer, RuleOffersAbsence, ToolApprovalCardWord, ToolApprovalFrame } from "./resources/tool-approvals.js";
|
|
62
62
|
/** Authenticated end-user identity. Opaque to the service (used as memory scope + session owner). The SDK
|
|
63
63
|
* normalizes; the service does NOT validate the format. Convention: `user:` / `org:` / `ai:` / `anon:`. */
|
|
64
64
|
export type Principal = string;
|
|
@@ -286,9 +286,12 @@ export interface TaskRequest {
|
|
|
286
286
|
* 并以该项目的 `defaultScopes` 作 memory.scopes 种子;单用户部署忽略派生、只有种子生效。随持久化 body
|
|
287
287
|
* 骑到 resume 腿上(与 `memoryWrite` 同姿势)。 */
|
|
288
288
|
projectId?: string;
|
|
289
|
-
/** 🔴 Per-turn MODEL (CC /model picker parity). A
|
|
290
|
-
*
|
|
291
|
-
*
|
|
289
|
+
/** 🔴 Per-turn MODEL (CC /model picker parity). A configured catalog name, a tier word of the TARGET
|
|
290
|
+
* deployment, or a model id — the server judges it against its tier-expanded catalog (case-sensitive exact key) and
|
|
291
|
+
* passes the string through verbatim (no translation; the engine expands the tier); a name outside that catalog is
|
|
292
|
+
* `400 request.unknown_reference` with the admissible names in `available`. Whether a CC alias (`sonnet` / `opus`) is
|
|
293
|
+
* admissible is the target deployment's tier table, not an sdk word list. body.model wins over @mention wins over the
|
|
294
|
+
* deployment default. Maps to core TaskSpec.model. Omit ⇒ deployment/role default. */
|
|
292
295
|
model?: string;
|
|
293
296
|
/** Cheap-model gear for within-task compaction/summarize (server ≥1.243, core design/145). A catalog intent
|
|
294
297
|
* like `model` (name/tier word/id), gated against the SAME allow-list — an unknown value is a 400 on fresh
|
|
@@ -703,8 +706,9 @@ export interface TaskRequest {
|
|
|
703
706
|
* type at runtime. Rules enforced server-side: non-empty array, ≤32 items, unique `name`s, unknown keys
|
|
704
707
|
* fail-loud 400 on the strict lane (`permissionMode` is DELIBERATELY excluded from this contract — send it
|
|
705
708
|
* and the request is rejected), body→spec lane drops invalid items with a `task_agent_dropped` warn.
|
|
706
|
-
* `model` = the
|
|
707
|
-
*
|
|
709
|
+
* `model` = a configured catalog name, a tier word of the target deployment, or a model id — the same
|
|
710
|
+
* tier-expanded catalog judge as the top-level `model` (see {@link TaskRequest.model}); passed through verbatim, the engine
|
|
711
|
+
* expands the tier; outside the catalog ⇒ `400 request.unknown_reference` for the whole request. Multi-tenant deployments ignore this field entirely
|
|
708
712
|
* (fail-closed, `task_agents_ignored`). Probe `capabilities.taskAgents` before sending to older servers. */
|
|
709
713
|
agents?: TaskAgentDefinition[];
|
|
710
714
|
/** 🔴 INTERACTIVE-TOOLS toggle (server `src/http/wire-types.ts` 的请求形 — STRICT boolean, anything else 400s).
|
|
@@ -786,14 +790,17 @@ export interface TaskRequest {
|
|
|
786
790
|
* narrows honestly. Tighten-only: core's inheritance invariant unions it into EVERY child spawn path.
|
|
787
791
|
* Malformed (non-array / empty-string items) → 400 fail-loud at submit.
|
|
788
792
|
* 🔴 **server ≥7.126.0(core 7.49.0 #1623;契约 G.9e)—— 与 {@link allowTools} 读同一文法**:条目 = wire 名或别名、`Tool(content)`(整只工具)、`mcp__srv` / `mcp__srv__*` / 工具段通配;
|
|
789
|
-
* 名单里有一个这一 run
|
|
793
|
+
* 名单里有一个这一 run **没有任何工具答应**的名字:**server 7.126.0–7.128.x** 引擎开跑前拒 `config.tool_face_control`(同步腿 400,一个 token 没烧;流式 / 后台腿是 `failed` 终局带同码);
|
|
794
|
+
* 🔴 **server ≥7.129.0 照跑**(行为变化,零型变):条目原样保留(现在什么都不拒,之后挂上同名工具即生效),运维行 `runner_config_advisory` 每条告知一次并带该写的拼法 ——
|
|
795
|
+
* 按名读:`excludeTools:["bash"]` 拒不了 `Bash`。`config.tool_face_control` 只剩任何工具名都不可能有的拼法。
|
|
790
796
|
* `"*"` 在这张名单上也被拒(此前它是一只叫 `*` 的工具;「卸全部」的拼法仍只有 {@link excludeAllTools})。deny 赢:可用工具 = 这一 run 挂的一切 ∩ {@link allowTools} − 本名单。 */
|
|
791
797
|
excludeTools?: string[];
|
|
792
798
|
/** server ≥7.126.0(core 7.49.0 #1623;契约 G.9e):这一 run 的**可用性选择器**,原样进引擎的 `TaskSpec.allowTools` —— server 零读法:不算补集、不过滤条目、`[]` 不折成缺席、不与 `settings.permissions.allow`
|
|
793
799
|
* (allow 层,免问)混词。可用工具 = 这一 run 挂的一切(调用方工具、手、引擎自己的工具、MCP / A2A、场景与腿工具)∩ 本名单 − {@link excludeTools}(deny 赢),由引擎在开跑前一次算出。
|
|
794
800
|
* 🔴 **读法**:`["*"]` = 本层不设名单(缺席同义);`[]` = 什么都不给;条目 = wire 名或别名、`Tool(content)`(整只工具)、`mcp__srv` / `mcp__srv__*` / 工具段通配(`mcp__*` 在这张名单上被拒)。
|
|
795
801
|
* 腿的协议工具(委派子代的 `ReportBlocked` 等)不需要点名。子代定义的 {@link TaskAgentDefinition.allowTools} / `denyTools` 与本键是**同一只选择器**(三来源同判)。
|
|
796
|
-
* 🔴
|
|
802
|
+
* 🔴 **没人答应的名字**:**server 7.126.0–7.128.x** 名单里有一个没有任何工具答应的名字 ⇒ `config.tool_face_control`(同步腿 **400**,一个 token 没烧;流式 / 后台腿是 `failed` 终局带同码;子代那一路的同类拒是终局码 `config.agent.unknown_tool`,不是 HTTP 码);
|
|
803
|
+
* **server ≥7.129.0 照跑**:条目原样保留(今天什么都不准,之后挂上同名工具即生效),运维行 `runner_config_advisory` 每条告知一次并带该写的拼法(按名读:`allowTools:["bash"]` 准不了 `Bash`)。两码只剩任何工具名都不可能有的拼法。
|
|
797
804
|
* 坏形(非字符串数组)⇒ 400 `request.field_invalid`,与 `excludeTools` / `deferTools` 同一只门。引擎不认该座(装着的引擎 < 7.49.0)⇒ 响亮拒 400 `request.field_invalid` 点名 `allowTools`(不静默丢:丢一只收窄键就是放宽)。
|
|
798
805
|
* 🔴 **探测靠键闭集,没有能力位**:≤7.125.x 对它答 `400 request.body_shape` 并在 `unknownKeys` 里列名。⚠️ 辖域:A2A 入站面(`message/send`)不承载本键。 */
|
|
799
806
|
allowTools?: string[];
|
|
@@ -964,7 +971,7 @@ export interface TaskAgentDefinition {
|
|
|
964
971
|
whenToUseLean?: string;
|
|
965
972
|
/** Allowlist of tool names the agent may use. Omit ⇒ inherit all tools.
|
|
966
973
|
* server ≥7.126.0(core 7.49.0 #1623):名字归引擎一只判 —— 与根 run 的 {@link TaskRequest.allowTools} / {@link TaskRequest.excludeTools} 是同一只选择器(开跑前,三来源同判);
|
|
967
|
-
*
|
|
974
|
+
* 没有任何工具答应的名字:server 7.126.0–7.128.x ⇒ 整 run 拒终局码 `config.agent.unknown_tool`(不是 HTTP 码;server 受理口只判形与条数);**server ≥7.129.0 照跑**(条目原样保留,运维行 `runner_config_advisory` 告知一次,`denyTools:["bash"]` 拒不了 `Bash`)。 */
|
|
968
975
|
allowTools?: string[];
|
|
969
976
|
/** Denylist of tool names (subtractive; applied after `allowTools`). 同上:server ≥7.126.0 起读同一只选择器(`Tool(content)` ⇒ 整只工具;`denyTools:["Monitor"]` ⇒ 子代没有 `Monitor`)。 */
|
|
970
977
|
denyTools?: string[];
|
|
@@ -986,8 +993,9 @@ export interface TaskAgentDefinition {
|
|
|
986
993
|
background?: boolean;
|
|
987
994
|
/** `"worktree"` = run the agent in an isolated git worktree. */
|
|
988
995
|
isolation?: 'worktree';
|
|
989
|
-
/**
|
|
990
|
-
*
|
|
996
|
+
/** A configured catalog name, a tier word of the target deployment, or a model id — or a Model object with a string
|
|
997
|
+
* `id`. The server judges it against its tier-expanded catalog and passes it through verbatim (no translation; the
|
|
998
|
+
* engine expands the tier); outside the catalog ⇒ `400 request.unknown_reference`. Omit ⇒ inherit the parent model. */
|
|
991
999
|
model?: string | {
|
|
992
1000
|
id: string;
|
|
993
1001
|
[k: string]: unknown;
|
|
@@ -1545,15 +1553,17 @@ export interface ModelCompat {
|
|
|
1545
1553
|
* 已发布的 7.63.0 字节里就已无条件铸,契约段自称的版本也是 7.45,**不是** 7.66)。
|
|
1546
1554
|
* 🔴 **恒在场**——判不了时值是 `"unknown"`,而不是键消失(「这台不判」与「这行判不了」在 wire 上必须
|
|
1547
1555
|
* 可分)。非密:值不含 URL、不含凭据。
|
|
1548
|
-
* · `ok:*`
|
|
1549
|
-
* `
|
|
1556
|
+
* · `ok:*` 三词 = 这行的凭据路说得通(`per-model` 自带凭据 / `paired` 用部署凭据且 URL 在声明的根上 /
|
|
1557
|
+
* `keyless` 哪儿都没凭据的本地无鉴权网关);
|
|
1558
|
+
* · 🔴 **23.0.0 BREAKING(server ≥7.129.0 / 引擎 7.51.0)**:`ok:unpinned`(部署凭据、部署没声明根 ⇒ 配对不可验证)**退役、零别名** —— 没声明根的部署上,
|
|
1559
|
+
* 部署凭据现在由引擎判 `broken:credential_mismatch`。server ≤7.128.x 仍会发 `ok:unpinned`:它落在下面的开集尾,**按通用「配对未验证」渲,别当成好**;
|
|
1550
1560
|
* · `broken:*` 两词 = 真请求会被引擎拒(标红,给这只模型配 per-model 凭据或挪到部署根上);
|
|
1551
1561
|
* · `unknown` = 判不了。**不要**渲成「好」或「坏」,渲「未知」。
|
|
1552
1562
|
* 🔴 **真开集**(`(string & {})` 逃生口不是装饰):core 把 `verdict.posture` 直接内插进 `ok:${…}`,
|
|
1553
1563
|
* server 的铸点与 core 的那只函数**全路径没有一处运行期成员判定** —— 一只自带 `adjudicateRoute` 的 brain
|
|
1554
1564
|
* 供什么词就上什么词。开/闭按**产方是否真判成员**定(8.4.0 拆假开集的同一条判据),所以这里给字面量
|
|
1555
|
-
* 补全但**不执法**:switch
|
|
1556
|
-
export type RoutePairingStatus = "ok:per-model" | "ok:paired" | "ok:
|
|
1565
|
+
* 补全但**不执法**:switch 认上面六词,再留一条 default 臂当「未知」。 */
|
|
1566
|
+
export type RoutePairingStatus = "ok:per-model" | "ok:paired" | "ok:keyless" | "broken:credential_mismatch" | "broken:credential_missing" | "unknown" | (string & {});
|
|
1557
1567
|
/** `GET /v1/models` 的非密钥模型目录条目(core 1.116 `@model` mention 线;service src/http/routes/capabilities.ts)。
|
|
1558
1568
|
* `name` = `@handle`(用户在正文打 `@<name>` per-task 选它)。🔴 **只名/能力,无 baseUrl/apiKey/headers**(service 已剥)。 */
|
|
1559
1569
|
export interface ModelInfo {
|
|
@@ -2678,10 +2688,9 @@ export interface TraceTurn {
|
|
|
2678
2688
|
* core 7.9.0 #625 持久规则三态起可达)。它是 `org` 的**个人店同胞**:与 `org` 同属「可以否掉一次人已经
|
|
2679
2689
|
* 给过的批准」的复查层(改过的命令会被重判),所以既不是 `policy` 也不是 `ask_resolution`;
|
|
2680
2690
|
* · `classifier` —— auto 模式分类器**直接**拒(它的 ASK 侧角色是 `origin: "denial_limit_fallback"`);
|
|
2681
|
-
* · ⚰️ `plan_mode`
|
|
2682
|
-
* 一只仲裁表,这一格并进 `mode
|
|
2683
|
-
*
|
|
2684
|
-
* 删除条件 = 支持地板抬过 7.106.0;
|
|
2691
|
+
* · ⚰️ `plan_mode`(server ≤7.105.0 / core ≤7.33.x:plan 模式对写工具的只读拦阻)—— **23.0.0 起不在本型**:core 7.34.0 design/1111 把模式裁决收成
|
|
2692
|
+
* 一只仲裁表,这一格并进 `mode`;server 7.129.0 起引擎的档案读法把它登记在退役词表里(`RETIRED_MEMBERS.deniedBy`),门记录上它只在**回放面**以档案词到达 ——
|
|
2693
|
+
* 读 {@link GateRecordDeniedBy}(= 本型 ∪ 档案词)。本型只取引擎今天的词;
|
|
2685
2694
|
* · `mode` —— **权限模式自己的拒**(server ≥7.106.0 / core 7.34.0):`dontAsk` 把一只无人在场可答的问变成拒、`bypassPermissions` 拒一次
|
|
2686
2695
|
* 写目标落点读不出的写(`target_unresolved`;7.122.0–7.125.x 是旧拼法)。同臂必带 `mode` / `askClass` / `classes`(core 不变量 I8,见 {@link GateDisposition});
|
|
2687
2696
|
* · `compliance` —— 合规的调用期锁;
|
|
@@ -2718,9 +2727,7 @@ export interface TraceTurn {
|
|
|
2718
2727
|
* 在任何 JSON 体铸点上」,并带判别力自证(同一只扫描器必须扫得到真在 wire 上的词)。
|
|
2719
2728
|
* ⇒ 上游哪天把它抬上响应体,那一格当天变红,SDK 当批补声明。
|
|
2720
2729
|
*/
|
|
2721
|
-
export type DeniedBy = "policy" | "hook" | "org" | "persisted_rule" | "classifier"
|
|
2722
|
-
/** ⚰️ 退役词(server ≤7.105.0):见上方注。 */
|
|
2723
|
-
| "plan_mode" | "compliance" | "write_protection" | "ask_resolution"
|
|
2730
|
+
export type DeniedBy = "policy" | "hook" | "org" | "persisted_rule" | "classifier" | "compliance" | "write_protection" | "ask_resolution"
|
|
2724
2731
|
/** core 7.25.0(#945 读站)/ server ≥7.92.0:shell 读站拒的——拒表路径命中(D 路,审批之前)或已批改写重判到拒表行
|
|
2725
2732
|
* (V 路,与 `settlement.kind: "human_allowed"` 并排);可否决(`DENIED_BY_MAY_VETO`),不带 `cause`。 */
|
|
2726
2733
|
| "read_boundary"
|
|
@@ -2735,18 +2742,18 @@ export type DeniedBy = "policy" | "hook" | "org" | "persisted_rule" | "classifie
|
|
|
2735
2742
|
*/
|
|
2736
2743
|
export type PermissionMode = "default" | "acceptEdits" | "plan" | "auto" | "bypassPermissions" | "dontAsk";
|
|
2737
2744
|
/**
|
|
2738
|
-
* 一只问**属于哪一类**(core `ASK_CLASSES`:7.34.0 铸二十词,core 7.39.0 起 `shell_floor` 入册 ⇒ 二十一词,core 7.40.0 起 `unstated` 入册 ⇒ 二十二词,core 7.41.0 起 `requires_user_interaction` 入册 ⇒ 二十三词,core 7.43.0 起 `classifier_no_ruling` 入册 ⇒ 二十四词,core 7.45.0 起 `dangerous_delete` 入册 ⇒ 二十五词,core 7.49.0 起 `unverifiable_shell_text` 入册 ⇒
|
|
2745
|
+
* 一只问**属于哪一类**(core `ASK_CLASSES`:7.34.0 铸二十词,core 7.39.0 起 `shell_floor` 入册 ⇒ 二十一词,core 7.40.0 起 `unstated` 入册 ⇒ 二十二词,core 7.41.0 起 `requires_user_interaction` 入册 ⇒ 二十三词,core 7.43.0 起 `classifier_no_ruling` 入册 ⇒ 二十四词,core 7.45.0 起 `dangerous_delete` 入册 ⇒ 二十五词,core 7.49.0 起 `unverifiable_shell_text` 入册 ⇒ 二十六词(同版写目标落点读不出那一类改拼 `target_unresolved`,旧拼法见 README 22.0.0 迁移表),**core 7.51.0 / server ≥7.129.0 起 `governance_unavailable` 并入 `rule_unreadable` ⇒ 二十五词**(23.0.0 BREAKING,零别名;7.128.x 停驻的卡 / 行由 server 起服一次性改写);模式 × 类仲裁表的列)。K-32 扩项 / server ≥7.106.0 起出现在
|
|
2739
2746
|
* {@link ModeRelease.askClass} / `.classes` 与 deny 臂的 `askClass` / `classes` 上,以及通告 `permission.ask_released_by_mode` 的 detail 里;
|
|
2740
2747
|
* K-37 扩项 / server ≥7.109.0(S-934 ②)起也在审批面:活卡帧 / 卡面 / 运维队列行 / `/stream` `pending` 帧的 `askClass` / `classes`
|
|
2741
2748
|
* (同样经 core `isAskClass` 筛,读不出整对不投;见 {@link import("./resources/tool-approvals.js").ToolApprovalFrame.askClass})。
|
|
2742
|
-
* 🔴
|
|
2749
|
+
* 🔴 **本型是今天的闭集**:卡面 / 运维队列行 / 请求面读它;**门记录**(`tool_end.gate` 与回放面)上的类词读档案型 {@link GateRecordAskClass}(= 本型 ∪ 引擎退役词表那一集,server ≥7.129.0)。`bypassPermissions` 只放行其中**可放**的类(core `releasableAskClassesFor(face)`):
|
|
2743
2750
|
* · **server ≥7.127.0(core 7.50.0)**:每一面都可放九类 —— `transcript_write` / `probe` / `write_protection` / `tool_marks_mcp` / `tool_marks_a2a` /
|
|
2744
2751
|
* `artifact_shared_read` / `mode` / `unstated` / `ordinary`;**壳面**(线名恰为 `Bash` / `Monitor`、声明了写路径目标的调用方工具)另放第十类 `target_unresolved`
|
|
2745
2752
|
* (壳面 10、其余面 9;文件工具上这一类照拒,`deniedBy: "mode"`)。`rule_unreadable` 不再被任何模式放行(规则读不出 ⇒ bypass 也问,run 一条 `permission.rule_store_unavailable` 通告)。
|
|
2746
2753
|
* · server 7.122.0–7.126.x(core 7.47.0–7.49.x):每一面另放 `rule_unreadable` ⇒ 十类、壳面第十一类(壳面 11、其余面 10;7.122.0–7.125.x 壳面多放的那一类是旧拼法)。
|
|
2747
2754
|
* · ≤7.121.x:`RELEASABLE_ASK_CLASSES` 常量(在 core 7.47.0 已删)十类、不分面。
|
|
2748
2755
|
* 其余(`operator_forced` 部署出身、`ask_rule` / `org_rule`、`hook`、`ancestor`、`content_question`、`dangerous_delete`(core 7.45.0)、`unverifiable_delete`、
|
|
2749
|
-
* `unverifiable_shell_text`(core 7.49.0)、`
|
|
2756
|
+
* `unverifiable_shell_text`(core 7.49.0)、`policy_rra`、`requires_user_interaction` …)任何模式下都照问。
|
|
2750
2757
|
*
|
|
2751
2758
|
* 🔴 **`requires_user_interaction`(core 7.41.0;server ≥7.116.0 提货)= 服务器声明「这只工具每次都要用户在场」**:MCP 服务器在工具申报里声明
|
|
2752
2759
|
* `_meta["anthropic/requiresUserInteraction"] === true`(只认布尔 `true`)⇒ 这只工具的**每一次**调用都问人 —— **每种模式含 `bypassPermissions`** 都问(**不在**可放类里),
|
|
@@ -2770,7 +2777,10 @@ export type AskClass = "content_question" | "hook" | "ancestor"
|
|
|
2770
2777
|
* (`bash -c "$CMD"` / `eval "$(…)"` / `xargs sh -c` 一类;解析失败或嵌套过深的 shell 文本也归这一类)。仲裁行与 `unverifiable_delete` 同、只差分类器一列:
|
|
2771
2778
|
* **免疫 bypass**(不在可放类里)、allow 规则清不掉、`auto` 的分类器不被问、`dontAsk` 拒;只有人的答清得掉。卡上不带 `mandate` 词(它的理由是「文本读不出」这扇门,不是表上的词)。
|
|
2772
2779
|
* server 7.125.x 及以前这一形落 `dangerous_delete`。 */
|
|
2773
|
-
| "unverifiable_shell_text" | "transcript_write" | "org_rule"
|
|
2780
|
+
| "unverifiable_shell_text" | "transcript_write" | "org_rule"
|
|
2781
|
+
/** 一条可能管着这次调用的规则**读不出**(组织的快照、本人规则店的一个分区,或这次调用对着一条 deny / ask 行读不成);免疫 bypass。
|
|
2782
|
+
* core 7.51.0 / server ≥7.129.0 起组织快照读不出那一形也是本词(此前单列的 `governance_unavailable` 并入本词,零别名)。 */
|
|
2783
|
+
| "rule_unreadable" | "ask_rule" | "denial_limit_fallback"
|
|
2774
2784
|
/** core 7.43.0 #1353 / server ≥7.118.0:auto 模式的分类器**没判出来**(它跑不了 —— `error` / `timeout`,或答了却没有判词 —— `parse_error`),于是交给人:
|
|
2775
2785
|
* denial-limit 回落那一行(只有人的答清得掉;**免疫 bypass**,allow 规则清不掉,分类器不再被问)。活卡帧 / 收件箱行另带成因 {@link import("./resources/tool-approvals.js").ToolApprovalFrame.classifierNoRuling}。 */
|
|
2776
2786
|
| "classifier_no_ruling"
|
|
@@ -2785,6 +2795,67 @@ export type AskClass = "content_question" | "hook" | "ancestor"
|
|
|
2785
2795
|
| "target_unresolved" | "probe" | "write_protection" | "tool_marks_mcp" | "tool_marks_a2a" | "policy_rra" | "artifact_shared_read" | "mode"
|
|
2786
2796
|
/** core 7.40.0 / server ≥7.115.0:**没人表态**的服务器工具 / A2A 技能调用(见本型顶注)—— 可放类(bypass / allow 规则 / 分类器都清得掉它),不在免疫类里。 */
|
|
2787
2797
|
| "unstated" | "ordinary";
|
|
2798
|
+
/**
|
|
2799
|
+
* **门记录的档案词**(引擎 core 7.51.0 `RETIRED_MEMBERS` #1731,逐集逐词同序,连同「哪一版引擎停铸了它」)—— 门记录携带的每只闭集里引擎已不再铸、
|
|
2800
|
+
* 但上一代引擎合法写下过的词。一集一张表;没有退役词的集是空表(集名与引擎同一份)。
|
|
2801
|
+
*
|
|
2802
|
+
* 🔴 **一条读法(server ≥7.129.0)**:门记录({@link GateOutcome}:`tool_end.gate`、turns / trace 回放、`GET /v1/runs/:id/events` 的账本裸回放)只过引擎的
|
|
2803
|
+
* `screenGateOutcome` 一次,缺省按**档案**读 —— 每只闭集 = 引擎今天的词 ∪ 本表那一集。上一代引擎写下的记录**逐字**上帧(7.50.x 模式拒的
|
|
2804
|
+
* `governance_unavailable`、7.126.x 放行理由 `rule_unreadable`、7.14.0 之前的出身词 `unresolvable` …);任何一代引擎都没铸过的词(大小写变体 / 空串 /
|
|
2805
|
+
* 未来词)整条 `gate` 不上帧 + 计数。⇒ 本包门记录上的词位读档案型:{@link GateRecordAskClass} / {@link GateRecordDeniedBy} / {@link GateRecordModeReleaseReason} /
|
|
2806
|
+
* {@link GateRecordPersistedRuleMandate} / {@link GateRecordAskOrigin}(各 = 今天的闭集 ∪ 本表那一集,仍是闭集);卡面 / 运维队列行 / 请求面的同名闭集只取今天的词。
|
|
2807
|
+
* 消费端:认得的档案词照常渲,不认得的**按通用渲染**,别按今天的词表丢整条记录。
|
|
2808
|
+
* ⚠️ 老 server:7.74.0–7.128.x 对出集词整条不上帧(7.127.0–7.128.x 对放行理由的退役词只省略 `reason`),那些版本上档案词到不了 —— 型照样成立,只是没人发。
|
|
2809
|
+
* 它取代了此前的两条局部说法(`DeniedBy` 为老 server 留着 `plan_mode`;`ModeRelease.reason` 的老词「读作集外」):退役词只有这一张表、这一种读法。
|
|
2810
|
+
*/
|
|
2811
|
+
export declare const GATE_RECORD_RETIRED_WORDS: Readonly<{
|
|
2812
|
+
askClass: readonly [Readonly<{
|
|
2813
|
+
word: "write_protection_unresolved";
|
|
2814
|
+
retiredIn: "7.49.0";
|
|
2815
|
+
}>, Readonly<{
|
|
2816
|
+
word: "governance_unavailable";
|
|
2817
|
+
retiredIn: "7.51.0";
|
|
2818
|
+
}>];
|
|
2819
|
+
modeReleaseReason: readonly [Readonly<{
|
|
2820
|
+
word: "write_protection_unresolved";
|
|
2821
|
+
retiredIn: "7.49.0";
|
|
2822
|
+
}>, Readonly<{
|
|
2823
|
+
word: "rule_unreadable";
|
|
2824
|
+
retiredIn: "7.50.0";
|
|
2825
|
+
}>];
|
|
2826
|
+
askOrigin: readonly [Readonly<{
|
|
2827
|
+
word: "unresolvable";
|
|
2828
|
+
retiredIn: "7.14.0";
|
|
2829
|
+
}>];
|
|
2830
|
+
persistedRuleMandate: readonly [Readonly<{
|
|
2831
|
+
word: "write_protection_unresolved";
|
|
2832
|
+
retiredIn: "7.49.0";
|
|
2833
|
+
}>];
|
|
2834
|
+
deniedBy: readonly [Readonly<{
|
|
2835
|
+
word: "plan_mode";
|
|
2836
|
+
retiredIn: "7.34.0";
|
|
2837
|
+
}>];
|
|
2838
|
+
settlementKind: readonly [];
|
|
2839
|
+
settlementParty: readonly [];
|
|
2840
|
+
classifierDenyCause: readonly [];
|
|
2841
|
+
permissionMode: readonly [];
|
|
2842
|
+
autoModeFallbackCause: readonly [];
|
|
2843
|
+
}>;
|
|
2844
|
+
/** 门记录携带的一只闭集的名字(= {@link GATE_RECORD_RETIRED_WORDS} 的键,与引擎同名)。 */
|
|
2845
|
+
export type GateRecordWordSet = keyof typeof GATE_RECORD_RETIRED_WORDS;
|
|
2846
|
+
/** 闭集 `S` 的档案词(没有退役词的集 ⇒ `never`)。 */
|
|
2847
|
+
export type GateRecordRetiredWord<S extends GateRecordWordSet> = (typeof GATE_RECORD_RETIRED_WORDS)[S][number]["word"];
|
|
2848
|
+
/** 门记录上的类词 = {@link AskClass}(今天的词)∪ 档案词(`write_protection_unresolved` 7.49.0 前 / `governance_unavailable` 7.51.0 前)。 */
|
|
2849
|
+
export type GateRecordAskClass = AskClass | GateRecordRetiredWord<"askClass">;
|
|
2850
|
+
/** 门记录上的拒层词 = {@link DeniedBy}(今天的词)∪ 档案词(`plan_mode`,core 7.34.0 并进 `mode`)。 */
|
|
2851
|
+
export type GateRecordDeniedBy = DeniedBy | GateRecordRetiredWord<"deniedBy">;
|
|
2852
|
+
/** 门记录上的模式放行理由 = 今天的一员 `target_unresolved`(core `MODE_RELEASE_REASONS`)∪ 档案词(7.122.0–7.125.x 的旧拼法 / 7.126.x 及以前的 `rule_unreadable`)。 */
|
|
2853
|
+
export type GateRecordModeReleaseReason = "target_unresolved" | GateRecordRetiredWord<"modeReleaseReason">;
|
|
2854
|
+
/** 门记录上的强制词 = {@link PersistedRuleMandate}(今天的六词)∪ 档案词(7.49.0 前的旧拼法)。 */
|
|
2855
|
+
export type GateRecordPersistedRuleMandate = PersistedRuleMandate | GateRecordRetiredWord<"persistedRuleMandate">;
|
|
2856
|
+
/** 门记录上的出身词 = core `ASK_ORIGINS`(今天的十二词)∪ 档案词(`unresolvable`,core 7.14.0 改名 `ancestor_marked`)。🔴 门记录这一面引擎判成员,所以是**闭集**
|
|
2857
|
+
* —— 与卡面上开集读的 {@link AskOrigin} 不同面(卡面 server 只判非空串)。 */
|
|
2858
|
+
export type GateRecordAskOrigin = (typeof ASK_ORIGINS)[number] | GateRecordRetiredWord<"askOrigin">;
|
|
2788
2859
|
/**
|
|
2789
2860
|
* 一个权限**模式放行**了一只本该问人的 ask 的记录(K-32 扩项;server ≥7.106.0 / core 7.34.0 `ModeRelease`,键集逐键同 core
|
|
2790
2861
|
* `dist/core/gate-outcome.d.ts`)—— 只挂在 `allowed` 臂上({@link GateDisposition}):这一次**没有问任何人**,是模式放的。
|
|
@@ -2794,26 +2865,25 @@ export type AskClass = "content_question" | "hook" | "ancestor"
|
|
|
2794
2865
|
export interface ModeRelease {
|
|
2795
2866
|
/** 放行它的模式(门记录面上今天恒 `bypassPermissions`)。 */
|
|
2796
2867
|
mode: PermissionMode;
|
|
2797
|
-
/** 披露的类词 = 折叠集合按 core `ASK_CLASSES` 序的**第一位**(
|
|
2798
|
-
askClass:
|
|
2868
|
+
/** 披露的类词 = 折叠集合按 core `ASK_CLASSES` 序的**第一位**(可放类之一;档案读法见 {@link GateRecordAskClass})。 */
|
|
2869
|
+
askClass: GateRecordAskClass;
|
|
2799
2870
|
/** 这只 ask 折叠出的**整个**类集合。 */
|
|
2800
|
-
classes:
|
|
2801
|
-
/** 卡上本会显示的 origin(与 {@link GateOutcome.origin}
|
|
2802
|
-
origin?:
|
|
2803
|
-
/** 卡上本会显示的强制词(
|
|
2804
|
-
mandate?:
|
|
2871
|
+
classes: GateRecordAskClass[];
|
|
2872
|
+
/** 卡上本会显示的 origin(与 {@link GateOutcome.origin} 同一张表;本面按引擎档案闭集筛)。 */
|
|
2873
|
+
origin?: GateRecordAskOrigin;
|
|
2874
|
+
/** 卡上本会显示的强制词(今天六词 ∪ 档案词,见 {@link GateRecordPersistedRuleMandate})。 */
|
|
2875
|
+
mandate?: GateRecordPersistedRuleMandate;
|
|
2805
2876
|
/**
|
|
2806
2877
|
* 🔴 放行**越过了什么**:一个词,取 core `MODE_RELEASE_REASONS` 数组序里这只 ask 的类集持有的**第一位**;类集不持有任何成员 ⇒ 缺席。
|
|
2807
|
-
*
|
|
2878
|
+
* 今天的闭集只有一员:
|
|
2808
2879
|
* · `"target_unresolved"` —— 放行越过了一次**写目标落点读不出**的写(落点的读法说不出它在盘上通向哪里 —— 路上有一个链接查不了,或执行环境解不出目标 ——
|
|
2809
2880
|
* 于是它落不落在受保护的路径上是未知)。只在**壳面**放:线名恰为 `Bash` / `Monitor`、且声明了写路径目标的**调用方工具**,在 `bypassPermissions` 下;
|
|
2810
2881
|
* 文件工具上同一类问照拒(`deniedBy: "mode"`)。引擎自带的 `Bash` / `Monitor` 铸不出这一类,server 自己也不挂这样的工具 —— 它出自调用方(嵌入方)自带的同名工具。
|
|
2811
|
-
*
|
|
2812
|
-
*
|
|
2813
|
-
*
|
|
2814
|
-
* 7.122.0 之前这里只有 `"rule_unreadable"` 一个词。
|
|
2882
|
+
* 🔴 **门记录按档案读(server ≥7.129.0)**,所以回放面上还会逐字到达上一代引擎写下的两只退役词({@link GateRecordModeReleaseReason}):`rule_unreadable`
|
|
2883
|
+
* (server ≤7.126.x:放行越过了一条这次调用读不出的规则 —— core 7.50.0 / server ≥7.127.0 起规则读不出不再被任何模式放行;`rule_unreadable` 作为 {@link AskClass} 的一类**仍在**)
|
|
2884
|
+
* 与 7.122.0–7.125.x 的旧拼法(即今天的 `target_unresolved`)。server 7.127.0–7.128.x 对这两只词只省略 `reason`(`released` 照投),7.74.0–7.126.x 当场就是今天的词。
|
|
2815
2885
|
*/
|
|
2816
|
-
reason?:
|
|
2886
|
+
reason?: GateRecordModeReleaseReason;
|
|
2817
2887
|
}
|
|
2818
2888
|
/**
|
|
2819
2889
|
* 这一次分类的**模型归属**(core 7.18.0 #742 `AutoModeClassifierRound`,server ≥7.78.0)——「这次 auto 模式
|
|
@@ -2865,7 +2935,8 @@ export type GateDisposition = {
|
|
|
2865
2935
|
released?: ModeRelease;
|
|
2866
2936
|
} | {
|
|
2867
2937
|
kind: "denied";
|
|
2868
|
-
|
|
2938
|
+
/** 拒的那一层(门记录按档案读:今天的 {@link DeniedBy} ∪ 档案词,见 {@link GateRecordDeniedBy})。 */
|
|
2939
|
+
deniedBy: GateRecordDeniedBy;
|
|
2869
2940
|
/** server ≥7.72.0(core 7.14.0 #688 C-a)—— 拒的**形**(不是「为什么不可用」):`unavailable` = 分类器那一轮
|
|
2870
2941
|
* 跑不了(抛错/拒绝/超出上限);`parse_error` = 它跑了但答出了判词契约之外 ⇒ 为安全起见拦下。它是退役键
|
|
2871
2942
|
* `classifierUnavailable` 的继任座(引擎一次铸、`tool_end.gate` 与 `permissionDenied.gate` 同投),但**两代不是
|
|
@@ -2881,10 +2952,10 @@ export type GateDisposition = {
|
|
|
2881
2952
|
/** K-32 扩项(server ≥7.106.0 / core 7.34.0 `ModeRefusal`):**present-iff `deniedBy === "mode"`**(core 不变量 I8)—— 拒它的模式,两词:
|
|
2882
2953
|
* `dontAsk`(把一只无人可答的问变成拒)/ `bypassPermissions`(拒一次判不出保护目标的写)。`plan` 在这里什么都不拒(它的问照问)。 */
|
|
2883
2954
|
mode?: "bypassPermissions" | "dontAsk";
|
|
2884
|
-
/** 与 `mode` 同在:被拒那只 ask 的披露类词(
|
|
2885
|
-
askClass?:
|
|
2955
|
+
/** 与 `mode` 同在:被拒那只 ask 的披露类词(门记录按档案读,见 {@link GateRecordAskClass} —— 7.50.x 写下的模式拒可带 `governance_unavailable`)。 */
|
|
2956
|
+
askClass?: GateRecordAskClass;
|
|
2886
2957
|
/** 与 `mode` 同在:折叠出的整个类集合。 */
|
|
2887
|
-
classes?:
|
|
2958
|
+
classes?: GateRecordAskClass[];
|
|
2888
2959
|
};
|
|
2889
2960
|
/**
|
|
2890
2961
|
* 一只 ask 在等的那次等待**怎么结束的** —— 按 `kind` 判别的联合(core 7.6.0 `SETTLEMENT_KINDS`,闭十二词)。
|
|
@@ -2994,8 +3065,8 @@ export interface GateOutcome {
|
|
|
2994
3065
|
disposition: GateDisposition;
|
|
2995
3066
|
/** 只在**这次通过真的结算了一只 ask** 时在场。与 {@link origin} 同在同缺(I1)。 */
|
|
2996
3067
|
settlement?: Settlement;
|
|
2997
|
-
/** 谁**问**的。与 {@link settlement} 同在同缺(I1)
|
|
2998
|
-
origin?:
|
|
3068
|
+
/** 谁**问**的。与 {@link settlement} 同在同缺(I1)。门记录按档案读(见 {@link GateRecordAskOrigin}:今天的十二词 ∪ 7.14.0 前的 `unresolvable`),是**闭集**。 */
|
|
3069
|
+
origin?: GateRecordAskOrigin;
|
|
2999
3070
|
}
|
|
3000
3071
|
/**
|
|
3001
3072
|
* 一次失败的 MCP 请求**到没到那台服务器**(core 7.6.0 `MCP_DELIVERY_VERDICTS`,闭三词)。
|
|
@@ -3681,7 +3752,7 @@ export interface SkillSpec {
|
|
|
3681
3752
|
* 提交即 400(7.116.x 受理,引擎读作一个永不命中的名字);每张清单**超过 1000 条** ⇒ 400(句子给写法「合并成更宽的条目」;7.116.x 无帽)。
|
|
3682
3753
|
* 🔴 **名字层的读法随 server 代际再变(上面两处「提交即 400」只对 7.116.x–7.117.x 成立)**:**server ≥7.118.0** 起 allow 侧的名字层交引擎 —— 退役名 / 无前缀短名 / 铸不出的协议名**受理**,开跑时收
|
|
3683
3754
|
* `permission.allowed_tool_not_granted`(`entries[].reason:"tool_name"`);**server ≥7.123.0** 起连**工具段为空的协议名**(`mcp__<server>__` / `a2a__<peer>__`)在本清单也受理(7.118.0–7.122.x 400)。
|
|
3684
|
-
* 按面三分:allow 面(本清单、`settings.permissions.allow`)**收 + 通告**;deny 面(`disallowedTools`、`settings.permissions.{deny,ask}`)**拒**;会话规则写口答 **`400 rules.
|
|
3755
|
+
* 按面三分:allow 面(本清单、`settings.permissions.allow`)**收 + 通告**;deny 面(`disallowedTools`、`settings.permissions.{deny,ask}`)**拒**;会话规则写口答 **`400 rules.inert_entry`**(server ≥7.129.0;此前是已退役的旧码,见 {@link import("./errors.js").BadRequestError})。
|
|
3685
3756
|
* 🔴 **先探 `capabilities.skillToolLists`**:位缺席 = 老 server ⇒ 顶层技能上的两只清单**照收但引擎不读**(静默不生效,没有 400 可探 ——
|
|
3686
3757
|
* 别指望清单拦得住工具,圈工具用 deny 规则),子代技能上是未知键整条拒。
|
|
3687
3758
|
* 🔴 `manifest` 键 server ≥7.116.0 **提交即拒**(顶层 400 `request.field_invalid`、子代整条技能拒);改写 `manifest.allowTools` → 本键;
|
|
@@ -3866,7 +3937,21 @@ export type PermissionModeAutoCapability =
|
|
|
3866
3937
|
reason: AutoModeUnarmedReason;
|
|
3867
3938
|
model?: string;
|
|
3868
3939
|
});
|
|
3869
|
-
|
|
3940
|
+
/**
|
|
3941
|
+
* **引擎能力词**(core `ENGINE_CAPABILITIES`,core 7.51.1 起;**逐词同序**)—— 「这台引擎做不做 X」的唯一住处:壳按**词**判断,不按版本号。
|
|
3942
|
+
* server ≥7.129.0 把它也接线了的词原样投到 `GET /v1/capabilities` 的**顶层**,**键就是词本身**(带点号,值恒 `true`;没接的词不投 ⇒ 缺席)。
|
|
3943
|
+
* · `inherit_env.own_credentials_withheld` —— 这台部署上起的子进程**从不继承**部署声明为自家凭据的名字(`inheritEnv` 的每种策略,含 `"all"`,都先减去那张名单;
|
|
3944
|
+
* 点名其中一个名字的白名单被拒)。只说**继承**:引擎进程自己的环境对同机同用户进程仍可读,所以「凭据根本不进环境」仍是根治。
|
|
3945
|
+
* 一处派生:{@link EngineCapabilityBits} 与 {@link Capabilities} 的能力词键都由本数组生成 —— 引擎加词时这里加一项、其余零手写;
|
|
3946
|
+
* 缺席 = 老 server(≤7.128.x)或这一词没接线 ⇒ **读作「不保证」**,不是「不具备」。
|
|
3947
|
+
*/
|
|
3948
|
+
export declare const ENGINE_CAPABILITY_WORDS: readonly ["inherit_env.own_credentials_withheld"];
|
|
3949
|
+
export type EngineCapabilityWord = (typeof ENGINE_CAPABILITY_WORDS)[number];
|
|
3950
|
+
/** 能力词 ⇒ 可选布尔(键名原样带点号);{@link Capabilities} 继承它。 */
|
|
3951
|
+
export type EngineCapabilityBits = {
|
|
3952
|
+
[W in EngineCapabilityWord]?: boolean;
|
|
3953
|
+
};
|
|
3954
|
+
export interface Capabilities extends EngineCapabilityBits {
|
|
3870
3955
|
asyncRuns?: boolean;
|
|
3871
3956
|
/** [1833] G6(server `src/http/routes/capabilities.ts` 的 `sideQuery` 位,恒 `true` —— runner 自带):
|
|
3872
3957
|
* POST /v1/side-query 一次性 brain 路由问答面在否——`client.sideQuery` 使用前探测此位,别 trial-by-501。
|
|
@@ -4247,7 +4332,7 @@ export interface Capabilities {
|
|
|
4247
4332
|
/**
|
|
4248
4333
|
* #229(server ≥7.15.0,`routes/capabilities.ts` 的能力对象**硬编码 true**)—— 回决**理由**位在这台
|
|
4249
4334
|
* worker 上存在的**版本探测位**:live `POST /v1/tool-approvals/:id/respond` 收 `note` + 回执带
|
|
4250
|
-
* `noteRecorded`(见 `
|
|
4335
|
+
* `noteRecorded`(见 `ToolApprovalRespondApplied`),durable 回决口的三个回体投 `decisionNote`。
|
|
4251
4336
|
*
|
|
4252
4337
|
* 🔴 **本位必须先探再发**:live 回决口的体校验是**非 strict** 的(手写 parser,未知键静默忽略),
|
|
4253
4338
|
* 所以老 server 收到 `note` 会**照回 200 且什么都不记** —— 位缺席 = 老 server,别渲这一格。
|
|
@@ -5124,9 +5209,13 @@ export interface PendingCheckpoint {
|
|
|
5124
5209
|
* 与活卡帧 / `livePending` 行同名同义。取代 ≤7.125.x 的 `contentKind`(7.126.0 删、零别名)。**缺席 = 引擎没铸**:7.49.0 之前 park 的存量行(core 不从工具名回推,**无卡 = 不是一问** —— 旧问答行在队列上不带卡词,到期被 SLA 拒扫)/ 非审批门 /
|
|
5125
5210
|
* 老引擎。展示 / 分诊用,**永不参与 resume / gate / CAS**;`/v1/assistant/inbox` 行不带。 */
|
|
5126
5211
|
approvalCard?: ToolApprovalCardWord;
|
|
5127
|
-
/** server ≥7.100.0(S-700)—— park 行上的 `ruleOffers` 缺席因由(与活卡帧 / `card_json`
|
|
5212
|
+
/** server ≥7.100.0(S-700)—— park 行上的 `ruleOffers` 缺席因由(与活卡帧 / `card_json` 同一只窄读、同一个闭集;server ≥7.129.0 四词)。
|
|
5128
5213
|
* 读法见 {@link import("./resources/tool-approvals.js").RuleOffersAbsence}。 */
|
|
5129
5214
|
ruleOffersAbsence?: RuleOffersAbsence;
|
|
5215
|
+
/** server ≥7.129.0(core 7.51.0 #1688;park 行事实第八位)—— 这张停驻卡**为什么没有**授予绑定摘要(park 行孪生座 `PendingAction.tool_approval.boundGrantAbsence`,
|
|
5216
|
+
* 与活卡帧 / inbox 行同一只窄读、同名同值)。读法见 {@link import("./resources/tool-approvals.js").BoundGrantAbsence}。
|
|
5217
|
+
* 🔴 本面缺席 = 技能卡(带摘要;摘要不上本面)/ 7.51.0 之前停驻的行(两者都不说 —— inbox 面对同一张行投 `unreadable`)/ 集外词 / 老 server —— **不是** `not_bindable`。 */
|
|
5218
|
+
boundGrantAbsence?: BoundGrantAbsence;
|
|
5130
5219
|
/** K-37 扩项(server ≥7.109.0 / S-934 ② / core 7.37.0 #1214)—— 这一问的**类**(park 行孪生座 `PendingAction.tool_approval.askClass`,经 server
|
|
5131
5220
|
* `readAskClassPair` —— 与活卡帧 / 卡面**同一只**窄读)。与 {@link classes} 同在同缺,`classes[0] === askClass`;durable 审批席按类答的依据。
|
|
5132
5221
|
* 缺席 = 老行(core 7.37.0 之前 park 的,续跑不补)/ 读不出(server 计 S-249 tag),**不是**「无类」。语义全文见
|
|
@@ -5328,20 +5417,21 @@ export interface SessionListPage {
|
|
|
5328
5417
|
}
|
|
5329
5418
|
/** E6(shell-host permissionMode;core `SessionPermissionRules` session-policy-store.ts:23,service `GET/PUT
|
|
5330
5419
|
* /v1/sessions/:id/policy`,SHIPPED)—— operator 收紧的 per-session 工具权限规则(core 在 prepare-time SUBTRACT-only
|
|
5331
|
-
*
|
|
5420
|
+
* 读它)。**三只**开放可选 string[] 桶;读写均经 {@link StoredSessionRules}(带 `rev` OCC 键)。🔴 **tighten-only 不变式**
|
|
5332
5421
|
* core 强制:普通(非 operator)写只能收紧(删 deny / 不能放宽 allowlist/allowDirs)→ 放宽 403 `loosen_forbidden`;
|
|
5333
|
-
* CAS `expectedRev` 不符 → 409 `conflict`;ownerless session → 409;non-owner → 404(无 existence oracle)。
|
|
5422
|
+
* CAS `expectedRev` 不符 → 409 `conflict`;ownerless session → 409;non-owner → 404(无 existence oracle)。
|
|
5423
|
+
* 🔴 **server ≥7.129.0(引擎 7.51.0)一种文法**:`toolAllow` / `toolDeny` 装**规则条目** —— 工具名、`mcp__<server>`、或工具自己文法的规则
|
|
5424
|
+
* (`Bash(git push:*)` / `Edit(docs/*)`;条目 `Bash(rm:*)` 按命令名拒 `rm`,连接链任一段:`toolDeny: ["Bash(rm:*)"]`)。命令桶 `commandAllow` / `commandDeny` **退役**(本型 23.0.0 起删,零别名):
|
|
5425
|
+
* 写进去答 400 `rules.invalid_shape`(不静默忽略 —— 忽略 = 一条 deny 被丢);`commandDeny: ["rm"]` 的新写法是 `toolDeny: ["Bash(rm:*)"]`,它不拒写成路径的 `/bin/rm …`、
|
|
5426
|
+
* 也不拒读不成一条命令名的命令行(旧桶都拒;要也拒就整只拒 shell:`toolDeny: ["Bash"]`);`commandAllow` 没有对应写法。读成「什么都不是」的条目答 400 `rules.inert_entry`。
|
|
5427
|
+
* 读面:7.128.x 及以前存下、带命令桶的 SQL 行在 ≥7.129.0 上读回 `500 corrupt`(该会话规则面 500、新任务起不来),要运维按新文法改写那一行或删会话。 */
|
|
5334
5428
|
export interface SessionPermissionRules {
|
|
5335
|
-
/** 设了 =
|
|
5429
|
+
/** 设了 = 仅这些条目放行(白名单收紧)。条目文法见本型顶注。 */
|
|
5336
5430
|
toolAllow?: string[];
|
|
5337
|
-
/**
|
|
5431
|
+
/** 总禁的条目(deny wins)—— 工具名、`mcp__<server>` 或 `Bash(rm:*)` 这类规则。 */
|
|
5338
5432
|
toolDeny?: string[];
|
|
5339
5433
|
/** 设了 = 写工具(Q6/core 1.161 起 CC 名 `Write`/`Edit`)仅可写这些目录内;不能路径约束的写工具(如 `Bash`)在它设了时被禁。RAW 存,run 时解析。 */
|
|
5340
5434
|
allowDirs?: string[];
|
|
5341
|
-
/** 设了 = 仅这些 bash 命令名(argv[0])放行。 */
|
|
5342
|
-
commandAllow?: string[];
|
|
5343
|
-
/** 总禁的 bash 命令名(argv[0])。 */
|
|
5344
|
-
commandDeny?: string[];
|
|
5345
5435
|
}
|
|
5346
5436
|
/** {@link SessionPermissionRules} + store 盖的单调 `rev`(OCC 键)。GET/PUT 的 `{rules}` 信封里就是这个。
|
|
5347
5437
|
* PUT 回送 `rev` 作下次 `expectedRev`(CAS)。 */
|
|
@@ -5350,6 +5440,11 @@ export interface StoredSessionRules extends SessionPermissionRules {
|
|
|
5350
5440
|
/** server ≥7.92.0(引擎 7.25.0;老 server 缺席):会话规则的**血统世代**。一次 erase(`deleteBySession`)结束一条血统——
|
|
5351
5441
|
* 其后首写带 gen+1;读者看到不同 gen 就当新血统而非延续,无论 rev。与 `rev` 高水位一起构成「rev 跨删除保序」契约。 */
|
|
5352
5442
|
gen?: number;
|
|
5443
|
+
/** server ≥ 7.129.0(引擎 7.51.2):这一行的条目按哪一代规则**文法**读 —— 引擎的写口判官给每一行盖的戳(本版 server 写下的行恒 `1`)。
|
|
5444
|
+
* 缺席 = 戳之前存下的行(文法 0:拼成规则形的 allow 条目 `Bash(rm:*)` 名了不存在的工具、什么都不放行;引擎照旧那样读并通告一次;
|
|
5445
|
+
* 服务端的一次性迁移改写存量行并盖戳)。把 GET 回的体连 `rev` 回传 PUT 而不带 `grammar` ⇒ 按文法 0 读(`400 rules.inert_entry`
|
|
5446
|
+
* reason `earlier_grammar`);`grammar` 比引擎新 ⇒ `400 rules.invalid_shape`(field `grammar`)。只写三只桶即盖当前文法。 */
|
|
5447
|
+
grammar?: number;
|
|
5353
5448
|
}
|
|
5354
5449
|
/** E9(shell-host mcpStatus;core `McpServerStatus` core/mcp.ts:76,service `GET /v1/sessions/:id/mcp`,SHIPPED
|
|
5355
5450
|
* core 1.124)—— 单 MCP server 的状态。🔴 core 不持久化 MCP 连接(task-scoped)→ 无「存的 session MCP 健康」;service
|
|
@@ -6120,6 +6215,9 @@ export interface InboxRow {
|
|
|
6120
6215
|
/** server ≥7.118.0 —— 上一位哈希的那一份值;**只在它确实哈希成 {@link boundGrantDigest} 时**出现(引擎判,server 不重算 —— 摘要绑定另一份时清单读作缺席)。
|
|
6121
6216
|
* 🔴 部署文本:渲染按上下文转义。 */
|
|
6122
6217
|
boundGrants?: BoundSkillGrants;
|
|
6218
|
+
/** server ≥7.129.0(core 7.51.0 #1688)—— 卡**为什么没有** {@link boundGrantDigest}(两者恰一;引擎 `summarizeCheckpoint` 对工具审批行是全函数 ——
|
|
6219
|
+
* 7.51.0 之前停驻、两者都不说的行在本面投 `unreadable`)。与活卡帧 / 运维队列行同名同值,读法见 {@link import("./resources/tool-approvals.js").BoundGrantAbsence}。 */
|
|
6220
|
+
boundGrantAbsence?: BoundGrantAbsence;
|
|
6123
6221
|
/** server ≥7.118.0(core 7.43.0 #1353)—— 只在类 `classifier_no_ruling` 的停驻卡上:分类器为什么没判({@link AutoModeFallbackCause})。 */
|
|
6124
6222
|
classifierNoRuling?: AutoModeFallbackCause;
|
|
6125
6223
|
/** server ≥7.69.0(core 7.10.0 #616)—— **为什么这一问会到我手上**:分类器被咨询过但答不了。inbox 是
|