@sema-agent/client-core 0.104.0 → 0.104.1
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 +9 -0
- package/README.md +3 -2
- package/dist/hitl/livePendingAsk.d.ts +2 -1
- package/dist/hitl/livePendingAsk.js +7 -1
- package/dist/hitl/toolApprovalWire.d.ts +2 -2
- package/dist/hitl/toolApprovalWire.js +53 -32
- package/dist/steering.d.ts +1 -0
- package/dist/steering.js +34 -26
- package/docs/INTEGRATION-CLIENTS.md +95 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -49,6 +49,15 @@
|
|
|
49
49
|
> 挡住 ⇒ 本批把它机械化——④a0 对 `pending` 行**要求段头已是日期形**(`(未发布)` 直接红),阶段一
|
|
50
50
|
> commit 漏转在发布前就红,不再靠人记。
|
|
51
51
|
|
|
52
|
+
## 0.104.1(2026-10-30)
|
|
53
|
+
|
|
54
|
+
> 主题:悬挂审批在说呈卡协议的服务端上恢复全卡(接入文档 **§133 AR-1 – AR-4**)· 压缩后后台任务表里带读句尾巴的行照认(**§133 BT-1 – BT-4**)。
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- **🔴 行为变:悬挂审批(`GET /v1/approvals` 的 `livePending` 行)在说呈卡协议的服务端上不再一律出盲卡**(CC-1127;**§133 AR-1 – AR-4**):*修前*:服务端 7.133.0 起一只 ask 一个帧族,声明了呈卡族(`approval_request`)的运行上,行上 `frame` 是呈卡族开卡帧(卡内事实在 `card`、卡外事实在帧顶层);本包读器只认旧族 `tool_approval` 形 ⇒ 每一只悬挂 ask 都按坏形丢掉 `frame`,`surfaceSuspendedAskAndRespond` 出盲卡 —— 卡上说看不到工具入参、「编辑后批准」被拒,强制位 / 出身词等卡外事实也不上卡。*修后*:读器收开卡帧两形之一(旧族照旧;呈卡族按类型包的 v1 判别器 `isApprovalRequestFrameV1`),两形都要 `frame.approvalId` 与行的 `approvalId` 相等;呈卡族形与旧族形走同一个活卡入口(同一张卡口、同一张持有表、`POST /v1/tool-approvals/:id/respond`、身份键 = 行的 `approvalId`),卡面读 `card`(与 `approvalCardFactsOfV1` 同核:规则候选落只读位、不给会话放行位),强制位 / 强制词 / 出身词 / 探测原因 / 读根候选 / 授予清单 / 分类器未裁读帧顶层。两形之外(版本认不出 / `type` 不对 / id 对不上)照旧盲卡;旧族形的卡逐字节同前。*型面*:🔴 `LivePendingAskView.frame` 由 `ToolApprovalFrame` 放宽为 `ToolApprovalFrame | ApprovalRequestFrame`(与类型包 `LivePendingRow.frame` 同一个联合)—— 直读 `row.frame.args` / `row.frame.toolName` 的端先判 `frame.type` 才编译得过;`surfaceToolApprovalFrameAndRespond` 第一参同样收这一联合(只放宽,调用方零改动)。*同一入口另收紧两处*:v1 卡面**顶层**的真人位(`requiresRealApproval`;卡契约里它在 `risk` 下,真人位读器两处都读)在场却不是 `true` ⇒ 键名记进 `unreadableEvidence`、自动作答判定答 `unknown`(修前被当缺席,规则车道可放;宿主经 `approvalCardFactsOfV1` 拼的卡同收紧)· 活卡入口直收版本认不出的呈卡族帧时,持有身份的一问签名不再读卡面上的出身词 / 强制词(与这张通用卡的投影一致)⇒ 同一只审批经停驻行腿进来时认得上,不再出第二张卡、发第二次决断。呈卡口读 `card` 只读一次(类型包判别器与卡面载荷用同一份读数;`card` 是访问器的宿主帧不再在身份装配时抛、零呈卡)。*谁受影响*:用 `surfaceSuspendedAskAndRespond` 出悬挂卡的端在呈卡族服务端上拿到全卡(入参可见、可编辑后批准、强制卡在自动作答判定上答必问);零接线改动。
|
|
59
|
+
- **压缩后后台任务表里带读句尾巴的行不再被整条丢掉**(CC-1129;**§133 BT-1 – BT-4**):*修前*:引擎在任务表一行的末尾可以再带一句读法 ` — <读句>`(例:`output: Read <路径>`),本包的行解析器要求「行尾恰是状态短语」,带尾巴的行整条被丢;一张表里全带尾巴时整段退成通用的 `steering_injected` 行(普通视图不渲这一行,模型照样收到全表),带尾巴的 `parked` 行同样不认。*修后*:行 = 前缀 `- [<id>] Task "<描述>" ` + 状态短语 + 可选恰一枚尾巴(` — ` 起、取到行尾、原样),尾巴投成 `EngineTaskStatusAttachment` 的可选位 `read`(缺席 = 引擎没带或行上无尾巴,不编空串);状态短语恒取自行内最后一枚「引号 + 空格」之后(描述里自带「引号 + 短语 + ` — `」而真状态是表外词的行不会被读成带尾巴的已知状态);描述带换行(某行的描述引号没合上、且不是最后一个非空行)⇒ 整段退通用行,换行之后仿出的行不长出任务身份;无尾巴的行与 0.104.0 逐字节同;未知短语、裸 `parked`、表尾 `(+N more background tasks, not listed here)` 行照旧不认。零 wire 新键、零新导出名。
|
|
60
|
+
|
|
52
61
|
## 0.104.0(2026-10-30)
|
|
53
62
|
|
|
54
63
|
> 主题:换钉到引擎 7.60.0(开发依赖 `@sema-agent/core` / `@sema-agent/mods-kernel` 7.60.0;生成表按新上游重生成)接入文档 **§132 PK-1 – PK-6** —— MCP 失败类多一词 `host_refused`(🔴 型面 BREAKING:闭集变宽)· 状态帧座位位 `seat` 两层白名单都到 · 单张图片上限改读引擎准入表那一格 · 成本分项型面不再具名引擎已删的一行 · 通知码册 106 → 110 · 内核契约 6 的身份读数。peer 地板不动。 另:停驻终局的结果帧恒走错误臂、`-p` 停驻出路句只在 `errors[0]`(**§132 RA-1 / RA-2**,🔴 行为变)。再另:请求体权限三桶里跨层写过同一条规则的,在高信任组内的位置改按所属来源的写序(**§132 PO-1**,🔴 行为变,窄)。再另:接入文档补三处成文(**§132 HS-2a / HS-2b / XA-7a**,零代码改动、行为面零变)。再另:钩子车道的类依据改读引擎要求真批准的门类集(**§132 HK-2**,🔴 行为变,只放宽钩子车道)。再另:提货服务端 7.139.0 / 类型包 30.0.0(开发依赖 `@sema-agent/sdk` `^30.0.0` · `@sema-agent/settings-schema` `^15.1.0`;生成表重生成;peer 地板不动)**§132 SV-1 – SV-6** —— 换绑前态改读执行放置读面(🔴 型面 BREAKING)· 会话行条件写(行标签 / 写体标签 / 拒绝之后的下一步)· 换绑 409 子代形 · 后台行子会话 id · 三处随类型包到货退役(RL-310 / RL-311 / RL-313)。 再另:退役登记 RL-290 到期,孤儿型 `ManagedPolicyReading` 退出根入口(**§132 SV-11**,🔴 型面 BREAKING、运行期零变)。 再另:名册一步按引擎覆盖读法(PK-7)· 停驻卡 / 活卡工具入参 = 记录侧那一份并在改写时明说(**§132 AK-1 / AK-2**)· 被挡臂 hook 的话不画实体形标签(**§132 TG-1**),三处 🔴 行为变。
|
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ Renamed from **`@sema-agent/wire-cc-adapter`** (0.1.x, deprecated — see *Migra
|
|
|
35
35
|
|
|
36
36
|
## Scope
|
|
37
37
|
|
|
38
|
-
**Version:** 0.104.
|
|
38
|
+
**Version:** 0.104.1
|
|
39
39
|
|
|
40
40
|
- **Today** — the adapter seam, the whole `adapt()` pipeline (all 14 A-layer arms plus the
|
|
41
41
|
B/D/E tool-card layers), the notification/caps/model families, the adapter kernel (stream driver
|
|
@@ -339,7 +339,7 @@ guard still cross-checks the table by name).
|
|
|
339
339
|
| `scripts/run-approvals-stream-live-capability-test.mjs` | The engine's live-approval-push self-description (`capabilities.approvalsStreamLive`, engine ≥7.87.1), read the same four-state way as its four sibling capability readers: an absent key is reported as not reported (never folded into `false`), the value must be a strict boolean, and the one decision the feed consumer needs — whether it must keep pulling suspended asks itself — is answered by `livePendingNeedsReconcile`, which only says no when the engine explicitly says it pushes. |
|
|
340
340
|
| `scripts/run-model-facing-anchors-test.mjs` | Five places where model-facing engine text is parsed back into card slots: the task-output cursor semantics machine-readable key wins over the spool marker text (and its absence is never read as `full`), the `--- result (…) ---` line accepts a parenthesised note and reads it in linear time even on crafted input (a note can no longer swallow the start of the next line), the bash header accepts the engine's exit-note and image variants and carries the note into the same benign-exit slot the structured path uses, the notification seed scan treats both producers' terminal words as terminal, and the parked background-task phrase is recognised. |
|
|
341
341
|
| `scripts/run-execution-lane-capability-test.mjs` | The deployment execution-lane self-description (`capabilities.executionLane`, engine ≥7.86.0), read the same four-state way as its three sibling capability readers. An absent key is reported as "not reported" and never as "tools do not run on this host" as a fact about the deployment; since every server at or above the support floor reports the key, the single "do tools run here" predicate answers `false` for a body that reported nothing (from 0.92.0, so no skill `baseDir` is sent on a reading that proves nothing), and keeps using the caller's own inference only while nothing has been observed yet. The implication is one-way (`toolsOnThisHost: false` means `baseDir` is never sent; `true` is only a necessary condition), `provider` is read as an open non-empty string rather than a hand-copied closed set and is sanitised and bounded before display, `toolsOnThisHost` must be a strict boolean, an `isolated` position that can only be read by running a getter (or whose descriptor read throws) makes the whole entry unreadable rather than degrading that one position, extra members never cross, the reading comes only from the capabilities cache's landed response (there is no separate write port), and the single "do tools run here" predicate uses the bit when it is present. Current engines (≥7.106.0) also say whether the lane's tools sit behind an OS isolation boundary (`isolated`, present only when the lane has tools of its own); the reading carries it when it is a strict boolean and otherwise records which of three absences it is — a lane without tools on a current engine, an older engine, or a value that cannot be read (including a current engine that says tools run on this host yet omits the flag it must then send) — none of which is ever read as `false`, and an unreadable value never costs the rest of the lane reading. The single "no OS sandbox on this machine" predicate (`isolated` false and tools on this host) answers yes, no or unknown under three-valued logic, one sentence goes with the yes answer, the operator diagnostics segment is read by the same rule, and the engine's own projection for every lane is replayed: only the host lane answers yes |
|
|
342
|
-
| `scripts/run-live-pending-ask-test.mjs` | Suspended in-stream asks (the `livePending` section of `GET /v1/approvals`): an absent key reads as not reported (never an empty list or a zero count), an unreadable section leaves the previous snapshot in place, rows are narrow-read (malformed rows dropped and counted, optional flags only-if-true, extra members never cross), the feed digest covers the section so an ask appearing or settling produces a snapshot, the host-gated reconcile cadence re-lists while the push leg is connected and backs off when nothing changes, the tracker surfaces each `approvalId` once and reports it gone once, and the decision runs through the same respond chain as the in-stream frame leg — with the card stating that the tool arguments are not visible and edits on that card never forwarded. Since 0.73.4 a push-side fetch that did not get a readable body (thrown, or an unreadable `livePending` section) is owed a look: it is retried with doubling back-off until one fetch succeeds (never abandoned by count), cancelled by any successful fetch, cleared on stop, and switchable off. The session scope of the suspended-ask view, count and tracker must be chosen explicitly (one session, all sessions, or identity pending): an unresolved or malformed scope answers null counts, an empty view and a tracker that never emits, and the three entry points refuse to compile without a scope. |
|
|
342
|
+
| `scripts/run-live-pending-ask-test.mjs` | Suspended in-stream asks (the `livePending` section of `GET /v1/approvals`): an absent key reads as not reported (never an empty list or a zero count), an unreadable section leaves the previous snapshot in place, rows are narrow-read (malformed rows dropped and counted, optional flags only-if-true, extra members never cross), the feed digest covers the section so an ask appearing or settling produces a snapshot, the host-gated reconcile cadence re-lists while the push leg is connected and backs off when nothing changes, the tracker surfaces each `approvalId` once and reports it gone once, and the decision runs through the same respond chain as the in-stream frame leg — with the card stating that the tool arguments are not visible and edits on that card never forwarded. Since 0.73.4 a push-side fetch that did not get a readable body (thrown, or an unreadable `livePending` section) is owed a look: it is retried with doubling back-off until one fetch succeeds (never abandoned by count), cancelled by any successful fetch, cleared on stop, and switchable off. The session scope of the suspended-ask view, count and tracker must be chosen explicitly (one session, all sessions, or identity pending): an unresolved or malformed scope answers null counts, an empty view and a tracker that never emits, and the three entry points refuse to compile without a scope. On servers that present approvals as `approval_request` frames (engine ≥7.133.0), a suspended row carries that frame instead of a `tool_approval` one; either opening-frame form is accepted when its `approvalId` matches the row, both go through the same card, holder table and respond call keyed by the row's `approvalId`, the card face is read from `card` and the out-of-card facts (mandated, origin, …) from the frame's top level, and anything outside the two forms still yields the blind card; the `tool_approval` card is byte-identical to the previous release. A malformed top-level `requiresRealApproval` on such a card is recorded in `unreadableEvidence` (the automatic-answer verdict stays `unknown`), and a parked row without an approval id still joins the same live card by run, call id and ask signature — call id, sub-agent run and ask classes read from the card face, origin and mandate from the frame's top level, and none of the out-of-card facts for an unrecognised version — so no second card or second decision appears. |
|
|
343
343
|
| `scripts/run-leader-conflict-test.mjs` | The leader-run terminal `needs_human` + `result.conflict` (engine ≥7.83.0), read once for all three shells. A `result` without a `conflict` key is reported as `none` and worded as "no conflict details" rather than "no conflict": on the wire it is indistinguishable from an older engine that never reports one, and the reader does not pick a side. A `conflict` that is present but unreadable is a third word, never folded into `none`, because a tree that carries conflict markers must not be rendered as clean. `filesTruncated` is honoured only as `true` (absent means the list is complete; any other value makes the section unreadable), `workers[].applied` is passed through as the boolean fact it is, `salvaged[].patch` is handed to the save path byte-for-byte (an artifact, not screen text; a malformed row is dropped alone, and a salvage list that is present but cannot be fully read is flagged rather than rendered as "no patches"), and `rejHead` — the one on-screen diagnostic — is escaped and bounded before display. The record never throws on hostile input, extra members do not cross, arrays are fresh copies, and the single sentence minted here names the base, the files, which branches landed and which did not, and how many patches can be saved, without ever suggesting a retry: `needs_human` is a run waiting for a person, and the no-details sentence says plainly that it is not proof of a merge |
|
|
344
344
|
| `scripts/run-mcp-reconnect-test.mjs` | The in-session MCP re-dial verb (`POST /v1/sessions/:id/mcp/reconnect`, engine ≥7.85.0), consumed. The single discriminant is `outcome` and all three answers are HTTP 200, so the reader branches on the word and never on the status; the `unsupported` answer carries exactly five keys and the reader refuses to invent a zero or an empty list for the four fields the engine did not produce, while `accepted` / `refused` treat those four as required and go malformed when one is missing. The tool roster follows the **presence** of `toolNames` (absent = untouched, empty = withdrawn), the connection record passes `errorCode` through as an open set, and every remote-authored string is sanitised and bounded before display. Failures are classified by `errorCode` alone, a missing code is reported as unknown rather than guessed, the verb never throws, and the request-side guard (non-empty name, ≤190 chars) stops a call that the contract would reject anyway. The capability bit reads absent as "cannot tell" rather than "unavailable", and the one sentence the contract insists every UI carries — that re-dialing is a transaction, not a refresh — is minted here once. The engine's answer-deadline reply — a 503 whose machine code says the request stopped waiting before the re-dial settled — is its own verdict arm: it is read by that code alone and never by the status, carries no outcome, and is never rendered as a failure, because the re-dial was not cancelled and may still be running; the one sentence for it is minted here once, and the gate pins that no server release up to 7.117.0 contains the code at all |
|
|
345
345
|
| `scripts/run-core-value-ports-test.mjs` | The port-injection seam for ten **engine value-level** facilities (autonomous-loop prompt assembly, permission-rule loosening, tool-policy composition, protocol/retired-name/grammar lookups, rule compilation; the discussion-workflow name port left in 0.96.0 together with that engine feature). This package cannot re-export them (the engine barrel drags Node built-ins into the browser bundle), so it declares the ports and honest-absence readers; a Node host installs the engine's own functions verbatim. The guard pins: every reader returns `undefined` when nothing is installed (never a fabricated empty array or default policy), arguments and results pass through by reference, engine errors propagate unchanged, partial installs read partially, restore functions unwind to the previous bag, and the module source has zero engine imports From 0.90.0 the mirror of the allow/deny policy options is also compared with the engine's own declaration, both ways: the same set of option keys (the engine added an optional `scope` — whether an allow-list hit is a stated grant or only a bound on which tools a lane may see), with `scope` optional and its two-word union and the invalid-name union spelled identically; the value handed to the installed function is passed through untouched. From 0.101.0 the engine retires that option (passing it is refused by name when the policy is built), so the mirror has no `scope` member and the check asserts it is absent on both sides, that the engine refuses it, and that a stray one is still handed to the installed function untouched rather than dropped. Since 0.94.0 there are twelve ports: the engine's allow-list reader joins them, with the same absence and pass-through rules. From 0.94.0 the seam also carries the engine's five route-adjudication functions (`routeKeyOf`, `joinRequestUrl`, `resolveRouteCredential`, `adjudicateModelRoute`, `routePairingStatus`): a host that builds the full `CoreValuePorts` bag fails to compile until it adds them (the gate compiles that bag in memory and checks each missing member is named), the engine's own functions type-check against the mirrors, and each reader answers `undefined` while its port is not installed. Since 0.96.0 the whole engine bag also assigns into the full port type with no cast (the rule-grammar mirror follows the engine). Also in 0.96.0 the engine's rule tool-name judge (`judgeRuleToolName`, reader `ruleToolNameJudgement`) joins the seam and the retired-name table port leaves it (its one reader now asks the judge): the gate pins the swapped name list, pass-through and error propagation for the judge, and compiles the full bag both ways — missing the judge, or still carrying the retired-name table, fails and names the member. In 0.98.0 the full-bag assembly check compiles under three option sets — plain strict, strict plus exact optional property types and unchecked indexed access, and non-strict — and all sixteen engine functions must install into the full type with no error in each (before, the two strict sets rejected the combine-policies and validate-rules members, which were function-typed properties checked contravariantly), with a sabotage control that goes red under all three. In 0.101.0 the nineteenth port is the engine's default root address for the first-party hosted API: a value rather than a function, installed from the engine's package-root constant. Its reader returns `undefined` while nothing is installed (never the literal root), returns exactly what was installed otherwise (no trimming, no shape check, an empty string stays an empty string), the engine's own constant type-checks into the port type under all three option sets, a full-type bag built for the previous eighteen ports stops compiling and names the new member, and the reader body is a single read of the port with the host name absent from the module source. The twentieth port is the engine's reader for an MCP server's `toolFaces` declaration: absent when not installed (never an invented ok), passed through with the same references when installed, the engine's own function type-checks into the port under all three option sets, a full-type bag built for the previous nineteen ports stops compiling and names the new member, and the reader's signature takes a narrow input type rather than an unknown one. The twenty-first port is the engine's covering-rule matcher (whether a rule name the engine reads as covering every tool of a server covers a given tool name): absent when not installed (never an invented false), both arguments passed through and the answer returned as given when installed, a throw from the engine propagates, the engine's own function type-checks into the port under all three option sets, a full-type bag built for the previous twenty ports stops compiling and names the new member, the real engine answers twelve fixed pairs identically through the port, and the reader's signature has no unknown in it. |
|
|
@@ -677,6 +677,7 @@ guard still cross-checks the table by name).
|
|
|
677
677
|
| `scripts/run-core-7600-pick-projection-test.mjs` | Readings that follow the engine's 7.60 changes. The MCP failure kinds include `host_refused` (a host-supplied pipe did not send the request; safe to retry, no liveness reading), and the wiring-receipt row and the per-server connection reading carry it like any other failure word. A `status` frame's `seat` (which seat's model call the frame is about; absent means the main loop's own call) reaches the retry status through both projection layers, open set, malformed values dropped on their own, never minted when absent; a frame about another seat is not labelled with the session's model, offers no switch-model recourse, and in `-p` stream-json takes the `_sema_model_status` frame with `seat` instead of the `api_retry` frame. The single-image size limit used by the human-turn encoder is generated from the engine's image admission table, with the same value as before. The cost breakdown type no longer names the line the engine removed, while older engines' line still passes through. The extension kernel identity reading reports contract 6 for the 7.60 kernel; the kernel the `./mods` subpath passes through and the engine's own kernel carry the same contract number and event table, with the four new stations defined and `tool.call` failing as `refuse`. Engine names this package does not read are pinned to zero code reads. |
|
|
678
678
|
| `scripts/run-session-row-tag-projection-test.mjs` | Conditional writes on a session row. A row's `rowTag` is read only when it is a non-empty own string (absent means the row cannot be written conditionally; never an empty string); the seat record carries it and the seat patch request carries `expectedRowTag` copied from the same row, with both seat gates checking the shapes. After a refusal the next step reads the same way through the real client error: already applied (the row already holds the values written), decide again against the current row and its new tag (never resend as is), a read-only mirror (fork first), or an older replica that does not know the tag (keep the pending change, never drop the tag and resend). |
|
|
679
679
|
| `scripts/run-server-7139-pick-projection-test.mjs` | Readings that follow the server's 7.139 changes. The repin is checked against the installed type package itself (the execution-placement and children-retire calls exist, the old device-binding read does not, the row tag, request tag and background-row session id are optional keys). Each new refusal code from this release reaches the generic failure classifier as an HTTP verdict carrying the server's own code and words without being taken for a dedicated arm, and the resume fold names it. A background-agent row carries its child session id only when the server sent a non-empty own string. Names the server or type package removed have no code-position reads left in the package sources. |
|
|
680
|
+
| `scripts/run-background-task-table-projection-test.mjs` | Background-task table rows after a compaction, read the way the engine mints them: a row is the `- [<id>] Task "<description>" ` prefix, a status phrase, and at most one optional tail that starts with ` — ` and runs to the end of the line. The tail is projected verbatim onto the optional `read` field of the task-status attachment (absent means the engine sent none — never an empty string), rows without a tail stay byte-identical to the previous release (a frozen copy of the old reader and a seeded random pool of 4000 batches prove it), a `parked` row is recognised with or without a tail, a second ` — ` inside the tail stays part of it, and unknown phrases and the `(+N more …)` footer line are still not recognised. The status phrase is always read after the last `" ` (quote plus space) on the line, so a description that itself contains a phrase never turns an unknown status into a known one; a table whose row description breaks across lines (an opening quote never closed on a line that is not the last non-empty one) is not read as rows at all and falls back to the generic row. The engine's own table renderer is driven for real, status by status and read form by read form. |
|
|
680
681
|
|
|
681
682
|
Each suite carries a floor that only moves up — a refactor that stops executing a group of
|
|
682
683
|
assertions is a failure, not a quieter pass. Guards anchor on the **installed artefact's content**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ApprovalRequestFrame } from '@sema-agent/sdk';
|
|
1
2
|
import type { ApprovalResolution } from './approvalResolution.js';
|
|
2
3
|
import type { ApprovalsFeedEmission } from './approvalsFeed.js';
|
|
3
4
|
import { type RespondToolApprovalFn, type ToolApprovalFrame, type ToolApprovalFrameLaneOpts } from './toolApprovalWire.js';
|
|
@@ -11,7 +12,7 @@ export interface LivePendingAskView {
|
|
|
11
12
|
governanceForced?: true;
|
|
12
13
|
fromSubagent?: true;
|
|
13
14
|
originTaskId?: string;
|
|
14
|
-
frame?: ToolApprovalFrame;
|
|
15
|
+
frame?: ToolApprovalFrame | ApprovalRequestFrame;
|
|
15
16
|
}
|
|
16
17
|
export type LivePendingReading = {
|
|
17
18
|
kind: 'not_reported';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isApprovalRequestFrameV1 } from '@sema-agent/sdk';
|
|
1
2
|
import { appendOwnElement } from '../ownKey.js';
|
|
2
3
|
import { readRequiresRealApproval } from './approvalCardReading.js';
|
|
3
4
|
import { THROWN_SLOT_UNREADABLE, readThrownSlot } from '../wireFailureShape.js';
|
|
@@ -21,6 +22,11 @@ function snapshotMembers(raw) {
|
|
|
21
22
|
}
|
|
22
23
|
return raw.length === length ? out : undefined;
|
|
23
24
|
}
|
|
25
|
+
function openingFrameOf(f) {
|
|
26
|
+
if (isToolApprovalFrame(f))
|
|
27
|
+
return f.type === 'tool_approval' ? f : undefined;
|
|
28
|
+
return isApprovalRequestFrameV1(f) ? f : undefined;
|
|
29
|
+
}
|
|
24
30
|
export function readLivePendingRows(body) {
|
|
25
31
|
if (body === null || typeof body !== 'object' || Array.isArray(body))
|
|
26
32
|
return { kind: 'malformed' };
|
|
@@ -65,7 +71,7 @@ export function readLivePendingRows(body) {
|
|
|
65
71
|
...(o.governanceForced === true ? { governanceForced: true } : {}),
|
|
66
72
|
...(o.fromSubagent === true ? { fromSubagent: true } : {}),
|
|
67
73
|
...(nonEmptyString(o.originTaskId) ? { originTaskId: o.originTaskId } : {}),
|
|
68
|
-
...(
|
|
74
|
+
...((f) => (f !== undefined && f.approvalId === o.approvalId ? { frame: f } : {}))(openingFrameOf(o.frame)),
|
|
69
75
|
});
|
|
70
76
|
}
|
|
71
77
|
if (members.length > 0 && rows.length === 0)
|
|
@@ -10,7 +10,7 @@ import { type ApprovalMandateWord } from '../gateVocabulary.js';
|
|
|
10
10
|
import type { ToolPermissionRequest } from '../seatContract.js';
|
|
11
11
|
import { type ApprovalDecidedByReading } from '../approvalDecidedByCapability.js';
|
|
12
12
|
import { RULE_OFFER_MATCHES, RULE_OFFER_BATCH_MEMBER_KINDS, RULE_OFFER_UNCOVERED_REASONS, RULE_OFFERS_ABSENCE_REASONS } from '@sema-agent/sdk';
|
|
13
|
-
import type { ApprovalDecidedBy, ApprovalCardDelegation, ToolApprovalDecision as SdkToolApprovalDecision, ToolApprovalRespondAck, ToolApprovalRespondReplayed, PersistedRuleAnchor, RuleOfferMatch, RuleOfferBatchMember, RuleOfferUncoveredDetail, RuleOfferUncoveredReason, AskOrigin, RuleOffersAbsence, DenialLimitKind, DenialLimitFallback, ToolApprovalFrame, RuleOffer as SdkRuleOffer } from '@sema-agent/sdk';
|
|
13
|
+
import type { ApprovalDecidedBy, ApprovalCardDelegation, ToolApprovalDecision as SdkToolApprovalDecision, ToolApprovalRespondAck, ToolApprovalRespondReplayed, PersistedRuleAnchor, RuleOfferMatch, RuleOfferBatchMember, RuleOfferUncoveredDetail, RuleOfferUncoveredReason, AskOrigin, RuleOffersAbsence, DenialLimitKind, DenialLimitFallback, ToolApprovalFrame, ApprovalRequestFrame, RuleOffer as SdkRuleOffer } from '@sema-agent/sdk';
|
|
14
14
|
export declare function toolNameIsFsWrite(name: string): boolean;
|
|
15
15
|
export declare function toolNameIsShellExec(name: string): boolean;
|
|
16
16
|
export interface ToolApprovalGateLike {
|
|
@@ -293,7 +293,7 @@ export interface ToolApprovalFrameLaneOpts {
|
|
|
293
293
|
windowIsCurrent?: boolean;
|
|
294
294
|
argsUnavailable?: true;
|
|
295
295
|
}
|
|
296
|
-
export declare function surfaceToolApprovalFrameAndRespond(frame: ToolApprovalFrame, respond: RespondToolApprovalFn, streamArgs: unknown | undefined, signal?: AbortSignal, lane?: ToolApprovalFrameLaneOpts, run?: {
|
|
296
|
+
export declare function surfaceToolApprovalFrameAndRespond(frame: ToolApprovalFrame | ApprovalRequestFrame, respond: RespondToolApprovalFn, streamArgs: unknown | undefined, signal?: AbortSignal, lane?: ToolApprovalFrameLaneOpts, run?: {
|
|
297
297
|
readonly taskId?: string;
|
|
298
298
|
readonly sessionId?: string;
|
|
299
299
|
}): Promise<ApprovalResolution>;
|
|
@@ -31,7 +31,7 @@ import { slotPresenceOf, wireFailureTextsOf } from '../wireFailureShape.js';
|
|
|
31
31
|
import { isPlainRecord } from '../jsonFaithful.js';
|
|
32
32
|
import { DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED } from '../engineErrorCodes.js';
|
|
33
33
|
import { readDecideReceipt } from '../decideReceipt.js';
|
|
34
|
-
import { RULE_OFFER_MATCHES, RULE_OFFER_BATCH_MEMBER_KINDS, RULE_OFFER_UNCOVERED_REASONS, RULE_OFFERS_ABSENCE_REASONS, ASK_ORIGINS, } from '@sema-agent/sdk';
|
|
34
|
+
import { RULE_OFFER_MATCHES, RULE_OFFER_BATCH_MEMBER_KINDS, RULE_OFFER_UNCOVERED_REASONS, RULE_OFFERS_ABSENCE_REASONS, ASK_ORIGINS, isApprovalRequestFrameV1, } from '@sema-agent/sdk';
|
|
35
35
|
export function toolNameIsFsWrite(name) {
|
|
36
36
|
const n = name.replace(/[\s_-]+/g, '').toLowerCase();
|
|
37
37
|
return (n === 'write' || n === 'filewrite' || n === 'edit' || n === 'fileedit' || n === 'multiedit' || n === 'notebookedit');
|
|
@@ -470,7 +470,7 @@ export async function surfaceFsApprovalAndDecide(deps, taskId, argsByCall, signa
|
|
|
470
470
|
});
|
|
471
471
|
}
|
|
472
472
|
function parkRowHolderIdentity(row, gatedCallId) {
|
|
473
|
-
const askSig = carrierAskSig(row);
|
|
473
|
+
const askSig = carrierAskSig(row, row);
|
|
474
474
|
return {
|
|
475
475
|
...(typeof row.taskId === 'string' && row.taskId !== '' ? { taskId: row.taskId } : {}),
|
|
476
476
|
...(gatedCallId !== undefined && gatedCallId !== '' ? { toolCallId: gatedCallId } : {}),
|
|
@@ -1210,16 +1210,18 @@ function serverMayReadCallLaw(carrier) {
|
|
|
1210
1210
|
const UNREADABLE_EVIDENCE_KEYS = Object.freeze({
|
|
1211
1211
|
frame: Object.freeze([
|
|
1212
1212
|
['rememberRefused', 'rememberRefused'], ['governanceForced', 'governanceForced'], ['requiresRealApproval', 'requiresRealApproval'],
|
|
1213
|
-
['
|
|
1213
|
+
['ruleOffersAbsence', 'ruleOffersAbsence'], ['ruleOffers', 'ruleOffers'],
|
|
1214
1214
|
['allowRuleShadowed', 'allowRuleShadow'], ['askClass', 'askClass'], ['classes', 'classes'],
|
|
1215
1215
|
]),
|
|
1216
|
+
live: Object.freeze([['mandated', 'mandated'], ['mandate', 'mandate'], ['origin', 'origin']]),
|
|
1216
1217
|
row: Object.freeze([
|
|
1217
1218
|
['rememberRefused', 'rememberRefused'], ['governanceForced', 'governanceForced'], ['requiresRealApproval', 'requiresRealApproval'],
|
|
1218
1219
|
['mandated', 'mandated'], ['mandate', 'mandate'], ['origin', 'origin'], ['ruleOffersAbsence', 'ruleOffersAbsence'], ['ruleOffers', 'ruleOffersReadOnly'],
|
|
1219
1220
|
['askClass', 'askClass'], ['classes', 'classes'],
|
|
1220
1221
|
]),
|
|
1221
1222
|
v1: Object.freeze([
|
|
1222
|
-
['rememberRefused', 'rememberRefused'], ['governanceForced', 'governanceForced'], ['
|
|
1223
|
+
['rememberRefused', 'rememberRefused'], ['governanceForced', 'governanceForced'], ['requiresRealApproval', 'requiresRealApproval'],
|
|
1224
|
+
['ruleOffersAbsence', 'ruleOffersAbsence'], ['ruleOffers', 'ruleOffersReadOnly'],
|
|
1223
1225
|
['allowRuleShadowed', 'allowRuleShadow'], ['askClass', 'askClass'], ['classes', 'classes'],
|
|
1224
1226
|
]),
|
|
1225
1227
|
generic: Object.freeze([['ruleOffersAbsence', 'ruleOffersAbsence'], ['askClass', 'askClass'], ['classes', 'classes']]),
|
|
@@ -1235,12 +1237,18 @@ function riskSubtreeUnreadable(card) {
|
|
|
1235
1237
|
return true;
|
|
1236
1238
|
}
|
|
1237
1239
|
}
|
|
1238
|
-
function withUnreadableEvidence(carrier, leg, req, reported = []) {
|
|
1240
|
+
function withUnreadableEvidence(carrier, leg, req, reported = [], live) {
|
|
1239
1241
|
const keys = new Set(reported);
|
|
1240
1242
|
for (const [from, to] of UNREADABLE_EVIDENCE_KEYS[leg]) {
|
|
1241
1243
|
if (slotPresenceOf(carrier, from) !== 'absent' && !Object.hasOwn(req, to))
|
|
1242
1244
|
keys.add(from);
|
|
1243
1245
|
}
|
|
1246
|
+
if (live !== undefined) {
|
|
1247
|
+
for (const [from, to] of UNREADABLE_EVIDENCE_KEYS.live) {
|
|
1248
|
+
if (slotPresenceOf(live, from) !== 'absent' && !Object.hasOwn(req, to))
|
|
1249
|
+
keys.add(from);
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1244
1252
|
if (leg === 'row') {
|
|
1245
1253
|
const rd = ownDataValue(carrier, 'riskDescriptor');
|
|
1246
1254
|
if (typeof rd === 'object' && rd !== null && slotPresenceOf(rd, 'allowRuleShadowed') !== 'absent' && !Object.hasOwn(req, 'allowRuleShadow'))
|
|
@@ -1310,9 +1318,9 @@ function askSignatureOf(req) {
|
|
|
1310
1318
|
function askSigOf(classes, origin, mandate) {
|
|
1311
1319
|
return JSON.stringify([classes !== undefined ? [...classes] : null, origin ?? null, mandate ?? null]);
|
|
1312
1320
|
}
|
|
1313
|
-
function carrierAskSig(v) {
|
|
1321
|
+
function carrierAskSig(v, live) {
|
|
1314
1322
|
try {
|
|
1315
|
-
return askSigOf(readAskClassPair(v)?.classes, readAskOrigin(
|
|
1323
|
+
return askSigOf(readAskClassPair(v)?.classes, live === undefined ? undefined : readAskOrigin(live), live === undefined ? undefined : readApprovalMandate(live));
|
|
1316
1324
|
}
|
|
1317
1325
|
catch {
|
|
1318
1326
|
return undefined;
|
|
@@ -1623,9 +1631,10 @@ function v1Bit(stamp) {
|
|
|
1623
1631
|
const SUSPENDED_ASK_ARGS_NOTE = "this request's tool arguments are not available on this surface — it was raised while no client was connected, " +
|
|
1624
1632
|
'so you are deciding without seeing them; deny it if you are not sure what it will do. ' +
|
|
1625
1633
|
'Edits are not accepted on this card: there is no original input to edit';
|
|
1626
|
-
function cardFactsOf(carrier, leg, opts) {
|
|
1634
|
+
function cardFactsOf(carrier, leg, opts, liveFacts) {
|
|
1627
1635
|
const c = carrier;
|
|
1628
1636
|
const full = leg !== 'generic';
|
|
1637
|
+
const live = leg === 'frame' ? carrier : leg === 'v1' ? liveFacts : undefined;
|
|
1629
1638
|
const asFrame = carrier;
|
|
1630
1639
|
const fromSubagent = full
|
|
1631
1640
|
? (() => {
|
|
@@ -1641,7 +1650,7 @@ function cardFactsOf(carrier, leg, opts) {
|
|
|
1641
1650
|
try {
|
|
1642
1651
|
let stream;
|
|
1643
1652
|
let blind = false;
|
|
1644
|
-
if (
|
|
1653
|
+
if (typeof opts === 'object' && opts !== null) {
|
|
1645
1654
|
stream = opts.streamArgs;
|
|
1646
1655
|
blind = opts.argsUnavailable === true;
|
|
1647
1656
|
}
|
|
@@ -1714,9 +1723,9 @@ function cardFactsOf(carrier, leg, opts) {
|
|
|
1714
1723
|
if (isWireRecordCarrier(pc))
|
|
1715
1724
|
out.probeCause = pc;
|
|
1716
1725
|
});
|
|
1717
|
-
if (
|
|
1726
|
+
if (live !== undefined) {
|
|
1718
1727
|
v1Bit(() => {
|
|
1719
|
-
const r = readProbeReason(
|
|
1728
|
+
const r = readProbeReason(live);
|
|
1720
1729
|
if (r !== undefined)
|
|
1721
1730
|
out.probeReason = r;
|
|
1722
1731
|
});
|
|
@@ -1737,18 +1746,18 @@ function cardFactsOf(carrier, leg, opts) {
|
|
|
1737
1746
|
catch {
|
|
1738
1747
|
realApprovalUnreadable = true;
|
|
1739
1748
|
}
|
|
1740
|
-
if (
|
|
1749
|
+
if (live !== undefined) {
|
|
1741
1750
|
v1Bit(() => {
|
|
1742
|
-
if (hasOwnStrictTrue(
|
|
1751
|
+
if (hasOwnStrictTrue(live, 'mandated'))
|
|
1743
1752
|
out.mandated = true;
|
|
1744
1753
|
});
|
|
1745
1754
|
v1Bit(() => {
|
|
1746
|
-
const w = readApprovalMandate(
|
|
1755
|
+
const w = readApprovalMandate(live);
|
|
1747
1756
|
if (w !== undefined)
|
|
1748
1757
|
out.mandate = w;
|
|
1749
1758
|
});
|
|
1750
1759
|
v1Bit(() => {
|
|
1751
|
-
const rc = readReadRootCandidate(
|
|
1760
|
+
const rc = readReadRootCandidate(live.readRootCandidate);
|
|
1752
1761
|
if (rc !== undefined)
|
|
1753
1762
|
out.readRootCandidate = rc;
|
|
1754
1763
|
});
|
|
@@ -1768,9 +1777,9 @@ function cardFactsOf(carrier, leg, opts) {
|
|
|
1768
1777
|
if (dlf !== undefined)
|
|
1769
1778
|
out.denialLimitFallback = dlf;
|
|
1770
1779
|
});
|
|
1771
|
-
if (
|
|
1780
|
+
if (live !== undefined) {
|
|
1772
1781
|
v1Bit(() => {
|
|
1773
|
-
const o = readAskOrigin(
|
|
1782
|
+
const o = readAskOrigin(live);
|
|
1774
1783
|
if (o !== undefined)
|
|
1775
1784
|
out.origin = o;
|
|
1776
1785
|
});
|
|
@@ -1789,14 +1798,14 @@ function cardFactsOf(carrier, leg, opts) {
|
|
|
1789
1798
|
out.classes = pair.classes;
|
|
1790
1799
|
}
|
|
1791
1800
|
});
|
|
1792
|
-
if (
|
|
1801
|
+
if (live !== undefined) {
|
|
1793
1802
|
v1Bit(() => {
|
|
1794
|
-
const g = readApprovalBoundGrants(
|
|
1803
|
+
const g = readApprovalBoundGrants(live);
|
|
1795
1804
|
if (g !== undefined)
|
|
1796
1805
|
out.boundGrants = g;
|
|
1797
1806
|
});
|
|
1798
1807
|
v1Bit(() => {
|
|
1799
|
-
const w = readApprovalClassifierNoRuling(
|
|
1808
|
+
const w = readApprovalClassifierNoRuling(live);
|
|
1800
1809
|
if (w !== undefined)
|
|
1801
1810
|
out.classifierNoRuling = w;
|
|
1802
1811
|
});
|
|
@@ -1811,7 +1820,7 @@ function cardFactsOf(carrier, leg, opts) {
|
|
|
1811
1820
|
if (leg === 'frame')
|
|
1812
1821
|
out.allowSessionCarried = true;
|
|
1813
1822
|
out.grantBinding = readApprovalGrantBinding(carrier);
|
|
1814
|
-
return withUnreadableEvidence(carrier, leg, out, realApprovalUnreadable ? ['requiresRealApproval'] : []);
|
|
1823
|
+
return withUnreadableEvidence(carrier, leg, out, realApprovalUnreadable ? ['requiresRealApproval'] : [], live);
|
|
1815
1824
|
}
|
|
1816
1825
|
export function approvalCardFactsOfV1(card) {
|
|
1817
1826
|
if (typeof card !== 'object' || card === null)
|
|
@@ -1832,9 +1841,19 @@ const MAX_RESPOND_NOTE_CHARS = 2048;
|
|
|
1832
1841
|
export async function surfaceToolApprovalFrameAndRespond(frame, respond, streamArgs, signal, lane, run) {
|
|
1833
1842
|
const receivedAtMs = Date.now();
|
|
1834
1843
|
const approvalId = frame.approvalId;
|
|
1835
|
-
const
|
|
1844
|
+
const carriers = openingFrameCarriersOf(frame);
|
|
1845
|
+
const entry = { frame, carriers, approvalId, identity: liveCardIdentityOf(approvalId, frame, carriers, run), respond, streamArgs, signal, lane, receivedAtMs };
|
|
1836
1846
|
return enterLiveCard(entry);
|
|
1837
1847
|
}
|
|
1848
|
+
function openingFrameCarriersOf(frame) {
|
|
1849
|
+
if (frame.type !== 'approval_request')
|
|
1850
|
+
return { body: frame, live: frame, leg: 'frame' };
|
|
1851
|
+
const card = frame.card;
|
|
1852
|
+
const pinned = Object.create(frame, { card: { value: card, enumerable: true } });
|
|
1853
|
+
if (isApprovalRequestFrameV1(pinned))
|
|
1854
|
+
return { body: pinned.card, live: frame, leg: 'v1' };
|
|
1855
|
+
return { body: typeof card === 'object' && card !== null ? card : {}, live: undefined, leg: 'generic' };
|
|
1856
|
+
}
|
|
1838
1857
|
function enterLiveCard(e) {
|
|
1839
1858
|
const { approvalId, signal } = e;
|
|
1840
1859
|
const held = liveCardHoldOf(liveFrameCallKey(approvalId));
|
|
@@ -1848,7 +1867,7 @@ function enterLiveCard(e) {
|
|
|
1848
1867
|
return joinOtherLaneHolder(e, other);
|
|
1849
1868
|
return holdLiveCard(e.identity, signal, async (hold) => {
|
|
1850
1869
|
const slot = {};
|
|
1851
|
-
const out = await presentToolApprovalFrameAndRespond(e.frame, approvalId, e.respond, e.streamArgs, signal, e.lane, hold, slot, e.receivedAtMs);
|
|
1870
|
+
const out = await presentToolApprovalFrameAndRespond(e.frame, e.carriers, approvalId, e.respond, e.streamArgs, signal, e.lane, hold, slot, e.receivedAtMs);
|
|
1852
1871
|
noteCallOutcome(slot, out);
|
|
1853
1872
|
return out;
|
|
1854
1873
|
});
|
|
@@ -1863,15 +1882,16 @@ async function joinOtherLaneHolder(e, other) {
|
|
|
1863
1882
|
return { kind: 'not_sent', lane: 'respond', cause: 'retracted', joinedInFlight: true };
|
|
1864
1883
|
return enterLiveCard(e);
|
|
1865
1884
|
}
|
|
1866
|
-
function liveCardIdentityOf(approvalId, frame, run) {
|
|
1867
|
-
const
|
|
1868
|
-
const
|
|
1885
|
+
function liveCardIdentityOf(approvalId, frame, carriers, run) {
|
|
1886
|
+
const body = carriers.body;
|
|
1887
|
+
const toolCallId = typeof body.toolCallId === 'string' && body.toolCallId !== '' ? body.toolCallId : undefined;
|
|
1888
|
+
const fromSubagent = isFromSubagent(carriers.body);
|
|
1869
1889
|
const bound = fromSubagent ? undefined : frameBindingOf(frame);
|
|
1870
1890
|
const source = bound ?? run;
|
|
1871
|
-
const ownRun = fromSubagent ?
|
|
1891
|
+
const ownRun = fromSubagent ? body.sourceTaskId : source?.taskId;
|
|
1872
1892
|
const taskId = typeof ownRun === 'string' && ownRun !== '' ? ownRun : undefined;
|
|
1873
1893
|
const sessionId = !fromSubagent && typeof source?.sessionId === 'string' && source.sessionId !== '' ? source.sessionId : undefined;
|
|
1874
|
-
const askSig = carrierAskSig(
|
|
1894
|
+
const askSig = carrierAskSig(carriers.body, carriers.live);
|
|
1875
1895
|
return {
|
|
1876
1896
|
approvalId,
|
|
1877
1897
|
...(toolCallId !== undefined ? { toolCallId } : {}),
|
|
@@ -1926,10 +1946,11 @@ function readApprovalCardClaimSignal(v) {
|
|
|
1926
1946
|
export function claimApprovalCard(identity, options) {
|
|
1927
1947
|
return claimApprovalCardFor(readApprovalHolderIdentity(identity), readApprovalCardClaimSignal(options));
|
|
1928
1948
|
}
|
|
1929
|
-
async function presentToolApprovalFrameAndRespond(frame, approvalId, respond, streamArgs, signal, lane, hold, ledgerSlot, receivedAtMs) {
|
|
1930
|
-
const
|
|
1949
|
+
async function presentToolApprovalFrameAndRespond(frame, carriers, approvalId, respond, streamArgs, signal, lane, hold, ledgerSlot, receivedAtMs) {
|
|
1950
|
+
const bodyToolCallId = carriers.body.toolCallId;
|
|
1951
|
+
const frameToolCallId = typeof bodyToolCallId === 'string' && bodyToolCallId !== '' ? bodyToolCallId : undefined;
|
|
1931
1952
|
const decidedByReading = decidedByReadingSnapshotOf(lane);
|
|
1932
|
-
const facts = cardFactsOf(
|
|
1953
|
+
const facts = cardFactsOf(carriers.body, carriers.leg, { streamArgs, ...(lane?.argsUnavailable === true ? { argsUnavailable: true } : {}) }, carriers.live);
|
|
1933
1954
|
const argsNotRealInput = facts.argsUnavailable === true;
|
|
1934
1955
|
const ruleOffers = facts.ruleOffers;
|
|
1935
1956
|
if (argsNotRealInput && lane?.argsUnavailable !== true && facts.wireNote !== undefined) {
|
|
@@ -1939,7 +1960,7 @@ async function presentToolApprovalFrameAndRespond(frame, approvalId, respond, st
|
|
|
1939
1960
|
...facts,
|
|
1940
1961
|
callKey: liveFrameCallKey(approvalId),
|
|
1941
1962
|
signal: hold.cardSignal,
|
|
1942
|
-
...approvalWindowKeysOf(frame, { windowIsCurrent: lane?.windowIsCurrent === true, receivedAtMs }),
|
|
1963
|
+
...approvalWindowKeysOf(frame, { windowIsCurrent: lane?.windowIsCurrent === true, receivedAtMs, ...(carriers.leg === 'generic' ? { unknownShape: true } : {}) }),
|
|
1943
1964
|
});
|
|
1944
1965
|
if (hold.superseded !== undefined) {
|
|
1945
1966
|
hostLog('debug', `liveToolApprovalWire: ${approvalId} was settled by the engine while its card was up${hold.superseded.parked ? ' (parked)' : ''} — card withdrawn; ` +
|
package/dist/steering.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface EngineTaskStatusAttachment {
|
|
|
11
11
|
status: 'pending' | 'running' | 'completed' | 'failed' | 'killed' | 'parked';
|
|
12
12
|
description: string;
|
|
13
13
|
deltaSummary: null;
|
|
14
|
+
read?: string;
|
|
14
15
|
}
|
|
15
16
|
export type SteeringRenderable = SteeringInjectedAttachment | EngineTaskStatusAttachment;
|
|
16
17
|
export declare function steeringLabel(source: string): string;
|
package/dist/steering.js
CHANGED
|
@@ -25,37 +25,45 @@ const PHRASE_TO_STATUS = [
|
|
|
25
25
|
['failed', 'failed'],
|
|
26
26
|
['killed', 'killed'],
|
|
27
27
|
];
|
|
28
|
+
const BACKGROUND_TASK_LINE = new RegExp('^- \\[([^\\]]+)\\] Task "([\\s\\S]*)" (' +
|
|
29
|
+
PHRASE_TO_STATUS.map(([phrase]) => phrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|') +
|
|
30
|
+
')(?: — ((?:(?!" )[\\s\\S])*))?$');
|
|
28
31
|
function parseBackgroundTaskLine(line) {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
32
|
+
const m = BACKGROUND_TASK_LINE.exec(line.trim());
|
|
33
|
+
if (!m)
|
|
34
|
+
return null;
|
|
35
|
+
const taskId = m[1];
|
|
36
|
+
const description = m[2];
|
|
37
|
+
const status = PHRASE_TO_STATUS.find(([phrase]) => phrase === m[3])?.[1];
|
|
38
|
+
if (taskId === undefined || description === undefined || status === undefined)
|
|
39
|
+
return null;
|
|
40
|
+
const read = m[4];
|
|
41
|
+
return {
|
|
42
|
+
type: 'task_status',
|
|
43
|
+
taskId,
|
|
44
|
+
taskType: 'local_bash',
|
|
45
|
+
status,
|
|
46
|
+
description,
|
|
47
|
+
deltaSummary: null,
|
|
48
|
+
...(read !== undefined ? { read } : {}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function rowBoundariesTrusted(lines) {
|
|
52
|
+
let last = lines.length - 1;
|
|
53
|
+
while (last >= 0 && (lines[last] ?? '').trim() === '')
|
|
54
|
+
last--;
|
|
55
|
+
for (let i = 0; i < last; i++) {
|
|
56
|
+
if (/^- \[[^\]]+\] Task "[^"]*$/.test((lines[i] ?? '').trim()))
|
|
57
|
+
return false;
|
|
50
58
|
}
|
|
51
|
-
return
|
|
59
|
+
return true;
|
|
52
60
|
}
|
|
53
61
|
export function steeringInjectedToAttachments(source, preview) {
|
|
54
62
|
if (source === 'background_tasks') {
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
.map(parseBackgroundTaskLine)
|
|
58
|
-
|
|
63
|
+
const lines = preview.split('\n');
|
|
64
|
+
const tasks = rowBoundariesTrusted(lines)
|
|
65
|
+
? lines.map(parseBackgroundTaskLine).filter((t) => t !== null)
|
|
66
|
+
: [];
|
|
59
67
|
if (tasks.length > 0)
|
|
60
68
|
return tasks;
|
|
61
69
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
| 项 | 值 | 真源 |
|
|
21
21
|
|---|---|---|
|
|
22
|
-
| 本包 | `@sema-agent/client-core` **0.104.0**(本批发布版 = **minor**(型面 BREAKING):换钉到引擎 7.60.0(引擎 / 内核 7.60.0 · 类型包 30.0.0 · 配置契约 15.1.0;生成表重生成)· MCP 失败类多一词 `host_refused` · 状态帧座位位 `seat` · 值级端口第二十一件 `ruleNameCovers`(名册一步覆盖读法)· 停驻终局结果帧恒走错误臂 / `-p` 出路句只在 `errors[0]`(§132 RA-1 / RA-2)· 权限三桶来源表组内序按写序(PO-1)· 停驻 / 活卡审批卡工具入参真源 = 记录侧那一份 + `argsRewritten`(AK-1 / AK-2,同一只读器)· 钩子车道类依据改读引擎真批准位门类集(HK-2)· 服务端 7.139.0 提货:换绑前态改读执行放置读面(SV-2)· 会话行条件写 `rowTag` / `expectedRowTag`(SV-1)· 换绑 409 子代形(SV-3)· 后台行子会话 id(SV-4)· 宿主设置源三处成文(HS-2a / HS-2b / XA-7a);型面 BREAKING:`CoreValuePorts` 必填成员 +1(`ruleNameCovers`)· `MCP_FAILURE_KINDS` 闭集变宽 · `DeviceSessionBindingOutcome` 臂集变(+`unbound` / `unsupported`,−`lane-absent`;读面切片换 `client.sessions`)· `DeviceBinding` / `DeviceSessionBinding` 不再转出、`boundAt` 退役 · 孤儿型 `ManagedPolicyReading` 退出根入口(RL-290)· RL-310 / 311 / 313 随类型包到货退役;公面 2010 → 2014(+`BRAIN_STATUS_SEATS` / `ruleNameCovers` / `sessionRowTagOf` / `sessionRowPatchRefusalOf`);依赖钉 core `^7.60.0` / mods-kernel `7.60.0` / sdk `^30.0.0` / settings-schema `^15.1.0`;peer sdk `>=23.1.0` / mods-kernel `>=7.54.0`(可选);读点逐端见 §132;§132)。上一版 0.103.0 = **minor**(型面 BREAKING)(一次重锚到引擎 7.59.0(引擎 / 内核 7.59.0 · 类型包 28.0.0 · 配置契约 14.8.0;生成表重生成)· MCP 授权失败记录一只读口四处过境 · 两只新通知事实读器 · 状态帧等待两位 · 工具结果行改参记录与改参句 · 服务器名 `remote-` 前缀律 · 决断拒收「行完整性」只认正证据 · 抹除证明 v2 · 整工具规则候选 · 服务端 7.137.0 随附件(§131 PK-10)· 结果帧成功臂不再带 `errors[]`(§131 LG-1)· 换钉当拍重钉(v1 卡读引擎卡词 `approvalCard`;姿态来源词表五词 +`lane`)· 六只派生窄视图退役;型面 BREAKING:请求键 `promptProfile` 换布尔 `promptLean`(RL-300)· 六导出退役(RL-179 / 192–196,公面 2016 → 2010)· `POSTURE_SOURCE_WORDS` 四 → 五词 · 成功臂 `errors[]` 删;依赖钉 core `^7.59.0` / mods-kernel `7.59.0` / sdk `^28.0.0` / settings-schema `^14.8.0`;peer sdk `>=23.1.0` / mods-kernel `>=7.54.0`(可选);读点逐端见 §131;§131)。上一版 0.102.0 = **minor**(型面 BREAKING(窄))(会话送后台四读口归包(能力位读数 · 连线句柄与本包亲手开流 · 交接资格一只判官 · 交接动词与后台观看)· 会话级思考开关归包(状态机 + `reasoningEffort` 单铸点投影 + 座位动词 / 能力位 / 会话行位)· mods 三类用户面座位(注册卡 / 行旁拒句 / 行旁代答句)+ 桌面装载座位的读口与句口 · 会话映射的引擎命名空间键含规范化路径(经中继的多台引擎不再串键)· 配置地址展示口两读法按位置对应取舍(单斜杠 / 零斜杠写法不再把口令显示成路径;修复轮三)· 出包文案卫生;型面 BREAKING(窄):`fireInteractiveInterrupt(runs, taskId, opts)` 新可选位 `wire` 与新臂 `{ kind: 'withheld' }`;依赖钉不动(core `^7.55.0` / sdk `^24.0.0` / settings-schema `^14.4.0`;peer sdk `>=23.1.0`,支持底线不动);读点逐端见 §130;§130)。上一版 0.101.0 = **minor**(型面 BREAKING)(提货引擎 7.54.0(开发依赖 W1 换钉 `^7.54.0` 与生成表重生成,后续 mods 内核车换钉 core `^7.55.0` / mods-kernel 7.55.0 同号,sdk `^24.0.0` / settings-schema `^14.4.0`;peer sdk `>=23.1.0` 与支持底线 server 7.129.1 / core 7.51.2 / sdk 23.1.0 不动)+ 清账三波(主题波 B-U / B-X / B-D 与 W 车)+ 发版修复轮十六车(修到干净)· MCP 服务器名独立判口 · 引擎名册按对端分组投影 · 收紧桶对端段 `*` 原样 · 值级端口第 19 / 20 件(`ANTHROPIC_DEFAULT_BASE_URL` / `readToolFaces`)· 宿主设置源 `HostSettingsSource` 四件 · 提交身份与请求车道唯一派生 `requestLaneOf` · HITL 决断失败一只直交读口与安全停一位 · 型面 BREAKING:`AllowDenyPolicyOptionsView.scope` 退出 / `SettingsPort` 退役(RL-252)/ `engineAcceptsCatalogDefault` 退出读数型(RL-183)/ `CoreValuePorts` 必填成员 +2 / `HooksWirePlan.httpPolicyDrops` 必填 / 决断拒收分码第五词 `grant_changed` / `-p` 车道 resolver 改收值(读点逐端见 §129y);§129)。上一版 0.100.0 = **minor**(型面 BREAKING)(提货版 + 清账三程 —— 提货 server 7.132.0 / core 7.53.0 / settings-schema 14.1.0 / sdk 24.0.0(peer sdk `>=23.1.0`;支持底线 server 7.129.1 / core 7.51.2 / sdk 23.1.0 不动)· 接线回执第十四段 `mods[]` / 提示词装配清单 v3 / 压缩开始帧 → `system/status` compacting · prepare 拒启码表 + 帽与 hooks 拒读口(`budget_exceeded`)+ 沙箱码臂 · 工具目录第四态 `request_only` · 本地会话 API +2 动词 · 请求面 MCP 条目判官同设置契约 14.1.0(名字 / 传输 / 身份头单判官,逐条披露 `projectMcpConfigs().dropped`)· 任务进度 `seq` 代际 + 子代身份单源 · 展示出口字节边界与主机区域 · 凭据键路径 / 工具旗名 / 注入车道告知 · 型面 BREAKING:`compaction_started` chrome 臂 / `MCP_CAPS` `SKILL_CAPS` 退出公面 / RL-153 `continuesPark` 硬退 / RL-156 `EventLegPorts.perStream` / RL-172 `scenarioAssignmentUnknownFromError`(0.100.0 退出公面,已退役;读点逐端见 §128y);§128)。上一版 0.99.0 = **minor**(型面 BREAKING)(提货版 + 清账二程 —— 提货 server 7.131.0 / sdk 23.1.0 / settings-schema 13.0.1 / core 7.52.0(peer sdk `>=23.1.0`)· 请求层附件席位 `userAttachments`(四态读器 + 装配只发整文件完整文本条目)· MCP 面板判别联合(`servers` 臂 / `scenarioRefusal` 拒因臂,BK-1)· `userInvokedSkills` 槽位 · `allowTools: []` 原样上体 · 审批卡口单路径(`claimApprovalCard` 中止安全登记 + 进程级已结表 + `approvalFrameContextOf`,两族去重归包)· 会话规则逐条扣留(`sessionPolicyDeliverable` 改读引擎 `readRuleEntry`)· 凭据面百分号解码视图 · 不可信标量清洗口 `cleanUntrustedScalar` · 问类规范序筛 · hooks 预检构建期抄本 + 设置文件坏形判官 · 首 token 存活探针合一(`modelCapabilityProbe` / `PROBE_VERDICTS`)· `-p` 车道重试 / 模型服务状态帧(`system/api_retry` + 超集帧 `_sema_model_status`)与合成 API 错误行三只机读位 · 文案单源五批进消息目录 + 路由缺口句 / 人答臂 / 宿主队列三值句口 · 能力缓存变更订阅 / 嵌套位读口 / 作废重探 · 抛出物读法收口与「找不到」三形 · 会话 id 规范口 · 设备面 / 引擎目标席位与座位只读动词 `readSessionMcpPanel` · 退役账到期硬退 RL-151 `STOP_CONFLICT_CODES` + 三只手抄 agent 帽常量退出公面(BK-4)+ `PLUGIN_HOOK_REASONS` +3(BK-5)+ `CoreValuePorts` 新端口两只(BK-9)· 支持底线 server 7.129.1 / core 7.51.2 不变 · 发版复审两腿修复;§127)。上上版 0.98.0 = **minor**(型面 BREAKING)(清账版 —— 退役账在册过渡臂与同轴孪生整批退役(型面 BREAKING 三组:typeshadow 改名 / 转口、hitl 旧五型三口 → `ApprovalResolution`、text 句表单源的旧句口)· 句表单源(持久规则人话五口 · 卡面三行说明读口 · 崩溃遗留逐行句 · 结局成因一行句表 · `policy` 出身句补半边 · 退出码 137 归因句 · 工具结果卡「未执行」位)· 事件腿组合器 `composeEventLeg`(三腿闭集、拒收 / 绑定 / HITL 分派)· 引擎地址一处真源 · 流式提交同键有界重开 · 抛出物读法单源 · turn 失败呈现与重连预算(第一程)· 重试行人话单源 `retryStatusNotice` · 会话规则收紧 / 撤销闭集 · 接替卡去向 `priorAnswerOutcome` · `LocalSessionRecord.parked` 三值 · 内建子代理名表 `BUILTIN_SUBAGENT_TYPES` · 提货 server 7.129.1 / sdk 23.0.2 / core 7.51.2(peer sdk ^23.0.2)· 支持底线 server 7.129.1(C-R498 ②,收回 7.126–7.128)· 退役账到期九行硬退(C-R498 ①)+ RL-117 / 119 / 142–144 / 164(C-R500:deny 侧扣送与目录省略照删)· 授予绑定三态按载体读(CC-660;技能工具不给整工具「以后别问」)· 发版复审两轮两腿修复;§126)。更早 0.97.1 = **patch**(代理工具清单只投可能有工具应答的名 CC-729 · 本跑声明的 MCP 服务器读口 `engineToolDirectoryOf` 与 run 级 `excludeTools` 判官 CC-730;零型面 BREAKING;§125)。上上版 0.97.0 = **minor**(型面 BREAKING),终端 1.0.149 对接版:支持底线三件同号 server 7.126.0 / core 7.49.5 / sdk 21.1.0、peer sdk >=21.1.0 · sdk 21 提货(团队编排四键退役 / 审批卡词八词闭集 / 终局 detail 四臂 / 提交幂等 409 / allowTools)· 门种常量转口 sdk(ASK_PARK_GATE_KINDS 退役)· 抛出物机读位只认自有数据位、extra 只认内建 Error 类形 · 码认领先于已决 · 总缓存落地三态与 29 读器 unreadable 臂 · 舰队账本 / 审批已结表单源 · 退役 isFsApprovalGate(0.97.0 退出公面)/ isEngineRefusedToolName(0.97.0 退出公面)/ rememberRefused / ReplayPendingBasis.settled / 改名表;§124)。上一版 0.96.0 = **minor**:**minor**,终端 1.0.148 对接版:支持底线三件同号 server 7.125.0 / core 7.48.0 / sdk 20.0.0 · 设置契约 12 提货 · 清账(0.96.0 窗内欠账按票收口)· 单一真源收口(规则工具名判官 / 门种 → 决断腿一张表 / 结局判法 / 总缓存落地写点 / hooks matcher 契约读法 / 文件历史没搬句与收紧闸)· 会话行改名置顶座位动词 · 服务商拒收分类词;peer sdk 地板 >=20.0.0;型面 BREAKING = CoreValuePorts 换一件(−RETIRED_TOOL_NAMES +judgeRuleToolName)· hookMatcher accepted.names 退役 · 根入口删除名(`retiredToolNames`(0.96.0 退出公面)/ `CONFIG_REFUSAL_CODES`(0.96.0 退出公面)/ 23 只过渡口,§2z)· 终局读数带 replay 位 · 舰队行 workspaceSnapshot 只认 failed;§123)。上一版 0.95.0 = **minor**:**minor**,终端 1.0.147 对接版:引擎 7.48 / 服务端 7.124 / 设置契约 11 / sdk 19 提货 · 面板行归约口 · 能力位读器族与终态词表收口 · 审批成因闭集与排空期重开 · 审批卡跨腿持有 · 技能工具表随能力位上 wire · 0.95.0 窗内欠账按票收口;peer sdk 地板 >=19.0.0;型面 BREAKING = 终态词表 / 谓词改名带属主 · absent 退词 · 七条过渡臂退役;§122)。上一版 0.94.0 = **minor**:终端 1.0.146 对接版:引擎 7.45 – 7.47 / 服务端 7.120 – 7.122 / 配置层 10 / sdk 18.1 提货 · 请求装配与审批判定归包 · 到期登记物按预告硬删 · 凭据遮蔽两件 · 附件信封外套标签;peer sdk 地板 >=18.1.0;型面 BREAKING = RX 五处硬删 · absent 退词 · 七条过渡臂退役 · 必填成员增加三处 · 八处闭集增员;§121)。上一版 0.93.1 = **patch**:耐久停驻审批的决断口单一持有者 —— `surfaceFsApprovalAndDecide` 对同一把审批身份键(行会话 + run + `toolCallId ?? boundCallId`)同时只许一次决断在路上,后到者拿同一结局的拷贝 + `joinedInFlight: true`、自己不呈卡不发决断,任一路中止 = 这一只决断被中断(CC-491)· 活卡 respond 回 `202 parking_in_progress` 读成「停驻中、这一发没生效」:结局 `{ decision: 'unresolved', parking }`、判别口既有 `unsettled` 臂新 cause `parking_in_progress`、包替用户上屏一句、不重发不去键不换名(CC-492);`kind` 联合零破坏,`ApprovalUnsettledCause` 闭集 +1 词(对 cause 做 `never` 穷举的写法编译红一次);`FsApprovalOutcome` 四臂 +1 可选位、`ToolApprovalFrameOutcome` +1 可选位;根公面运行期导出 1485 不变、公面类型名 +1;peer sdk 地板 `>=12.0.1` 不动;服务端夹具现役 7.119.0 不动;§120)。上一版 0.93.0 = **minor**:到期登记物硬删八组(型面 BREAKING;根入口 −21 名;CC-431)· device 车道读器扩到车道三位与 `management` 三态字面、新判据 `deviceLaneOpen`(型面 BREAKING;CC-454)· 审批决定口出处键换名:能力位 `approvalDecidedBy` 读器 / 唯一决定函数 `decisionAttributionKeyOf` / 退役键拒绝臂 `retired_key` / 换名恰重发一次(CC-403 并 CC-451 ②)· 能力位 `permissionModes` 读器与 `dontAsk` 按位发词(CC-451 ③)· 终局 `blocked` 的机读成因 `detail` 与会话规则记录读不到句的第十六句(CC-364)· 连接失败现场判读口 `transportFailureScene`(CC-363)· 交出后台的引擎 Bash 登记 `detectEngineBgShellDetach`(CC-331)· 子代 tick 模型位与 `/health` 配置落地读器 `readEngineConfigApplyState` / 漂移判决 `configDriftVerdict`(CC-323)· 引擎装机 core 版本三态口 `coreVersionTier`(CC-355)· 停泊赎回启动失败成因词位 `startupCause`(CC-244)· workflow 子代审批决定口两只 409(CC-430)· MCP 重拨 `unsettled` 判决臂(CC-429)· 联网搜索密钥头值判臂与来源 `host`(CC-428)· 多成因措辞存量两批(CC-120 / 423 / 422)· 活卡帧键镜像 +3(CC-433)· 会话规则可送判定对空对端段名收紧(CC-437)· 场景指派悬空 503 读口(CC-451 ⑤)· 重试覆盖层 429 不再渲成额度耗尽(CC-473)· 展示出口先洗后折(CC-472)· 弃用预告一名三位(CC-309 / 431)· 开发依赖引擎 `~7.44.0` 与生成表(CC-427)· 其余 CC-242 / 301 / 295 / 365 / 374;型面 BREAKING 两处 + 四处联合各 +1 员 + 一名三位弃用预告;根公面 1483 → 1485(+23 −21);测试钩 69 → 71;peer sdk 地板 `>=12.0.1` 不动;服务端夹具现役 7.119.0(老一代 7.106.0 – 7.118.0 十一份)、sdk 17.1.0 作下一代见证位;§119)。上一版 0.92.0 = **minor**:自动答复判定收成一只 `automaticAnswerVerdict`(CC-368)· 卡面披露键两代读 `allowRuleShadow`(CC-401)· steer 档位经包 `steerBodyOf` / `fleet.steerPriority` / `readSteerReceipt`(CC-374 并 CC-353)· 能力位读器读数随代际自动失效(CC-377)· 服务端 7.116.0 / sdk 16.2.0 提货 + `CoreValuePorts` +1 必填(CC-371 / 370)· 会话规则可送判定过规则编译器与协议名段判定(CC-381)· 支持底线抬到 server 7.106.0 / core 7.35.2(CC-352 / 380)· 其余 CC-367 / 369 / 373 / 376 / 379 / 366 / 178 / 295 / 407;型面 BREAKING 四处 + 七名弃用预告;根公面 1429 → 1483(+56 −2);测试钩 68 → 69;服务端夹具现役 7.116.0(老一代 7.106.0 – 7.115.0 八份)、7.117.0 与 sdk 16.3.0 作下一代见证位;§118)。上一版 0.91.0 = **minor**:steer 拒收处置句单源 `steerRefusalAdviceOf` / `ControlSafetyError.advice` · `.status` / `steeringRefusedBeforeEngine`(CC-307)· `abortableSleep` / `isAlreadyResolvedFailure` 上根入口(CC-317)· 引擎闭集表 `ASK_EVIDENCE_ABSENCE_VALUES` / `SYSTEM_INJECTION_PRIORITIES` / `READ_DENY_BUILTIN_TIERS` · `READ_DENY_DEFAULT_TIERS` + `parseReadDenyBuiltinTiers` / `MODE_ARBITRATION` + `askSurvivesStandingAnswer`(0.94.0 退出公面)(CC-318 / 327 / 322 ①)· 会话历史 tool_use 错配一族:`_sema_provider_rejection_resend` 归合成终局行、错配键 `rewindOffered`、`readToolHistoryMismatchKey` / `ToolHistoryMismatchRowKey`、`toolHistoryBadTurnSentence`(CC-303 / 304 / 305 / 309 ②)· 投递账本记录 `by` / `share` 与 `deliveryShareOf` / `droppedKeyCount`、`attempted` 的 `{ generation }` + `undeliveredInGeneration`(`PromptDeliveryLedger` 接口 +3 必有成员 —— 型面 BREAKING 第一处;CC-293 / 334)· 崩溃遗留通告 `crashConvergedNotice` / `crashConvergedNeedsHumanSentence` / `NEEDS_HUMAN_REASON_ORDER`(CC-310)· `permissionsDeclarationReport` + `PERMISSIONS_KEPT_REASONS` 与 `PermissionsDeclarationInput.settingsRead` 必填(型面 BREAKING 第二处;CC-314)· `engineCapsSettled(url, { withinMs })` 返回型窄变 `Promise<'settled' | 'timed_out'>` + `disableSkillsDeclarationSettled`(CC-311)· `hookMatcherVerdict`(CC-306)· `sessionPolicyReadNotice`(CC-328)· `inheritEnvRefusalContent` 首段改口(CC-336)· `attachmentsSubmitVerdict`(CC-337)· 展示出口 YAML 块标量整块一枚记号(CC-340)· `mintUserAttachmentEnvelope` / `encodeHumanTurn` / `deliveredUuidsOf` / `imageVisionOf` + 附件席位能力位读器占位形(CC-315 / 297 子集)· 服务端 7.115.0 / sdk 16.1.0 提货:「只续已有会话」按码优先、`checkpointUnsupportedVersionFromError` / `checkpointUnsupportedVersionContent`、`hookMatcherRefusalFromError`(0.103.0 退出公面)、活卡帧与耐久行 `probeReason`、接线回执 `fleet` 段 + `WiringManifestFleetView`(CC-339)· 登记物整治:`permissionRuleIssueDetail` 第三参分句(CC-359)、`rewindSpecForMode` 第三参按纪元位取舍(CC-345 ①)、HITL 桥两处型面 additive 与补偿表 `retireOn` 改台账行号(CC-343)、已知限制档清账(CC-349)· 开发依赖 settings-schema `^8.0.0`(CC-308,不出包)· 根公面 1397 → 1429(+32,零删名);测试钩 63 → 64;公面类型名 964 → 997;超集键 +2(`_sema_provider_rejection_resend` / `_sema_fleet`);peer sdk 地板 `>=12.0.1` 不动;服务端夹具现役 7.115.0(老一代八份)、sdk 16.1.0 进地板见证矩阵;§117)。上一版 0.90.0 = **minor**:引擎 7.40.1 / 服务端 7.113.0 · 7.114.0 / sdk 16 探针提货(通告码册 86 → 85、`readLegacyModeSeedMigrated` 退出公面、`attachments.planModeReminder` 退役、`PromptDeliveryLedger` +2 必有成员 —— 型面 BREAKING 三处;CC-291 / 300)· 云控制面子路径五名(CC-136)· 文件历史一句五态判定与声明事实账本(CC-294)· hooks matcher 工具别名读口(CC-298)· 机读支持底线与 `engineVersionTier`(CC-299)· `settings.permissions` 三桶装配口与 allow 能力位(CC-302)· 「改了重发」错配让位与错误载体铸口(CC-309 ①)· `AttachmentsSpecRefused`(CC-316)· 能力位读数冻结;根公面 1379 → 1397、peer sdk 地板 `>=12.0.1` 不动;§116。上一版 0.89.0 = **minor**:引擎 7.38 提货(开发依赖换钉引擎 `~7.38.2`;通告码册 81 → 86、引擎铸方表接手服务端自铸码的受众,`SERVER_NOTICE_AUDIENCE` 🔧 退出公面(型面 BREAKING,逐名见 §2z);工具轮不完整读器 `readToolTurnIncomplete`、用户输入没被用上读器 `readUserInputUndrained` 与一句 `userInputUndrainedNotice`(`EngineNoticeFactsCode` +3 员,穷尽分支的端编译期红);终局服务商拒绝详情 `readRunTerminal` 的 `failed.detail` 与「改了重发」判定口 `providerRejectionResend`(0.95.0 退出公面);steer 账本 503 `ledger_unavailable` 一张码表三条腿(`ControlSafetyCode` +1 员、子代 steer 结局联合 +1 臂,穷尽分支的端编译期红);省略成因短语口 `taskRequestOmissionCausePhrase`(0.98.0 退出公面);CC-282);审批四面问类两位 `askClass` / `classes`(三型各 +2 可选位;CC-284);请求键 `disableSkills` 与片段口 `disableSkillsDeclaration`(车道表 45 → 46 行;CC-277);hooks 设置来源条目的唯一执行者与本端跳过口 `settingsHooksKeptLocally`(`PLUGIN_HOOK_REASONS` +5 词、`PLUGIN_HOOK_EXCLUSION_REASONS` +1 词,穷尽分支的端编译期红;CC-287);凭据被拒判官 `isReadCredentialRefusal` 上根入口(CC-289);服务端 7.111.0 两项(接线回执新段 `instructions`、子代转向成功结局 `messageId`;CC-282 余项)与展示出口无标签 `Token <值>` 形照遮(CC-290);根公面 1372 → 1379;测试钩 62 不变;公面类型名 942 → 952;超集键 +1(98 → 99,`_sema_instructions`);peer sdk 地板 `>=12.0.1` 不动;§115)。上一版 0.88.0 = **minor**:展示出口凭据面一次扫描(带凭据的输入上输出字节变、干净文本逐字节同、一轮即不动;CC-247);崩溃收敛 `cause` 认第二个词 `shutdown_before_park`(`CrashConvergedRow.cause` 型联合 +1 词,穷尽分支的端编译期红;CC-218);服务端自铸通告 `server.model_unreachable` 入受众表与事实读器 `readModelUnreachable`(CC-270 ①);开发依赖换钉引擎 `~7.37.1`、放行原因闭集镜像 `GATE_MODE_RELEASE_REASON_WORDS` / `isGateModeReleaseReasonWord`、修复通告事实读器 `readToolTurnRepaired`、通告码册 80 → 81(`EngineNoticeFactsCode` +2 员;CC-272);会话所有者自助记忆抹除 `eraseSessionMemory` / `sessionMemoryEraseOutcome` + 三只闭集镜像(CC-264);registry 同一个 409 的两义判别 `classifyRegistryConflict`(0.95.0 退出公面) / `isScopeGoneError`(0.95.0 退出公面)(CC-280);请求键 `requireExistingSession`(车道表 44 → 45 行)与被拒读口 `requireExistingSessionRefusalFromError` / 一句 `requireExistingSessionRefusalContent`(CC-281);投递事实账本 `createPromptDeliveryLedger` + 两只按消息行的读口 `promptKnownUndelivered` / `withoutUndeliveredPrompts`(判据 = 引擎为这次提交建了 run;CC-271);plan 决断台账:离门证据结掉、还没被认领的登记由投递口认领原笔(CC-278);`wiring_manifest` 帧 `fileHistory` 段(`WiringManifestChromeEvent.fileHistory?` / `WiringManifestView.fileHistory?`,超集键 `_sema_fileHistory`;CC-279);根公面 1356 → 1372;测试钩 62 不变;公面类型名 922 → 942;超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§114)。上一版 0.87.0 = **minor**:会话历史 tool_use 错配的自救出路 —— 合成终局错误行超集键 `_sema_tool_history_mismatch`、`EmitContext.offersRewind?` 声明面出路句与连续次数句、根入口两只纯函数 `classifyToolHistoryMismatch` / `resolveToolHistoryRewindTarget`(CC-268);崩溃收敛 needsHuman 行的闭集因由位 `needsHumanReason`(CC-269);停车 fail-soft 同步终帧与结果帧的真因超集键 `_sema_park_failed_reason`(CC-273);workflow 活动台账 / 监视器源的 `authToken` 收取值函数、连线身份按凭证来源认(CC-274);`armDetachCancel` 入参 `authToken` 收取值函数、取件口每调现读(CC-275);chrome 臂 `suspended_reopened`(`ChromeEvent` +1 臂,穷尽分支的端编译期红;CC-276);根公面 1354 → 1356;测试钩 62 不变;公面类型名 922 不变;超集键 +2;peer sdk 地板 `>=12.0.1` 不动;§113)。上一版 0.86.0 = **minor**:引擎 7.34.0 提货两代读法 —— 事实表第二批构建期生成、`GATE_DENIED_BY_WORDS` 两代并集十一词(元素型 `GateDeniedByWord`,`mode` 专句)、门记录权限模式两臂与读口 `gateModeRelease`、通告码册六码与六只事实读器(`EngineNoticeFactsCode` +6)、`STRUCTURED_DETAIL_TYPES` +`read_unestablished`、本人规则店读不出两代读法、`shell_gate_tighten` 改句(CC-249 / CC-245 / CC-230);服务端 7.105.0 提货 —— 会话规则写口拒名码 `rules.legacy_tool_name` 的具名结局与 `isRulesRefusalCode`(CC-251)、门前只读路 401 的 `unauthorized` 态与 `READ_CREDENTIAL_NOT_ACCEPTED_NOTICE`(CC-252);请求键 `approverPosture` 退役、构造期按名拒,两个运行期名字退出根入口(逐名见 §2z)(CC-253);`AskUnresolvableFactsView.remedy?`(CC-254);开发依赖引擎 `~7.36.0`(CC-255 换钉 7.35.0,`CONFIG_REFUSAL_CODES`(0.96.0 退出公面) 8 → 17;CC-261 再换钉 7.36.0),通告码册 73 → 80;`adapt()` 错误信封不再回落读旧名 `result`(CC-221);服务端 7.106.0 提货 —— caps `store` / `centerWiring` 窄读口、SQL 姿态两代读、计费入口 503 `fleet.lease_unavailable` 读口与一句话(CC-250),`executionLane.isolated` 与「本机无 OS 沙箱」判定(CC-256),请求键 `inheritEnv` 与版本闸片段口、两只拒按码出句(CC-257),权限规则表超帽坏项读口与一句(CC-262),工具声明拒按码认领(CC-263),请求体键形拒两张键表读口(CC-265);`-p` 首帧工具来源超集键 `_sema_tools_source` / `_sema_tools_fallback_reason` 与铸口 `printInitToolFaceSupersetKeys`(CC-266),三张估计工具表改为常驻(CC-267);根公面 1310 → 1354;测试钩 60 → 62;公面类型 891 → 922;超集键 +2;peer sdk 地板 `>=12.0.1` 不动(sdk 12.0.1 / 13.1.0 / 14.0.0 / 15.0.0 下本版 `.d.ts` 严格编译均零错误);§112)。上一版 0.85.2 = **patch**:自愈重开两只失败结局带 `errorCode`(这一次重开放弃所依据的那一发失败请求的外层 wire 码,present-iff;判定形不带),重开判决不成功臂 +`_sema_errorCode`(宿主可选铸;宿主重开口抛错时本包铸)(CC-260);自愈腿读错误对象与成功应答记录上的各位收进保护(读不出按缺席,不再 reject;`atMostOnceFailureClass` / `readSteerDelivery`(🔧 0.92.0 退出公面)/ `readSteerReceiptStatus`(🔧 0.92.0 退出公面)不再抛);根公面 1310 不变;公面类型名不变(两个已导出型各多可选位);超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§111)。上一版 0.85.1 = **patch**:请求装配回执省略成因的终端用户向句表 `TASK_REQUEST_OMISSION_CAUSE_NOTICES` 与取句口 `taskRequestOmissionCauseNotice`(与接入方那只 `taskRequestOmissionCauseDetail` 同源于同一成因闭集、逐词不同句;表外 / 读不出 ⇒ 一句通用句,不抛、不回显),接入方那张句表的字面量补挂 `satisfies`(CC-248);plan-review 重开口在「这个会话没有接能显示卡的界面」那一形上答 `{ reopened: false, _sema_noPresentationSurface: true }`,自愈结局两臂带 `noPresentationSurface`、自愈行五句补一句成因,重开前提(宿主为该会话键订阅问题帧端口)成文(CC-258);自愈腿读宿主重开判决收进保护(某一位读不出按缺席,不再 reject),宿主日志 / 探针口抛错不再改变判决;多会话宿主的按会话呈现回执登记口 `registerArmedGateFromQuestionIdFor` 回到根入口(0.72.0 退出公面的名字复活;CC-259);根公面 1307 → 1310;公面类型名不变(两个已导出型各多可选位);超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§110)。上一版 0.85.0 = **minor**:引擎事实表(通告码册 / 受众表 / MCP 注入丢弃原因 / 会话规则翻译判定内部两表)改为构建期生成,`ASK_ORIGIN_WORDS` / `APPROVAL_MANDATE_WORDS` 就是 SDK 导出的数组(不再冻结),四个思考档 / 权限模式型改为 SDK 型的别名,包内单源(CC-230);子代族八入口与两只行停止门收注入 client,写动词失败结局 +`unconfirmed`,`classifySubagentResumeFailure` 同判(CC-236);`sessionPolicyDeliverable` 收可选名册,`SessionPolicyWithheldWhy` 六词 → 七词(CC-228);过渡物退役登记与到期门,`adapt()` 不再认旧名 `attachedFiles`,三个运行期名字退出根入口(逐名见 §2z),`surfaceRememberNotApplied` 撤回退役预告(CC-221);plan-review 决断台账六口,`reopenPlanReviewCard` 按台账拒开(CC-241);会话后台任务停止口 `stopEngineSessionBackground` 与受据归类口 `engineSessionBackgroundReceiptReadingOf`(CC-246);服务端 7.104.0 会话侧:会话存档读不出三载体读口与人话 `corruptSessionContent`、`session.records_skipped` 进册(`SERVER_NOTICE_AUDIENCE` 🔧 0.89.0 退出公面前的三行)、删会话 409 读口、`/decide` 停驻挪动族读口(CC-217 / CC-243);服务端 7.104.0 能力 / 同步体侧:同步 park 新体与 park 行 `result`、`fileHistoryCaptureMode` 认 `on-optional` 与请求词片段口 `fileHistoryDeclarationField`(0.100.0 退出公面)、公钥发现读口 `projectSealedKeyCapability`、折叠粗码 `isStatusDerivedCoarseCode`(CC-243);同名影子对账门按语义判(CC-222);导出存活门读已提交历史(CC-240);根公面 1275 → 1307;测试钩 59 → 60;公面类型 +34;peer sdk 地板 `>=12.0.1` 不动;§109)。上一版 0.84.1 = **patch**:`<system-reminder>` 开标签定位口 `findSystemReminderOpenTag`(CC-210);detach durable-off 400 纯判定 `isDetachDurableOff400`,`detachDurableOffHint` 对读属性会抛的错误对象改回 `null`(CC-219);服务端自铸通告码进码册与受众表 `SERVER_NOTICE_AUDIENCE`(🔧 0.89.0 退出公面;`instructions.source_changed` 回到用户面)+ 事实读器 `readInstructionsSourceChanged`(CC-213);按码派发的通告事实口 `readEngineNoticeFacts` + 派发表 `ENGINE_NOTICE_FACT_READERS`,`readReadRootGrantNotice` 入参型放宽(CC-214);停泊审批决断 422 `parked_resume.startup_failed` 的读口 / 一句话 / 判定与码优先 `isCodeClassifiedGateFailure`(0.98.0 退出公面;CC-225);拒启会话的窄撤销动词 `removeRefusedSessionRules` 与出路句 `legacyToolNameFailureNoteOf`(0.103.0 退出公面),`CONFIG_REFUSAL_CODES`(0.96.0 退出公面) 七员 → 八员(CC-229);plan-review 编排三口与两只能力探针收注入 client(CC-209);CC 形 `permission_denials` 收入参只被传输层脱敏过的拒绝 + 超集位 `_sema_tool_input_redacted`(CC-235);凭据读法两处放行收口(CC-234);根公面 1260 → 1275;公面类型 +18;peer sdk 地板 `>=12.0.1` 不动;§108)。上一版 0.84.0 = **minor**:peer sdk 地板 `>=11.3.0` → `>=12.0.1`;后台代理登记读数 —— 读口 / 取代判定 / 归类口 / 登记键桥 / 补行谓词,缺席行下半场(CC-194);读目录授权结论通告读口 `readReadRootGrantNotice`(CC-185);接线回执 `hands` 段 `_sema_hands` + 读口 `handsSeamReadingOf` / `handsSeamDetail`,`handsMountedDetail` 坏入参不再抛(CC-206);陈旧逻辑清扫(CC-223):退役键 `rewind.rewindFiles` 构造期拒收、`WorkflowRunState.agentCount` 改可选、26 个内部件退出根入口、九张公面判定表换只读 Set 子类、十五张判定数组冻结、`resume_at` 文本兼容腿退役;根公面 1278 → 1260;公面类型 +10;§107)。上一版 0.83.6 = **patch**:会话规则记录的无损判定 `sessionPolicyDeliverable` 把引擎会在准备阶段拒启的两类名字(引擎退役名、含 `__` 而不以协议前缀开头的名字)改判「不写」,成因词 `legacy_tool_name`(闭集 5 → 6),引擎说「改名为 X」的退役名带 `currentName` 出路位;`peer_wide` 那句改措辞(判决不变)(CC-226);根公面 1278 不变;peer sdk 地板 `>=11.3.0` 不动;§106)。上一版 0.83.5 = **patch**:展示层出口 `displayUntrusted` 的连接符 ZWJ / ZWNJ 按语境判(🔴 默认形输出字节变)、两只可选开关 `escapeBackslashes` / `blanks` 与标记位置读口 `displayUntrustedMarks`(CC-204);凭据两网的判别视图认孤代理项,机读字节 `errors[]` / 合成终局行同批(CC-207);转义记号在凭据再扫里原子与四处凭据读法存量修复(相对 0.83.4 零新增外泄);hooks 启动模式可选词读口 `SettingsPort.hooksStartupMode()`,安全 / bare 模式下设置来源只发 managed(CC-200),设置来源里同一条 hook 只发一份(CC-208);自愈三条重发结局 +1 可选位 `releaseConfirmedByEngine`、行句按释放证据分说(CC-212);活段接入指引订正;公面类型 +3;peer sdk 地板 `>=11.3.0` 不动;根公面 1278;§105)。上一版 0.83.4 = **patch**:只增 —— plan 审批卡「用户亲手关掉的卡,自动触发不在同一道门上放回屏上」的判定归包(`reopenPlanReviewCard` 加触发者位 `trigger`、拒开位 `dismissedByUser`,409 自愈腿按提交出身替宿主传触发者、结局与整行由包出;CC-201);座位审批请求补强制位 / 强制理由词 / 报价缺席因由 / 出身词四个可选位与过境口 `toolPermissionRequestAskBits`(CC-203);`<system-reminder>` 剥离 / 解包两只口上公面并改线性时间(CC-205);两条展示层接入指引订正;开发依赖引擎 `~7.33.1`;公面类型 +2;peer sdk 地板 `>=11.3.0` 不动;根公面 1277;§104)。上一版 0.83.3 = **patch**:入参 / 来源面 —— hooks 投影加 flag 来源(`--settings` 那一层,排在 local 之后;设置来源 hooks 维持托管在前拼接);规则列举口 `listAllPersistedRules` 入参只要 `list`(`RulesListFacade`,其余四口作可选成员);模型身份认目录缺省(本机读数加宿主报位 `engineAcceptsCatalogDefault`,位 `true` 才算目录可解析);公面类型 +1;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§103)。上一版 0.83.2 = **patch**:只增 —— 审批卡一族三件(常驻姿态下的放行谓词 `askSurvivesPosture`(0.94.0 退出公面),三态、「不知道」不折成放行;卡上 `mandate` 六词闭集 + 读口 + 每词一句说明,通告码册 +2,开发依赖引擎 `~7.32.0`;停泊卡带出身词 `origin`;CC-193 / CC-195 / CC-196)与后台子代缺席行的判定、计数、sweep 豁免、回收与措辞单源(回收只在后台代理登记确认离场时;CC-194);公面类型 +13;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§102)。上一版 0.83.1 = **patch**:只增 + 行为订正 —— 展示层安全出口三端单源 `displayUntrusted`(凭据两网 ∘ 字符三网,选项按载体选;CC-112);本包合成的终局行正文与结果帧 `errors[]` 在铸点洗凭据(`errors[]` wire 可见,方向只会更安全)、交互车道合成行带上行类旗,回决备注与子代续跑收据多收双向 / 格式字符(CC-187 / CC-112);会话规则记录的无损判定 `sessionPolicyDeliverable` + 措辞单源 `sessionPolicyWithheldNotice` + 五词成因 `SESSION_POLICY_WITHHELD_WHY`(整批可送才送,首尾带空白的名字比宿主侧更严;CC-117);插件 hook 每轮计划 `hooksWirePlan` + `SettingsPort` 可选读口 `enabledPluginHooks` + `hooksForWire({ plan })`,逐条判「投给引擎 / 本客户端执行 / 如实不跑」、开机「不会执行」清单与 `/hooks` 标注措辞单源(投给引擎那一臂候引擎能力位 `taskSettings.pluginHooks`),设置来源的 `mcp_tool` 与 exec 形 hook 条目不再上请求体、手写的 `plugin` 键剥掉(CC-174);公面类型 +26;peer sdk 地板 `>=11.3.0` 不动;根公面 1254;§101)。上一版 0.83.0 = **minor**:行为面与型面都有 BREAKING —— CC 形消息 24 项按裁定 C-R103 退役名:结果帧 `degraded` / `errorCode` / `model` 与错误信封 `result` → `_sema_model_degraded` / `_sema_error_code` / `_sema_selected_model` / `_sema_salvaged_result`,合成终局行 `isApiErrorMessage` → `_sema_api_error_message`,工具结果记录删过渡名 `toolUseResult`,system 行 `attachedFiles` → `_sema_attached_files`、到达时戳 `timestamp` 与 `isMeta` 删,print 完成通知帧十三键平铺 `_sema_*`,记忆写入改走 chrome 臂 `memory_saved`(新型 `MemorySavedChromeEvent`,`CHROME_ARMS` required);本包只铸新名、端两名并读一版 + 结果帧 CC 键 `terminal_reason` 与读口 `terminalReasonForResult`(CC-175),错误信封知道就铸 `_sema_selected_model` + 转录 id 改 UUID 形(CC-147)+ `SettingsPort` 可选合并读口 `mergedDisableAllHooks`、用户层 `disableAllHooks` 在引擎腿上生效(CC-162)+ 退化审批卡三形拒收改写、`FsApprovalOutcome` 的 `failed` 臂 +可选位 `editRefused`(CC-135)+ 注入件自愈句整族重写 + 联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 退出公面,`resolveLiveInitToolFace` 可选 `opts.webSearchStamped`(`LiveInitToolFaceOptions`),endpoint userinfo 律跟服务端 7.101.0(CC-184)+ 公面类型 −4(CC-171)+ 通告码册 69 → 71 与结构化卡白名单 +`read-inbox`(CC-186,开发依赖引擎 `~7.31.0`)+ 合成终局行 `uuid` 改 UUID 形;peer sdk 地板 `>=11.3.0` 不动;根公面 1238;§100)。上一版 0.82.7 = **patch**:只增不改 —— 每请求联网搜索配置的三态判决 `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict`(与 7.100.0 及以后 server 的受理判官同序同判,认不出的 provider 判形错、不再静默丢段;settings 段凭据注入回调 `apiKeyFor`)+ 措辞单源 `webSearchVerdictMessage`(不回显任何用户配的值)+ 调试日志用 `webSearchEndpointForDisplay`;旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 行为不变、标过渡期,0.83.0 删(CC-182);peer sdk 地板 `>=11.3.0` 不动;根公面 1240;§99)。上一版 0.82.6 = **patch**:只增不改 —— 停泊行上选「本会话允许」却没被记住时与活卡腿同句告知(回体 `rememberApplied: false`,或 server 以会话级放行专属拒绝码拒了 remember 后回退普通批准;其余失败一律未知不告知),回执 `DecideReceiptView` +1 可选位 `rememberApplied`(CC-181);决断落定后与桥重试臂的诊断留痕不再因宿主日志口抛错回流进决断;接入文档改口:server ≥7.100.0 上 park 行卡的 `requiresRealApproval` / `approvalIsMandated` 生效(CC-180,零代码改动);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§98)。上一版 0.82.5 = **patch**:只增不改 —— print 车道 init 帧工具面名册优先:流包装器 `withPrintInitFrame`(首选接法,init 恒为首行、其后按到达序)/ 判定闸 `createPrintInitGate` / 分类口 `printInitRosterSignal` / 判定口 `decidePrintInitToolFace` / 留痕措辞 `printInitToolFaceDebugLine` + 等待上界 `PRINT_INIT_ROSTER_WAIT_MS`(150 000);回落估计表补 `ListAgents`(7.30.0 及以后的引擎上与 `SendMessage` 同条件)(CC-169);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§97)。上一版 0.82.4 = **patch**:只增不改 —— park 行审批卡新增门类位 `irreversibleParkGate`(待决行门类恰为 irreversible_ask,今天即生效,门类事实不是保证);`requiresRealApproval` 在待决行顶层带时透传(就绪,待决列表带出后才生效,今天零行为变化)(CC-180);`ApprovalCardRequest` +1 可选位;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§96)。上一版 0.82.3 = **patch**:只增不改的公面 —— 自愈提示的「保住对话」出路槽 `keepSessionWayOut` 与交互面引擎决断入口开关 `engineDecidePath`(CC-177;两位都不给时措辞与 0.82.2 逐字节同);自愈结局两臂 +机读位 `pendingRowGone`(重开链证实待决项已不在);peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§95)。上一版 0.82.2 = **patch**:只增不改的公面 + 若干行为订正 —— 新增措辞单源 `cloudEffectiveNotices`:云控制面有效配置回体的降级告警 / 预算 / 能力上限三读数(CC-164,四态,不读成 0 或「没有预算」);本机引擎 models 文档在宿主注入本机条目判定 `entryAccepted` 时补 `default` / `tierGroups` / `activeTierGroup`,剔掉会让本机整份拒收的目录引用与判定口不收的条目,去掉 registry 注记键 `origin` / `overridesTeam`(CC-165;结果新增 `modelRefIssues`);计划复核结局机读位 `_sema_planReviewOutcome`(CC-160 ①);停泊审批决断操作起止回调 `onDecideOperation` 与操作句柄 `openDecideOperation`(CC-160 ③);新增超集键 `_sema_planReviewOutcome`;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§94)。上一版 0.82.1 = **patch**:只增不改的公面 + 若干行为订正 —— 新增读口 15 个(续跑折叠码读口与措辞 / 文件历史捕获读口六口 / 模型身份可解析判据五口 / 自定义代理载荷作废重投口 / 决断失败码「门还在」判定)+ 宿主车道声明 `EmitContext.lane`;新增超集键 `_sema_response_model`(终帧 / 每轮用量)与 chrome 用量两臂 `responseModel`、重开判决 `_sema_decisionInFlight`、自愈结局两臂 `decisionInFlight`、内部臂 `_sema_denial_unclassified`、通知码 +1;行为订正:计划复核决断在飞不重开卡且自愈提示不再教人再决一次(CC-160 ②)、决断出口补折叠句且停泊腿不再把折叠 / 坏档误判已决(CC-154)、执行车道 `in-process` 措辞(CC-153)、`-p` 车道 Bash 良性退出与交互同判(CC-168)、`-p` 工具结果帧补结构化结果(CC-149)、被拒分类词两车道同判(CC-172)、非交互车道子代工具帧(CC-158,宿主声明车道才生效)、终帧被拒清单对账流内拒绝(CC-159)、自定义代理载荷作废重投(CC-161);peer sdk 地板 `>=11.3.0` 不动;根公面 1228;§93)。上一版 0.82.0 = **minor**:只增不改 —— 新增只读读口 17 个 + 1 常量、工具名册行一格 `mountedBy`、turn 错误判决 `http` 臂一格 `storedRowWhere`:`/rewind` 代码档与对话档能不能用由引擎能力位回答(CC-146)、云控制面额度读数三分(CC-150)、装配期「这一条腿有没有手」(CC-152)、续跑拒收按原码判(CC-154);两处既有面行为订正:自动模式分类器拒的类别词由 `permission-rule` 改为 `automode-*` 三词(CC-155,订正 0.81.1)、续跑上下文读不出时引擎点名的那一行不再丢(CC-156);0.81.0 预告的 23 键 + 1 子型删改**改到 0.83.0**(§92y ㉙);零 wire 键、零投影臂;peer sdk 地板 `>=11.3.0` 不动;§92。上一版 0.81.1 = **patch**:被拒分类词读器加第③路(CC-148):引擎「没问过就拒」的工具调用(deny 规则 / 权限模式 / hook / 分类器 / 写保护 —— 无 `settlement` 只有 `gate.disposition.deniedBy`)在 user 工具结果记录与终帧 `permission_denials[]` 上此前恒缺 `_sema_denial_kind` / `toolDenialKind`,现按层名落 `permission-rule`(其中「分类器」一项已由 0.82.0 CC-155 订正)(`ask_resolution` 无结算 / 结算段不成形 / 层名表外仍缺席不猜);交互与 `--print` 两条车道同一只读器;另钉终帧两臂 `_sema_effective_*` 键集不变量 —— 成功臂展开单铸函数、错误信封显式重发,覆盖性钉在返回对象自己的类型上(漏键 / 多键编译期即红)+ 门格判两臂键集相等且值逐字节同,给单铸函数加键时错误臂不会再静默少键(本版无键增减);零 wire 键、零投影臂、根公面 1195;§91。上一版 0.81.0 = **minor**:CC 形消息一张脸(C-R85 / CC-131):user 工具结果记录加 SDK 面键 `tool_use_result`(与过渡键 `toolUseResult` 同引用,删驼峰原定 0.82.0、已改到 0.83.0)+ DS-19 普查门升硬门(键集按语法解析、按 type/subtype 分表;23 键 + 1 子型过渡表到期窗原为 0.82.0、已改到 0.83.0,零常驻豁免)+ CC-145 `/rewind` both 臂改发 `restoreFiles:true`、`projectRewind(pending)` 单参;零 wire 键、零投影臂、根公面 1195;§90。上一版 0.80.2 = **patch**:`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到(CC-137:sdk 11.1.0 起 `APIError` 把体上非具名键收进 `extra`,这一码映射成 `ConflictError` 无具名位,读口只读顶层 ⇒ 真调用链恒缺席)⇒ 体源结构位改「顶层有效值优先、`extra` 兜底」三只类型化读口单铸,有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底,头源 `retryAfterMs` 只读具名位;零 wire 键、零投影臂、根公面 1195;§89。上一版 0.80.1 = **patch**:去键重发判据句按「铸」计(CC-143;§87「带键的体恰一次」作废 → 被铸恰一次,POST 几次随传输层)+ 接入文档段落自带射程限定词自 §88 起向前执法 + 模型预设表 deepseek 项改闭集真名 deepseek-flash(CC-144,C-R82 ①)+ 门里 git 兜底自陈探针(CC-142);零 wire 键、零投影臂、根公面 1195;§88。上一版 0.80.0 = **minor**:🔴 peer sdk 地板 >=11.2.1 → >=11.3.0 + 策略拒的归因上 wire(CC-133:发送面 deny+policy 带 settledBy / 读侧 policy_refused 十三词入 CC 规则桶 / 三错误码读口 / 直连门去键重发恰一次)+ 删除规则后果句归包(CC-132)+ /mcp 详情卡两腿分说归包(CC-134:六档读口 + 九句铸点,同批改口八处说满的话)+ 🔴 终帧旧拼法 `structuredOutput` 按 0.79.1 的宣告删除(只剩 CC 形 `structured_output`);根公面 1195;§87。上一版 0.79.1 = **patch**:终帧结构化产出同帧铸 CC 形 `structured_output`(旧拼法 `structuredOutput` 过渡一版,0.80.0 删;CC-130)+ 写审批 `argsOmitted` 退化卡在无受护写入部署形上重新解得出路径(CC-129)+ 云控制面十值二型经本包第二个入口 `@sema-agent/client-core/registry` 原样转口(根入口零变;CC-128 ①);根公面 1184;§86。上一版 0.79.0 = **minor**:server 7.93.0 过境批 —— peer sdk 地板 >=11.2.1 + 写口回执第六臂 unverified 与 503 体 committed 分臂(CC-124)+ 无 run 可读的 MCP 状态面(CC-74)+ 审批卡 mandated 位(CC-110)+ 请求装配第三车道 utility 与 approverPosture / maxTokens / outputRetries 三键 + print 车道 model 座(CC-116 / 118 / 123)+ 拒因两面分铸与四个机读位(CC-125)+ 模型轮边界划消息界(CC-126)+ 委派结果人类面读口按来源声明体内定位(CC-127)+ sdk 转口三件(CC-128)+ 通告码 memory.project_scope_absent(CC-122);公面 1184;§85。上一版 0.78.2 = **patch**:门的棘轮登记数字单真源 —— 五只门十一格棘轮 + 218 条沿革账搬进 scripts/registry.json、门只读不抄、负控改篡改登记物、下调通道 RATCHET-SLACK、新门 run-registry-test(CC-79 第一期)+ 两格存量松量收掉 + submit-wiring-manifest 门补 count===1 边界格;src 零改动,dist 逐字节同 0.78.1;公面 1154;§84。上一版 0.78.1 = **patch**:两辆并行车收货 + 三张跟进票 —— displayBody 人类面读口 + 围栏解析头尾配对收紧(CC-113)/ MCP 两处「没报」措辞分句(CC-115)/ 记忆治理面五动词调用口(CC-97 b)/ 非流式提交回执接线回执读口 readSubmitWiringManifest(CC-121)/ 三份失败判官抛出物读取收口(CC-119);公面 1154;§83。上一版 0.78.0 = **minor**:peer sdk 地板 >=9.8.1 → >=11.0.1(CC-106)+ 单步写口 200 体按 stillLive 判别联合改读、第五臂 revoked、三型取自 sdk、RulesFacade.write 必填、PersistedRuleLiveness 转口(CC-103)+ DeniedBy 第十词 read_boundary 专句(CC-106 ④)+ excludeAllTools 车道行;型面 BREAKING 三处、行为面同 0.77.2;公面 1143;§82。上一版 0.77.2 = **patch**:出包面结构卫生 —— 构建期 removeComments,dist js / d.ts 零注释(新门 run-dist-comments-test.mjs + 卫生门词表 32 条 + 文档向前执法;CC-100)+ gateDeniedByDetail 表外词兜底句改「本版不认识这个层名」(CC-111 ①);行为 / 型面逐字节同 0.77.1;公面 1143;§81。上一版 0.77.1 = **patch**:外部验收三件回填 —— 读器族边界残留 projectMcpReconnectCapability 只认自有键(CC-107)/ rewind 四子键恰读一次(CC-108)/ 子代输出合并按回体 output.type · retrieval_status 定处置(CC-109,server ≥7.92.0 cursorSemantics 缺席面);型面 additive 一处;公面 1143;§80。上一版 0.77.0 = **minor**:请求装配逐键去向回执 + print 车道补座 + 表外键响亮拒(CC-101,四条行为 BREAKING)/ 会话策略写端口(CC-105)/ 持久规则单步写面(CC-103)/ workflow 子代面板行代际三向恢复(CC-104,零改码)/ 能力位读器族口径整族改齐 + 外部验收 F-A / F-B 处置 + 合并树异源复审两轮处置;公面 1143;§79。上一版 0.76.2 = **patch**:制品卫生 —— 清 dist 重 build 去掉两只已撤出源码的编译产物 + dist ⇄ src 对账门;零源码 / 零型面 / 零行为改动;公面 1122;§78。上一版 0.76.1 = **patch**:能力位读器工厂(CC-75)/ MCP 活性观察读口(CC-36)/ `capabilities.peerLane` · `permissionRulesWrite` 四态读口(CC-102)/ 记忆治理面两只读口 + 三只条目面回体读口(CC-97 a)/ 主车道证明逐次新建(CC-99)+ 修 0.76.0 的 F1 / F2(身份四键一次性快照只修了投影口一侧);公面 1122;§77。上一版 0.76.0 = **minor**:六票一批 —— `prompt_assembled` 投影臂 / 审批 feed 三态(**型面 BREAKING**)/ `ApprovalResolution` 单源联合 / 记忆 spec 读口 / 终态词表上游钉 / `tasks_expand` 退役(**型面 BREAKING**),外加身份四键一次性快照(跨全部内部臂);公面 1081;§76。上一版 0.75.1 = **patch**:面板短命子代反序缓行放不出的残洞(外部复验 D1)+ 同代 running 帧三向定形(B4)+ #969 提货 `spawnName` 透传与 `agentType` 改读诚实来源(CC-95);§75。上一版 0.75.0 = **minor**:压缩的非 compacted 结局上 chrome 面 `compaction_outcome`(新内部臂 —— 自建 print 出口的端先表态)+ peer sdk 地板 `>=9.8.1`;型面 additive(ChromeEvent +1 臂)、公面 1065、零 wire 新键;§74。上一版 0.74.5 = **patch**:core 7.24.0 提货 `_sema_freed_tokens?` + 首见即终态的行零事件(幽灵完成行)+ `isNewEngineAgentPanelCycle` / `approvalOutcomeNoteOf`(0.98.0 已退役)上公面;型面 additive、公面 1065、peer 不动;§73。上一版 0.74.4 = **patch**:面板键「先发布的键为准」(tick 归不了一的三序不再两行)+ 前代 UUID 迟到 tick 丢弃 + `readRunCancelContext` 下钻收紧;型面 additive、公面 1061、peer 不动;§72。上一版 0.74.3 = **patch**:面板子代身份归一(tick / end 的 UUID 归到 fleet 尾段,宿主零改)+ run 记录 `cancelContext` 读口与成因四词 + workflow 行 `errorCode` + reopen 第二臂两件;型面纯 additive、公面 1061、peer 不动;§71。上一版 0.74.2 = **patch**:`capabilities.deviceExecutor.management` 四态读口(缺席 ≠ false;`deviceExecutor: false` = 车道缺席;管理动词可用性三态归包);公面 1052;§70。上一版 0.74.1 = **patch**:审批卡无决断收口 + 结局回交;§69。上一版 0.74.0 = **minor**:peer sdk 地板 >=9.7.1 + covers 过境 + 面板周期身份 + 离场读口;§68。上一版 0.73.5 = **patch**:workflow 规模告警判定上收进包(`evaluateWorkflowSize` 三态:未知的规模不当作规模正常;分母口径与帽优先级单源;env 读口纯函数);型面纯 additive、公面 1044、peer 不动;§67。上一版 0.73.4 = **patch**:终帧 `permission_denials` 第三键 ⇐ 同一条流 `tool_start` 入参按 `toolCallId` join(三道闸;join 不上留 sema 载体;🔴 更正 0.73.2「自动升级收口」一句)+ 审批 feed push 侧取件失败的欠账退避重试;型面纯 additive、公面 1033、peer 不动;§66。上一版 0.73.3 = **patch**:CC-61 sdk 9.7.1 提货 + `capabilities.approvalsStreamLive` 四态读口(缺席 = 判不出;`livePendingNeedsReconcile` 只在引擎明说会推时才让对账节拍降兜底)+ CC-60 五条模型面文案锚包侧半场(cursorSemantics 机读位 / result 行注记 / bash 首行两变体与良性槽 / 通知 seed 并集 / parked 臂);型面纯 additive、公面 1032、peer 不动;§65。上一版 0.73.2 = **patch**:CC-59 悬挂 ask 全卡 —— `livePending[].frame`(server ≥7.87.0)两道闸窄读进视图,在场即走流内帧腿同一条路(入参可见、改写可转发),缺席保持盲卡;CC-34 收口(引擎半场随 7.87.0 到货,判据交黑盒);型面纯 additive、公面 1026、peer 不动;§64。上一版 0.73.1 = **patch**:CC-57 `decidePlanReview` outcome 尾句按「决断有没有生效」四态选(单铸点 `planReviewOutcomeTail`;此前本地拒发仍让模型汇报已拒绝)+ CC-56 cancel 的 409 按机器码分家(`cancelConflictFromError` 三形 / 新安全码 `cancel_run_not_running`)与提交面 429 用量窗读口 + 人话;型面纯 additive、公面 1026、peer 不动;§63。上一版 0.73.0 = **minor,型面 BREAKING**:fleet 视图八个数值键改可选 —— CC-52 `FleetTaskView.elapsedMs` / `tokens` / `queuedCount` 与 `FleetWorkflowView.doneCount` / `totalCount` / `failedCount` / `tokens` / `elapsedMs` 不再 `?? 0`(有键 = 真值含真 0,缺键 = 不知道;逐键缺席语义见 §62b)+ 台账补偿链无基数不铸;公面导出名零增减 1019、零 wire 变化、peer 不动;§62。上一版 0.72.14 = **patch**:悬挂的流内 ask 拉半场 —— CC-55 `startApprovalsFeed` 快照加 `livePending` 段并进变化摘要(键缺席 = 未报,不铸空)+ 视图 / 去重账 / 与流内帧腿同链的决断口(入参不可见上卡明说、改写不转发)+ 宿主闸对账节拍 + 待决计数读口(不知道 = null);型面纯 additive、公面 1019、peer 不动;§61。上一版 0.72.13 = **patch**:server 7.86.0 提货 —— CC-46 plan_review `permissionModeAfter` 发口(三选卡双闸:宿主声明只读起步 ∧ 引擎 ≥7.86.0;400 field_conflict 两种处置)+ CC-54 `capabilities.executionLane` 四态读面(键缺席 ≠ 不是本机车道;`toolsRunHere` 判据归包)+ CC-53 detach 版本闸三态;型面 additive(另撤回 0.72.12 的主通道 `absent` 臂,改独立缺席订阅口)、公面 1011、peer 不动;§60;**预告 0.73.0 BREAKING**:fleet 视图数值键改可选。上一版 0.72.12 = **patch**:「缺席被折成正向终态」按类清剿 —— CC-50 M1 头条(fleet 行缺席改发 `absent` 不再铸 `end{isError:false}`)+ 六站一次改齐(缺席 ⇒ `unknown`)+ 结果边界 fail-closed 取舍 + `_sema_outcome` + `Outcome unknown:` 行 + CC-51 M6(default 臂不再谎报 running)+ 普查门 + DS-06;型面 additive、公面 993、peer 不动;行为面三处真变化见 CHANGELOG 取舍段;§59。上一版 0.72.11 = **patch**:core 7.23.0 提货 —— CC-49 通告码 66 → 67 `config.write_protection_unresolved`(operator;兄弟码 `target_view_absent` = 没有视图,这枚 = 有视图解析不出)+ `permission_denials` 自动升级腿通电(`gates[].toolCallId` ⇒ `tool_use_id`;CC-34 引擎半场);型面零变化、公面 989、peer 不动、devDep core ~7.23.0;§58。上一版 0.72.10 = **patch**:CC-41 leader run 终局 `needs_human` + `result.conflict` 三形读面(none 缺席不可分 / unreadable 在场读不懂 / conflict;`salvaged[]` 原样给落盘口;措辞单源不提重试);型面纯 additive、公面 989、peer 不动;§57。上一版 0.72.9 = **patch**:server 7.85.0 提货 —— CC-30 会话内 MCP re-dial 消费口(`reconnectMcpServer` 三态 / unsupported 恒五键 / 交易文案单源)+ CC-39② memory-status `autoConsolidationArmed` 三态 + CC-45 resume 补充句渲保留秒数;型面纯 additive、公面 985、peer 不动;§56。上一版 0.72.8 = **patch**:清账三票 —— `memory:"off"` 请求键(CC-39③,server 7.84.0 S-405)+ `runStream` 第二条中性臂 `Model output error:`(CC-43)+ 注入件撞活 run 自动 steer 零卡(CC-44);型面纯 additive、公面 977、peer 不动;§55。上一版 0.72.7 = **patch**:core 7.22.0 提货 —— 通告码 66 `mcp.server_redialed` + 读器 `readMcpServerRedialed` + `wiring_manifest.readDeny` 第九段 `_sema_readDeny`(缺席 = 没有内置行判这条腿);型面纯 additive、公面 971、peer 不动、devDep core ~7.22.0;§54。上一版 0.72.6 = **patch**:cli L-379 包侧半场 —— `steerFollowIntent` steer 后续听意图三态(tail / after-decision / after-wake)+ `activeRunSelfHealRow` 续听声明第五参;型面纯 additive、公面 969、peer 不动;§53。上一版 0.72.5 = **patch**:server 7.82.1 提货 —— `capabilities.webSearch.backend` 部署默认 WebSearch 后端四态读面(键缺席 = 老引擎判不了 ≠ `none`);型面纯 additive、公面 968、peer 不动;§52。上一版 0.72.4 = **patch**:core 7.21.x 三件经 server 7.82.0 提货 —— `wiring_manifest.autoConsolidation` 第八段 `_sema_autoConsolidation`(缺席 = indeterminate 不折 false);型面纯 additive、公面 962、peer 不动;§51。上一版 0.72.3 = **patch**:core #863 记忆单系统半场 ① —— `projectAgentsForWire` 投影 `agents[].memory`(user|project|local 三词同映射引擎平面 agent:<type>);型面纯 additive、公面 962、零 wire 新键、peer 不动;§50。上一版 0.72.2 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
|
|
22
|
+
| 本包 | `@sema-agent/client-core` **0.104.1**(本批发布版 = **patch**:悬挂审批在说呈卡协议的服务端上恢复全卡(§133 AR-1 – AR-4,CC-1127)· 压缩后后台任务表里带读句尾巴的行照认(§133 BT-1 – BT-4,CC-1129);换钉段与公面数同 0.104.0)。上一 minor **0.104.0**(本批发布版 = **minor**(型面 BREAKING):换钉到引擎 7.60.0(引擎 / 内核 7.60.0 · 类型包 30.0.0 · 配置契约 15.1.0;生成表重生成)· MCP 失败类多一词 `host_refused` · 状态帧座位位 `seat` · 值级端口第二十一件 `ruleNameCovers`(名册一步覆盖读法)· 停驻终局结果帧恒走错误臂 / `-p` 出路句只在 `errors[0]`(§132 RA-1 / RA-2)· 权限三桶来源表组内序按写序(PO-1)· 停驻 / 活卡审批卡工具入参真源 = 记录侧那一份 + `argsRewritten`(AK-1 / AK-2,同一只读器)· 钩子车道类依据改读引擎真批准位门类集(HK-2)· 服务端 7.139.0 提货:换绑前态改读执行放置读面(SV-2)· 会话行条件写 `rowTag` / `expectedRowTag`(SV-1)· 换绑 409 子代形(SV-3)· 后台行子会话 id(SV-4)· 宿主设置源三处成文(HS-2a / HS-2b / XA-7a);型面 BREAKING:`CoreValuePorts` 必填成员 +1(`ruleNameCovers`)· `MCP_FAILURE_KINDS` 闭集变宽 · `DeviceSessionBindingOutcome` 臂集变(+`unbound` / `unsupported`,−`lane-absent`;读面切片换 `client.sessions`)· `DeviceBinding` / `DeviceSessionBinding` 不再转出、`boundAt` 退役 · 孤儿型 `ManagedPolicyReading` 退出根入口(RL-290)· RL-310 / 311 / 313 随类型包到货退役;公面 2010 → 2014(+`BRAIN_STATUS_SEATS` / `ruleNameCovers` / `sessionRowTagOf` / `sessionRowPatchRefusalOf`);依赖钉 core `^7.60.0` / mods-kernel `7.60.0` / sdk `^30.0.0` / settings-schema `^15.1.0`;peer sdk `>=23.1.0` / mods-kernel `>=7.54.0`(可选);读点逐端见 §132;§132)。上一版 0.103.0 = **minor**(型面 BREAKING)(一次重锚到引擎 7.59.0(引擎 / 内核 7.59.0 · 类型包 28.0.0 · 配置契约 14.8.0;生成表重生成)· MCP 授权失败记录一只读口四处过境 · 两只新通知事实读器 · 状态帧等待两位 · 工具结果行改参记录与改参句 · 服务器名 `remote-` 前缀律 · 决断拒收「行完整性」只认正证据 · 抹除证明 v2 · 整工具规则候选 · 服务端 7.137.0 随附件(§131 PK-10)· 结果帧成功臂不再带 `errors[]`(§131 LG-1)· 换钉当拍重钉(v1 卡读引擎卡词 `approvalCard`;姿态来源词表五词 +`lane`)· 六只派生窄视图退役;型面 BREAKING:请求键 `promptProfile` 换布尔 `promptLean`(RL-300)· 六导出退役(RL-179 / 192–196,公面 2016 → 2010)· `POSTURE_SOURCE_WORDS` 四 → 五词 · 成功臂 `errors[]` 删;依赖钉 core `^7.59.0` / mods-kernel `7.59.0` / sdk `^28.0.0` / settings-schema `^14.8.0`;peer sdk `>=23.1.0` / mods-kernel `>=7.54.0`(可选);读点逐端见 §131;§131)。上一版 0.102.0 = **minor**(型面 BREAKING(窄))(会话送后台四读口归包(能力位读数 · 连线句柄与本包亲手开流 · 交接资格一只判官 · 交接动词与后台观看)· 会话级思考开关归包(状态机 + `reasoningEffort` 单铸点投影 + 座位动词 / 能力位 / 会话行位)· mods 三类用户面座位(注册卡 / 行旁拒句 / 行旁代答句)+ 桌面装载座位的读口与句口 · 会话映射的引擎命名空间键含规范化路径(经中继的多台引擎不再串键)· 配置地址展示口两读法按位置对应取舍(单斜杠 / 零斜杠写法不再把口令显示成路径;修复轮三)· 出包文案卫生;型面 BREAKING(窄):`fireInteractiveInterrupt(runs, taskId, opts)` 新可选位 `wire` 与新臂 `{ kind: 'withheld' }`;依赖钉不动(core `^7.55.0` / sdk `^24.0.0` / settings-schema `^14.4.0`;peer sdk `>=23.1.0`,支持底线不动);读点逐端见 §130;§130)。上一版 0.101.0 = **minor**(型面 BREAKING)(提货引擎 7.54.0(开发依赖 W1 换钉 `^7.54.0` 与生成表重生成,后续 mods 内核车换钉 core `^7.55.0` / mods-kernel 7.55.0 同号,sdk `^24.0.0` / settings-schema `^14.4.0`;peer sdk `>=23.1.0` 与支持底线 server 7.129.1 / core 7.51.2 / sdk 23.1.0 不动)+ 清账三波(主题波 B-U / B-X / B-D 与 W 车)+ 发版修复轮十六车(修到干净)· MCP 服务器名独立判口 · 引擎名册按对端分组投影 · 收紧桶对端段 `*` 原样 · 值级端口第 19 / 20 件(`ANTHROPIC_DEFAULT_BASE_URL` / `readToolFaces`)· 宿主设置源 `HostSettingsSource` 四件 · 提交身份与请求车道唯一派生 `requestLaneOf` · HITL 决断失败一只直交读口与安全停一位 · 型面 BREAKING:`AllowDenyPolicyOptionsView.scope` 退出 / `SettingsPort` 退役(RL-252)/ `engineAcceptsCatalogDefault` 退出读数型(RL-183)/ `CoreValuePorts` 必填成员 +2 / `HooksWirePlan.httpPolicyDrops` 必填 / 决断拒收分码第五词 `grant_changed` / `-p` 车道 resolver 改收值(读点逐端见 §129y);§129)。上一版 0.100.0 = **minor**(型面 BREAKING)(提货版 + 清账三程 —— 提货 server 7.132.0 / core 7.53.0 / settings-schema 14.1.0 / sdk 24.0.0(peer sdk `>=23.1.0`;支持底线 server 7.129.1 / core 7.51.2 / sdk 23.1.0 不动)· 接线回执第十四段 `mods[]` / 提示词装配清单 v3 / 压缩开始帧 → `system/status` compacting · prepare 拒启码表 + 帽与 hooks 拒读口(`budget_exceeded`)+ 沙箱码臂 · 工具目录第四态 `request_only` · 本地会话 API +2 动词 · 请求面 MCP 条目判官同设置契约 14.1.0(名字 / 传输 / 身份头单判官,逐条披露 `projectMcpConfigs().dropped`)· 任务进度 `seq` 代际 + 子代身份单源 · 展示出口字节边界与主机区域 · 凭据键路径 / 工具旗名 / 注入车道告知 · 型面 BREAKING:`compaction_started` chrome 臂 / `MCP_CAPS` `SKILL_CAPS` 退出公面 / RL-153 `continuesPark` 硬退 / RL-156 `EventLegPorts.perStream` / RL-172 `scenarioAssignmentUnknownFromError`(0.100.0 退出公面,已退役;读点逐端见 §128y);§128)。上一版 0.99.0 = **minor**(型面 BREAKING)(提货版 + 清账二程 —— 提货 server 7.131.0 / sdk 23.1.0 / settings-schema 13.0.1 / core 7.52.0(peer sdk `>=23.1.0`)· 请求层附件席位 `userAttachments`(四态读器 + 装配只发整文件完整文本条目)· MCP 面板判别联合(`servers` 臂 / `scenarioRefusal` 拒因臂,BK-1)· `userInvokedSkills` 槽位 · `allowTools: []` 原样上体 · 审批卡口单路径(`claimApprovalCard` 中止安全登记 + 进程级已结表 + `approvalFrameContextOf`,两族去重归包)· 会话规则逐条扣留(`sessionPolicyDeliverable` 改读引擎 `readRuleEntry`)· 凭据面百分号解码视图 · 不可信标量清洗口 `cleanUntrustedScalar` · 问类规范序筛 · hooks 预检构建期抄本 + 设置文件坏形判官 · 首 token 存活探针合一(`modelCapabilityProbe` / `PROBE_VERDICTS`)· `-p` 车道重试 / 模型服务状态帧(`system/api_retry` + 超集帧 `_sema_model_status`)与合成 API 错误行三只机读位 · 文案单源五批进消息目录 + 路由缺口句 / 人答臂 / 宿主队列三值句口 · 能力缓存变更订阅 / 嵌套位读口 / 作废重探 · 抛出物读法收口与「找不到」三形 · 会话 id 规范口 · 设备面 / 引擎目标席位与座位只读动词 `readSessionMcpPanel` · 退役账到期硬退 RL-151 `STOP_CONFLICT_CODES` + 三只手抄 agent 帽常量退出公面(BK-4)+ `PLUGIN_HOOK_REASONS` +3(BK-5)+ `CoreValuePorts` 新端口两只(BK-9)· 支持底线 server 7.129.1 / core 7.51.2 不变 · 发版复审两腿修复;§127)。上上版 0.98.0 = **minor**(型面 BREAKING)(清账版 —— 退役账在册过渡臂与同轴孪生整批退役(型面 BREAKING 三组:typeshadow 改名 / 转口、hitl 旧五型三口 → `ApprovalResolution`、text 句表单源的旧句口)· 句表单源(持久规则人话五口 · 卡面三行说明读口 · 崩溃遗留逐行句 · 结局成因一行句表 · `policy` 出身句补半边 · 退出码 137 归因句 · 工具结果卡「未执行」位)· 事件腿组合器 `composeEventLeg`(三腿闭集、拒收 / 绑定 / HITL 分派)· 引擎地址一处真源 · 流式提交同键有界重开 · 抛出物读法单源 · turn 失败呈现与重连预算(第一程)· 重试行人话单源 `retryStatusNotice` · 会话规则收紧 / 撤销闭集 · 接替卡去向 `priorAnswerOutcome` · `LocalSessionRecord.parked` 三值 · 内建子代理名表 `BUILTIN_SUBAGENT_TYPES` · 提货 server 7.129.1 / sdk 23.0.2 / core 7.51.2(peer sdk ^23.0.2)· 支持底线 server 7.129.1(C-R498 ②,收回 7.126–7.128)· 退役账到期九行硬退(C-R498 ①)+ RL-117 / 119 / 142–144 / 164(C-R500:deny 侧扣送与目录省略照删)· 授予绑定三态按载体读(CC-660;技能工具不给整工具「以后别问」)· 发版复审两轮两腿修复;§126)。更早 0.97.1 = **patch**(代理工具清单只投可能有工具应答的名 CC-729 · 本跑声明的 MCP 服务器读口 `engineToolDirectoryOf` 与 run 级 `excludeTools` 判官 CC-730;零型面 BREAKING;§125)。上上版 0.97.0 = **minor**(型面 BREAKING),终端 1.0.149 对接版:支持底线三件同号 server 7.126.0 / core 7.49.5 / sdk 21.1.0、peer sdk >=21.1.0 · sdk 21 提货(团队编排四键退役 / 审批卡词八词闭集 / 终局 detail 四臂 / 提交幂等 409 / allowTools)· 门种常量转口 sdk(ASK_PARK_GATE_KINDS 退役)· 抛出物机读位只认自有数据位、extra 只认内建 Error 类形 · 码认领先于已决 · 总缓存落地三态与 29 读器 unreadable 臂 · 舰队账本 / 审批已结表单源 · 退役 isFsApprovalGate(0.97.0 退出公面)/ isEngineRefusedToolName(0.97.0 退出公面)/ rememberRefused / ReplayPendingBasis.settled / 改名表;§124)。上一版 0.96.0 = **minor**:**minor**,终端 1.0.148 对接版:支持底线三件同号 server 7.125.0 / core 7.48.0 / sdk 20.0.0 · 设置契约 12 提货 · 清账(0.96.0 窗内欠账按票收口)· 单一真源收口(规则工具名判官 / 门种 → 决断腿一张表 / 结局判法 / 总缓存落地写点 / hooks matcher 契约读法 / 文件历史没搬句与收紧闸)· 会话行改名置顶座位动词 · 服务商拒收分类词;peer sdk 地板 >=20.0.0;型面 BREAKING = CoreValuePorts 换一件(−RETIRED_TOOL_NAMES +judgeRuleToolName)· hookMatcher accepted.names 退役 · 根入口删除名(`retiredToolNames`(0.96.0 退出公面)/ `CONFIG_REFUSAL_CODES`(0.96.0 退出公面)/ 23 只过渡口,§2z)· 终局读数带 replay 位 · 舰队行 workspaceSnapshot 只认 failed;§123)。上一版 0.95.0 = **minor**:**minor**,终端 1.0.147 对接版:引擎 7.48 / 服务端 7.124 / 设置契约 11 / sdk 19 提货 · 面板行归约口 · 能力位读器族与终态词表收口 · 审批成因闭集与排空期重开 · 审批卡跨腿持有 · 技能工具表随能力位上 wire · 0.95.0 窗内欠账按票收口;peer sdk 地板 >=19.0.0;型面 BREAKING = 终态词表 / 谓词改名带属主 · absent 退词 · 七条过渡臂退役;§122)。上一版 0.94.0 = **minor**:终端 1.0.146 对接版:引擎 7.45 – 7.47 / 服务端 7.120 – 7.122 / 配置层 10 / sdk 18.1 提货 · 请求装配与审批判定归包 · 到期登记物按预告硬删 · 凭据遮蔽两件 · 附件信封外套标签;peer sdk 地板 >=18.1.0;型面 BREAKING = RX 五处硬删 · absent 退词 · 七条过渡臂退役 · 必填成员增加三处 · 八处闭集增员;§121)。上一版 0.93.1 = **patch**:耐久停驻审批的决断口单一持有者 —— `surfaceFsApprovalAndDecide` 对同一把审批身份键(行会话 + run + `toolCallId ?? boundCallId`)同时只许一次决断在路上,后到者拿同一结局的拷贝 + `joinedInFlight: true`、自己不呈卡不发决断,任一路中止 = 这一只决断被中断(CC-491)· 活卡 respond 回 `202 parking_in_progress` 读成「停驻中、这一发没生效」:结局 `{ decision: 'unresolved', parking }`、判别口既有 `unsettled` 臂新 cause `parking_in_progress`、包替用户上屏一句、不重发不去键不换名(CC-492);`kind` 联合零破坏,`ApprovalUnsettledCause` 闭集 +1 词(对 cause 做 `never` 穷举的写法编译红一次);`FsApprovalOutcome` 四臂 +1 可选位、`ToolApprovalFrameOutcome` +1 可选位;根公面运行期导出 1485 不变、公面类型名 +1;peer sdk 地板 `>=12.0.1` 不动;服务端夹具现役 7.119.0 不动;§120)。上一版 0.93.0 = **minor**:到期登记物硬删八组(型面 BREAKING;根入口 −21 名;CC-431)· device 车道读器扩到车道三位与 `management` 三态字面、新判据 `deviceLaneOpen`(型面 BREAKING;CC-454)· 审批决定口出处键换名:能力位 `approvalDecidedBy` 读器 / 唯一决定函数 `decisionAttributionKeyOf` / 退役键拒绝臂 `retired_key` / 换名恰重发一次(CC-403 并 CC-451 ②)· 能力位 `permissionModes` 读器与 `dontAsk` 按位发词(CC-451 ③)· 终局 `blocked` 的机读成因 `detail` 与会话规则记录读不到句的第十六句(CC-364)· 连接失败现场判读口 `transportFailureScene`(CC-363)· 交出后台的引擎 Bash 登记 `detectEngineBgShellDetach`(CC-331)· 子代 tick 模型位与 `/health` 配置落地读器 `readEngineConfigApplyState` / 漂移判决 `configDriftVerdict`(CC-323)· 引擎装机 core 版本三态口 `coreVersionTier`(CC-355)· 停泊赎回启动失败成因词位 `startupCause`(CC-244)· workflow 子代审批决定口两只 409(CC-430)· MCP 重拨 `unsettled` 判决臂(CC-429)· 联网搜索密钥头值判臂与来源 `host`(CC-428)· 多成因措辞存量两批(CC-120 / 423 / 422)· 活卡帧键镜像 +3(CC-433)· 会话规则可送判定对空对端段名收紧(CC-437)· 场景指派悬空 503 读口(CC-451 ⑤)· 重试覆盖层 429 不再渲成额度耗尽(CC-473)· 展示出口先洗后折(CC-472)· 弃用预告一名三位(CC-309 / 431)· 开发依赖引擎 `~7.44.0` 与生成表(CC-427)· 其余 CC-242 / 301 / 295 / 365 / 374;型面 BREAKING 两处 + 四处联合各 +1 员 + 一名三位弃用预告;根公面 1483 → 1485(+23 −21);测试钩 69 → 71;peer sdk 地板 `>=12.0.1` 不动;服务端夹具现役 7.119.0(老一代 7.106.0 – 7.118.0 十一份)、sdk 17.1.0 作下一代见证位;§119)。上一版 0.92.0 = **minor**:自动答复判定收成一只 `automaticAnswerVerdict`(CC-368)· 卡面披露键两代读 `allowRuleShadow`(CC-401)· steer 档位经包 `steerBodyOf` / `fleet.steerPriority` / `readSteerReceipt`(CC-374 并 CC-353)· 能力位读器读数随代际自动失效(CC-377)· 服务端 7.116.0 / sdk 16.2.0 提货 + `CoreValuePorts` +1 必填(CC-371 / 370)· 会话规则可送判定过规则编译器与协议名段判定(CC-381)· 支持底线抬到 server 7.106.0 / core 7.35.2(CC-352 / 380)· 其余 CC-367 / 369 / 373 / 376 / 379 / 366 / 178 / 295 / 407;型面 BREAKING 四处 + 七名弃用预告;根公面 1429 → 1483(+56 −2);测试钩 68 → 69;服务端夹具现役 7.116.0(老一代 7.106.0 – 7.115.0 八份)、7.117.0 与 sdk 16.3.0 作下一代见证位;§118)。上一版 0.91.0 = **minor**:steer 拒收处置句单源 `steerRefusalAdviceOf` / `ControlSafetyError.advice` · `.status` / `steeringRefusedBeforeEngine`(CC-307)· `abortableSleep` / `isAlreadyResolvedFailure` 上根入口(CC-317)· 引擎闭集表 `ASK_EVIDENCE_ABSENCE_VALUES` / `SYSTEM_INJECTION_PRIORITIES` / `READ_DENY_BUILTIN_TIERS` · `READ_DENY_DEFAULT_TIERS` + `parseReadDenyBuiltinTiers` / `MODE_ARBITRATION` + `askSurvivesStandingAnswer`(0.94.0 退出公面)(CC-318 / 327 / 322 ①)· 会话历史 tool_use 错配一族:`_sema_provider_rejection_resend` 归合成终局行、错配键 `rewindOffered`、`readToolHistoryMismatchKey` / `ToolHistoryMismatchRowKey`、`toolHistoryBadTurnSentence`(CC-303 / 304 / 305 / 309 ②)· 投递账本记录 `by` / `share` 与 `deliveryShareOf` / `droppedKeyCount`、`attempted` 的 `{ generation }` + `undeliveredInGeneration`(`PromptDeliveryLedger` 接口 +3 必有成员 —— 型面 BREAKING 第一处;CC-293 / 334)· 崩溃遗留通告 `crashConvergedNotice` / `crashConvergedNeedsHumanSentence` / `NEEDS_HUMAN_REASON_ORDER`(CC-310)· `permissionsDeclarationReport` + `PERMISSIONS_KEPT_REASONS` 与 `PermissionsDeclarationInput.settingsRead` 必填(型面 BREAKING 第二处;CC-314)· `engineCapsSettled(url, { withinMs })` 返回型窄变 `Promise<'settled' | 'timed_out'>` + `disableSkillsDeclarationSettled`(CC-311)· `hookMatcherVerdict`(CC-306)· `sessionPolicyReadNotice`(CC-328)· `inheritEnvRefusalContent` 首段改口(CC-336)· `attachmentsSubmitVerdict`(CC-337)· 展示出口 YAML 块标量整块一枚记号(CC-340)· `mintUserAttachmentEnvelope` / `encodeHumanTurn` / `deliveredUuidsOf` / `imageVisionOf` + 附件席位能力位读器占位形(CC-315 / 297 子集)· 服务端 7.115.0 / sdk 16.1.0 提货:「只续已有会话」按码优先、`checkpointUnsupportedVersionFromError` / `checkpointUnsupportedVersionContent`、`hookMatcherRefusalFromError`(0.103.0 退出公面)、活卡帧与耐久行 `probeReason`、接线回执 `fleet` 段 + `WiringManifestFleetView`(CC-339)· 登记物整治:`permissionRuleIssueDetail` 第三参分句(CC-359)、`rewindSpecForMode` 第三参按纪元位取舍(CC-345 ①)、HITL 桥两处型面 additive 与补偿表 `retireOn` 改台账行号(CC-343)、已知限制档清账(CC-349)· 开发依赖 settings-schema `^8.0.0`(CC-308,不出包)· 根公面 1397 → 1429(+32,零删名);测试钩 63 → 64;公面类型名 964 → 997;超集键 +2(`_sema_provider_rejection_resend` / `_sema_fleet`);peer sdk 地板 `>=12.0.1` 不动;服务端夹具现役 7.115.0(老一代八份)、sdk 16.1.0 进地板见证矩阵;§117)。上一版 0.90.0 = **minor**:引擎 7.40.1 / 服务端 7.113.0 · 7.114.0 / sdk 16 探针提货(通告码册 86 → 85、`readLegacyModeSeedMigrated` 退出公面、`attachments.planModeReminder` 退役、`PromptDeliveryLedger` +2 必有成员 —— 型面 BREAKING 三处;CC-291 / 300)· 云控制面子路径五名(CC-136)· 文件历史一句五态判定与声明事实账本(CC-294)· hooks matcher 工具别名读口(CC-298)· 机读支持底线与 `engineVersionTier`(CC-299)· `settings.permissions` 三桶装配口与 allow 能力位(CC-302)· 「改了重发」错配让位与错误载体铸口(CC-309 ①)· `AttachmentsSpecRefused`(CC-316)· 能力位读数冻结;根公面 1379 → 1397、peer sdk 地板 `>=12.0.1` 不动;§116。上一版 0.89.0 = **minor**:引擎 7.38 提货(开发依赖换钉引擎 `~7.38.2`;通告码册 81 → 86、引擎铸方表接手服务端自铸码的受众,`SERVER_NOTICE_AUDIENCE` 🔧 退出公面(型面 BREAKING,逐名见 §2z);工具轮不完整读器 `readToolTurnIncomplete`、用户输入没被用上读器 `readUserInputUndrained` 与一句 `userInputUndrainedNotice`(`EngineNoticeFactsCode` +3 员,穷尽分支的端编译期红);终局服务商拒绝详情 `readRunTerminal` 的 `failed.detail` 与「改了重发」判定口 `providerRejectionResend`(0.95.0 退出公面);steer 账本 503 `ledger_unavailable` 一张码表三条腿(`ControlSafetyCode` +1 员、子代 steer 结局联合 +1 臂,穷尽分支的端编译期红);省略成因短语口 `taskRequestOmissionCausePhrase`(0.98.0 退出公面);CC-282);审批四面问类两位 `askClass` / `classes`(三型各 +2 可选位;CC-284);请求键 `disableSkills` 与片段口 `disableSkillsDeclaration`(车道表 45 → 46 行;CC-277);hooks 设置来源条目的唯一执行者与本端跳过口 `settingsHooksKeptLocally`(`PLUGIN_HOOK_REASONS` +5 词、`PLUGIN_HOOK_EXCLUSION_REASONS` +1 词,穷尽分支的端编译期红;CC-287);凭据被拒判官 `isReadCredentialRefusal` 上根入口(CC-289);服务端 7.111.0 两项(接线回执新段 `instructions`、子代转向成功结局 `messageId`;CC-282 余项)与展示出口无标签 `Token <值>` 形照遮(CC-290);根公面 1372 → 1379;测试钩 62 不变;公面类型名 942 → 952;超集键 +1(98 → 99,`_sema_instructions`);peer sdk 地板 `>=12.0.1` 不动;§115)。上一版 0.88.0 = **minor**:展示出口凭据面一次扫描(带凭据的输入上输出字节变、干净文本逐字节同、一轮即不动;CC-247);崩溃收敛 `cause` 认第二个词 `shutdown_before_park`(`CrashConvergedRow.cause` 型联合 +1 词,穷尽分支的端编译期红;CC-218);服务端自铸通告 `server.model_unreachable` 入受众表与事实读器 `readModelUnreachable`(CC-270 ①);开发依赖换钉引擎 `~7.37.1`、放行原因闭集镜像 `GATE_MODE_RELEASE_REASON_WORDS` / `isGateModeReleaseReasonWord`、修复通告事实读器 `readToolTurnRepaired`、通告码册 80 → 81(`EngineNoticeFactsCode` +2 员;CC-272);会话所有者自助记忆抹除 `eraseSessionMemory` / `sessionMemoryEraseOutcome` + 三只闭集镜像(CC-264);registry 同一个 409 的两义判别 `classifyRegistryConflict`(0.95.0 退出公面) / `isScopeGoneError`(0.95.0 退出公面)(CC-280);请求键 `requireExistingSession`(车道表 44 → 45 行)与被拒读口 `requireExistingSessionRefusalFromError` / 一句 `requireExistingSessionRefusalContent`(CC-281);投递事实账本 `createPromptDeliveryLedger` + 两只按消息行的读口 `promptKnownUndelivered` / `withoutUndeliveredPrompts`(判据 = 引擎为这次提交建了 run;CC-271);plan 决断台账:离门证据结掉、还没被认领的登记由投递口认领原笔(CC-278);`wiring_manifest` 帧 `fileHistory` 段(`WiringManifestChromeEvent.fileHistory?` / `WiringManifestView.fileHistory?`,超集键 `_sema_fileHistory`;CC-279);根公面 1356 → 1372;测试钩 62 不变;公面类型名 922 → 942;超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§114)。上一版 0.87.0 = **minor**:会话历史 tool_use 错配的自救出路 —— 合成终局错误行超集键 `_sema_tool_history_mismatch`、`EmitContext.offersRewind?` 声明面出路句与连续次数句、根入口两只纯函数 `classifyToolHistoryMismatch` / `resolveToolHistoryRewindTarget`(CC-268);崩溃收敛 needsHuman 行的闭集因由位 `needsHumanReason`(CC-269);停车 fail-soft 同步终帧与结果帧的真因超集键 `_sema_park_failed_reason`(CC-273);workflow 活动台账 / 监视器源的 `authToken` 收取值函数、连线身份按凭证来源认(CC-274);`armDetachCancel` 入参 `authToken` 收取值函数、取件口每调现读(CC-275);chrome 臂 `suspended_reopened`(`ChromeEvent` +1 臂,穷尽分支的端编译期红;CC-276);根公面 1354 → 1356;测试钩 62 不变;公面类型名 922 不变;超集键 +2;peer sdk 地板 `>=12.0.1` 不动;§113)。上一版 0.86.0 = **minor**:引擎 7.34.0 提货两代读法 —— 事实表第二批构建期生成、`GATE_DENIED_BY_WORDS` 两代并集十一词(元素型 `GateDeniedByWord`,`mode` 专句)、门记录权限模式两臂与读口 `gateModeRelease`、通告码册六码与六只事实读器(`EngineNoticeFactsCode` +6)、`STRUCTURED_DETAIL_TYPES` +`read_unestablished`、本人规则店读不出两代读法、`shell_gate_tighten` 改句(CC-249 / CC-245 / CC-230);服务端 7.105.0 提货 —— 会话规则写口拒名码 `rules.legacy_tool_name` 的具名结局与 `isRulesRefusalCode`(CC-251)、门前只读路 401 的 `unauthorized` 态与 `READ_CREDENTIAL_NOT_ACCEPTED_NOTICE`(CC-252);请求键 `approverPosture` 退役、构造期按名拒,两个运行期名字退出根入口(逐名见 §2z)(CC-253);`AskUnresolvableFactsView.remedy?`(CC-254);开发依赖引擎 `~7.36.0`(CC-255 换钉 7.35.0,`CONFIG_REFUSAL_CODES`(0.96.0 退出公面) 8 → 17;CC-261 再换钉 7.36.0),通告码册 73 → 80;`adapt()` 错误信封不再回落读旧名 `result`(CC-221);服务端 7.106.0 提货 —— caps `store` / `centerWiring` 窄读口、SQL 姿态两代读、计费入口 503 `fleet.lease_unavailable` 读口与一句话(CC-250),`executionLane.isolated` 与「本机无 OS 沙箱」判定(CC-256),请求键 `inheritEnv` 与版本闸片段口、两只拒按码出句(CC-257),权限规则表超帽坏项读口与一句(CC-262),工具声明拒按码认领(CC-263),请求体键形拒两张键表读口(CC-265);`-p` 首帧工具来源超集键 `_sema_tools_source` / `_sema_tools_fallback_reason` 与铸口 `printInitToolFaceSupersetKeys`(CC-266),三张估计工具表改为常驻(CC-267);根公面 1310 → 1354;测试钩 60 → 62;公面类型 891 → 922;超集键 +2;peer sdk 地板 `>=12.0.1` 不动(sdk 12.0.1 / 13.1.0 / 14.0.0 / 15.0.0 下本版 `.d.ts` 严格编译均零错误);§112)。上一版 0.85.2 = **patch**:自愈重开两只失败结局带 `errorCode`(这一次重开放弃所依据的那一发失败请求的外层 wire 码,present-iff;判定形不带),重开判决不成功臂 +`_sema_errorCode`(宿主可选铸;宿主重开口抛错时本包铸)(CC-260);自愈腿读错误对象与成功应答记录上的各位收进保护(读不出按缺席,不再 reject;`atMostOnceFailureClass` / `readSteerDelivery`(🔧 0.92.0 退出公面)/ `readSteerReceiptStatus`(🔧 0.92.0 退出公面)不再抛);根公面 1310 不变;公面类型名不变(两个已导出型各多可选位);超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§111)。上一版 0.85.1 = **patch**:请求装配回执省略成因的终端用户向句表 `TASK_REQUEST_OMISSION_CAUSE_NOTICES` 与取句口 `taskRequestOmissionCauseNotice`(与接入方那只 `taskRequestOmissionCauseDetail` 同源于同一成因闭集、逐词不同句;表外 / 读不出 ⇒ 一句通用句,不抛、不回显),接入方那张句表的字面量补挂 `satisfies`(CC-248);plan-review 重开口在「这个会话没有接能显示卡的界面」那一形上答 `{ reopened: false, _sema_noPresentationSurface: true }`,自愈结局两臂带 `noPresentationSurface`、自愈行五句补一句成因,重开前提(宿主为该会话键订阅问题帧端口)成文(CC-258);自愈腿读宿主重开判决收进保护(某一位读不出按缺席,不再 reject),宿主日志 / 探针口抛错不再改变判决;多会话宿主的按会话呈现回执登记口 `registerArmedGateFromQuestionIdFor` 回到根入口(0.72.0 退出公面的名字复活;CC-259);根公面 1307 → 1310;公面类型名不变(两个已导出型各多可选位);超集键 +1;peer sdk 地板 `>=12.0.1` 不动;§110)。上一版 0.85.0 = **minor**:引擎事实表(通告码册 / 受众表 / MCP 注入丢弃原因 / 会话规则翻译判定内部两表)改为构建期生成,`ASK_ORIGIN_WORDS` / `APPROVAL_MANDATE_WORDS` 就是 SDK 导出的数组(不再冻结),四个思考档 / 权限模式型改为 SDK 型的别名,包内单源(CC-230);子代族八入口与两只行停止门收注入 client,写动词失败结局 +`unconfirmed`,`classifySubagentResumeFailure` 同判(CC-236);`sessionPolicyDeliverable` 收可选名册,`SessionPolicyWithheldWhy` 六词 → 七词(CC-228);过渡物退役登记与到期门,`adapt()` 不再认旧名 `attachedFiles`,三个运行期名字退出根入口(逐名见 §2z),`surfaceRememberNotApplied` 撤回退役预告(CC-221);plan-review 决断台账六口,`reopenPlanReviewCard` 按台账拒开(CC-241);会话后台任务停止口 `stopEngineSessionBackground` 与受据归类口 `engineSessionBackgroundReceiptReadingOf`(CC-246);服务端 7.104.0 会话侧:会话存档读不出三载体读口与人话 `corruptSessionContent`、`session.records_skipped` 进册(`SERVER_NOTICE_AUDIENCE` 🔧 0.89.0 退出公面前的三行)、删会话 409 读口、`/decide` 停驻挪动族读口(CC-217 / CC-243);服务端 7.104.0 能力 / 同步体侧:同步 park 新体与 park 行 `result`、`fileHistoryCaptureMode` 认 `on-optional` 与请求词片段口 `fileHistoryDeclarationField`(0.100.0 退出公面)、公钥发现读口 `projectSealedKeyCapability`、折叠粗码 `isStatusDerivedCoarseCode`(CC-243);同名影子对账门按语义判(CC-222);导出存活门读已提交历史(CC-240);根公面 1275 → 1307;测试钩 59 → 60;公面类型 +34;peer sdk 地板 `>=12.0.1` 不动;§109)。上一版 0.84.1 = **patch**:`<system-reminder>` 开标签定位口 `findSystemReminderOpenTag`(CC-210);detach durable-off 400 纯判定 `isDetachDurableOff400`,`detachDurableOffHint` 对读属性会抛的错误对象改回 `null`(CC-219);服务端自铸通告码进码册与受众表 `SERVER_NOTICE_AUDIENCE`(🔧 0.89.0 退出公面;`instructions.source_changed` 回到用户面)+ 事实读器 `readInstructionsSourceChanged`(CC-213);按码派发的通告事实口 `readEngineNoticeFacts` + 派发表 `ENGINE_NOTICE_FACT_READERS`,`readReadRootGrantNotice` 入参型放宽(CC-214);停泊审批决断 422 `parked_resume.startup_failed` 的读口 / 一句话 / 判定与码优先 `isCodeClassifiedGateFailure`(0.98.0 退出公面;CC-225);拒启会话的窄撤销动词 `removeRefusedSessionRules` 与出路句 `legacyToolNameFailureNoteOf`(0.103.0 退出公面),`CONFIG_REFUSAL_CODES`(0.96.0 退出公面) 七员 → 八员(CC-229);plan-review 编排三口与两只能力探针收注入 client(CC-209);CC 形 `permission_denials` 收入参只被传输层脱敏过的拒绝 + 超集位 `_sema_tool_input_redacted`(CC-235);凭据读法两处放行收口(CC-234);根公面 1260 → 1275;公面类型 +18;peer sdk 地板 `>=12.0.1` 不动;§108)。上一版 0.84.0 = **minor**:peer sdk 地板 `>=11.3.0` → `>=12.0.1`;后台代理登记读数 —— 读口 / 取代判定 / 归类口 / 登记键桥 / 补行谓词,缺席行下半场(CC-194);读目录授权结论通告读口 `readReadRootGrantNotice`(CC-185);接线回执 `hands` 段 `_sema_hands` + 读口 `handsSeamReadingOf` / `handsSeamDetail`,`handsMountedDetail` 坏入参不再抛(CC-206);陈旧逻辑清扫(CC-223):退役键 `rewind.rewindFiles` 构造期拒收、`WorkflowRunState.agentCount` 改可选、26 个内部件退出根入口、九张公面判定表换只读 Set 子类、十五张判定数组冻结、`resume_at` 文本兼容腿退役;根公面 1278 → 1260;公面类型 +10;§107)。上一版 0.83.6 = **patch**:会话规则记录的无损判定 `sessionPolicyDeliverable` 把引擎会在准备阶段拒启的两类名字(引擎退役名、含 `__` 而不以协议前缀开头的名字)改判「不写」,成因词 `legacy_tool_name`(闭集 5 → 6),引擎说「改名为 X」的退役名带 `currentName` 出路位;`peer_wide` 那句改措辞(判决不变)(CC-226);根公面 1278 不变;peer sdk 地板 `>=11.3.0` 不动;§106)。上一版 0.83.5 = **patch**:展示层出口 `displayUntrusted` 的连接符 ZWJ / ZWNJ 按语境判(🔴 默认形输出字节变)、两只可选开关 `escapeBackslashes` / `blanks` 与标记位置读口 `displayUntrustedMarks`(CC-204);凭据两网的判别视图认孤代理项,机读字节 `errors[]` / 合成终局行同批(CC-207);转义记号在凭据再扫里原子与四处凭据读法存量修复(相对 0.83.4 零新增外泄);hooks 启动模式可选词读口 `SettingsPort.hooksStartupMode()`,安全 / bare 模式下设置来源只发 managed(CC-200),设置来源里同一条 hook 只发一份(CC-208);自愈三条重发结局 +1 可选位 `releaseConfirmedByEngine`、行句按释放证据分说(CC-212);活段接入指引订正;公面类型 +3;peer sdk 地板 `>=11.3.0` 不动;根公面 1278;§105)。上一版 0.83.4 = **patch**:只增 —— plan 审批卡「用户亲手关掉的卡,自动触发不在同一道门上放回屏上」的判定归包(`reopenPlanReviewCard` 加触发者位 `trigger`、拒开位 `dismissedByUser`,409 自愈腿按提交出身替宿主传触发者、结局与整行由包出;CC-201);座位审批请求补强制位 / 强制理由词 / 报价缺席因由 / 出身词四个可选位与过境口 `toolPermissionRequestAskBits`(CC-203);`<system-reminder>` 剥离 / 解包两只口上公面并改线性时间(CC-205);两条展示层接入指引订正;开发依赖引擎 `~7.33.1`;公面类型 +2;peer sdk 地板 `>=11.3.0` 不动;根公面 1277;§104)。上一版 0.83.3 = **patch**:入参 / 来源面 —— hooks 投影加 flag 来源(`--settings` 那一层,排在 local 之后;设置来源 hooks 维持托管在前拼接);规则列举口 `listAllPersistedRules` 入参只要 `list`(`RulesListFacade`,其余四口作可选成员);模型身份认目录缺省(本机读数加宿主报位 `engineAcceptsCatalogDefault`,位 `true` 才算目录可解析);公面类型 +1;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§103)。上一版 0.83.2 = **patch**:只增 —— 审批卡一族三件(常驻姿态下的放行谓词 `askSurvivesPosture`(0.94.0 退出公面),三态、「不知道」不折成放行;卡上 `mandate` 六词闭集 + 读口 + 每词一句说明,通告码册 +2,开发依赖引擎 `~7.32.0`;停泊卡带出身词 `origin`;CC-193 / CC-195 / CC-196)与后台子代缺席行的判定、计数、sweep 豁免、回收与措辞单源(回收只在后台代理登记确认离场时;CC-194);公面类型 +13;peer sdk 地板 `>=11.3.0` 不动;根公面 1273;§102)。上一版 0.83.1 = **patch**:只增 + 行为订正 —— 展示层安全出口三端单源 `displayUntrusted`(凭据两网 ∘ 字符三网,选项按载体选;CC-112);本包合成的终局行正文与结果帧 `errors[]` 在铸点洗凭据(`errors[]` wire 可见,方向只会更安全)、交互车道合成行带上行类旗,回决备注与子代续跑收据多收双向 / 格式字符(CC-187 / CC-112);会话规则记录的无损判定 `sessionPolicyDeliverable` + 措辞单源 `sessionPolicyWithheldNotice` + 五词成因 `SESSION_POLICY_WITHHELD_WHY`(整批可送才送,首尾带空白的名字比宿主侧更严;CC-117);插件 hook 每轮计划 `hooksWirePlan` + `SettingsPort` 可选读口 `enabledPluginHooks` + `hooksForWire({ plan })`,逐条判「投给引擎 / 本客户端执行 / 如实不跑」、开机「不会执行」清单与 `/hooks` 标注措辞单源(投给引擎那一臂候引擎能力位 `taskSettings.pluginHooks`),设置来源的 `mcp_tool` 与 exec 形 hook 条目不再上请求体、手写的 `plugin` 键剥掉(CC-174);公面类型 +26;peer sdk 地板 `>=11.3.0` 不动;根公面 1254;§101)。上一版 0.83.0 = **minor**:行为面与型面都有 BREAKING —— CC 形消息 24 项按裁定 C-R103 退役名:结果帧 `degraded` / `errorCode` / `model` 与错误信封 `result` → `_sema_model_degraded` / `_sema_error_code` / `_sema_selected_model` / `_sema_salvaged_result`,合成终局行 `isApiErrorMessage` → `_sema_api_error_message`,工具结果记录删过渡名 `toolUseResult`,system 行 `attachedFiles` → `_sema_attached_files`、到达时戳 `timestamp` 与 `isMeta` 删,print 完成通知帧十三键平铺 `_sema_*`,记忆写入改走 chrome 臂 `memory_saved`(新型 `MemorySavedChromeEvent`,`CHROME_ARMS` required);本包只铸新名、端两名并读一版 + 结果帧 CC 键 `terminal_reason` 与读口 `terminalReasonForResult`(CC-175),错误信封知道就铸 `_sema_selected_model` + 转录 id 改 UUID 形(CC-147)+ `SettingsPort` 可选合并读口 `mergedDisableAllHooks`、用户层 `disableAllHooks` 在引擎腿上生效(CC-162)+ 退化审批卡三形拒收改写、`FsApprovalOutcome` 的 `failed` 臂 +可选位 `editRefused`(CC-135)+ 注入件自愈句整族重写 + 联网搜索旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 退出公面,`resolveLiveInitToolFace` 可选 `opts.webSearchStamped`(`LiveInitToolFaceOptions`),endpoint userinfo 律跟服务端 7.101.0(CC-184)+ 公面类型 −4(CC-171)+ 通告码册 69 → 71 与结构化卡白名单 +`read-inbox`(CC-186,开发依赖引擎 `~7.31.0`)+ 合成终局行 `uuid` 改 UUID 形;peer sdk 地板 `>=11.3.0` 不动;根公面 1238;§100)。上一版 0.82.7 = **patch**:只增不改 —— 每请求联网搜索配置的三态判决 `judgeWebSearchSettings` / `webSearchVerdictFromEnv` / `resolveWebSearchVerdict`(与 7.100.0 及以后 server 的受理判官同序同判,认不出的 provider 判形错、不再静默丢段;settings 段凭据注入回调 `apiKeyFor`)+ 措辞单源 `webSearchVerdictMessage`(不回显任何用户配的值)+ 调试日志用 `webSearchEndpointForDisplay`;旧三读口 `webSearchFromEnv` / `webSearchFromSettings` / `resolveWebSearch` 行为不变、标过渡期,0.83.0 删(CC-182);peer sdk 地板 `>=11.3.0` 不动;根公面 1240;§99)。上一版 0.82.6 = **patch**:只增不改 —— 停泊行上选「本会话允许」却没被记住时与活卡腿同句告知(回体 `rememberApplied: false`,或 server 以会话级放行专属拒绝码拒了 remember 后回退普通批准;其余失败一律未知不告知),回执 `DecideReceiptView` +1 可选位 `rememberApplied`(CC-181);决断落定后与桥重试臂的诊断留痕不再因宿主日志口抛错回流进决断;接入文档改口:server ≥7.100.0 上 park 行卡的 `requiresRealApproval` / `approvalIsMandated` 生效(CC-180,零代码改动);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§98)。上一版 0.82.5 = **patch**:只增不改 —— print 车道 init 帧工具面名册优先:流包装器 `withPrintInitFrame`(首选接法,init 恒为首行、其后按到达序)/ 判定闸 `createPrintInitGate` / 分类口 `printInitRosterSignal` / 判定口 `decidePrintInitToolFace` / 留痕措辞 `printInitToolFaceDebugLine` + 等待上界 `PRINT_INIT_ROSTER_WAIT_MS`(150 000);回落估计表补 `ListAgents`(7.30.0 及以后的引擎上与 `SendMessage` 同条件)(CC-169);peer sdk 地板 `>=11.3.0` 不动;根公面 1235;§97)。上一版 0.82.4 = **patch**:只增不改 —— park 行审批卡新增门类位 `irreversibleParkGate`(待决行门类恰为 irreversible_ask,今天即生效,门类事实不是保证);`requiresRealApproval` 在待决行顶层带时透传(就绪,待决列表带出后才生效,今天零行为变化)(CC-180);`ApprovalCardRequest` +1 可选位;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§96)。上一版 0.82.3 = **patch**:只增不改的公面 —— 自愈提示的「保住对话」出路槽 `keepSessionWayOut` 与交互面引擎决断入口开关 `engineDecidePath`(CC-177;两位都不给时措辞与 0.82.2 逐字节同);自愈结局两臂 +机读位 `pendingRowGone`(重开链证实待决项已不在);peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§95)。上一版 0.82.2 = **patch**:只增不改的公面 + 若干行为订正 —— 新增措辞单源 `cloudEffectiveNotices`:云控制面有效配置回体的降级告警 / 预算 / 能力上限三读数(CC-164,四态,不读成 0 或「没有预算」);本机引擎 models 文档在宿主注入本机条目判定 `entryAccepted` 时补 `default` / `tierGroups` / `activeTierGroup`,剔掉会让本机整份拒收的目录引用与判定口不收的条目,去掉 registry 注记键 `origin` / `overridesTeam`(CC-165;结果新增 `modelRefIssues`);计划复核结局机读位 `_sema_planReviewOutcome`(CC-160 ①);停泊审批决断操作起止回调 `onDecideOperation` 与操作句柄 `openDecideOperation`(CC-160 ③);新增超集键 `_sema_planReviewOutcome`;peer sdk 地板 `>=11.3.0` 不动;根公面 1229;§94)。上一版 0.82.1 = **patch**:只增不改的公面 + 若干行为订正 —— 新增读口 15 个(续跑折叠码读口与措辞 / 文件历史捕获读口六口 / 模型身份可解析判据五口 / 自定义代理载荷作废重投口 / 决断失败码「门还在」判定)+ 宿主车道声明 `EmitContext.lane`;新增超集键 `_sema_response_model`(终帧 / 每轮用量)与 chrome 用量两臂 `responseModel`、重开判决 `_sema_decisionInFlight`、自愈结局两臂 `decisionInFlight`、内部臂 `_sema_denial_unclassified`、通知码 +1;行为订正:计划复核决断在飞不重开卡且自愈提示不再教人再决一次(CC-160 ②)、决断出口补折叠句且停泊腿不再把折叠 / 坏档误判已决(CC-154)、执行车道 `in-process` 措辞(CC-153)、`-p` 车道 Bash 良性退出与交互同判(CC-168)、`-p` 工具结果帧补结构化结果(CC-149)、被拒分类词两车道同判(CC-172)、非交互车道子代工具帧(CC-158,宿主声明车道才生效)、终帧被拒清单对账流内拒绝(CC-159)、自定义代理载荷作废重投(CC-161);peer sdk 地板 `>=11.3.0` 不动;根公面 1228;§93)。上一版 0.82.0 = **minor**:只增不改 —— 新增只读读口 17 个 + 1 常量、工具名册行一格 `mountedBy`、turn 错误判决 `http` 臂一格 `storedRowWhere`:`/rewind` 代码档与对话档能不能用由引擎能力位回答(CC-146)、云控制面额度读数三分(CC-150)、装配期「这一条腿有没有手」(CC-152)、续跑拒收按原码判(CC-154);两处既有面行为订正:自动模式分类器拒的类别词由 `permission-rule` 改为 `automode-*` 三词(CC-155,订正 0.81.1)、续跑上下文读不出时引擎点名的那一行不再丢(CC-156);0.81.0 预告的 23 键 + 1 子型删改**改到 0.83.0**(§92y ㉙);零 wire 键、零投影臂;peer sdk 地板 `>=11.3.0` 不动;§92。上一版 0.81.1 = **patch**:被拒分类词读器加第③路(CC-148):引擎「没问过就拒」的工具调用(deny 规则 / 权限模式 / hook / 分类器 / 写保护 —— 无 `settlement` 只有 `gate.disposition.deniedBy`)在 user 工具结果记录与终帧 `permission_denials[]` 上此前恒缺 `_sema_denial_kind` / `toolDenialKind`,现按层名落 `permission-rule`(其中「分类器」一项已由 0.82.0 CC-155 订正)(`ask_resolution` 无结算 / 结算段不成形 / 层名表外仍缺席不猜);交互与 `--print` 两条车道同一只读器;另钉终帧两臂 `_sema_effective_*` 键集不变量 —— 成功臂展开单铸函数、错误信封显式重发,覆盖性钉在返回对象自己的类型上(漏键 / 多键编译期即红)+ 门格判两臂键集相等且值逐字节同,给单铸函数加键时错误臂不会再静默少键(本版无键增减);零 wire 键、零投影臂、根公面 1195;§91。上一版 0.81.0 = **minor**:CC 形消息一张脸(C-R85 / CC-131):user 工具结果记录加 SDK 面键 `tool_use_result`(与过渡键 `toolUseResult` 同引用,删驼峰原定 0.82.0、已改到 0.83.0)+ DS-19 普查门升硬门(键集按语法解析、按 type/subtype 分表;23 键 + 1 子型过渡表到期窗原为 0.82.0、已改到 0.83.0,零常驻豁免)+ CC-145 `/rewind` both 臂改发 `restoreFiles:true`、`projectRewind(pending)` 单参;零 wire 键、零投影臂、根公面 1195;§90。上一版 0.80.2 = **patch**:`conflict.resume_context_unavailable` 的 `staleAfterSec` / `runId` 在真 SDK 上读不到(CC-137:sdk 11.1.0 起 `APIError` 把体上非具名键收进 `extra`,这一码映射成 `ConflictError` 无具名位,读口只读顶层 ⇒ 真调用链恒缺席)⇒ 体源结构位改「顶层有效值优先、`extra` 兜底」三只类型化读口单铸,有具名子类位的三处(`retryAfterSec` × 2 / `allowlist`)行为不变只多兜底,头源 `retryAfterMs` 只读具名位;零 wire 键、零投影臂、根公面 1195;§89。上一版 0.80.1 = **patch**:去键重发判据句按「铸」计(CC-143;§87「带键的体恰一次」作废 → 被铸恰一次,POST 几次随传输层)+ 接入文档段落自带射程限定词自 §88 起向前执法 + 模型预设表 deepseek 项改闭集真名 deepseek-flash(CC-144,C-R82 ①)+ 门里 git 兜底自陈探针(CC-142);零 wire 键、零投影臂、根公面 1195;§88。上一版 0.80.0 = **minor**:🔴 peer sdk 地板 >=11.2.1 → >=11.3.0 + 策略拒的归因上 wire(CC-133:发送面 deny+policy 带 settledBy / 读侧 policy_refused 十三词入 CC 规则桶 / 三错误码读口 / 直连门去键重发恰一次)+ 删除规则后果句归包(CC-132)+ /mcp 详情卡两腿分说归包(CC-134:六档读口 + 九句铸点,同批改口八处说满的话)+ 🔴 终帧旧拼法 `structuredOutput` 按 0.79.1 的宣告删除(只剩 CC 形 `structured_output`);根公面 1195;§87。上一版 0.79.1 = **patch**:终帧结构化产出同帧铸 CC 形 `structured_output`(旧拼法 `structuredOutput` 过渡一版,0.80.0 删;CC-130)+ 写审批 `argsOmitted` 退化卡在无受护写入部署形上重新解得出路径(CC-129)+ 云控制面十值二型经本包第二个入口 `@sema-agent/client-core/registry` 原样转口(根入口零变;CC-128 ①);根公面 1184;§86。上一版 0.79.0 = **minor**:server 7.93.0 过境批 —— peer sdk 地板 >=11.2.1 + 写口回执第六臂 unverified 与 503 体 committed 分臂(CC-124)+ 无 run 可读的 MCP 状态面(CC-74)+ 审批卡 mandated 位(CC-110)+ 请求装配第三车道 utility 与 approverPosture / maxTokens / outputRetries 三键 + print 车道 model 座(CC-116 / 118 / 123)+ 拒因两面分铸与四个机读位(CC-125)+ 模型轮边界划消息界(CC-126)+ 委派结果人类面读口按来源声明体内定位(CC-127)+ sdk 转口三件(CC-128)+ 通告码 memory.project_scope_absent(CC-122);公面 1184;§85。上一版 0.78.2 = **patch**:门的棘轮登记数字单真源 —— 五只门十一格棘轮 + 218 条沿革账搬进 scripts/registry.json、门只读不抄、负控改篡改登记物、下调通道 RATCHET-SLACK、新门 run-registry-test(CC-79 第一期)+ 两格存量松量收掉 + submit-wiring-manifest 门补 count===1 边界格;src 零改动,dist 逐字节同 0.78.1;公面 1154;§84。上一版 0.78.1 = **patch**:两辆并行车收货 + 三张跟进票 —— displayBody 人类面读口 + 围栏解析头尾配对收紧(CC-113)/ MCP 两处「没报」措辞分句(CC-115)/ 记忆治理面五动词调用口(CC-97 b)/ 非流式提交回执接线回执读口 readSubmitWiringManifest(CC-121)/ 三份失败判官抛出物读取收口(CC-119);公面 1154;§83。上一版 0.78.0 = **minor**:peer sdk 地板 >=9.8.1 → >=11.0.1(CC-106)+ 单步写口 200 体按 stillLive 判别联合改读、第五臂 revoked、三型取自 sdk、RulesFacade.write 必填、PersistedRuleLiveness 转口(CC-103)+ DeniedBy 第十词 read_boundary 专句(CC-106 ④)+ excludeAllTools 车道行;型面 BREAKING 三处、行为面同 0.77.2;公面 1143;§82。上一版 0.77.2 = **patch**:出包面结构卫生 —— 构建期 removeComments,dist js / d.ts 零注释(新门 run-dist-comments-test.mjs + 卫生门词表 32 条 + 文档向前执法;CC-100)+ gateDeniedByDetail 表外词兜底句改「本版不认识这个层名」(CC-111 ①);行为 / 型面逐字节同 0.77.1;公面 1143;§81。上一版 0.77.1 = **patch**:外部验收三件回填 —— 读器族边界残留 projectMcpReconnectCapability 只认自有键(CC-107)/ rewind 四子键恰读一次(CC-108)/ 子代输出合并按回体 output.type · retrieval_status 定处置(CC-109,server ≥7.92.0 cursorSemantics 缺席面);型面 additive 一处;公面 1143;§80。上一版 0.77.0 = **minor**:请求装配逐键去向回执 + print 车道补座 + 表外键响亮拒(CC-101,四条行为 BREAKING)/ 会话策略写端口(CC-105)/ 持久规则单步写面(CC-103)/ workflow 子代面板行代际三向恢复(CC-104,零改码)/ 能力位读器族口径整族改齐 + 外部验收 F-A / F-B 处置 + 合并树异源复审两轮处置;公面 1143;§79。上一版 0.76.2 = **patch**:制品卫生 —— 清 dist 重 build 去掉两只已撤出源码的编译产物 + dist ⇄ src 对账门;零源码 / 零型面 / 零行为改动;公面 1122;§78。上一版 0.76.1 = **patch**:能力位读器工厂(CC-75)/ MCP 活性观察读口(CC-36)/ `capabilities.peerLane` · `permissionRulesWrite` 四态读口(CC-102)/ 记忆治理面两只读口 + 三只条目面回体读口(CC-97 a)/ 主车道证明逐次新建(CC-99)+ 修 0.76.0 的 F1 / F2(身份四键一次性快照只修了投影口一侧);公面 1122;§77。上一版 0.76.0 = **minor**:六票一批 —— `prompt_assembled` 投影臂 / 审批 feed 三态(**型面 BREAKING**)/ `ApprovalResolution` 单源联合 / 记忆 spec 读口 / 终态词表上游钉 / `tasks_expand` 退役(**型面 BREAKING**),外加身份四键一次性快照(跨全部内部臂);公面 1081;§76。上一版 0.75.1 = **patch**:面板短命子代反序缓行放不出的残洞(外部复验 D1)+ 同代 running 帧三向定形(B4)+ #969 提货 `spawnName` 透传与 `agentType` 改读诚实来源(CC-95);§75。上一版 0.75.0 = **minor**:压缩的非 compacted 结局上 chrome 面 `compaction_outcome`(新内部臂 —— 自建 print 出口的端先表态)+ peer sdk 地板 `>=9.8.1`;型面 additive(ChromeEvent +1 臂)、公面 1065、零 wire 新键;§74。上一版 0.74.5 = **patch**:core 7.24.0 提货 `_sema_freed_tokens?` + 首见即终态的行零事件(幽灵完成行)+ `isNewEngineAgentPanelCycle` / `approvalOutcomeNoteOf`(0.98.0 已退役)上公面;型面 additive、公面 1065、peer 不动;§73。上一版 0.74.4 = **patch**:面板键「先发布的键为准」(tick 归不了一的三序不再两行)+ 前代 UUID 迟到 tick 丢弃 + `readRunCancelContext` 下钻收紧;型面 additive、公面 1061、peer 不动;§72。上一版 0.74.3 = **patch**:面板子代身份归一(tick / end 的 UUID 归到 fleet 尾段,宿主零改)+ run 记录 `cancelContext` 读口与成因四词 + workflow 行 `errorCode` + reopen 第二臂两件;型面纯 additive、公面 1061、peer 不动;§71。上一版 0.74.2 = **patch**:`capabilities.deviceExecutor.management` 四态读口(缺席 ≠ false;`deviceExecutor: false` = 车道缺席;管理动词可用性三态归包);公面 1052;§70。上一版 0.74.1 = **patch**:审批卡无决断收口 + 结局回交;§69。上一版 0.74.0 = **minor**:peer sdk 地板 >=9.7.1 + covers 过境 + 面板周期身份 + 离场读口;§68。上一版 0.73.5 = **patch**:workflow 规模告警判定上收进包(`evaluateWorkflowSize` 三态:未知的规模不当作规模正常;分母口径与帽优先级单源;env 读口纯函数);型面纯 additive、公面 1044、peer 不动;§67。上一版 0.73.4 = **patch**:终帧 `permission_denials` 第三键 ⇐ 同一条流 `tool_start` 入参按 `toolCallId` join(三道闸;join 不上留 sema 载体;🔴 更正 0.73.2「自动升级收口」一句)+ 审批 feed push 侧取件失败的欠账退避重试;型面纯 additive、公面 1033、peer 不动;§66。上一版 0.73.3 = **patch**:CC-61 sdk 9.7.1 提货 + `capabilities.approvalsStreamLive` 四态读口(缺席 = 判不出;`livePendingNeedsReconcile` 只在引擎明说会推时才让对账节拍降兜底)+ CC-60 五条模型面文案锚包侧半场(cursorSemantics 机读位 / result 行注记 / bash 首行两变体与良性槽 / 通知 seed 并集 / parked 臂);型面纯 additive、公面 1032、peer 不动;§65。上一版 0.73.2 = **patch**:CC-59 悬挂 ask 全卡 —— `livePending[].frame`(server ≥7.87.0)两道闸窄读进视图,在场即走流内帧腿同一条路(入参可见、改写可转发),缺席保持盲卡;CC-34 收口(引擎半场随 7.87.0 到货,判据交黑盒);型面纯 additive、公面 1026、peer 不动;§64。上一版 0.73.1 = **patch**:CC-57 `decidePlanReview` outcome 尾句按「决断有没有生效」四态选(单铸点 `planReviewOutcomeTail`;此前本地拒发仍让模型汇报已拒绝)+ CC-56 cancel 的 409 按机器码分家(`cancelConflictFromError` 三形 / 新安全码 `cancel_run_not_running`)与提交面 429 用量窗读口 + 人话;型面纯 additive、公面 1026、peer 不动;§63。上一版 0.73.0 = **minor,型面 BREAKING**:fleet 视图八个数值键改可选 —— CC-52 `FleetTaskView.elapsedMs` / `tokens` / `queuedCount` 与 `FleetWorkflowView.doneCount` / `totalCount` / `failedCount` / `tokens` / `elapsedMs` 不再 `?? 0`(有键 = 真值含真 0,缺键 = 不知道;逐键缺席语义见 §62b)+ 台账补偿链无基数不铸;公面导出名零增减 1019、零 wire 变化、peer 不动;§62。上一版 0.72.14 = **patch**:悬挂的流内 ask 拉半场 —— CC-55 `startApprovalsFeed` 快照加 `livePending` 段并进变化摘要(键缺席 = 未报,不铸空)+ 视图 / 去重账 / 与流内帧腿同链的决断口(入参不可见上卡明说、改写不转发)+ 宿主闸对账节拍 + 待决计数读口(不知道 = null);型面纯 additive、公面 1019、peer 不动;§61。上一版 0.72.13 = **patch**:server 7.86.0 提货 —— CC-46 plan_review `permissionModeAfter` 发口(三选卡双闸:宿主声明只读起步 ∧ 引擎 ≥7.86.0;400 field_conflict 两种处置)+ CC-54 `capabilities.executionLane` 四态读面(键缺席 ≠ 不是本机车道;`toolsRunHere` 判据归包)+ CC-53 detach 版本闸三态;型面 additive(另撤回 0.72.12 的主通道 `absent` 臂,改独立缺席订阅口)、公面 1011、peer 不动;§60;**预告 0.73.0 BREAKING**:fleet 视图数值键改可选。上一版 0.72.12 = **patch**:「缺席被折成正向终态」按类清剿 —— CC-50 M1 头条(fleet 行缺席改发 `absent` 不再铸 `end{isError:false}`)+ 六站一次改齐(缺席 ⇒ `unknown`)+ 结果边界 fail-closed 取舍 + `_sema_outcome` + `Outcome unknown:` 行 + CC-51 M6(default 臂不再谎报 running)+ 普查门 + DS-06;型面 additive、公面 993、peer 不动;行为面三处真变化见 CHANGELOG 取舍段;§59。上一版 0.72.11 = **patch**:core 7.23.0 提货 —— CC-49 通告码 66 → 67 `config.write_protection_unresolved`(operator;兄弟码 `target_view_absent` = 没有视图,这枚 = 有视图解析不出)+ `permission_denials` 自动升级腿通电(`gates[].toolCallId` ⇒ `tool_use_id`;CC-34 引擎半场);型面零变化、公面 989、peer 不动、devDep core ~7.23.0;§58。上一版 0.72.10 = **patch**:CC-41 leader run 终局 `needs_human` + `result.conflict` 三形读面(none 缺席不可分 / unreadable 在场读不懂 / conflict;`salvaged[]` 原样给落盘口;措辞单源不提重试);型面纯 additive、公面 989、peer 不动;§57。上一版 0.72.9 = **patch**:server 7.85.0 提货 —— CC-30 会话内 MCP re-dial 消费口(`reconnectMcpServer` 三态 / unsupported 恒五键 / 交易文案单源)+ CC-39② memory-status `autoConsolidationArmed` 三态 + CC-45 resume 补充句渲保留秒数;型面纯 additive、公面 985、peer 不动;§56。上一版 0.72.8 = **patch**:清账三票 —— `memory:"off"` 请求键(CC-39③,server 7.84.0 S-405)+ `runStream` 第二条中性臂 `Model output error:`(CC-43)+ 注入件撞活 run 自动 steer 零卡(CC-44);型面纯 additive、公面 977、peer 不动;§55。上一版 0.72.7 = **patch**:core 7.22.0 提货 —— 通告码 66 `mcp.server_redialed` + 读器 `readMcpServerRedialed` + `wiring_manifest.readDeny` 第九段 `_sema_readDeny`(缺席 = 没有内置行判这条腿);型面纯 additive、公面 971、peer 不动、devDep core ~7.22.0;§54。上一版 0.72.6 = **patch**:cli L-379 包侧半场 —— `steerFollowIntent` steer 后续听意图三态(tail / after-decision / after-wake)+ `activeRunSelfHealRow` 续听声明第五参;型面纯 additive、公面 969、peer 不动;§53。上一版 0.72.5 = **patch**:server 7.82.1 提货 —— `capabilities.webSearch.backend` 部署默认 WebSearch 后端四态读面(键缺席 = 老引擎判不了 ≠ `none`);型面纯 additive、公面 968、peer 不动;§52。上一版 0.72.4 = **patch**:core 7.21.x 三件经 server 7.82.0 提货 —— `wiring_manifest.autoConsolidation` 第八段 `_sema_autoConsolidation`(缺席 = indeterminate 不折 false);型面纯 additive、公面 962、peer 不动;§51。上一版 0.72.3 = **patch**:core #863 记忆单系统半场 ① —— `projectAgentsForWire` 投影 `agents[].memory`(user|project|local 三词同映射引擎平面 agent:<type>);型面纯 additive、公面 962、零 wire 新键、peer 不动;§50。上一版 0.72.2 = **patch**:workflow 视图两票 —— `LiveWorkflowController.resolution()` 六态(snapshot() 的 null 三义拆开)+ `noteOwnWorkflowRun` own 台账同拍登记;型面纯 additive、公面 961、零 wire 键、peer 不动;§49。上一版 0.72.1 = **patch**:server 7.80.1 提货 —— 409 `conflict.resume_context_unavailable` 结构读数(`staleAfterSec` / `runId`;sdk 9.6.0 尚未带键,经 sdk 今天恒缺席)+ `SkillSpec.baseDir`(只在本机车道带);型面纯 additive、公面 960、peer 不动;§48。上一版 0.72.0 = **minor**:型面 BREAKING —— 39 个零消费导出退出公面(CC-32 退役批,[7419] §45 预告 / cli [7422] 同意 / web-client·desktop 过节拍沉默 = 同意;名单见 §47a S-1);运行期零 BREAKING、公面 956、peer 不动、devDep core ~7.20.1;随批:已退役名账 `removed` + export-liveness 门 G 段 + 冻结账门 ⑧c;§47。上一版 0.71.4 = **patch**:core 7.20.1 提货 —— `ENGINE_NOTICE_CODES` 65 + `wiring_manifest.writeProtection` 第七段 `_sema_writeProtection`;型面纯 additive、公面 995、peer 不动、devDep core `~7.20.1`;§46。上一版 0.71.3 = **patch**:门体系清账批 —— CC-24 export-liveness 门 + 39 个导出退役预告(0.72.0 删,表态制)/ CC-26 `as unknown as` 铸链棘轮 / CC-25 冻结账门 ⑧ 段 / CC-06 B-081 包侧半场(终帧 `_sema_effective_reasoning` / `_sema_effective_memory_scopes` + resume reopen 族 + `routePairingVerdict`);型面纯 additive、公面 986 → 995、peer 不动;§45。上一版 0.71.2 = **patch**:接入方验收两票归包 —— CC-28 B-132 decide 拒体三句去内部车道词 / CC-29 B-133 committedUuids 唯一性(重复 ⇒ 形 f);零型面变化、公面 986、peer 不动;§44。上一版 0.71.1 = **patch**:接入档打回修正 —— CC-27 `ApprovalCardRequest.readRootCandidate?` 帧→卡透传位 + 新导出型 `ReadRootCandidateView`;型面纯 additive、公面 986 不变、peer 不动;§43。上一版 0.71.0 = **minor**:型面 BREAKING 六件 —— peer sdk 地板 >=9.6.0 + agent-types >=0.3.0 / `SkillsListingTruncatedFactsView` 删 `requestedBudgetBytes?`·`laneClamped?` / `WiringManifestMcpEntry` → `WiringManifestMcpEntryView` / `MAX_AGENT_SKILLS` 删 / `decide.workflow_host_not_parked` 退役;运行期零 BREAKING。内容:core 7.20.0 提货(闭集 +5 六十四码)/ 🔴 CC-16 `text_segment_end.committedUuids[]` / CC-08 全五件(tool_disclosure / tool_progress 两 chrome 臂、wiring_manifest tools·hooks·lsp 进切片、tool_roster_delta 接上、context_usage 进切片、`readRootCandidate` 镜像)/ CC-19 `mcpEngineLegPresence` 归包 / CC-20 not_parked clean-cut;公面 986;§42 / 42y 八条)|
|
|
23
23
|
| peer:wire 契约 | `@sema-agent/sdk` **>=23.1.0**(value-level,非 type-only;🔴 **0.99.0 抬版**(支持底线 sdk 一项同批抬到 23.1.0;§127 PK-1):根入口原样再导出 sdk 的请求层附件条目型 `UserAttachment`(23.1.0 起才有;与 sdk 同名的公面型就是 sdk 那一只),装 23.0.x 的消费方 d.ts 解析不到该名,运行期零差;此前 **0.98.0 抬版**(CC-733,sdk 23 提货;支持底线 sdk 一项同批抬到 23.0.2;§126 PN-2):活卡 respond 回执按 sdk 的两臂联合读(首决落地 / 首决回放),会话规则记录取 sdk 的三桶型,停驻续跑的启动成因取 sdk 的五词闭集,崩溃遗留行取 sdk 自己的行型(`CrashConvergedRow`);地板越过 sdk 22.x,五处只在 21.1 一代上成立的过渡读法同批执行(§126 PN-10),21.1.0 – 22.x 失去物料见证;此前 **0.97.0 抬版**(CC-715,与服务端 7.126.0 / 引擎 7.49.5 底线同批;§124 PK-1):本包根入口原样转口 sdk 21.1.0 的两只决断口门种常量 `APPROVAL_DECIDE_GATE_KINDS` / `PLAN_REVIEW_GATE_KINDS`(21.0.0 上不存在 ⇒ 运行期 import 失败),门种判官由它们的构建期生成物派生,终局失败详情按 sdk 21 三臂联合读,审批卡词取 sdk 卡词闭集;此前 **0.96.0 抬版**(C-R432 ①,与服务端 / 引擎底线同号;§123 PA-1):本包源码读 sdk 20 的舰队行型 `workspaceSnapshot` 声明(19.x 上源码编译红),终帧读口按 sdk 20 五臂联合 `DoneFrameResult` 的窄化序读重放体;已发 `.d.ts` 对装 19 / 20 的消费方都编得过(两视角实测见 §123 PA-1),抬地板是支持承诺随服务端 7.125.0 锁步;此前 **0.95.0 抬版**(C-R389 ② / C-R390;§122 PK7-1):公面型取 sdk 19 的 `AskRowEndingCause` / `ApprovalSettleCause`、审批成因闭集经包根常量取,18.x 失去物料见证;此前 **0.94.0 抬版**:请求面权限模式六词、审批出处键型 `ApprovalDecidedBy`、取消成因三词 / 状态派生粗码 / 410 DENIED 组那一词都改取 sdk(17.x / 18.x 起声明;三只运行期常量经构建期生成物取),12.0.1 – 18.0.x 不再支持,§121 SP2-7;此前 **0.84.0 抬版**:12.x 声明每会话后台登记列表 `sessions.background`、能力位 `capabilities.background.listFace` 与七词闭集的后台状态型,本包三者都读(登记读口的端点门与归类口的编译期穷举),按 12.0.1 编译,11.3.0 失去物料见证;0.84.1 / 0.85.0 / 0.85.1 / 0.85.2 / 0.86.0 / 0.87.0 / 0.88.0 / 0.89.0 / 0.90.0 不动(0.86.0:sdk 14 的三处型面 BREAKING 本包已按结构读覆盖,本版 `.d.ts` 在 sdk 12.0.1 / 13.1.0 / 14.0.0 / 15.0.0 下严格编译零错误,§112y;0.90.0:地板见证矩阵改为路径列表 —— 开发依赖 12.0.1 + 15.0.0 / 15.2.0 / 15.3.0 / 16.0.0 探针树逐份验,`.d.ts` 对 sdk 16.0.0 严格编译零错,§116 SD-1)。此前 **0.80.0 曾抬到 >=11.3.0**:11.3.0 在两条回决口体上声明 `settledBy?: "policy"`、`Settlement.kind` 第十三词 `policy_refused` 与三错误码(0.80.0 至 0.83.6 都在这条地板上);**0.79.0 曾抬到 >=11.2.1**:11.2.x 声明 `capabilities.mcpProbe`、`mcpCapabilities` / `probeMcp` + `McpProbeFace`、写回执第三支 `stillLive: "unknown"`,11.2.1 再补 `TaskRequest.approverPosture` 与审批帧键 `mandated`(型面 + 运行期键锚),本包按 11.2.1 编译,11.0.1 失去物料见证;**0.78.0 曾抬到 >=11.0.1**:11.x 声明 `DeniedBy` 第十词 `read_boundary`、`rules.write` 200 体按 `stillLive` 判别联合、`RemovalLiveness` / `RuleWriteRequest` / `RuleWriteResult` / `RuleWriteBehavior` 包根导出、`TaskRequest.excludeAllTools`,本包按 11.0.1 编译,9.8.1 失去物料见证;**0.75.0 曾抬到 >=9.8.1**:9.8.x 声明 `Capabilities.deviceExecutor.management?`,9.7.1 失去物料见证;**0.74.0 曾抬到 >=9.7.1**:9.7.x 追平的六处型面是本包 0.73.3 起的编译基线,且 9.6.0 失去物料见证;**0.71.0 曾抬到 >=9.6.0**:`tool_disclosure` / `tool_progress` 两帧型与 `ToolApprovalFrame.readRootCandidate` 自 9.6.0 起;0.69.0 曾抬到 >=9.4.0(`reasoning_end` / `lastLegMcp`),0.60.0 抬到 >=8.4.0;地板由 `scripts/run-sdk-floor-test.mjs` 的 `FLOOR` 与 public-surface 门 C-CC-3「不低于见证到的最低实装版」双钉)| `package.json` `peerDependencies` |
|
|
24
24
|
| peer:会话词汇表 | `@sema-agent/agent-types` **>=0.3.0**(type-only,零运行时;0.71.0 抬版:devDep 与 peer 同步,type-superset 门 ④ 撞名预警对着 0.3.0 的 .d.ts 求值) | 同上 |
|
|
25
25
|
| peer:mods 内核(可选) | `@sema-agent/mods-kernel` **>=7.54.0**(**可选 peer**:`peerDependenciesMeta` optional;只在子路径入口 `./mods` 用,根入口零引用;0.101.0 新增;开发依赖与引擎同版精确钉(版本以 `package.json` `devDependencies` 为准),范围接受 ≠ 已验证,已验证 = 转口门逐代矩阵的列;§129 MK-2) | `package.json` `peerDependencies` / `peerDependenciesMeta` |
|
|
@@ -9733,6 +9733,100 @@ installCoreValuePorts({ resolveAutonomousLoopPrompt, loosenReasons, combinePolic
|
|
|
9733
9733
|
|
|
9734
9734
|
**包侧缺口:** ① 出包面注释存量(别仓名 / 票号 / 帖号 / 过程词)与卫生门判据太窄(CC-100)—— 方案候拍板(dist 去注释 vs 手清),0.77.2 · ② `DeniedBy` 第十词 `read_boundary` / `teamName` / `stillLive` 三词随 sdk 10 型面在 0.78.0 吸收(CC-106)· ③ `capabilities.mcpProbe` 候 core 7.26.0 #951 → server 7.93.0(CC-74)。
|
|
9735
9735
|
|
|
9736
|
+
## §133 🆕 0.104.1(2026-10-30)— 悬挂审批在说呈卡协议的服务端上恢复全卡 · 压缩后后台任务表的行带读句尾巴也照认(`EngineTaskStatusAttachment` 加可选位 `read`)(读器收开卡帧两形 · 两形同一个活卡入口 · 卡外事实读帧顶层)· `LivePendingAskView.frame` 放宽为两形联合(型面 BREAKING)
|
|
9737
|
+
|
|
9738
|
+
> 本段行前缀 AR(CC-1127;AR-1 读器收开卡帧两形 · AR-2 两形同一个 join 键 · AR-3 旧族形逐字节同前 · AR-4 两形之外才出盲卡)。🔴 §132 及以前的段不在本段射程。
|
|
9739
|
+
> **规则**:`livePending[].frame` 是这只 ask **开卡投递的那只帧**,哪一族都是(服务端 7.133.0 起一只 ask 一个帧族;类型包 `LivePendingRow.frame` 是两形联合,判别位 `type`)。本包只认开卡帧两形之一 —— 旧族 `tool_approval`、呈卡族 v1 `approval_request`(类型包判别器 `isApprovalRequestFrameV1`)—— 且 `frame.approvalId` 与行的 `approvalId` 相等;两形同走一个活卡入口(同一张卡口、同一张持有表、同一只 `respond`、身份键 = 行的 `approvalId`);卡内事实读卡面(旧族 = 帧自己,呈卡族 = `card`),卡外活面事实读帧顶层(两族同名同读器)。
|
|
9740
|
+
> 这一条规则让几样东西变少:「`frame` 缺席」的来源只剩坏形一种(修前呈卡族开卡帧也落进盲卡)· 卡外活面事实在卡投影核里只有一种读法(读活面载体;修前按腿写死「只有活卡帧腿读」)· 读不出登记表里活面三键(强制位 / 强制词 / 出身词)只列一次(修前混在活卡帧那一行的卡面键里)· 读不出登记按「读的位即登记」一条律(v1 卡腿补上它真读的卡面顶层真人位)· 持有身份的一问签名与卡投影读同一处(通用卡腿两边都不读卡外事实)· 零新卡口、零新 chrome 臂、零新卡词、零新导出名。
|
|
9741
|
+
|
|
9742
|
+
### 133a. 处置表(逐项 consumed / declined / pending)
|
|
9743
|
+
|
|
9744
|
+
| 项 | 来源 | 处置 | 变化 | 三端读点 |
|
|
9745
|
+
|---|---|---|---|---|
|
|
9746
|
+
| **AR-1** `livePending[].frame` 的呈卡族形 `approval_request`(说呈卡协议的部署上恒是它:卡内事实 —— 工具名 / 入参 / 调用 id / 风险 / 问类对 / 记不住位 / 规则候选 / 子代两键 —— 在 `card`,卡外活面事实在帧顶层) | 服务端 7.133.0(类型包 25.0.0 起声明联合) | consumed | 读器收它(v1 判别器整只过才收);`surfaceSuspendedAskAndRespond` 交给活卡入口 `surfaceToolApprovalFrameAndRespond` ⇒ 全卡:入参可见、编辑后批准照常转发、`respond` 恰一次、身份键 = 行的 `approvalId`;卡面按 v1 腿读(与 `approvalCardFactsOfV1` 同核同腿);强制位 / 强制词 / 出身词 / 探测原因 / 读根候选 / 授予清单 / 分类器未裁读帧顶层 | 用 `surfaceSuspendedAskAndRespond` 出悬挂卡的端零改动;自己读 `row.frame` 字段的端先判 `frame.type` |
|
|
9747
|
+
| **AR-2** `frame.approvalId === approvalId`(两形上服务端同立的不变式) | 服务端 7.87.0 | consumed(join 键) | 两形同一道闸;不等 ⇒ 丢该位、不丢行、不计坏行 ⇒ 盲卡 | — |
|
|
9748
|
+
| **AR-3** 旧族形 `tool_approval` | 服务端 7.87.0 | consumed(不变) | 读器闸与卡入参逐字节同 0.104.0(包侧门以 0.104.0 产物铸的金样逐字节比) | 零动作 |
|
|
9749
|
+
| **AR-4** 两形之外:呈卡族版本认不出(`schemaVersion` ≠ 1 / `kind` 不是 `permission` / 卡面缺席或坏形)、卡外闭集词在类型包词表之外(判别器整只判否)、消卡帧、`type` 不认识、非对象 | — | consumed(盲卡) | 丢该位不丢行;盲卡形与修前同(`argsUnavailable` + 一句;编辑后批准整次不发) | — |
|
|
9750
|
+
| 活卡入口 `surfaceToolApprovalFrameAndRespond` 的第一参 | — | consumed(只放宽) | 收 `ToolApprovalFrame \| ApprovalRequestFrame`;呈卡族 v1 ⇒ v1 腿,版本认不出 ⇒ 通用卡腿(卡面载荷读不出、卡外事实不读、窗三键按未知形信封读,与宿主那一路同律);持有身份(停驻行腿没有审批 id 时按 run + 调用 + 一问签名认):调用 id / 子代源 run / 问类对读卡面,出身词 / 强制词读帧顶层,通用卡腿签名不读这两位(与它的卡投影同)⇒ 同一只审批经停驻行腿进来不出第二张卡 | 零动作(流内帧腿照旧只交旧族帧) |
|
|
9751
|
+
| 呈卡族悬挂卡上的作答通路两位(可兑规则候选 / 会话放行位) | — | declined(本版;收紧方向) | 按 v1 腿:候选落只读位 `ruleOffersReadOnly`、不盖 `allowSessionCarried`(`respond` 其实收这两样;本版不开) | 想在这类卡上给「本会话放行」/「不再询问」的端本版不给 |
|
|
9752
|
+
| 卡外活面里的授予摘要 / 缺席词(`boundGrantDigest` / `boundGrantAbsence`)与扩展发起者 `requestedBy` | 服务端 7.133.0 / 7.138.0 | declined(本版) | 授予绑定三态照读卡面(呈卡族卡面不带 ⇒ `unreadable`,放宽三行关);`requestedBy` 不上卡入参(与活卡帧同,§132 SV-7) | — |
|
|
9753
|
+
|
|
9754
|
+
### 133b. 缺席语义与坏形处置(逐键)
|
|
9755
|
+
|
|
9756
|
+
- **`frame` 缺席**(视图上):只有坏形一种来源 —— 两形都判别不过、呈卡族版本认不出、或 id 对不上;**不是**「老服务端」(7.87.0 起恒在,底线之上)。⇒ 盲卡:卡上明说看不到入参(`argsUnavailable` + 说明句),编辑后批准整次不发(结局 `edit_refused`)。
|
|
9757
|
+
- **卡外活面键缺席**(呈卡族帧顶层):卡上如实缺席,不折 `false`、不编词 —— 缺席不是「不是强制的」那句断言。断连重放回来的帧(服务端起服接管的行)顶层这几位本来就不带,行上也没有,卡上同样缺席。
|
|
9758
|
+
- **卡外活面键在场却读不出**(只在原型链上 / 访问器;JSON 回体不会出现):卡上不长出,键名记进 `unreadableEvidence`(强制位 / 强制词 / 出身词三键)⇒ 自动作答判定答 `unknown`(`card_unreadable`),不可放。
|
|
9759
|
+
- **卡面顶层真人位在场却不是 `true`**(v1 卡契约里真人位在 `risk` 下、顶层不带;真人位读器顶层与 `risk` 两处都读):卡上不长出 `requiresRealApproval`,键名记进 `unreadableEvidence` ⇒ 判定答 `unknown`(收紧;宿主经 `approvalCardFactsOfV1` 拼的卡同一律)。`risk` 子树坏形照旧记 `risk`。
|
|
9760
|
+
- **卡外闭集词在类型包词表之外**(例:比类型包新的强制词):类型包判别器整只判否 ⇒ 盲卡(不猜卡形;类型包词表跟上后再认)。
|
|
9761
|
+
- **`card.args` 缺席**(入参超上限被省略 `argsOmitted`):与 v1 投影口同 —— 回落形 + `argsUnavailable` + 省略说明句,编辑闸关。
|
|
9762
|
+
- **窗三键**:悬挂出卡口不传 `windowIsCurrent` ⇒ 不盖窗(与修前同;行上只有绝对死线)。
|
|
9763
|
+
- **`card` 是访问器**(宿主自造的帧;JSON 回体不会出现):呈卡口只读 `card` 一次,类型包判别器与卡面载荷用同一份读数;这一次读到的不是对象 ⇒ 通用卡(卡面载荷读不出),不抛、不零呈卡。
|
|
9764
|
+
|
|
9765
|
+
### 133c. 黑盒判据
|
|
9766
|
+
|
|
9767
|
+
包侧门 `scripts/run-live-pending-ask-test.mjs` S7(AR0 – AR9)离线覆盖下表四格〔包〕;下表另列真机复测三栏:**呈卡**(悬挂卡这一张长什么样)/ **决断后**(答完后行离开列表、卡撤一次)/ **孤儿**(行消失后屏上无残卡)。
|
|
9768
|
+
|
|
9769
|
+
| 格 | 场景 | 判据 | 复测三栏 |
|
|
9770
|
+
|---|---|---|---|
|
|
9771
|
+
| G-AR1 呈卡族悬挂卡全卡〔包〕 | 服务端 ≥ 7.133.0、运行声明呈卡族;后台子代撞审批门时宿主回合已结束(ask 转悬挂);端经 `surfaceSuspendedAskAndRespond` 出卡 | 卡上入参是 `card.args`、无「看不到入参」句、无 `argsUnavailable`;编辑后批准 ⇒ `respond` 恰一次、id = 行的 `approvalId`、带改写;帧顶层 `mandated: true` 的卡 `approvalIsMandated(card) === true`、规则车道自动作答判定答必问 | 呈卡:0.104.0 上是盲卡(入参不可见、编辑被拒),本版是全卡 · 决断后:行离开列表、跟踪器报 `gone` 恰一次 · 孤儿:无残卡 |
|
|
9772
|
+
| G-AR2 id 对不上〔包〕 | 夹具行的 `frame.approvalId` ≠ 行的 `approvalId` | 视图无 `frame`、行照常、`dropped` 不变;出盲卡、带改写的批准零 `respond` | 呈卡:盲卡 · 决断后 / 孤儿:同 G-AR1 |
|
|
9773
|
+
| G-AR3 旧族不变〔包〕 | 旧族服务端,或运行只声明旧族 | 卡入参与 0.104.0 逐字节同 | 三栏与 0.104.0 同 |
|
|
9774
|
+
| G-AR4 两形之外〔包〕 | 夹具行 `frame` 为 `schemaVersion: 2` 的呈卡帧 / 消卡帧 / `type` 不认识 / 卡外闭集词表外 | 视图无 `frame`、出盲卡、带改写的批准零 `respond` | 呈卡:盲卡 · 决断后 / 孤儿:同 G-AR1 |
|
|
9775
|
+
|
|
9776
|
+
### 133e. 成文改口(§64 / §85 已发段保持原文;以下各条自本版起取代原句)
|
|
9777
|
+
|
|
9778
|
+
- §64(0.73.2)处置表首行:旧句「`livePending[].frame?` = 本来会 emit 的那只 `tool_approval` 帧 …… 三道闸:帧判别器 ∧ `type === 'tool_approval'` ∧ approvalId 相等」⇒ 新句「`livePending[].frame?` = 这只 ask 开卡投递的那只帧(旧族 `tool_approval` 或呈卡族 `approval_request`,按 `type` 判别)…… 两道闸:开卡帧两形之一 ∧ approvalId 相等」。
|
|
9779
|
+
- §85 `mandated` 缺席四形之 ④:旧句「这是 `livePending` 的盲卡(老 server,`frame` 缺席)」⇒ 新句「这是 `livePending` 的盲卡(`frame` 坏形被丢;7.87.0 起 `frame` 恒在,呈卡族形自本版起不再落进盲卡)」。
|
|
9780
|
+
|
|
9781
|
+
### 133-BT. 后台任务表行的读法(行前缀 BT:BT-1 带尾巴的行照认 · BT-2 带尾巴的 `parked` 行 · BT-3 无尾巴形逐字节同前 · BT-4 未知短语与表尾行照旧不认)
|
|
9782
|
+
|
|
9783
|
+
> **规则**:引擎在上下文压缩后给模型的后台任务表,一行是 `- [<id>] Task "<描述,至多 80 字符>" <状态短语>`,行上带读法时末尾再接 ` — <读句>`(引擎侧铸点 `task-notification` 的 `renderBackgroundTaskTable`,引擎 7.60.0 核过原文)。本包的行读法只有一条:前缀 + 状态短语 + 可选恰一枚尾巴;尾巴从短语之后第一枚 ` — ` 起、取到行尾、原样(不解析路径、不切分、不修剪内部),投成 `read`。
|
|
9784
|
+
> 这一条规则让几样东西变少:「行尾恰是短语」这一条读法退场(修前带尾巴的行整条丢、一张表全带尾巴时整段退成通用行)· 带尾巴与不带尾巴的行不再是两套认法 · `parked` 行带不带尾巴同一个认法。零新导出名、零新 wire 键、零新 chrome 臂。
|
|
9785
|
+
|
|
9786
|
+
**处置表(逐项 consumed / declined / pending)**
|
|
9787
|
+
|
|
9788
|
+
| 项 | 来源 | 处置 | 变化 | 三端读点 |
|
|
9789
|
+
|---|---|---|---|---|
|
|
9790
|
+
| **BT-1** 行尾巴 ` — <读句>`(例:`output: Read <路径>` / `result: ReadToolResult (ref "<ref>")`) | 引擎 7.60.0 `renderBackgroundTaskTable` | consumed | 带尾巴的行照认;尾巴原文进 `EngineTaskStatusAttachment.read?: string`;其余位(`taskId` / `status` / `description`)与无尾巴的同一行逐字同 | 渲染 `task_status` 附件的端可选读 `read`(显示读法);不读的端零动作 |
|
|
9791
|
+
| **BT-2** 带尾巴的 `parked` 行(短语 `parked awaiting an out-of-band approval — do NOT re-issue the gated call` 自带一枚 ` — `,尾巴在整句短语之后) | 同上 | consumed | 状态 `parked`(0.73.3 起就在联合里;修前只有无尾巴的这一行认得)带不带尾巴都认 | 同 BT-1 |
|
|
9792
|
+
| **BT-3** 7.53.0 形(无尾巴)的三态行 / 其余状态词行 | 引擎 7.53.0 起 | consumed(不变) | 逐字节同 0.104.0(包侧门把冻结的 0.104.0 实现当参照,定种子随机池逐批 `deepStrictEqual`) | 零动作 |
|
|
9793
|
+
| **BT-4** 未知状态短语(含带尾巴的;例:`blocked` / `cancelled`)、裸 `parked`、表尾 `(+N more background tasks, not listed here)` 行 | 引擎 | declined(不认) | 照旧闭合失败:该行不投,不连累同表其余行;整表一行都认不出才退通用 `steering_injected` 行(不隐形) | 零动作 |
|
|
9794
|
+
|
|
9795
|
+
**缺席语义(逐键)**
|
|
9796
|
+
|
|
9797
|
+
- **`read` 缺席**:引擎没带(老引擎 / 该任务无读法)或行上没有尾巴;**不是**空串、也不是值为 `undefined` 的键 —— 对象上就没有这个键。
|
|
9798
|
+
- **`read` 在场**:就是预览里尾巴的原文。🔴 引擎把预览裁在 220 个字符(含一段约 126 字符的前言),**最后一行的尾巴可能是被裁短的前缀** —— 当显示文本用,不当可寻址的句柄;本包不猜全貌、不补省略号。
|
|
9799
|
+
- **描述里自带引号 / ` — `**:状态短语恒在行内**最后一枚**「引号 + 空格」之后,描述 = 它之前的全部(与修前同向:最长描述);读句里不再出现「引号 + 空格」(引擎铸的读句形不含;含 ⇒ 最后一枚「引号 + 空格」落在读句里、其后不是状态短语 ⇒ 不认)。描述自带「引号 + 短语 + ` — `」时:真状态是已知短语 ⇒ 认对真状态、描述原样;真状态是表外词(例:`blocked`)⇒ 不认,不会把描述里的短语读成状态;描述自带「引号 + 短语 + ` — `」且该行又被预览上限截断的,读法歧义,不可判别(包侧缺口 ①)。
|
|
9800
|
+
- **描述带换行**(描述是模型写的、原样进表):表里某一行(不是最后一个非空行)是 `- [<id>] Task "` 开头而描述的引号没合上 ⇒ 行界不可信,**整段退通用行**、不投任何任务行 —— 换行之后的文字仿出的「行」不长出任务身份;最后一个非空行被预览上限裁断的,照旧只跳过自己、不连累前面的行。
|
|
9801
|
+
- **尾巴里再出现 ` — `**:第一枚之后整段都是 `read`,不猜切分。
|
|
9802
|
+
- **行首尾空白**:整行首尾空白照旧修剪(CRLF 行尾不进 `read`)。
|
|
9803
|
+
|
|
9804
|
+
**黑盒判据**
|
|
9805
|
+
|
|
9806
|
+
| 格 | 场景 | 判据 |
|
|
9807
|
+
|---|---|---|
|
|
9808
|
+
| G-BT1 带尾巴的行照认 | 引擎 ≥ 7.60.0;后台任务带输出文件;触发一次压缩 | 压缩后第一拍的转录里,预览放得下的每个后台任务一条 `task_status` 附件(不是一条 `steering_injected`),`read` 与引擎表上该行尾巴逐字同(注意预览上限:最后一行的 `read` 可能是前缀) |
|
|
9809
|
+
| G-BT2 全带尾巴不退通用行 | 同上,所有任务都带读法 | 普通视图渲出任务行(修前整段退成只在详细视图出现的通用行) |
|
|
9810
|
+
| G-BT3 `parked` 行 | 后台子代停在待批检查点后压缩 | 该任务行状态 `parked`,带不带尾巴都在 |
|
|
9811
|
+
| G-BT4 无尾巴形不变 | 引擎 7.53.0 形(行上无读法) | 附件键集 `type / taskId / taskType / status / description / deltaSummary`,无 `read` 键,与 0.104.0 逐字节同 |
|
|
9812
|
+
| G-BT5 描述带换行 | 后台命令的描述里有换行、换行后的文字长得像一行任务行;触发一次压缩 | 压缩后第一拍的转录里没有以那段文字里的编号为身份的 `task_status` 附件(整段退通用行,预览原样) |
|
|
9813
|
+
|
|
9814
|
+
**三端升级必读(三条)**
|
|
9815
|
+
|
|
9816
|
+
1. **换钉 `^0.104.1`**:终端 1.0.158 的已知限制条目(带尾巴的行被整条丢)随换钉可退;终端里对压缩后 `parked` 行的核对改读本包 `steeringInjectedToAttachments`,并补一格带尾巴的形;想显示读法的渲染器读 `task_status` 附件的可选位 `read`。
|
|
9817
|
+
2. **web-client / desktop 零变化**:不渲 `task_status` 附件的端不动;`read` 是可选位,既有读 `status` / `description` 的代码照旧。
|
|
9818
|
+
3. **peer 不动**:零新 wire 键、零新导出名;引擎不带尾巴的形逐字节同前。
|
|
9819
|
+
|
|
9820
|
+
**包侧缺口:** ① 描述自带「引号 + 短语 + ` — `」且该行被预览上限截断时可能读成带尾巴的行(读法歧义,不可判别;真实描述里不出现该形)· ② 预览上限下最后一行的 `read` 可能是被裁短的前缀,本包原样交出、不标记截断(要不要在预览满额时整条丢掉最后一行的 `read`,待定)· ③ 预览上限 220 字符(前言占约 126)让压缩后一次回显只放得下前一两行 —— 模型收到的是完整的表,回显只是预览(by-design)。
|
|
9821
|
+
|
|
9822
|
+
### 133y. 三端升级必读(三条:① 编译红必改 ② 行为变 ③ 可选 / 零动作)
|
|
9823
|
+
|
|
9824
|
+
- ① **编译红必改**:直读 `LivePendingAskView.frame` 字段(`frame.args` / `frame.toolName` / `frame.toolCallId` ……)的端先判 `frame.type`(`'tool_approval'` 读帧顶层,`'approval_request'` 读 `frame.card`)—— 与类型包 25.0.0 `LivePendingRow.frame` 同一个迁移点;只把 `row` 交给 `surfaceSuspendedAskAndRespond` 的端零改动。
|
|
9825
|
+
- ② **行为变**:说呈卡协议的服务端(≥ 7.133.0、运行声明呈卡族)上,悬挂审批卡由盲卡变全卡 —— 入参可见、编辑后批准照常发出、强制位 / 出身词等卡外事实上卡(强制卡在自动作答判定上答必问);这类卡不给「本会话放行」与可兑规则候选(候选只读)。对「悬挂卡恒 `argsUnavailable`」做断言的测试改断言。
|
|
9826
|
+
- ③ **可选 / 零动作**:旧族服务端 / 只声明旧族的运行逐字节同前;流内帧腿零变。
|
|
9827
|
+
|
|
9828
|
+
**包侧缺口:** ① 呈卡族悬挂卡不给会话放行与可兑规则候选(`respond` 收这两样;本版按 v1 腿收紧)· ② 授予绑定三态在呈卡族卡上恒读作 `unreadable`(帧顶层的授予摘要 / 缺席词本版不读)· ③ 宿主自己经 `approvalCardFactsOfV1(frame.card)` 拼的呈卡族卡只读卡面、不读帧顶层的卡外活面事实(强制位等要宿主自读帧顶层;活卡入口这一路已读)· ④ 比类型包新的卡外闭集词让整只帧判否 ⇒ 盲卡(类型包词表跟上后再认)。
|
|
9829
|
+
|
|
9736
9830
|
## §132 🆕 0.104.0(2026-10-30)— 换钉到引擎 7.60.0 · MCP 失败类 `host_refused`(型面 BREAKING:闭集变宽)· 状态帧座位位 `seat` · 单张图片上限改读引擎准入表 · 成本分项不再具名引擎已删的一行 · 通知码册 106 → 110 · 内核契约 6 的身份读数 · 停驻终局的结果帧恒走错误臂(行为变)· 权限三桶来源表的组内序按写序(行为变,窄)· 宿主设置源的三处成文(层读 `doc` 的契约 · 记忆关断声明词 · 有界传输重试的覆盖面;零代码改动) · 钩子车道的类依据改读引擎要求真批准的门类集(行为变,只放宽) · 服务端 7.139.0 / 类型包 30.0.0 提货:换绑前态改读执行放置(型面 BREAKING)· 会话行条件写 · 换绑 409 子代形 · 后台行子会话 id · 退役 RL-290 孤儿型 `ManagedPolicyReading`(型面 BREAKING,SV-11)
|
|
9737
9831
|
|
|
9738
9832
|
> 本段一组行前缀 PK(CC-1076;PK-1 MCP 宿主管道与 `host_refused` · PK-2 状态帧 `seat` · PK-3 图片准入表 · PK-4 引擎退役 / 删员对位 · PK-5 闭集与码册 · PK-6 内核契约与零读点 · PK-7 会话规则名册一步按引擎的匹配读法 + 值级端口第二十一件 `ruleNameCovers`)。🔴 §131 及以前不在本段射程,一字不碰。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/client-core",
|
|
3
|
-
"version": "0.104.
|
|
3
|
+
"version": "0.104.1",
|
|
4
4
|
"description": "Client-side session runtime shared by every sema human client (TUI / web / desktop): sema wire frames (AgentEvent) -> CC session vocabulary (SDKMessage) with dual-plane output (transcript/chrome), deterministic transcript ids, lane discipline as a type, and the notification/dedup ledgers. Every CC-skin shape is collected here so the wire itself stays neutral. Renamed from @sema-agent/wire-cc-adapter (0.1.x).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|