docs: fix release smoke test failures

This commit is contained in:
Turtle
2026-08-13 13:43:43 +08:00
parent be96840412
commit 62080d49c2
66 changed files with 1150 additions and 124 deletions

View File

@@ -2,5 +2,5 @@
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write docs/subsystems/core.md
core.md: 6eda80cbd164168c3c4a846c9bc50a8fc12b0c92
core.zh.md: 14c2e78bc3fff959fb0c0040eae0f382985ecdf4
core.md: d14ad52e57572d5b0b110a0b16ff734e3499bdf5
core.zh.md: 9ace28731f2532f571b66f2e7f6a3ea4a2c4e345

View File

@@ -257,6 +257,8 @@ Its full fields, the `defineTool`/`ValueSchemaSpec`/`ParameterSchemaSpec` typed
Two patterns recur across every subsystem and are documented once, here.
<a id="the-map--derived-union-pattern"></a>
### The `…Map → derived-union` pattern
Almost every extensible sum type in the harness follows one pattern: an interface keyed by a discriminant tag (the `…Map`), from which the union is derived with `keyof`. Plugins add variants by **declaration merging** — no edit to the owning package.

View File

@@ -263,6 +263,8 @@ type SessionStartSource = 'startup' | 'resume' | 'clear' | 'compact'
两个模式在每个子系统中反复出现,只在此处记录一次。
<a id="the-map--derived-union-pattern"></a>
### `…Map → derived-union` 模式
harness 中几乎所有可扩展的和类型都遵循同一模式:一个以判别标签为键的接口(`…Map`),联合类型由 `keyof` 派生。插件通过**声明合并**添加变体——无需修改拥有该类型的包。

View File

@@ -2,5 +2,5 @@
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write docs/subsystems/llm-streaming.md
llm-streaming.md: 0f395245332e735c04997bd1ca82f66fa9286104
llm-streaming.md: 0d3a0d53c875c9d943146ba44b775d81fc9cae01
llm-streaming.zh.md: fbaa47d14d57e7377be4db6ecaa04f11997572a6

View File

@@ -151,6 +151,8 @@ type ContextFormed =
| { readonly form: 'recall' }
```
<a id="streamchunk--the-raw-protocol"></a>
## `StreamChunk` — the raw protocol
A streaming response interleaves several typed blocks (text, reasoning, multiple tool calls). `index` ties each delta to its block; `block-end` carries the fully-assembled `ContentBlock` so consumers don't have to re-assemble deltas themselves. It is a **closed** discriminated union — a `switch` over `type` ends with `assertNever`, so adding a variant breaks compilation at every consumer that must handle it.

View File

@@ -2,5 +2,5 @@
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write docs/subsystems/persistence.md
persistence.md: fde8348d64a200eda5133abf66deedee6be09857
persistence.zh.md: a2a836d81d153a2697c1d739345501e7e6770eef
persistence.md: 5b1b224e419aca205baba69894ed64467b8fb4e1
persistence.zh.md: a91e7d66b92270c82287d054e619b665e96ea206

View File

@@ -36,6 +36,8 @@ interface SessionLocation {
}
```
<a id="sessionheader--metadata-beside-the-log"></a>
## `SessionHeader` — metadata beside the log
Per-session metadata travels **separately** from the event log: format version, cwd, lineage, and the seed boundary are storage concerns, not conversation events, so they stay out of `SessionEventMap` and never reach `deriveMessages()`. The header is attached to a `Session` via `session.header`.

View File

@@ -36,6 +36,8 @@ interface SessionLocation {
}
```
<a id="sessionheader--metadata-beside-the-log"></a>
## `SessionHeader`:日志旁的元数据
每个会话的元数据与事件日志**分开**存储格式版本、cwd、血统与 seed 边界是存储层关注点而非对话事件,因此不进入 `SessionEventMap`,也不会到达 `deriveMessages()`。header 通过 `session.header` 附加到 `Session` 上。

View File

@@ -2,5 +2,5 @@
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write docs/subsystems/session.md
session.md: 4c40971fe58952b32635aa5eb767a42f73108b00
session.md: 1741b0dbf8b79187e2777cba17dbfb7c5a698b94
session.zh.md: d958b03fcdad91b58cc277636e599cce46a2c7fb

View File

@@ -149,6 +149,8 @@ interface TodoItem {
}
```
<a id="the-request-header-event-requestheader"></a>
### The request header event: `request/header`
The request envelope — the `EpochHeader` (call config + markers for adapter-supplied defaults + rendered system prompt + assembled tool schemas) — is logged session state, so every conversation request is a pure function of the log (the reconstructability Agent Note). A full `request/header` snapshot with reason `'initial'` or `'resume'` records each loop-instance boundary; a later changed request records another full snapshot with reason `'change'`. `foldRequestHeader(events)` reconstructs the header by selecting the latest snapshot. The event is not a `SurfaceEventType`: it produces no LLM message.